Non-streaming ChatCompletion surfaces Ferro-specific fields (trace_id, provider, latency_ms), but ChatCompletionChunk (ferrolabsai/types.py) only carries id / object / created / model / choices — the Ferro metadata is dropped for streaming responses.
If the gateway includes these on the final streaming chunk (e.g. via the x-trace-id header or a final-chunk body field), they should be captured and surfaced.
Why it matters
trace_id on streaming responses is the join key for LangSmith / Langfuse observability bridges — without it, streamed calls can't be correlated.
Non-streaming
ChatCompletionsurfaces Ferro-specific fields (trace_id,provider,latency_ms), butChatCompletionChunk(ferrolabsai/types.py) only carriesid / object / created / model / choices— the Ferro metadata is dropped for streaming responses.If the gateway includes these on the final streaming chunk (e.g. via the
x-trace-idheader or a final-chunk body field), they should be captured and surfaced.Why it matters
trace_idon streaming responses is the join key for LangSmith / Langfuse observability bridges — without it, streamed calls can't be correlated.