-
Notifications
You must be signed in to change notification settings - Fork 2.2k
.NET: expose OpenTelemetryAgent.DefaultSourceName #7815
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
48a3e97
e9d0aa3
2a44f9f
496a212
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -41,6 +41,18 @@ public sealed class OpenTelemetryAgent : DelegatingAIAgent, IDisposable | |
| // inner agent not directly but rather via OpenTelemetryChatClient, which wraps a ForwardingChatClient that in turn | ||
| // calls back into the inner agent. | ||
|
|
||
| /// <summary> | ||
| /// Gets the default <see cref="ActivitySource"/> name used by <see cref="OpenTelemetryAgent"/> when no source | ||
| /// name is supplied to the constructor. | ||
| /// </summary> | ||
| /// <remarks> | ||
| /// Pass this value to the tracing pipeline (for example, <c>TracerProviderBuilder.AddSource</c>) to subscribe to | ||
| /// the spans emitted by agents that use the default source name, instead of hardcoding the literal name. This is | ||
| /// a property rather than a constant so that the value is read at run time: a consumer that upgrades the package | ||
| /// picks up the current source name without recompiling. | ||
| /// </remarks> | ||
| public static string DefaultSourceName => OpenTelemetryConsts.DefaultSourceName; | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could we also update /// <param name="sourceName">
/// An optional source name used to identify telemetry data from this agent.
/// When specified, register the same value with <c>TracerProviderBuilder.AddSource</c> so the tracing pipeline subscribes to these spans.
/// When omitted, <see cref="OpenTelemetryAgent.DefaultSourceName"/> is used.
/// </param>This makes the required pairing visible at the API call site and prevents silent loss of custom-source spans.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done in 2a44f9f, using your wording for |
||
|
|
||
| /// <summary>The <see cref="OpenTelemetryChatClient"/> providing the bulk of the telemetry.</summary> | ||
| private readonly OpenTelemetryChatClient _otelClient; | ||
| /// <summary>The provider name extracted from <see cref="AIAgentMetadata"/>.</summary> | ||
|
|
@@ -62,8 +74,9 @@ public sealed class OpenTelemetryAgent : DelegatingAIAgent, IDisposable | |
| /// <summary>Initializes a new instance of the <see cref="OpenTelemetryAgent"/> class.</summary> | ||
| /// <param name="innerAgent">The underlying <see cref="AIAgent"/> to be augmented with telemetry capabilities.</param> | ||
| /// <param name="sourceName"> | ||
| /// An optional source name that will be used to identify telemetry data from this agent. | ||
| /// If not provided, a default source name will be used for telemetry identification. | ||
| /// An optional source name used to identify telemetry data from this agent. | ||
| /// When specified, register the same value with <c>TracerProviderBuilder.AddSource</c> so the tracing pipeline | ||
| /// subscribes to these spans. When omitted, <see cref="DefaultSourceName"/> is used. | ||
| /// </param> | ||
| /// <exception cref="ArgumentNullException"><paramref name="innerAgent"/> is <see langword="null"/>.</exception> | ||
| /// <remarks> | ||
|
|
@@ -80,8 +93,9 @@ public OpenTelemetryAgent(AIAgent innerAgent, string? sourceName = null) | |
| /// <summary>Initializes a new instance of the <see cref="OpenTelemetryAgent"/> class.</summary> | ||
| /// <param name="innerAgent">The underlying <see cref="AIAgent"/> to be augmented with telemetry capabilities.</param> | ||
| /// <param name="sourceName"> | ||
| /// An optional source name that will be used to identify telemetry data from this agent. | ||
| /// If not provided, a default source name will be used for telemetry identification. | ||
| /// An optional source name used to identify telemetry data from this agent. | ||
| /// When specified, register the same value with <c>TracerProviderBuilder.AddSource</c> so the tracing pipeline | ||
| /// subscribes to these spans. When omitted, <see cref="DefaultSourceName"/> is used. | ||
| /// </param> | ||
| /// <param name="autoWireChatClient"> | ||
| /// When <see langword="true"/> and the inner agent is a <see cref="ChatClientAgent"/>, the underlying | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we clarify that
AddSourceandUseOpenTelemetrymust use the same source name? The default pairing isAddSource(OpenTelemetryAgent.DefaultSourceName)withUseOpenTelemetry(). For a custom source, both calls need the same value:Without matching them, provider silently misses agent spans.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Added in 2a44f9f. The usage section now states up front that the name passed to
AddSourcemust match the source name the agent emits under, otherwise the provider silently receives no agent spans, followed by the default pairing and then your custom-source example with the same value on both calls.One extra change in that snippet: the existing example wrapped the agent with
baseAgent.WithOpenTelemetry(), but that extension only exists forWorkflowBuilder, not forAIAgent, so the snippet did not compile. Both examples now usebaseAgent.AsBuilder().UseOpenTelemetry(...).Build().