Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pkgs/sdk/server-ai/src/Interfaces/ILdAiConfigTracker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ public interface ILdAiConfigTracker
/// </summary>
/// <remarks>Records at most once per Tracker; further calls are ignored.</remarks>
/// <param name="durationMs">the duration in milliseconds</param>
public void TrackDuration(float durationMs);
public void TrackDuration(double durationMs);

/// <summary>
/// Wraps a callable operation, measures its wall-clock duration, and records the result via
Expand Down
10 changes: 5 additions & 5 deletions pkgs/sdk/server-ai/src/LdAiConfigTracker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ public MetricSummary Summary
}

/// <inheritdoc/>
public void TrackDuration(float durationMs)
public void TrackDuration(double durationMs)
{
if (Interlocked.CompareExchange(ref _durationMs,
new StrongBox<double>(durationMs), null) != null)
Expand All @@ -183,7 +183,7 @@ public async Task<T> TrackDurationOf<T>(Func<Task<T>> operation)
finally
{
sw.Stop();
TrackDuration((float)sw.Elapsed.TotalMilliseconds);
TrackDuration(sw.Elapsed.TotalMilliseconds);
}
}

Expand Down Expand Up @@ -273,7 +273,7 @@ public async Task<T> TrackMetricsOf<T>(Func<T, AiMetrics> metricsExtractor, Func
catch (Exception)
{
sw.Stop();
TrackDuration((float)sw.Elapsed.TotalMilliseconds);
TrackDuration(sw.Elapsed.TotalMilliseconds);
TrackError();
throw;
}
Expand All @@ -291,12 +291,12 @@ public async Task<T> TrackMetricsOf<T>(Func<T, AiMetrics> metricsExtractor, Func
}
catch (Exception)
{
TrackDuration((float)operationElapsedMs);
TrackDuration(operationElapsedMs);
throw;
}

// Honor an explicit duration override from the caller; fall back to the measured value.
TrackDuration((float)(metrics.DurationMs ?? operationElapsedMs));
TrackDuration(metrics.DurationMs ?? operationElapsedMs);

if (metrics.Success)
{
Expand Down
22 changes: 11 additions & 11 deletions pkgs/sdk/server-ai/test/LdAiConfigTrackerTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ public void TrackDataIncludesRunId()

var tracker = config.CreateTracker();

tracker.TrackDuration(1.0f);
tracker.TrackDuration(1.0);
mockClient.Verify(x => x.Track("$ld:ai:duration:total", context,
It.Is<LdValue>(d =>
d.Get("runId").Type == LdValueType.String &&
Expand All @@ -130,7 +130,7 @@ public void CanTrackDuration()
var config = BuildConfig(mockClient.Object, flagKey, context);
var tracker = config.CreateTracker();

tracker.TrackDuration(1.0f);
tracker.TrackDuration(1.0);
mockClient.Verify(x => x.Track("$ld:ai:duration:total", context,
It.Is<LdValue>(d => MatchesTrackData(d, flagKey, config)), 1.0f), Times.Once);
}
Expand Down Expand Up @@ -368,8 +368,8 @@ public void DuplicateTrackDurationIsIgnored()

var tracker = config.CreateTracker();

tracker.TrackDuration(1.0f);
tracker.TrackDuration(2.0f);
tracker.TrackDuration(1.0);
tracker.TrackDuration(2.0);

mockClient.Verify(x => x.Track("$ld:ai:duration:total", context,
It.IsAny<LdValue>(), It.IsAny<double>()), Times.Once);
Expand Down Expand Up @@ -583,8 +583,8 @@ public void ConfigCreateTrackerReturnsNewTrackerWithFreshRunId()
var tracker1 = config.CreateTracker();
var tracker2 = config.CreateTracker();

tracker1.TrackDuration(10.0f);
tracker2.TrackDuration(20.0f);
tracker1.TrackDuration(10.0);
tracker2.TrackDuration(20.0);

string runId1 = null;
string runId2 = null;
Expand Down Expand Up @@ -615,11 +615,11 @@ public void ConfigCreateTrackerReturnsTrackerWithIndependentTrackingState()

// Track duration on the first tracker (exhausts at-most-once)
var tracker1 = config.CreateTracker();
tracker1.TrackDuration(1.0f);
tracker1.TrackDuration(1.0);

// A second tracker has fresh tracking state
var tracker2 = config.CreateTracker();
tracker2.TrackDuration(2.0f);
tracker2.TrackDuration(2.0);

// Both calls should have gone through
mockClient.Verify(x => x.Track("$ld:ai:duration:total", context,
Expand Down Expand Up @@ -868,7 +868,7 @@ public void SummaryReflectsTrackedMetrics()
Assert.Null(summary.TimeToFirstTokenMs);

// Track some metrics
tracker.TrackDuration(100.5f);
tracker.TrackDuration(100.5);
tracker.TrackTimeToFirstToken(10.2f);
tracker.TrackFeedback(Feedback.Positive);
tracker.TrackSuccess();
Expand Down Expand Up @@ -978,8 +978,8 @@ public void TrackDurationIsAtMostOnceUnderConcurrency()
var tracker = config.CreateTracker();

var barrier = new Barrier(2);
var t1 = Task.Run(() => { barrier.SignalAndWait(); tracker.TrackDuration(123.0f); });
var t2 = Task.Run(() => { barrier.SignalAndWait(); tracker.TrackDuration(123.0f); });
var t1 = Task.Run(() => { barrier.SignalAndWait(); tracker.TrackDuration(123.0); });
var t2 = Task.Run(() => { barrier.SignalAndWait(); tracker.TrackDuration(123.0); });
Task.WaitAll(t1, t2);

var calls = mockClient.Invocations.Count(inv =>
Expand Down
Loading