langtrace-python-sdk 2.3.0__py3-none-any.whl → 2.3.1__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.
@@ -18,12 +18,12 @@ class PoetryCrew:
18
18
  tasks = PoetryTasks()
19
19
 
20
20
  poetry_agent = agents.create_poet_agent()
21
- poetry_agent_2 = agents.poet_agent_2()
22
- poetry_agent_3 = agents.poet_agent_3()
21
+ # poetry_agent_2 = agents.poet_agent_2()
22
+ # poetry_agent_3 = agents.poet_agent_3()
23
23
 
24
24
  create_poem = tasks.create_poem(poetry_agent, self.topic)
25
- create_poem_2 = tasks.create_poem(poetry_agent_2, self.topic)
26
- create_poem_3 = tasks.create_poem(poetry_agent_3, self.topic)
25
+ # create_poem_2 = tasks.create_poem(poetry_agent_2, self.topic)
26
+ # create_poem_3 = tasks.create_poem(poetry_agent_3, self.topic)
27
27
 
28
28
  crew = Crew(agents=[poetry_agent], tasks=[create_poem], verbose=True, memory=True)
29
29
  res = crew.kickoff()
@@ -19,7 +19,7 @@ from opentelemetry.trace import get_tracer
19
19
  from wrapt import wrap_function_wrapper as _W
20
20
  from typing import Collection
21
21
  from importlib_metadata import version as v
22
- from .patch import patch_crew
22
+ from .patch import patch_crew, patch_memory
23
23
 
24
24
 
25
25
  class CrewAIInstrumentation(BaseInstrumentor):
@@ -49,7 +49,23 @@ class CrewAIInstrumentation(BaseInstrumentor):
49
49
  "Task.execute_sync",
50
50
  patch_crew("Task.execute", version, tracer),
51
51
  )
52
- except Exception as e:
52
+ _W(
53
+ "crewai.memory.storage.rag_storage",
54
+ "RAGStorage.save",
55
+ patch_memory("RAGStorage.save", version, tracer),
56
+ )
57
+ _W(
58
+ "crewai.memory.storage.rag_storage",
59
+ "RAGStorage.search",
60
+ patch_memory("RAGStorage.search", version, tracer),
61
+ )
62
+ _W(
63
+ "crewai.memory.storage.rag_storage",
64
+ "RAGStorage.reset",
65
+ patch_memory("RAGStorage.reset", version, tracer),
66
+ )
67
+ # pylint: disable=broad-except
68
+ except Exception:
53
69
  pass
54
70
 
55
71
  def _uninstrument(self, **kwargs):
@@ -11,82 +11,56 @@ from opentelemetry import baggage
11
11
  from langtrace.trace_attributes import FrameworkSpanAttributes
12
12
  from opentelemetry.trace import SpanKind, Span, Tracer
13
13
  from opentelemetry.trace.status import Status, StatusCode
14
+ from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs
14
15
 
15
16
 
16
- crew_properties = {
17
- "tasks": "object",
18
- "agents": "object",
19
- "cache": "bool",
20
- "process": "object",
21
- "verbose": "bool",
22
- "memory": "bool",
23
- "embedder": "json",
24
- "full_output": "bool",
25
- "manager_llm": "object",
26
- "manager_agent": "object",
27
- "manager_callbacks": "object",
28
- "function_calling_llm": "object",
29
- "config": "json",
30
- "id": "object",
31
- "max_rpm": "int",
32
- "share_crew": "bool",
33
- "step_callback": "object",
34
- "task_callback": "object",
35
- "prompt_file": "str",
36
- "output_log_file": "bool",
37
- }
38
-
39
- task_properties = {
40
- "id": "object",
41
- "used_tools": "int",
42
- "tools_errors": "int",
43
- "delegations": "int",
44
- "i18n": "object",
45
- "thread": "object",
46
- "prompt_context": "object",
47
- "description": "str",
48
- "expected_output": "str",
49
- "config": "object",
50
- "callback": "str",
51
- "agent": "object",
52
- "context": "object",
53
- "async_execution": "bool",
54
- "output_json": "object",
55
- "output_pydantic": "object",
56
- "output_file": "object",
57
- "output": "object",
58
- "tools": "object",
59
- "human_input": "bool",
60
- }
61
-
62
- agent_properties = {
63
- "formatting_errors": "int",
64
- "id": "object",
65
- "role": "str",
66
- "goal": "str",
67
- "backstory": "str",
68
- "cache": "bool",
69
- "config": "object",
70
- "max_rpm": "int",
71
- "verbose": "bool",
72
- "allow_delegation": "bool",
73
- "tools": "object",
74
- "max_iter": "int",
75
- "max_execution_time": "object",
76
- "agent_executor": "object",
77
- "tools_handler": "object",
78
- "force_answer_max_iterations": "int",
79
- "crew": "object",
80
- "cache_handler": "object",
81
- "step_callback": "object",
82
- "i18n": "object",
83
- "llm": "object",
84
- "function_calling_llm": "object",
85
- "callbacks": "object",
86
- "system_template": "object",
87
- "prompt_template": "object",
88
- "response_template": "object",
89
- }
17
+ def patch_memory(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.memory.storage.rag_storage.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(span, "crewai.memory.storage.rag_storage.outputs", str(result))
48
+ if result:
49
+ span.set_status(Status(StatusCode.OK))
50
+ span.end()
51
+ return result
52
+
53
+ except Exception as err:
54
+ # Record the exception in the span
55
+ span.record_exception(err)
56
+
57
+ # Set the span status to indicate an error
58
+ span.set_status(Status(StatusCode.ERROR, str(err)))
59
+
60
+ # Reraise the exception to ensure it's not swallowed
61
+ raise
62
+
63
+ return traced_method
90
64
 
91
65
 
92
66
  def patch_crew(operation_name, version, tracer: Tracer):
@@ -161,25 +135,26 @@ class CrewAISpanAttributes:
161
135
  instance_name = self.instance.__class__.__name__
162
136
  if instance_name == "Crew":
163
137
  self.set_crew_attributes()
164
- set_span_attribute(self.span, "crewai.crew.config", json.dumps(self.crew))
138
+ for key, value in self.crew.items():
139
+ key = f"crewai.crew.{key}"
140
+ set_span_attribute(self.span, key, value)
165
141
 
166
142
  elif instance_name == "Agent":
167
143
  agent = self.set_agent_attributes()
168
- # for key, value in agent.items():
169
- # set_span_attribute(self.span, key, value)
170
- set_span_attribute(self.span, "crewai.agent.config", json.dumps(agent))
144
+ for key, value in agent.items():
145
+ key = f"crewai.agent.{key}"
146
+ set_span_attribute(self.span, key, value)
147
+
171
148
  elif instance_name == "Task":
172
149
  task = self.set_task_attributes()
173
- # uncomment if you want to spread attributes for the UI instead of dumping the whole object
174
- # for key, value in task.items():
175
- # set_span_attribute(self.span, key, value)
176
- set_span_attribute(self.span, "crewai.task.config", json.dumps(task))
150
+ for key, value in task.items():
151
+ key = f"crewai.task.{key}"
152
+ set_span_attribute(self.span, key, value)
177
153
 
178
154
  def set_crew_attributes(self):
179
155
  for key, value in self.instance.__dict__.items():
180
156
  if key == "tasks":
181
157
  self._parse_tasks(value)
182
-
183
158
  elif key == "agents":
184
159
  self._parse_agents(value)
185
160
  else:
@@ -52,6 +52,11 @@ def generic_patch(method, version, tracer):
52
52
  **(extra_attributes if extra_attributes is not None else {}),
53
53
  }
54
54
 
55
+ if hasattr(instance, 'config') and isinstance(instance.config, object):
56
+ config_dict = instance.config.__dict__
57
+ if isinstance(config_dict, dict):
58
+ span_attributes["embedchain.config"] = json.dumps(config_dict)
59
+
55
60
  if len(args) > 0:
56
61
  span_attributes["embedchain.inputs"] = json.dumps(args)
57
62
 
