@@ -116,4 +116,61 @@ import { wrapOpenAI } from "langsmith/wrappers";
116116await traceableCallOpenAI (messages );
117117```
118118
119+ ``` java Java
120+ import com.langchain.smith.wrappers.openai.OpenTelemetryConfig ;
121+ import com.langchain.smith.wrappers.openai.WrappedOpenAIClient ;
122+ import com.openai.models.ChatModel ;
123+ import com.openai.models.chat.completions.ChatCompletion ;
124+ import com.openai.models.chat.completions.ChatCompletionCreateParams ;
125+ import io.opentelemetry.api.GlobalOpenTelemetry ;
126+ import io.opentelemetry.api.trace.Span ;
127+ import io.opentelemetry.api.trace.Tracer ;
128+ import io.opentelemetry.context.Scope ;
129+
130+ public class MetadataTagsExample {
131+ public static void main (String [] args ) {
132+ // Configure OpenTelemetry
133+ OpenTelemetryConfig . builder()
134+ .fromEnv()
135+ .build();
136+
137+ // Get tracer
138+ Tracer tracer = GlobalOpenTelemetry . get(). getTracer(" my-app" );
139+ WrappedOpenAIClient client = WrappedOpenAIClient . fromEnv();
140+
141+ // Create a span with metadata and tags
142+ Span span = tracer. spanBuilder(" openai_call" )
143+ .setAttribute(" langsmith.span.kind" , " llm" )
144+ // Add metadata as span attributes
145+ .setAttribute(" my-key" , " my-value" )
146+ .setAttribute(" environment" , " production" )
147+ // Add tags as a comma-separated string
148+ .setAttribute(" langsmith.tags" , " my-tag,another-tag" )
149+ .startSpan();
150+
151+ try (Scope scope = span. makeCurrent()) {
152+ ChatCompletion completion = client. chat(). completions(). create(
153+ ChatCompletionCreateParams . builder()
154+ .model(ChatModel . GPT_4O_MINI )
155+ .addSystemMessage(" You are a helpful assistant." )
156+ .addUserMessage(" Hello!" )
157+ .build()
158+ );
159+
160+ // Add dynamic metadata during execution
161+ span. setAttribute(" response-length" ,
162+ completion. choices(). get(0 ). message(). content(). orElse(" " ). length());
163+ span. setAttribute(" user-id" , " user-123" );
164+
165+ System . out. println(completion. choices(). get(0 ). message(). content(). orElse(" " ));
166+ } finally {
167+ span. end();
168+ }
169+
170+ client. close();
171+ OpenTelemetryConfig . flush(5 , java.util.concurrent. TimeUnit . SECONDS );
172+ }
173+ }
174+ ```
175+
119176</CodeGroup >
0 commit comments