# What each framework records for one question that uses one tool (2 model requests)

Spring AI 2.0.1: model and client given an ObservationRegistry plus DefaultMeterObservationHandler and ChatModelMeterObservationHandler (the two Spring Boot registers for you).
  gen_ai.client.operation [TIMER]  error=none, gen_ai.operation.name=chat, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.system=openai
  gen_ai.client.operation.active [LONG_TASK_TIMER]  gen_ai.operation.name=chat, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=none, gen_ai.system=openai
  gen_ai.client.token.usage [COUNTER]  gen_ai.operation.name=chat, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.system=openai, gen_ai.token.type=input
  gen_ai.client.token.usage [COUNTER]  gen_ai.operation.name=chat, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.system=openai, gen_ai.token.type=output
  gen_ai.client.token.usage [COUNTER]  gen_ai.operation.name=chat, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.system=openai, gen_ai.token.type=total
  okhttp.requests [TIMER]  error=none, outcome=SUCCESS
  okhttp.requests.active [LONG_TASK_TIMER]  outcome=UNKNOWN
  spring.ai.advisor [TIMER]  error=none, gen_ai.operation.name=framework, gen_ai.system=spring_ai, spring.ai.kind=advisor
  spring.ai.advisor.active [LONG_TASK_TIMER]  gen_ai.operation.name=framework, gen_ai.system=spring_ai, spring.ai.kind=advisor
  spring.ai.chat.client [TIMER]  error=none, gen_ai.operation.name=framework, gen_ai.system=spring_ai, spring.ai.kind=chat_client
  spring.ai.chat.client.active [LONG_TASK_TIMER]  gen_ai.operation.name=framework, gen_ai.system=spring_ai, spring.ai.kind=chat_client
  spring.ai.tool [TIMER]  error=none, gen_ai.operation.name=execute_tool, gen_ai.system=spring_ai, spring.ai.kind=tool_call
  spring.ai.tool.active [LONG_TASK_TIMER]  gen_ai.operation.name=execute_tool, gen_ai.system=spring_ai, spring.ai.kind=tool_call

LangChain4j 1.22.0, no listener registered: 0 meters.

LangChain4j 1.22.0 with TracingChatInterceptor, the listener from the original article (it still compiles and runs):
  llm.request.latency [TIMER]  model=gpt-6.1-sol
  llm.tokens.input [COUNTER]  model=gpt-6.1-sol
  llm.tokens.output [COUNTER]  model=gpt-6.1-sol

LangChain4j 1.22.0 with the shipped MicrometerMetricsChatModelListener (langchain4j-micrometer-metrics 1.22.0-beta32):
  gen_ai.client.token.usage [DISTRIBUTION_SUMMARY]  gen_ai.operation.name=chat, gen_ai.provider.name=openai, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.token.type=input
  gen_ai.client.token.usage [DISTRIBUTION_SUMMARY]  gen_ai.operation.name=chat, gen_ai.provider.name=openai, gen_ai.request.model=gpt-6.1-sol, gen_ai.response.model=gpt-6.1-sol, gen_ai.token.type=output