@@ -15,7 +15,6 @@ limitations under the License.
15
15
  """
16
16
 
17
17
  import importlib.metadata
18
- import inspect
19
18
  import logging
20
19
  from typing import Collection
21
20
 
@@ -28,46 +27,46 @@ from langtrace_python_sdk.instrumentation.langchain.patch import generic_patch
28
27
  logging.basicConfig(level=logging.FATAL)
29
28
 
30
29
 
31
- def patch_module_classes(
32
- module_name, tracer, version, task, trace_output=True, trace_input=True
33
- ):
34
- """
35
- Generic function to patch all public methods of all classes in a given module.
36
-
37
- Parameters:
38
- - module: The module object containing the classes to patch.
39
- - module_name: The name of the module, used in the prefix for `wrap_function_wrapper`.
40
- - tracer: The tracer object used in `generic_patch`.
41
- - version: The version parameter used in `generic_patch`.
42
- - task: The name used to identify the type of task in `generic_patch`.
43
- - exclude_private: Whether to exclude private methods (those starting with '_').
44
- - trace_output: Whether to trace the output of the patched methods.
45
- - trace_input: Whether to trace the input of the patched methods.
46
- """
47
- # import the module
48
- module = importlib.import_module(module_name)
49
- # loop through all public classes in the module
50
- for name, obj in inspect.getmembers(
51
- module,
52
- lambda member: inspect.isclass(member) and member.__module__ == module.__name__,
53
- ):
54
- # loop through all public methods of the class
55
- for method_name, _ in inspect.getmembers(obj, predicate=inspect.isfunction):
56
- # Skip private methods
57
- if method_name.startswith("_"):
58
- continue
59
- try:
60
- method_path = f"{name}.{method_name}"
61
- wrap_function_wrapper(
62
- module_name,
63
- method_path,
64
- generic_patch(
65
- method_path, task, tracer, version, trace_output, trace_input
66
- ),
67
- )
68
- # pylint: disable=broad-except
69
- except Exception:
70
- pass
30
+ # def patch_module_classes(
31
+ # module_name, tracer, version, task, trace_output=True, trace_input=True
32
+ # ):
33
+ # """
34
+ # Generic function to patch all public methods of all classes in a given module.
35
+
36
+ # Parameters:
37
+ # - module: The module object containing the classes to patch.
38
+ # - module_name: The name of the module, used in the prefix for `wrap_function_wrapper`.
39
+ # - tracer: The tracer object used in `generic_patch`.
40
+ # - version: The version parameter used in `generic_patch`.
41
+ # - task: The name used to identify the type of task in `generic_patch`.
42
+ # - exclude_private: Whether to exclude private methods (those starting with '_').
43
+ # - trace_output: Whether to trace the output of the patched methods.
44
+ # - trace_input: Whether to trace the input of the patched methods.
45
+ # """
46
+ # # import the module
47
+ # module = importlib.import_module(module_name)
48
+ # # loop through all public classes in the module
49
+ # for name, obj in inspect.getmembers(
50
+ # module,
51
+ # lambda member: inspect.isclass(member) and member.__module__ == module.__name__,
52
+ # ):
53
+ # # loop through all public methods of the class
54
+ # for method_name, _ in inspect.getmembers(obj, predicate=inspect.isfunction):
55
+ # # Skip private methods
56
+ # if method_name.startswith("_"):
57
+ # continue
58
+ # try:
59
+ # method_path = f"{name}.{method_name}"
60
+ # wrap_function_wrapper(
61
+ # module_name,
62
+ # method_path,
63
+ # generic_patch(
64
+ # method_path, task, tracer, version, trace_output, trace_input
65
+ # ),
66
+ # )
67
+ # # pylint: disable=broad-except
68
+ # except Exception:
69
+ # pass
71
70
 
72
71
 
73
72
  class LangchainInstrumentation(BaseInstrumentor):
@@ -83,14 +82,28 @@ class LangchainInstrumentation(BaseInstrumentor):
83
82
  tracer = get_tracer(__name__, "", tracer_provider)
