Observability - Prompt content and completion as span events #1237
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Currently, prompt content and completion can optionally be included as span attributes when model observability is enabled. That was a temporary solution because span attributes are not ideal for potentially long text.
This PR stores such content as span events instead whenever the underlying tracing technology supports them (i.e. OpenTelemetry), and it falls back on span attributes when the underlying tracing technology doesn't support span events (i.e. Zipkin/Brave).
The OpenTelemetry Semantic Conventions for GenAI also defines span events for the prompt content and completion data in the current release (1.27.0): https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/#events
The solution in this PR relies on Reflection. It can be simplified if and when this issue is solved: micrometer-metrics/tracing#808.
In the future, when Micrometer supports span events, the fallback solution based on span attributes can be removed entirely (see: micrometer-metrics/micrometer#5238).