langtrace-python-sdk 2.1.8__py3-none-any.whl → 2.1.10__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 (30) hide show
  1. examples/pinecone_example/basic.py +2 -2
  2. langtrace_python_sdk/__init__.py +2 -2
  3. langtrace_python_sdk/constants/__init__.py +1 -0
  4. langtrace_python_sdk/instrumentation/anthropic/patch.py +4 -1
  5. langtrace_python_sdk/instrumentation/chroma/patch.py +4 -1
  6. langtrace_python_sdk/instrumentation/cohere/patch.py +7 -4
  7. langtrace_python_sdk/instrumentation/groq/patch.py +5 -2
  8. langtrace_python_sdk/instrumentation/langchain/patch.py +2 -1
  9. langtrace_python_sdk/instrumentation/langchain_community/patch.py +4 -1
  10. langtrace_python_sdk/instrumentation/langchain_core/patch.py +5 -2
  11. langtrace_python_sdk/instrumentation/langgraph/patch.py +4 -1
  12. langtrace_python_sdk/instrumentation/llamaindex/patch.py +5 -2
  13. langtrace_python_sdk/instrumentation/openai/patch.py +9 -6
  14. langtrace_python_sdk/instrumentation/pinecone/patch.py +4 -1
  15. langtrace_python_sdk/instrumentation/qdrant/patch.py +4 -1
  16. langtrace_python_sdk/instrumentation/weaviate/patch.py +4 -1
  17. langtrace_python_sdk/utils/sdk_version_checker.py +23 -18
  18. langtrace_python_sdk/utils/with_root_span.py +72 -56
  19. langtrace_python_sdk/version.py +1 -1
  20. {langtrace_python_sdk-2.1.8.dist-info → langtrace_python_sdk-2.1.10.dist-info}/METADATA +1 -1
  21. {langtrace_python_sdk-2.1.8.dist-info → langtrace_python_sdk-2.1.10.dist-info}/RECORD +30 -30
  22. tests/anthropic/test_anthropic.py +4 -2
  23. tests/cohere/test_cohere_chat.py +4 -2
  24. tests/cohere/test_cohere_embed.py +5 -5
  25. tests/cohere/test_cohere_rerank.py +4 -7
  26. tests/openai/test_chat_completion.py +7 -13
  27. tests/openai/test_image_generation.py +5 -9
  28. tests/pinecone/test_pinecone.py +5 -9
  29. {langtrace_python_sdk-2.1.8.dist-info → langtrace_python_sdk-2.1.10.dist-info}/WHEEL +0 -0
  30. {langtrace_python_sdk-2.1.8.dist-info → langtrace_python_sdk-2.1.10.dist-info}/licenses/LICENSE +0 -0
@@ -7,7 +7,7 @@ from openai import OpenAI
7
7
  from pinecone import Pinecone, ServerlessSpec
8
8
 
9
9
  from langtrace_python_sdk import langtrace, with_langtrace_root_span
10
- from langtrace_python_sdk.utils.with_root_span import send_user_feedback
10
+ from langtrace_python_sdk.utils.with_root_span import SendUserFeedback
11
11
 
12
12
  _ = load_dotenv(find_dotenv())
13
13
 
@@ -48,7 +48,7 @@ def basic(span_id=None, trace_id=None):
48
48
  resp = index.query(
49
49
  vector=embedding, top_k=1, include_values=False, namespace="test-namespace"
50
50
  )
51
- send_user_feedback(
51
+ SendUserFeedback().evaluate(
52
52
  {"spanId": span_id, "traceId": trace_id, "userScore": 1, "userId": "123"}
53
53
  )
54
54
  return [res, resp]
@@ -17,11 +17,11 @@ limitations under the License.
17
17
  from langtrace_python_sdk import langtrace
18
18
  from langtrace_python_sdk.utils.with_root_span import with_langtrace_root_span
19
19
  from langtrace_python_sdk.utils.prompt_registry import get_prompt_from_registry
20
- from langtrace_python_sdk.utils.with_root_span import send_user_feedback
20
+ from langtrace_python_sdk.utils.with_root_span import SendUserFeedback
21
21
 
22
22
  __all__ = [
23
23
  "langtrace",
24
24
  "with_langtrace_root_span",
25
25
  "get_prompt_from_registry",
26
- "send_user_feedback",
26
+ "SendUserFeedback",
27
27
  ]
@@ -0,0 +1 @@
1
+ LANGTRACE_SDK_NAME = "langtrace-python-sdk"
@@ -26,6 +26,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
26
26
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
27
27
  SERVICE_PROVIDERS,
28
28
  )
29
+ from importlib_metadata import version as v
30
+
31
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
29
32
 
30
33
 
31
34
  def messages_create(original_method, version, tracer):
@@ -54,7 +57,7 @@ def messages_create(original_method, version, tracer):
54
57
  "langtrace.service.name": service_provider,
55
58
  "langtrace.service.type": "llm",
56
59
  "langtrace.service.version": version,
57
- "langtrace.version": "1.0.0",
60
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
58
61
  "url.full": base_url,
59
62
  "llm.api": APIS["MESSAGES_CREATE"]["ENDPOINT"],
60
63
  "llm.model": kwargs.get("model"),
@@ -27,6 +27,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
27
27
  SERVICE_PROVIDERS,
28
28
  )
29
29
  import json
30
+ from importlib_metadata import version as v
31
+
32
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
30
33
 
31
34
 
32
35
  def collection_patch(method, version, tracer):
@@ -44,7 +47,7 @@ def collection_patch(method, version, tracer):
44
47
  "langtrace.service.name": service_provider,
45
48
  "langtrace.service.type": "vectordb",
46
49
  "langtrace.service.version": version,
47
- "langtrace.version": "1.0.0",
50
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
48
51
  "db.system": "chromadb",
49
52
  "db.operation": api["OPERATION"],
50
53
  "db.query": json.dumps(kwargs.get("query")),
@@ -26,6 +26,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
26
26
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
27
27
  SERVICE_PROVIDERS,
28
28
  )
29
+ from importlib_metadata import version as v
30
+
31
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
29
32
 
30
33
 
31
34
  def rerank(original_method, version, tracer):
@@ -40,7 +43,7 @@ def rerank(original_method, version, tracer):
40
43
  "langtrace.service.name": service_provider,
41
44
  "langtrace.service.type": "llm",
42
45
  "langtrace.service.version": version,
43
- "langtrace.version": "1.0.0",
46
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
44
47
  "url.full": APIS["RERANK"]["URL"],
45
48
  "llm.api": APIS["RERANK"]["ENDPOINT"],
46
49
  "llm.model": kwargs.get("model"),
@@ -132,7 +135,7 @@ def embed(original_method, version, tracer):
132
135
  "langtrace.service.name": service_provider,
133
136
  "langtrace.service.type": "llm",
134
137
  "langtrace.service.version": version,
135
- "langtrace.version": "1.0.0",
138
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
136
139
  "url.full": APIS["EMBED"]["URL"],
137
140
  "llm.api": APIS["EMBED"]["ENDPOINT"],
138
141
  "llm.model": kwargs.get("model"),
@@ -242,7 +245,7 @@ def chat_create(original_method, version, tracer):
242
245
  "langtrace.service.name": service_provider,
243
246
  "langtrace.service.type": "llm",
244
247
  "langtrace.service.version": version,
245
- "langtrace.version": "1.0.0",
248
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
246
249
  "url.full": APIS["CHAT_CREATE"]["URL"],
247
250
  "llm.api": APIS["CHAT_CREATE"]["ENDPOINT"],