84
83
  version = importlib.metadata.version("langchain")
85
84
 
86
- modules_to_patch = [
87
- ("langchain.text_splitter", "split_text", True, True),
88
- ]
89
-
90
- for module_name, task, trace_output, trace_input in modules_to_patch:
91
- patch_module_classes(
92
- module_name, tracer, version, task, trace_output, trace_input
93
- )
85
+ wrap_function_wrapper(
86
+ "langchain.agents.agent",
87
+ "RunnableAgent.plan",
88
+ generic_patch(
89
+ "RunnableAgent.plan", "plan", tracer, version, True, True
90
+ ),
91
+ )
92
+
93
+ wrap_function_wrapper(
94
+ "langchain.agents.agent",
95
+ "RunnableAgent.aplan",
96
+ generic_patch(
97
+ "RunnableAgent.aplan", "plan", tracer, version, True, True
98
+ ),
99
+ )
100
+
101
+ # modules_to_patch = []
102
+
103
+ # for module_name, task, trace_output, trace_input in modules_to_patch:
104
+ # patch_module_classes(
105
+ # module_name, tracer, version, task, trace_output, trace_input
106
+ # )
94
107
 
95
108
  def _uninstrument(self, **kwargs):
96
109
  pass
@@ -29,6 +29,7 @@ from langtrace_python_sdk.constants.instrumentation.common import (
29
29
  SERVICE_PROVIDERS,
30
30
  )
31
31
  from importlib_metadata import version as v
32
+ from langtrace_python_sdk.utils.misc import serialize_args, serialize_kwargs
32
33
 
33
34
 
34
35
  def generic_patch(
@@ -52,8 +53,12 @@ def generic_patch(
52
53
  **(extra_attributes if extra_attributes is not None else {}),
53
54
  }
54
55
 
56
+ inputs = {}
55
57
  if len(args) > 0 and trace_input:
56
- span_attributes["langchain.inputs"] = to_json_string(args)
58
+ inputs["args"] = serialize_args(*args)
59
+ if len(kwargs) > 0 and trace_input:
60
+ inputs["kwargs"] = serialize_kwargs(**kwargs)
61
+ span_attributes["langchain.inputs"] = json.dumps(inputs)
57
62
 
58
63
  attributes = FrameworkSpanAttributes(**span_attributes)
59
64
 
@@ -114,6 +114,8 @@ class LangchainCoreInstrumentation(BaseInstrumentor):
114
114
  "format",
115
115
  "format_messages",
116
116
  "format_prompt",
117
+ "transform",
118
+ "stream",
117
119
  "__or__",
118
120
  "__init__",
119
121
  "__repr__",
@@ -28,3 +28,35 @@ def to_iso_format(value):
28
28
  else None
29
29
  )
30
30
  )
31
+
32
+
33
+ def serialize_kwargs(**kwargs):
34
+ # Function to check if a value is serializable
35
+ def is_serializable(value):
36
+ try:
37
+ json.dumps(value)
38
+ return True
39
+ except (TypeError, ValueError):
40
+ return False
41
+
42
+ # Filter out non-serializable items
43
+ serializable_kwargs = {k: v for k, v in kwargs.items() if is_serializable(v)}
44
+
45
+ # Convert to string representation
46
+ return json.dumps(serializable_kwargs)
47
+
48
+
49
+ def serialize_args(*args):
50
+ # Function to check if a value is serializable
51
+ def is_serializable(value):
52
+ try:
53
+ json.dumps(value)
54
+ return True
55
+ except (TypeError, ValueError):
56
+ return False
57
+
58
+ # Filter out non-serializable items
59
+ serializable_args = [arg for arg in args if is_serializable(arg)]
60
+
61
+ # Convert to string representation
62
+ return json.dumps(serializable_args)
@@ -1 +1 @@
1
- __version__ = "2.3.0"
1
+ __version__ = "2.3.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: langtrace-python-sdk
3
- Version: 2.3.0
3
+ Version: 2.3.1
4
4
  Summary: Python SDK for LangTrace
5
5
  Project-URL: Homepage, https://github.com/Scale3-Labs/langtrace-python-sdk
