langtrace-python-sdk 2.2.1__py3-none-any.whl → 2.2.3__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.
- examples/dspy_example/math_problems_cot_parallel.py +51 -0
- examples/openai_example/chat_completion_tool_choice.py +73 -0
- langtrace_python_sdk/instrumentation/anthropic/patch.py +3 -1
- langtrace_python_sdk/instrumentation/dspy/instrumentation.py +2 -2
- langtrace_python_sdk/instrumentation/dspy/patch.py +57 -39
- langtrace_python_sdk/instrumentation/gemini/patch.py +4 -1
- langtrace_python_sdk/utils/llm.py +1 -0
- langtrace_python_sdk/version.py +1 -1
- {langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/METADATA +1 -1
- {langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/RECORD +13 -11
- {langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/WHEEL +0 -0
- {langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/entry_points.txt +0 -0
- {langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/licenses/LICENSE +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import contextvars
|
|
2
|
+
import dspy
|
|
3
|
+
from dspy.datasets.gsm8k import GSM8K, gsm8k_metric
|
|
4
|
+
from dspy.teleprompt import BootstrapFewShot
|
|
5
|
+
from concurrent.futures import ThreadPoolExecutor
|
|
6
|
+
|
|
7
|
+
# flake8: noqa
|
|
8
|
+
from langtrace_python_sdk import langtrace, with_langtrace_root_span
|
|
9
|
+
|
|
10
|
+
langtrace.init()
|
|
11
|
+
|
|
12
|
+
turbo = dspy.OpenAI(model="gpt-3.5-turbo", max_tokens=250)
|
|
13
|
+
dspy.settings.configure(lm=turbo)
|
|
14
|
+
|
|
15
|
+
# Load math questions from the GSM8K dataset
|
|
16
|
+
gsm8k = GSM8K()
|
|
17
|
+
gsm8k_trainset, gsm8k_devset = gsm8k.train[:10], gsm8k.dev[:10]
|
|
18
|
+
|
|
19
|
+
class CoT(dspy.Module):
|
|
20
|
+
def __init__(self):
|
|
21
|
+
super().__init__()
|
|
22
|
+
self.prog = dspy.ChainOfThought("question -> answer")
|
|
23
|
+
|
|
24
|
+
def forward(self, question):
|
|
25
|
+
result = inject_additional_attributes(lambda: self.prog(question=question), {'langtrace.span.name': 'MathProblemsCotParallel'})
|
|
26
|
+
return result
|
|
27
|
+
|
|
28
|
+
@with_langtrace_root_span(name="parallel_example")
|
|
29
|
+
def example():
|
|
30
|
+
# Set up the optimizer: we want to "bootstrap" (i.e., self-generate) 4-shot examples of our CoT program.
|
|
31
|
+
config = dict(max_bootstrapped_demos=4, max_labeled_demos=4)
|
|
32
|
+
|
|
33
|
+
# Optimize! Use the `gsm8k_metric` here. In general, the metric is going to tell the optimizer how well it's doing.
|
|
34
|
+
teleprompter = BootstrapFewShot(metric=gsm8k_metric, **config)
|
|
35
|
+
optimized_cot = teleprompter.compile(CoT(), trainset=gsm8k_trainset)
|
|
36
|
+
|
|
37
|
+
questions = [
|
|
38
|
+
"What is the sine of 0?",
|
|
39
|
+
"What is the tangent of 100?",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
with ThreadPoolExecutor(max_workers=2) as executor:
|
|
43
|
+
futures = [executor.submit(contextvars.copy_context().run, optimized_cot, question=q) for q in questions]
|
|
44
|
+
|
|
45
|
+
for future in futures:
|
|
46
|
+
ans = future.result()
|
|
47
|
+
print(ans)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
if __name__ == "__main__":
|
|
51
|
+
example()
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Example taken from https://platform.openai.com/docs/guides/function-calling
|
|
2
|
+
import json
|
|
3
|
+
|
|
4
|
+
from dotenv import find_dotenv, load_dotenv
|
|
5
|
+
from openai import OpenAI
|
|
6
|
+
|
|
7
|
+
from langtrace_python_sdk import langtrace
|
|
8
|
+
|
|
9
|
+
client = OpenAI()
|
|
10
|
+
|
|
11
|
+
_ = load_dotenv(find_dotenv())
|
|
12
|
+
|
|
13
|
+
langtrace.init(
|
|
14
|
+
write_spans_to_console=True,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# Example dummy function hard coded to return the same weather
|
|
19
|
+
# In production, this could be your backend API or an external API
|
|
20
|
+
def get_current_weather(location, unit="fahrenheit"):
|
|
21
|
+
"""Get the current weather in a given location"""
|
|
22
|
+
if "tokyo" in location.lower():
|
|
23
|
+
return json.dumps({"location": "Tokyo", "temperature": "10", "unit": unit})
|
|
24
|
+
elif "san francisco" in location.lower():
|
|
25
|
+
return json.dumps(
|
|
26
|
+
{"location": "San Francisco", "temperature": "72", "unit": unit}
|
|
27
|
+
)
|
|
28
|
+
elif "paris" in location.lower():
|
|
29
|
+
return json.dumps({"location": "Paris", "temperature": "22", "unit": unit})
|
|
30
|
+
else:
|
|
31
|
+
return json.dumps({"location": location, "temperature": "unknown"})
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run_conversation():
|
|
35
|
+
# Step 1: send the conversation and available functions to the model
|
|
36
|
+
messages = [
|
|
37
|
+
{
|
|
38
|
+
"role": "user",
|
|
39
|
+
"content": "What's the weather like in San Francisco, Tokyo, and Paris?",
|
|
40
|
+
}
|
|
41
|
+
]
|
|
42
|
+
tools = [
|
|
43
|
+
{
|
|
44
|
+
"type": "function",
|
|
45
|
+
"function": {
|
|
46
|
+
"name": "get_current_weather",
|
|
47
|
+
"description": "Get the current weather in a given location",
|
|
48
|
+
"parameters": {
|
|
49
|
+
"type": "object",
|
|
50
|
+
"properties": {
|
|
51
|
+
"location": {
|
|
52
|
+
"type": "string",
|
|
53
|
+
"description": "The city and state, e.g. San Francisco, CA",
|
|
54
|
+
},
|
|
55
|
+
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
|
|
56
|
+
},
|
|
57
|
+
"required": ["location"],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
}
|
|
61
|
+
]
|
|
62
|
+
response = client.chat.completions.create(
|
|
63
|
+
model="gpt-4o",
|
|
64
|
+
messages=messages,
|
|
65
|
+
tools=tools,
|
|
66
|
+
tool_choice="required", # auto is default, but we'll be explicit
|
|
67
|
+
)
|
|
68
|
+
response_message = response.choices[0].message
|
|
69
|
+
tool_calls = response_message.tool_calls
|
|
70
|
+
print(tool_calls)
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
print(run_conversation())
|
|
@@ -48,7 +48,9 @@ def messages_create(original_method, version, tracer):
|
|
|
48
48
|
prompts = kwargs.get("messages", [])
|
|
49
49
|
system = kwargs.get("system")
|
|
50
50
|
if system:
|
|
51
|
-
prompts = [{"role": "system", "content": system}] + kwargs.get(
|
|
51
|
+
prompts = [{"role": "system", "content": system}] + kwargs.get(
|
|
52
|
+
"messages", []
|
|
53
|
+
)
|
|
52
54
|
|
|
53
55
|
span_attributes = {
|
|
54
56
|
**get_langtrace_attributes(version, service_provider),
|
|
@@ -27,12 +27,12 @@ class DspyInstrumentation(BaseInstrumentor):
|
|
|
27
27
|
The DspyInstrumentor class represents the DSPy instrumentation"""
|
|
28
28
|
|
|
29
29
|
def instrumentation_dependencies(self) -> Collection[str]:
|
|
30
|
-
return ["dspy >= 0.
|
|
30
|
+
return ["dspy-ai >= 2.0.0"]
|
|
31
31
|
|
|
32
32
|
def _instrument(self, **kwargs):
|
|
33
33
|
tracer_provider = kwargs.get("tracer_provider")
|
|
34
34
|
tracer = get_tracer(__name__, "", tracer_provider)
|
|
35
|
-
version = v("dspy")
|
|
35
|
+
version = v("dspy-ai")
|
|
36
36
|
_W(
|
|
37
37
|
"dspy.teleprompt.bootstrap",
|
|
38
38
|
"BootstrapFewShot.compile",
|
|
@@ -39,30 +39,36 @@ def patch_bootstrapfewshot_optimizer(operation_name, version, tracer):
|
|
|
39
39
|
),
|
|
40
40
|
}
|
|
41
41
|
span_attributes["dspy.optimizer.module.prog"] = json.dumps(prog)
|
|
42
|
-
if
|
|
43
|
-
span_attributes["dspy.optimizer.metric"] = instance
|
|
42
|
+
if hasattr(instance, 'metric'):
|
|
43
|
+
span_attributes["dspy.optimizer.metric"] = getattr(instance, 'metric').__name__
|
|
44
44
|
if kwargs.get("trainset") and len(kwargs.get("trainset")) > 0:
|
|
45
45
|
span_attributes["dspy.optimizer.trainset"] = str(kwargs.get("trainset"))
|
|
46
46
|
config = {}
|
|
47
|
-
if
|
|
48
|
-
config["metric_threshold"] = instance
|
|
49
|
-
if
|
|
50
|
-
config["teacher_settings"] = instance
|
|
51
|
-
if
|
|
52
|
-
config["max_bootstrapped_demos"] = instance
|
|
53
|
-
if
|
|
54
|
-
config["max_labeled_demos"] = instance
|
|
55
|
-
if
|
|
56
|
-
config["max_rounds"] = instance
|
|
57
|
-
if
|
|
58
|
-
config["max_errors"] = instance
|
|
59
|
-
if
|
|
60
|
-
config["error_count"] = instance
|
|
47
|
+
if hasattr(instance, 'metric_threshold'):
|
|
48
|
+
config["metric_threshold"] = getattr(instance, 'metric_threshold')
|
|
49
|
+
if hasattr(instance, 'teacher_settings'):
|
|
50
|
+
config["teacher_settings"] = getattr(instance, 'teacher_settings')
|
|
51
|
+
if hasattr(instance, 'max_bootstrapped_demos'):
|
|
52
|
+
config["max_bootstrapped_demos"] = getattr(instance, 'max_bootstrapped_demos')
|
|
53
|
+
if hasattr(instance, 'max_labeled_demos'):
|
|
54
|
+
config["max_labeled_demos"] = getattr(instance, 'max_labeled_demos')
|
|
55
|
+
if hasattr(instance, 'max_rounds'):
|
|
56
|
+
config["max_rounds"] = getattr(instance, 'max_rounds')
|
|
57
|
+
if hasattr(instance, 'max_steps'):
|
|
58
|
+
config["max_errors"] = getattr(instance, 'max_errors')
|
|
59
|
+
if hasattr(instance, 'error_count'):
|
|
60
|
+
config["error_count"] = getattr(instance, 'error_count')
|
|
61
61
|
if config and len(config) > 0:
|
|
62
62
|
span_attributes["dspy.optimizer.config"] = json.dumps(config)
|
|
63
63
|
|
|
64
|
+
# passed operation name
|
|
65
|
+
opname = operation_name
|
|
66
|
+
if extra_attributes is not None and "langtrace.span.name" in extra_attributes:
|
|
67
|
+
# append the operation name to the span name
|
|
68
|
+
opname = f"{operation_name}-{extra_attributes['langtrace.span.name']}"
|
|
69
|
+
|
|
64
70
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
65
|
-
with tracer.start_as_current_span(
|
|
71
|
+
with tracer.start_as_current_span(opname, kind=SpanKind.CLIENT) as span:
|
|
66
72
|
_set_input_attributes(span, kwargs, attributes)
|
|
67
73
|
|
|
68
74
|
try:
|
|
@@ -100,6 +106,12 @@ def patch_signature(operation_name, version, tracer):
|
|
|
100
106
|
**(extra_attributes if extra_attributes is not None else {}),
|
|
101
107
|
}
|
|
102
108
|
|
|
109
|
+
# passed operation name
|
|
110
|
+
opname = operation_name
|
|
111
|
+
if extra_attributes is not None and "langtrace.span.name" in extra_attributes:
|
|
112
|
+
# append the operation name to the span name
|
|
113
|
+
opname = f"{operation_name}-{extra_attributes['langtrace.span.name']}"
|
|
114
|
+
|
|
103
115
|
if instance.__class__.__name__:
|
|
104
116
|
span_attributes["dspy.signature.name"] = instance.__class__.__name__
|
|
105
117
|
span_attributes["dspy.signature"] = str(instance)
|
|
@@ -108,7 +120,7 @@ def patch_signature(operation_name, version, tracer):
|
|
|
108
120
|
span_attributes["dspy.signature.args"] = str(kwargs)
|
|
109
121
|
|
|
110
122
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
111
|
-
with tracer.start_as_current_span(
|
|
123
|
+
with tracer.start_as_current_span(opname, kind=SpanKind.CLIENT) as span:
|
|
112
124
|
_set_input_attributes(span, kwargs, attributes)
|
|
113
125
|
|
|
114
126
|
try:
|
|
@@ -147,35 +159,41 @@ def patch_evaluate(operation_name, version, tracer):
|
|
|
147
159
|
**(extra_attributes if extra_attributes is not None else {}),
|
|
148
160
|
}
|
|
149
161
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
if "
|
|
162
|
+
# passed operation name
|
|
163
|
+
opname = operation_name
|
|
164
|
+
if extra_attributes is not None and "langtrace.span.name" in extra_attributes:
|
|
165
|
+
# append the operation name to the span name
|
|
166
|
+
opname = f"{operation_name}-{extra_attributes['langtrace.span.name']}"
|
|
167
|
+
|
|
168
|
+
if hasattr(instance, "devset"):
|
|
169
|
+
span_attributes["dspy.evaluate.devset"] = str(getattr(instance, "devset"))
|
|
170
|
+
if hasattr(instance, "trainset"):
|
|
171
|
+
span_attributes["dspy.evaluate.display"] = str(getattr(instance, "trainset"))
|
|
172
|
+
if hasattr(instance, "num_threads"):
|
|
173
|
+
span_attributes["dspy.evaluate.num_threads"] = str(getattr(instance, "num_threads"))
|
|
174
|
+
if hasattr(instance, "return_outputs"):
|
|
157
175
|
span_attributes["dspy.evaluate.return_outputs"] = str(
|
|
158
|
-
instance
|
|
176
|
+
getattr(instance, "return_outputs")
|
|
159
177
|
)
|
|
160
|
-
if "display_table"
|
|
161
|
-
span_attributes["dspy.evaluate.display_table"] = str(instance
|
|
162
|
-
if "display_progress"
|
|
178
|
+
if hasattr(instance, "display_table"):
|
|
179
|
+
span_attributes["dspy.evaluate.display_table"] = str(getattr(instance, "display_table"))
|
|
180
|
+
if hasattr(instance, "display_progress"):
|
|
163
181
|
span_attributes["dspy.evaluate.display_progress"] = str(
|
|
164
|
-
instance
|
|
182
|
+
getattr(instance, "display_progress")
|
|
165
183
|
)
|
|
166
|
-
if "metric"
|
|
167
|
-
span_attributes["dspy.evaluate.metric"] = instance
|
|
168
|
-
if "error_count"
|
|
169
|
-
span_attributes["dspy.evaluate.error_count"] = str(instance
|
|
170
|
-
if "error_lock"
|
|
171
|
-
span_attributes["dspy.evaluate.error_lock"] = str(instance
|
|
172
|
-
if "max_errors"
|
|
173
|
-
span_attributes["dspy.evaluate.max_errors"] = str(instance
|
|
184
|
+
if hasattr(instance, "metric"):
|
|
185
|
+
span_attributes["dspy.evaluate.metric"] = getattr(instance, "metric").__name__
|
|
186
|
+
if hasattr(instance, "error_count"):
|
|
187
|
+
span_attributes["dspy.evaluate.error_count"] = str(getattr(instance, "error_count"))
|
|
188
|
+
if hasattr(instance, "error_lock"):
|
|
189
|
+
span_attributes["dspy.evaluate.error_lock"] = str(getattr(instance, "error_lock"))
|
|
190
|
+
if hasattr(instance, "max_errors"):
|
|
191
|
+
span_attributes["dspy.evaluate.max_errors"] = str(getattr(instance, "max_errors"))
|
|
174
192
|
if args and len(args) > 0:
|
|
175
193
|
span_attributes["dspy.evaluate.args"] = str(args)
|
|
176
194
|
|
|
177
195
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
178
|
-
with tracer.start_as_current_span(
|
|
196
|
+
with tracer.start_as_current_span(opname, kind=SpanKind.CLIENT) as span:
|
|
179
197
|
_set_input_attributes(span, kwargs, attributes)
|
|
180
198
|
|
|
181
199
|
try:
|
|
@@ -110,7 +110,10 @@ def get_llm_model(instance):
|
|
|
110
110
|
|
|
111
111
|
def serialize_prompts(args, kwargs, instance):
|
|
112
112
|
prompts = []
|
|
113
|
-
if
|
|
113
|
+
if (
|
|
114
|
+
hasattr(instance, "_system_instruction")
|
|
115
|
+
and instance._system_instruction is not None
|
|
116
|
+
):
|
|
114
117
|
system_prompt = {
|
|
115
118
|
"role": "system",
|
|
116
119
|
"content": instance._system_instruction.__dict__["_pb"].parts[0].text,
|
|
@@ -123,6 +123,7 @@ def get_llm_request_attributes(kwargs, prompts=None, model=None):
|
|
|
123
123
|
SpanAttributes.LLM_FREQUENCY_PENALTY: kwargs.get("frequency_penalty"),
|
|
124
124
|
SpanAttributes.LLM_REQUEST_SEED: kwargs.get("seed"),
|
|
125
125
|
SpanAttributes.LLM_TOOLS: json.dumps(tools) if tools else None,
|
|
126
|
+
SpanAttributes.LLM_TOOL_CHOICE: kwargs.get("tool_choice"),
|
|
126
127
|
SpanAttributes.LLM_REQUEST_LOGPROPS: kwargs.get("logprobs"),
|
|
127
128
|
SpanAttributes.LLM_REQUEST_LOGITBIAS: kwargs.get("logit_bias"),
|
|
128
129
|
SpanAttributes.LLM_REQUEST_TOP_LOGPROPS: kwargs.get("top_logprobs"),
|
langtrace_python_sdk/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2.2.
|
|
1
|
+
__version__ = "2.2.3"
|
|
@@ -11,6 +11,7 @@ examples/cohere_example/rerank.py,sha256=e7OU0A2FzfiQDuOmCy3Kg5LLNYGRmRIK5LqeLnT
|
|
|
11
11
|
examples/cohere_example/tools.py,sha256=a5uvS058tcwU6PJbF9EDO6LPVmPj2LoW4Vn8Web3Iq8,1656
|
|
12
12
|
examples/crewai_example/basic.py,sha256=PBu4f8yQfZO1L_22UDm_ReU9lnEcycjZcGuy5UpgDJM,1948
|
|
13
13
|
examples/dspy_example/math_problems_cot.py,sha256=Z98nB6myt8WJse2dWS6Ap7CFUhC27lBNb37R1Gg80VQ,1282
|
|
14
|
+
examples/dspy_example/math_problems_cot_parallel.py,sha256=s3jdEjhwZD-Dd2-EqYFrA_dc3D3vm5bhMwFRYAjCCJw,1734
|
|
14
15
|
examples/dspy_example/program_of_thought_basic.py,sha256=oEbtJdeKENMUbex25-zyStWwurRWW6OdP0KDs-jUkko,984
|
|
15
16
|
examples/dspy_example/quiz_gen.py,sha256=OyGhepeX8meKOtLdmlYUjMD2ECk-ZQuQXUZif1hFQY4,3371
|
|
16
17
|
examples/dspy_example/react.py,sha256=APAnHqgy9w-qY5jnPD_WbBx6bwo9C-DhPnUuhL-t7sg,1376
|
|
@@ -36,6 +37,7 @@ examples/openai_example/__init__.py,sha256=MU4CELvhe2EU6d4Okg-bTfjvfGxQO7PNzqMw1
|
|
|
36
37
|
examples/openai_example/async_tool_calling_nonstreaming.py,sha256=H1-CrNfNDfqAkB5wEipITXlW2OsYL7XD5uQb6k3C6ps,3865
|
|
37
38
|
examples/openai_example/async_tool_calling_streaming.py,sha256=LaSKmn_Unv55eTHXYdEmKjo39eNuB3ASOBV-m8U1HfU,7136
|
|
38
39
|
examples/openai_example/chat_completion.py,sha256=HPFdM0lA01yo5VvZRRdgczyPSa-eurnALP723laOv6M,1192
|
|
40
|
+
examples/openai_example/chat_completion_tool_choice.py,sha256=rkOjbFnIJ5hWWHWg-aTSek41UN2PBfufGpdaFhkWYj8,2356
|
|
39
41
|
examples/openai_example/embeddings_create.py,sha256=kcOZpl5nhHo_NC-3n2yKX5W8mAzNfut43mSy1BmQJUI,555
|
|
40
42
|
examples/openai_example/function_calling.py,sha256=zz-JdCcpP7uCXG21EYXF1Y39IKj6gYt2fOP5N_ywpnc,2338
|
|
41
43
|
examples/openai_example/images_edit.py,sha256=6dSKA40V39swSs1mWdWXSa0reK4tyNBkK9MM7V3IEPw,939
|
|
@@ -56,7 +58,7 @@ examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56sn
|
|
|
56
58
|
examples/weaviate_example/query_text.py,sha256=sG8O-bXQpflBAiYpgE_M2X7GcHUlZNgl_wJW8_h-W6Q,127024
|
|
57
59
|
langtrace_python_sdk/__init__.py,sha256=VZM6i71NR7pBQK6XvJWRelknuTYUhqwqE7PlicKa5Wg,1166
|
|
58
60
|
langtrace_python_sdk/langtrace.py,sha256=1L0IjME-pzEYht92QfwByPZr3H1MClTrqQdoN1KyKJY,7689
|
|
59
|
-
langtrace_python_sdk/version.py,sha256=
|
|
61
|
+
langtrace_python_sdk/version.py,sha256=3pvG1dVJuHEcdu38cc8mGwpb57ZUjsnbAe_LVURnTPQ,22
|
|
60
62
|
langtrace_python_sdk/constants/__init__.py,sha256=P8QvYwt5czUNDZsKS64vxm9Dc41ptGbuF1TFtAF6nv4,44
|
|
61
63
|
langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
|
|
62
64
|
langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -78,7 +80,7 @@ langtrace_python_sdk/extensions/langtrace_filesystem.py,sha256=qpnkpkuTZ2yhGgpBK
|
|
|
78
80
|
langtrace_python_sdk/instrumentation/__init__.py,sha256=yJd3aGu4kPfm2h6oe6kiCWvzTF9awpC1UztjXF9WSO4,1391
|
|
79
81
|
langtrace_python_sdk/instrumentation/anthropic/__init__.py,sha256=donrurJAGYlxrSRA3BIf76jGeUcAx9Tq8CVpah68S0Y,101
|
|
80
82
|
langtrace_python_sdk/instrumentation/anthropic/instrumentation.py,sha256=-srgE8qumAn0ulQYZxMa8ch-9IBH0XgBW_rfEnGk6LI,1684
|
|
81
|
-
langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=
|
|
83
|
+
langtrace_python_sdk/instrumentation/anthropic/patch.py,sha256=Ol0U6vi5UG55ZC_Y7RBmuW87x0FCerAIbio0GSNjOqk,6914
|
|
82
84
|
langtrace_python_sdk/instrumentation/chroma/__init__.py,sha256=pNZ5UO8Q-d5VkXSobBf79reB6AmEl_usnnTp5Itv818,95
|
|
83
85
|
langtrace_python_sdk/instrumentation/chroma/instrumentation.py,sha256=nT6PS6bsrIOO9kLV5GuUeRjMe6THHHAZGvqWBP1dYog,1807
|
|
84
86
|
langtrace_python_sdk/instrumentation/chroma/patch.py,sha256=JfFc8SDfwkEyIwTd1yM6jwa1vu5hZH6IXyxAEcQQQOs,9010
|
|
@@ -89,11 +91,11 @@ langtrace_python_sdk/instrumentation/crewai/__init__.py,sha256=_UBKfvQv7l0g2_wnm
|
|
|
89
91
|
langtrace_python_sdk/instrumentation/crewai/instrumentation.py,sha256=W8PLTLzgEdrEx1DCo79wNs9xcuWK0YuxEICLavOESDw,1715
|
|
90
92
|
langtrace_python_sdk/instrumentation/crewai/patch.py,sha256=Vnpip9Pbk4UFbTFHoUrHtAnDgsaihwSvZBgtUeOtLr8,6109
|
|
91
93
|
langtrace_python_sdk/instrumentation/dspy/__init__.py,sha256=tM1srfi_QgyCzrde4izojMrRq2Wm7Dj5QUvVQXIJzkk,84
|
|
92
|
-
langtrace_python_sdk/instrumentation/dspy/instrumentation.py,sha256=
|
|
93
|
-
langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=
|
|
94
|
+
langtrace_python_sdk/instrumentation/dspy/instrumentation.py,sha256=o8URiDvCbZ8LL0I-4xKHkn_Ms2sETBRpn-gOliv3xzQ,2929
|
|
95
|
+
langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=E2P3MJBQ71or4M6BsvZOwYFtJK1UdTsYkdxVj9fSWPs,9869
|
|
94
96
|
langtrace_python_sdk/instrumentation/gemini/__init__.py,sha256=ilWmKA4Li-g3DX6R10WQ4v-51VljxToEnJpOQoQB5uQ,88
|
|
95
97
|
langtrace_python_sdk/instrumentation/gemini/instrumentation.py,sha256=rhGOt1YsTmTSzdFXkuTcFJFUQSgNBnqKvYURcS3yGHU,1308
|
|
96
|
-
langtrace_python_sdk/instrumentation/gemini/patch.py,sha256=
|
|
98
|
+
langtrace_python_sdk/instrumentation/gemini/patch.py,sha256=XtsxD9vbe4lv4o8K8iRb9K1-U8DrjtUG6rWCYkCdJuc,6315
|
|
97
99
|
langtrace_python_sdk/instrumentation/groq/__init__.py,sha256=ZXeq_nrej6Lm_uoMFEg8wbSejhjB2UJ5IoHQBPc2-C0,91
|
|
98
100
|
langtrace_python_sdk/instrumentation/groq/instrumentation.py,sha256=Ttf07XVKhdYY1_fqJc7QWiSdmgEhEVyQB_3Az2_wqYo,1832
|
|
99
101
|
langtrace_python_sdk/instrumentation/groq/patch.py,sha256=zvQ0WPSHXLYQwzST-9-hRvDyjPG3vkY6FX0LeGV-Cgg,23863
|
|
@@ -133,7 +135,7 @@ langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=rRD6WfQcNGYpw9teoC
|
|
|
133
135
|
langtrace_python_sdk/types/__init__.py,sha256=KDW6S74FDxpeBa9xoH5zVEYfmRjccCCHzlW7lTJg1TA,3194
|
|
134
136
|
langtrace_python_sdk/utils/__init__.py,sha256=QPF7SMuiz_003fLCHkRrgNb9NjqErDQ5cQr6pkJReKc,724
|
|
135
137
|
langtrace_python_sdk/utils/langtrace_sampler.py,sha256=BupNndHbU9IL_wGleKetz8FdcveqHMBVz1bfKTTW80w,1753
|
|
136
|
-
langtrace_python_sdk/utils/llm.py,sha256=
|
|
138
|
+
langtrace_python_sdk/utils/llm.py,sha256=49oiL4leIB_KvO6oVzC2qEurl_7k5lhet4PpUESyn5E,12848
|
|
137
139
|
langtrace_python_sdk/utils/misc.py,sha256=CD9NWRLxLpFd0YwlHJqzlpFNedXVWtAKGOjQWnDCo8k,838
|
|
138
140
|
langtrace_python_sdk/utils/prompt_registry.py,sha256=n5dQMVLBw8aJZY8Utvf67bncc25ELf6AH9BYw8_hSzo,2619
|
|
139
141
|
langtrace_python_sdk/utils/sdk_version_checker.py,sha256=FzjIWZjn53cX0LEVPdipQd1fO9lG8iGVUEVUs9Hyk6M,1713
|
|
@@ -182,8 +184,8 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
|
|
|
182
184
|
tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
|
|
183
185
|
tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
|
|
184
186
|
tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
|
|
185
|
-
langtrace_python_sdk-2.2.
|
|
186
|
-
langtrace_python_sdk-2.2.
|
|
187
|
-
langtrace_python_sdk-2.2.
|
|
188
|
-
langtrace_python_sdk-2.2.
|
|
189
|
-
langtrace_python_sdk-2.2.
|
|
187
|
+
langtrace_python_sdk-2.2.3.dist-info/METADATA,sha256=ZKVh06M9VHfn7ESym1J4vECVp8-aM9aaDqqDpjsOVHE,14471
|
|
188
|
+
langtrace_python_sdk-2.2.3.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
189
|
+
langtrace_python_sdk-2.2.3.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
|
|
190
|
+
langtrace_python_sdk-2.2.3.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
191
|
+
langtrace_python_sdk-2.2.3.dist-info/RECORD,,
|
|
File without changes
|
{langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{langtrace_python_sdk-2.2.1.dist-info → langtrace_python_sdk-2.2.3.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|