248
251
  "llm.model": (
@@ -437,7 +440,7 @@ def chat_stream(original_method, version, tracer):
437
440
  "langtrace.service.name": service_provider,
438
441
  "langtrace.service.type": "llm",
439
442
  "langtrace.service.version": version,
440
- "langtrace.version": "1.0.0",
443
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
441
444
  "url.full": APIS["CHAT_STREAM"]["URL"],
442
445
  "llm.api": APIS["CHAT_STREAM"]["ENDPOINT"],
443
446
  "llm.model": (
@@ -27,6 +27,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
27
27
  )
28
28
  from langtrace_python_sdk.constants.instrumentation.groq import APIS
29
29
  from langtrace_python_sdk.utils.llm import calculate_prompt_tokens, estimate_tokens
30
+ from importlib_metadata import version as v
31
+
32
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
30
33
 
31
34
 
32
35
  def chat_completions_create(original_method, version, tracer):
@@ -80,7 +83,7 @@ def chat_completions_create(original_method, version, tracer):
80
83
  "langtrace.service.name": service_provider,
81
84
  "langtrace.service.type": "llm",
82
85
  "langtrace.service.version": version,
83
- "langtrace.version": "1.0.0",
86
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
84
87
  "url.full": base_url,
85
88
  "llm.api": APIS["CHAT_COMPLETION"]["ENDPOINT"],
86
89
  "llm.prompts": json.dumps(llm_prompts),
@@ -340,7 +343,7 @@ def async_chat_completions_create(original_method, version, tracer):
340
343
  "langtrace.service.name": service_provider,
341
344
  "langtrace.service.type": "llm",
342
345
  "langtrace.service.version": version,
343
- "langtrace.version": "1.0.0",
346
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
344
347
  "url.full": base_url,
345
348
  "llm.api": APIS["CHAT_COMPLETION"]["ENDPOINT"],
346
349
  "llm.prompts": json.dumps(llm_prompts),
@@ -25,6 +25,7 @@ from langtrace_python_sdk.constants.instrumentation.common import (
25
25
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
26
26
  SERVICE_PROVIDERS,
27
27
  )
28
+ from importlib_metadata import version as v
28
29
 
29
30
 
30
31
  def generic_patch(
@@ -43,7 +44,7 @@ def generic_patch(
43
44
  "langtrace.service.name": service_provider,
44
45
  "langtrace.service.type": "framework",
45
46
  "langtrace.service.version": version,
46
- "langtrace.version": "1.0.0",
47
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
47
48
  "langchain.task.name": task,
48
49
  **(extra_attributes if extra_attributes is not None else {}),
49
50
  }
@@ -25,6 +25,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
25
25
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
26
26
  SERVICE_PROVIDERS,
27
27
  )
28
+ from importlib_metadata import version as v
29
+
30
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
28
31
 
29
32
 
30
33
  def generic_patch(
@@ -39,7 +42,7 @@ def generic_patch(
39
42
  "langtrace.service.name": service_provider,
40
43
  "langtrace.service.type": "framework",
41
44
  "langtrace.service.version": version,
42
- "langtrace.version": "1.0.0",
45
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
43
46
  "langchain.task.name": task,
44
47
  **(extra_attributes if extra_attributes is not None else {}),
45
48
  }
@@ -25,6 +25,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
25
25
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
26
26
  SERVICE_PROVIDERS,
27
27
  )
28
+ from importlib_metadata import version as v
29
+
30
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
28
31
 
29
32
 
30
33
  def generic_patch(
@@ -49,7 +52,7 @@ def generic_patch(
49
52
  "langtrace.service.name": service_provider,
50
53
  "langtrace.service.type": "framework",
51
54
  "langtrace.service.version": version,
52
- "langtrace.version": "1.0.0",
55
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
53
56
  "langchain.task.name": task,
54
57
  **(extra_attributes if extra_attributes is not None else {}),
55
58
  }
@@ -115,7 +118,7 @@ def runnable_patch(
115
118
  "langtrace.service.name": service_provider,
116
119
  "langtrace.service.type": "framework",
117
120
  "langtrace.service.version": version,
118
- "langtrace.version": "1.0.0",
121
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
119
122
  "langchain.task.name": task,
120
123
  }
121
124
 
@@ -25,6 +25,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
25
25
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
26
26
  SERVICE_PROVIDERS,
27
27
  )
28
+ from importlib_metadata import version as v
29
+
30
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
28
31
 
29
32
 
30
33
  def patch_graph_methods(method_name, tracer, version):
@@ -37,7 +40,7 @@ def patch_graph_methods(method_name, tracer, version):
37
40
  "langtrace.service.name": service_provider,
38
41
  "langtrace.service.type": "framework",
39
42
  "langtrace.service.version": version,
40
- "langtrace.version": "1.0.0",
43
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
41
44
  **(extra_attributes if extra_attributes is not None else {}),
42
45
  }
43
46
 
@@ -23,6 +23,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
23
23
  LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
24
24
  SERVICE_PROVIDERS,
25
25
  )
26
+ from importlib_metadata import version as v
27
+
28
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
26
29
 
27
30
 
28
31
  def generic_patch(method, task, tracer, version):
@@ -38,7 +41,7 @@ def generic_patch(method, task, tracer, version):
38
41
  "langtrace.service.name": service_provider,
39
42
  "langtrace.service.type": "framework",
40
43
  "langtrace.service.version": version,
41
- "langtrace.version": "1.0.0",
44
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
42
45
  "llamaindex.task.name": task,
43
46
  **(extra_attributes if extra_attributes is not None else {}),
44
47
  }
@@ -80,7 +83,7 @@ def async_generic_patch(method, task, tracer, version):
80
83
  "langtrace.service.name": service_provider,
81
84
  "langtrace.service.type": "framework",
82
85
  "langtrace.service.version": version,
83
- "langtrace.version": "1.0.0",
86
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
84
87
  "llamaindex.task.name": task,
85
88
  **(extra_attributes if extra_attributes is not None else {}),
86
89
  }
@@ -27,6 +27,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
27
27
  )
28
28
  from langtrace_python_sdk.constants.instrumentation.openai import APIS
29
29
  from langtrace_python_sdk.utils.llm import calculate_prompt_tokens, estimate_tokens
30
+ from importlib_metadata import version as v
31
+
32
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
30
33
 
31
34
 
32
35
  def images_generate(original_method, version, tracer):
@@ -48,7 +51,7 @@ def images_generate(original_method, version, tracer):
48
51
  "langtrace.service.name": service_provider,
49
52
  "langtrace.service.type": "llm",
50
53
  "langtrace.service.version": version,
51
- "langtrace.version": "1.0.0",
54
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
52
55
  "url.full": base_url,
53
56
  "llm.api": APIS["IMAGES_GENERATION"]["ENDPOINT"],
54
57
  "llm.model": kwargs.get("model"),
@@ -125,7 +128,7 @@ def async_images_generate(original_method, version, tracer):
125
128
  "langtrace.service.name": service_provider,
126
129
  "langtrace.service.type": "llm",
127
130
  "langtrace.service.version": version,
128
- "langtrace.version": "1.0.0",
131
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
129
132
  "url.full": base_url,
130
133
  "llm.api": APIS["IMAGES_GENERATION"]["ENDPOINT"],
131
134
  "llm.model": kwargs.get("model"),
@@ -235,7 +238,7 @@ def chat_completions_create(original_method, version, tracer):
235
238
  "langtrace.service.name": service_provider,
236
239
  "langtrace.service.type": "llm",
237
240
  "langtrace.service.version": version,
238
- "langtrace.version": "1.0.0",
241
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
239
242
  "url.full": base_url,
240
243
  "llm.api": APIS["CHAT_COMPLETION"]["ENDPOINT"],
241
244
  "llm.prompts": json.dumps(llm_prompts),
