Skip to content

Add finish_reason to the chat-complete client spans #286

Description

@maragubot

The Google client span (google.chat_complete) records rich response metadata — token usage (ai.prompt_tokens, ai.completion_tokens, etc.), ai.time_to_first_token_ms, ai.model — but not the response finish reason.

Without it, a MAX_TOKENS truncation is invisible at the source. This bites consumers that combine MaxCompletionTokens with a ResponseSchema: when the model hits the token cap mid-JSON, the output is truncated, and the consumer's json.Unmarshal fails with a generic parse error several layers up — with no signal that the real cause was truncation rather than a transient API error.

Request

Set the response finish reason as a span attribute, e.g. ai.finish_reason, to match the existing ai.* namespace.

For the Google client, the value is available on the final streamed chunk via chunk.Candidates[0].FinishReason, so it fits naturally in the same streaming defer in clients/google/chat_complete.go that already emits the usage-metadata attributes (around the lastUsage block).

Consistency

Ideally the same attribute is added to the Anthropic (anthropic.chat_complete) and OpenAI (openai.chat_complete) client spans, mapping each provider's stop/finish field to a common ai.finish_reason, so the attribute is portable across backends.


Filed via Claude Code: https://claude.ai/code/session_01SxCXEQU7DLKw6p9B7kJ5Ej

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions