Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
4d717b1
Merge branch 'development' into release
karthikscale3 Apr 24, 2024
0233826
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Apr 28, 2024
7f4e951
Merge branch 'development' into release
karthikscale3 Apr 28, 2024
81a6ca0
Merge
karthikscale3 Jun 13, 2024
0c19f77
Merge branch 'development' into release
karthikscale3 Jun 13, 2024
c3a6ccf
remove logs
karthikscale3 Jun 13, 2024
a99cf10
remove requirements
karthikscale3 Jun 13, 2024
1379b27
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jun 17, 2024
dae04e7
Merge branch 'development' into release
karthikscale3 Jun 17, 2024
129e927
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jun 24, 2024
16e67f9
Merge branch 'development' into release
karthikscale3 Jun 24, 2024
e604e93
Bump version
karthikscale3 Jun 24, 2024
7e00473
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jun 24, 2024
6ac71aa
Merge branch 'development' into release
karthikscale3 Jun 24, 2024
c39bf01
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jun 24, 2024
f89e38c
Merge branch 'development' into release
karthikscale3 Jun 24, 2024
e95e743
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jul 19, 2024
c62e803
Squash
karthikscale3 Jul 25, 2024
d7fd3fb
Merge
karthikscale3 Jul 25, 2024
c4ea507
Merge branch 'development' into release
karthikscale3 Jul 25, 2024
4c74fd8
Merge
karthikscale3 Jul 31, 2024
9a83e20
Merge branch 'development' into release
karthikscale3 Jul 31, 2024
09d5631
Merge
karthikscale3 Aug 3, 2024
508e72b
Merge
karthikscale3 Aug 3, 2024
ad44fa3
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Aug 13, 2024
ad168b3
Merge branch 'development' into release
karthikscale3 Aug 13, 2024
6876f92
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Aug 30, 2024
630169a
Merge branch 'development' into release
karthikscale3 Aug 30, 2024
0e1aae3
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Sep 1, 2024
c266698
Merge branch 'development' into release
karthikscale3 Sep 1, 2024
5b9895f
merge
karthikscale3 Sep 4, 2024
04fd825
Merge branch 'development' into release
karthikscale3 Sep 4, 2024
510e4b8
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Sep 6, 2024
e63bee2
Merge branch 'development' into release
karthikscale3 Sep 6, 2024
9741a3e
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Sep 8, 2024
4f7f3c4
Merge branch 'development' into release
karthikscale3 Sep 8, 2024
32fac05
merge
karthikscale3 Sep 11, 2024
4920395
Merge branch 'development' into release
karthikscale3 Sep 11, 2024
2e8956d
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Sep 11, 2024
372ae29
Merge branch 'development' into release
karthikscale3 Sep 11, 2024
da82f72
bump version
karthikscale3 Sep 26, 2024
ef0332f
Merge branch 'development' into release
karthikscale3 Sep 26, 2024
105749c
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Oct 8, 2024
0f99827
Merge branch 'development' into release
karthikscale3 Oct 8, 2024
b52fce7
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Oct 8, 2024
ddaf4b5
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Oct 10, 2024
54cddc8
Merge branch 'development' into release
karthikscale3 Oct 10, 2024
ced0a31
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Oct 16, 2024
4e22bde
Merge branch 'development' into release
karthikscale3 Oct 16, 2024
135bdc7
bump version
karthikscale3 Oct 18, 2024
6b0a460
Merge branch 'development' into release
karthikscale3 Oct 22, 2024
7824c39
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Oct 22, 2024
109990a
minor
karthikscale3 Oct 22, 2024
2e9befb
version
karthikscale3 Oct 31, 2024
21cdc08
Merge branch 'development' into release
karthikscale3 Oct 31, 2024
7959744
Merge branch 'development' into release
karthikscale3 Oct 31, 2024
aa3dc2f
switch to http exporter
karthikscale3 Oct 31, 2024
4e22e16
Include setuptools to deps
karthikscale3 Nov 15, 2024
a7b34ab
Merge branch 'development' into release
karthikscale3 Nov 15, 2024
736fb60
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Nov 19, 2024
41c58e8
Merge branch 'development' into release
karthikscale3 Nov 19, 2024
129f764
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Nov 25, 2024
f7188c5
Merge branch 'development' into release
karthikscale3 Nov 25, 2024
d43358a
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Dec 1, 2024
fa7b13b
Merge branch 'development' into release
karthikscale3 Dec 1, 2024
fab8619
merge
karthikscale3 Dec 10, 2024
5649f0a
Merge branch 'development' into release
karthikscale3 Dec 10, 2024
0274620
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 20, 2025
0897cc7
Merge branch 'development' into release
karthikscale3 Jan 20, 2025
8eee1e1
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 20, 2025
8cc7f7c
Merge branch 'development' into release
karthikscale3 Jan 20, 2025
d6b6531
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 20, 2025
30b6e00
Merge branch 'development' into release
karthikscale3 Jan 20, 2025
1d7362a
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 22, 2025
36ba737
Merge branch 'development' into release
karthikscale3 Jan 22, 2025
d9bcdb4
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 27, 2025
a5f3da6
Merge branch 'development' into release
karthikscale3 Jan 27, 2025
b856e03
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Jan 27, 2025
5f14b58
Merge branch 'development' into release
karthikscale3 Jan 27, 2025
fd9baed
merge
karthikscale3 Feb 6, 2025
ece9c97
Merge branch 'development' into release
karthikscale3 Feb 6, 2025
cd1a481
Merge branch 'main' of github.com:Scale3-Labs/langtrace-python-sdk in…
karthikscale3 Feb 7, 2025
a3730af
Merge branch 'development' into release
karthikscale3 Feb 7, 2025
d035cbc
Cleanlab integration (#487)
karthikscale3 Mar 5, 2025
5453a92
merge
karthikscale3 Mar 5, 2025
5d65fb3
Merge branch 'development' into release
karthikscale3 Mar 5, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions src/examples/cleanlab_example/simple.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import os

from cleanlab_tlm import TLM
from dotenv import find_dotenv, load_dotenv

from langtrace_python_sdk import langtrace

_ = load_dotenv(find_dotenv())

langtrace.init()

api_key = os.getenv("CLEANLAB_API_KEY")
tlm = TLM(api_key=api_key, options={"log": ["explanation"], "model": "gpt-4o-mini"}) # GPT, Claude, etc
out = tlm.prompt("What's the third month of the year alphabetically?")
trustworthiness_score = tlm.get_trustworthiness_score("What's the first month of the year?", response="January")

print(out)
print(trustworthiness_score)
3 changes: 2 additions & 1 deletion src/langtrace_python_sdk/constants/instrumentation/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
"ARCH": "Arch",
"AZURE": "Azure",
"CHROMA": "Chroma",
"CLEANLAB": "CleanLab",
"COHERE": "Cohere",
"CREWAI": "CrewAI",
"DEEPSEEK": "DeepSeek",
"DSPY": "DSPy",
Expand All @@ -25,7 +27,6 @@
"LLAMAINDEX": "LlamaIndex",
"OPENAI": "OpenAI",
"PINECONE": "Pinecone",
"COHERE": "Cohere",
"PPLX": "Perplexity",
"QDRANT": "Qdrant",
"WEAVIATE": "Weaviate",
Expand Down
11 changes: 5 additions & 6 deletions src/langtrace_python_sdk/instrumentation/__init__.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
from .agno import AgnoInstrumentation
from .anthropic import AnthropicInstrumentation
from .autogen import AutogenInstrumentation
from .aws_bedrock import AWSBedrockInstrumentation
from .cerebras import CerebrasInstrumentation
from .chroma import ChromaInstrumentation
from .cleanlab import CleanLabInstrumentation
from .cohere import CohereInstrumentation
from .crewai import CrewAIInstrumentation
from .crewai_tools import CrewaiToolsInstrumentation
from .dspy import DspyInstrumentation
from .embedchain import EmbedchainInstrumentation
from .gemini import GeminiInstrumentation
from .google_genai import GoogleGenaiInstrumentation
from .graphlit import GraphlitInstrumentation
from .groq import GroqInstrumentation
from .langchain import LangchainInstrumentation
from .langchain_community import LangchainCommunityInstrumentation
Expand All @@ -21,17 +24,12 @@
from .mistral import MistralInstrumentation
from .ollama import OllamaInstrumentor
from .openai import OpenAIInstrumentation
from .phidata import PhiDataInstrumentation
from .pinecone import PineconeInstrumentation
from .pymongo import PyMongoInstrumentation
from .qdrant import QdrantInstrumentation
from .vertexai import VertexAIInstrumentation
from .weaviate import WeaviateInstrumentation
from .cerebras import CerebrasInstrumentation
from .milvus import MilvusInstrumentation
from .google_genai import GoogleGenaiInstrumentation
from .graphlit import GraphlitInstrumentation
from .phidata import PhiDataInstrumentation
from .agno import AgnoInstrumentation

__all__ = [
"AnthropicInstrumentation",
Expand Down Expand Up @@ -65,4 +63,5 @@
"GraphlitInstrumentation",
"PhiDataInstrumentation",
"AgnoInstrumentation",
"CleanLabInstrumentation",
]
5 changes: 5 additions & 0 deletions src/langtrace_python_sdk/instrumentation/cleanlab/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from .instrumentation import CleanLabInstrumentation

__all__ = [
"CleanLabInstrumentation",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"""
Copyright (c) 2025 Scale3 Labs
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
"""

import importlib.metadata
import logging
from typing import Any, Collection, Optional

from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
from opentelemetry.trace import TracerProvider, get_tracer
from wrapt import wrap_function_wrapper

from langtrace_python_sdk.instrumentation.cleanlab.patch import generic_patch

logging.basicConfig(level=logging.FATAL)


class CleanLabInstrumentation(BaseInstrumentor): # type: ignore

def instrumentation_dependencies(self) -> Collection[str]:
return ["cleanlab-tlm >= 1.0.7", "trace-attributes >= 4.0.5"]

def _instrument(self, **kwargs: Any) -> None:
tracer_provider: Optional[TracerProvider] = kwargs.get("tracer_provider")
tracer = get_tracer(__name__, "", tracer_provider)
version: str = importlib.metadata.version("cleanlab_tlm")

wrap_function_wrapper(
"cleanlab_tlm.tlm",
"TLM.prompt",
generic_patch(version, tracer),
)

wrap_function_wrapper(
"cleanlab_tlm.tlm",
"TLM.get_trustworthiness_score",
generic_patch(version, tracer),
)

wrap_function_wrapper(
"cleanlab_tlm.tlm",
"TLM.try_prompt",
generic_patch(version, tracer),
)

wrap_function_wrapper(
"cleanlab_tlm.tlm",
"TLM.try_get_trustworthiness_score",
generic_patch(version, tracer),
)

def _uninstrument(self, **kwargs: Any) -> None:
pass
75 changes: 75 additions & 0 deletions src/langtrace_python_sdk/instrumentation/cleanlab/patch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
import json
from typing import Any, Callable, List

from importlib_metadata import version as v
from langtrace.trace_attributes import FrameworkSpanAttributes
from opentelemetry import baggage
from opentelemetry.trace import SpanKind, Tracer
from opentelemetry.trace.status import Status, StatusCode

from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
from langtrace_python_sdk.constants.instrumentation.common import (
LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY, SERVICE_PROVIDERS)
from langtrace_python_sdk.instrumentation.openai.types import \
ChatCompletionsCreateKwargs
from langtrace_python_sdk.utils.llm import set_span_attributes
from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs


def generic_patch(version: str, tracer: Tracer) -> Callable:
"""Wrap the `prompt` method of the `TLM` class to trace it."""

def traced_method(
wrapped: Callable,
instance: Any,
args: List[Any],
kwargs: ChatCompletionsCreateKwargs,
) -> Any:
service_provider = SERVICE_PROVIDERS["CLEANLAB"]
extra_attributes = baggage.get_baggage(LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY)
span_attributes = {
"langtrace.sdk.name": "langtrace-python-sdk",
"langtrace.service.name": service_provider,
"langtrace.service.type": "framework",
"langtrace.service.version": version,
"langtrace.version": v(LANGTRACE_SDK_NAME),
**(extra_attributes if extra_attributes is not None else {}),
}

span_attributes["tlm.metadata"] = serialize_kwargs(**kwargs)
span_attributes["tlm.inputs"] = serialize_args(*args)

attributes = FrameworkSpanAttributes(**span_attributes)

with tracer.start_as_current_span(
name=f"tlm.{wrapped.__name__}", kind=SpanKind.CLIENT
) as span:
try:
set_span_attributes(span, attributes)
result = wrapped(*args, **kwargs)
if result:
# Handle result serialization based on its type
if hasattr(result, 'model_dump_json'):
# For Pydantic models
result_json = json.loads(result.model_dump_json())
elif isinstance(result, dict):
# For dictionary results
result_json = result
else:
# For other types, try to convert to dict or use string representation
try:
result_json = json.loads(json.dumps(result, default=str))
except Exception: # pylint: disable=W0702, W0718
result_json = str(result)

span.set_attribute("tlm.result", str(result_json))
span.set_status(Status(StatusCode.OK))

return result

except Exception as err:
span.record_exception(err)
span.set_status(Status(StatusCode.ERROR, str(err)))
raise

return traced_method
9 changes: 4 additions & 5 deletions src/langtrace_python_sdk/instrumentation/graphlit/patch.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import json

from importlib_metadata import version as v
from langtrace.trace_attributes import FrameworkSpanAttributes
from opentelemetry import baggage
Expand All @@ -7,9 +8,7 @@

from langtrace_python_sdk.constants import LANGTRACE_SDK_NAME
from langtrace_python_sdk.constants.instrumentation.common import (
LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY,
SERVICE_PROVIDERS,
)
LANGTRACE_ADDITIONAL_SPAN_ATTRIBUTES_KEY, SERVICE_PROVIDERS)
from langtrace_python_sdk.utils.llm import set_span_attributes
from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs

Expand All @@ -27,8 +26,8 @@ async def traced_method(wrapped, instance, args, kwargs):
**(extra_attributes if extra_attributes is not None else {}),
}

