From 3ecf9640b7353f03718d158bec4757a14df22e0b Mon Sep 17 00:00:00 2001 From: Sandesh R <115570766+2getsandesh@users.noreply.github.com> Date: Fri, 22 Aug 2025 22:07:24 +0530 Subject: [PATCH] feat: Added Traceloop SDK for collecting traces and metrics from Langflow (#9317) * Added Traceloop SDK for colecting traces and metrics from Langflow * [autofix.ci] apply automated fixes * added test case for traceloop * Revert "[autofix.ci] apply automated fixes" This reverts commit 3a68113f0de65b2397ac88d1fc2cae8f786adbd7. * Updated logic for verifying returned callbacks list length * [autofix.ci] apply automated fixes * api key strip validation and updated logger warning * Add graceful fallback for Traceloop LangChain callback handler * Removed TraceloopLangChainCallbackHandler * default URL moved to configuration constant * add Timeout Protection to add trace method * add resource cleanup method for traceloop * fix(tracing): unify span lifecycle and fix async mismatch in TraceloopTracer - Remove incorrect asyncio.wait_for usage on synchronous method - Store active spans in _span_map to properly end them in end_trace - Prevent duplicate unrelated spans for same component - Use trace.get_tracer_provider().force_flush() for correct flushing - Add explicit close() method for manual flush at shutdown - Enforce HTTPS in TRACELOOP_BASE_URL validation - Improve reliability of cleanup in __del__ * stable uv.lock from upstream/main * Fix: ensure type-safe metadata handling * Block PYMYSQL intrumentor and relaxed https constraint * fix(tracing): handle invalid input/output type conversion for traceloop attributes * fix: Reduced cognitive complexity of get_trace_as_metadata method * fix: organize child spans under single root span and added type conversion methods * fix: Linting and formatting * uv.lock reset to upstream main * [autofix.ci] apply automated fixes --------- Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Sandesh R --- pyproject.toml | 1 + .../custom/custom_component/component.py | 18 +- .../base/langflow/services/tracing/service.py | 20 + .../langflow/services/tracing/traceloop.py | 245 ++++++++ .../services/tracing/test_tracing_service.py | 8 +- uv.lock | 592 +++++++++++++++++- 6 files changed, 880 insertions(+), 4 deletions(-) create mode 100644 src/backend/base/langflow/services/tracing/traceloop.py diff --git a/pyproject.toml b/pyproject.toml index 7d44cd36b..209fb6ece 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -129,6 +129,7 @@ dependencies = [ "jigsawstack==0.2.7", "aiosqlite==0.21.0", "fastparquet>=2024.11.0", + "traceloop-sdk>=0.43.1", ] [dependency-groups] diff --git a/src/backend/base/langflow/custom/custom_component/component.py b/src/backend/base/langflow/custom/custom_component/component.py index 12a8536fa..ecc96f769 100644 --- a/src/backend/base/langflow/custom/custom_component/component.py +++ b/src/backend/base/langflow/custom/custom_component/component.py @@ -3,6 +3,7 @@ from __future__ import annotations import ast import asyncio import inspect +import json from collections.abc import AsyncIterator, Iterator from copy import deepcopy from textwrap import dedent @@ -1019,10 +1020,23 @@ class Component(CustomComponent): return {**predefined_inputs, **runtime_inputs} def get_trace_as_metadata(self): + def safe_list_values(items): + return [v if isinstance(v, str | int | float | bool) or v is None else str(v) for v in items] + + def safe_value(val): + if isinstance(val, str | int | float | bool) or val is None: + return val + if isinstance(val, list | tuple): + return safe_list_values(val) + try: + return json.dumps(val) + except (TypeError, ValueError): + return str(val) + return { - input_.name: input_.value + input_.name: safe_value(getattr(self, input_.name, input_.value)) for input_ in self.inputs - if hasattr(input_, "trace_as_metadata") and input_.trace_as_metadata + if getattr(input_, "trace_as_metadata", False) } async def _build_with_tracing(self): diff --git a/src/backend/base/langflow/services/tracing/service.py b/src/backend/base/langflow/services/tracing/service.py index fdf4e8a05..f57c70df1 100644 --- a/src/backend/base/langflow/services/tracing/service.py +++ b/src/backend/base/langflow/services/tracing/service.py @@ -53,6 +53,12 @@ def _get_opik_tracer(): return OpikTracer +def _get_traceloop_tracer(): + from langflow.services.tracing.traceloop import TraceloopTracer + + return TraceloopTracer + + trace_context_var: ContextVar[TraceContext | None] = ContextVar("trace_context", default=None) component_context_var: ContextVar[ComponentTraceContext | None] = ContextVar("component_trace_context", default=None) @@ -201,6 +207,19 @@ class TracingService(Service): session_id=trace_context.session_id, ) + def _initialize_traceloop_tracer(self, trace_context: TraceContext) -> None: + if self.deactivated: + return + traceloop_tracer = _get_traceloop_tracer() + trace_context.tracers["traceloop"] = traceloop_tracer( + trace_name=trace_context.run_name, + trace_type="chain", + project_name=trace_context.project_name, + trace_id=trace_context.run_id, + user_id=trace_context.user_id, + session_id=trace_context.session_id, + ) + async def start_tracers( self, run_id: UUID, @@ -227,6 +246,7 @@ class TracingService(Service): self._initialize_langfuse_tracer(trace_context) self._initialize_arize_phoenix_tracer(trace_context) self._initialize_opik_tracer(trace_context) + self._initialize_traceloop_tracer(trace_context) except Exception as e: # noqa: BLE001 logger.debug(f"Error initializing tracers: {e}") diff --git a/src/backend/base/langflow/services/tracing/traceloop.py b/src/backend/base/langflow/services/tracing/traceloop.py new file mode 100644 index 000000000..c047d56ee --- /dev/null +++ b/src/backend/base/langflow/services/tracing/traceloop.py @@ -0,0 +1,245 @@ +from __future__ import annotations + +import json +import math +import os +import types +from datetime import datetime, timezone +from typing import TYPE_CHECKING, Any +from urllib.parse import urlparse + +from loguru import logger +from opentelemetry import trace +from opentelemetry.trace import Span, use_span +from opentelemetry.trace.propagation.tracecontext import TraceContextTextMapPropagator +from traceloop.sdk import Traceloop +from traceloop.sdk.instruments import Instruments +from typing_extensions import override + +from langflow.services.tracing.base import BaseTracer + +if TYPE_CHECKING: + from collections.abc import Sequence + from uuid import UUID + + from langchain.callbacks.base import BaseCallbackHandler + from opentelemetry.propagators.textmap import CarrierT + from opentelemetry.trace import Span + + from langflow.graph.vertex.base import Vertex + from langflow.services.tracing.schema import Log + + +class TraceloopTracer(BaseTracer): + """Traceloop tracer for Langflow.""" + + def __init__( + self, + trace_name: str, + trace_type: str, + project_name: str, + trace_id: UUID, + user_id: str | None = None, + session_id: str | None = None, + ): + self.trace_id = trace_id + self.trace_name = trace_name + self.trace_type = trace_type + self.project_name = project_name + self.user_id = user_id + self.session_id = session_id + self.child_spans: dict[str, Span] = {} + + if not self._validate_configuration(): + self._ready = False + return + + api_key = os.getenv("TRACELOOP_API_KEY", "").strip() + try: + Traceloop.init( + block_instruments={Instruments.PYMYSQL}, + app_name=project_name, + disable_batch=True, + api_key=api_key, + api_endpoint=os.getenv("TRACELOOP_BASE_URL", "https://api.traceloop.com"), + ) + self._ready = True + self._tracer = trace.get_tracer("langflow") + self.propagator = TraceContextTextMapPropagator() + self.carrier: CarrierT = {} + + self.root_span = self._tracer.start_span( + name=trace_name, + start_time=self._get_current_timestamp(), + ) + + with use_span(self.root_span, end_on_exit=False): + self.propagator.inject(carrier=self.carrier) + + except Exception: # noqa: BLE001 + logger.opt(exception=True).debug("Error setting up Traceloop tracer") + self._ready = False + + @property + def ready(self) -> bool: + return self._ready + + def _validate_configuration(self) -> bool: + api_key = os.getenv("TRACELOOP_API_KEY", "").strip() + if not api_key: + logger.warning("TRACELOOP_API_KEY not set or empty.") + return False + + base_url = os.getenv("TRACELOOP_BASE_URL", "https://api.traceloop.com") + parsed = urlparse(base_url) + if not parsed.netloc: + logger.error(f"Invalid TRACELOOP_BASE_URL: {base_url}") + return False + + return True + + def _convert_to_traceloop_type(self, value): + """Recursively converts a value to a Traceloop compatible type.""" + from langchain.schema import BaseMessage, Document, HumanMessage, SystemMessage + + from langflow.schema.message import Message + + try: + if isinstance(value, dict): + value = {key: self._convert_to_traceloop_type(val) for key, val in value.items()} + + elif isinstance(value, list): + value = [self._convert_to_traceloop_type(v) for v in value] + + elif isinstance(value, Message): + value = value.text + + elif isinstance(value, (BaseMessage | HumanMessage | SystemMessage)): + value = str(value.content) if value.content is not None else "" + + elif isinstance(value, Document): + value = value.page_content + + elif isinstance(value, (types.GeneratorType | types.NoneType)): + value = str(value) + + elif isinstance(value, float) and not math.isfinite(value): + value = "NaN" + + except (TypeError, ValueError) as e: + logger.warning(f"Failed to convert value {value!r} to traceloop type: {e}") + return str(value) + else: + return value + + def _convert_to_traceloop_dict(self, io_dict: Any) -> dict[str, Any]: + """Ensure values are OTel-compatible. Dicts stay dicts, lists get JSON-serialized.""" + if isinstance(io_dict, dict): + return {str(k): self._convert_to_traceloop_type(v) for k, v in io_dict.items()} + if isinstance(io_dict, list): + return {"list": json.dumps([self._convert_to_traceloop_type(v) for v in io_dict], default=str)} + + return {"value": self._convert_to_traceloop_type(io_dict)} + + @override + def add_trace( + self, + trace_id: str, + trace_name: str, + trace_type: str, + inputs: dict[str, Any], + metadata: dict[str, Any] | None = None, + vertex: Vertex | None = None, + ) -> None: + if not self.ready: + return + + span_context = self.propagator.extract(carrier=self.carrier) + child_span = self._tracer.start_span( + name=trace_name, + context=span_context, + start_time=self._get_current_timestamp(), + ) + + attributes = { + "trace_id": trace_id, + "trace_name": trace_name, + "trace_type": trace_type, + "inputs": json.dumps(self._convert_to_traceloop_dict(inputs), default=str), + **self._convert_to_traceloop_dict(metadata or {}), + } + if vertex and vertex.id is not None: + attributes["vertex_id"] = vertex.id + + child_span.set_attributes(attributes) + + self.child_spans[trace_id] = child_span + + @override + def end_trace( + self, + trace_id: str, + trace_name: str, + outputs: dict[str, Any] | None = None, + error: Exception | None = None, + logs: Sequence[Log | dict] = (), + ) -> None: + if not self._ready or trace_id not in self.child_spans: + return + + child_span = self.child_spans.pop(trace_id) + + if outputs: + child_span.set_attribute("outputs", json.dumps(self._convert_to_traceloop_dict(outputs), default=str)) + if logs: + child_span.set_attribute("logs", json.dumps(self._convert_to_traceloop_dict(list(logs)), default=str)) + if error: + child_span.record_exception(error) + + child_span.end() + + @override + def end( + self, + inputs: dict[str, Any], + outputs: dict[str, Any], + error: Exception | None = None, + metadata: dict[str, Any] | None = None, + ) -> None: + if not self.ready: + return + + safe_outputs = self._convert_to_traceloop_dict(outputs) + safe_metadata = self._convert_to_traceloop_dict(metadata or {}) + + self.root_span.set_attributes( + { + "workflow_name": self.trace_name, + "workflow_id": str(self.trace_id), + "outputs": json.dumps(safe_outputs, default=str), + **safe_metadata, + } + ) + if error: + self.root_span.record_exception(error) + + self.root_span.end() + + @staticmethod + def _get_current_timestamp() -> int: + return int(datetime.now(timezone.utc).timestamp() * 1_000_000_000) + + @override + def get_langchain_callback(self) -> BaseCallbackHandler | None: + return None + + def close(self): + try: + provider = trace.get_tracer_provider() + if hasattr(provider, "force_flush"): + provider.force_flush(timeout_millis=3000) + except (ValueError, RuntimeError, OSError) as e: + logger.warning(f"Error flushing spans: {e}") + + def __del__(self): + self.close() diff --git a/src/backend/tests/unit/services/tracing/test_tracing_service.py b/src/backend/tests/unit/services/tracing/test_tracing_service.py index b3ae77f9d..5de976a71 100644 --- a/src/backend/tests/unit/services/tracing/test_tracing_service.py +++ b/src/backend/tests/unit/services/tracing/test_tracing_service.py @@ -139,6 +139,10 @@ def mock_tracers(): "langflow.services.tracing.service._get_opik_tracer", return_value=MockTracer, ), + patch( + "langflow.services.tracing.service._get_traceloop_tracer", + return_value=MockTracer, + ), ): yield @@ -169,6 +173,7 @@ async def test_start_end_tracers(tracing_service): assert "langwatch" in trace_context.tracers assert "langfuse" in trace_context.tracers assert "arize_phoenix" in trace_context.tracers + assert "traceloop" in trace_context.tracers await tracing_service.end_tracers(outputs) @@ -298,7 +303,8 @@ async def test_get_langchain_callbacks(tracing_service): assert tracer.get_langchain_callback_called # Verify returned callbacks list length - assert len(callbacks) == 5 # Five tracers + expected = len(trace_context_var.get().tracers) + assert len(callbacks) == expected # Cleanup await tracing_service.end_tracers({}) diff --git a/uv.lock b/uv.lock index 476bc94f8..421c57e63 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 2 requires-python = ">=3.10, <3.14" resolution-markers = [ "python_full_version >= '3.13' and sys_platform == 'darwin'", @@ -3880,6 +3880,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, ] +[[package]] +name = "inflection" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091, upload-time = "2020-08-22T08:16:29.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454, upload-time = "2020-08-22T08:16:27.816Z" }, +] + [[package]] name = "iniconfig" version = "2.1.0" @@ -4924,6 +4933,7 @@ dependencies = [ { name = "sqlalchemy", extra = ["aiosqlite"] }, { name = "sseclient-py" }, { name = "supabase" }, + { name = "traceloop-sdk" }, { name = "twelvelabs" }, { name = "types-cachetools" }, { name = "upstash-vector" }, @@ -5126,6 +5136,7 @@ requires-dist = [ { name = "sqlalchemy", extras = ["postgresql-psycopg2binary"], marker = "extra == 'postgresql'", specifier = ">=2.0.38,<3.0.0" }, { name = "sseclient-py", specifier = "==1.8.0" }, { name = "supabase", specifier = "==2.6.0" }, + { name = "traceloop-sdk", specifier = ">=0.43.1" }, { name = "twelvelabs", specifier = ">=0.4.7" }, { name = "types-cachetools", specifier = "==5.5.0.20240820" }, { name = "upstash-vector", specifier = "==0.6.0" }, @@ -7217,6 +7228,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/60/7d/8ddfda1506c2fcca137924d5688ccabffa1aed9ec0955b7d0772de02cec3/opentelemetry_instrumentation-0.55b1-py3-none-any.whl", hash = "sha256:cbb1496b42bc394e01bc63701b10e69094e8564e281de063e4328d122cc7a97e", size = 31108, upload-time = "2025-06-10T08:57:14.355Z" }, ] +[[package]] +name = "opentelemetry-instrumentation-alephalpha" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/7d/1679402d0842381caba9258de72b05d823db224ada1d90e4c0182475df66/opentelemetry_instrumentation_alephalpha-0.45.6.tar.gz", hash = "sha256:5a5725368c714591b83b978a0bf8f9da437e5e5d6edcb9781b6ceb71c464a1ab", size = 5310, upload-time = "2025-08-18T08:03:11.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/73/5530510c79a1fb5ed2d7837e1f20a429f8c78602996a6248fb56b40b9288/opentelemetry_instrumentation_alephalpha-0.45.6-py3-none-any.whl", hash = "sha256:a93a8ef3240db52b53823846c99cde70d1c862630f0f48c72bbf42817846c844", size = 7996, upload-time = "2025-08-18T08:02:36.709Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-anthropic" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/56/40/7cf9d600f4a72984c092614c58f53d5c893ad53f69ed6339ba3672ab8dff/opentelemetry_instrumentation_anthropic-0.45.6.tar.gz", hash = "sha256:dce75f4447fa2321e7cb41f193e4ff211bc2007e49abbe748c4be2df291ff493", size = 13947, upload-time = "2025-08-18T08:03:12.494Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/56/01a9e5093588c945caeca89b3b3445ff4500fd68beebcb86a6091ca01bbe/opentelemetry_instrumentation_anthropic-0.45.6-py3-none-any.whl", hash = "sha256:fec68faf76e4ba0a836641e4b7a3f7bf13483e69c341699183577c29a27cbdb7", size = 17368, upload-time = "2025-08-18T08:02:38.175Z" }, +] + [[package]] name = "opentelemetry-instrumentation-asgi" version = "0.55b1" @@ -7233,6 +7274,68 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/45/b5f78f0456f8e2e2ec152d7b6496197f5661c7ca49f610fe19c63b350aa4/opentelemetry_instrumentation_asgi-0.55b1-py3-none-any.whl", hash = "sha256:186620f7d0a71c8c817c5cbe91c80faa8f9c50967d458b8131c5694e21eb8583", size = 16402, upload-time = "2025-06-10T08:57:22.034Z" }, ] +[[package]] +name = "opentelemetry-instrumentation-bedrock" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anthropic" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, + { name = "tokenizers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/19/52001b2ecea807d1e10b3b6d2f97fdf18c4feee216365fdb0032936deb5b/opentelemetry_instrumentation_bedrock-0.45.6.tar.gz", hash = "sha256:73b6711eacd9dc5db85e09b3b38c552c0a0cc0fdd16029777d81523cf0db4c9a", size = 14706, upload-time = "2025-08-18T08:03:13.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/d2/608459005d5bc1a163c3f3e8789b7c71fbe1991696b64f0eb829da7ebd61/opentelemetry_instrumentation_bedrock-0.45.6-py3-none-any.whl", hash = "sha256:9397ffd7972a75313fdb5d3c80d77f2dd682288e9113a07c58f8b43e76e76370", size = 18352, upload-time = "2025-08-18T08:02:39.639Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-chromadb" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/36/5a/ed01c5991a5d4b476b6a7f423745605211f0822c26748c44ef4d53e318a7/opentelemetry_instrumentation_chromadb-0.45.6.tar.gz", hash = "sha256:bcd1fea11cd3600099ef4409b6280e523fe800fc697a827e4101632737aee85c", size = 4389, upload-time = "2025-08-18T08:03:14.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/81/493e5a5fe08ddaef96ba9aabb76078b4aa27f6c2e5b696d1e369870e3d93/opentelemetry_instrumentation_chromadb-0.45.6-py3-none-any.whl", hash = "sha256:85ba04f774e99baf5520ac96aa27a220dc1b3b405bf29b60e241f0dda3406cbc", size = 6301, upload-time = "2025-08-18T08:02:41.187Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-cohere" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/8e/7d1149f0efee43f3e452082e49b3e963481d12c2574e73af9c2d77ec4500/opentelemetry_instrumentation_cohere-0.45.6.tar.gz", hash = "sha256:14c718aca13695636d68565e42168d5bf54b5bd86703b411ec44ca6fc435a81a", size = 5985, upload-time = "2025-08-18T08:03:14.844Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/48/f9/75c23bd99d2b09399de74bc03b647c1f14cdc874298071b5d31a0ee37853/opentelemetry_instrumentation_cohere-0.45.6-py3-none-any.whl", hash = "sha256:cb8c29690225077f7ea60482c62f5e71b81c6fb14f7f292bbca818075c0f2d58", size = 8784, upload-time = "2025-08-18T08:02:42.595Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-crewai" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/85/06/fcf925feb70cc994b8f6d63b9f4950050edbff21f2d6bb60b8c8fbc4d3d7/opentelemetry_instrumentation_crewai-0.45.6.tar.gz", hash = "sha256:467502fb8c179a87c213d1e707ffc93d6591651209b4e0be8a41a8ed3f907795", size = 4629, upload-time = "2025-08-18T08:03:15.542Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d7/1e/984145a4f72762975a00940db239253ebffb4d97153de37463bc7996d67a/opentelemetry_instrumentation_crewai-0.45.6-py3-none-any.whl", hash = "sha256:658a03f376f81f269e2ebb4c77813822a0bf9bda9ba943bb4bce3ea558dc1828", size = 6198, upload-time = "2025-08-18T08:02:44.102Z" }, +] + [[package]] name = "opentelemetry-instrumentation-fastapi" version = "0.55b1" @@ -7249,6 +7352,427 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/6e/d608a9336ede3d15869c70ebdd4ec670f774641104b0873bb973bce9d822/opentelemetry_instrumentation_fastapi-0.55b1-py3-none-any.whl", hash = "sha256:af4c09aebb0bd6b4a0881483b175e76547d2bc96329c94abfb794bf44f29f6bb", size = 12713, upload-time = "2025-06-10T08:57:39.712Z" }, ] +[[package]] +name = "opentelemetry-instrumentation-google-generativeai" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/3b/a0174da2221fbfcf7243dff7dd6b6673e2ecf480caf18d7953767eb2e6ea/opentelemetry_instrumentation_google_generativeai-0.45.6.tar.gz", hash = "sha256:53590a018d80c089ca044142d251b2886a8c1018cfcef6a9e33ab11b0d2bf24c", size = 7018, upload-time = "2025-08-18T08:03:16.237Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/0d/621dcfcdd46eddc3acbf1a794bb9e9a2a32b8efc14f997a497a8e932be90/opentelemetry_instrumentation_google_generativeai-0.45.6-py3-none-any.whl", hash = "sha256:8c80c4f48a2a2977c41c2c0b92da7c31eead1a7e0aac7f9f60c97424c75320af", size = 9680, upload-time = "2025-08-18T08:02:45.441Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-groq" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/2d/ee498d07720ceba21750f12768276bae89ae0fca33d1c911cb9cd1d57f1c/opentelemetry_instrumentation_groq-0.45.6.tar.gz", hash = "sha256:0b6026605c7a808a72ed90fced7b8b910ee715c29ebc7bc0385b1346978fb76e", size = 8349, upload-time = "2025-08-18T08:03:16.941Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/5d/e7b68a00f50b93d8aede7e6417aadf32ce603fbd587c461bda5057bce926/opentelemetry_instrumentation_groq-0.45.6-py3-none-any.whl", hash = "sha256:e3f9af3a5b99783cf101a778d03c15700160009b19794ade2af33ae3ba7ffda2", size = 10907, upload-time = "2025-08-18T08:02:46.816Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-haystack" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/6c/06168f53dd09ccc4b68b518a5db268d62c2a102c48e4ad35f97d24ddc7ac/opentelemetry_instrumentation_haystack-0.45.6.tar.gz", hash = "sha256:bdd5fe694bfe901200a8f0de5d0d66e3b8a0110b19cb6bff7b00d11b680a50d8", size = 4454, upload-time = "2025-08-18T08:03:17.64Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/31/b192b2d258796b89ca6a9d58bdd88f2ef3ae9b81e8be89f039831e5b0f2f/opentelemetry_instrumentation_haystack-0.45.6-py3-none-any.whl", hash = "sha256:6eb7e44bd4accc3cd408a3f4b016f68d6bdccf04dddb182250070aa62af5ceb0", size = 7489, upload-time = "2025-08-18T08:02:47.782Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-lancedb" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/f8/a77da0ec72dd45886282ea5eb3059b3ee5377d4ac31c6b68b73d2d056b26/opentelemetry_instrumentation_lancedb-0.45.6.tar.gz", hash = "sha256:36a89a7838b6ae55eef011a54cefa70805ef520d8420d1d5b11e1abb4991d6ff", size = 2990, upload-time = "2025-08-18T08:03:18.619Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/b2/20126bfca73e6c87a339bb8f524f4d8571f419fffdf59a0a3c301ddf01f6/opentelemetry_instrumentation_lancedb-0.45.6-py3-none-any.whl", hash = "sha256:4f4055145013fa625ef05ea8a9de84354dbc6c4a4b5c9af5ddb21164838d20d5", size = 4774, upload-time = "2025-08-18T08:02:49.056Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-langchain" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/b7/0caf0d84b2b418d87f5d895548ef3db65253796e20acbef1370aa32f9551/opentelemetry_instrumentation_langchain-0.45.6.tar.gz", hash = "sha256:16a51ad65e299c9ae56904fcbc49fee7ca0fb06ae5f4992cb57245e183375b44", size = 14495, upload-time = "2025-08-18T08:03:19.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/a1/4ad3bbd22f2ed1fe0d717d13f369f61d0e73fda8e0246060dd54a2b119f2/opentelemetry_instrumentation_langchain-0.45.6-py3-none-any.whl", hash = "sha256:af69d956d04c9b0552d31aee33b897563fb551fc709104f33604ccc7a9dc1014", size = 18080, upload-time = "2025-08-18T08:02:50.43Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-llamaindex" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "inflection" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/eb/fa6b5d423f3361c6e59f2dc7efb61759123f43095633ff02518571be1161/opentelemetry_instrumentation_llamaindex-0.45.6.tar.gz", hash = "sha256:6d97610671742b21defb1420a32ac57eb415ab3cfaa91970116c636508564dd2", size = 12129, upload-time = "2025-08-18T08:03:20.117Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/0e/3320ca46be8a19a09726abf0fb95f84fad7d01a31cd79d4ab44684b43894/opentelemetry_instrumentation_llamaindex-0.45.6-py3-none-any.whl", hash = "sha256:0765d77525a55ae43cba5bea8308f15dca0dc559928837c172368f264993ed4e", size = 21012, upload-time = "2025-08-18T08:02:51.86Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-logging" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/dc/ee6a432d728c02049a753eb78a70b22cecdfdedc01846eaf547f0e52d902/opentelemetry_instrumentation_logging-0.55b1.tar.gz", hash = "sha256:8ab1e68a2496d36ed2388ec3178495d9fa31f805b93c5845f83f1fab718f28d0", size = 9969, upload-time = "2025-06-10T08:58:33.576Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/5f/616a086e8f40059e1395bff52b201c407316a0312815e46d8743ac6be787/opentelemetry_instrumentation_logging-0.55b1-py3-none-any.whl", hash = "sha256:1b34b7bfcfa6a22f58f2000f041f5c169c5074738cf23bd33599f60ae1ecf1c5", size = 12576, upload-time = "2025-06-10T08:57:45.786Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-marqo" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/6a/53af8735dbbd9e64b19bd94a2f65e3466bf99b82f9265e12c0d9b10be099/opentelemetry_instrumentation_marqo-0.45.6.tar.gz", hash = "sha256:8ac4ab77c700c55cebea377f89910a2c20ddc5840833735ca45ecf5148b0e88e", size = 3265, upload-time = "2025-08-18T08:03:20.88Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/5e/aeef82bd3ac67c8108f648af88453f270cb3b55afea790c881b80f9d9c9d/opentelemetry_instrumentation_marqo-0.45.6-py3-none-any.whl", hash = "sha256:508a209c8fc7651344dc020ebe514a7fe5d5bf153730f62b76a3942c392f4ddd", size = 5074, upload-time = "2025-08-18T08:02:52.943Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-mcp" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/0c/e735d335aeceee624623779649ab72bb1344d294703bdd56baecf0e4803b/opentelemetry_instrumentation_mcp-0.45.6.tar.gz", hash = "sha256:fe27b254fbd99c386120d715df83a90ab66e568ffa0d8896d58e550634be9088", size = 5065, upload-time = "2025-08-18T08:03:21.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/1e/f1396fc02788bfd9aa890fe6e36984e5f59a0e06d58bb0562e2353611e6d/opentelemetry_instrumentation_mcp-0.45.6-py3-none-any.whl", hash = "sha256:4567208b472bbb961876afaca9e95b374afa99b920cdffc382beec09cc23b355", size = 6258, upload-time = "2025-08-18T08:02:53.896Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-milvus" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b0/9a/dd82434e18734199985578432a34c0735e3a1a62519bc68e0256cf61cbd4/opentelemetry_instrumentation_milvus-0.45.6.tar.gz", hash = "sha256:7688af8c66e28c416fe3c33f745cef492298bcf9c4308f220977c7a6e3ac1a6a", size = 5204, upload-time = "2025-08-18T08:03:22.307Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ac/96/e9afa621ff06d842fb17c456ec3b956bf611f503b68de28253c6d8506454/opentelemetry_instrumentation_milvus-0.45.6-py3-none-any.whl", hash = "sha256:5840c8e3b3a9b4b17f98b2037fee326ebeaaaacadfdc67a0d9c5ea03dd58c0c5", size = 7092, upload-time = "2025-08-18T08:02:55.166Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-mistralai" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/eb/0f260bb2858721d07e369539b68dfb81600c3bc69b8c8d4c8930746aba98/opentelemetry_instrumentation_mistralai-0.45.6.tar.gz", hash = "sha256:b21773735a33924646a846f06a68930cc532e6c38e31dd51351c84178694bbb5", size = 6719, upload-time = "2025-08-18T08:03:23.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/40/dce31f9644e18af8f321af0e027ab2b9b07f7f28f6ecdb09a79a8edc4b13/opentelemetry_instrumentation_mistralai-0.45.6-py3-none-any.whl", hash = "sha256:5c85edd9dc9adfe2396ee369b6942a632f8e0200f2d661637eac401c3fb2df87", size = 8800, upload-time = "2025-08-18T08:02:56.101Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-ollama" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/28/9cc6afbc83c588755eaa0ebe2f539600546dc2723ed8293751c3ac2584c1/opentelemetry_instrumentation_ollama-0.45.6.tar.gz", hash = "sha256:79b1623f4fb27ebe29faeea466b15cf3fee3d79c91fc4472424dfde79dfa95ad", size = 8451, upload-time = "2025-08-18T08:03:24.752Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/2a/10620863e44c4fe7c92a9bc584c47e84fd2849f1ec82c041adc30df0d01c/opentelemetry_instrumentation_ollama-0.45.6-py3-none-any.whl", hash = "sha256:0fc87ff7ba5cf323d69724e82b3428005dec6f499cc7520ad3edb36635b31ed1", size = 10970, upload-time = "2025-08-18T08:02:57.12Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-openai" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/51/9b446fbedde1fe17ea3ef5bdea2b3bcfc676663cf30c00d5bc41cfe6cef6/opentelemetry_instrumentation_openai-0.45.6.tar.gz", hash = "sha256:1781a43a85ebec186a97475de64ad1415e46e93e285b425748bc0e516a1ec6e1", size = 24581, upload-time = "2025-08-18T08:03:25.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/9b/dc1f7b32260a396b76620244805d5960242635e13b1c02b3ed38ce0ea80c/opentelemetry_instrumentation_openai-0.45.6-py3-none-any.whl", hash = "sha256:1aac8a53fa4565f2ea048048e43c7472e1426fb71ab67281fd36f9de0e63b6ef", size = 34373, upload-time = "2025-08-18T08:02:58.345Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-openai-agents" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ce/16/62a7515ecdcbb05905557001e10d2ba6ff0fa6522f49f4afc4045faa415a/opentelemetry_instrumentation_openai_agents-0.45.6.tar.gz", hash = "sha256:d9db02ba900a992a3f904c49a081b3c8a08ea0114c049740784665ad7d2b0f13", size = 7770, upload-time = "2025-08-18T08:03:26.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/af/c87286fd9ddf25d05c6eca3f52add1b95da5e5f27040a5595240849c1e24/opentelemetry_instrumentation_openai_agents-0.45.6-py3-none-any.whl", hash = "sha256:c0899c87f05827c2a63a9bc15f66c8edcdacac129914da0e08695b213074a9d1", size = 8908, upload-time = "2025-08-18T08:02:59.759Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-pinecone" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/88/fdf8cdc937076e4fce8e1ba52584c5a14438fecadfea9a203f65a750c8af/opentelemetry_instrumentation_pinecone-0.45.6.tar.gz", hash = "sha256:b08da007b6430ee5e444b5ab09af347b55cf91455dfa6664029e556752de3c38", size = 4487, upload-time = "2025-08-18T08:03:27.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/6a/ecf8896f10cc9476cac00c266c3d26904647cabef550a492764db37d31da/opentelemetry_instrumentation_pinecone-0.45.6-py3-none-any.whl", hash = "sha256:1eb86bfc9c45565a605afe11de3a77c0acdb59b33f8bf6721b4ad93983568f75", size = 6361, upload-time = "2025-08-18T08:03:01.135Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-qdrant" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/b1/ca01ec29b7f39e9097e3fa99343913cbd772444c5e76a2d240a7a9ceb26a/opentelemetry_instrumentation_qdrant-0.45.6.tar.gz", hash = "sha256:fc6b30a01e5165e8899481c075b893c6ccce2b62e452c6845ec56be2c0909e10", size = 3811, upload-time = "2025-08-18T08:03:28.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/44/ea50c648afe6c86758dc7757b9876c315984a73855a51b5e91f1edc73b91/opentelemetry_instrumentation_qdrant-0.45.6-py3-none-any.whl", hash = "sha256:253e3bf0ed35f7a7146244c20c0251078fe5cc4d144c7a25d337a7d6378f825a", size = 6299, upload-time = "2025-08-18T08:03:02.129Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-redis" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/bc/7aca59706325e2496274116095bd3a122b64ba83b2a5e126f0684070e11a/opentelemetry_instrumentation_redis-0.55b1.tar.gz", hash = "sha256:bce9b47907e08ede4961b845030fbffbf8e6f515e1b48b4697c5f36704a97743", size = 13972, upload-time = "2025-06-10T08:58:41.785Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/2b/04632ade87ba60fcaba3008c4634badddd231a79de2a3fa6b8113237672d/opentelemetry_instrumentation_redis-0.55b1-py3-none-any.whl", hash = "sha256:8f40d742e1666e0e971f2385b47ddf6f55da2fe6bf77d2ff5f8f3b27cd5746b6", size = 14926, upload-time = "2025-06-10T08:57:56.084Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-replicate" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7e/91/455424c418e7d53e0a6a21bab7dbbc9d00c9ba3238ffa316af3df0a01423/opentelemetry_instrumentation_replicate-0.45.6.tar.gz", hash = "sha256:5bc857e5adbc6bb6cd1b7d02429de37e00113c8bfa72569c25f01092b456af5a", size = 5340, upload-time = "2025-08-18T08:03:29.344Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/1f/ab874b5932196accd4762732bfdfcd5922891d4faf0e2d6d5fc0ba50b214/opentelemetry_instrumentation_replicate-0.45.6-py3-none-any.whl", hash = "sha256:020c805ca86f2d6b8af54edb2fdde0eb5aecdc12f9d0aa5f6bcd8ef3078dd381", size = 8103, upload-time = "2025-08-18T08:03:03.169Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-requests" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-util-http" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/0c/8300ceffd0a41e69590f20ff4854f5c0b2ed5e9453c21c1d710746377cd2/opentelemetry_instrumentation_requests-0.55b1.tar.gz", hash = "sha256:3a04ae7bc90af08acef074b369275cf77c60533b319fa91cad76a380fd035c83", size = 14778, upload-time = "2025-06-10T08:58:42.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/31/9643d13bb78e07038c96e264a9e75cde93ecde50ff2b0cac7597613074d7/opentelemetry_instrumentation_requests-0.55b1-py3-none-any.whl", hash = "sha256:c9ba0a67850b49aa965e760e87e4b68e52530e5373a0b3c15d290a8997136619", size = 12973, upload-time = "2025-06-10T08:57:58.132Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-sagemaker" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/f1/3dcd0e52883b5da88f0a34cacc00ac2ea5918adafd0d25b96fd22146a331/opentelemetry_instrumentation_sagemaker-0.45.6.tar.gz", hash = "sha256:b74553513e51976e90c044c1ab2f1266bae07d69fcded7949f30a3fb410145cf", size = 6851, upload-time = "2025-08-18T08:03:30.037Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/e6/77ccbf2f59128c576bd9f7a9fad077246f85b99f235ccc40ce74b1d2b20b/opentelemetry_instrumentation_sagemaker-0.45.6-py3-none-any.whl", hash = "sha256:1268132665164dbb78fa3ac48fc9e18b23f889668a6d1e75395dd4ddb19db2b6", size = 9761, upload-time = "2025-08-18T08:03:04.52Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-sqlalchemy" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "packaging" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/94/0d1b210fb534fb1dc0f0a0818592c6b0f969318a652ce4fdc9d77d2ac1e8/opentelemetry_instrumentation_sqlalchemy-0.55b1.tar.gz", hash = "sha256:3a25cfb75de9bb14d26ab274b90d5613867c976e93cde0c5fb673cb731006532", size = 14959, upload-time = "2025-06-10T08:58:43.765Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/5d/8ac00e8f9445783b03ffae769c7527e1b81a68f8b18914926042713f48b4/opentelemetry_instrumentation_sqlalchemy-0.55b1-py3-none-any.whl", hash = "sha256:d6b3cac2cc3301083608d3c0e2b3979f62c6ab327a12f5a7c779f9ab05eb6633", size = 14203, upload-time = "2025-06-10T08:57:59.004Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-threading" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e6/a2/470bbc9b7060372d6b183d999080c12a63fb459fc77b9be0ca15694ecabe/opentelemetry_instrumentation_threading-0.55b1.tar.gz", hash = "sha256:4ed68502e7ed017bfc10b1f9e508cc5ccaea0e46ac1010f7f2541ab9c6eacd92", size = 8767, upload-time = "2025-06-10T08:58:46.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/c9/183ad41a7ba0374030b3eab335ec6f3eff6acca057aba2b393183e18639e/opentelemetry_instrumentation_threading-0.55b1-py3-none-any.whl", hash = "sha256:f865542b32b219c8fd01deb03b8c3c9ba2eb3f0501ae303338403fd2242962c7", size = 9313, upload-time = "2025-06-10T08:58:02.884Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-together" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/4e/b08c0f3e7a4d975cfdbc67b64afcd630e6a8bcfd671ee34a6a7967f6d651/opentelemetry_instrumentation_together-0.45.6.tar.gz", hash = "sha256:7e1929cf021ae215e96da96cd094e885233a1843287fc437a2a9587c67e7c974", size = 5677, upload-time = "2025-08-18T08:03:30.762Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/95/88e075699d1be54eade338c252ab0f6cf630b93dabca4a5e3fafb06c6174/opentelemetry_instrumentation_together-0.45.6-py3-none-any.whl", hash = "sha256:576360f02267a73b4888d6e2e93a04ae40be07788c9660c9bc3586435a99897a", size = 8640, upload-time = "2025-08-18T08:03:05.889Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-transformers" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/83/fa45c31dcc3cbd7274a0e1a6ed1fb286fad879cdb8876cc2516793459929/opentelemetry_instrumentation_transformers-0.45.6.tar.gz", hash = "sha256:c8eee05c27334a83747bd20db2d369720ca0a2581417176ac0ce63a2d89b0ae9", size = 5862, upload-time = "2025-08-18T08:03:31.519Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/5b/c40b099b986ede264c39cf97ad5a970022228d1261c7eb31f2a857625e67/opentelemetry_instrumentation_transformers-0.45.6-py3-none-any.whl", hash = "sha256:277015f41cc301868f1a9d2bd5194487d65a0a00a33abb2a1660c38f57ef0e06", size = 8217, upload-time = "2025-08-18T08:03:06.837Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-urllib3" +version = "0.55b1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-util-http" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/65/61f9c6e5692b0468a40419c35ca6705a685a044378f9d129d35a7ce5f3de/opentelemetry_instrumentation_urllib3-0.55b1.tar.gz", hash = "sha256:2999eb2652c7461ea308ff1b3a61726a695e9df1cc2635b2627017b3a42ee214", size = 15789, upload-time = "2025-06-10T08:58:50.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/0447aad6210f9a643db21ca130a5173c7ccd911ea8cbd6d69e5ff535b1fd/opentelemetry_instrumentation_urllib3-0.55b1-py3-none-any.whl", hash = "sha256:41c4a3a01194a713cd82c2067705f6ebc92652b9de56ac741594ce28afa01e09", size = 13188, upload-time = "2025-06-10T08:58:06.833Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-vertexai" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/96/150acade713b26972bc5dfa51d2fc865c7930ae165be7fc1e20fcdc2210c/opentelemetry_instrumentation_vertexai-0.45.6.tar.gz", hash = "sha256:e8a55d05f90866d802adf5940da570d8c7eb25b47d1c85682f7695732b3e619c", size = 6573, upload-time = "2025-08-18T08:03:32.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/de/1944a0dd2c9ee4676c9f4379fce491e619e5dba50f4688070305bb5c25f8/opentelemetry_instrumentation_vertexai-0.45.6-py3-none-any.whl", hash = "sha256:6920cc9a4d17110dfdecc6fec639e9638e57b232c2b8176458535d444492059e", size = 8905, upload-time = "2025-08-18T08:03:08.221Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-watsonx" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ea/19/742547f942dafc3450c3dee071da5330c074e65236589aae88098e7f84e6/opentelemetry_instrumentation_watsonx-0.45.6.tar.gz", hash = "sha256:00570f9cc570261cb69f4f2a5bb6af4413bdf05ee9bff498ef00a009df39d435", size = 8296, upload-time = "2025-08-18T08:03:33.031Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/0a/2f0839cdf64b7d6a1f896bf85d03ea4321e2350fc71c6f5e463d149a8e87/opentelemetry_instrumentation_watsonx-0.45.6-py3-none-any.whl", hash = "sha256:12b33d2c47c55b0fb174d4838ead88338bb1d165107ed7d1a4c514f7add459e3", size = 10143, upload-time = "2025-08-18T08:03:09.461Z" }, +] + +[[package]] +name = "opentelemetry-instrumentation-weaviate" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "opentelemetry-api" }, + { name = "opentelemetry-instrumentation" }, + { name = "opentelemetry-semantic-conventions" }, + { name = "opentelemetry-semantic-conventions-ai" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/1a/5a139804d9dc3e27e9f11aa916386b8c8727b1da68c160f6ae977b0afbcf/opentelemetry_instrumentation_weaviate-0.45.6.tar.gz", hash = "sha256:e5967c3c6d9d45a8c08c812bd8170fbb3d754dce1cb4b52893cafb5ebe0d3870", size = 4433, upload-time = "2025-08-18T08:03:33.759Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/91/3e1d8dd444db85364df1efd1a5283470810961b57914fab03cc162cb0658/opentelemetry_instrumentation_weaviate-0.45.6-py3-none-any.whl", hash = "sha256:300bebf8195da5b1398afc623704310f3a31ca359addd150d551dedf3cd4c931", size = 6407, upload-time = "2025-08-18T08:03:10.457Z" }, +] + [[package]] name = "opentelemetry-proto" version = "1.34.1" @@ -7288,6 +7812,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/89/267b0af1b1d0ba828f0e60642b6a5116ac1fd917cde7fc02821627029bd1/opentelemetry_semantic_conventions-0.55b1-py3-none-any.whl", hash = "sha256:5da81dfdf7d52e3d37f8fe88d5e771e191de924cfff5f550ab0b8f7b2409baed", size = 196223, upload-time = "2025-06-10T08:55:17.638Z" }, ] +[[package]] +name = "opentelemetry-semantic-conventions-ai" +version = "0.4.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/e6/40b59eda51ac47009fb47afcdf37c6938594a0bd7f3b9fadcbc6058248e3/opentelemetry_semantic_conventions_ai-0.4.13.tar.gz", hash = "sha256:94efa9fb4ffac18c45f54a3a338ffeb7eedb7e1bb4d147786e77202e159f0036", size = 5368, upload-time = "2025-08-22T10:14:17.387Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/b5/cf25da2218910f0d6cdf7f876a06bed118c4969eacaf60a887cbaef44f44/opentelemetry_semantic_conventions_ai-0.4.13-py3-none-any.whl", hash = "sha256:883a30a6bb5deaec0d646912b5f9f6dcbb9f6f72557b73d0f2560bf25d13e2d5", size = 6080, upload-time = "2025-08-22T10:14:16.477Z" }, +] + [[package]] name = "opentelemetry-util-http" version = "0.55b1" @@ -10731,6 +11264,63 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" }, ] +[[package]] +name = "traceloop-sdk" +version = "0.45.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "colorama" }, + { name = "deprecated" }, + { name = "jinja2" }, + { name = "opentelemetry-api" }, + { name = "opentelemetry-exporter-otlp-proto-grpc" }, + { name = "opentelemetry-exporter-otlp-proto-http" }, + { name = "opentelemetry-instrumentation-alephalpha" }, + { name = "opentelemetry-instrumentation-anthropic" }, + { name = "opentelemetry-instrumentation-bedrock" }, + { name = "opentelemetry-instrumentation-chromadb" }, + { name = "opentelemetry-instrumentation-cohere" }, + { name = "opentelemetry-instrumentation-crewai" }, + { name = "opentelemetry-instrumentation-google-generativeai" }, + { name = "opentelemetry-instrumentation-groq" }, + { name = "opentelemetry-instrumentation-haystack" }, + { name = "opentelemetry-instrumentation-lancedb" }, + { name = "opentelemetry-instrumentation-langchain" }, + { name = "opentelemetry-instrumentation-llamaindex" }, + { name = "opentelemetry-instrumentation-logging" }, + { name = "opentelemetry-instrumentation-marqo" }, + { name = "opentelemetry-instrumentation-mcp" }, + { name = "opentelemetry-instrumentation-milvus" }, + { name = "opentelemetry-instrumentation-mistralai" }, + { name = "opentelemetry-instrumentation-ollama" }, + { name = "opentelemetry-instrumentation-openai" }, + { name = "opentelemetry-instrumentation-openai-agents" }, + { name = "opentelemetry-instrumentation-pinecone" }, + { name = "opentelemetry-instrumentation-qdrant" }, + { name = "opentelemetry-instrumentation-redis" }, + { name = "opentelemetry-instrumentation-replicate" }, + { name = "opentelemetry-instrumentation-requests" }, + { name = "opentelemetry-instrumentation-sagemaker" }, + { name = "opentelemetry-instrumentation-sqlalchemy" }, + { name = "opentelemetry-instrumentation-threading" }, + { name = "opentelemetry-instrumentation-together" }, + { name = "opentelemetry-instrumentation-transformers" }, + { name = "opentelemetry-instrumentation-urllib3" }, + { name = "opentelemetry-instrumentation-vertexai" }, + { name = "opentelemetry-instrumentation-watsonx" }, + { name = "opentelemetry-instrumentation-weaviate" }, + { name = "opentelemetry-sdk" }, + { name = "opentelemetry-semantic-conventions-ai" }, + { name = "posthog" }, + { name = "pydantic" }, + { name = "tenacity" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/ad/a14fcdbb3f20813a25d495e5910a7618eea47015682c05ac24c17fcff6b4/traceloop_sdk-0.45.6.tar.gz", hash = "sha256:e7cdce57f413d0905f43ec5bab819264a3d927dd2974adad8d2f6786fa4af2e6", size = 27765, upload-time = "2025-08-18T08:04:40.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/72/e5/32a0ae6d26abc61e23da64d11113068d91bb95b40e75c9bb7f87c95d5581/traceloop_sdk-0.45.6-py3-none-any.whl", hash = "sha256:e7cd2e15915e9955d53276f926c78e0b5ad2f931221b3ed3af655e08ccc18d0e", size = 39774, upload-time = "2025-08-18T08:04:39.085Z" }, +] + [[package]] name = "traitlets" version = "5.14.3"