@@ -495,7 +498,7 @@ def async_chat_completions_create(original_method, version, tracer):
495
498
  "langtrace.service.name": service_provider,
496
499
  "langtrace.service.type": "llm",
497
500
  "langtrace.service.version": version,
498
- "langtrace.version": "1.0.0",
501
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
499
502
  "url.full": base_url,
500
503
  "llm.api": APIS["CHAT_COMPLETION"]["ENDPOINT"],
501
504
  "llm.prompts": json.dumps(llm_prompts),
@@ -725,7 +728,7 @@ def embeddings_create(original_method, version, tracer):
725
728
  "langtrace.service.name": service_provider,
726
729
  "langtrace.service.type": "llm",
727
730
  "langtrace.service.version": version,
728
- "langtrace.version": "1.0.0",
731
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
729
732
  "url.full": base_url,
730
733
  "llm.api": APIS["EMBEDDINGS_CREATE"]["ENDPOINT"],
731
734
  "llm.model": kwargs.get("model"),
@@ -792,7 +795,7 @@ def async_embeddings_create(original_method, version, tracer):
792
795
  "langtrace.service.name": service_provider,
793
796
  "langtrace.service.type": "llm",
794
797
  "langtrace.service.version": version,
795
- "langtrace.version": "1.0.0",
798
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
796
799
  "url.full": base_url,
797
800
  "llm.api": APIS["EMBEDDINGS_CREATE"]["ENDPOINT"],
798
801
  "llm.model": kwargs.get("model"),
@@ -28,6 +28,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
28
28
  from langtrace_python_sdk.constants.instrumentation.pinecone import APIS
29
29
  from langtrace_python_sdk.utils import set_span_attribute
30
30
  from langtrace_python_sdk.utils.silently_fail import silently_fail
31
+ from importlib_metadata import version as v
32
+
33
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
31
34
 
32
35
 
33
36
  def generic_patch(operation_name, version, tracer):
@@ -44,7 +47,7 @@ def generic_patch(operation_name, version, tracer):
44
47
  "langtrace.service.name": service_provider,
45
48
  "langtrace.service.type": "vectordb",
46
49
  "langtrace.service.version": version,
47
- "langtrace.version": "1.0.0",
50
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
48
51
  "db.system": "pinecone",
49
52
  "db.operation": api["OPERATION"],
50
53
  "db.query": json.dumps(kwargs.get("query")),
@@ -27,6 +27,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
27
27
  SERVICE_PROVIDERS,
28
28
  )
29
29
  from langtrace_python_sdk.constants.instrumentation.qdrant import APIS
30
+ from importlib_metadata import version as v
31
+
32
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
30
33
 
31
34
 
32
35
  def collection_patch(method, version, tracer):
@@ -44,7 +47,7 @@ def collection_patch(method, version, tracer):
44
47
  "langtrace.service.name": service_provider,
45
48
  "langtrace.service.type": "vectordb",
46
49
  "langtrace.service.version": version,
47
- "langtrace.version": "1.0.0",
50
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
48
51
  "db.system": "qdrant",
49
52
  "db.operation": api["OPERATION"],
50
53
  "db.query": json.dumps(kwargs.get("query")),
@@ -27,6 +27,9 @@ from langtrace_python_sdk.constants.instrumentation.common import (
27
27
  )
28
28
  from langtrace_python_sdk.constants.instrumentation.weaviate import APIS
29
29
  from langtrace_python_sdk.utils.misc import extract_input_params, to_iso_format
30
+ from importlib_metadata import version as v
31
+
32
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
30
33
 
31
34
  # Predefined metadata response attributes
