openlit 1.34.18__py3-none-any.whl → 1.34.20__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,7 +8,7 @@ from wrapt import wrap_function_wrapper
8
8
  from openlit.instrumentation.anthropic.anthropic import messages
9
9
  from openlit.instrumentation.anthropic.async_anthropic import async_messages
10
10
 
11
- _instruments = ('anthropic >= 0.21.0',)
11
+ _instruments = ("anthropic >= 0.21.0",)
12
12
 
13
13
  class AnthropicInstrumentor(BaseInstrumentor):
14
14
  """
@@ -19,32 +19,30 @@ class AnthropicInstrumentor(BaseInstrumentor):
19
19
  return _instruments
20
20
 
21
21
  def _instrument(self, **kwargs):
22
- application_name = kwargs.get('application_name', 'default')
23
- environment = kwargs.get('environment', 'default')
24
- tracer = kwargs.get('tracer')
25
- event_provider = kwargs.get('event_provider')
26
- metrics = kwargs.get('metrics_dict')
27
- pricing_info = kwargs.get('pricing_info', {})
28
- capture_message_content = kwargs.get('capture_message_content', False)
29
- disable_metrics = kwargs.get('disable_metrics')
30
- version = importlib.metadata.version('anthropic')
31
-
32
- #sync
22
+ version = importlib.metadata.version("anthropic")
23
+ environment = kwargs.get("environment", "default")
24
+ application_name = kwargs.get("application_name", "default")
25
+ tracer = kwargs.get("tracer")
26
+ pricing_info = kwargs.get("pricing_info", {})
27
+ capture_message_content = kwargs.get("capture_message_content", False)
28
+ metrics = kwargs.get("metrics_dict")
29
+ disable_metrics = kwargs.get("disable_metrics")
30
+
31
+ # sync
33
32
  wrap_function_wrapper(
34
- 'anthropic.resources.messages',
35
- 'Messages.create',
36
- messages(version, environment, application_name,
37
- tracer, event_provider, pricing_info, capture_message_content, metrics, disable_metrics),
33
+ "anthropic.resources.messages",
34
+ "Messages.create",
35
+ messages(version, environment, application_name, tracer, pricing_info,
36
+ capture_message_content, metrics, disable_metrics),
38
37
  )
39
38
 
40
- #async
39
+ # async
41
40
  wrap_function_wrapper(
42
- 'anthropic.resources.messages',
43
- 'AsyncMessages.create',
44
- async_messages(version, environment, application_name,
45
- tracer, event_provider, pricing_info, capture_message_content, metrics, disable_metrics),
41
+ "anthropic.resources.messages",
42
+ "AsyncMessages.create",
43
+ async_messages(version, environment, application_name, tracer, pricing_info,
44
+ capture_message_content, metrics, disable_metrics),
46
45
  )
47
46
 
48
47
  def _uninstrument(self, **kwargs):
49
- # Proper uninstrumentation logic to revert patched methods
50
48
  pass
@@ -2,7 +2,6 @@
2
2
  Module for monitoring Anthropic API calls.
3
3
  """
4
4
 
5
- import logging
6
5
  import time
7
6
  from opentelemetry.trace import SpanKind
