3838 Shutdown (context.Context ) error
3939 }
4040 // RequestTracer standardizes tracer implementations for non-MCP requests.
41- RequestTracer [ReqT any , SpanT any ] interface {
41+ RequestTracer [ReqT any , RespT any , RespChunkT any ] interface {
4242 // StartSpanAndInjectHeaders starts a span and injects trace context into the header mutation.
4343 //
4444 // Parameters:
@@ -49,25 +49,25 @@ type (
4949 // - body: contains the original raw request body as a byte slice.
5050 //
5151 // Returns nil unless the span is sampled.
52- StartSpanAndInjectHeaders (ctx context.Context , headers map [string ]string , carrier propagation.TextMapCarrier , req * ReqT , body []byte ) SpanT
52+ StartSpanAndInjectHeaders (ctx context.Context , headers map [string ]string , carrier propagation.TextMapCarrier , req * ReqT , body []byte ) Span [ RespT , RespChunkT ]
5353 }
5454 // ChatCompletionTracer creates spans for OpenAI chat completion requests.
55- ChatCompletionTracer = RequestTracer [openai.ChatCompletionRequest , ChatCompletionSpan ]
55+ ChatCompletionTracer = RequestTracer [openai.ChatCompletionRequest , openai. ChatCompletionResponse , openai. ChatCompletionResponseChunk ]
5656 // CompletionTracer creates spans for OpenAI completion requests.
57- CompletionTracer = RequestTracer [openai.CompletionRequest , CompletionSpan ]
57+ CompletionTracer = RequestTracer [openai.CompletionRequest , openai. CompletionResponse , openai. CompletionResponse ]
5858 // EmbeddingsTracer creates spans for OpenAI embeddings requests.
59- EmbeddingsTracer = RequestTracer [openai.EmbeddingRequest , EmbeddingsSpan ]
59+ EmbeddingsTracer = RequestTracer [openai.EmbeddingRequest , openai. EmbeddingResponse , struct {} ]
6060 // ImageGenerationTracer creates spans for OpenAI image generation requests.
61- ImageGenerationTracer = RequestTracer [openaisdk.ImageGenerateParams , ImageGenerationSpan ]
61+ ImageGenerationTracer = RequestTracer [openaisdk.ImageGenerateParams , openaisdk. ImagesResponse , struct {} ]
6262 // RerankTracer creates spans for rerank requests.
63- RerankTracer = RequestTracer [cohere.RerankV2Request , RerankSpan ]
63+ RerankTracer = RequestTracer [cohere.RerankV2Request , cohere. RerankV2Response , struct {} ]
6464)
6565
6666type (
6767 // Span standardizes span interfaces, supporting both streaming and non-streaming endpoints.
68- Span [ChunkT any , RespT any ] interface {
68+ Span [RespT any , RespChunkT any ] interface {
6969 // RecordResponseChunk records streaming response chunks. Implementations that do not support streaming should provide a no-op implementation.
70- RecordResponseChunk (resp * ChunkT )
70+ RecordResponseChunk (resp * RespChunkT )
7171 // RecordResponse records the response attributes to the span.
7272 RecordResponse (resp * RespT )
7373 // EndSpanOnError finalizes and ends the span with an error status.
@@ -76,21 +76,21 @@ type (
7676 EndSpan ()
7777 }
7878 // ChatCompletionSpan represents an OpenAI chat completion.
79- ChatCompletionSpan = Span [openai.ChatCompletionResponseChunk , openai.ChatCompletionResponse ]
79+ ChatCompletionSpan = Span [openai.ChatCompletionResponse , openai.ChatCompletionResponseChunk ]
8080 // CompletionSpan represents an OpenAI completion request.
8181 // Note: Completion streaming chunks are full CompletionResponse objects, not deltas like chat completions.
8282 CompletionSpan = Span [openai.CompletionResponse , openai.CompletionResponse ]
8383 // EmbeddingsSpan represents an OpenAI embeddings request. The chunk type is unused and therefore set to struct{}.
84- EmbeddingsSpan = Span [struct {}, openai.EmbeddingResponse ]
84+ EmbeddingsSpan = Span [openai.EmbeddingResponse , struct {} ]
8585 // ImageGenerationSpan represents an OpenAI image generation.
86- ImageGenerationSpan = Span [struct {}, openaisdk.ImagesResponse ]
86+ ImageGenerationSpan = Span [openaisdk.ImagesResponse , struct {} ]
8787 // RerankSpan represents a rerank request span.
88- RerankSpan = Span [struct {}, cohere.RerankV2Response ]
88+ RerankSpan = Span [cohere.RerankV2Response , struct {} ]
8989)
9090
9191type (
9292 // SpanRecorder standardizes recorder implementations for non-MCP tracers.
93- SpanRecorder [ReqT any , ChunkT any , RespT any ] interface {
93+ SpanRecorder [ReqT any , RespT any , RespChunkT any ] interface {
9494 // StartParams returns the name and options to start the span with.
9595 //
9696 // Parameters:
@@ -106,19 +106,19 @@ type (
106106 // RecordResponseOnError ends recording the span with an error status.
107107 RecordResponseOnError (span trace.Span , statusCode int , body []byte )
108108 // RecordResponseChunks records response chunk attributes to the span for streaming response.
109- RecordResponseChunks (span trace.Span , chunks []* ChunkT )
109+ RecordResponseChunks (span trace.Span , chunks []* RespChunkT )
110110 }
111111 // ChatCompletionRecorder records attributes to a span according to a semantic convention.
112- ChatCompletionRecorder = SpanRecorder [openai.ChatCompletionRequest , openai.ChatCompletionResponseChunk , openai.ChatCompletionResponse ]
112+ ChatCompletionRecorder = SpanRecorder [openai.ChatCompletionRequest , openai.ChatCompletionResponse , openai.ChatCompletionResponseChunk ]
113113 // CompletionRecorder records attributes to a span according to a semantic convention.
114114 // Note: Completion streaming chunks are full CompletionResponse objects, not deltas like chat completions.
115115 CompletionRecorder = SpanRecorder [openai.CompletionRequest , openai.CompletionResponse , openai.CompletionResponse ]
116116 // ImageGenerationRecorder records attributes to a span according to a semantic convention.
117- ImageGenerationRecorder = SpanRecorder [openaisdk.ImageGenerateParams , struct {}, openaisdk.ImagesResponse ]
117+ ImageGenerationRecorder = SpanRecorder [openaisdk.ImageGenerateParams , openaisdk.ImagesResponse , struct {} ]
118118 // EmbeddingsRecorder records attributes to a span according to a semantic convention.
119- EmbeddingsRecorder = SpanRecorder [openai.EmbeddingRequest , struct {}, openai.EmbeddingResponse ]
119+ EmbeddingsRecorder = SpanRecorder [openai.EmbeddingRequest , openai.EmbeddingResponse , struct {} ]
120120 // RerankRecorder records attributes to a span according to a semantic convention.
121- RerankRecorder = SpanRecorder [cohere.RerankV2Request , struct {}, cohere.RerankV2Response ]
121+ RerankRecorder = SpanRecorder [cohere.RerankV2Request , cohere.RerankV2Response , struct {} ]
122122)
123123
124124// NoopChunkRecorder provides a no-op RecordResponseChunks implementation for recorders that don't emit streaming chunks.
@@ -136,27 +136,27 @@ func (t NoopTracing) MCPTracer() MCPTracer {
136136
137137// ChatCompletionTracer implements Tracing.ChatCompletionTracer.
138138func (NoopTracing ) ChatCompletionTracer () ChatCompletionTracer {
139- return NoopTracer [openai.ChatCompletionRequest , ChatCompletionSpan ]{}
139+ return NoopTracer [openai.ChatCompletionRequest , openai. ChatCompletionResponse , openai. ChatCompletionResponseChunk ]{}
140140}
141141
142142// CompletionTracer implements Tracing.CompletionTracer.
143143func (NoopTracing ) CompletionTracer () CompletionTracer {
144- return NoopTracer [openai.CompletionRequest , CompletionSpan ]{}
144+ return NoopTracer [openai.CompletionRequest , openai. CompletionResponse , openai. CompletionResponse ]{}
145145}
146146
147147// EmbeddingsTracer implements Tracing.EmbeddingsTracer.
148148func (NoopTracing ) EmbeddingsTracer () EmbeddingsTracer {
149- return NoopTracer [openai.EmbeddingRequest , EmbeddingsSpan ]{}
149+ return NoopTracer [openai.EmbeddingRequest , openai. EmbeddingResponse , struct {} ]{}
150150}
151151
152152// ImageGenerationTracer implements Tracing.ImageGenerationTracer.
153153func (NoopTracing ) ImageGenerationTracer () ImageGenerationTracer {
154- return NoopTracer [openaisdk.ImageGenerateParams , ImageGenerationSpan ]{}
154+ return NoopTracer [openaisdk.ImageGenerateParams , openaisdk. ImagesResponse , struct {} ]{}
155155}
156156
157157// RerankTracer implements Tracing.RerankTracer.
158158func (NoopTracing ) RerankTracer () RerankTracer {
159- return NoopTracer [cohere.RerankV2Request , RerankSpan ]{}
159+ return NoopTracer [cohere.RerankV2Request , cohere. RerankV2Response , struct {} ]{}
160160}
161161
162162// Shutdown implements Tracing.Shutdown.
@@ -165,10 +165,10 @@ func (NoopTracing) Shutdown(context.Context) error {
165165}
166166
167167// NoopTracer implements RequestTracer without producing spans.
168- type NoopTracer [ReqT any , SpanT any ] struct {}
168+ type NoopTracer [ReqT any , RespT any , RespChunkT any ] struct {}
169169
170170// StartSpanAndInjectHeaders implements RequestTracer.StartSpanAndInjectHeaders.
171- func (NoopTracer [ReqT , SpanT ]) StartSpanAndInjectHeaders (context.Context , map [string ]string , propagation.TextMapCarrier , * ReqT , []byte ) SpanT {
172- var zero SpanT
171+ func (NoopTracer [ReqT , RespT , RespChunkT ]) StartSpanAndInjectHeaders (context.Context , map [string ]string , propagation.TextMapCarrier , * ReqT , []byte ) Span [ RespT , RespChunkT ] {
172+ var zero Span [ RespT , RespChunkT ]
173173 return zero
174174}
0 commit comments