6
6
  Author-email: Scale3 Labs <engineering@scale3labs.com>
@@ -13,7 +13,7 @@ examples/crewai_example/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
13
13
  examples/crewai_example/basic.py,sha256=PBu4f8yQfZO1L_22UDm_ReU9lnEcycjZcGuy5UpgDJM,1948
14
14
  examples/crewai_example/simple_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
15
  examples/crewai_example/simple_agent/agents.py,sha256=IkjRlRZJgrT7fBtth9sSO7OEEs3IAe-tmZey4omedeI,2318
16
- examples/crewai_example/simple_agent/main.py,sha256=SS1YSOUVWPpAhLBRekkTiyTK3xGwsoxY2mJeHR8NGFw,1332
16
+ examples/crewai_example/simple_agent/main.py,sha256=YXWizVK80DTYFYZAIxLwLlVPKTRhaxoNxbZsdOJQAPw,1340
17
17
  examples/crewai_example/simple_agent/tasks.py,sha256=JG5kPc9uBkZIDJCp0j3eporf6gnrKG3GZR5edHoeoxw,832
18
18
  examples/crewai_example/trip_planner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  examples/crewai_example/trip_planner/agents.py,sha256=bSmtD83qcB3PF21zjqdvAYe0vVvl0nhGVXX5oPeSGY8,2371
@@ -80,7 +80,7 @@ examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56sn
80
80
  examples/weaviate_example/query_text.py,sha256=wPHQTc_58kPoKTZMygVjTj-2ZcdrIuaausJfMxNQnQc,127162
81
81
  langtrace_python_sdk/__init__.py,sha256=VZM6i71NR7pBQK6XvJWRelknuTYUhqwqE7PlicKa5Wg,1166
82
82
  langtrace_python_sdk/langtrace.py,sha256=QNqnla5gQhWLDS6-kXPGV-MnqNDp0BQ4zdbkWI8sC50,8290
83
- langtrace_python_sdk/version.py,sha256=CpK8IH_dCUAwg9tqv7zm9FxbBFkxCnED1JUiRe7cftU,22
83
+ langtrace_python_sdk/version.py,sha256=neZxeMmEfjhVZM6xetRikrBdHWt5T5ehL72ZYdPtJ-E,22
84
84
  langtrace_python_sdk/constants/__init__.py,sha256=P8QvYwt5czUNDZsKS64vxm9Dc41ptGbuF1TFtAF6nv4,44
85
85
  langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
86
86
  langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -112,14 +112,14 @@ langtrace_python_sdk/instrumentation/cohere/__init__.py,sha256=sGUSLdTUyYf36Tm6L
112
112
  langtrace_python_sdk/instrumentation/cohere/instrumentation.py,sha256=YQFHZIBd7SSPD4b6Va-ZR0thf_AuBCqj5yzHLHJVWnM,2121
113
113
  langtrace_python_sdk/instrumentation/cohere/patch.py,sha256=Yb0OwxO4gG-WBfGhTFrwUUJEgpnRlyWI_FZveA4T1QU,20972
114
114
  langtrace_python_sdk/instrumentation/crewai/__init__.py,sha256=_UBKfvQv7l0g2_wnmA5F6CdSAFH0atNOVPd49zsN3aM,88
115
- langtrace_python_sdk/instrumentation/crewai/instrumentation.py,sha256=tMzynrc1TGBM1Yq2psyOmRlJQdOKyJkl3WxFlUNF54E,1841
116
- langtrace_python_sdk/instrumentation/crewai/patch.py,sha256=OLGD5UPE4YhuKGi22iytPOgq4S4ojW7hm0mmQFjmn5U,8382
115
+ langtrace_python_sdk/instrumentation/crewai/instrumentation.py,sha256=c7C20ihkIcmuj3vmphCOl50Mj3U9MgCuyOj91wNxHt0,2447
116
+ langtrace_python_sdk/instrumentation/crewai/patch.py,sha256=fLGRTDS9LfuyGwJ6wWZBjCfkKJmJhAu5VcDkPlSjR4o,8404
117
117
  langtrace_python_sdk/instrumentation/dspy/__init__.py,sha256=tM1srfi_QgyCzrde4izojMrRq2Wm7Dj5QUvVQXIJzkk,84
118
118
  langtrace_python_sdk/instrumentation/dspy/instrumentation.py,sha256=o8URiDvCbZ8LL0I-4xKHkn_Ms2sETBRpn-gOliv3xzQ,2929
119
119
  langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=E2P3MJBQ71or4M6BsvZOwYFtJK1UdTsYkdxVj9fSWPs,9869
120
120
  langtrace_python_sdk/instrumentation/embedchain/__init__.py,sha256=5L6n8-brMnRWZ0CMmHEuN1mrhIxrYLNtxRy0Ujc-hOY,103
121
121
  langtrace_python_sdk/instrumentation/embedchain/instrumentation.py,sha256=dShwm0duy25IvL7g9I_v-2oYuyh2fadeiJqXtXBay-8,1987
122
- langtrace_python_sdk/instrumentation/embedchain/patch.py,sha256=9Lt_XcBaOrazXn9AMl5azfOuEQR6DK8v0zjwtUEFpi4,3370
122
+ langtrace_python_sdk/instrumentation/embedchain/patch.py,sha256=ovvBrtqUDwGSmSgK_S3pOOrDa4gkPSFG-HvmsxqmJE8,3627
123
123
  langtrace_python_sdk/instrumentation/gemini/__init__.py,sha256=ilWmKA4Li-g3DX6R10WQ4v-51VljxToEnJpOQoQB5uQ,88
124
124
  langtrace_python_sdk/instrumentation/gemini/instrumentation.py,sha256=eGWr2dy1f_9TVZiXSH_MlNQINyS4I28EsOTKREdMVio,1304
125
125
  langtrace_python_sdk/instrumentation/gemini/patch.py,sha256=Zedp4bZH3-45LOaieSGyoTffgWJjqLs1YCDwM53v2CI,6228
@@ -127,13 +127,13 @@ langtrace_python_sdk/instrumentation/groq/__init__.py,sha256=ZXeq_nrej6Lm_uoMFEg
127
127
  langtrace_python_sdk/instrumentation/groq/instrumentation.py,sha256=Ttf07XVKhdYY1_fqJc7QWiSdmgEhEVyQB_3Az2_wqYo,1832
128
128
  langtrace_python_sdk/instrumentation/groq/patch.py,sha256=SmpsNVQyRcsvdh2fCKHsQ-EWsauMV972s99hznuNOjk,23504
129
129
  langtrace_python_sdk/instrumentation/langchain/__init__.py,sha256=-7ZkqQFu64F-cxSFd1ZPrciODKqmUIyUbQQ-eHuQPyM,101
130
- langtrace_python_sdk/instrumentation/langchain/instrumentation.py,sha256=_Z4AeNb2hBPSCvMRxE-mUfmkUO_wP_tGGtu-jppWPiI,3462
131
- langtrace_python_sdk/instrumentation/langchain/patch.py,sha256=BmVBKPpI4P9AX6Y8e67WYSz0a0rxZK7cJkI75ure2f4,4166
130
+ langtrace_python_sdk/instrumentation/langchain/instrumentation.py,sha256=Q7rnpB8wlnG2V7KbHWxnNKAKD02ra8sm_q6pr-OPM60,3921
131
+ langtrace_python_sdk/instrumentation/langchain/patch.py,sha256=sjmY-Ciu6G-qRV_mHJ2HFWqbEWXnA75GH_WFK_d_p6o,4410
132
132
  langtrace_python_sdk/instrumentation/langchain_community/__init__.py,sha256=mj5RR_cfkjMql7W9OyyhmviT2GZ-4Pv9XJfGwJufp_E,119
133
133
  langtrace_python_sdk/instrumentation/langchain_community/instrumentation.py,sha256=TmMRXcaiMR99Qg7r7pT1XunCr_GOQl_Csr6leSKYyTQ,5350
