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.
- langtrace_python_sdk/constants/instrumentation/common.py +1 -1
 - langtrace_python_sdk/constants/instrumentation/vertexai.py +20 -0
 - langtrace_python_sdk/instrumentation/__init__.py +15 -13
 - langtrace_python_sdk/instrumentation/crewai_tools/__init__.py +3 -0
 - langtrace_python_sdk/instrumentation/crewai_tools/instrumentation.py +49 -0
 - langtrace_python_sdk/instrumentation/crewai_tools/patch.py +64 -0
 - langtrace_python_sdk/instrumentation/vertexai/patch.py +36 -6
 - langtrace_python_sdk/langtrace.py +34 -57
 - langtrace_python_sdk/utils/llm.py +30 -13
 - langtrace_python_sdk/version.py +1 -1
 - {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/METADATA +1 -1
 - {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/RECORD +15 -12
 - {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/WHEEL +0 -0
 - {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/entry_points.txt +0 -0
 - {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/licenses/LICENSE +0 -0
 
| 
         @@ -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 . 
     | 
| 
       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,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  
     | 
| 
       100 
     | 
    
         
            -
                    response, types. 
     | 
| 
      
 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 
     | 
    
         
            -
                     
     | 
| 
       126 
     | 
    
         
            -
                     
     | 
| 
      
 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 
     | 
    
         
            -
             
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       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. 
     | 
| 
       76 
     | 
    
         
            -
            from langtrace_python_sdk. 
     | 
| 
       77 
     | 
    
         
            -
                 
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                 
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       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 ( 
     | 
| 
       399 
     | 
    
         
            -
                        chunk 
     | 
| 
       400 
     | 
    
         
            -
                         
     | 
| 
       401 
     | 
    
         
            -
                        chunk.delta 
     | 
| 
       402 
     | 
    
         
            -
                         
     | 
| 
       403 
     | 
    
         
            -
                        chunk.delta.message 
     | 
| 
       404 
     | 
    
         
            -
                         
     | 
| 
       405 
     | 
    
         
            -
                        chunk.delta.message.content 
     | 
| 
      
 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  
     | 
| 
      
 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 ( 
     | 
| 
       429 
     | 
    
         
            -
                            hasattr(chunk 
     | 
| 
       430 
     | 
    
         
            -
                             
     | 
| 
      
 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)
         
     | 
    
        langtrace_python_sdk/version.py
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            __version__ = "3. 
     | 
| 
      
 1 
     | 
    
         
            +
            __version__ = "3.5.0"
         
     | 
| 
         @@ -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= 
     | 
| 
       114 
     | 
    
         
            -
            langtrace_python_sdk/version.py,sha256= 
     | 
| 
      
 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= 
     | 
| 
      
 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= 
     | 
| 
      
 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= 
     | 
| 
      
 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= 
     | 
| 
      
 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= 
     | 
| 
      
 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. 
     | 
| 
       281 
     | 
    
         
            -
            langtrace_python_sdk-3. 
     | 
| 
       282 
     | 
    
         
            -
            langtrace_python_sdk-3. 
     | 
| 
       283 
     | 
    
         
            -
            langtrace_python_sdk-3. 
     | 
| 
       284 
     | 
    
         
            -
            langtrace_python_sdk-3. 
     | 
| 
      
 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,,
         
     | 
| 
         
            File without changes
         
     | 
    
        {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/entry_points.txt
    RENAMED
    
    | 
         
            File without changes
         
     | 
    
        {langtrace_python_sdk-3.3.31.dist-info → langtrace_python_sdk-3.5.0.dist-info}/licenses/LICENSE
    RENAMED
    
    | 
         
            File without changes
         
     |