langtrace-python-sdk 3.3.31__py3-none-any.whl → 3.5.0__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.
@@ -30,7 +30,7 @@ SERVICE_PROVIDERS = {
30
30
  "QDRANT": "Qdrant",
31
31
  "WEAVIATE": "Weaviate",
32
32
  "OLLAMA": "Ollama",
33
- "VERTEXAI": "VertexAI",
33
+ "VERTEXAI": "Vertex AI",
34
34
  "GEMINI": "Gemini",
35
35
  "MISTRAL": "Mistral",
36
36
  "EMBEDCHAIN": "Embedchain",
@@ -39,4 +39,24 @@ APIS = {
39
39
  "method": "ChatSession",
40
40
  "operation": "send_message_streaming",
41
41
  },
42
+ "PREDICTION_SERVICE_BETA_GENERATE_CONTENT": {
43
+ "module": "google.cloud.aiplatform_v1beta1.services.prediction_service.client",
44
+ "method": "PredictionServiceClient",
45
+ "operation": "generate_content",
46
+ },
47
+ "PREDICTION_SERVICE_GENERATE_CONTENT": {
48
+ "module": "google.cloud.aiplatform_v1.services.prediction_service.client",
49
+ "method": "PredictionServiceClient",
50
+ "operation": "generate_content",
51
+ },
52
+ "PREDICTION_SERVICE_BETA_STREAM_GENERATE_CONTENT": {
53
+ "module": "google.cloud.aiplatform_v1beta1.services.prediction_service.client",
54
+ "method": "PredictionServiceClient",
55
+ "operation": "stream_generate_content",
56
+ },
57
+ "PREDICTION_SERVICE_STREAM_GENERATE_CONTENT": {
58
+ "module": "google.cloud.aiplatform_v1.services.prediction_service.client",
59
+ "method": "PredictionServiceClient",
60
+ "operation": "stream_generate_content",
61
+ },
42
62
  }
@@ -1,30 +1,31 @@
1
1
  from .anthropic import AnthropicInstrumentation
2
+ from .autogen import AutogenInstrumentation
3
+ from .aws_bedrock import AWSBedrockInstrumentation
4
+ from .cerebras import CerebrasInstrumentation
2
5
  from .chroma import ChromaInstrumentation
3
6
  from .cohere import CohereInstrumentation
4
7
  from .crewai import CrewAIInstrumentation
8
+ from .crewai_tools import CrewaiToolsInstrumentation
9
+ from .dspy import DspyInstrumentation
10
+ from .embedchain import EmbedchainInstrumentation
11
+ from .gemini import GeminiInstrumentation
12
+ from .google_genai import GoogleGenaiInstrumentation
5
13
  from .groq import GroqInstrumentation
6
14
  from .langchain import LangchainInstrumentation
7
15
  from .langchain_community import LangchainCommunityInstrumentation
8
16
  from .langchain_core import LangchainCoreInstrumentation
9
17
  from .langgraph import LanggraphInstrumentation
18
+ from .litellm import LiteLLMInstrumentation
10
19
  from .llamaindex import LlamaindexInstrumentation
20
+ from .milvus import MilvusInstrumentation
21
+ from .mistral import MistralInstrumentation
22
+ from .ollama import OllamaInstrumentor
11
23
  from .openai import OpenAIInstrumentation
12
24
  from .pinecone import PineconeInstrumentation
25
+ from .pymongo import PyMongoInstrumentation
13
26
  from .qdrant import QdrantInstrumentation
14
- from .weaviate import WeaviateInstrumentation
15
- from .ollama import OllamaInstrumentor
16
- from .dspy import DspyInstrumentation
17
- from .autogen import AutogenInstrumentation
18
27
  from .vertexai import VertexAIInstrumentation
19
- from .gemini import GeminiInstrumentation
20
- from .mistral import MistralInstrumentation
21
- from .aws_bedrock import AWSBedrockInstrumentation
22
- from .embedchain import EmbedchainInstrumentation
23
- from .litellm import LiteLLMInstrumentation
24
- from .pymongo import PyMongoInstrumentation
25
- from .cerebras import CerebrasInstrumentation
26
- from .milvus import MilvusInstrumentation
27
- from .google_genai import GoogleGenaiInstrumentation
28
+ from .weaviate import WeaviateInstrumentation
28
29
 