span_attributes["langchain.metadata"] = serialize_kwargs(**kwargs)
span_attributes["langchain.inputs"] = serialize_args(*args)
span_attributes["graphlit.metadata"] = serialize_kwargs(**kwargs)
span_attributes["graphlit.inputs"] = serialize_args(*args)

attributes = FrameworkSpanAttributes(**span_attributes)

Expand Down
71 changes: 14 additions & 57 deletions src/langtrace_python_sdk/langtrace.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,54 +29,9 @@
from opentelemetry.instrumentation.sqlalchemy import SQLAlchemyInstrumentor
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import (
BatchSpanProcessor,
ConsoleSpanExporter,
SimpleSpanProcessor,
)

from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import (
OTLPSpanExporter as GRPCExporter,
)
from opentelemetry.exporter.otlp.proto.http.trace_exporter import (
OTLPSpanExporter as HTTPExporter,
)
from langtrace_python_sdk.constants.exporter.langtrace_exporter import (
LANGTRACE_REMOTE_URL,
LANGTRACE_SESSION_ID_HEADER,
)
from langtrace_python_sdk.instrumentation import (
AnthropicInstrumentation,
ChromaInstrumentation,
CohereInstrumentation,
CrewAIInstrumentation,
DspyInstrumentation,
EmbedchainInstrumentation,
GeminiInstrumentation,
GroqInstrumentation,
LangchainCommunityInstrumentation,
LangchainCoreInstrumentation,
LangchainInstrumentation,
LanggraphInstrumentation,
LiteLLMInstrumentation,
LlamaindexInstrumentation,
MistralInstrumentation,
AWSBedrockInstrumentation,
OllamaInstrumentor,
OpenAIInstrumentation,
PineconeInstrumentation,
QdrantInstrumentation,
AutogenInstrumentation,
VertexAIInstrumentation,
WeaviateInstrumentation,
PyMongoInstrumentation,
CerebrasInstrumentation,
MilvusInstrumentation,
GoogleGenaiInstrumentation,
GraphlitInstrumentation,
PhiDataInstrumentation,
AgnoInstrumentation,
)
from opentelemetry.sdk.trace.export import (BatchSpanProcessor,
ConsoleSpanExporter,
SimpleSpanProcessor)
from opentelemetry.util.re import parse_env_headers
from sentry_sdk.types import Event, Hint