134
134
  langtrace_python_sdk/instrumentation/langchain_community/patch.py,sha256=fn-FBbu56ko7XSer0dDdQtIaXcsdZ7L_il_YjnAdL8I,5817
135
135
  langtrace_python_sdk/instrumentation/langchain_core/__init__.py,sha256=kumE_reeqgM-ZvEZ6-XxyT-F-HAdKq_v_PKvsLb4EZQ,110
136
- langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py,sha256=uiRGS3RLZGe442kzEyW2b9xJitb0EmZ8zs6Sj-cyol4,6295
136
+ langtrace_python_sdk/instrumentation/langchain_core/instrumentation.py,sha256=0Sh-CBXeeMYpK05rS33kCmyjRe6xHuqnbLcBlXpj46I,6342
137
137
  langtrace_python_sdk/instrumentation/langchain_core/patch.py,sha256=fNoGSM9Ui1O--5hv6T6Tw1fuWw7IfFVC_7kQL0qERec,10529
138
138
  langtrace_python_sdk/instrumentation/langgraph/__init__.py,sha256=eitlHloY-aZ4ZuIEJx61AadEA3G7siyecP-V-lziAr8,101
139
139
  langtrace_python_sdk/instrumentation/langgraph/instrumentation.py,sha256=SUZZhWSIbcfsF1S5NtEqW8QzkRM_pKAuXB7pwk5tsOU,2526
@@ -166,7 +166,7 @@ langtrace_python_sdk/types/__init__.py,sha256=MeGkmoy2OY3V21GErDIdlf_N8Aj7HDld5T
166
166
  langtrace_python_sdk/utils/__init__.py,sha256=giTHkvDOQdqFqXU4PoGP7DhA9tAteZN-KxX3mEUg6QQ,893
167
167
  langtrace_python_sdk/utils/langtrace_sampler.py,sha256=BupNndHbU9IL_wGleKetz8FdcveqHMBVz1bfKTTW80w,1753
168
168
  langtrace_python_sdk/utils/llm.py,sha256=7-b3r7NM2WeiVycIy0nmSer9aaVs9x3mIvTGyL7dWps,14590
169
- langtrace_python_sdk/utils/misc.py,sha256=CD9NWRLxLpFd0YwlHJqzlpFNedXVWtAKGOjQWnDCo8k,838
169
+ langtrace_python_sdk/utils/misc.py,sha256=7PRJ45BwuwJ6fPAdy1OpBau8QERR2aWaVvzDvZ7JTkE,1729
170
170
  langtrace_python_sdk/utils/prompt_registry.py,sha256=n5dQMVLBw8aJZY8Utvf67bncc25ELf6AH9BYw8_hSzo,2619
171
171
  langtrace_python_sdk/utils/sdk_version_checker.py,sha256=FzjIWZjn53cX0LEVPdipQd1fO9lG8iGVUEVUs9Hyk6M,1713
172
172
  langtrace_python_sdk/utils/silently_fail.py,sha256=F_9EteXCO9Cyq-8MA1OT2Zy_dx8n06nt31I7t7ui24E,478
@@ -214,8 +214,8 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
214
214
  tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
215
215
  tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
216
216
  tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
217
- langtrace_python_sdk-2.3.0.dist-info/METADATA,sha256=WlnTZh0bSEazqjPLsuWM3KbpiifmbNKXOjRpkEdXOFI,15011
218
- langtrace_python_sdk-2.3.0.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
219
- langtrace_python_sdk-2.3.0.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
220
- langtrace_python_sdk-2.3.0.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
221
- langtrace_python_sdk-2.3.0.dist-info/RECORD,,
217
+ langtrace_python_sdk-2.3.1.dist-info/METADATA,sha256=0Fw1oqbrCzau9d3ug7HFvm2D0tyBRW1OmsDroFDey9U,15011
218
+ langtrace_python_sdk-2.3.1.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
219
+ langtrace_python_sdk-2.3.1.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
220
+ langtrace_python_sdk-2.3.1.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
221
+ langtrace_python_sdk-2.3.1.dist-info/RECORD,,