32
35
  METADATA_ATTRIBUTES = [
@@ -118,7 +121,7 @@ def create_traced_method(method_name, version, tracer, get_collection_name=None)
118
121
  "langtrace.service.name": service_provider,
119
122
  "langtrace.service.type": "vectordb",
120
123
  "langtrace.service.version": version,
121
- "langtrace.version": "1.0.0",
124
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
122
125
  "db.system": "weaviate",
123
126
  "db.operation": api["OPERATION"],
124
127
  "db.collection.name": collection_name,
@@ -16,28 +16,33 @@ class SDKVersionChecker:
16
16
  self._current_version = version("langtrace_python_sdk")
17
17
 
18
18
  def fetch_latest(self):
19
- current_time = time.time()
20
- if (
21
- current_time - self._cache["timestamp"] < self._cache_duration
22
- and self._cache["latest_version"]
23
- ):
24
- return self._cache["latest_version"]
19
+ try:
20
+ current_time = time.time()
21
+ if (
22
+ current_time - self._cache["timestamp"] < self._cache_duration
23
+ and self._cache["latest_version"]
24
+ ):
25
+ return self._cache["latest_version"]
25
26
 
26
- response = requests.get(
27
- "https://api.github.com/repos/Scale3-Labs/langtrace-python-sdk/releases/latest",
28
- timeout=20,
29
- )
30
- response.raise_for_status()
31
- latest_version = response.json()["tag_name"]
32
- self._cache.update(
33
- {"timestamp": current_time, "latest_version": latest_version}
34
- )
35
- self._latest_version = latest_version
36
- return latest_version
27
+ response = requests.get(
28
+ "https://api.github.com/repos/Scale3-Labs/langtrace-python-sdk/releases/latest",
29
+ timeout=20,
30
+ )
31
+ response.raise_for_status()
32
+ latest_version = response.json()["tag_name"]
33
+ self._cache.update(
34
+ {"timestamp": current_time, "latest_version": latest_version}
35
+ )
36
+ self._latest_version = latest_version
37
+ return latest_version
38
+ except Exception as err:
39
+ return None
37
40
 
38
41
  def is_outdated(self):
39
42
  latest_version = self.fetch_latest()
40
- return self._current_version < latest_version
43
+ if latest_version:
44
+ return self._current_version < latest_version
45
+ return False
41
46
 
42
47
  def check(self):
43
48
  if self.is_outdated():
@@ -34,6 +34,7 @@ from langtrace_python_sdk.utils.types import (
34
34
  LangTraceApiError,
35
35
  LangTraceEvaluation,
36
36
  )
37
+ from colorama import Fore
37
38
 
38
39
 
39
40
  def with_langtrace_root_span(
@@ -112,63 +113,78 @@ def with_additional_attributes(attributes={}):
112
113
  return decorator
113
114
 
114
115
 
115
- def send_user_feedback(data: EvaluationAPIData) -> None:
116
- try:
117
- evaluation = _get_evaluation(data["spanId"])
118
- headers = {"x-api-key": os.environ["LANGTRACE_API_KEY"]}
119
- if evaluation is not None:
120
- # Make a PUT request to update the evaluation
121
- response = requests.put(
122
- f"{LANGTRACE_REMOTE_URL}/api/evaluation",
123
- json=data,
124
- params={"spanId": data["spanId"]},
125
- headers=headers,
126
- timeout=None,
127
- )
128
- response.raise_for_status()
116
+ class SendUserFeedback:
117
+ _langtrace_host: str
118
+ _langtrace_api_key: str
129
119
 
130
- else:
131
- # Make a POST request to create a new evaluation
132
- response = requests.post(
133
- f"{LANGTRACE_REMOTE_URL}/api/evaluation",
134
- json=data,
135
- params={"spanId": data["spanId"]},
136
- headers=headers,
120
+ def __init__(self):
121
+ self._langtrace_host = os.environ.get(
122
+ "LANGTRACE_API_HOST", LANGTRACE_REMOTE_URL
123
+ )
124
+ self._langtrace_api_key = os.environ.get("LANGTRACE_API_KEY", None)
125
+
126
+ def evaluate(self, data: EvaluationAPIData) -> None:
127
+ try:
128
+ if self._langtrace_api_key is None:
129
+ print(Fore.RED)
130
+ print(
131
+ f"Missing Langtrace API key, proceed to {self._langtrace_host} to create one"
132
+ )
133
+ print("Set the API key as an environment variable LANGTRACE_API_KEY")
134
+ print(Fore.RESET)
135
+ return
136
+ evaluation = self.get_evaluation(data["spanId"])
137
+ headers = {"x-api-key": self._langtrace_api_key}
138
+ if evaluation is not None:
139
+ # Make a PUT request to update the evaluation
140
+ response = requests.put(
141
+ f"{self._langtrace_host}/api/evaluation",
142
+ json=data,
143
+ params={"spanId": data["spanId"]},
144
+ headers=headers,
145
+ timeout=None,
146
+ )
147
+ response.raise_for_status()
148
+
149
+ else:
150
+ # Make a POST request to create a new evaluation
151
+ response = requests.post(
152
+ f"{self._langtrace_host}/api/evaluation",
153
+ json=data,
154
+ params={"spanId": data["spanId"]},
155
+ headers=headers,
156
+ timeout=None,
157
+ )
158
+ response.raise_for_status()
159
+
160
+ except requests.RequestException as err:
161
+ if err.response is not None:
162
+ message = (
163
+ err.response.json().get("message", "")
164
+ if err.response.json().get("message", "")
165
+ else err.response.text if err.response.text else str(err)
166
+ )
167
+ raise LangTraceApiError(message, err.response.status_code)
168
+ raise LangTraceApiError(str(err), 500)
169
+
170
+ def get_evaluation(self, span_id: str) -> Optional[LangTraceEvaluation]:
171
+ try:
172
+ response = requests.get(
173
+ f"{self._langtrace_host}/api/evaluation",
174
+ params={"spanId": span_id},
175
+ headers={"x-api-key": self._langtrace_api_key},
137
176
  timeout=None,
138
177
  )
178
+ evaluations = response.json().get("evaluations", [])
139
179
  response.raise_for_status()
140
-
141
- except requests.RequestException as err:
142
- # Handle specific HTTP errors or general request exceptions
143
- error_msg = str(err)
144
- if err.response:
145
- try:
146
- # Try to extract server-provided error message
147
- error_msg = err.response.json().get("error", error_msg)
148
- except ValueError:
149
- # Fallback if response is not JSON
150
- error_msg = err.response.text
151
- raise Exception(f"API error: {error_msg}") from err
152
-
153
-
154
- def _get_evaluation(span_id: str) -> Optional[LangTraceEvaluation]:
155
- try:
156
- response = requests.get(
157
- f"{LANGTRACE_REMOTE_URL}/api/evaluation",
158
- params={"spanId": span_id},
159
- headers={"x-api-key": os.environ["LANGTRACE_API_KEY"]},
160
- timeout=None,
161
- )
162
- evaluations = response.json().get("evaluations", [])
163
- response.raise_for_status()
164
- return None if not evaluations else evaluations[0]
165
-
166
- except requests.RequestException as err:
167
- if err.response is not None:
168
- message = (
169
- err.response.json().get("message", "")
170
- if err.response.json().get("message", "")
171
- else err.response.text if err.response.text else str(err)
172
- )
173
- raise LangTraceApiError(message, err.response.status_code)
174
- raise LangTraceApiError(str(err), 500)
180
+ return None if not evaluations else evaluations[0]
181
+
182
+ except requests.RequestException as err:
183
+ if err.response is not None:
184
+ message = (
185
+ err.response.json().get("message", "")
186
+ if err.response.json().get("message", "")
187
+ else err.response.text if err.response.text else str(err)
188
+ )
189
+ raise LangTraceApiError(message, err.response.status_code)
190
+ raise LangTraceApiError(str(err), 500)
@@ -1 +1 @@
1
- __version__ = "2.1.8"
1
+ __version__ = "2.1.10"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: langtrace-python-sdk
3
- Version: 2.1.8
3
+ Version: 2.1.10
4
4
  Summary: Python SDK for LangTrace
5
5
  Project-URL: Homepage, https://github.com/Scale3-Labs/langtrace-python-sdk
6
6
  Author-email: Scale3 Labs <engineering@scale3labs.com>
@@ -32,14 +32,14 @@ examples/openai_example/tool_calling_nonstreaming.py,sha256=Yc848IooZRXNynHL6z0k
32
32
  examples/openai_example/tool_calling_streaming.py,sha256=mV1RbyAoVhumGRPpqPWQ6PMhnJyeifrlELd2-K1qJ_w,7015
33
33
  examples/perplexity_example/basic.py,sha256=bp7n27gaugJkaFVyt8pjaEfi66lYcqP6eFFjPewUShY,668
34
34
  examples/pinecone_example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
- examples/pinecone_example/basic.py,sha256=b-5-cSf3_N6Gk4zGVecGF47mBcFY9ZrC5ztrIZVgTQo,1430
35
+ examples/pinecone_example/basic.py,sha256=gkb1uQwKFLnWmRuM2KGvAeTpT1AYlHmz2kRey5_-Dqs,1437
36
36
  examples/qdrant_example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  examples/qdrant_example/basic.py,sha256=DCMjHSuBZKkhEjCkwy5d5La9WMyW0lCWqtcZWiFCEm4,1425
38
38
  examples/weaviate_example/query_text.py,sha256=iE9OiHsibjsprbCGzabE03eZsGN06e6ym2iS1A9P3ig,64650
39
- langtrace_python_sdk/__init__.py,sha256=R4dv73QARUw4WRfCdSKkKzZTLDumF9jcSdwtVrzWhb4,962
39
+ langtrace_python_sdk/__init__.py,sha256=FuvyRuStRe_N2wo2SB2_ZQ0w7LGNIjV0lLi6S1IgGwY,958
40
40
  langtrace_python_sdk/langtrace.py,sha256=_qJsbLo-4GqhXd8apg3W7A_l3ZnFYEX1wOA-_rg-TZA,6655
41
- langtrace_python_sdk/version.py,sha256=Zs7yBsCpiMSJW2PP_mZoH_3cEDqJwh80ulBcmuMBwMU,22
42
- langtrace_python_sdk/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
+ langtrace_python_sdk/version.py,sha256=zBzBCTHx_lpM20-2wHeccRHskIUls_oSQ1tzAOiGGrU,23
42
+ langtrace_python_sdk/constants/__init__.py,sha256=P8QvYwt5czUNDZsKS64vxm9Dc41ptGbuF1TFtAF6nv4,44
43
43
  langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
44
44
  langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
45
45
  langtrace_python_sdk/constants/instrumentation/anthropic.py,sha256=YX3llt3zwDY6XrYk3CB8WEVqgrzRXEw_ffyk56JoF3k,126
@@ -56,66 +56,66 @@ langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=Fj--DzBr4AwTM_iS3lR
56
56
  langtrace_python_sdk/instrumentation/__init__.py,sha256=htP583cfv32IUvWeck6edRiPQxhk0uzUa1l1vgbtjtY,1042
57
57
  langtrace_python_sdk/instrumentation/anthropic/__init__.py,sha256=donrurJAGYlxrSRA3BIf76jGeUcAx9Tq8CVpah68S0Y,101
58
58
  langtrace_python_sdk/instrumentation/anthropic/instrumentation.py,sha256=-srgE8qumAn0ulQYZxMa8ch-9IBH0XgBW_rfEnGk6LI,1684
59
- langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=koAo6bA6nnRDk01fcrArqnyAmgzjxV20ofITMQyKVws,8427
59
+ langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=52GRkW7fhF2VB9JvYGMaPwOvWH3Q5rsIEaVlnFm_Zz0,8548
60
60
  langtrace_python_sdk/instrumentation/chroma/__init__.py,sha256=pNZ5UO8Q-d5VkXSobBf79reB6AmEl_usnnTp5Itv818,95
61
61
  langtrace_python_sdk/instrumentation/chroma/instrumentation.py,sha256=nT6PS6bsrIOO9kLV5GuUeRjMe6THHHAZGvqWBP1dYog,1807
62
- langtrace_python_sdk/instrumentation/chroma/patch.py,sha256=1FvA4YvGw9temfBC2g33xGEzIcL1rVdABXwMVTPm3aM,8750
62
+ langtrace_python_sdk/instrumentation/chroma/patch.py,sha256=ignW4qVzG6F4_J_SUT_b8AbaVgM0YHc_qMPG9gn3HsQ,8871
63
63
  langtrace_python_sdk/instrumentation/cohere/__init__.py,sha256=sGUSLdTUyYf36Tm6L5jQflhzCqvmWrhnBOMYHjvp6Hs,95
64
64
  langtrace_python_sdk/instrumentation/cohere/instrumentation.py,sha256=YQFHZIBd7SSPD4b6Va-ZR0thf_AuBCqj5yzHLHJVWnM,2121
65
- langtrace_python_sdk/instrumentation/cohere/patch.py,sha256=hdSWArP0cdfGs0Q5KhkaowkwrYQIzxvF8NpY4sg8p2Q,26563
65
+ langtrace_python_sdk/instrumentation/cohere/patch.py,sha256=uGjZm_c1-xpZilHD8ljGr4AqQB3UNU04SKl9s2alGzs,26726
66
66
  langtrace_python_sdk/instrumentation/groq/__init__.py,sha256=ZXeq_nrej6Lm_uoMFEg8wbSejhjB2UJ5IoHQBPc2-C0,91
67
67
  langtrace_python_sdk/instrumentation/groq/instrumentation.py,sha256=Ttf07XVKhdYY1_fqJc7QWiSdmgEhEVyQB_3Az2_wqYo,1832
68
- langtrace_python_sdk/instrumentation/groq/patch.py,sha256=Fo5QbNwScFwhvmXZQezbjF0AdajsHQ8a0f8nKsVFjF8,26068
68
+ langtrace_python_sdk/instrumentation/groq/patch.py,sha256=eWHH1fxpmj0CHV0_jxIcGFdmpnQJe-U7dgtvsEA96bA,26203
69
69
  langtrace_python_sdk/instrumentation/langchain/__init__.py,sha256=-7ZkqQFu64F-cxSFd1ZPrciODKqmUIyUbQQ-eHuQPyM,101
70
70
  langtrace_python_sdk/instrumentation/langchain/instrumentation.py,sha256=_Z4AeNb2hBPSCvMRxE-mUfmkUO_wP_tGGtu-jppWPiI,3462
71
- langtrace_python_sdk/instrumentation/langchain/patch.py,sha256=2BT_-DjfSPTmyHDqnpj-gVrMFxRSZugVC-YRPXnuupU,3796
71
+ langtrace_python_sdk/instrumentation/langchain/patch.py,sha256=aa4WG70n-9ssECMKFH9H1yFLmDfFPjtuW4ilTqfJD3c,3854
72
72
  langtrace_python_sdk/instrumentation/langchain_community/__init__.py,sha256=mj5RR_cfkjMql7W9OyyhmviT2GZ-4Pv9XJfGwJufp_E,119
73
73
  langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py,sha256=-9E2-8-XR5PQ5ON-_ib53p5Tp0uD4MT4Ioh4MlWlF2k,5192
74
- langtrace_python_sdk/instrumentation/langchain_community/patch.py,sha256=uyRUp02M9mYjLsr36ZBCvJC7s40AGry3R_EcjvXaoWk,3751
74
+ langtrace_python_sdk/instrumentation/langchain_community/patch.py,sha256=F6wCJlBxFUyQyUFQb_Z8IzOfveUiz1G8W-tMXFX8_wk,3872
75
75
  langtrace_python_sdk/instrumentation/langchain_core/__init__.py,sha256=kumE_reeqgM-ZvEZ6-XxyT-F-HAdKq_v_PKvsLb4EZQ,110
76
76
  langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py,sha256=KNXHtlnq80akLACF-vbPCo9oVXhnVjYIM1Lo7kNRwEg,5937
77
- langtrace_python_sdk/instrumentation/langchain_core/patch.py,sha256=Kqpv77ZKrZ4QMit36JtN59ubtWE8pX6t8gg6OOmIii0,8458
77
+ langtrace_python_sdk/instrumentation/langchain_core/patch.py,sha256=DmNuc8cTniuhEeYZIR4TfNBYDrleQtYWam031o_pl94,8593
78
78
  langtrace_python_sdk/instrumentation/langgraph/__init__.py,sha256=eitlHloY-aZ4ZuIEJx61AadEA3G7siyecP-V-lziAr8,101
79
79
  langtrace_python_sdk/instrumentation/langgraph/instrumentation.py,sha256=SUZZhWSIbcfsF1S5NtEqW8QzkRM_pKAuXB7pwk5tsOU,2526
80
- langtrace_python_sdk/instrumentation/langgraph/patch.py,sha256=fr90kuPokwxP2BGP2tU793ReDOp2FtehKMcsxS9tS_0,4589
80
+ langtrace_python_sdk/instrumentation/langgraph/patch.py,sha256=umxfyrpRX01WgqKNv8El7BSFPaghP49jGrGAniIZ6LI,4710
81
81
  langtrace_python_sdk/instrumentation/llamaindex/__init__.py,sha256=rHvuqpuQKLj57Ow7vuKRqxAN5jT0b5NBeHwhXbbnRa4,103
82
82
  langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py,sha256=8iAg-Oxwf2W4S60qRfO5mvzORYxublgq7FdGWqUB4q8,2965
83
- langtrace_python_sdk/instrumentation/llamaindex/patch.py,sha256=q99qmEBNH54Oi_sHCIGBQFpIE4zaNKVjIWARlX8fJ-M,4189
83
+ langtrace_python_sdk/instrumentation/llamaindex/patch.py,sha256=LwnI9DCC5wcnixPUOmwIWSE7ryTk1J0xFBYdJja8t_Q,4324
84
84
  langtrace_python_sdk/instrumentation/openai/__init__.py,sha256=VPHRNCQEdkizIVP2d0Uw_a7t8XOTSTprEIB8oboJFbs,95
85
85
  langtrace_python_sdk/instrumentation/openai/instrumentation.py,sha256=G2HSZfr6DuP2n-8v0h91M60m0DJWFBcru4-1FQJl-5A,2726
86
- langtrace_python_sdk/instrumentation/openai/patch.py,sha256=xi87lLHoj81xSx6MiqTAKWr3MLxXpMf84NzJ5uDm134,37288
86
+ langtrace_python_sdk/instrumentation/openai/patch.py,sha256=Og6_W3MqnNrzOfQ_WBLnCQUy0xsNZol1bsoScajiI2E,37479
87
87
  langtrace_python_sdk/instrumentation/pinecone/__init__.py,sha256=DzXyGh9_MGWveJvXULkFwdkf7PbG2s3bAWtT1Dmz7Ok,99
88
88
  langtrace_python_sdk/instrumentation/pinecone/instrumentation.py,sha256=mxQXe3oAOPLsMJGlEzAe6zpgK7RtWfqmcNmGW_gQXX4,1900
89
- langtrace_python_sdk/instrumentation/pinecone/patch.py,sha256=8uenVh4TCTJVuBGepm7nhTZBuW7HyjlZS4wPx7zi9cg,4879
89
+ langtrace_python_sdk/instrumentation/pinecone/patch.py,sha256=nZUHZ_1HfLjByJS0gkvrDRj69JbdnfWpezk6zl1EMvU,5000
90
90
  langtrace_python_sdk/instrumentation/qdrant/__init__.py,sha256=TaIGSAEPysrL23KJ5FcEL1tfQogrKCtEQ75_u62eqso,95
91
91
  langtrace_python_sdk/instrumentation/qdrant/instrumentation.py,sha256=vl2eKSP55aqDo1JiRlvOUBrr6kddvG9Z5dCYew2OG08,1816
92
- langtrace_python_sdk/instrumentation/qdrant/patch.py,sha256=KcUWmvnS3PgPStzs1oWmlZsyomKBl3dmg8nXuR0T1C0,4654
92
+ langtrace_python_sdk/instrumentation/qdrant/patch.py,sha256=Teho0q6m9XQGsIkptZ42891eIzpW922tEFqcjFb3svc,4775
93
93
  langtrace_python_sdk/instrumentation/weaviate/__init__.py,sha256=Mc-Je6evPo-kKQzerTG7bd1XO5JOh4YGTE3wBxaUBwg,99
94
94
  langtrace_python_sdk/instrumentation/weaviate/instrumentation.py,sha256=Dn2wMj__nNZkUtDw_jEYslE8-bz2KGkdAU_t8qzWjuA,2281
95
- langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=ig2fc33hNydEcH5cJWRycFnMXiXiJr731J-Vg5Ze4No,5634
95
+ langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=boHMRwQC9CIukoX3dTCZCF5L9TL1R5Mlu2o_UUrO7Yg,5755
96
96
  langtrace_python_sdk/types/__init__.py,sha256=-j8cuz3bhUdOqj7N2c0w5y-j3UmcxwEgNh8BWeXwHoI,813
97
97
  langtrace_python_sdk/utils/__init__.py,sha256=E0nQyBE-4O_GR2PM9y_l7shx4hJLo5xRThR_LMx97M0,278
98
98
  langtrace_python_sdk/utils/llm.py,sha256=CiASOvObFvsN6T7ogWywNXfXGzI__u9misgolLxyeZk,2161
99
99
  langtrace_python_sdk/utils/misc.py,sha256=CD9NWRLxLpFd0YwlHJqzlpFNedXVWtAKGOjQWnDCo8k,838
100
100
  langtrace_python_sdk/utils/prompt_registry.py,sha256=7FFB4Pj0414qgf02h5zL5vXBZgNBf74g4Iq7GdFaIO0,2689
101
- langtrace_python_sdk/utils/sdk_version_checker.py,sha256=_ZqW7y-aP5qddbObbM_gMlmhCZbnIH83C1pa_KN8glE,1523
101
+ langtrace_python_sdk/utils/sdk_version_checker.py,sha256=FzjIWZjn53cX0LEVPdipQd1fO9lG8iGVUEVUs9Hyk6M,1713
102
102
  langtrace_python_sdk/utils/silently_fail.py,sha256=F_9EteXCO9Cyq-8MA1OT2Zy_dx8n06nt31I7t7ui24E,478
103
103
  langtrace_python_sdk/utils/types.py,sha256=l-N6o7cnWUyrD6dBvW7W3Pf5CkPo5QaoT__k1XLbrQg,383
104
- langtrace_python_sdk/utils/with_root_span.py,sha256=rSPrTnKndJo6cFUWL4907IkJFbtLwqMS87paADUxD6A,5957
104
+ langtrace_python_sdk/utils/with_root_span.py,sha256=wORIk9N4BOWEP9zoDMXpD3qX4r6P6sDMUn9bzl8BbvM,6754
105
105
  tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
106
106
  tests/conftest.py,sha256=0Jo6iCZTXbdvyJVhG9UpYGkLabL75378oauCzmt-Sa8,603
107
107
  tests/utils.py,sha256=hP8sTH-M8WO6zlLkSFHPf6483ZcKEcnxul6JIIb1pLM,1396
108
108
  tests/anthropic/conftest.py,sha256=ht1zF3q4Xb1UiZ3BL_L-CQ3YWrd52Dqb4WTZ3f-GdG4,739
109
- tests/anthropic/test_anthropic.py,sha256=p4WhcECJ_zctirtkAX6WejrlNfZzo90fSSxqQkit0Ls,3175
109
+ tests/anthropic/test_anthropic.py,sha256=4Jna7looFNGAOkW-QpSVijyaKdJeNmKjhvilUJ8mbXU,3309
110
110
  tests/anthropic/cassettes/test_anthropic.yaml,sha256=z7YAqA_BBgI-hw7uyVMdLoIZdBYhKwl9cuTzUu9nAZs,2332
111
111
  tests/anthropic/cassettes/test_anthropic_streaming.yaml,sha256=D0w4-6dfsgrhbNLJEj8gZBV0yXfrAfA9u90Yu8Ac-TY,11675
112
112
  tests/anthropic/cassettes/test_async_anthropic_streaming.yaml,sha256=hQZPY2vwBaW3BWllLd0lcGQ73DjA8C3Ips1Hx9pA-ao,8373
113
113
  tests/chroma/conftest.py,sha256=kqb4VydCnlVpkvBX5Bu-pfnVS-ZZfju9cp6vq76tkJI,309
114
114
  tests/chroma/test_chroma.py,sha256=-KJHunvvVi1OoKKOcKCeHO1s399Gm9vJfd-EzgllQmk,1220
115
115
  tests/cohere/conftest.py,sha256=jBbyg-tut-ZJN5_5D64sGmaPIhT_nQQQAiW43kl5Rz4,621
116
- tests/cohere/test_cohere_chat.py,sha256=MioEIXB5e-4t99Vt-KpLlxd4diPbp3S6eNfnPWjEDXM,4564
117
- tests/cohere/test_cohere_embed.py,sha256=bFKDzUnypMyLefAOHR-6dEgvt0yys2Yw7-F0zc0uQyc,1250
118
- tests/cohere/test_cohere_rerank.py,sha256=ZDzvXsY9l1fiytOAKGQidpBkop3fxV6d8xEy_gQt9jE,2279
116
+ tests/cohere/test_cohere_chat.py,sha256=rn6qU9lFOzjA_P-ucOikIzswQ2ZcvZ89ijvh0Yzndwg,4698
117
+ tests/cohere/test_cohere_embed.py,sha256=VM2Q9eBrSSFsNuw9OMNL9BmdXG8g1CGQ2A1uIERyAZw,1315
118
+ tests/cohere/test_cohere_rerank.py,sha256=yNi1GNCIujxRrGMFLsYSnNmb7zyro-owm-kGbouPSDs,2247
119
119
  tests/cohere/cassettes/test_cohere_chat.yaml,sha256=iQIhJwmWe2AQDmdguL6L0SZOPMD6B3mhDVUKPSLodA4,3271
120
120
  tests/cohere/cassettes/test_cohere_chat_streaming.yaml,sha256=tMlz7IPZYRCJUeMCwyXrA4O4zpcqIPpQ5hU9I5f352Q,8174
121
121
  tests/cohere/cassettes/test_cohere_embed.yaml,sha256=Svcyw8WkVMVw4cocWQzGOdUVmWi5AM6Gb9t9VLlyOjM,27320
@@ -124,21 +124,21 @@ tests/langchain/conftest.py,sha256=f29apdevxg7AM0mPQ1LoEd-yStGruqGLTQUp29heLJo,1
124
124
  tests/langchain/test_langchain.py,sha256=QP11RdNDX_ztF1ppPnUiui3SsxYYdzVsDgtI-1OGH48,893
125
125
  tests/langchain/cassettes/test_langchain.yaml,sha256=KPBTVIYMUPFaSNpwrTDgWzsu4p3hHj_yNDoudDa-Jis,3755
126
126
  tests/openai/conftest.py,sha256=BkehS6heg-O91Nzoc4546OSiAzy8KgSgk7VCO3A11zM,700
127
- tests/openai/test_chat_completion.py,sha256=-TwCAF2czsiGZqETQvMOgmIJgdFWycJ9nOeO5q65AJs,5804
127
+ tests/openai/test_chat_completion.py,sha256=CG8dYAqopOnhyWRDTbl7Knw77r7uKHELuH-TR5GOuAc,5768
128
128
  tests/openai/test_embeddings.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
- tests/openai/test_image_generation.py,sha256=0zANtoltorKPel37fSbut-icpJ-wKSN4unoKZOBBsjQ,4397
129
+ tests/openai/test_image_generation.py,sha256=xewPlPf1Ucb0ECKgoasGk1uDlaL4v-mKjUMjVXVsLDQ,4382
130
130
  tests/openai/cassettes/test_async_chat_completion_streaming.yaml,sha256=0aZHFy9NvXegEDjGWyoG-_ItLr7JYAKbaBLIPSl-pfM,6844
131
131
  tests/openai/cassettes/test_async_image_generation.yaml,sha256=_LYZcrqxrnSqcWVQn2Y0XMVGxF-wBrSAd-v3LTAIAeo,3597
132
132
  tests/openai/cassettes/test_chat_completion.yaml,sha256=YkNFgK9VHAzNqGWuxFcTiE194GdEie8eDf1FSsffjd8,2944
133
133
  tests/openai/cassettes/test_chat_completion_streaming.yaml,sha256=nkx_TemQMYSZxUF_b-LCEFwCRDm0AkQHLf4sdJVuZBw,2592394
134
134
  tests/openai/cassettes/test_image_generation.yaml,sha256=gn5aSVp6V6_hb_rt2NnkAWd_idzDxo-7VzhZII0Wslw,3562
135
135
  tests/pinecone/conftest.py,sha256=EY1m5M6MKSOktbVEe__wYNjCW9A7H0xdC-aXhU8JEOg,916
136
- tests/pinecone/test_pinecone.py,sha256=JMe3S15cfBWjTArC-FTCarRRYBFylkv4BwQgL2BmUfw,3614
136
+ tests/pinecone/test_pinecone.py,sha256=o1NnY4QirQU4JgMAi21kl9ejuXsGhF9EjyS9C2HuWtU,3599
137
137
  tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5AIqHnMsvJM8w,103821
138
138
  tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
139
139
  tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
140
140
  tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
141
- langtrace_python_sdk-2.1.8.dist-info/METADATA,sha256=ZvEU8PvKSRRRttRHq2cOPOlMDWFjA9PS3k3zjhJgnCY,11859
142
- langtrace_python_sdk-2.1.8.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
143
- langtrace_python_sdk-2.1.8.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
144
- langtrace_python_sdk-2.1.8.dist-info/RECORD,,
141
+ langtrace_python_sdk-2.1.10.dist-info/METADATA,sha256=2k5jRe5pbkZ1IJ6iTSx67R_vg6_97O4_W9eSr5_f8Zs,11860
142
+ langtrace_python_sdk-2.1.10.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
143
+ langtrace_python_sdk-2.1.10.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
144
+ langtrace_python_sdk-2.1.10.dist-info/RECORD,,
@@ -2,7 +2,9 @@ import pytest
2
2
  import json
3
3
  import importlib
4
4
  from langtrace_python_sdk.constants.instrumentation.anthropic import APIS
5
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
5
6
  from tests.utils import assert_response_format, assert_token_count
7
+ from importlib_metadata import version as v
6
8
 
7
9
 
8
10
  @pytest.mark.vcr()
@@ -30,7 +32,7 @@ def test_anthropic(anthropic_client, exporter):
30
32
  assert attributes.get("langtrace.service.version") == importlib.metadata.version(
31
33
  "anthropic"
32
34
  )
33
- assert attributes.get("langtrace.version") == "1.0.0"
35
+ assert attributes.get("langtrace.version") == v(LANGTRACE_SDK_NAME)
34
36
  assert attributes.get("url.full") == "https://api.anthropic.com"
35
37
  assert attributes.get("llm.api") == APIS["MESSAGES_CREATE"]["ENDPOINT"]
36
38
  assert attributes.get("llm.model") == llm_model_value
@@ -72,7 +74,7 @@ def test_anthropic_streaming(anthropic_client, exporter):
72
74
  assert attributes.get("langtrace.service.version") == importlib.metadata.version(
73
75
  "anthropic"
74
76
  )
75
- assert attributes.get("langtrace.version") == "1.0.0"
77
+ assert attributes.get("langtrace.version") == v(LANGTRACE_SDK_NAME)
76
78
  assert attributes.get("url.full") == "https://api.anthropic.com"
77
79
  assert attributes.get("llm.api") == APIS["MESSAGES_CREATE"]["ENDPOINT"]
78
80
  assert attributes.get("llm.model") == llm_model_value
@@ -3,7 +3,9 @@ from langtrace_python_sdk.constants.instrumentation.cohere import APIS
3
3
  from langtrace_python_sdk.constants.instrumentation.common import SERVICE_PROVIDERS
4
4
  import pytest
5
5
  import importlib
6
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
6
7
  from tests.utils import assert_response_format, assert_token_count
8
+ from importlib_metadata import version as v
7
9
 
8
10
 
9
11
  @pytest.mark.vcr
@@ -39,7 +41,7 @@ def test_cohere_chat(cohere_client, exporter):
39
41
  "cohere"
40
42
  )
41
43
 
42
- assert attributes.get("langtrace.version") == "1.0.0"
44
+ assert attributes.get("langtrace.version") == v(LANGTRACE_SDK_NAME)
43
45
  assert attributes.get("url.full") == APIS["CHAT_CREATE"]["URL"]
44
46
  assert attributes.get("llm.api") == APIS["CHAT_CREATE"]["ENDPOINT"]
45
47
  assert attributes.get("llm.model") == llm_model_value
@@ -97,7 +99,7 @@ def test_cohere_chat_streaming(cohere_client, exporter):
97
99
  "cohere"
98
100
  )
99
101
 
100
- assert attributes.get("langtrace.version") == "1.0.0"
102
+ assert attributes.get("langtrace.version") == v(LANGTRACE_SDK_NAME)
101
103
  assert attributes.get("url.full") == APIS["CHAT_STREAM"]["URL"]
102
104
  assert attributes.get("llm.api") == APIS["CHAT_STREAM"]["ENDPOINT"]
103
105
  assert attributes.get("llm.model") == llm_model_value
@@ -1,7 +1,9 @@
1
1
  from langtrace_python_sdk.constants.instrumentation.cohere import APIS
2
2
  from langtrace_python_sdk.constants.instrumentation.common import SERVICE_PROVIDERS
3
3
  import pytest
4
- import importlib
4
+ from importlib_metadata import version as v
5
+
6
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
5
7
 
6
8
 
7
9
  @pytest.mark.vcr
@@ -25,11 +27,9 @@ def test_cohere_embed(cohere_client, exporter):
25
27
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
26
28
  assert attributes.get("langtrace.service.name") == SERVICE_PROVIDERS["COHERE"]
27
29
  assert attributes.get("langtrace.service.type") == "llm"
28
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
29
- "cohere"
30
- )
30
+ assert attributes.get("langtrace.service.version") == v("cohere")
31
31
 
32
- assert attributes.get("langtrace.version") == "1.0.0"
32
+ assert attributes.get("langtrace.version") == v(LANGTRACE_SDK_NAME)
33
33
  assert attributes.get("url.full") == APIS["EMBED"]["URL"]
34
34
  assert attributes.get("llm.api") == APIS["EMBED"]["ENDPOINT"]
35
35
  assert attributes.get("llm.model") == llm_model_value
@@ -1,10 +1,9 @@
1
1
  from langtrace_python_sdk.constants.instrumentation.common import SERVICE_PROVIDERS
2
2
  import pytest
3
3
  import json
4
- import importlib
5
4
  from langtrace_python_sdk.constants.instrumentation.cohere import APIS
6
- from tests.utils import assert_response_format, assert_token_count
7
- import pprint
5
+ from tests.utils import assert_token_count
6
+ from importlib_metadata import version as v
8
7
 
9
8
 
10
9
  @pytest.mark.vcr
@@ -34,11 +33,9 @@ def test_cohere_rerank(cohere_client, exporter):
34
33
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
35
34
  assert attributes.get("langtrace.service.name") == SERVICE_PROVIDERS["COHERE"]
36
35
  assert attributes.get("langtrace.service.type") == "llm"
37
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
38
- "cohere"
39
- )
36
+ assert attributes.get("langtrace.service.version") == v("cohere")
40
37
 
41
- assert attributes.get("langtrace.version") == "1.0.0"
38
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
42
39
  assert attributes.get("url.full") == APIS["RERANK"]["URL"]
43
40
  assert attributes.get("llm.api") == APIS["RERANK"]["ENDPOINT"]
44
41
  assert attributes.get("llm.model") == llm_model_value
@@ -1,8 +1,8 @@
1
1
  import pytest
2
- import importlib
3
2
  import json
4
3
  from langtrace_python_sdk.constants.instrumentation.openai import APIS
5
4
  from tests.utils import assert_response_format, assert_token_count
5
+ from importlib_metadata import version as v
6
6
 
7
7
 
8
8
  @pytest.mark.vcr()
@@ -25,10 +25,8 @@ def test_chat_completion(exporter, openai_client):
25
25
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
26
26
  assert attributes.get("langtrace.service.name") == "OpenAI"
27
27
  assert attributes.get("langtrace.service.type") == "llm"
28
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
29
- "openai"
30
- )
31
- assert attributes.get("langtrace.version") == "1.0.0"
28
+ assert attributes.get("langtrace.service.version") == v("openai")
29
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
32
30
  assert attributes.get("url.full") == "https://api.openai.com/v1/"
33
31
  assert attributes.get("llm.api") == APIS["CHAT_COMPLETION"]["ENDPOINT"]
34
32
  assert attributes.get("llm.model") == "gpt-4-0613"
@@ -78,10 +76,8 @@ def test_chat_completion_streaming(exporter, openai_client):
78
76
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
79
77
  assert attributes.get("langtrace.service.name") == "OpenAI"
80
78
  assert attributes.get("langtrace.service.type") == "llm"
81
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
82
- "openai"
83
- )
84
- assert attributes.get("langtrace.version") == "1.0.0"
79
+ assert attributes.get("langtrace.service.version") == v("openai")
80
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
85
81
  assert attributes.get("url.full") == "https://api.openai.com/v1/"
86
82
  assert attributes.get("llm.api") == APIS["CHAT_COMPLETION"]["ENDPOINT"]
87
83
  assert attributes.get("llm.model") == "gpt-4-0613"
@@ -135,10 +131,8 @@ async def test_async_chat_completion_streaming(exporter, async_openai_client):
135
131
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
136
132
  assert attributes.get("langtrace.service.name") == "OpenAI"
137
133
  assert attributes.get("langtrace.service.type") == "llm"
138
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
139
- "openai"
140
- )
141
- assert attributes.get("langtrace.version") == "1.0.0"
134
+ assert attributes.get("langtrace.service.version") == v("openai")
135
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
142
136
  assert attributes.get("url.full") == "https://api.openai.com/v1/"
