lmnr 0.6.17__tar.gz → 0.6.19__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.
- {lmnr-0.6.17 → lmnr-0.6.19}/PKG-INFO +70 -80
- {lmnr-0.6.17 → lmnr-0.6.19}/pyproject.toml +8 -14
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/__init__.py +55 -20
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/schema_utils.py +23 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/__init__.py +61 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/__init__.py +442 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +1024 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +297 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/config.py +16 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py +308 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/event_emitter.py +100 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/event_models.py +41 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py +68 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/utils.py +185 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v0/__init__.py +176 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/__init__.py +358 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +319 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py +132 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +626 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/openai/version.py +1 -0
- lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/opentelemetry/__init__.py +69 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/_instrument_initializers.py +12 -3
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/instruments.py +7 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/browser_use_otel.py +1 -1
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/patchright_otel.py +0 -14
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/playwright_otel.py +16 -130
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/pw_utils.py +45 -31
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/version.py +1 -1
- lmnr-0.6.17/LICENSE +0 -75
- {lmnr-0.6.17 → lmnr-0.6.19}/README.md +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/cli.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/.flake8 +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/decorators/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/litellm/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/litellm/utils.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/config.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/utils.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/langgraph/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/langgraph/utils.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/skyvern/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/attributes.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/context_properties.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/exporter.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/processor.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/tracing/tracer.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/utils/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/utils/json_encoder.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/opentelemetry_lib/utils/package_check.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/py.typed +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/rrweb/rrweb.umd.min.cjs +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/browser/utils.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/async_client.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/agent.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/base.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/browser_events.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/evals.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/asynchronous/resources/tags.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/__init__.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/agent.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/base.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/browser_events.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/evals.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/resources/tags.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/client/synchronous/sync_client.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/datasets.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/decorators.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/eval_control.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/evaluations.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/laminar.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/log.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/types.py +0 -0
- {lmnr-0.6.17 → lmnr-0.6.19}/src/lmnr/sdk/utils.py +0 -0
@@ -1,17 +1,76 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: lmnr
|
3
|
-
Version: 0.6.
|
3
|
+
Version: 0.6.19
|
4
4
|
Summary: Python SDK for Laminar
|
5
|
-
License: Apache-2.0
|
6
5
|
Author: lmnr.ai
|
7
|
-
Author-email: founders@lmnr.ai
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
Author-email: lmnr.ai <founders@lmnr.ai>
|
7
|
+
License-Expression: Apache-2.0
|
8
|
+
Requires-Dist: pydantic>=2.0.3,<3.0.0
|
9
|
+
Requires-Dist: python-dotenv>=1.0
|
10
|
+
Requires-Dist: opentelemetry-api>=1.33.0
|
11
|
+
Requires-Dist: opentelemetry-sdk>=1.33.0
|
12
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-http>=1.33.0
|
13
|
+
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.33.0
|
14
|
+
Requires-Dist: opentelemetry-semantic-conventions>=0.54b0
|
15
|
+
Requires-Dist: opentelemetry-semantic-conventions-ai>=0.4.9
|
16
|
+
Requires-Dist: tqdm>=4.0
|
17
|
+
Requires-Dist: tenacity>=8.0
|
18
|
+
Requires-Dist: grpcio>=1
|
19
|
+
Requires-Dist: httpx>=0.25.0
|
20
|
+
Requires-Dist: opentelemetry-instrumentation-threading>=0.54b0
|
21
|
+
Requires-Dist: opentelemetry-instrumentation-alephalpha>=0.40.12 ; extra == 'alephalpha'
|
22
|
+
Requires-Dist: opentelemetry-instrumentation-alephalpha>=0.40.12 ; extra == 'all'
|
23
|
+
Requires-Dist: opentelemetry-instrumentation-anthropic>=0.40.12 ; extra == 'all'
|
24
|
+
Requires-Dist: opentelemetry-instrumentation-bedrock>=0.40.12 ; extra == 'all'
|
25
|
+
Requires-Dist: opentelemetry-instrumentation-chromadb>=0.40.12 ; extra == 'all'
|
26
|
+
Requires-Dist: opentelemetry-instrumentation-cohere>=0.40.12 ; extra == 'all'
|
27
|
+
Requires-Dist: opentelemetry-instrumentation-crewai>=0.40.12 ; extra == 'all'
|
28
|
+
Requires-Dist: opentelemetry-instrumentation-google-generativeai<0.40.10 ; extra == 'all'
|
29
|
+
Requires-Dist: opentelemetry-instrumentation-groq>=0.40.12 ; extra == 'all'
|
30
|
+
Requires-Dist: opentelemetry-instrumentation-haystack>=0.40.12 ; extra == 'all'
|
31
|
+
Requires-Dist: opentelemetry-instrumentation-lancedb>=0.40.12 ; extra == 'all'
|
32
|
+
Requires-Dist: opentelemetry-instrumentation-langchain>=0.40.12 ; extra == 'all'
|
33
|
+
Requires-Dist: opentelemetry-instrumentation-llamaindex>=0.40.12 ; extra == 'all'
|
34
|
+
Requires-Dist: opentelemetry-instrumentation-marqo>=0.40.12 ; extra == 'all'
|
35
|
+
Requires-Dist: opentelemetry-instrumentation-mcp>=0.40.12 ; extra == 'all'
|
36
|
+
Requires-Dist: opentelemetry-instrumentation-milvus>=0.40.12 ; extra == 'all'
|
37
|
+
Requires-Dist: opentelemetry-instrumentation-mistralai>=0.40.12 ; extra == 'all'
|
38
|
+
Requires-Dist: opentelemetry-instrumentation-ollama>=0.40.12 ; extra == 'all'
|
39
|
+
Requires-Dist: opentelemetry-instrumentation-pinecone>=0.40.12 ; extra == 'all'
|
40
|
+
Requires-Dist: opentelemetry-instrumentation-qdrant>=0.40.12 ; extra == 'all'
|
41
|
+
Requires-Dist: opentelemetry-instrumentation-replicate>=0.40.12 ; extra == 'all'
|
42
|
+
Requires-Dist: opentelemetry-instrumentation-sagemaker>=0.40.12 ; extra == 'all'
|
43
|
+
Requires-Dist: opentelemetry-instrumentation-together>=0.40.12 ; extra == 'all'
|
44
|
+
Requires-Dist: opentelemetry-instrumentation-transformers>=0.40.12 ; extra == 'all'
|
45
|
+
Requires-Dist: opentelemetry-instrumentation-vertexai>=0.40.12 ; extra == 'all'
|
46
|
+
Requires-Dist: opentelemetry-instrumentation-watsonx>=0.40.12 ; extra == 'all'
|
47
|
+
Requires-Dist: opentelemetry-instrumentation-weaviate>=0.40.12 ; extra == 'all'
|
48
|
+
Requires-Dist: opentelemetry-instrumentation-anthropic>=0.40.12 ; extra == 'anthropic'
|
49
|
+
Requires-Dist: opentelemetry-instrumentation-bedrock>=0.40.12 ; extra == 'bedrock'
|
50
|
+
Requires-Dist: opentelemetry-instrumentation-chromadb>=0.40.12 ; extra == 'chromadb'
|
51
|
+
Requires-Dist: opentelemetry-instrumentation-cohere>=0.40.12 ; extra == 'cohere'
|
52
|
+
Requires-Dist: opentelemetry-instrumentation-crewai>=0.40.12 ; extra == 'crewai'
|
53
|
+
Requires-Dist: opentelemetry-instrumentation-google-generativeai<0.40.10 ; extra == 'google-generativeai'
|
54
|
+
Requires-Dist: opentelemetry-instrumentation-groq>=0.40.12 ; extra == 'groq'
|
55
|
+
Requires-Dist: opentelemetry-instrumentation-haystack>=0.40.12 ; extra == 'haystack'
|
56
|
+
Requires-Dist: opentelemetry-instrumentation-lancedb>=0.40.12 ; extra == 'lancedb'
|
57
|
+
Requires-Dist: opentelemetry-instrumentation-langchain>=0.40.12 ; extra == 'langchain'
|
58
|
+
Requires-Dist: opentelemetry-instrumentation-llamaindex>=0.40.12 ; extra == 'llamaindex'
|
59
|
+
Requires-Dist: opentelemetry-instrumentation-marqo>=0.40.12 ; extra == 'marqo'
|
60
|
+
Requires-Dist: opentelemetry-instrumentation-mcp>=0.40.12 ; extra == 'mcp'
|
61
|
+
Requires-Dist: opentelemetry-instrumentation-milvus>=0.40.12 ; extra == 'milvus'
|
62
|
+
Requires-Dist: opentelemetry-instrumentation-mistralai>=0.40.12 ; extra == 'mistralai'
|
63
|
+
Requires-Dist: opentelemetry-instrumentation-ollama>=0.40.12 ; extra == 'ollama'
|
64
|
+
Requires-Dist: opentelemetry-instrumentation-pinecone>=0.40.12 ; extra == 'pinecone'
|
65
|
+
Requires-Dist: opentelemetry-instrumentation-qdrant>=0.40.12 ; extra == 'qdrant'
|
66
|
+
Requires-Dist: opentelemetry-instrumentation-replicate>=0.40.12 ; extra == 'replicate'
|
67
|
+
Requires-Dist: opentelemetry-instrumentation-sagemaker>=0.40.12 ; extra == 'sagemaker'
|
68
|
+
Requires-Dist: opentelemetry-instrumentation-together>=0.40.12 ; extra == 'together'
|
69
|
+
Requires-Dist: opentelemetry-instrumentation-transformers>=0.40.12 ; extra == 'transformers'
|
70
|
+
Requires-Dist: opentelemetry-instrumentation-vertexai>=0.40.12 ; extra == 'vertexai'
|
71
|
+
Requires-Dist: opentelemetry-instrumentation-watsonx>=0.40.12 ; extra == 'watsonx'
|
72
|
+
Requires-Dist: opentelemetry-instrumentation-weaviate>=0.40.12 ; extra == 'weaviate'
|
73
|
+
Requires-Python: >=3.10, <4
|
15
74
|
Provides-Extra: alephalpha
|
16
75
|
Provides-Extra: all
|
17
76
|
Provides-Extra: anthropic
|
@@ -30,7 +89,6 @@ Provides-Extra: mcp
|
|
30
89
|
Provides-Extra: milvus
|
31
90
|
Provides-Extra: mistralai
|
32
91
|
Provides-Extra: ollama
|
33
|
-
Provides-Extra: openai
|
34
92
|
Provides-Extra: pinecone
|
35
93
|
Provides-Extra: qdrant
|
36
94
|
Provides-Extra: replicate
|
@@ -40,73 +98,6 @@ Provides-Extra: transformers
|
|
40
98
|
Provides-Extra: vertexai
|
41
99
|
Provides-Extra: watsonx
|
42
100
|
Provides-Extra: weaviate
|
43
|
-
Requires-Dist: grpcio (>=1)
|
44
|
-
Requires-Dist: httpx (>=0.25.0)
|
45
|
-
Requires-Dist: opentelemetry-api (>=1.33.0)
|
46
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-grpc (>=1.33.0)
|
47
|
-
Requires-Dist: opentelemetry-exporter-otlp-proto-http (>=1.33.0)
|
48
|
-
Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.40.12) ; extra == "alephalpha"
|
49
|
-
Requires-Dist: opentelemetry-instrumentation-alephalpha (>=0.40.12) ; extra == "all"
|
50
|
-
Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.40.12) ; extra == "all"
|
51
|
-
Requires-Dist: opentelemetry-instrumentation-anthropic (>=0.40.12) ; extra == "anthropic"
|
52
|
-
Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.40.12) ; extra == "all"
|
53
|
-
Requires-Dist: opentelemetry-instrumentation-bedrock (>=0.40.12) ; extra == "bedrock"
|
54
|
-
Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.40.12) ; extra == "all"
|
55
|
-
Requires-Dist: opentelemetry-instrumentation-chromadb (>=0.40.12) ; extra == "chromadb"
|
56
|
-
Requires-Dist: opentelemetry-instrumentation-cohere (>=0.40.12) ; extra == "all"
|
57
|
-
Requires-Dist: opentelemetry-instrumentation-cohere (>=0.40.12) ; extra == "cohere"
|
58
|
-
Requires-Dist: opentelemetry-instrumentation-crewai (>=0.40.12) ; extra == "all"
|
59
|
-
Requires-Dist: opentelemetry-instrumentation-crewai (>=0.40.12) ; extra == "crewai"
|
60
|
-
Requires-Dist: opentelemetry-instrumentation-google-generativeai (<0.40.10) ; extra == "all"
|
61
|
-
Requires-Dist: opentelemetry-instrumentation-google-generativeai (<0.40.10) ; extra == "google-generativeai"
|
62
|
-
Requires-Dist: opentelemetry-instrumentation-groq (>=0.40.12) ; extra == "all"
|
63
|
-
Requires-Dist: opentelemetry-instrumentation-groq (>=0.40.12) ; extra == "groq"
|
64
|
-
Requires-Dist: opentelemetry-instrumentation-haystack (>=0.40.12) ; extra == "all"
|
65
|
-
Requires-Dist: opentelemetry-instrumentation-haystack (>=0.40.12) ; extra == "haystack"
|
66
|
-
Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.40.12) ; extra == "all"
|
67
|
-
Requires-Dist: opentelemetry-instrumentation-lancedb (>=0.40.12) ; extra == "lancedb"
|
68
|
-
Requires-Dist: opentelemetry-instrumentation-langchain (>=0.40.12) ; extra == "all"
|
69
|
-
Requires-Dist: opentelemetry-instrumentation-langchain (>=0.40.12) ; extra == "langchain"
|
70
|
-
Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.40.12) ; extra == "all"
|
71
|
-
Requires-Dist: opentelemetry-instrumentation-llamaindex (>=0.40.12) ; extra == "llamaindex"
|
72
|
-
Requires-Dist: opentelemetry-instrumentation-marqo (>=0.40.12) ; extra == "all"
|
73
|
-
Requires-Dist: opentelemetry-instrumentation-marqo (>=0.40.12) ; extra == "marqo"
|
74
|
-
Requires-Dist: opentelemetry-instrumentation-mcp (>=0.40.12) ; extra == "all"
|
75
|
-
Requires-Dist: opentelemetry-instrumentation-mcp (>=0.40.12) ; extra == "mcp"
|
76
|
-
Requires-Dist: opentelemetry-instrumentation-milvus (>=0.40.12) ; extra == "all"
|
77
|
-
Requires-Dist: opentelemetry-instrumentation-milvus (>=0.40.12) ; extra == "milvus"
|
78
|
-
Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.40.12) ; extra == "all"
|
79
|
-
Requires-Dist: opentelemetry-instrumentation-mistralai (>=0.40.12) ; extra == "mistralai"
|
80
|
-
Requires-Dist: opentelemetry-instrumentation-ollama (>=0.40.12) ; extra == "all"
|
81
|
-
Requires-Dist: opentelemetry-instrumentation-ollama (>=0.40.12) ; extra == "ollama"
|
82
|
-
Requires-Dist: opentelemetry-instrumentation-openai (>=0.40.12) ; extra == "all"
|
83
|
-
Requires-Dist: opentelemetry-instrumentation-openai (>=0.40.12) ; extra == "openai"
|
84
|
-
Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.40.12) ; extra == "all"
|
85
|
-
Requires-Dist: opentelemetry-instrumentation-pinecone (>=0.40.12) ; extra == "pinecone"
|
86
|
-
Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.40.12) ; extra == "all"
|
87
|
-
Requires-Dist: opentelemetry-instrumentation-qdrant (>=0.40.12) ; extra == "qdrant"
|
88
|
-
Requires-Dist: opentelemetry-instrumentation-replicate (>=0.40.12) ; extra == "all"
|
89
|
-
Requires-Dist: opentelemetry-instrumentation-replicate (>=0.40.12) ; extra == "replicate"
|
90
|
-
Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.40.12) ; extra == "all"
|
91
|
-
Requires-Dist: opentelemetry-instrumentation-sagemaker (>=0.40.12) ; extra == "sagemaker"
|
92
|
-
Requires-Dist: opentelemetry-instrumentation-threading (>=0.54b0)
|
93
|
-
Requires-Dist: opentelemetry-instrumentation-together (>=0.40.12) ; extra == "all"
|
94
|
-
Requires-Dist: opentelemetry-instrumentation-together (>=0.40.12) ; extra == "together"
|
95
|
-
Requires-Dist: opentelemetry-instrumentation-transformers (>=0.40.12) ; extra == "all"
|
96
|
-
Requires-Dist: opentelemetry-instrumentation-transformers (>=0.40.12) ; extra == "transformers"
|
97
|
-
Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.40.12) ; extra == "all"
|
98
|
-
Requires-Dist: opentelemetry-instrumentation-vertexai (>=0.40.12) ; extra == "vertexai"
|
99
|
-
Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.40.12) ; extra == "all"
|
100
|
-
Requires-Dist: opentelemetry-instrumentation-watsonx (>=0.40.12) ; extra == "watsonx"
|
101
|
-
Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.40.12) ; extra == "all"
|
102
|
-
Requires-Dist: opentelemetry-instrumentation-weaviate (>=0.40.12) ; extra == "weaviate"
|
103
|
-
Requires-Dist: opentelemetry-sdk (>=1.33.0)
|
104
|
-
Requires-Dist: opentelemetry-semantic-conventions (>=0.54b0)
|
105
|
-
Requires-Dist: opentelemetry-semantic-conventions-ai (>=0.4.8)
|
106
|
-
Requires-Dist: pydantic (>=2.0.3,<3.0.0)
|
107
|
-
Requires-Dist: python-dotenv (>=1.0)
|
108
|
-
Requires-Dist: tenacity (>=8.0)
|
109
|
-
Requires-Dist: tqdm (>=4.0)
|
110
101
|
Description-Content-Type: text/markdown
|
111
102
|
|
112
103
|
# Laminar Python
|
@@ -378,4 +369,3 @@ async for chunk in client.agent.run(
|
|
378
369
|
elif chunk.chunk_type == 'finalOutput':
|
379
370
|
print(chunk.content.result.content)
|
380
371
|
```
|
381
|
-
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
[project]
|
8
8
|
name = "lmnr"
|
9
|
-
version = "0.6.
|
9
|
+
version = "0.6.19"
|
10
10
|
description = "Python SDK for Laminar"
|
11
11
|
authors = [
|
12
12
|
{ name = "lmnr.ai", email = "founders@lmnr.ai" }
|
@@ -22,7 +22,7 @@ dependencies = [
|
|
22
22
|
"opentelemetry-exporter-otlp-proto-http (>=1.33.0)",
|
23
23
|
"opentelemetry-exporter-otlp-proto-grpc (>=1.33.0)",
|
24
24
|
"opentelemetry-semantic-conventions (>=0.54b0)",
|
25
|
-
"opentelemetry-semantic-conventions-ai (>=0.4.
|
25
|
+
"opentelemetry-semantic-conventions-ai (>=0.4.9)",
|
26
26
|
"tqdm (>=4.0)",
|
27
27
|
"tenacity (>=8.0)",
|
28
28
|
# Since 1.68.0, grpcio writes a warning message
|
@@ -45,10 +45,10 @@ lmnr = "lmnr.cli:cli"
|
|
45
45
|
[project.optional-dependencies]
|
46
46
|
# List of all possible extras. You can specify one or more of these extras
|
47
47
|
# when installing the package, using any of the following examples:
|
48
|
-
# `pip install 'lmnr[anthropic,
|
49
|
-
# `uv pip install 'lmnr[anthropic,
|
50
|
-
# `uv add lmnr --extra anthropic --extra
|
51
|
-
# `poetry add 'lmnr[anthropic,
|
48
|
+
# `pip install 'lmnr[anthropic,groq]'`
|
49
|
+
# `uv pip install 'lmnr[anthropic,groq]'`
|
50
|
+
# `uv add lmnr --extra anthropic --extra groq`
|
51
|
+
# `poetry add 'lmnr[anthropic,groq]'`
|
52
52
|
|
53
53
|
alephalpha=["opentelemetry-instrumentation-alephalpha>=0.40.12"]
|
54
54
|
anthropic=["opentelemetry-instrumentation-anthropic>=0.40.12"]
|
@@ -73,7 +73,6 @@ mcp=["opentelemetry-instrumentation-mcp>=0.40.12"]
|
|
73
73
|
milvus=["opentelemetry-instrumentation-milvus>=0.40.12"]
|
74
74
|
mistralai=["opentelemetry-instrumentation-mistralai>=0.40.12"]
|
75
75
|
ollama=["opentelemetry-instrumentation-ollama>=0.40.12"]
|
76
|
-
openai=["opentelemetry-instrumentation-openai>=0.40.12"]
|
77
76
|
pinecone=["opentelemetry-instrumentation-pinecone>=0.40.12"]
|
78
77
|
qdrant=["opentelemetry-instrumentation-qdrant>=0.40.12"]
|
79
78
|
replicate=["opentelemetry-instrumentation-replicate>=0.40.12"]
|
@@ -106,7 +105,6 @@ all = [
|
|
106
105
|
"opentelemetry-instrumentation-milvus>=0.40.12",
|
107
106
|
"opentelemetry-instrumentation-mistralai>=0.40.12",
|
108
107
|
"opentelemetry-instrumentation-ollama>=0.40.12",
|
109
|
-
"opentelemetry-instrumentation-openai>=0.40.12",
|
110
108
|
"opentelemetry-instrumentation-pinecone>=0.40.12",
|
111
109
|
"opentelemetry-instrumentation-qdrant>=0.40.12",
|
112
110
|
"opentelemetry-instrumentation-replicate>=0.40.12",
|
@@ -138,12 +136,8 @@ dev = [
|
|
138
136
|
]
|
139
137
|
|
140
138
|
[build-system]
|
141
|
-
requires = ["
|
142
|
-
build-backend = "
|
139
|
+
requires = ["uv_build>=0.7.19,<0.8"]
|
140
|
+
build-backend = "uv_build"
|
143
141
|
|
144
142
|
[tool.uv.workspace]
|
145
143
|
members = ["examples/fastapi-app"]
|
146
|
-
# we can move to uv_build, once it's more stable
|
147
|
-
# https://github.com/astral-sh/uv/issues/3957
|
148
|
-
# requires = ["uv_build>=0.6.16,<0.7"]
|
149
|
-
# build-backend = "uv_build"
|
@@ -11,6 +11,7 @@ from google.genai import types
|
|
11
11
|
from .config import (
|
12
12
|
Config,
|
13
13
|
)
|
14
|
+
from .schema_utils import SchemaJSONEncoder, process_schema
|
14
15
|
from .utils import (
|
15
16
|
dont_throw,
|
16
17
|
get_content,
|
@@ -24,8 +25,9 @@ from opentelemetry.trace import Tracer
|
|
24
25
|
from wrapt import wrap_function_wrapper
|
25
26
|
|
26
27
|
from opentelemetry import context as context_api
|
27
|
-
from opentelemetry.trace import get_tracer, SpanKind, Span
|
28
|
+
from opentelemetry.trace import get_tracer, SpanKind, Span, Status, StatusCode
|
28
29
|
from opentelemetry.semconv._incubating.attributes import gen_ai_attributes
|
30
|
+
from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
|
29
31
|
|
30
32
|
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
31
33
|
from opentelemetry.instrumentation.utils import _SUPPRESS_INSTRUMENTATION_KEY, unwrap
|
@@ -78,7 +80,7 @@ WRAPPED_METHODS = [
|
|
78
80
|
|
79
81
|
def should_send_prompts():
|
80
82
|
return (
|
81
|
-
os.getenv("
|
83
|
+
os.getenv("LAMINAR_TRACE_CONTENT") or "true"
|
82
84
|
).lower() == "true" or context_api.get_value("override_enable_content_tracing")
|
83
85
|
|
84
86
|
|
@@ -128,6 +130,29 @@ def _set_request_attributes(span, args, kwargs):
|
|
128
130
|
span, gen_ai_attributes.GEN_AI_REQUEST_SEED, config_dict.get("seed")
|
129
131
|
)
|
130
132
|
|
133
|
+
if schema := config_dict.get("response_schema"):
|
134
|
+
try:
|
135
|
+
set_span_attribute(
|
136
|
+
span,
|
137
|
+
# TODO: change to SpanAttributes.LLM_REQUEST_STRUCTURED_OUTPUT_SCHEMA
|
138
|
+
# when we upgrade to opentelemetry-semantic-conventions-ai>=0.4.10
|
139
|
+
"gen_ai.request.structured_output_schema",
|
140
|
+
json.dumps(process_schema(schema), cls=SchemaJSONEncoder),
|
141
|
+
)
|
142
|
+
except Exception:
|
143
|
+
pass
|
144
|
+
elif json_schema := config_dict.get("response_json_schema"):
|
145
|
+
try:
|
146
|
+
set_span_attribute(
|
147
|
+
span,
|
148
|
+
# TODO: change to SpanAttributes.LLM_REQUEST_STRUCTURED_OUTPUT_SCHEMA
|
149
|
+
# when we upgrade to opentelemetry-semantic-conventions-ai>=0.4.10
|
150
|
+
"gen_ai.request.structured_output_schema",
|
151
|
+
json.dumps(json_schema),
|
152
|
+
)
|
153
|
+
except Exception:
|
154
|
+
pass
|
155
|
+
|
131
156
|
tools: list[types.FunctionDeclaration] = []
|
132
157
|
arg_tools = config_dict.get("tools", kwargs.get("tools"))
|
133
158
|
if arg_tools:
|
@@ -454,16 +479,20 @@ def _wrap(tracer: Tracer, to_wrap, wrapped, instance, args, kwargs):
|
|
454
479
|
if span.is_recording():
|
455
480
|
_set_request_attributes(span, args, kwargs)
|
456
481
|
|
457
|
-
|
458
|
-
return _build_from_streaming_response(span, wrapped(*args, **kwargs))
|
459
|
-
else:
|
482
|
+
try:
|
460
483
|
response = wrapped(*args, **kwargs)
|
461
|
-
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
484
|
+
if to_wrap.get("is_streaming"):
|
485
|
+
return _build_from_streaming_response(span, response)
|
486
|
+
if span.is_recording():
|
487
|
+
_set_response_attributes(span, response)
|
488
|
+
span.end()
|
489
|
+
return response
|
490
|
+
except Exception as e:
|
491
|
+
span.set_attribute(ERROR_TYPE, e.__class__.__name__)
|
492
|
+
span.record_exception(e)
|
493
|
+
span.set_status(Status(StatusCode.ERROR, str(e)))
|
494
|
+
span.end()
|
495
|
+
raise e
|
467
496
|
|
468
497
|
|
469
498
|
@with_tracer_wrapper
|
@@ -485,16 +514,22 @@ async def _awrap(tracer: Tracer, to_wrap, wrapped, instance, args, kwargs):
|
|
485
514
|
if span.is_recording():
|
486
515
|
_set_request_attributes(span, args, kwargs)
|
487
516
|
|
488
|
-
|
489
|
-
return _abuild_from_streaming_response(span, await wrapped(*args, **kwargs))
|
490
|
-
else:
|
517
|
+
try:
|
491
518
|
response = await wrapped(*args, **kwargs)
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
519
|
+
if to_wrap.get("is_streaming"):
|
520
|
+
return _abuild_from_streaming_response(span, response)
|
521
|
+
else:
|
522
|
+
if span.is_recording():
|
523
|
+
_set_response_attributes(span, response)
|
524
|
+
|
525
|
+
span.end()
|
526
|
+
return response
|
527
|
+
except Exception as e:
|
528
|
+
span.set_attribute(ERROR_TYPE, e.__class__.__name__)
|
529
|
+
span.record_exception(e)
|
530
|
+
span.set_status(Status(StatusCode.ERROR, str(e)))
|
531
|
+
span.end()
|
532
|
+
raise e
|
498
533
|
|
499
534
|
|
500
535
|
class GoogleGenAiSdkInstrumentor(BaseInstrumentor):
|
lmnr-0.6.19/src/lmnr/opentelemetry_lib/opentelemetry/instrumentation/google_genai/schema_utils.py
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
from typing import Any
|
2
|
+
from google.genai._api_client import BaseApiClient
|
3
|
+
from google.genai._transformers import t_schema
|
4
|
+
from google.genai.types import JSONSchemaType
|
5
|
+
|
6
|
+
import json
|
7
|
+
|
8
|
+
DUMMY_CLIENT = BaseApiClient(api_key="dummy")
|
9
|
+
|
10
|
+
|
11
|
+
def process_schema(schema: Any) -> dict[str, Any]:
|
12
|
+
# The only thing we need from the client is the t_schema function
|
13
|
+
json_schema = t_schema(DUMMY_CLIENT, schema).json_schema.model_dump(
|
14
|
+
exclude_unset=True, exclude_none=True
|
15
|
+
)
|
16
|
+
return json_schema
|
17
|
+
|
18
|
+
|
19
|
+
class SchemaJSONEncoder(json.JSONEncoder):
|
20
|
+
def default(self, o: Any) -> Any:
|
21
|
+
if isinstance(o, JSONSchemaType):
|
22
|
+
return o.value
|
23
|
+
return super().default(o)
|
@@ -0,0 +1,61 @@
|
|
1
|
+
"""
|
2
|
+
Initially copied over from openllmetry, commit
|
3
|
+
b3a18c9f7e6ff2368c8fb0bc35fd9123f11121c4
|
4
|
+
"""
|
5
|
+
|
6
|
+
from typing import Callable, Collection, Optional
|
7
|
+
|
8
|
+
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
|
9
|
+
from .shared.config import Config
|
10
|
+
from .utils import is_openai_v1
|
11
|
+
from typing_extensions import Coroutine
|
12
|
+
|
13
|
+
_instruments = ("openai >= 0.27.0",)
|
14
|
+
|
15
|
+
|
16
|
+
class OpenAIInstrumentor(BaseInstrumentor):
|
17
|
+
"""An instrumentor for OpenAI's client library."""
|
18
|
+
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
enrich_assistant: bool = False,
|
22
|
+
enrich_token_usage: bool = False,
|
23
|
+
exception_logger=None,
|
24
|
+
get_common_metrics_attributes: Callable[[], dict] = lambda: {},
|
25
|
+
upload_base64_image: Optional[
|
26
|
+
Callable[[str, str, str, str], Coroutine[None, None, str]]
|
27
|
+
] = lambda *args: "",
|
28
|
+
enable_trace_context_propagation: bool = True,
|
29
|
+
use_legacy_attributes: bool = True,
|
30
|
+
):
|
31
|
+
super().__init__()
|
32
|
+
Config.enrich_assistant = enrich_assistant
|
33
|
+
Config.enrich_token_usage = enrich_token_usage
|
34
|
+
Config.exception_logger = exception_logger
|
35
|
+
Config.get_common_metrics_attributes = get_common_metrics_attributes
|
36
|
+
Config.upload_base64_image = upload_base64_image
|
37
|
+
Config.enable_trace_context_propagation = enable_trace_context_propagation
|
38
|
+
Config.use_legacy_attributes = use_legacy_attributes
|
39
|
+
|
40
|
+
def instrumentation_dependencies(self) -> Collection[str]:
|
41
|
+
return _instruments
|
42
|
+
|
43
|
+
def _instrument(self, **kwargs):
|
44
|
+
if is_openai_v1():
|
45
|
+
from .v1 import OpenAIV1Instrumentor
|
46
|
+
|
47
|
+
OpenAIV1Instrumentor().instrument(**kwargs)
|
48
|
+
else:
|
49
|
+
from .v0 import OpenAIV0Instrumentor
|
50
|
+
|
51
|
+
OpenAIV0Instrumentor().instrument(**kwargs)
|
52
|
+
|
53
|
+
def _uninstrument(self, **kwargs):
|
54
|
+
if is_openai_v1():
|
55
|
+
from .v1 import OpenAIV1Instrumentor
|
56
|
+
|
57
|
+
OpenAIV1Instrumentor().uninstrument(**kwargs)
|
58
|
+
else:
|
59
|
+
from .v0 import OpenAIV0Instrumentor
|
60
|
+
|
61
|
+
OpenAIV0Instrumentor().uninstrument(**kwargs)
|