openlit 1.34.30__py3-none-any.whl → 1.34.32__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.
Files changed (168) hide show
  1. openlit/__helpers.py +235 -86
  2. openlit/__init__.py +19 -14
  3. openlit/_instrumentors.py +2 -1
  4. openlit/evals/all.py +50 -21
  5. openlit/evals/bias_detection.py +47 -20
  6. openlit/evals/hallucination.py +53 -22
  7. openlit/evals/toxicity.py +50 -21
  8. openlit/evals/utils.py +54 -30
  9. openlit/guard/all.py +61 -19
  10. openlit/guard/prompt_injection.py +34 -14
  11. openlit/guard/restrict_topic.py +46 -15
  12. openlit/guard/sensitive_topic.py +34 -14
  13. openlit/guard/utils.py +58 -22
  14. openlit/instrumentation/ag2/__init__.py +113 -6
  15. openlit/instrumentation/ag2/ag2.py +459 -17
  16. openlit/instrumentation/ag2/async_ag2.py +459 -17
  17. openlit/instrumentation/ag2/utils.py +475 -31
  18. openlit/instrumentation/ai21/__init__.py +43 -14
  19. openlit/instrumentation/ai21/ai21.py +47 -21
  20. openlit/instrumentation/ai21/async_ai21.py +47 -21
  21. openlit/instrumentation/ai21/utils.py +299 -78
  22. openlit/instrumentation/anthropic/__init__.py +21 -4
  23. openlit/instrumentation/anthropic/anthropic.py +28 -17
  24. openlit/instrumentation/anthropic/async_anthropic.py +28 -17
  25. openlit/instrumentation/anthropic/utils.py +145 -35
  26. openlit/instrumentation/assemblyai/__init__.py +11 -2
  27. openlit/instrumentation/assemblyai/assemblyai.py +15 -4
  28. openlit/instrumentation/assemblyai/utils.py +120 -25
  29. openlit/instrumentation/astra/__init__.py +43 -10
  30. openlit/instrumentation/astra/astra.py +28 -5
  31. openlit/instrumentation/astra/async_astra.py +28 -5
  32. openlit/instrumentation/astra/utils.py +151 -55
  33. openlit/instrumentation/azure_ai_inference/__init__.py +43 -10
  34. openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +53 -21
  35. openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +53 -21
  36. openlit/instrumentation/azure_ai_inference/utils.py +307 -83
  37. openlit/instrumentation/bedrock/__init__.py +21 -4
  38. openlit/instrumentation/bedrock/bedrock.py +63 -25
  39. openlit/instrumentation/bedrock/utils.py +139 -30
  40. openlit/instrumentation/chroma/__init__.py +89 -16
  41. openlit/instrumentation/chroma/chroma.py +28 -6
  42. openlit/instrumentation/chroma/utils.py +167 -51
  43. openlit/instrumentation/cohere/__init__.py +63 -18
  44. openlit/instrumentation/cohere/async_cohere.py +63 -24
  45. openlit/instrumentation/cohere/cohere.py +63 -24
  46. openlit/instrumentation/cohere/utils.py +286 -73
  47. openlit/instrumentation/controlflow/__init__.py +35 -9
  48. openlit/instrumentation/controlflow/controlflow.py +66 -33
  49. openlit/instrumentation/crawl4ai/__init__.py +25 -10
  50. openlit/instrumentation/crawl4ai/async_crawl4ai.py +78 -31
  51. openlit/instrumentation/crawl4ai/crawl4ai.py +78 -31
  52. openlit/instrumentation/crewai/__init__.py +40 -15
  53. openlit/instrumentation/crewai/async_crewai.py +32 -7
  54. openlit/instrumentation/crewai/crewai.py +32 -7
  55. openlit/instrumentation/crewai/utils.py +159 -56
  56. openlit/instrumentation/dynamiq/__init__.py +46 -12
  57. openlit/instrumentation/dynamiq/dynamiq.py +74 -33
  58. openlit/instrumentation/elevenlabs/__init__.py +23 -4
  59. openlit/instrumentation/elevenlabs/async_elevenlabs.py +16 -4
  60. openlit/instrumentation/elevenlabs/elevenlabs.py +16 -4
  61. openlit/instrumentation/elevenlabs/utils.py +128 -25
  62. openlit/instrumentation/embedchain/__init__.py +11 -2
  63. openlit/instrumentation/embedchain/embedchain.py +68 -35
  64. openlit/instrumentation/firecrawl/__init__.py +24 -7
  65. openlit/instrumentation/firecrawl/firecrawl.py +46 -20
  66. openlit/instrumentation/google_ai_studio/__init__.py +45 -10
  67. openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +67 -44
  68. openlit/instrumentation/google_ai_studio/google_ai_studio.py +67 -44
  69. openlit/instrumentation/google_ai_studio/utils.py +180 -67
  70. openlit/instrumentation/gpt4all/__init__.py +22 -7
  71. openlit/instrumentation/gpt4all/gpt4all.py +67 -29
  72. openlit/instrumentation/gpt4all/utils.py +285 -61
  73. openlit/instrumentation/gpu/__init__.py +128 -47
  74. openlit/instrumentation/groq/__init__.py +21 -4
  75. openlit/instrumentation/groq/async_groq.py +33 -21
  76. openlit/instrumentation/groq/groq.py +33 -21
  77. openlit/instrumentation/groq/utils.py +192 -55
  78. openlit/instrumentation/haystack/__init__.py +70 -24
  79. openlit/instrumentation/haystack/async_haystack.py +28 -6
  80. openlit/instrumentation/haystack/haystack.py +28 -6
  81. openlit/instrumentation/haystack/utils.py +196 -74
  82. openlit/instrumentation/julep/__init__.py +69 -19
  83. openlit/instrumentation/julep/async_julep.py +53 -27
  84. openlit/instrumentation/julep/julep.py +53 -28
  85. openlit/instrumentation/langchain/__init__.py +74 -63
  86. openlit/instrumentation/langchain/callback_handler.py +1100 -0
  87. openlit/instrumentation/langchain_community/__init__.py +13 -2
  88. openlit/instrumentation/langchain_community/async_langchain_community.py +23 -5
  89. openlit/instrumentation/langchain_community/langchain_community.py +23 -5
  90. openlit/instrumentation/langchain_community/utils.py +35 -9
  91. openlit/instrumentation/letta/__init__.py +68 -15
  92. openlit/instrumentation/letta/letta.py +99 -54
  93. openlit/instrumentation/litellm/__init__.py +43 -14
  94. openlit/instrumentation/litellm/async_litellm.py +51 -26
  95. openlit/instrumentation/litellm/litellm.py +51 -26
  96. openlit/instrumentation/litellm/utils.py +304 -102
  97. openlit/instrumentation/llamaindex/__init__.py +267 -90
  98. openlit/instrumentation/llamaindex/async_llamaindex.py +28 -6
  99. openlit/instrumentation/llamaindex/llamaindex.py +28 -6
  100. openlit/instrumentation/llamaindex/utils.py +204 -91
  101. openlit/instrumentation/mem0/__init__.py +11 -2
  102. openlit/instrumentation/mem0/mem0.py +50 -29
  103. openlit/instrumentation/milvus/__init__.py +10 -2
  104. openlit/instrumentation/milvus/milvus.py +31 -6
  105. openlit/instrumentation/milvus/utils.py +166 -67
  106. openlit/instrumentation/mistral/__init__.py +63 -18
  107. openlit/instrumentation/mistral/async_mistral.py +63 -24
  108. openlit/instrumentation/mistral/mistral.py +63 -24
  109. openlit/instrumentation/mistral/utils.py +277 -69
  110. openlit/instrumentation/multion/__init__.py +69 -19
  111. openlit/instrumentation/multion/async_multion.py +57 -26
  112. openlit/instrumentation/multion/multion.py +57 -26
  113. openlit/instrumentation/ollama/__init__.py +39 -18
  114. openlit/instrumentation/ollama/async_ollama.py +57 -26
  115. openlit/instrumentation/ollama/ollama.py +57 -26
  116. openlit/instrumentation/ollama/utils.py +226 -50
  117. openlit/instrumentation/openai/__init__.py +156 -32
  118. openlit/instrumentation/openai/async_openai.py +147 -67
  119. openlit/instrumentation/openai/openai.py +150 -67
  120. openlit/instrumentation/openai/utils.py +657 -185
  121. openlit/instrumentation/openai_agents/__init__.py +5 -1
  122. openlit/instrumentation/openai_agents/processor.py +110 -90
  123. openlit/instrumentation/phidata/__init__.py +13 -5
  124. openlit/instrumentation/phidata/phidata.py +67 -32
  125. openlit/instrumentation/pinecone/__init__.py +48 -9
  126. openlit/instrumentation/pinecone/async_pinecone.py +27 -5
  127. openlit/instrumentation/pinecone/pinecone.py +27 -5
  128. openlit/instrumentation/pinecone/utils.py +153 -47
  129. openlit/instrumentation/premai/__init__.py +22 -7
  130. openlit/instrumentation/premai/premai.py +51 -26
  131. openlit/instrumentation/premai/utils.py +246 -59
  132. openlit/instrumentation/pydantic_ai/__init__.py +49 -22
  133. openlit/instrumentation/pydantic_ai/pydantic_ai.py +69 -16
  134. openlit/instrumentation/pydantic_ai/utils.py +89 -24
  135. openlit/instrumentation/qdrant/__init__.py +19 -4
  136. openlit/instrumentation/qdrant/async_qdrant.py +33 -7
  137. openlit/instrumentation/qdrant/qdrant.py +33 -7
  138. openlit/instrumentation/qdrant/utils.py +228 -93
  139. openlit/instrumentation/reka/__init__.py +23 -10
  140. openlit/instrumentation/reka/async_reka.py +17 -11
  141. openlit/instrumentation/reka/reka.py +17 -11
  142. openlit/instrumentation/reka/utils.py +138 -36
  143. openlit/instrumentation/together/__init__.py +44 -12
  144. openlit/instrumentation/together/async_together.py +50 -27
  145. openlit/instrumentation/together/together.py +50 -27
  146. openlit/instrumentation/together/utils.py +301 -71
  147. openlit/instrumentation/transformers/__init__.py +2 -1
  148. openlit/instrumentation/transformers/transformers.py +13 -3
  149. openlit/instrumentation/transformers/utils.py +139 -36
  150. openlit/instrumentation/vertexai/__init__.py +81 -16
  151. openlit/instrumentation/vertexai/async_vertexai.py +33 -15
  152. openlit/instrumentation/vertexai/utils.py +123 -27
  153. openlit/instrumentation/vertexai/vertexai.py +33 -15
  154. openlit/instrumentation/vllm/__init__.py +12 -5
  155. openlit/instrumentation/vllm/utils.py +121 -31
  156. openlit/instrumentation/vllm/vllm.py +16 -10
  157. openlit/otel/events.py +35 -10
  158. openlit/otel/metrics.py +32 -24
  159. openlit/otel/tracing.py +24 -9
  160. openlit/semcov/__init__.py +82 -6
  161. {openlit-1.34.30.dist-info → openlit-1.34.32.dist-info}/METADATA +2 -1
  162. openlit-1.34.32.dist-info/RECORD +166 -0
  163. openlit/instrumentation/langchain/async_langchain.py +0 -102
  164. openlit/instrumentation/langchain/langchain.py +0 -102
  165. openlit/instrumentation/langchain/utils.py +0 -252
  166. openlit-1.34.30.dist-info/RECORD +0 -168
  167. {openlit-1.34.30.dist-info → openlit-1.34.32.dist-info}/LICENSE +0 -0
  168. {openlit-1.34.30.dist-info → openlit-1.34.32.dist-info}/WHEEL +0 -0