143
137
  assert attributes.get("llm.api") == APIS["CHAT_COMPLETION"]["ENDPOINT"]
144
138
  assert attributes.get("llm.model") == "gpt-4-0613"
@@ -1,7 +1,7 @@
1
1
  import pytest
2
2
  import json
3
- import importlib
4
3
  from langtrace_python_sdk.constants.instrumentation.openai import APIS
4
+ from importlib_metadata import version as v
5
5
 
6
6
 
7
7
  @pytest.mark.vcr()
@@ -23,10 +23,8 @@ def test_image_generation(openai_client, exporter):
23
23
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
24
24
  assert attributes.get("langtrace.service.name") == "OpenAI"
25
25
  assert attributes.get("langtrace.service.type") == "llm"
26
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
27
- "openai"
28
- )
29
- assert attributes.get("langtrace.version") == "1.0.0"
26
+ assert attributes.get("langtrace.service.version") == v("openai")
27
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
30
28
  assert attributes.get("url.full") == "https://api.openai.com/v1/"
31
29
  assert attributes.get("llm.api") == APIS["IMAGES_GENERATION"]["ENDPOINT"]
32
30
  assert attributes.get("llm.model") == llm_model_value
@@ -66,10 +64,8 @@ async def test_async_image_generation(async_openai_client, exporter):
66
64
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
67
65
  assert attributes.get("langtrace.service.name") == "OpenAI"
68
66
  assert attributes.get("langtrace.service.type") == "llm"
69
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
70
- "openai"
71
- )
72
- assert attributes.get("langtrace.version") == "1.0.0"
67
+ assert attributes.get("langtrace.service.version") == v("openai")
68
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
73
69
  assert attributes.get("url.full") == "https://api.openai.com/v1/"
74
70
  assert attributes.get("llm.api") == APIS["IMAGES_GENERATION"]["ENDPOINT"]
75
71
  assert attributes.get("llm.model") == llm_model_value
@@ -1,8 +1,8 @@
1
1
  import pytest
2
- import importlib
3
2
  import json
4
3
  from langtrace_python_sdk.constants.instrumentation.common import SERVICE_PROVIDERS
5
4
  from langtrace_python_sdk.constants.instrumentation.pinecone import APIS
5
+ from importlib_metadata import version as v
6
6
 
7
7
 
8
8
  def create_embedding(openai_client):
@@ -34,10 +34,8 @@ def test_upsert(openai_client, pinecone_client, exporter):
34
34
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
35
35
  assert attributes.get("langtrace.service.name") == SERVICE_PROVIDERS["PINECONE"]
36
36
  assert attributes.get("langtrace.service.type") == "vectordb"
37
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
38
- "pinecone-client"
39
- )
40
- assert attributes.get("langtrace.version") == "1.0.0"
37
+ assert attributes.get("langtrace.service.version") == v("pinecone-client")
38
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
41
39
  assert attributes.get("db.system") == "pinecone"
42
40
  assert attributes.get("db.operation") == APIS["UPSERT"]["OPERATION"]
43
41
 
@@ -69,10 +67,8 @@ def test_query(openai_client, pinecone_client, exporter):
69
67
  assert attributes.get("langtrace.sdk.name") == "langtrace-python-sdk"
70
68
  assert attributes.get("langtrace.service.name") == SERVICE_PROVIDERS["PINECONE"]
71
69
  assert attributes.get("langtrace.service.type") == "vectordb"
72
- assert attributes.get("langtrace.service.version") == importlib.metadata.version(
73
- "pinecone-client"
74
- )
75
- assert attributes.get("langtrace.version") == "1.0.0"
70
+ assert attributes.get("langtrace.service.version") == v("pinecone-client")
71
+ assert attributes.get("langtrace.version") == v("langtrace-python-sdk")
76
72
  assert attributes.get("db.system") == "pinecone"
77
73
  assert attributes.get("db.operation") == APIS["QUERY"]["OPERATION"]
78
74
  assert attributes.get("db.query.top_k") == 3