Expand All @@ -86,17 +41,18 @@
from langtrace_python_sdk.extensions.langtrace_exporter import \
LangTraceExporter
from langtrace_python_sdk.instrumentation import (
AnthropicInstrumentation, AutogenInstrumentation,
AgnoInstrumentation, AnthropicInstrumentation, AutogenInstrumentation,
AWSBedrockInstrumentation, CerebrasInstrumentation, ChromaInstrumentation,
CohereInstrumentation, CrewAIInstrumentation, CrewaiToolsInstrumentation,
DspyInstrumentation, EmbedchainInstrumentation, GeminiInstrumentation,
GoogleGenaiInstrumentation, GroqInstrumentation,
LangchainCommunityInstrumentation, LangchainCoreInstrumentation,
LangchainInstrumentation, LanggraphInstrumentation, LiteLLMInstrumentation,
CleanLabInstrumentation, CohereInstrumentation, CrewAIInstrumentation,
CrewaiToolsInstrumentation, DspyInstrumentation, EmbedchainInstrumentation,
GeminiInstrumentation, GoogleGenaiInstrumentation, GraphlitInstrumentation,
GroqInstrumentation, LangchainCommunityInstrumentation,
LangchainCoreInstrumentation, LangchainInstrumentation,
LanggraphInstrumentation, LiteLLMInstrumentation,
LlamaindexInstrumentation, MilvusInstrumentation, MistralInstrumentation,
OllamaInstrumentor, OpenAIInstrumentation, PineconeInstrumentation,
PyMongoInstrumentation, QdrantInstrumentation, VertexAIInstrumentation,
WeaviateInstrumentation)
OllamaInstrumentor, OpenAIInstrumentation, PhiDataInstrumentation,
PineconeInstrumentation, PyMongoInstrumentation, QdrantInstrumentation,
VertexAIInstrumentation, WeaviateInstrumentation)
from langtrace_python_sdk.types import (DisableInstrumentations,
InstrumentationMethods)
from langtrace_python_sdk.utils import (check_if_sdk_is_outdated,
Expand Down Expand Up @@ -334,6 +290,7 @@ def init(
"cerebras-cloud-sdk": CerebrasInstrumentation(),
"pymilvus": MilvusInstrumentation(),
"crewai-tools": CrewaiToolsInstrumentation(),
"cleanlab-tlm": CleanLabInstrumentation(),
}

init_instrumentations(config.disable_instrumentations, all_instrumentations)
Expand Down
2 changes: 1 addition & 1 deletion src/langtrace_python_sdk/version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "3.8.0"
__version__ = "3.8.1"
Loading