openlit 1.33.14__tar.gz → 1.33.15__tar.gz
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.
- {openlit-1.33.14 → openlit-1.33.15}/PKG-INFO +1 -1
- {openlit-1.33.14 → openlit-1.33.15}/pyproject.toml +1 -1
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/astra/__init__.py +82 -83
- openlit-1.33.15/src/openlit/instrumentation/astra/astra.py +45 -0
- openlit-1.33.15/src/openlit/instrumentation/astra/async_astra.py +45 -0
- openlit-1.33.15/src/openlit/instrumentation/astra/utils.py +102 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/chroma/chroma.py +10 -10
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/dynamiq/dynamiq.py +2 -2
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/milvus/milvus.py +10 -10
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/pinecone/pinecone.py +8 -8
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/qdrant/async_qdrant.py +19 -19
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/qdrant/qdrant.py +20 -20
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/otel/metrics.py +18 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/semcov/__init__.py +26 -13
- openlit-1.33.14/src/openlit/instrumentation/astra/astra.py +0 -226
- openlit-1.33.14/src/openlit/instrumentation/astra/async_astra.py +0 -226
- {openlit-1.33.14 → openlit-1.33.15}/LICENSE +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/README.md +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/__helpers.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/all.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/bias_detection.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/hallucination.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/toxicity.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/evals/utils.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/all.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/prompt_injection.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/restrict_topic.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/sensitive_topic.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/guard/utils.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ag2/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ag2/ag2.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ai21/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ai21/ai21.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ai21/async_ai21.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ai21/utils.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/anthropic/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/anthropic/anthropic.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/anthropic/async_anthropic.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/anthropic/utils.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/assemblyai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/assemblyai/assemblyai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/azure_ai_inference/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/azure_ai_inference/async_azure_ai_inference.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/azure_ai_inference/azure_ai_inference.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/bedrock/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/bedrock/bedrock.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/chroma/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/cohere/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/cohere/async_cohere.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/cohere/cohere.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/controlflow/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/controlflow/controlflow.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/crawl4ai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/crawl4ai/async_crawl4ai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/crawl4ai/crawl4ai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/crewai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/crewai/crewai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/dynamiq/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/elevenlabs/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/elevenlabs/async_elevenlabs.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/elevenlabs/elevenlabs.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/embedchain/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/embedchain/embedchain.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/firecrawl/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/firecrawl/firecrawl.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/google_ai_studio/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/google_ai_studio/async_google_ai_studio.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/google_ai_studio/google_ai_studio.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/gpt4all/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/gpt4all/gpt4all.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/gpu/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/groq/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/groq/async_groq.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/groq/groq.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/haystack/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/haystack/haystack.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/julep/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/julep/async_julep.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/julep/julep.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/langchain/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/langchain/async_langchain.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/langchain/langchain.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/letta/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/letta/letta.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/litellm/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/litellm/async_litellm.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/litellm/litellm.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/llamaindex/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/llamaindex/llamaindex.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/mem0/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/mem0/mem0.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/milvus/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/mistral/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/mistral/async_mistral.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/mistral/mistral.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/multion/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/multion/async_multion.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/multion/multion.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ollama/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ollama/async_ollama.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ollama/ollama.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/ollama/utils.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/openai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/openai/async_openai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/openai/openai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/phidata/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/phidata/phidata.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/pinecone/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/premai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/premai/premai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/qdrant/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/reka/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/reka/async_reka.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/reka/reka.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/together/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/together/async_together.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/together/together.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/transformers/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/transformers/transformers.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/vertexai/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/vertexai/async_vertexai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/vertexai/vertexai.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/vllm/__init__.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/instrumentation/vllm/vllm.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/otel/events.py +0 -0
- {openlit-1.33.14 → openlit-1.33.15}/src/openlit/otel/tracing.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: openlit
|
3
|
-
Version: 1.33.
|
3
|
+
Version: 1.33.15
|
4
4
|
Summary: OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: OpenTelemetry,otel,otlp,llm,tracing,openai,anthropic,claude,cohere,llm monitoring,observability,monitoring,gpt,Generative AI,chatGPT,gpu
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "openlit"
|
3
|
-
version = "1.33.
|
3
|
+
version = "1.33.15"
|
4
4
|
description = "OpenTelemetry-native Auto instrumentation library for monitoring LLM Applications and GPUs, facilitating the integration of observability into your GenAI-driven projects"
|
5
5
|
authors = ["OpenLIT"]
|
6
6
|
license = "Apache-2.0"
|
@@ -1,4 +1,3 @@
|
|
1
|
-
# pylint: disable=useless-return, bad-staticmethod-argument, disable=duplicate-code
|
2
1
|
"""Initializer of Auto Instrumentation of AstraDB Functions"""
|
3
2
|
from typing import Collection
|
4
3
|
import importlib.metadata
|
@@ -8,7 +7,7 @@ from wrapt import wrap_function_wrapper
|
|
8
7
|
from openlit.instrumentation.astra.astra import general_wrap
|
9
8
|
# from openlit.instrumentation.astra.async_astra import asyc_general_wrap
|
10
9
|
|
11
|
-
_instruments = (
|
10
|
+
_instruments = ('astrapy >= 1.5.2',)
|
12
11
|
|
13
12
|
class AstraInstrumentor(BaseInstrumentor):
|
14
13
|
"""An instrumentor for AstraDB's client library."""
|
@@ -17,163 +16,163 @@ class AstraInstrumentor(BaseInstrumentor):
|
|
17
16
|
return _instruments
|
18
17
|
|
19
18
|
def _instrument(self, **kwargs):
|
20
|
-
application_name = kwargs.get(
|
21
|
-
environment = kwargs.get(
|
22
|
-
tracer = kwargs.get(
|
23
|
-
metrics = kwargs.get(
|
24
|
-
pricing_info = kwargs.get(
|
25
|
-
capture_message_content = kwargs.get(
|
26
|
-
disable_metrics = kwargs.get(
|
27
|
-
version = importlib.metadata.version(
|
19
|
+
application_name = kwargs.get('application_name')
|
20
|
+
environment = kwargs.get('environment')
|
21
|
+
tracer = kwargs.get('tracer')
|
22
|
+
metrics = kwargs.get('metrics_dict')
|
23
|
+
pricing_info = kwargs.get('pricing_info')
|
24
|
+
capture_message_content = kwargs.get('capture_message_content')
|
25
|
+
disable_metrics = kwargs.get('disable_metrics')
|
26
|
+
version = importlib.metadata.version('astrapy')
|
28
27
|
|
29
28
|
# Sync
|
30
29
|
wrap_function_wrapper(
|
31
|
-
|
32
|
-
|
33
|
-
general_wrap(
|
30
|
+
'astrapy.database',
|
31
|
+
'Database.create_collection',
|
32
|
+
general_wrap('astra.create_collection', version, environment, application_name,
|
34
33
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
35
34
|
)
|
36
35
|
wrap_function_wrapper(
|
37
|
-
|
38
|
-
|
39
|
-
general_wrap(
|
36
|
+
'astrapy.database',
|
37
|
+
'Database.drop_collection',
|
38
|
+
general_wrap('astra.drop_collection', version, environment, application_name,
|
40
39
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
41
40
|
)
|
42
41
|
wrap_function_wrapper(
|
43
|
-
|
44
|
-
|
45
|
-
general_wrap(
|
42
|
+
'astrapy.collection',
|
43
|
+
'Collection.insert_one',
|
44
|
+
general_wrap('astra.insert', version, environment, application_name,
|
46
45
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
47
46
|
)
|
48
47
|
wrap_function_wrapper(
|
49
|
-
|
50
|
-
|
51
|
-
general_wrap(
|
48
|
+
'astrapy.collection',
|
49
|
+
'Collection.insert_many',
|
50
|
+
general_wrap('astra.insert', version, environment, application_name,
|
52
51
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
53
52
|
)
|
54
53
|
wrap_function_wrapper(
|
55
|
-
|
56
|
-
|
57
|
-
general_wrap(
|
54
|
+
'astrapy.collection',
|
55
|
+
'Collection.update_one',
|
56
|
+
general_wrap('astra.update', version, environment, application_name,
|
58
57
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
59
58
|
)
|
60
59
|
wrap_function_wrapper(
|
61
|
-
|
62
|
-
|
63
|
-
general_wrap(
|
60
|
+
'astrapy.collection',
|
61
|
+
'Collection.update_many',
|
62
|
+
general_wrap('astra.update', version, environment, application_name,
|
64
63
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
65
64
|
)
|
66
65
|
wrap_function_wrapper(
|
67
|
-
|
68
|
-
|
69
|
-
general_wrap(
|
66
|
+
'astrapy.collection',
|
67
|
+
'Collection.find_one_and_update',
|
68
|
+
general_wrap('astra.find_one_and_update', version, environment, application_name,
|
70
69
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
71
70
|
)
|
72
71
|
wrap_function_wrapper(
|
73
|
-
|
74
|
-
|
75
|
-
general_wrap(
|
72
|
+
'astrapy.collection',
|
73
|
+
'Collection.find',
|
74
|
+
general_wrap('astra.find', version, environment, application_name,
|
76
75
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
77
76
|
)
|
78
77
|
wrap_function_wrapper(
|
79
|
-
|
80
|
-
|
81
|
-
general_wrap(
|
78
|
+
'astrapy.collection',
|
79
|
+
'Collection.replace_one',
|
80
|
+
general_wrap('astra.replace_one', version, environment, application_name,
|
82
81
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
83
82
|
)
|
84
83
|
wrap_function_wrapper(
|
85
|
-
|
86
|
-
|
87
|
-
general_wrap(
|
84
|
+
'astrapy.collection',
|
85
|
+
'Collection.find_one_and_delete',
|
86
|
+
general_wrap('astra.find_one_and_delete', version, environment, application_name,
|
88
87
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
89
88
|
)
|
90
89
|
wrap_function_wrapper(
|
91
|
-
|
92
|
-
|
93
|
-
general_wrap(
|
90
|
+
'astrapy.collection',
|
91
|
+
'Collection.delete_one',
|
92
|
+
general_wrap('astra.delete', version, environment, application_name,
|
94
93
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
95
94
|
)
|
96
95
|
wrap_function_wrapper(
|
97
|
-
|
98
|
-
|
99
|
-
general_wrap(
|
96
|
+
'astrapy.collection',
|
97
|
+
'Collection.delete_many',
|
98
|
+
general_wrap('astra.delete', version, environment, application_name,
|
100
99
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
101
100
|
)
|
102
101
|
|
103
102
|
# ASync
|
104
103
|
wrap_function_wrapper(
|
105
|
-
|
106
|
-
|
107
|
-
general_wrap(
|
104
|
+
'astrapy.database',
|
105
|
+
'AsyncDatabase.create_collection',
|
106
|
+
general_wrap('astra.create_collection', version, environment, application_name,
|
108
107
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
109
108
|
)
|
110
109
|
wrap_function_wrapper(
|
111
|
-
|
112
|
-
|
113
|
-
general_wrap(
|
110
|
+
'astrapy.database',
|
111
|
+
'AsyncDatabase.drop_collection',
|
112
|
+
general_wrap('astra.drop_collection', version, environment, application_name,
|
114
113
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
115
114
|
)
|
116
115
|
wrap_function_wrapper(
|
117
|
-
|
118
|
-
|
119
|
-
general_wrap(
|
116
|
+
'astrapy.collection',
|
117
|
+
'AsyncCollection.insert_one',
|
118
|
+
general_wrap('astra.insert_one', version, environment, application_name,
|
120
119
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
121
120
|
)
|
122
121
|
wrap_function_wrapper(
|
123
|
-
|
124
|
-
|
125
|
-
general_wrap(
|
122
|
+
'astrapy.collection',
|
123
|
+
'AsyncCollection.insert_many',
|
124
|
+
general_wrap('astra.insert_many', version, environment, application_name,
|
126
125
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
127
126
|
)
|
128
127
|
wrap_function_wrapper(
|
129
|
-
|
130
|
-
|
131
|
-
general_wrap(
|
128
|
+
'astrapy.collection',
|
129
|
+
'AsyncCollection.update_one',
|
130
|
+
general_wrap('astra.update_one', version, environment, application_name,
|
132
131
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
133
132
|
)
|
134
133
|
wrap_function_wrapper(
|
135
|
-
|
136
|
-
|
137
|
-
general_wrap(
|
134
|
+
'astrapy.collection',
|
135
|
+
'AsyncCollection.update_many',
|
136
|
+
general_wrap('astra.update_many', version, environment, application_name,
|
138
137
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
139
138
|
)
|
140
139
|
wrap_function_wrapper(
|
141
|
-
|
142
|
-
|
143
|
-
general_wrap(
|
140
|
+
'astrapy.collection',
|
141
|
+
'AsyncCollection.find_one_and_update',
|
142
|
+
general_wrap('astra.find_one_and_update', version, environment, application_name,
|
144
143
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
145
144
|
)
|
146
145
|
wrap_function_wrapper(
|
147
|
-
|
148
|
-
|
149
|
-
general_wrap(
|
146
|
+
'astrapy.collection',
|
147
|
+
'AsyncCollection.find',
|
148
|
+
general_wrap('astra.find', version, environment, application_name,
|
150
149
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
151
150
|
)
|
152
151
|
wrap_function_wrapper(
|
153
|
-
|
154
|
-
|
155
|
-
general_wrap(
|
152
|
+
'astrapy.collection',
|
153
|
+
'AsyncCollection.replace_one',
|
154
|
+
general_wrap('astra.replace_one', version, environment, application_name,
|
156
155
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
157
156
|
)
|
158
157
|
wrap_function_wrapper(
|
159
|
-
|
160
|
-
|
161
|
-
general_wrap(
|
158
|
+
'astrapy.collection',
|
159
|
+
'AsyncCollection.find_one_and_delete',
|
160
|
+
general_wrap('astra.find_one_and_delete', version, environment, application_name,
|
162
161
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
163
162
|
)
|
164
163
|
wrap_function_wrapper(
|
165
|
-
|
166
|
-
|
167
|
-
general_wrap(
|
164
|
+
'astrapy.collection',
|
165
|
+
'AsyncCollection.delete_one',
|
166
|
+
general_wrap('astra.delete_one', version, environment, application_name,
|
168
167
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
169
168
|
)
|
170
169
|
wrap_function_wrapper(
|
171
|
-
|
172
|
-
|
173
|
-
general_wrap(
|
170
|
+
'astrapy.collection',
|
171
|
+
'AsyncCollection.delete_many',
|
172
|
+
general_wrap('astra.delete_many', version, environment, application_name,
|
174
173
|
tracer, pricing_info, capture_message_content, metrics, disable_metrics),
|
175
174
|
)
|
176
175
|
|
177
|
-
@staticmethod
|
178
176
|
def _uninstrument(self, **kwargs):
|
177
|
+
# Proper uninstrumentation logic to revert patched methods
|
179
178
|
pass
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"""
|
2
|
+
Module for monitoring AstraDB.
|
3
|
+
"""
|
4
|
+
|
5
|
+
import time
|
6
|
+
from opentelemetry.trace import SpanKind
|
7
|
+
from openlit.instrumentation.astra.utils import (
|
8
|
+
DB_OPERATION_MAP,
|
9
|
+
process_db_operations
|
10
|
+
)
|
11
|
+
from openlit.semcov import SemanticConvetion
|
12
|
+
|
13
|
+
def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
14
|
+
tracer, pricing_info, capture_message_content, metrics, disable_metrics):
|
15
|
+
"""
|
16
|
+
Generates a telemetry wrapper for VectorDB function call
|
17
|
+
"""
|
18
|
+
|
19
|
+
def wrapper(wrapped, instance, args, kwargs):
|
20
|
+
"""
|
21
|
+
Wraps the VectorDB function call.
|
22
|
+
"""
|
23
|
+
|
24
|
+
db_operation = DB_OPERATION_MAP.get(gen_ai_endpoint, "UNKNOWN")
|
25
|
+
if db_operation == SemanticConvetion.DB_OPERATION_REPLACE and kwargs.get('upsert'):
|
26
|
+
db_operation = SemanticConvetion.DB_OPERATION_UPSERT
|
27
|
+
|
28
|
+
span_name = f"{db_operation} {instance.name}"
|
29
|
+
|
30
|
+
with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
|
31
|
+
start_time = time.time()
|
32
|
+
response = wrapped(*args, **kwargs)
|
33
|
+
server_address = getattr(getattr(instance, 'database', instance), 'api_endpoint', '')
|
34
|
+
server_port = 443
|
35
|
+
collection_name = instance.name
|
36
|
+
response = process_db_operations(
|
37
|
+
response, span, start_time, gen_ai_endpoint,
|
38
|
+
version, environment, application_name, capture_message_content,
|
39
|
+
metrics, disable_metrics, server_address, server_port,
|
40
|
+
collection_name, db_operation, kwargs, args
|
41
|
+
)
|
42
|
+
|
43
|
+
return response
|
44
|
+
|
45
|
+
return wrapper
|
@@ -0,0 +1,45 @@
|
|
1
|
+
"""
|
2
|
+
Module for monitoring AstraDB.
|
3
|
+
"""
|
4
|
+
|
5
|
+
import time
|
6
|
+
from opentelemetry.trace import SpanKind
|
7
|
+
from openlit.instrumentation.astra.utils import (
|
8
|
+
DB_OPERATION_MAP,
|
9
|
+
process_db_operations
|
10
|
+
)
|
11
|
+
from openlit.semcov import SemanticConvetion
|
12
|
+
|
13
|
+
def async_general_wrap(gen_ai_endpoint, version, environment, application_name,
|
14
|
+
tracer, pricing_info, capture_message_content, metrics, disable_metrics):
|
15
|
+
"""
|
16
|
+
Generates a telemetry wrapper for VectorDB function call
|
17
|
+
"""
|
18
|
+
|
19
|
+
async def wrapper(wrapped, instance, args, kwargs):
|
20
|
+
"""
|
21
|
+
Wraps the VectorDB function call.
|
22
|
+
"""
|
23
|
+
|
24
|
+
db_operation = DB_OPERATION_MAP.get(gen_ai_endpoint, "UNKNOWN")
|
25
|
+
if db_operation == SemanticConvetion.DB_OPERATION_REPLACE and kwargs.get('upsert'):
|
26
|
+
db_operation = SemanticConvetion.DB_OPERATION_UPSERT
|
27
|
+
|
28
|
+
span_name = f"{db_operation} {instance.name}"
|
29
|
+
|
30
|
+
with tracer.start_as_current_span(span_name, kind=SpanKind.CLIENT) as span:
|
31
|
+
start_time = time.time()
|
32
|
+
response = await wrapped(*args, **kwargs)
|
33
|
+
server_address = getattr(getattr(instance, 'database', instance), 'api_endpoint', '')
|
34
|
+
server_port = 443
|
35
|
+
collection_name = instance.name
|
36
|
+
response = process_db_operations(
|
37
|
+
response, span, start_time, gen_ai_endpoint,
|
38
|
+
version, environment, application_name, capture_message_content,
|
39
|
+
metrics, disable_metrics, server_address, server_port,
|
40
|
+
collection_name, db_operation, kwargs, args
|
41
|
+
)
|
42
|
+
|
43
|
+
return response
|
44
|
+
|
45
|
+
return wrapper
|
@@ -0,0 +1,102 @@
|
|
1
|
+
"""
|
2
|
+
Astra OpenTelemetry instrumentation utility functions
|
3
|
+
"""
|
4
|
+
|
5
|
+
import time
|
6
|
+
import logging
|
7
|
+
from opentelemetry.trace import Status, StatusCode
|
8
|
+
from opentelemetry.sdk.resources import SERVICE_NAME, TELEMETRY_SDK_NAME, DEPLOYMENT_ENVIRONMENT
|
9
|
+
from openlit.__helpers import handle_exception
|
10
|
+
from openlit.semcov import SemanticConvetion
|
11
|
+
|
12
|
+
# Initialize logger for logging potential issues and operations
|
13
|
+
logger = logging.getLogger(__name__)
|
14
|
+
|
15
|
+
def object_count(obj):
|
16
|
+
"""Counts Length of object if it exists, Else returns None."""
|
17
|
+
return len(obj) if isinstance(obj, list) else 1
|
18
|
+
|
19
|
+
DB_OPERATION_MAP = {
|
20
|
+
'astra.create_collection': SemanticConvetion.DB_OPERATION_CREATE_COLLECTION,
|
21
|
+
'astra.drop_collection': SemanticConvetion.DB_OPERATION_DELETE_COLLECTION,
|
22
|
+
'astra.insert': SemanticConvetion.DB_OPERATION_INSERT,
|
23
|
+
'astra.update': SemanticConvetion.DB_OPERATION_UPDATE,
|
24
|
+
'astra.find': SemanticConvetion.DB_OPERATION_SELECT,
|
25
|
+
'astra.find_one_and_update': SemanticConvetion.DB_OPERATION_REPLACE,
|
26
|
+
'astra.replace_one': SemanticConvetion.DB_OPERATION_REPLACE,
|
27
|
+
'astra.delete': SemanticConvetion.DB_OPERATION_DELETE,
|
28
|
+
'astra.find_one_and_delete': SemanticConvetion.DB_OPERATION_FIND_AND_DELETE
|
29
|
+
}
|
30
|
+
|
31
|
+
def process_db_operations(response, span, start_time, gen_ai_endpoint,
|
32
|
+
version, environment, application_name,
|
33
|
+
capture_message_content, metrics, disable_metrics, server_address,
|
34
|
+
server_port, collection_name, db_operation, kwargs, args):
|
35
|
+
"""
|
36
|
+
Process DB operation and generate Telemetry
|
37
|
+
"""
|
38
|
+
|
39
|
+
end_time = time.time()
|
40
|
+
|
41
|
+
try:
|
42
|
+
span.set_attribute(TELEMETRY_SDK_NAME, 'openlit')
|
43
|
+
span.set_attribute(SemanticConvetion.GEN_AI_OPERATION, SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB)
|
44
|
+
span.set_attribute(SemanticConvetion.DB_SYSTEM_NAME, SemanticConvetion.DB_SYSTEM_ASTRA)
|
45
|
+
span.set_attribute(SemanticConvetion.DB_CLIENT_OPERATION_DURATION, end_time - start_time)
|
46
|
+
span.set_attribute(SemanticConvetion.SERVER_ADDRESS, server_address)
|
47
|
+
span.set_attribute(SemanticConvetion.SERVER_PORT, server_port)
|
48
|
+
span.set_attribute(DEPLOYMENT_ENVIRONMENT, environment)
|
49
|
+
span.set_attribute(SERVICE_NAME, application_name)
|
50
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME, db_operation)
|
51
|
+
span.set_attribute(SemanticConvetion.DB_COLLECTION_NAME, collection_name)
|
52
|
+
span.set_attribute(SemanticConvetion.DB_SDK_VERSION, version)
|
53
|
+
|
54
|
+
if db_operation == SemanticConvetion.DB_OPERATION_CREATE_COLLECTION:
|
55
|
+
span.set_attribute(SemanticConvetion.DB_NAMESPACE, response.keyspace)
|
56
|
+
span.set_attribute(SemanticConvetion.DB_COLLECTION_NAME, response.name)
|
57
|
+
span.set_attribute(SemanticConvetion.DB_INDEX_DIMENSION, kwargs.get('dimension', ''))
|
58
|
+
span.set_attribute(SemanticConvetion.DB_INDEX_METRIC, str(kwargs.get('metric', '')))
|
59
|
+
|
60
|
+
if db_operation == SemanticConvetion.DB_OPERATION_INSERT:
|
61
|
+
span.set_attribute(SemanticConvetion.DB_DOCUMENTS_COUNT, object_count(args[0]))
|
62
|
+
span.set_attribute(SemanticConvetion.DB_QUERY_TEXT, str(args[0] or kwargs.get('documents', {})))
|
63
|
+
|
64
|
+
elif db_operation == SemanticConvetion.DB_OPERATION_UPDATE:
|
65
|
+
span.set_attribute(SemanticConvetion.DB_RESPONSE_RETURNED_ROWS, response.update_info.get('nModified', 0))
|
66
|
+
span.set_attribute(SemanticConvetion.DB_QUERY_TEXT, str(args[1] or kwargs.get('update', {})))
|
67
|
+
|
68
|
+
elif db_operation == SemanticConvetion.DB_OPERATION_DELETE:
|
69
|
+
span.set_attribute(SemanticConvetion.DB_RESPONSE_RETURNED_ROWS, response.deleted_count)
|
70
|
+
span.set_attribute(SemanticConvetion.DB_QUERY_TEXT, str(args[0] or kwargs.get('filter', {})))
|
71
|
+
|
72
|
+
elif db_operation in [
|
73
|
+
SemanticConvetion.DB_OPERATION_SELECT,
|
74
|
+
SemanticConvetion.DB_OPERATION_FIND_AND_DELETE,
|
75
|
+
SemanticConvetion.DB_OPERATION_REPLACE
|
76
|
+
]:
|
77
|
+
span.set_attribute(SemanticConvetion.DB_QUERY_TEXT, str(args or kwargs.get('filter', {})))
|
78
|
+
|
79
|
+
span.set_status(Status(StatusCode.OK))
|
80
|
+
|
81
|
+
if not disable_metrics:
|
82
|
+
attributes = {
|
83
|
+
TELEMETRY_SDK_NAME: 'openlit',
|
84
|
+
SERVICE_NAME: application_name,
|
85
|
+
SemanticConvetion.DB_SYSTEM_NAME: SemanticConvetion.DB_SYSTEM_ASTRA,
|
86
|
+
DEPLOYMENT_ENVIRONMENT: environment,
|
87
|
+
SemanticConvetion.GEN_AI_OPERATION: SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB,
|
88
|
+
SemanticConvetion.DB_OPERATION_NAME: db_operation
|
89
|
+
}
|
90
|
+
|
91
|
+
metrics['db_requests'].add(1, attributes)
|
92
|
+
metrics['db_client_operation_duration'].record(end_time - start_time, attributes)
|
93
|
+
|
94
|
+
# Return original response
|
95
|
+
return response
|
96
|
+
|
97
|
+
except Exception as e:
|
98
|
+
handle_exception(span, e)
|
99
|
+
logger.error('Error in trace creation: %s', e)
|
100
|
+
|
101
|
+
# Return original response
|
102
|
+
return response
|
@@ -79,14 +79,14 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
79
79
|
application_name)
|
80
80
|
span.set_attribute(SemanticConvetion.GEN_AI_OPERATION,
|
81
81
|
SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB)
|
82
|
-
span.set_attribute(SemanticConvetion.
|
82
|
+
span.set_attribute(SemanticConvetion.DB_SYSTEM_NAME,
|
83
83
|
SemanticConvetion.DB_SYSTEM_CHROMA)
|
84
84
|
span.set_attribute(SemanticConvetion.DB_COLLECTION_NAME,
|
85
85
|
instance.name)
|
86
86
|
|
87
87
|
if gen_ai_endpoint == "chroma.add":
|
88
88
|
db_operation = SemanticConvetion.DB_OPERATION_ADD
|
89
|
-
span.set_attribute(SemanticConvetion.
|
89
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
90
90
|
SemanticConvetion.DB_OPERATION_ADD)
|
91
91
|
span.set_attribute(SemanticConvetion.DB_ID_COUNT,
|
92
92
|
object_count(kwargs.get("ids", [])))
|
@@ -99,7 +99,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
99
99
|
|
100
100
|
elif gen_ai_endpoint == "chroma.get":
|
101
101
|
db_operation = SemanticConvetion.DB_OPERATION_GET
|
102
|
-
span.set_attribute(SemanticConvetion.
|
102
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
103
103
|
SemanticConvetion.DB_OPERATION_GET)
|
104
104
|
span.set_attribute(SemanticConvetion.DB_ID_COUNT,
|
105
105
|
object_count(kwargs.get("ids", [])))
|
@@ -112,7 +112,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
112
112
|
|
113
113
|
elif gen_ai_endpoint == "chroma.query":
|
114
114
|
db_operation = SemanticConvetion.DB_OPERATION_QUERY
|
115
|
-
span.set_attribute(SemanticConvetion.
|
115
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
116
116
|
SemanticConvetion.DB_OPERATION_QUERY)
|
117
117
|
span.set_attribute(SemanticConvetion.DB_STATEMENT,
|
118
118
|
str(kwargs.get("query_texts", "")))
|
@@ -125,7 +125,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
125
125
|
|
126
126
|
elif gen_ai_endpoint == "chroma.update":
|
127
127
|
db_operation = SemanticConvetion.DB_OPERATION_UPDATE
|
128
|
-
span.set_attribute(SemanticConvetion.
|
128
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
129
129
|
SemanticConvetion.DB_OPERATION_UPDATE)
|
130
130
|
span.set_attribute(SemanticConvetion.DB_VECTOR_COUNT,
|
131
131
|
object_count(kwargs.get("embeddings", [])))
|
@@ -138,7 +138,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
138
138
|
|
139
139
|
elif gen_ai_endpoint == "chroma.upsert":
|
140
140
|
db_operation = SemanticConvetion.DB_OPERATION_UPSERT
|
141
|
-
span.set_attribute(SemanticConvetion.
|
141
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
142
142
|
SemanticConvetion.DB_OPERATION_UPSERT)
|
143
143
|
span.set_attribute(SemanticConvetion.DB_VECTOR_COUNT,
|
144
144
|
object_count(kwargs.get("embeddings", [])))
|
@@ -151,7 +151,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
151
151
|
|
152
152
|
elif gen_ai_endpoint == "chroma.delete":
|
153
153
|
db_operation = SemanticConvetion.DB_OPERATION_DELETE
|
154
|
-
span.set_attribute(SemanticConvetion.
|
154
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
155
155
|
SemanticConvetion.DB_OPERATION_DELETE)
|
156
156
|
span.set_attribute(SemanticConvetion.DB_ID_COUNT,
|
157
157
|
object_count(kwargs.get("ids", [])))
|
@@ -164,7 +164,7 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
164
164
|
|
165
165
|
elif gen_ai_endpoint == "chroma.peek":
|
166
166
|
db_operation = SemanticConvetion.DB_OPERATION_PEEK
|
167
|
-
span.set_attribute(SemanticConvetion.
|
167
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
168
168
|
SemanticConvetion.DB_OPERATION_PEEK)
|
169
169
|
|
170
170
|
span.set_status(Status(StatusCode.OK))
|
@@ -175,13 +175,13 @@ def general_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
175
175
|
"openlit",
|
176
176
|
SERVICE_NAME:
|
177
177
|
application_name,
|
178
|
-
SemanticConvetion.
|
178
|
+
SemanticConvetion.DB_SYSTEM_NAME:
|
179
179
|
SemanticConvetion.DB_SYSTEM_CHROMA,
|
180
180
|
DEPLOYMENT_ENVIRONMENT:
|
181
181
|
environment,
|
182
182
|
SemanticConvetion.GEN_AI_OPERATION:
|
183
183
|
SemanticConvetion.GEN_AI_OPERATION_TYPE_VECTORDB,
|
184
|
-
SemanticConvetion.
|
184
|
+
SemanticConvetion.DB_OPERATION_NAME:
|
185
185
|
db_operation
|
186
186
|
}
|
187
187
|
|
@@ -84,13 +84,13 @@ def dynamiq_wrap(gen_ai_endpoint, version, environment, application_name,
|
|
84
84
|
getattr(getattr(instance.flow, 'nodes', [None])[0], 'model', 'default_model'))
|
85
85
|
|
86
86
|
elif gen_ai_endpoint == "dynamiq.memory_add":
|
87
|
-
span.set_attribute(SemanticConvetion.
|
87
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
88
88
|
SemanticConvetion.DB_OPERATION_ADD)
|
89
89
|
span.set_attribute(SemanticConvetion.DB_METADATA, str(kwargs.get('metadata', '')))
|
90
90
|
|
91
91
|
elif gen_ai_endpoint == "dynamiq.memory_search":
|
92
92
|
query_value = kwargs.get('query', '') or (args[0] if args else '')
|
93
|
-
span.set_attribute(SemanticConvetion.
|
93
|
+
span.set_attribute(SemanticConvetion.DB_OPERATION_NAME,
|
94
94
|
SemanticConvetion.DB_OPERATION_GET)
|
95
95
|
span.set_attribute(SemanticConvetion.DB_FILTER, str(kwargs.get('filters', '')))
|
96
96
|
span.set_attribute(SemanticConvetion.DB_STATEMENT, query_value)
|