SetByCaller for GAS dosent work!

Hello i have been trying to get SetByCaller for my GAS ability to work for hours now, but i keep getting errors even though i at one point got it to remove stamina and apply cooldown tags, this error i got:
LogGameplayEffects: Error: FGameplayEffectSpec::GetMagnitude called for Data Ability.Cost.Stamina on Def Default__SCostEffect when magnitude had not yet been set by caller.

So now i have stepped back and written the following, and im calling CommitAbility to check if we have enough stamina. Whats missing is setting the cost and cooldown duration which the cost and cooldown class expect.
USDashAbility::USDashAbility()
{
InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
NetExecutionPolicy = EGameplayAbilityNetExecutionPolicy::LocalPredicted;

AbilityTags.AddTag(SGameplayTags::Ability_Dash);
ActivationOwnedTags.AddTag(SGameplayTags::Ability_Dash);
ActivationBlockedTags.AddTag(SGameplayTags::Ability_Dash_Cooldown);
ActivationBlockedTags.AddTag(SGameplayTags::Ability_Dash);

CostGameplayEffectClass = USCostEffect::StaticClass();
CooldownGameplayEffectClass = USCooldownEffect::StaticClass();

DashStrength = 126900000.0f;   // Force
DashDuration = 0.45f;    // How long to apply

StaminaCost = 20.0f;
CooldownDuration = 0.3f;

}

void USDashAbility::ActivateAbility(const FGameplayAbilitySpecHandle Handle, const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilityActivationInfo ActivationInfo, const FGameplayEventData* TriggerEventData)
{
UAbilitySystemComponent* AbilitySystemComp = GetAbilitySystemComponentFromActorInfo();
if (!AbilitySystemComp)
{
EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
return;
}

if (!CommitAbility(Handle, ActorInfo, ActivationInfo))
{
    EndAbility(Handle, ActorInfo, ActivationInfo, true, true);
    return;
}

// dash logic

USDashAbilityTask* DashAbilityTask = USDashAbilityTask::CreateDashTask(this, TEXT("DashTask"), DashDirection, ChosenDirection ,DashStrength, DashDuration);

// Bind finish to clean up ability
DashAbilityTask->OnFinished.AddDynamic(this, &USDashAbility::OnDashFinished);

// Activate the task (begins ticking)
DashAbilityTask->ReadyForActivation();

}

and this is the cooldown and cost class:
USCostEffect::USCostEffect()
{

DurationPolicy = EGameplayEffectDurationType::Instant;

// Create a modifier for Stamina
FGameplayModifierInfo StaminaModifier;
StaminaModifier.Attribute = USPlayerAttributeSet::GetStaminaAttribute();
StaminaModifier.ModifierOp = EGameplayModOp::Additive;

// Use Set by Caller for the magnitude
FSetByCallerFloat SetByCaller;
SetByCaller.DataTag = SGameplayTags::Ability_Cost_Stamina;

FGameplayEffectModifierMagnitude ModMagnitude(SetByCaller);
StaminaModifier.ModifierMagnitude = ModMagnitude;

Modifiers.Add(StaminaModifier);

}

USCooldownEffect::USCooldownEffect()
{
DurationPolicy = EGameplayEffectDurationType::HasDuration;

// Use Set by Caller for duration
FSetByCallerFloat SetByCaller;
SetByCaller.DataTag = SGameplayTags::Ability_Dash;

DurationMagnitude = FGameplayEffectModifierMagnitude(SetByCaller);

}