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
@@ -20,8 +20,17 @@ from openlit.semcov import SemanticConvention
20
20
  # Initialize logger for logging potential issues and operations
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
- def async_complete(version, environment, application_name,
24
- tracer, pricing_info, capture_message_content, metrics, disable_metrics):
23
+
24
+ def async_complete(
25
+ version,
26
+ environment,
27
+ application_name,
28
+ tracer,
29
+ pricing_info,
30
+ capture_message_content,
31
+ metrics,
32
+ disable_metrics,
33
+ ):
25
34
  """
26
35
  Generates a telemetry wrapper for GenAI function call
27
36
  """
@@ -32,15 +41,15 @@ def async_complete(version, environment, application_name,
32
41
  """
33
42
 
34
43
  def __init__(
35
- self,
36
- wrapped,
37
- span,
38
- span_name,
39
- kwargs,
40
- server_address,
41
- server_port,
42
- **args,
43
- ):
44
+ self,
45
+ wrapped,
46
+ span,
47
+ span_name,
48
+ kwargs,
49
+ server_address,
50
+ server_port,
51
+ **args,
52
+ ):
44
53
  self.__wrapped__ = wrapped
45
54
  self._span = span
46
55
  self._span_name = span_name
@@ -71,8 +80,14 @@ def async_complete(version, environment, application_name,
71
80
  async def __aexit__(self, exc_type, exc_val, exc_tb):
72
81
  await self.__wrapped__.__aexit__(exc_type, exc_val, exc_tb)
73
82
  process_streaming_chat_response(
74
- self, pricing_info, environment, application_name, metrics,
75
- capture_message_content, disable_metrics, version
83
+ self,
84
+ pricing_info,
85
+ environment,
86
+ application_name,
87
+ metrics,
88
+ capture_message_content,
89
+ disable_metrics,
90
+ version,
76
91
  )
77
92
 
78
93
  def __aiter__(self):
@@ -92,7 +107,9 @@ def async_complete(version, environment, application_name,
92
107
  """
93
108
 
94
109
  streaming = kwargs.get("stream", False)
95
- server_address, server_port = set_server_address_and_port(instance, "models.github.ai", 443)
110
+ server_address, server_port = set_server_address_and_port(
111
+ instance, "models.github.ai", 443
112
+ )
96
113
  request_model = kwargs.get("model", "gpt-4o")
97
114
 
98
115
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -101,7 +118,9 @@ def async_complete(version, environment, application_name,
101
118
  awaited_wrapped = await wrapped(*args, **kwargs)
102
119
  span = tracer.start_span(span_name, kind=SpanKind.CLIENT)
103
120
 
104
- return TracedAsyncStream(awaited_wrapped, span, span_name, kwargs, server_address, server_port)
121
+ return TracedAsyncStream(
122
+ awaited_wrapped, span, span_name, kwargs, server_address, server_port
123
+ )
105
124
 
106
125
  else:
107
126
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
@@ -121,15 +140,24 @@ def async_complete(version, environment, application_name,
121
140
  capture_message_content=capture_message_content,
122
141
  disable_metrics=disable_metrics,
123
142
  version=version,
124
- **kwargs
143
+ **kwargs,
125
144
  )
126
145
 
127
146
  return response
128
147
 
129
148
  return wrapper
130
149
 
131
- def async_embed(version, environment, application_name,
132
- tracer, pricing_info, capture_message_content, metrics, disable_metrics):
150
+
151
+ def async_embed(
152
+ version,
153
+ environment,
154
+ application_name,
155
+ tracer,
156
+ pricing_info,
157
+ capture_message_content,
158
+ metrics,
159
+ disable_metrics,
160
+ ):
133
161
  """
134
162
  Generates a telemetry wrapper for GenAI embedding function call
135
163
  """
@@ -139,10 +167,14 @@ def async_embed(version, environment, application_name,
139
167
  Wraps the GenAI embedding function call.
140
168
  """
141
169
 
142
- server_address, server_port = set_server_address_and_port(instance, "models.github.ai", 443)
170
+ server_address, server_port = set_server_address_and_port(
171
+ instance, "models.github.ai", 443
172
+ )
143
173
  request_model = kwargs.get("model", "text-embedding-3-small")
144
174
 
145
- span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_EMBEDDING} {request_model}"
175
+ span_name = (
176
+ f"{SemanticConvention.GEN_AI_OPERATION_TYPE_EMBEDDING} {request_model}"
177
+ )
146
178
 
147
179
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
148
180
  start_time = time.time()
@@ -163,7 +195,7 @@ def async_embed(version, environment, application_name,
163
195
  capture_message_content=capture_message_content,
164
196
  disable_metrics=disable_metrics,
165
197
  version=version,
166
- **kwargs
198
+ **kwargs,
167
199
  )
168
200
 
169
201
  except Exception as e:
@@ -20,8 +20,17 @@ from openlit.semcov import SemanticConvention
20
20
  # Initialize logger for logging potential issues and operations
21
21
  logger = logging.getLogger(__name__)
22
22
 
23
- def complete(version, environment, application_name,
24
- tracer, pricing_info, capture_message_content, metrics, disable_metrics):
23
+
24
+ def complete(
25
+ version,
26
+ environment,
27
+ application_name,
28
+ tracer,
29
+ pricing_info,
30
+ capture_message_content,
31
+ metrics,
32
+ disable_metrics,
33
+ ):
25
34
  """
26
35
  Generates a telemetry wrapper for GenAI function call
27
36
  """
@@ -32,15 +41,15 @@ def complete(version, environment, application_name,
32
41
  """
33
42
 
34
43
  def __init__(
35
- self,
36
- wrapped,
37
- span,
38
- span_name,
39
- kwargs,
40
- server_address,
41
- server_port,
42
- **args,
43
- ):
44
+ self,
45
+ wrapped,
46
+ span,
47
+ span_name,
48
+ kwargs,
49
+ server_address,
50
+ server_port,
51
+ **args,
52
+ ):
44
53
  self.__wrapped__ = wrapped
45
54
  self._span = span
46
55
  self._span_name = span_name
@@ -71,8 +80,14 @@ def complete(version, environment, application_name,
71
80
  def __exit__(self, exc_type, exc_val, exc_tb):
72
81
  self.__wrapped__.__exit__(exc_type, exc_val, exc_tb)
73
82
  process_streaming_chat_response(
74
- self, pricing_info, environment, application_name, metrics,
75
- capture_message_content, disable_metrics, version
83
+ self,
84
+ pricing_info,
85
+ environment,
86
+ application_name,
87
+ metrics,
88
+ capture_message_content,
89
+ disable_metrics,
90
+ version,
76
91
  )
77
92
 
78
93
  def __iter__(self):
@@ -92,7 +107,9 @@ def complete(version, environment, application_name,
92
107
  """
93
108
 
94
109
  streaming = kwargs.get("stream", False)
95
- server_address, server_port = set_server_address_and_port(instance, "models.github.ai", 443)
110
+ server_address, server_port = set_server_address_and_port(
111
+ instance, "models.github.ai", 443
112
+ )
96
113
  request_model = kwargs.get("model", "gpt-4o")
97
114
 
98
115
  span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_CHAT} {request_model}"
@@ -101,7 +118,9 @@ def complete(version, environment, application_name,
101
118
  awaited_wrapped = wrapped(*args, **kwargs)
102
119
  span = tracer.start_span(span_name, kind=SpanKind.CLIENT)
103
120
 
104
- return TracedSyncStream(awaited_wrapped, span, span_name, kwargs, server_address, server_port)
121
+ return TracedSyncStream(
122
+ awaited_wrapped, span, span_name, kwargs, server_address, server_port
123
+ )
105
124
 
106
125
  else:
107
126
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
@@ -121,15 +140,24 @@ def complete(version, environment, application_name,
121
140
  capture_message_content=capture_message_content,
122
141
  disable_metrics=disable_metrics,
123
142
  version=version,
124
- **kwargs
143
+ **kwargs,
125
144
  )
126
145
 
127
146
  return response
128
147
 
129
148
  return wrapper
130
149
 
131
- def embed(version, environment, application_name,
132
- tracer, pricing_info, capture_message_content, metrics, disable_metrics):
150
+
151
+ def embed(
152
+ version,
153
+ environment,
154
+ application_name,
155
+ tracer,
156
+ pricing_info,
157
+ capture_message_content,
158
+ metrics,
159
+ disable_metrics,
160
+ ):
133
161
  """
134
162
  Generates a telemetry wrapper for GenAI embedding function call
135
163
  """
@@ -139,10 +167,14 @@ def embed(version, environment, application_name,
139
167
  Wraps the GenAI embedding function call.
140
168
  """
141
169
 
142
- server_address, server_port = set_server_address_and_port(instance, "models.github.ai", 443)
170
+ server_address, server_port = set_server_address_and_port(
171
+ instance, "models.github.ai", 443
172
+ )
143
173
  request_model = kwargs.get("model", "text-embedding-3-small")
144
174
 
145
- span_name = f"{SemanticConvention.GEN_AI_OPERATION_TYPE_EMBEDDING} {request_model}"
175
+ span_name = (
176
+ f"{SemanticConvention.GEN_AI_OPERATION_TYPE_EMBEDDING} {request_model}"
177
+ )
146
178
 
147
179
  with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
148
180
  start_time = time.time()
@@ -163,7 +195,7 @@ def embed(version, environment, application_name,
163
195
  capture_message_content=capture_message_content,
164
196
  disable_metrics=disable_metrics,
165
197
  version=version,
166
- **kwargs
198
+ **kwargs,
167
199
  )
168
200
 
169
201
  except Exception as e: