langtrace-python-sdk 2.1.24__py3-none-any.whl → 2.1.26__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/react.py +17 -5
- examples/weaviate_example/query_text.py +1659 -0
- langtrace_python_sdk/constants/instrumentation/ollama.py +3 -5
- langtrace_python_sdk/constants/instrumentation/weaviate.py +30 -0
- langtrace_python_sdk/instrumentation/dspy/patch.py +12 -12
- langtrace_python_sdk/instrumentation/ollama/patch.py +22 -7
- langtrace_python_sdk/instrumentation/openai/patch.py +30 -8
- langtrace_python_sdk/instrumentation/weaviate/instrumentation.py +1 -1
- langtrace_python_sdk/instrumentation/weaviate/patch.py +2 -1
- langtrace_python_sdk/version.py +1 -1
- {langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/METADATA +17 -2
- {langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/RECORD +15 -15
- {langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/WHEEL +0 -0
- {langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/entry_points.txt +0 -0
- {langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
APIS = {
|
|
2
|
-
"GENERATE": {
|
|
3
|
-
|
|
4
|
-
},
|
|
5
|
-
"CHAT": {"METHOD": "chat"},
|
|
6
|
-
"EMBEDDINGS": {"METHOD": "embeddings"},
|
|
2
|
+
"GENERATE": {"METHOD": "generate", "ENDPOINT": "/api/generate"},
|
|
3
|
+
"CHAT": {"METHOD": "chat", "ENDPOINT": "/api/chat"},
|
|
4
|
+
"EMBEDDINGS": {"METHOD": "embeddings", "ENDPOINT": "/api/embeddings"},
|
|
7
5
|
}
|
|
@@ -6,6 +6,11 @@ APIS = {
|
|
|
6
6
|
"METHOD": "_BM25Query.bm25",
|
|
7
7
|
"OPERATION": "query",
|
|
8
8
|
},
|
|
9
|
+
"weaviate.generate.bm25": {
|
|
10
|
+
"MODULE": WeaviateMethods.QUERY_BM25.value,
|
|
11
|
+
"METHOD": "_BM25Generate.bm25",
|
|
12
|
+
"OPERATION": "generate",
|
|
13
|
+
},
|
|
9
14
|
"weaviate.query.fetch_object_by_id": {
|
|
10
15
|
"MODULE": WeaviateMethods.QUERY_FETCH_OBJECT_BY_ID.value,
|
|
11
16
|
"METHOD": "_FetchObjectByIDQuery.fetch_object_by_id",
|
|
@@ -16,26 +21,51 @@ APIS = {
|
|
|
16
21
|
"METHOD": "_FetchObjectsQuery.fetch_objects",
|
|
17
22
|
"OPERATION": "query",
|
|
18
23
|
},
|
|
24
|
+
"weaviate.generate.fetch_objects": {
|
|
25
|
+
"MODULE": WeaviateMethods.QUERY_FETCH_OBJECTS.value,
|
|
26
|
+
"METHOD": "_FetchObjectsGenerate.fetch_objects",
|
|
27
|
+
"OPERATION": "generate",
|
|
28
|
+
},
|
|
19
29
|
"weaviate.query.hybrid": {
|
|
20
30
|
"MODULE": WeaviateMethods.QUERY_HYBRID.value,
|
|
21
31
|
"METHOD": "_HybridQuery.hybrid",
|
|
22
32
|
"OPERATION": "query",
|
|
23
33
|
},
|
|
34
|
+
"weaviate.generate.hybrid": {
|
|
35
|
+
"MODULE": WeaviateMethods.QUERY_HYBRID.value,
|
|
36
|
+
"METHOD": "_HybridGenerate.hybrid",
|
|
37
|
+
"OPERATION": "generate",
|
|
38
|
+
},
|
|
24
39
|
"weaviate.query.near_object": {
|
|
25
40
|
"MODULE": WeaviateMethods.QUERY_NEAR_OBJECT.value,
|
|
26
41
|
"METHOD": "_NearObjectQuery.near_object",
|
|
27
42
|
"OPERATION": "query",
|
|
28
43
|
},
|
|
44
|
+
"weaviate.generate.near_object": {
|
|
45
|
+
"MODULE": WeaviateMethods.QUERY_NEAR_OBJECT.value,
|
|
46
|
+
"METHOD": "_NearObjectGenerate.near_object",
|
|
47
|
+
"OPERATION": "generate",
|
|
48
|
+
},
|
|
29
49
|
"weaviate.query.near_text": {
|
|
30
50
|
"MODULE": WeaviateMethods.QUERY_NEAR_TEXT.value,
|
|
31
51
|
"METHOD": "_NearTextQuery.near_text",
|
|
32
52
|
"OPERATION": "query",
|
|
33
53
|
},
|
|
54
|
+
"weaviate.generate.near_text": {
|
|
55
|
+
"MODULE": WeaviateMethods.QUERY_NEAR_TEXT.value,
|
|
56
|
+
"METHOD": "_NearTextGenerate.near_text",
|
|
57
|
+
"OPERATION": "generate",
|
|
58
|
+
},
|
|
34
59
|
"weaviate.query.near_vector": {
|
|
35
60
|
"MODULE": WeaviateMethods.QUERY_NEAR_VECTOR.value,
|
|
36
61
|
"METHOD": "_NearVectorQuery.near_vector",
|
|
37
62
|
"OPERATION": "query",
|
|
38
63
|
},
|
|
64
|
+
"weaviate.generate.near_vector": {
|
|
65
|
+
"MODULE": WeaviateMethods.QUERY_NEAR_VECTOR.value,
|
|
66
|
+
"METHOD": "_NearVectorGenerate.near_vector",
|
|
67
|
+
"OPERATION": "generate",
|
|
68
|
+
},
|
|
39
69
|
"weaviate.collections.create": {
|
|
40
70
|
"MODULE": WeaviateMethods.COLLECTIONS_OPERATIONS.value,
|
|
41
71
|
"METHOD": "_Collections.create",
|
|
@@ -34,7 +34,9 @@ def patch_bootstrapfewshot_optimizer(operation_name, version, tracer):
|
|
|
34
34
|
if args[0].prog:
|
|
35
35
|
prog = {
|
|
36
36
|
"name": args[0].prog.__class__.__name__,
|
|
37
|
-
"signature":
|
|
37
|
+
"signature": (
|
|
38
|
+
str(args[0].prog.signature) if args[0].prog.signature else None
|
|
39
|
+
),
|
|
38
40
|
}
|
|
39
41
|
span_attributes["dspy.optimizer.module.prog"] = json.dumps(prog)
|
|
40
42
|
if "metric" in instance and instance.metric:
|
|
@@ -60,9 +62,7 @@ def patch_bootstrapfewshot_optimizer(operation_name, version, tracer):
|
|
|
60
62
|
span_attributes["dspy.optimizer.config"] = json.dumps(config)
|
|
61
63
|
|
|
62
64
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
63
|
-
with tracer.start_as_current_span(
|
|
64
|
-
operation_name, kind=SpanKind.CLIENT
|
|
65
|
-
) as span:
|
|
65
|
+
with tracer.start_as_current_span(operation_name, kind=SpanKind.CLIENT) as span:
|
|
66
66
|
_set_input_attributes(span, kwargs, attributes)
|
|
67
67
|
|
|
68
68
|
try:
|
|
@@ -108,9 +108,7 @@ def patch_signature(operation_name, version, tracer):
|
|
|
108
108
|
span_attributes["dspy.signature.args"] = str(kwargs)
|
|
109
109
|
|
|
110
110
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
111
|
-
with tracer.start_as_current_span(
|
|
112
|
-
operation_name, kind=SpanKind.CLIENT
|
|
113
|
-
) as span:
|
|
111
|
+
with tracer.start_as_current_span(operation_name, kind=SpanKind.CLIENT) as span:
|
|
114
112
|
_set_input_attributes(span, kwargs, attributes)
|
|
115
113
|
|
|
116
114
|
try:
|
|
@@ -156,11 +154,15 @@ def patch_evaluate(operation_name, version, tracer):
|
|
|
156
154
|
if "num_threads" in instance and instance.num_threads is not None:
|
|
157
155
|
span_attributes["dspy.evaluate.num_threads"] = str(instance.num_threads)
|
|
158
156
|
if "return_outputs" in instance and instance.return_outputs is not None:
|
|
159
|
-
span_attributes["dspy.evaluate.return_outputs"] = str(
|
|
157
|
+
span_attributes["dspy.evaluate.return_outputs"] = str(
|
|
158
|
+
instance.return_outputs
|
|
159
|
+
)
|
|
160
160
|
if "display_table" in instance and instance.display_table is not None:
|
|
161
161
|
span_attributes["dspy.evaluate.display_table"] = str(instance.display_table)
|
|
162
162
|
if "display_progress" in instance and instance.display_progress is not None:
|
|
163
|
-
span_attributes["dspy.evaluate.display_progress"] = str(
|
|
163
|
+
span_attributes["dspy.evaluate.display_progress"] = str(
|
|
164
|
+
instance.display_progress
|
|
165
|
+
)
|
|
164
166
|
if "metric" in instance and instance.metric is not None:
|
|
165
167
|
span_attributes["dspy.evaluate.metric"] = instance.metric.__name__
|
|
166
168
|
if "error_count" in instance and instance.error_count is not None:
|
|
@@ -173,9 +175,7 @@ def patch_evaluate(operation_name, version, tracer):
|
|
|
173
175
|
span_attributes["dspy.evaluate.args"] = str(args)
|
|
174
176
|
|
|
175
177
|
attributes = FrameworkSpanAttributes(**span_attributes)
|
|
176
|
-
with tracer.start_as_current_span(
|
|
177
|
-
operation_name, kind=SpanKind.CLIENT
|
|
178
|
-
) as span:
|
|
178
|
+
with tracer.start_as_current_span(operation_name, kind=SpanKind.CLIENT) as span:
|
|
179
179
|
_set_input_attributes(span, kwargs, attributes)
|
|
180
180
|
|
|
181
181
|
try:
|
|
@@ -33,7 +33,8 @@ def generic_patch(operation_name, version, tracer):
|
|
|
33
33
|
"llm.model": kwargs.get("model"),
|
|
34
34
|
"llm.stream": kwargs.get("stream"),
|
|
35
35
|
"url.full": base_url,
|
|
36
|
-
"llm.api": api["
|
|
36
|
+
"llm.api": api["ENDPOINT"],
|
|
37
|
+
"llm.response_format": kwargs.get("format"),
|
|
37
38
|
**(extra_attributes if extra_attributes is not None else {}),
|
|
38
39
|
}
|
|
39
40
|
|
|
@@ -87,6 +88,10 @@ def ageneric_patch(operation_name, version, tracer):
|
|
|
87
88
|
"langtrace.version": v(LANGTRACE_SDK_NAME),
|
|
88
89
|
"llm.model": kwargs.get("model"),
|
|
89
90
|
"llm.stream": kwargs.get("stream"),
|
|
91
|
+
"llm.response_format": kwargs.get("format"),
|
|
92
|
+
"http.timeout": (
|
|
93
|
+
kwargs.get("keep_alive") if "keep_alive" in kwargs else None
|
|
94
|
+
),
|
|
90
95
|
**(extra_attributes if extra_attributes is not None else {}),
|
|
91
96
|
}
|
|
92
97
|
|
|
@@ -134,32 +139,43 @@ def _set_response_attributes(span, response):
|
|
|
134
139
|
if total_tokens > 0:
|
|
135
140
|
set_span_attribute(span, "llm.token.counts", json.dumps(usage_dict))
|
|
136
141
|
set_span_attribute(span, "llm.finish_reason", response.get("done_reason"))
|
|
137
|
-
|
|
138
142
|
if "message" in response:
|
|
139
143
|
set_span_attribute(span, "llm.responses", json.dumps([response.get("message")]))
|
|
140
144
|
|
|
141
145
|
if "response" in response:
|
|
142
146
|
set_span_attribute(
|
|
143
|
-
span,
|
|
147
|
+
span,
|
|
148
|
+
"llm.responses",
|
|
149
|
+
json.dumps([{"role": "assistant", "content": response.get("response")}]),
|
|
144
150
|
)
|
|
145
151
|
|
|
146
152
|
|
|
147
153
|
@silently_fail
|
|
148
154
|
def _set_input_attributes(span, kwargs, attributes):
|
|
155
|
+
options = kwargs.get("options")
|
|
156
|
+
|
|
149
157
|
for field, value in attributes.model_dump(by_alias=True).items():
|
|
150
158
|
set_span_attribute(span, field, value)
|
|
151
|
-
|
|
152
159
|
if "messages" in kwargs:
|
|
153
160
|
set_span_attribute(
|
|
154
161
|
span,
|
|
155
162
|
"llm.prompts",
|
|
156
|
-
json.dumps(
|
|
163
|
+
json.dumps(kwargs.get("messages", [])),
|
|
157
164
|
)
|
|
158
165
|
if "prompt" in kwargs:
|
|
159
166
|
set_span_attribute(
|
|
160
167
|
span,
|
|
161
168
|
"llm.prompts",
|
|
162
|
-
json.dumps([{"role": "user", "content": kwargs.get("prompt",
|
|
169
|
+
json.dumps([{"role": "user", "content": kwargs.get("prompt", "")}]),
|
|
170
|
+
)
|
|
171
|
+
if "options" in kwargs:
|
|
172
|
+
set_span_attribute(span, "llm.temperature", options.get("temperature"))
|
|
173
|
+
set_span_attribute(span, "llm.top_p", options.get("top_p"))
|
|
174
|
+
set_span_attribute(
|
|
175
|
+
span, "llm.frequency_penalty", options.get("frequency_penalty")
|
|
176
|
+
)
|
|
177
|
+
set_span_attribute(
|
|
178
|
+
span, "llm.presence_penalty", options.get("presence_penalty")
|
|
163
179
|
)
|
|
164
180
|
|
|
165
181
|
|
|
@@ -169,7 +185,6 @@ def _handle_streaming_response(span, response, api):
|
|
|
169
185
|
accumulated_tokens = {"message": {"content": "", "role": ""}}
|
|
170
186
|
if api == "completion":
|
|
171
187
|
accumulated_tokens = {"response": ""}
|
|
172
|
-
|
|
173
188
|
span.add_event(Event.STREAM_START.value)
|
|
174
189
|
try:
|
|
175
190
|
for chunk in response:
|
|
@@ -471,7 +471,10 @@ def chat_completions_create(original_method, version, tracer):
|
|
|
471
471
|
attributes = LLMSpanAttributes(**span_attributes)
|
|
472
472
|
|
|
473
473
|
tools = []
|
|
474
|
-
if
|
|
474
|
+
if (
|
|
475
|
+
kwargs.get("temperature") is not None
|
|
476
|
+
and kwargs.get("temperature") != NOT_GIVEN
|
|
477
|
+
):
|
|
475
478
|
attributes.llm_temperature = kwargs.get("temperature")
|
|
476
479
|
if kwargs.get("top_p") is not None and kwargs.get("top_p") != NOT_GIVEN:
|
|
477
480
|
attributes.llm_top_p = kwargs.get("top_p")
|
|
@@ -499,7 +502,11 @@ def chat_completions_create(original_method, version, tracer):
|
|
|
499
502
|
try:
|
|
500
503
|
# Attempt to call the original method
|
|
501
504
|
result = wrapped(*args, **kwargs)
|
|
502
|
-
if
|
|
505
|
+
if (
|
|
506
|
+
kwargs.get("stream") is False
|
|
507
|
+
or kwargs.get("stream") is None
|
|
508
|
+
or kwargs.get("stream") == NOT_GIVEN
|
|
509
|
+
):
|
|
503
510
|
span.set_attribute("llm.model", result.model)
|
|
504
511
|
if hasattr(result, "choices") and result.choices is not None:
|
|
505
512
|
responses = [
|
|
@@ -528,7 +535,8 @@ def chat_completions_create(original_method, version, tracer):
|
|
|
528
535
|
span.set_attribute("llm.responses", json.dumps(responses))
|
|
529
536
|
if (
|
|
530
537
|
hasattr(result, "system_fingerprint")
|
|
531
|
-
and result.system_fingerprint is not None
|
|
538
|
+
and result.system_fingerprint is not None
|
|
539
|
+
and result.system_fingerprint != NOT_GIVEN
|
|
532
540
|
):
|
|
533
541
|
span.set_attribute(
|
|
534
542
|
"llm.system.fingerprint", result.system_fingerprint
|
|
@@ -555,7 +563,10 @@ def chat_completions_create(original_method, version, tracer):
|
|
|
555
563
|
)
|
|
556
564
|
|
|
557
565
|
# iterate over kwargs.get("functions") and calculate the prompt tokens
|
|
558
|
-
if
|
|
566
|
+
if (
|
|
567
|
+
kwargs.get("functions") is not None
|
|
568
|
+
and kwargs.get("functions") != NOT_GIVEN
|
|
569
|
+
):
|
|
559
570
|
for function in kwargs.get("functions"):
|
|
560
571
|
prompt_tokens += calculate_prompt_tokens(
|
|
561
572
|
json.dumps(function), kwargs.get("model")
|
|
@@ -641,7 +652,10 @@ def async_chat_completions_create(original_method, version, tracer):
|
|
|
641
652
|
attributes = LLMSpanAttributes(**span_attributes)
|
|
642
653
|
|
|
643
654
|
tools = []
|
|
644
|
-
if
|
|
655
|
+
if (
|
|
656
|
+
kwargs.get("temperature") is not None
|
|
657
|
+
and kwargs.get("temperature") != NOT_GIVEN
|
|
658
|
+
):
|
|
645
659
|
attributes.llm_temperature = kwargs.get("temperature")
|
|
646
660
|
if kwargs.get("top_p") is not None and kwargs.get("top_p") != NOT_GIVEN:
|
|
647
661
|
attributes.llm_top_p = kwargs.get("top_p")
|
|
@@ -667,7 +681,11 @@ def async_chat_completions_create(original_method, version, tracer):
|
|
|
667
681
|
try:
|
|
668
682
|
# Attempt to call the original method
|
|
669
683
|
result = await wrapped(*args, **kwargs)
|
|
670
|
-
if
|
|
684
|
+
if (
|
|
685
|
+
kwargs.get("stream") is False
|
|
686
|
+
or kwargs.get("stream") is None
|
|
687
|
+
or kwargs.get("stream") == NOT_GIVEN
|
|
688
|
+
):
|
|
671
689
|
span.set_attribute("llm.model", result.model)
|
|
672
690
|
if hasattr(result, "choices") and result.choices is not None:
|
|
673
691
|
responses = [
|
|
@@ -696,7 +714,8 @@ def async_chat_completions_create(original_method, version, tracer):
|
|
|
696
714
|
span.set_attribute("llm.responses", json.dumps(responses))
|
|
697
715
|
if (
|
|
698
716
|
hasattr(result, "system_fingerprint")
|
|
699
|
-
and result.system_fingerprint is not None
|
|
717
|
+
and result.system_fingerprint is not None
|
|
718
|
+
and result.system_fingerprint != NOT_GIVEN
|
|
700
719
|
):
|
|
701
720
|
span.set_attribute(
|
|
702
721
|
"llm.system.fingerprint", result.system_fingerprint
|
|
@@ -723,7 +742,10 @@ def async_chat_completions_create(original_method, version, tracer):
|
|
|
723
742
|
)
|
|
724
743
|
|
|
725
744
|
# iterate over kwargs.get("functions") and calculate the prompt tokens
|
|
726
|
-
if
|
|
745
|
+
if (
|
|
746
|
+
kwargs.get("functions") is not None
|
|
747
|
+
and kwargs.get("functions") != NOT_GIVEN
|
|
748
|
+
):
|
|
727
749
|
for function in kwargs.get("functions"):
|
|
728
750
|
prompt_tokens += calculate_prompt_tokens(
|
|
729
751
|
json.dumps(function), kwargs.get("model")
|
|
@@ -45,7 +45,7 @@ class WeaviateInstrumentation(BaseInstrumentor):
|
|
|
45
45
|
version = importlib.metadata.version("weaviate-client")
|
|
46
46
|
|
|
47
47
|
for api_name, api_config in APIS.items():
|
|
48
|
-
if api_config.get("OPERATION")
|
|
48
|
+
if api_config.get("OPERATION") in ["query", "generate"]:
|
|
49
49
|
wrap_function_wrapper(
|
|
50
50
|
api_config["MODULE"],
|
|
51
51
|
api_config["METHOD"],
|
|
@@ -142,7 +142,8 @@ def create_traced_method(method_name, version, tracer, get_collection_name=None)
|
|
|
142
142
|
try:
|
|
143
143
|
# Attempt to call the original method
|
|
144
144
|
result = wrapped(*args, **kwargs)
|
|
145
|
-
|
|
145
|
+
print(result)
|
|
146
|
+
if api["OPERATION"] in ["query", "generate"]:
|
|
146
147
|
span.add_event(
|
|
147
148
|
name="db.response",
|
|
148
149
|
attributes={"db.response": aggregate_responses(result)},
|
langtrace_python_sdk/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = "2.1.
|
|
1
|
+
__version__ = "2.1.26"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: langtrace-python-sdk
|
|
3
|
-
Version: 2.1.
|
|
3
|
+
Version: 2.1.26
|
|
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>
|
|
@@ -282,11 +282,14 @@ Langtrace automatically captures traces from the following vendors:
|
|
|
282
282
|
| Cohere | LLM | :white_check_mark: | :white_check_mark: |
|
|
283
283
|
| Groq | LLM | :x: | :white_check_mark: |
|
|
284
284
|
| Langchain | Framework | :x: | :white_check_mark: |
|
|
285
|
+
| Langgraph | Framework | :x: | :white_check_mark: |
|
|
285
286
|
| LlamaIndex | Framework | :white_check_mark: | :white_check_mark: |
|
|
286
287
|
| DSPy | Framework | :x: | :white_check_mark: |
|
|
287
288
|
| CrewAI | Framework | :x: | :white_check_mark: |
|
|
289
|
+
| Ollama | Framework | :x: | :white_check_mark: |
|
|
288
290
|
| Pinecone | Vector Database | :white_check_mark: | :white_check_mark: |
|
|
289
291
|
| ChromaDB | Vector Database | :white_check_mark: | :white_check_mark: |
|
|
292
|
+
| Weaviate | Vector Database | :white_check_mark: | :white_check_mark: |
|
|
290
293
|
| QDrant | Vector Database | :x: | :white_check_mark: |
|
|
291
294
|
|
|
292
295
|
---
|
|
@@ -302,7 +305,19 @@ Langtrace automatically captures traces from the following vendors:
|
|
|
302
305
|
|
|
303
306
|
We welcome contributions to this project. To get started, fork this repository and start developing. To get involved, join our [Discord](https://discord.langtrace.ai) workspace.
|
|
304
307
|
|
|
305
|
-
If you want to run any of the examples go to `run_example.py` file, you will find `ENABLED_EXAMPLES`. choose the example you want to run and just toggle the flag to `True` and run the file using `python src/run_example.py`
|
|
308
|
+
- If you want to run any of the examples go to `run_example.py` file, you will find `ENABLED_EXAMPLES`. choose the example you want to run and just toggle the flag to `True` and run the file using `python src/run_example.py`
|
|
309
|
+
|
|
310
|
+
- If you want to run tests, make sure to install dev & test dependencies:
|
|
311
|
+
|
|
312
|
+
```python
|
|
313
|
+
pip install '.[test]' && pip install '.[dev]'
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
then run `pytest` using:
|
|
317
|
+
|
|
318
|
+
```python
|
|
319
|
+
pytest -v
|
|
320
|
+
```
|
|
306
321
|
|
|
307
322
|
---
|
|
308
323
|
|
|
@@ -13,7 +13,7 @@ examples/crewai_example/basic.py,sha256=PBu4f8yQfZO1L_22UDm_ReU9lnEcycjZcGuy5Upg
|
|
|
13
13
|
examples/dspy_example/math_problems_cot.py,sha256=Z98nB6myt8WJse2dWS6Ap7CFUhC27lBNb37R1Gg80VQ,1282
|
|
14
14
|
examples/dspy_example/program_of_thought_basic.py,sha256=oEbtJdeKENMUbex25-zyStWwurRWW6OdP0KDs-jUkko,984
|
|
15
15
|
examples/dspy_example/quiz_gen.py,sha256=OyGhepeX8meKOtLdmlYUjMD2ECk-ZQuQXUZif1hFQY4,3371
|
|
16
|
-
examples/dspy_example/react.py,sha256=
|
|
16
|
+
examples/dspy_example/react.py,sha256=APAnHqgy9w-qY5jnPD_WbBx6bwo9C-DhPnUuhL-t7sg,1376
|
|
17
17
|
examples/fastapi_example/__init__.py,sha256=INIfvJP7zC_KkJCtulS1qbh61-MJTPAHnzAgzeKi0yU,87
|
|
18
18
|
examples/fastapi_example/basic_route.py,sha256=_IRXjkOtJQ-bTIGa1WbvUF_2LF4bjghjyXt4YrHaRvw,1170
|
|
19
19
|
examples/hiveagent_example/basic.py,sha256=Sd7I5w8w5Xx7ODaydTY30yiq9HwJDMKHQywrZjgehP0,441
|
|
@@ -48,10 +48,10 @@ examples/pinecone_example/basic.py,sha256=5MoHZMBxHMdC61oj-CP19gj9SxSvIcDrQL934J
|
|
|
48
48
|
examples/qdrant_example/__init__.py,sha256=Ze9xEzW8FiHUO58YBa8JeHNOwcmo3dpYH77AkdyglKU,197
|
|
49
49
|
examples/qdrant_example/basic.py,sha256=DCMjHSuBZKkhEjCkwy5d5La9WMyW0lCWqtcZWiFCEm4,1425
|
|
50
50
|
examples/weaviate_example/__init__.py,sha256=8JMDBsRSEV10HfTd-YC7xb4txBjD3la56snk-Bbg2Kw,618
|
|
51
|
-
examples/weaviate_example/query_text.py,sha256=
|
|
51
|
+
examples/weaviate_example/query_text.py,sha256=sG8O-bXQpflBAiYpgE_M2X7GcHUlZNgl_wJW8_h-W6Q,127024
|
|
52
52
|
langtrace_python_sdk/__init__.py,sha256=VZM6i71NR7pBQK6XvJWRelknuTYUhqwqE7PlicKa5Wg,1166
|
|
53
53
|
langtrace_python_sdk/langtrace.py,sha256=pG_dWzzQxUP8r5SAMUwRScb6IopINcda1CZvJERjXBo,7486
|
|
54
|
-
langtrace_python_sdk/version.py,sha256=
|
|
54
|
+
langtrace_python_sdk/version.py,sha256=kDsQujSOEts9DhAOHBOlEjAEDf0lqYMUYrA9xzjlvh0,23
|
|
55
55
|
langtrace_python_sdk/constants/__init__.py,sha256=P8QvYwt5czUNDZsKS64vxm9Dc41ptGbuF1TFtAF6nv4,44
|
|
56
56
|
langtrace_python_sdk/constants/exporter/langtrace_exporter.py,sha256=5MNjnAOg-4am78J3gVMH6FSwq5N8TOj72ugkhsw4vi0,46
|
|
57
57
|
langtrace_python_sdk/constants/instrumentation/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -60,11 +60,11 @@ langtrace_python_sdk/constants/instrumentation/chroma.py,sha256=hiPGYdHS0Yj4Kh3e
|
|
|
60
60
|
langtrace_python_sdk/constants/instrumentation/cohere.py,sha256=tf9sDfb5K3qOAHChEE5o8eYWPZ1io58VsOjZDCZPxfw,577
|
|
61
61
|
langtrace_python_sdk/constants/instrumentation/common.py,sha256=KodH_uGGjWGGP8rqTi7Ua-osjUwtPKslx69DJRbDiT4,850
|
|
62
62
|
langtrace_python_sdk/constants/instrumentation/groq.py,sha256=VFXmIl4aqGY_fS0PAmjPj_Qm7Tibxbx7Ur_e7rQpqXc,134
|
|
63
|
-
langtrace_python_sdk/constants/instrumentation/ollama.py,sha256=
|
|
63
|
+
langtrace_python_sdk/constants/instrumentation/ollama.py,sha256=H_-S0xjqRsi5qSp7mAlK7Y9NlQ3BqOkG6ASogqqgdJY,212
|
|
64
64
|
langtrace_python_sdk/constants/instrumentation/openai.py,sha256=uEOH5UXapU2DSf2AdgXTRhhJEHGWXUNFkUGD5QafflM,1164
|
|
65
65
|
langtrace_python_sdk/constants/instrumentation/pinecone.py,sha256=0TityERbGWaHGSN8-vyYZtYCjVj8fQOKae8lng0O0Bk,478
|
|
66
66
|
langtrace_python_sdk/constants/instrumentation/qdrant.py,sha256=yL7BopNQTXW7L7Z-gVM2PdusKD7r9qqcATvczFd7NtQ,1999
|
|
67
|
-
langtrace_python_sdk/constants/instrumentation/weaviate.py,sha256=
|
|
67
|
+
langtrace_python_sdk/constants/instrumentation/weaviate.py,sha256=gtv-JBxvNGClEMxClmRKzjJ1khgOonsli4D_k9IagSE,2601
|
|
68
68
|
langtrace_python_sdk/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
69
69
|
langtrace_python_sdk/extensions/langtrace_exporter.py,sha256=gWVRU2DlB4xjZ4ww7M63DaLiAN5zQ2k1HPrythmjEdo,4202
|
|
70
70
|
langtrace_python_sdk/extensions/langtrace_filesystem.py,sha256=qpnkpkuTZ2yhGgpBK64QJLt0T1iL-1zpEMPz4quJ_ng,6925
|
|
@@ -83,7 +83,7 @@ langtrace_python_sdk/instrumentation/crewai/instrumentation.py,sha256=W8PLTLzgEd
|
|
|
83
83
|
langtrace_python_sdk/instrumentation/crewai/patch.py,sha256=Vnpip9Pbk4UFbTFHoUrHtAnDgsaihwSvZBgtUeOtLr8,6109
|
|
84
84
|
langtrace_python_sdk/instrumentation/dspy/__init__.py,sha256=tM1srfi_QgyCzrde4izojMrRq2Wm7Dj5QUvVQXIJzkk,84
|
|
85
85
|
langtrace_python_sdk/instrumentation/dspy/instrumentation.py,sha256=Y-_qcH5jCT4TbGvci6Iw0_OWUUlCmovMxnysj6NCnXI,2923
|
|
86
|
-
langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=
|
|
86
|
+
langtrace_python_sdk/instrumentation/dspy/patch.py,sha256=EI1iTgKzwtCyQrzBSyPIjzhiQUVl5jfFDtodXXe5BjA,9258
|
|
87
87
|
langtrace_python_sdk/instrumentation/groq/__init__.py,sha256=ZXeq_nrej6Lm_uoMFEg8wbSejhjB2UJ5IoHQBPc2-C0,91
|
|
88
88
|
langtrace_python_sdk/instrumentation/groq/instrumentation.py,sha256=Ttf07XVKhdYY1_fqJc7QWiSdmgEhEVyQB_3Az2_wqYo,1832
|
|
89
89
|
langtrace_python_sdk/instrumentation/groq/patch.py,sha256=EKH9tjoDbwWavIAwUadaR5tFiy-S69h1IxxzH_1SSRg,26354
|
|
@@ -104,10 +104,10 @@ langtrace_python_sdk/instrumentation/llamaindex/instrumentation.py,sha256=8iAg-O
|
|
|
104
104
|
langtrace_python_sdk/instrumentation/llamaindex/patch.py,sha256=OGk7ps438gW49zvJQCDp7ZmkQnFxouAUu2PvHbmcAP8,4496
|
|
105
105
|
langtrace_python_sdk/instrumentation/ollama/__init__.py,sha256=g2zJsXnDHinXPzTc-WxDeTtHmr9gmAj3K6l_00kP8c8,82
|
|
106
106
|
langtrace_python_sdk/instrumentation/ollama/instrumentation.py,sha256=jdsvkqUJAAUNLVPtAkn_rG26HXetVQXWtjn4a6eWZro,2029
|
|
107
|
-
langtrace_python_sdk/instrumentation/ollama/patch.py,sha256=
|
|
107
|
+
langtrace_python_sdk/instrumentation/ollama/patch.py,sha256=uzoc2M-Vj-wEnjYBiiR8lg1s9teqMz6bG4iS6s1_QiQ,8639
|
|
108
108
|
langtrace_python_sdk/instrumentation/openai/__init__.py,sha256=VPHRNCQEdkizIVP2d0Uw_a7t8XOTSTprEIB8oboJFbs,95
|
|
109
109
|
langtrace_python_sdk/instrumentation/openai/instrumentation.py,sha256=A0BJHRLcZ74TNVg6I0I9M5YWvSpAtXwMmME6N5CEQ_M,2945
|
|
110
|
-
langtrace_python_sdk/instrumentation/openai/patch.py,sha256
|
|
110
|
+
langtrace_python_sdk/instrumentation/openai/patch.py,sha256=MJGxa7w5FyGNf4PA4VpnhcO0D2HOHjY8YcroziSAXhE,38341
|
|
111
111
|
langtrace_python_sdk/instrumentation/pinecone/__init__.py,sha256=DzXyGh9_MGWveJvXULkFwdkf7PbG2s3bAWtT1Dmz7Ok,99
|
|
112
112
|
langtrace_python_sdk/instrumentation/pinecone/instrumentation.py,sha256=HDXkRITrVPwdQEoOYJOfMzZE_2-vDDvuqHTlD8W1lQw,1845
|
|
113
113
|
langtrace_python_sdk/instrumentation/pinecone/patch.py,sha256=KiIRRz8kk47FllFT746Cb_w6F6M60AN_pcsguD979E4,5172
|
|
@@ -115,8 +115,8 @@ langtrace_python_sdk/instrumentation/qdrant/__init__.py,sha256=TaIGSAEPysrL23KJ5
|
|
|
115
115
|
langtrace_python_sdk/instrumentation/qdrant/instrumentation.py,sha256=vl2eKSP55aqDo1JiRlvOUBrr6kddvG9Z5dCYew2OG08,1816
|
|
116
116
|
langtrace_python_sdk/instrumentation/qdrant/patch.py,sha256=RhEHQxN7PJN0DjoC656Sw3GeYrJzHhp1bSky8rqOE5o,4948
|
|
117
117
|
langtrace_python_sdk/instrumentation/weaviate/__init__.py,sha256=Mc-Je6evPo-kKQzerTG7bd1XO5JOh4YGTE3wBxaUBwg,99
|
|
118
|
-
langtrace_python_sdk/instrumentation/weaviate/instrumentation.py,sha256=
|
|
119
|
-
langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=
|
|
118
|
+
langtrace_python_sdk/instrumentation/weaviate/instrumentation.py,sha256=oWLCnh5_Nuw8bKpXJW6Zo-PpI_kJ7q2nA4BImnZ7YqY,2295
|
|
119
|
+
langtrace_python_sdk/instrumentation/weaviate/patch.py,sha256=rRD6WfQcNGYpw9teoCkGPCZkzolG0h-mZdPGNKkgE10,5971
|
|
120
120
|
langtrace_python_sdk/types/__init__.py,sha256=KDW6S74FDxpeBa9xoH5zVEYfmRjccCCHzlW7lTJg1TA,3194
|
|
121
121
|
langtrace_python_sdk/utils/__init__.py,sha256=E0nQyBE-4O_GR2PM9y_l7shx4hJLo5xRThR_LMx97M0,278
|
|
122
122
|
langtrace_python_sdk/utils/langtrace_sampler.py,sha256=BupNndHbU9IL_wGleKetz8FdcveqHMBVz1bfKTTW80w,1753
|
|
@@ -163,8 +163,8 @@ tests/pinecone/cassettes/test_query.yaml,sha256=b5v9G3ssUy00oG63PlFUR3JErF2Js-5A
|
|
|
163
163
|
tests/pinecone/cassettes/test_upsert.yaml,sha256=neWmQ1v3d03V8WoLl8FoFeeCYImb8pxlJBWnFd_lITU,38607
|
|
164
164
|
tests/qdrant/conftest.py,sha256=9n0uHxxIjWk9fbYc4bx-uP8lSAgLBVx-cV9UjnsyCHM,381
|
|
165
165
|
tests/qdrant/test_qdrant.py,sha256=pzjAjVY2kmsmGfrI2Gs2xrolfuaNHz7l1fqGQCjp5_o,3353
|
|
166
|
-
langtrace_python_sdk-2.1.
|
|
167
|
-
langtrace_python_sdk-2.1.
|
|
168
|
-
langtrace_python_sdk-2.1.
|
|
169
|
-
langtrace_python_sdk-2.1.
|
|
170
|
-
langtrace_python_sdk-2.1.
|
|
166
|
+
langtrace_python_sdk-2.1.26.dist-info/METADATA,sha256=YNNbDWGqNpHo-uWbngCA_l7MUhQd6brocjtLbWvGuio,13749
|
|
167
|
+
langtrace_python_sdk-2.1.26.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
168
|
+
langtrace_python_sdk-2.1.26.dist-info/entry_points.txt,sha256=1_b9-qvf2fE7uQNZcbUei9vLpFZBbbh9LrtGw95ssAo,70
|
|
169
|
+
langtrace_python_sdk-2.1.26.dist-info/licenses/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
|
170
|
+
langtrace_python_sdk-2.1.26.dist-info/RECORD,,
|
|
File without changes
|
{langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{langtrace_python_sdk-2.1.24.dist-info → langtrace_python_sdk-2.1.26.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|