29
30
  __all__ = [
30
31
  "AnthropicInstrumentation",
@@ -54,4 +55,5 @@ __all__ = [
54
55
  "CerebrasInstrumentation",
55
56
  "MilvusInstrumentation",
56
57
  "GoogleGenaiInstrumentation",
58
+ "CrewaiToolsInstrumentation",
57
59
  ]
@@ -0,0 +1,3 @@
1
+ from .instrumentation import CrewaiToolsInstrumentation
2
+
3
+ __all__ = ["CrewaiToolsInstrumentation"]
@@ -0,0 +1,49 @@
1
+ """
2
+ Copyright (c) 2025 Scale3 Labs
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ """
16
+
17
+ from typing import Collection
18
+
19
+ from importlib_metadata import version as v
20
+ from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
21
+ from opentelemetry.trace import get_tracer
22
+ from wrapt import wrap_function_wrapper as _W
23
+
24
+ from .patch import patch_run
25
+
26
+
27
+ class CrewaiToolsInstrumentation(BaseInstrumentor):
28
+ """
29
+ The CrewAIInstrumentation class represents the CrewAI instrumentation"""
30
+
31
+ def instrumentation_dependencies(self) -> Collection[str]:
32
+ return ["crewai-tools >= 0.32.0"]
33
+
34
+ def _instrument(self, **kwargs):
35
+ tracer_provider = kwargs.get("tracer_provider")
36
+ tracer = get_tracer(__name__, "", tracer_provider)
37
+ version = v("crewai-tools")
38
+ try:
39
+ _W(
40
+ "crewai_tools.tools.serper_dev_tool.serper_dev_tool",
41
+ "SerperDevTool._run",
42
+ patch_run("SerperDevTool._run", version, tracer),
43
+ )
44
+ # pylint: disable=broad-except
45
+ except Exception:
46
+ pass
47
+
48
+ def _uninstrument(self, **kwargs):
49
+ pass
@@ -0,0 +1,64 @@
1
+ import json
2
+
3
+ from importlib_metadata import version as v
4
+ from langtrace.trace_attributes import FrameworkSpanAttributes
5
+ from opentelemetry import baggage
6
+ from opentelemetry.trace import SpanKind, Tracer
7
+ from opentelemetry.trace.status import Status, StatusCode
8
+
9
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
10
+ from langtrace_python_sdk.constants.instrumentation.common import (
11
+ LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY, SERVICE_PROVIDERS)
12
+ from langtrace_python_sdk.utils import set_span_attribute
13
+ from langtrace_python_sdk.utils.llm import get_span_name, set_span_attributes
14
+ from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs
15
+
16
+
17
+ def patch_run(operation_name, version, tracer: Tracer):
18
+ def traced_method(wrapped, instance, args, kwargs):
19
+ service_provider = SERVICE_PROVIDERS["CREWAI"]
20
+ extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
21
+ span_attributes = {
22
+ "langtrace.sdk.name": "langtrace-python-sdk",
23
+ "langtrace.service.name": service_provider,
24
+ "langtrace.service.type": "framework",
25
+ "langtrace.service.version": version,
26
+ "langtrace.version": v(LANGTRACE_SDK_NAME),
27
+ **(extra_attributes if extra_attributes is not None else {}),
28
+ }
29
+
30
+ inputs = {}
31
+ if len(args) > 0:
32
+ inputs["args"] = serialize_args(*args)
33
+ if len(kwargs) > 0:
34
+ inputs["kwargs"] = serialize_kwargs(**kwargs)
35
+ span_attributes["crewai_tools.tools.serper_dev_tool.inputs"] = json.dumps(inputs)
36
+
37
+ attributes = FrameworkSpanAttributes(**span_attributes)
38
+
39
+ with tracer.start_as_current_span(
40
+ get_span_name(operation_name), kind=SpanKind.CLIENT
41
+ ) as span:
42
+
43
+ try:
44
+ set_span_attributes(span, attributes)
45
+ result = wrapped(*args, **kwargs)
46
+ if result is not None and len(result) > 0:
47
+ set_span_attribute(
48
+ span, "crewai_tools.tools.serper_dev_tool.outputs", str(result)
49
+ )
50
+ if result:
51
+ span.set_status(Status(StatusCode.OK))
52
+ return result
53
+
54
+ except Exception as err:
55
+ # Record the exception in the span
56
+ span.record_exception(err)
57
+
58
+ # Set the span status to indicate an error
59
+ span.set_status(Status(StatusCode.ERROR, str(err)))
60
+
61
+ # Reraise the exception to ensure it's not swallowed
62
+ raise
63
+
64
+ return traced_method
@@ -27,12 +27,13 @@ def patch_vertexai(name, version, tracer: Tracer):
27
27
  def traced_method(wrapped, instance, args, kwargs):
28
28
  service_provider = SERVICE_PROVIDERS["VERTEXAI"]
29
29
  prompts = serialize_prompts(args, kwargs)
30
+
30
31
  span_attributes = {
31
32
  **get_langtrace_attributes(version, service_provider),
32
33
  **get_llm_request_attributes(
33
34
  kwargs,
34
35
  prompts=prompts,
35
- model=get_llm_model(instance),
36
+ model=get_llm_model(instance, kwargs),
36
37
  ),
37
38
  **get_llm_url(instance),
38
39
  SpanAttributes.LLM_PATH: "",
@@ -77,6 +78,10 @@ def set_response_attributes(span: Span, result):
77
78
  if hasattr(result, "text"):
78
79
  set_event_completion(span, [{"role": "assistant", "content": result.text}])
79
80
 
81
+ if hasattr(result, "candidates"):
82
+ parts = result.candidates[0].content.parts
83
+ set_event_completion(span, [{"role": "assistant", "content": parts[0].text}])
84
+
80
85
  if hasattr(result, "usage_metadata") and result.usage_metadata is not None:
81
86
  usage = result.usage_metadata
82
87
  input_tokens = usage.prompt_token_count
@@ -96,17 +101,23 @@ def set_response_attributes(span: Span, result):
96
101
 
97
102
 
98
103
  def is_streaming_response(response):
99
- return isinstance(response, types.GeneratorType) or isinstance(
100
- response, types.AsyncGeneratorType
104
+ return (
105
+ isinstance(response, types.GeneratorType)
106
+ or isinstance(response, types.AsyncGeneratorType)
107
+ or str(type(response).__name__) == "_StreamingResponseIterator"
101
108
  )
102
109
 
103
110
 
104
- def get_llm_model(instance):
111
+ def get_llm_model(instance, kwargs):
112
+ if "request" in kwargs:
113
+ return kwargs.get("request").model.split("/")[-1]
114
+
105
115
  if hasattr(instance, "_model_name"):
106
116
  return instance._model_name.replace("publishers/google/models/", "")
107
117
  return getattr(instance, "_model_id", "unknown")
108
118
 
109
119
 
120
+ @silently_fail
110
121
  def serialize_prompts(args, kwargs):
111
122
  if args and len(args) > 0:
112
123
  prompt_parts = []
@@ -122,5 +133,24 @@ def serialize_prompts(args, kwargs):
122
133
 
123
134
  return [{"role": "user", "content": "\n".join(prompt_parts)}]
124
135
  else:
125
- content = kwargs.get("prompt") or kwargs.get("message")
126
- return [{"role": "user", "content": content}] if content else []
136
+ # Handle PredictionServiceClient for google-cloud-aiplatform.
137
+ if "request" in kwargs:
138
+ prompt = []
139
+ prompt_body = kwargs.get("request")
140
+ if prompt_body.system_instruction:
141
+ for part in prompt_body.system_instruction.parts:
142
+ prompt.append({"role": "system", "content": part.text})
143
+
144
+ contents = prompt_body.contents
145
+
146
+ if not contents:
147
+ return []
148
+
149
+ for c in contents:
150
+ role = c.role if c.role else "user"
151
+ content = c.parts[0].text if c.parts else ""
152
+ prompt.append({"role": role, "content": content})
153
+ return prompt
154
+ else:
155
+ content = kwargs.get("prompt") or kwargs.get("message")
156
+ return [{"role": "user", "content": content}] if content else []
@@ -14,74 +14,50 @@ See the License for the specific language governing permissions and
14
14
  limitations under the License.
15
15
  """
16
16
 
17
+ import logging
17
18
  import os
18
19
  import sys
20
+ from typing import Any, Dict, Optional
21
+
19
22
  import sentry_sdk
20
- import logging
21
- from typing import Dict, Optional, Any
22
23
  from colorama import Fore
23
- from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME, SENTRY_DSN
24
24
  from opentelemetry import trace
25
+ from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import \
26
+ OTLPSpanExporter as GRPCExporter
27
+ from opentelemetry.exporter.otlp.proto.http.trace_exporter import \
28
+ OTLPSpanExporter as HTTPExporter
25
29
  from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
26
30
  from opentelemetry.sdk.resources import SERVICE_NAME, Resource
27
31
  from opentelemetry.sdk.trace import TracerProvider
28
- from opentelemetry.sdk.trace.export import (
29
- BatchSpanProcessor,
30
- ConsoleSpanExporter,
31
- SimpleSpanProcessor,
32
- )
33
-
34
- from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
35
- OTLPSpanExporter as GRPCExporter,
36
- )
37
- from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
38
- OTLPSpanExporter as HTTPExporter,
39
- )
40
- from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
41
- LANGTRACE_REMOTE_URL,
42
- LANGTRACE_SESSION_ID_HEADER,
43
- )
44
- from langtrace_python_sdk.instrumentation import (
45
- AnthropicInstrumentation,
46
- ChromaInstrumentation,
47
- CohereInstrumentation,
48
- CrewAIInstrumentation,
49
- DspyInstrumentation,
50
- EmbedchainInstrumentation,
51
- GeminiInstrumentation,
52
- GroqInstrumentation,
53
- LangchainCommunityInstrumentation,
54
- LangchainCoreInstrumentation,
55
- LangchainInstrumentation,
56
- LanggraphInstrumentation,
57
- LiteLLMInstrumentation,
58
- LlamaindexInstrumentation,
59
- MistralInstrumentation,
60
- AWSBedrockInstrumentation,
61
- OllamaInstrumentor,
62
- OpenAIInstrumentation,
63
- PineconeInstrumentation,
64
- QdrantInstrumentation,
65
- AutogenInstrumentation,
66
- VertexAIInstrumentation,
67
- WeaviateInstrumentation,
68
- PyMongoInstrumentation,
69
- CerebrasInstrumentation,
70
- MilvusInstrumentation,
71
- GoogleGenaiInstrumentation,
72
- )
32
+ from opentelemetry.sdk.trace.export import (BatchSpanProcessor,
33
+ ConsoleSpanExporter,
34
+ SimpleSpanProcessor)
73
35
  from opentelemetry.util.re import parse_env_headers
36
+ from sentry_sdk.types import Event, Hint
74
37
 
75
- from langtrace_python_sdk.types import DisableInstrumentations, InstrumentationMethods
76
- from langtrace_python_sdk.utils import (
77
- check_if_sdk_is_outdated,
78
- get_sdk_version,
79
- is_package_installed,
80
- validate_instrumentations,
81
- )
38
+ from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME, SENTRY_DSN
39
+ from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
40
+ LANGTRACE_REMOTE_URL, LANGTRACE_SESSION_ID_HEADER)
41
+ from langtrace_python_sdk.extensions.langtrace_exporter import \
42
+ LangTraceExporter
43
+ from langtrace_python_sdk.instrumentation import (
44
+ AnthropicInstrumentation, AutogenInstrumentation,
45
+ AWSBedrockInstrumentation, CerebrasInstrumentation, ChromaInstrumentation,
46
+ CohereInstrumentation, CrewAIInstrumentation, CrewaiToolsInstrumentation,
47
+ DspyInstrumentation, EmbedchainInstrumentation, GeminiInstrumentation,
48
+ GoogleGenaiInstrumentation, GroqInstrumentation,
49
+ LangchainCommunityInstrumentation, LangchainCoreInstrumentation,
50
+ LangchainInstrumentation, LanggraphInstrumentation, LiteLLMInstrumentation,
51
+ LlamaindexInstrumentation, MilvusInstrumentation, MistralInstrumentation,
52
+ OllamaInstrumentor, OpenAIInstrumentation, PineconeInstrumentation,
53
+ PyMongoInstrumentation, QdrantInstrumentation, VertexAIInstrumentation,
54
+ WeaviateInstrumentation)
55
+ from langtrace_python_sdk.types import (DisableInstrumentations,
56
+ InstrumentationMethods)
57
+ from langtrace_python_sdk.utils import (check_if_sdk_is_outdated,
58
+ get_sdk_version, is_package_installed,
59
+ validate_instrumentations)
82
60
  from langtrace_python_sdk.utils.langtrace_sampler import LangtraceSampler
83
- from langtrace_python_sdk.extensions.langtrace_exporter import LangTraceExporter
84
- from sentry_sdk.types import Event, Hint
85
61
 
86
62
 
87
63
  class LangtraceConfig:
@@ -309,6 +285,7 @@ def init(
309
285
  "pymongo": PyMongoInstrumentation(),
310
286
  "cerebras-cloud-sdk": CerebrasInstrumentation(),
311
287
  "pymilvus": MilvusInstrumentation(),
288
+ "crewai-tools": CrewaiToolsInstrumentation(),
312
289
  }
313
290
 
314
291
  init_instrumentations(config.disable_instrumentations, all_instrumentations)
@@ -395,18 +395,30 @@ class StreamWrapper:
395
395
  content = [chunk.text]
396
396
 
397
397
  # CohereV2
398
- if (hasattr(chunk, "delta") and
399
- chunk.delta is not None and
400
- hasattr(chunk.delta, "message") and
401
- chunk.delta.message is not None and
402
- hasattr(chunk.delta.message, "content") and
403
- chunk.delta.message.content is not None and
404
- hasattr(chunk.delta.message.content, "text") and
405
- chunk.delta.message.content.text is not None):
398
+ if (
399
+ hasattr(chunk, "delta")
400
+ and chunk.delta is not None
401
+ and hasattr(chunk.delta, "message")
402
+ and chunk.delta.message is not None
403
+ and hasattr(chunk.delta.message, "content")
404
+ and chunk.delta.message.content is not None
405
+ and hasattr(chunk.delta.message.content, "text")
406
+ and chunk.delta.message.content.text is not None
407
+ ):
406
408
  content = [chunk.delta.message.content.text]
407
-
409
+ # google-cloud-aiplatform
410
+ if hasattr(chunk, "candidates") and chunk.candidates is not None:
411
+ for candidate in chunk.candidates:
412
+ if hasattr(candidate, "content") and candidate.content is not None:
413
+ for part in candidate.content.parts:
414
+ if hasattr(part, "text") and part.text is not None:
415
+ content.append(part.text)
408
416
  # Anthropic
409
- if hasattr(chunk, "delta") and chunk.delta is not None and not hasattr(chunk.delta, "message"):
417
+ if (
418
+ hasattr(chunk, "delta")
419
+ and chunk.delta is not None
420
+ and not hasattr(chunk.delta, "message")
421
+ ):
410
422
  content = [chunk.delta.text] if hasattr(chunk.delta, "text") else []
411
423
 
412
424
  if isinstance(chunk, dict):
@@ -425,9 +437,14 @@ class StreamWrapper:
425
437
 
426
438
  # CohereV2
427
439
  if hasattr(chunk, "type") and chunk.type == "message-end":
428
- if (hasattr(chunk, "delta") and chunk.delta is not None and
429
- hasattr(chunk.delta, "usage") and chunk.delta.usage is not None and
430
- hasattr(chunk.delta.usage, "billed_units") and chunk.delta.usage.billed_units is not None):
440
+ if (
441
+ hasattr(chunk, "delta")
442
+ and chunk.delta is not None
443
+ and hasattr(chunk.delta, "usage")
444
+ and chunk.delta.usage is not None
445
+ and hasattr(chunk.delta.usage, "billed_units")
446
+ and chunk.delta.usage.billed_units is not None
447
+ ):
431
448
  usage = chunk.delta.usage.billed_units
432
449
  self.completion_tokens = int(usage.output_tokens)
433
450
  self.prompt_tokens = int(usage.input_tokens)
@@ -1 +1 @@
1
- __version__ = "3.3.31"
1
+ __version__ = "3.5.0"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langtrace-python-sdk
3
- Version: 3.3.31
3
+ Version: 3.5.0
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>
@@ -110,8 +110,8 @@ examples/vertexai_example/main.py,sha256=gndId5X5ksD-ycxnAWMdEqIDbLc3kz5Vt8vm4YP
110
110
  examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56snk-Bbg2Kw,618
111
111
  examples/weaviate_example/query_text.py,sha256=wPHQTc_58kPoKTZMygVjTj-2ZcdrIuaausJfMxNQnQc,127162
112
112
  langtrace_python_sdk/__init__.py,sha256=VZM6i71NR7pBQK6XvJWRelknuTYUhqwqE7PlicKa5Wg,1166
113
- langtrace_python_sdk/langtrace.py,sha256=jvfrnkAxc41dmIvwNuVcXwCWyV2vqhGV5qAr5KiMHBA,13239
114
- langtrace_python_sdk/version.py,sha256=_pWcaYcBDUSrb5dd9JFJfVXcoiLoE1UXJcrBXui5AkM,23
113
+ langtrace_python_sdk/langtrace.py,sha256=ekJbkRnmJ2VHv0nrfqK8NiRvYI2ZA7YHK7r12_TiQCU,13425
114
+ langtrace_python_sdk/version.py,sha256=j0HWOe68EJbDKQHKURp6LgON8HyoWHbKmvvCvTB1OzA,22
115
115
  langtrace_python_sdk/constants/__init__.py,sha256=3CNYkWMdd1DrkGqzLUgNZXjdAlM6UFMlf_F-odAToyc,146
116
116
  langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=EVCrouYCpY98f0KSaKr4PzNxPULTZZO6dSA_crEOyJU,106
117
117
  langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -119,7 +119,7 @@ langtrace_python_sdk/constants/instrumentation/anthropic.py,sha256=YX3llt3zwDY6X
119
119
  langtrace_python_sdk/constants/instrumentation/aws_bedrock.py,sha256=QwKtO4NBarOZoGkt5cFCcpxAw3zvZxcMMWBbzPPGv-g,422
120
120
  langtrace_python_sdk/constants/instrumentation/chroma.py,sha256=hiPGYdHS0Yj4Kh3eaYBbuCAl_swqIygu80yFqkOgdak,955
121
121
  langtrace_python_sdk/constants/instrumentation/cohere.py,sha256=9yD133VdrYZ5BoJR4nJHlj67gHEImB9-KsD-NkzHW1I,1159
122
- langtrace_python_sdk/constants/instrumentation/common.py,sha256=0_38AXPFLZnnI6T7wMiSDzTP8AAT-dmNi7Mui0q5WMg,1223
122
+ langtrace_python_sdk/constants/instrumentation/common.py,sha256=CLL1YNXvmCSuYDCZUMUcs_plomCPcBqjITBt2uiN0RE,1224
123
123
  langtrace_python_sdk/constants/instrumentation/embedchain.py,sha256=HodCJvaFjILoOG50OwFObxfVxt_8VUaIAIqvgoN3tzo,278
124
124
  langtrace_python_sdk/constants/instrumentation/gemini.py,sha256=UAmfgg9FM7uNeOCdPfWlir6OIH-8BoxFGPRpdBd9ZZs,358
125
125
  langtrace_python_sdk/constants/instrumentation/groq.py,sha256=VFXmIl4aqGY_fS0PAmjPj_Qm7Tibxbx7Ur_e7rQpqXc,134
@@ -131,12 +131,12 @@ langtrace_python_sdk/constants/instrumentation/openai.py,sha256=uEOH5UXapU2DSf2A
131
131
  langtrace_python_sdk/constants/instrumentation/pinecone.py,sha256=0TityERbGWaHGSN8-vyYZtYCjVj8fQOKae8lng0O0Bk,478
132
132
  langtrace_python_sdk/constants/instrumentation/pymongo.py,sha256=bZR3anvH2OjQCj6ZCLMmdJcWcmlHhEGezS_3sx9RyJ8,195
133
133
  langtrace_python_sdk/constants/instrumentation/qdrant.py,sha256=yL7BopNQTXW7L7Z-gVM2PdusKD7r9qqcATvczFd7NtQ,1999
134
- langtrace_python_sdk/constants/instrumentation/vertexai.py,sha256=0s2vX3Y0iwjOPkUg5lAKi-7o3LaNivDSBBbF-o695Ok,1266
134
+ langtrace_python_sdk/constants/instrumentation/vertexai.py,sha256=S1Ewx4KAn5lb9pdeI8tbjKH6p0wFIBF_xhq_YRWjiF4,2198
135
135
  langtrace_python_sdk/constants/instrumentation/weaviate.py,sha256=gtv-JBxvNGClEMxClmRKzjJ1khgOonsli4D_k9IagSE,2601
136
136
  langtrace_python_sdk/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=ckd8dMmY6h2oxE04p1JFLwUB5PSJX_Cy4eDFEM6aj4Y,6605
138
138
  langtrace_python_sdk/extensions/langtrace_filesystem.py,sha256=34fZutG28EJ66l67OvTGsydAH3ZpXgikdE7hVLqBpG4,7863
139
- langtrace_python_sdk/instrumentation/__init__.py,sha256=ojgb2IcXfeTr_1F4tcr0il3W3iaUnbIofYw11ogsq-8,2089
139
+ langtrace_python_sdk/instrumentation/__init__.py,sha256=eu3dzgG3rjwFPYLqMkvc-7xV15QRz37Bhe1LavNA7-s,2176
140
140
  langtrace_python_sdk/instrumentation/anthropic/__init__.py,sha256=donrurJAGYlxrSRA3BIf76jGeUcAx9Tq8CVpah68S0Y,101
141
141
  langtrace_python_sdk/instrumentation/anthropic/instrumentation.py,sha256=ndXdruI0BG7n75rsuEpKjfzePxrZxg40gZ39ONmD_v4,1845
142
142
  langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=ztPN4VZujoxYOKhTbFnup7Ibms9NAzYCPAJY43NUgKw,4935
@@ -161,6 +161,9 @@ langtrace_python_sdk/instrumentation/cohere/patch.py,sha256=q29gJnik8bnJ7fnwaJ8P
161
161
  langtrace_python_sdk/instrumentation/crewai/__init__.py,sha256=_UBKfvQv7l0g2_wnmA5F6CdSAFH0atNOVPd49zsN3aM,88
162
162
  langtrace_python_sdk/instrumentation/crewai/instrumentation.py,sha256=5Umzq8zjEnMEtjZZiMB4DQOPkxZ-1vts7RKC6JWpn24,2969
163
163
  langtrace_python_sdk/instrumentation/crewai/patch.py,sha256=VoyOtGKYzaOIu7UnVNTemZeB3LrCIodrrYwmXLdxRw8,9133
164
+ langtrace_python_sdk/instrumentation/crewai_tools/__init__.py,sha256=4aINgRu-2FZGvgj2p_p2WqEu-wLiizB09uMsPn8RVsY,98
165
+ langtrace_python_sdk/instrumentation/crewai_tools/instrumentation.py,sha256=eqvnRu6ycPyjqYg5Vb4-QKPXVfBEzJQjZ7-MPUOyfOQ,1617
166
+ langtrace_python_sdk/instrumentation/crewai_tools/patch.py,sha256=HbqvxUizo20zYY_iP1-5MFYKp3S_QegIa5Glg7ht2i8,2602
164
167
  langtrace_python_sdk/instrumentation/dspy/__init__.py,sha256=tM1srfi_QgyCzrde4izojMrRq2Wm7Dj5QUvVQXIJzkk,84
165
168
  langtrace_python_sdk/instrumentation/dspy/instrumentation.py,sha256=qx2vBeuODI7rubf-0bkuNzDWu4bLI-E5uabrWTEuH6k,2923
166
169
  langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=uoOCBdlUXshMRRUA5ZbGc5565FrWSWjNzcrBJefomjw,10152
@@ -219,14 +222,14 @@ langtrace_python_sdk/instrumentation/qdrant/instrumentation.py,sha256=vl2eKSP55a
219
222
  langtrace_python_sdk/instrumentation/qdrant/patch.py,sha256=IgdozFyKqB8n72BjKvBDiMhYM4o75DReD0I8_uIQ7KY,5015
220
223
  langtrace_python_sdk/instrumentation/vertexai/__init__.py,sha256=ZzKxB7bl0FaRlgJhhgAk5V8Bf20FmThWM_Z9u9Eyy1s,92
221
224
  langtrace_python_sdk/instrumentation/vertexai/instrumentation.py,sha256=yz4trw0BqGbNUvlagsejk_j8pDvRHxxQFtYJVarNKqY,1393
222
- langtrace_python_sdk/instrumentation/vertexai/patch.py,sha256=55xwmkFfeevEc4yOHPRxwdeRrsS6UptcZoMq-yeFrt4,4471
225
+ langtrace_python_sdk/instrumentation/vertexai/patch.py,sha256=PzBio8x6zdVpX286TKtaTR-sf1HCHQ7RrdvpyNaGk4Q,5571
223
226
  langtrace_python_sdk/instrumentation/weaviate/__init__.py,sha256=Mc-Je6evPo-kKQzerTG7bd1XO5JOh4YGTE3wBxaUBwg,99
224
227
  langtrace_python_sdk/instrumentation/weaviate/instrumentation.py,sha256=Kwq5QQTUQNRHrWrMnNe9X0TcqtXGiNpBidsuToRTqG0,2417
225
228
  langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=Lqixz32uAvDA2VLU3zXLiJ9ohpKeD_LveahX7uro3ZY,6934
226
229
  langtrace_python_sdk/types/__init__.py,sha256=2VykM6fNHRlkOaIEUCdK3VyaaVgk2rTIr9jMmCVj2Ag,4676
227
230
  langtrace_python_sdk/utils/__init__.py,sha256=VVDOG-QLd59ZvSHp0avjof0sbxlZ1QQOf0KoOF7ofhQ,3310
228
231
  langtrace_python_sdk/utils/langtrace_sampler.py,sha256=BupNndHbU9IL_wGleKetz8FdcveqHMBVz1bfKTTW80w,1753
229
- langtrace_python_sdk/utils/llm.py,sha256=qX-4aMCq_7wetlPqhsd4aqr8e76ePdTNBJM_PwvPcAg,16160
232
+ langtrace_python_sdk/utils/llm.py,sha256=693egq-ztVLmlwdZ9KkTTzMpg_k397ErA28XFL00_ws,16733
230
233
  langtrace_python_sdk/utils/misc.py,sha256=LaQr5LOmZMiuwVdjYh7aIu6o2C_Xb1wgpQGNOVmRzfE,1918
231
234
  langtrace_python_sdk/utils/prompt_registry.py,sha256=n5dQMVLBw8aJZY8Utvf67bncc25ELf6AH9BYw8_hSzo,2619
232
235
  langtrace_python_sdk/utils/sdk_version_checker.py,sha256=F-VVVH7Fmhr5LcY0IIe-34zIi5RQcx26uuxFpPzZesM,1782
@@ -277,8 +280,8 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
277
280
  tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
278
281
  tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
279
282
  tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
280
- langtrace_python_sdk-3.3.31.dist-info/METADATA,sha256=-s9W8bA4rTLSCS3kLHE2nmcWFAnI3CPTsDjYaGo4aJo,15644
281
- langtrace_python_sdk-3.3.31.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
282
- langtrace_python_sdk-3.3.31.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
283
- langtrace_python_sdk-3.3.31.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
284
- langtrace_python_sdk-3.3.31.dist-info/RECORD,,
283
+ langtrace_python_sdk-3.5.0.dist-info/METADATA,sha256=o2pEymNDig6HG7KcrftPBRhqH6mDgSGrlgpiOMBIBfo,15643
284
+ langtrace_python_sdk-3.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
285
+ langtrace_python_sdk-3.5.0.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
286
+ langtrace_python_sdk-3.5.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
287
+ langtrace_python_sdk-3.5.0.dist-info/RECORD,,