8
7
  from openlit.__helpers import (
@@ -16,13 +15,9 @@ from openlit.instrumentation.anthropic.utils import (
16
15
  )
17
16
  from openlit.semcov import SemanticConvention
18
17
 
19
- # Initialize logger for logging potential issues and operations
20
- logger = logging.getLogger(__name__)
21
-
22
- def messages(version, environment, application_name, tracer, event_provider,
23
- pricing_info, capture_message_content, metrics, disable_metrics):
18
+ def messages(version, environment, application_name, tracer, pricing_info, capture_message_content, metrics, disable_metrics):
24
19
  """
25
- Generates a telemetry wrapper for GenAI function call
20
+ Generates a telemetry wrapper for Anthropic Messages.create calls.
26
21
  """
27
22
 
28
23
  class TracedSyncStream:
@@ -38,24 +33,21 @@ def messages(version, environment, application_name, tracer, event_provider,
38
33
  kwargs,
39
34
  server_address,
40
35
  server_port,
41
- **args,
42
36
  ):
43
37
  self.__wrapped__ = wrapped
44
38
  self._span = span
45
39
  self._span_name = span_name
46
- self._llmresponse = ''
47
- self._response_id = ''
48
- self._response_model = ''
49
- self._finish_reason = ''
50
- self._input_tokens = ''
51
- self._output_tokens = ''
52
- self._tool_arguments = ''
53
- self._tool_id = ''
54
- self._tool_name = ''
40
+ self._llmresponse = ""
41
+ self._response_id = ""
42
+ self._response_model = ""
43
+ self._finish_reason = ""
44
+ self._input_tokens = 0
45
+ self._output_tokens = 0
46
+ self._tool_arguments = ""
47
+ self._tool_id = ""
48
+ self._tool_name = ""
55
49
  self._tool_calls = None
56
- self._response_role = ''
57
-
58
- self._args = args
50
+ self._response_role = ""
59
51
  self._kwargs = kwargs
60
52
  self._start_time = time.time()
61
53
  self._end_time = None
@@ -86,34 +78,31 @@ def messages(version, environment, application_name, tracer, event_provider,
86
78
  return chunk
87
79
  except StopIteration:
88
80
  try:
89
- with tracer.start_as_current_span(self._span_name, kind= SpanKind.CLIENT) as self._span:
81
+ with self._span:
90
82
  process_streaming_chat_response(
91
83
  self,
92
84
  pricing_info=pricing_info,
93
85
  environment=environment,
94
86
  application_name=application_name,
95
87
  metrics=metrics,
96
- event_provider=event_provider,
97
88
  capture_message_content=capture_message_content,
98
89
  disable_metrics=disable_metrics,
99
90
  version=version
100
91
  )
101
-
102
92
  except Exception as e:
103
93
  handle_exception(self._span, e)
104
- logger.error("Error in trace creation: %s", e)
105
94
  raise
106
95
 
107
96
  def wrapper(wrapped, instance, args, kwargs):
108
97
  """
109
- Wraps the GenAI function call.
98
+ Wraps the Anthropic Messages.create call.
110
99
  """
111
100
 
112
- streaming = kwargs.get('stream', False)
113
- server_address, server_port = set_server_address_and_port(instance, 'api.anthropic.com', 443)
114
- request_model = kwargs.get('model', 'claude-3-5-sonnet-latest')
101
+ streaming = kwargs.get("stream", False)
102
+ server_address, server_port = set_server_address_and_port(instance, "api.anthropic.com", 443)
103
+ request_model = kwargs.get("model", "claude-3-5-sonnet-latest")
115
104
 
116
- span_name = f'{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}'
105
+ span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
117
106
 
118
107
  # pylint: disable=no-else-return
119
108
  if streaming:
@@ -126,23 +115,27 @@ def messages(version, environment, application_name, tracer, event_provider,
126
115
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
127
116
  start_time = time.time()
128
117
  response = wrapped(*args, **kwargs)
129
- response = process_chat_response(
130
- response=response,
131
- request_model=request_model,
132
- pricing_info=pricing_info,
133
- server_port=server_port,
134
- server_address=server_address,
135
- environment=environment,
136
- application_name=application_name,
137
- metrics=metrics,
138
- event_provider=event_provider,
139
- start_time=start_time,
140
- span=span,
141
- capture_message_content=capture_message_content,
142
- disable_metrics=disable_metrics,
143
- version=version,
144
- **kwargs
145
- )
118
+
119
+ try:
120
+ response = process_chat_response(
121
+ response=response,
122
+ request_model=request_model,
123
+ pricing_info=pricing_info,
124
+ server_port=server_port,
125
+ server_address=server_address,
126
+ environment=environment,
127
+ application_name=application_name,
128
+ metrics=metrics,
129
+ start_time=start_time,
130
+ span=span,
131
+ capture_message_content=capture_message_content,
132
+ disable_metrics=disable_metrics,
133
+ version=version,
134
+ **kwargs
135
+ )
136
+
137
+ except Exception as e:
138
+ handle_exception(span, e)
146
139
 
147
140
  return response
148
141
 
@@ -2,7 +2,6 @@
2
2
  Module for monitoring Anthropic API calls.
3
3
  """
4
4
 
5
- import logging
6
5
  import time
7
6
  from opentelemetry.trace import SpanKind
8
7
  from openlit.__helpers import (
@@ -16,18 +15,14 @@ from openlit.instrumentation.anthropic.utils import (
16
15
  )
17
16
  from openlit.semcov import SemanticConvention
18
17
 
19
- # Initialize logger for logging potential issues and operations
20
- logger = logging.getLogger(__name__)
21
-
22
- def async_messages(version, environment, application_name, tracer, event_provider,
23
- pricing_info, capture_message_content, metrics, disable_metrics):
18
+ def async_messages(version, environment, application_name, tracer, pricing_info, capture_message_content, metrics, disable_metrics):
24
19
  """
25
- Generates a telemetry wrapper for GenAI function call
20
+ Generates a telemetry wrapper for Anthropic AsyncMessages.create calls.
26
21
  """
27
22
 
28
23
  class TracedAsyncStream:
29
24
  """
30
- Wrapper for streaming responses to collect telemetry.
25
+ Wrapper for async streaming responses to collect telemetry.
31
26
  """
32
27
 
33
28
  def __init__(
@@ -38,24 +33,21 @@ def async_messages(version, environment, application_name, tracer, event_provide
38
33
  kwargs,
39
34
  server_address,
40
35
  server_port,
41
- **args,
42
36
  ):
43
37
  self.__wrapped__ = wrapped
44
38
  self._span = span
45
39
  self._span_name = span_name
46
- self._llmresponse = ''
47
- self._response_id = ''
48
- self._response_model = ''
49
- self._finish_reason = ''
50
- self._input_tokens = ''
51
- self._output_tokens = ''
52
- self._tool_arguments = ''
53
- self._tool_id = ''
54
- self._tool_name = ''
40
+ self._llmresponse = ""
41
+ self._response_id = ""
42
+ self._response_model = ""
43
+ self._finish_reason = ""
44
+ self._input_tokens = 0
45
+ self._output_tokens = 0
46
+ self._tool_arguments = ""
47
+ self._tool_id = ""
48
+ self._tool_name = ""
55
49
  self._tool_calls = None
56
- self._response_role = ''
57
-
58
- self._args = args
50
+ self._response_role = ""
59
51
  self._kwargs = kwargs
60
52
  self._start_time = time.time()
61
53
  self._end_time = None
@@ -86,34 +78,31 @@ def async_messages(version, environment, application_name, tracer, event_provide
86
78
  return chunk
87
79
  except StopAsyncIteration:
88
80
  try:
89
- with tracer.start_as_current_span(self._span_name, kind= SpanKind.CLIENT) as self._span:
81
+ with self._span:
90
82
  process_streaming_chat_response(
91
83
  self,
92
84
  pricing_info=pricing_info,
93
85
  environment=environment,
94
86
  application_name=application_name,
95
87
  metrics=metrics,
96
- event_provider=event_provider,
97
88
  capture_message_content=capture_message_content,
98
89
  disable_metrics=disable_metrics,
99
90
  version=version
100
91
  )
101
-
102
92
  except Exception as e:
103
93
  handle_exception(self._span, e)
104
- logger.error("Error in trace creation: %s", e)
105
94
  raise
106
95
 
107
96
  async def wrapper(wrapped, instance, args, kwargs):
108
97
  """
109
- Wraps the GenAI function call.
98
+ Wraps the Anthropic AsyncMessages.create call.
110
99
  """
111
100
 
112
- streaming = kwargs.get('stream', False)
113
- server_address, server_port = set_server_address_and_port(instance, 'api.anthropic.com', 443)
114
- request_model = kwargs.get('model', 'claude-3-5-sonnet-latest')
101
+ streaming = kwargs.get("stream", False)
102
+ server_address, server_port = set_server_address_and_port(instance, "api.anthropic.com", 443)
103
+ request_model = kwargs.get("model", "claude-3-5-sonnet-latest")
115
104
 
116
- span_name = f'{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}'
105
+ span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
117
106
 
118
107
  # pylint: disable=no-else-return
119
108
  if streaming:
@@ -126,23 +115,27 @@ def async_messages(version, environment, application_name, tracer, event_provide
126
115
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
127
116
  start_time = time.time()
128
117
  response = await wrapped(*args, **kwargs)
129
- response = process_chat_response(
130
- response=response,
131
- request_model=request_model,
132
- pricing_info=pricing_info,
133
- server_port=server_port,
134
- server_address=server_address,
135
- environment=environment,
136
- application_name=application_name,
137
- metrics=metrics,
138
- event_provider=event_provider,
139
- start_time=start_time,
140
- span=span,
141
- capture_message_content=capture_message_content,
142
- disable_metrics=disable_metrics,
143
- version=version,
144
- **kwargs
145
- )
118
+
119
+ try:
120
+ response = process_chat_response(
121
+ response=response,
122
+ request_model=request_model,
123
+ pricing_info=pricing_info,
124
+ server_port=server_port,
125
+ server_address=server_address,
126
+ environment=environment,
127
+ application_name=application_name,
128
+ metrics=metrics,
129
+ start_time=start_time,
130
+ span=span,
131
+ capture_message_content=capture_message_content,
132
+ disable_metrics=disable_metrics,
133
+ version=version,
134
+ **kwargs
135
+ )
136
+
137
+ except Exception as e:
138
+ handle_exception(span, e)
146
139
 
147
140
  return response
148
141