@@ -12,12 +12,21 @@ from openlit.instrumentation.ai21.utils import (
12
12
  process_chunk,
13
13
  process_chat_response,
14
14
  process_streaming_chat_response,
15
- process_chat_rag_response
15
+ process_chat_rag_response,
16
16
  )
17
17
  from openlit.semcov import SemanticConvention
18
18
 
19
- def chat(version, environment, application_name, tracer, pricing_info,
20
- capture_message_content, metrics, disable_metrics):
19
+
20
+ def chat(
21
+ version,
22
+ environment,
23
+ application_name,
24
+ tracer,
25
+ pricing_info,
26
+ capture_message_content,
27
+ metrics,
28
+ disable_metrics,
29
+ ):
21
30
  """
22
31
  Generates a telemetry wrapper for GenAI function call
23
32
  """
@@ -28,15 +37,15 @@ def chat(version, environment, application_name, tracer, pricing_info,
28
37
  """
29
38
 
30
39
  def __init__(
31
- self,
32
- wrapped,
33
- span,
34
- span_name,
35
- kwargs,
36
- server_address,
37
- server_port,
38
- **args,
39
- ):
40
+ self,
41
+ wrapped,
42
+ span,
43
+ span_name,
44
+ kwargs,
45
+ server_address,
46
+ server_port,
47
+ **args,
48
+ ):
40
49
  self.__wrapped__ = wrapped
41
50
  self._span = span
42
51
  self._span_name = span_name
@@ -77,7 +86,9 @@ def chat(version, environment, application_name, tracer, pricing_info,
77
86
  return chunk
78
87
  except StopIteration:
79
88
  try:
80
- with tracer.start_as_current_span(self._span_name, kind=SpanKind.CLIENT) as self._span:
89
+ with tracer.start_as_current_span(
90
+ self._span_name, kind=SpanKind.CLIENT
91
+ ) as self._span:
81
92
  process_streaming_chat_response(
82
93
  self,
83
94
  pricing_info=pricing_info,
@@ -86,7 +97,7 @@ def chat(version, environment, application_name, tracer, pricing_info,
86
97
  metrics=metrics,
87
98
  capture_message_content=capture_message_content,
88
99
  disable_metrics=disable_metrics,
89
- version=version
100
+ version=version,
90
101
  )
91
102
 
92
103
  except Exception as e:
@@ -100,7 +111,9 @@ def chat(version, environment, application_name, tracer, pricing_info,
100
111
  """
101
112
  # Check if streaming is enabled for the API call
102
113
  streaming = kwargs.get("stream", False)
103
- server_address, server_port = set_server_address_and_port(instance, "api.ai21.com", 443)
114
+ server_address, server_port = set_server_address_and_port(
115
+ instance, "api.ai21.com", 443
116
+ )
104
117
  request_model = kwargs.get("model", "jamba-1.5-mini")
105
118
 
106
119
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -109,7 +122,9 @@ def chat(version, environment, application_name, tracer, pricing_info,
109
122
  # Special handling for streaming response
110
123
  awaited_wrapped = wrapped(*args, **kwargs)
111
124
  span = tracer.start_span(span_name, kind=SpanKind.CLIENT)
112
- return TracedSyncStream(awaited_wrapped, span, span_name, kwargs, server_address, server_port)
125
+ return TracedSyncStream(
126
+ awaited_wrapped, span, span_name, kwargs, server_address, server_port
127
+ )
113
128
  else:
114
129
  # Handling for non-streaming responses
115
130
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
@@ -131,7 +146,7 @@ def chat(version, environment, application_name, tracer, pricing_info,
131
146
  capture_message_content=capture_message_content,
132
147
  disable_metrics=disable_metrics,
133
148
  version=version,
134
- **kwargs
149
+ **kwargs,
135
150
  )
136
151
 
137
152
  except Exception as e:
@@ -141,8 +156,17 @@ def chat(version, environment, application_name, tracer, pricing_info,
141
156
 
142
157
  return wrapper
143
158
 
144
- def chat_rag(version, environment, application_name, tracer, pricing_info,
145
- capture_message_content, metrics, disable_metrics):
159
+
160
+ def chat_rag(
161
+ version,
162
+ environment,
163
+ application_name,
164
+ tracer,
165
+ pricing_info,
166
+ capture_message_content,
167
+ metrics,
168
+ disable_metrics,
169
+ ):
146
170
  """
147
171
  Generates a telemetry wrapper for GenAI RAG function call
148
172
  """
@@ -151,7 +175,9 @@ def chat_rag(version, environment, application_name, tracer, pricing_info,
151
175
  """
152
176
  Wraps the GenAI RAG function call.
153
177
  """
154
- server_address, server_port = set_server_address_and_port(instance, "api.ai21.com", 443)
178
+ server_address, server_port = set_server_address_and_port(
179
+ instance, "api.ai21.com", 443
180
+ )
155
181
  request_model = kwargs.get("model", "jamba-1.5-mini")
156
182
 
157
183
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -175,7 +201,7 @@ def chat_rag(version, environment, application_name, tracer, pricing_info,
175
201
  capture_message_content=capture_message_content,
176
202
  disable_metrics=disable_metrics,
177
203
  version=version,
178
- **kwargs
204
+ **kwargs,
179
205
  )
180
206
 
181
207
  except Exception as e:
@@ -12,12 +12,21 @@ from openlit.instrumentation.ai21.utils import (
12
12
  process_chunk,
13
13
  process_chat_response,
14
14
  process_streaming_chat_response,
15
- process_chat_rag_response
15
+ process_chat_rag_response,
16
16
  )
17
17
  from openlit.semcov import SemanticConvention
18
18
 
19
- def async_chat(version, environment, application_name, tracer, pricing_info,
20
- capture_message_content, metrics, disable_metrics):
19
+
20
+ def async_chat(
21
+ version,
22
+ environment,
23
+ application_name,
24
+ tracer,
25
+ pricing_info,
26
+ capture_message_content,
27
+ metrics,
28
+ disable_metrics,
29
+ ):
21
30
  """
22
31
  Generates a telemetry wrapper for GenAI function call
23
32
  """
@@ -28,15 +37,15 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
28
37
  """
29
38
 
30
39
  def __init__(
31
- self,
32
- wrapped,
33
- span,
34
- span_name,
35
- kwargs,
36
- server_address,
37
- server_port,
38
- **args,
39
- ):
40
+ self,
41
+ wrapped,
42
+ span,
43
+ span_name,
44
+ kwargs,
45
+ server_address,
46
+ server_port,
47
+ **args,
48
+ ):
40
49
  self.__wrapped__ = wrapped
41
50
  self._span = span
42
51
  self._span_name = span_name
@@ -77,7 +86,9 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
77
86
  return chunk
78
87
  except StopAsyncIteration:
79
88
  try:
80
- with tracer.start_as_current_span(self._span_name, kind=SpanKind.CLIENT) as self._span:
89
+ with tracer.start_as_current_span(
90
+ self._span_name, kind=SpanKind.CLIENT
91
+ ) as self._span:
81
92
  process_streaming_chat_response(
82
93
  self,
83
94
  pricing_info=pricing_info,
@@ -86,7 +97,7 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
86
97
  metrics=metrics,
87
98
  capture_message_content=capture_message_content,
88
99
  disable_metrics=disable_metrics,
89
- version=version
100
+ version=version,
90
101
  )
91
102
 
92
103
  except Exception as e:
@@ -100,7 +111,9 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
100
111
  """
101
112
  # Check if streaming is enabled for the API call
102
113
  streaming = kwargs.get("stream", False)
103
- server_address, server_port = set_server_address_and_port(instance, "api.ai21.com", 443)
114
+ server_address, server_port = set_server_address_and_port(
115
+ instance, "api.ai21.com", 443
116
+ )
104
117
  request_model = kwargs.get("model", "jamba-1.5-mini")
105
118
 
106
119
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -109,7 +122,9 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
109
122
  # Special handling for streaming response
110
123
  awaited_wrapped = await wrapped(*args, **kwargs)
111
124
  span = tracer.start_span(span_name, kind=SpanKind.CLIENT)
112
- return TracedAsyncStream(awaited_wrapped, span, span_name, kwargs, server_address, server_port)
125
+ return TracedAsyncStream(
126
+ awaited_wrapped, span, span_name, kwargs, server_address, server_port
127
+ )
113
128
  else:
114
129
  # Handling for non-streaming responses
115
130
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
@@ -131,7 +146,7 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
131
146
  capture_message_content=capture_message_content,
132
147
  disable_metrics=disable_metrics,
133
148
  version=version,
134
- **kwargs
149
+ **kwargs,
135
150
  )
136
151
 
137
152
  except Exception as e:
@@ -141,8 +156,17 @@ def async_chat(version, environment, application_name, tracer, pricing_info,
141
156
 
142
157
  return wrapper
143
158
 
144
- def async_chat_rag(version, environment, application_name, tracer, pricing_info,
145
- capture_message_content, metrics, disable_metrics):
159
+
160
+ def async_chat_rag(
161
+ version,
162
+ environment,
163
+ application_name,
164
+ tracer,
165
+ pricing_info,
166
+ capture_message_content,
167
+ metrics,
168
+ disable_metrics,
169
+ ):
146
170
  """
147
171
  Generates a telemetry wrapper for GenAI RAG function call
148
172
  """
@@ -151,7 +175,9 @@ def async_chat_rag(version, environment, application_name, tracer, pricing_info,
151
175
  """
152
176
  Wraps the GenAI RAG function call.
153
177
  """
154
- server_address, server_port = set_server_address_and_port(instance, "api.ai21.com", 443)
178
+ server_address, server_port = set_server_address_and_port(
179
+ instance, "api.ai21.com", 443
180
+ )
155
181
  request_model = kwargs.get("model", "jamba-1.5-mini")
156
182
 
157
183
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -175,7 +201,7 @@ def async_chat_rag(version, environment, application_name, tracer, pricing_info,
175
201
  capture_message_content=capture_message_content,
176
202
  disable_metrics=disable_metrics,
177
203
  version=version,
178
- **kwargs
204
+ **kwargs,
179
205
  )
180
206
 
181
207
  except Exception as e: