lmnr 0.4.36__py3-none-any.whl → 0.4.37__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.
- lmnr/__init__.py +2 -2
- lmnr/{traceloop_sdk → openllmetry_sdk}/__init__.py +3 -3
- lmnr/{traceloop_sdk → openllmetry_sdk}/decorators/base.py +4 -4
- lmnr/openllmetry_sdk/tracing/__init__.py +1 -0
- lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/context_manager.py +1 -1
- lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/tracing.py +61 -47
- lmnr/sdk/decorators.py +3 -3
- lmnr/sdk/evaluations.py +2 -2
- lmnr/sdk/laminar.py +7 -7
- {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/METADATA +2 -2
- lmnr-0.4.37.dist-info/RECORD +32 -0
- lmnr/traceloop_sdk/tests/__init__.py +0 -1
- lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_and_external_association_properties.yaml +0 -101
- lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_association_properties.yaml +0 -99
- lmnr/traceloop_sdk/tests/cassettes/test_manual/test_manual_report.yaml +0 -98
- lmnr/traceloop_sdk/tests/cassettes/test_manual/test_resource_attributes.yaml +0 -98
- lmnr/traceloop_sdk/tests/cassettes/test_privacy_no_prompts/test_simple_workflow.yaml +0 -199
- lmnr/traceloop_sdk/tests/cassettes/test_prompt_management/test_prompt_management.yaml +0 -202
- lmnr/traceloop_sdk/tests/cassettes/test_sdk_initialization/test_resource_attributes.yaml +0 -199
- lmnr/traceloop_sdk/tests/cassettes/test_tasks/test_task_io_serialization_with_langchain.yaml +0 -96
- lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_aworkflow.yaml +0 -98
- lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_workflow.yaml +0 -199
- lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_streaming_workflow.yaml +0 -167
- lmnr/traceloop_sdk/tests/conftest.py +0 -111
- lmnr/traceloop_sdk/tests/test_association_properties.py +0 -229
- lmnr/traceloop_sdk/tests/test_manual.py +0 -48
- lmnr/traceloop_sdk/tests/test_nested_tasks.py +0 -47
- lmnr/traceloop_sdk/tests/test_privacy_no_prompts.py +0 -50
- lmnr/traceloop_sdk/tests/test_sdk_initialization.py +0 -57
- lmnr/traceloop_sdk/tests/test_tasks.py +0 -32
- lmnr/traceloop_sdk/tests/test_workflows.py +0 -262
- lmnr/traceloop_sdk/tracing/__init__.py +0 -1
- lmnr-0.4.36.dist-info/RECORD +0 -52
- /lmnr/{traceloop_sdk → openllmetry_sdk}/.flake8 +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/.python-version +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/config/__init__.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/decorators/__init__.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/instruments.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/attributes.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/content_allow_list.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/__init__.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/in_memory_span_exporter.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/json_encoder.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/package_check.py +0 -0
- /lmnr/{traceloop_sdk → openllmetry_sdk}/version.py +0 -0
- {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/LICENSE +0 -0
- {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/WHEEL +0 -0
- {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/entry_points.txt +0 -0
@@ -1,57 +0,0 @@
|
|
1
|
-
# import pytest
|
2
|
-
# from openai import OpenAI
|
3
|
-
# from lmnr.traceloop_sdk.decorators import workflow
|
4
|
-
|
5
|
-
|
6
|
-
# @pytest.fixture
|
7
|
-
# def openai_client():
|
8
|
-
# return OpenAI()
|
9
|
-
|
10
|
-
|
11
|
-
# @pytest.mark.vcr
|
12
|
-
# def test_resource_attributes(exporter, openai_client):
|
13
|
-
# openai_client.chat.completions.create(
|
14
|
-
# model="gpt-3.5-turbo",
|
15
|
-
# messages=[{"role": "user", "content": "Tell me a joke about opentelemetry"}],
|
16
|
-
# )
|
17
|
-
|
18
|
-
# spans = exporter.get_finished_spans()
|
19
|
-
# open_ai_span = spans[0]
|
20
|
-
# assert open_ai_span.resource.attributes["something"] == "yes"
|
21
|
-
# assert open_ai_span.resource.attributes["service.name"] == "test"
|
22
|
-
|
23
|
-
|
24
|
-
# def test_custom_span_processor(exporter_with_custom_span_processor):
|
25
|
-
# @workflow()
|
26
|
-
# def run_workflow():
|
27
|
-
# pass
|
28
|
-
|
29
|
-
# run_workflow()
|
30
|
-
|
31
|
-
# spans = exporter_with_custom_span_processor.get_finished_spans()
|
32
|
-
# workflow_span = spans[0]
|
33
|
-
# assert workflow_span.attributes["custom_span"] == "yes"
|
34
|
-
|
35
|
-
|
36
|
-
# def test_instruments(exporter_with_custom_instrumentations):
|
37
|
-
# @workflow()
|
38
|
-
# def run_workflow():
|
39
|
-
# pass
|
40
|
-
|
41
|
-
# run_workflow()
|
42
|
-
|
43
|
-
# spans = exporter_with_custom_instrumentations.get_finished_spans()
|
44
|
-
# workflow_span = spans[0]
|
45
|
-
# assert workflow_span
|
46
|
-
|
47
|
-
|
48
|
-
# def test_no_metrics(exporter_with_no_metrics):
|
49
|
-
# @workflow()
|
50
|
-
# def run_workflow():
|
51
|
-
# pass
|
52
|
-
|
53
|
-
# run_workflow()
|
54
|
-
|
55
|
-
# spans = exporter_with_no_metrics.get_finished_spans()
|
56
|
-
# workflow_span = spans[0]
|
57
|
-
# assert workflow_span
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# import json
|
2
|
-
# import pytest
|
3
|
-
|
4
|
-
# from langchain_openai import ChatOpenAI
|
5
|
-
# from lmnr.traceloop_sdk.decorators import task
|
6
|
-
# from opentelemetry.semconv_ai import SpanAttributes
|
7
|
-
|
8
|
-
|
9
|
-
# @pytest.mark.vcr
|
10
|
-
# def test_task_io_serialization_with_langchain(exporter):
|
11
|
-
# @task(name="answer_question")
|
12
|
-
# def answer_question():
|
13
|
-
# chat = ChatOpenAI(temperature=0)
|
14
|
-
|
15
|
-
# return chat.invoke("Is Berlin the capital of Germany? Answer with yes or no")
|
16
|
-
|
17
|
-
# answer_question()
|
18
|
-
|
19
|
-
# spans = exporter.get_finished_spans()
|
20
|
-
|
21
|
-
# assert [span.name for span in spans] == [
|
22
|
-
# "ChatOpenAI.chat",
|
23
|
-
# "answer_question.task",
|
24
|
-
# ]
|
25
|
-
|
26
|
-
# task_span = next(span for span in spans if span.name == "answer_question.task")
|
27
|
-
# assert (
|
28
|
-
# json.loads(task_span.attributes.get(SpanAttributes.TRACELOOP_ENTITY_OUTPUT))[
|
29
|
-
# "kwargs"
|
30
|
-
# ]["content"]
|
31
|
-
# == "Yes"
|
32
|
-
# )
|
@@ -1,262 +0,0 @@
|
|
1
|
-
# import json
|
2
|
-
|
3
|
-
# import pytest
|
4
|
-
# from openai import OpenAI, AsyncOpenAI
|
5
|
-
# from opentelemetry.semconv_ai import SpanAttributes
|
6
|
-
# from lmnr.traceloop_sdk import Traceloop
|
7
|
-
# from lmnr.traceloop_sdk.decorators import workflow, task, aworkflow, atask
|
8
|
-
|
9
|
-
|
10
|
-
# @pytest.fixture
|
11
|
-
# def openai_client():
|
12
|
-
# return OpenAI()
|
13
|
-
|
14
|
-
|
15
|
-
# @pytest.fixture
|
16
|
-
# def async_openai_client():
|
17
|
-
# return AsyncOpenAI()
|
18
|
-
|
19
|
-
|
20
|
-
# # commented out because of the version parameter in task decorator
|
21
|
-
# # @pytest.mark.vcr
|
22
|
-
# # def test_simple_workflow(exporter, openai_client):
|
23
|
-
# # @task(name="something_creator", version=2)
|
24
|
-
# # def create_something(what: str, subject: str):
|
25
|
-
# # Traceloop.set_prompt(
|
26
|
-
# # "Tell me a {what} about {subject}", {"what": what, "subject": subject}, 5
|
27
|
-
# # )
|
28
|
-
# # completion = openai_client.chat.completions.create(
|
29
|
-
# # model="gpt-3.5-turbo",
|
30
|
-
# # messages=[{"role": "user", "content": f"Tell me a {what} about {subject}"}],
|
31
|
-
# # )
|
32
|
-
# # return completion.choices[0].message.content
|
33
|
-
|
34
|
-
# # @workflow(name="pirate_joke_generator", version=1)
|
35
|
-
# # def joke_workflow():
|
36
|
-
# # return create_something("joke", subject="OpenTelemetry")
|
37
|
-
|
38
|
-
# # joke = joke_workflow()
|
39
|
-
|
40
|
-
# # spans = exporter.get_finished_spans()
|
41
|
-
# # assert [span.name for span in spans] == [
|
42
|
-
# # "openai.chat",
|
43
|
-
# # "something_creator.task",
|
44
|
-
# # "pirate_joke_generator.workflow",
|
45
|
-
# # ]
|
46
|
-
# # open_ai_span = next(span for span in spans if span.name == "openai.chat")
|
47
|
-
# # assert (
|
48
|
-
# # open_ai_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"]
|
49
|
-
# # == "Tell me a joke about OpenTelemetry"
|
50
|
-
# # )
|
51
|
-
# # assert open_ai_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content")
|
52
|
-
# # assert (
|
53
|
-
# # open_ai_span.attributes.get("traceloop.prompt.template")
|
54
|
-
# # == "Tell me a {what} about {subject}"
|
55
|
-
# # )
|
56
|
-
# # assert (
|
57
|
-
# # open_ai_span.attributes.get("traceloop.prompt.template_variables.what")
|
58
|
-
# # == "joke"
|
59
|
-
# # )
|
60
|
-
# # assert (
|
61
|
-
# # open_ai_span.attributes.get("traceloop.prompt.template_variables.subject")
|
62
|
-
# # == "OpenTelemetry"
|
63
|
-
# # )
|
64
|
-
# # assert open_ai_span.attributes.get("traceloop.prompt.version") == 5
|
65
|
-
|
66
|
-
# # workflow_span = next(
|
67
|
-
# # span for span in spans if span.name == "pirate_joke_generator.workflow"
|
68
|
-
# # )
|
69
|
-
# # task_span = next(span for span in spans if span.name == "something_creator.task")
|
70
|
-
# # assert json.loads(task_span.attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT]) == {
|
71
|
-
# # "args": ["joke"],
|
72
|
-
# # "kwargs": {"subject": "OpenTelemetry"},
|
73
|
-
# # }
|
74
|
-
|
75
|
-
# # assert (
|
76
|
-
# # json.loads(task_span.attributes.get(SpanAttributes.TRACELOOP_ENTITY_OUTPUT))
|
77
|
-
# # == joke
|
78
|
-
# # )
|
79
|
-
# # assert task_span.parent.span_id == workflow_span.context.span_id
|
80
|
-
# # assert (
|
81
|
-
# # workflow_span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME]
|
82
|
-
# # == "pirate_joke_generator"
|
83
|
-
# # )
|
84
|
-
# # assert workflow_span.attributes[SpanAttributes.TRACELOOP_ENTITY_VERSION] == 1
|
85
|
-
# # assert task_span.attributes[SpanAttributes.TRACELOOP_ENTITY_VERSION] == 2
|
86
|
-
|
87
|
-
|
88
|
-
# @pytest.mark.vcr
|
89
|
-
# @pytest.mark.asyncio
|
90
|
-
# async def test_simple_aworkflow(exporter, async_openai_client):
|
91
|
-
# @atask(name="something_creator", version=2)
|
92
|
-
# async def create_something(what: str, subject: str):
|
93
|
-
# Traceloop.set_prompt(
|
94
|
-
# "Tell me a {what} about {subject}", {"what": what, "subject": subject}, 5
|
95
|
-
# )
|
96
|
-
# completion = await async_openai_client.chat.completions.create(
|
97
|
-
# model="gpt-3.5-turbo",
|
98
|
-
# messages=[{"role": "user", "content": f"Tell me a {what} about {subject}"}],
|
99
|
-
# )
|
100
|
-
# return completion.choices[0].message.content
|
101
|
-
|
102
|
-
# @aworkflow(name="pirate_joke_generator", version=1)
|
103
|
-
# async def joke_workflow():
|
104
|
-
# return await create_something("joke", subject="OpenTelemetry")
|
105
|
-
|
106
|
-
# joke = await joke_workflow()
|
107
|
-
|
108
|
-
# spans = exporter.get_finished_spans()
|
109
|
-
# assert [span.name for span in spans] == [
|
110
|
-
# "openai.chat",
|
111
|
-
# "something_creator.task",
|
112
|
-
# "pirate_joke_generator.workflow",
|
113
|
-
# ]
|
114
|
-
# open_ai_span = next(span for span in spans if span.name == "openai.chat")
|
115
|
-
# assert (
|
116
|
-
# open_ai_span.attributes[f"{SpanAttributes.LLM_PROMPTS}.0.content"]
|
117
|
-
# == "Tell me a joke about OpenTelemetry"
|
118
|
-
# )
|
119
|
-
# assert open_ai_span.attributes.get(f"{SpanAttributes.LLM_COMPLETIONS}.0.content")
|
120
|
-
# assert (
|
121
|
-
# open_ai_span.attributes.get("traceloop.prompt.template")
|
122
|
-
# == "Tell me a {what} about {subject}"
|
123
|
-
# )
|
124
|
-
# assert (
|
125
|
-
# open_ai_span.attributes.get("traceloop.prompt.template_variables.what")
|
126
|
-
# == "joke"
|
127
|
-
# )
|
128
|
-
# assert (
|
129
|
-
# open_ai_span.attributes.get("traceloop.prompt.template_variables.subject")
|
130
|
-
# == "OpenTelemetry"
|
131
|
-
# )
|
132
|
-
# assert open_ai_span.attributes.get("traceloop.prompt.version") == 5
|
133
|
-
|
134
|
-
# workflow_span = next(
|
135
|
-
# span for span in spans if span.name == "pirate_joke_generator.workflow"
|
136
|
-
# )
|
137
|
-
# task_span = next(span for span in spans if span.name == "something_creator.task")
|
138
|
-
# assert json.loads(task_span.attributes[SpanAttributes.TRACELOOP_ENTITY_INPUT]) == {
|
139
|
-
# "args": ["joke"],
|
140
|
-
# "kwargs": {"subject": "OpenTelemetry"},
|
141
|
-
# }
|
142
|
-
|
143
|
-
# assert (
|
144
|
-
# json.loads(task_span.attributes.get(SpanAttributes.TRACELOOP_ENTITY_OUTPUT))
|
145
|
-
# == joke
|
146
|
-
# )
|
147
|
-
# assert task_span.parent.span_id == workflow_span.context.span_id
|
148
|
-
# assert (
|
149
|
-
# workflow_span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME]
|
150
|
-
# == "pirate_joke_generator"
|
151
|
-
# )
|
152
|
-
# assert workflow_span.attributes[SpanAttributes.TRACELOOP_ENTITY_VERSION] == 1
|
153
|
-
# assert task_span.attributes[SpanAttributes.TRACELOOP_ENTITY_VERSION] == 2
|
154
|
-
|
155
|
-
|
156
|
-
# @pytest.mark.vcr
|
157
|
-
# def test_streaming_workflow(exporter, openai_client):
|
158
|
-
|
159
|
-
# @task(name="pirate_joke_generator")
|
160
|
-
# def joke_task():
|
161
|
-
# response_stream = openai_client.chat.completions.create(
|
162
|
-
# model="gpt-3.5-turbo",
|
163
|
-
# messages=[
|
164
|
-
# {"role": "user", "content": "Tell me a joke about OpenTelemetry"}
|
165
|
-
# ],
|
166
|
-
# stream=True,
|
167
|
-
# )
|
168
|
-
# for chunk in response_stream:
|
169
|
-
# yield chunk
|
170
|
-
|
171
|
-
# @task(name="joke_runner")
|
172
|
-
# def joke_runner():
|
173
|
-
# res = joke_task()
|
174
|
-
# return res
|
175
|
-
|
176
|
-
# @workflow(name="joke_manager")
|
177
|
-
# def joke_workflow():
|
178
|
-
# res = joke_runner()
|
179
|
-
# for chunk in res:
|
180
|
-
# pass
|
181
|
-
|
182
|
-
# joke_workflow()
|
183
|
-
|
184
|
-
# spans = exporter.get_finished_spans()
|
185
|
-
# assert set([span.name for span in spans]) == set(
|
186
|
-
# [
|
187
|
-
# "openai.chat",
|
188
|
-
# "pirate_joke_generator.task",
|
189
|
-
# "joke_runner.task",
|
190
|
-
# "joke_manager.workflow",
|
191
|
-
# ]
|
192
|
-
# )
|
193
|
-
# generator_span = next(
|
194
|
-
# span for span in spans if span.name == "pirate_joke_generator.task"
|
195
|
-
# )
|
196
|
-
# runner_span = next(span for span in spans if span.name == "joke_runner.task")
|
197
|
-
# manager_span = next(span for span in spans if span.name == "joke_manager.workflow")
|
198
|
-
# openai_span = next(span for span in spans if span.name == "openai.chat")
|
199
|
-
|
200
|
-
# assert openai_span.parent.span_id == generator_span.context.span_id
|
201
|
-
# assert generator_span.parent.span_id == runner_span.context.span_id
|
202
|
-
# assert runner_span.parent.span_id == manager_span.context.span_id
|
203
|
-
# assert openai_span.end_time <= manager_span.end_time
|
204
|
-
|
205
|
-
|
206
|
-
# def test_unrelated_entities(exporter):
|
207
|
-
# @workflow(name="workflow_1")
|
208
|
-
# def workflow_1():
|
209
|
-
# return
|
210
|
-
|
211
|
-
# @task(name="task_1")
|
212
|
-
# def task_1():
|
213
|
-
# return
|
214
|
-
|
215
|
-
# workflow_1()
|
216
|
-
# task_1()
|
217
|
-
|
218
|
-
# spans = exporter.get_finished_spans()
|
219
|
-
# assert [span.name for span in spans] == ["workflow_1.workflow", "task_1.task"]
|
220
|
-
|
221
|
-
# workflow_1_span = spans[0]
|
222
|
-
# task_1_span = spans[1]
|
223
|
-
|
224
|
-
# assert (
|
225
|
-
# workflow_1_span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] == "workflow_1"
|
226
|
-
# )
|
227
|
-
# assert workflow_1_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] == "workflow"
|
228
|
-
|
229
|
-
# assert task_1_span.attributes[SpanAttributes.TRACELOOP_ENTITY_NAME] == "task_1"
|
230
|
-
# assert task_1_span.attributes[SpanAttributes.TRACELOOP_SPAN_KIND] == "task"
|
231
|
-
# assert task_1_span.parent is None
|
232
|
-
|
233
|
-
|
234
|
-
# def test_unserializable_workflow(exporter):
|
235
|
-
# @task(name="unserializable_task")
|
236
|
-
# def unserializable_task(obj: object):
|
237
|
-
# return object()
|
238
|
-
|
239
|
-
# @workflow(name="unserializable_workflow")
|
240
|
-
# def unserializable_workflow(obj: object):
|
241
|
-
# return unserializable_task(obj)
|
242
|
-
|
243
|
-
# unserializable_task(object())
|
244
|
-
|
245
|
-
# spans = exporter.get_finished_spans()
|
246
|
-
# assert [span.name for span in spans] == ["unserializable_task.task"]
|
247
|
-
|
248
|
-
|
249
|
-
# @pytest.mark.asyncio
|
250
|
-
# async def test_unserializable_async_workflow(exporter):
|
251
|
-
# @atask(name="unserializable_task")
|
252
|
-
# async def unserializable_task(obj: object):
|
253
|
-
# return object()
|
254
|
-
|
255
|
-
# @aworkflow(name="unserializable_workflow")
|
256
|
-
# async def unserializable_workflow(obj: object):
|
257
|
-
# return await unserializable_task(obj)
|
258
|
-
|
259
|
-
# await unserializable_task(object())
|
260
|
-
|
261
|
-
# spans = exporter.get_finished_spans()
|
262
|
-
# assert [span.name for span in spans] == ["unserializable_task.task"]
|
@@ -1 +0,0 @@
|
|
1
|
-
from lmnr.traceloop_sdk.tracing.context_manager import get_tracer
|
lmnr-0.4.36.dist-info/RECORD
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
lmnr/__init__.py,sha256=bIkXw003GaigTxNfGE_gwVtTDGdSdAPUr6CS_nN51oA,430
|
2
|
-
lmnr/cli.py,sha256=Ptvm5dsNLKUY5lwnN8XkT5GtCYjzpRNi2WvefknB3OQ,1079
|
3
|
-
lmnr/sdk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
|
-
lmnr/sdk/datasets.py,sha256=w8U9E6fvetAo65Cb2CbYzlfhY8CfXAR-VysrakG6-4I,1591
|
5
|
-
lmnr/sdk/decorators.py,sha256=ZSDaEZyjo-RUzRCltsNbe6x0t9SKl2xRQ2q4uaKvXtk,2250
|
6
|
-
lmnr/sdk/evaluations.py,sha256=5Vfyp0aIjuGpqfuM3cqsaaLpcoO7z6lcOOKxnyHCNHk,16264
|
7
|
-
lmnr/sdk/laminar.py,sha256=r8X5SNHr3hvF3VIFRH5HhEzqdi4D6ZsXpv5WyMtPy3c,27429
|
8
|
-
lmnr/sdk/log.py,sha256=cZBeUoSK39LMEV-X4-eEhTWOciULRfHaKfRK8YqIM8I,1532
|
9
|
-
lmnr/sdk/types.py,sha256=qGD1tkGszd-_sZJaZ_Zx9U_CdUYzoDkUeN2g-o48Gls,5588
|
10
|
-
lmnr/sdk/utils.py,sha256=Uk8y15x-sd5tP2ERONahElLDJVEy_3dA_1_5g9A6auY,3358
|
11
|
-
lmnr/traceloop_sdk/.flake8,sha256=bCxuDlGx3YQ55QHKPiGJkncHanh9qGjQJUujcFa3lAU,150
|
12
|
-
lmnr/traceloop_sdk/.python-version,sha256=9OLQBQVbD4zE4cJsPePhnAfV_snrPSoqEQw-PXgPMOs,6
|
13
|
-
lmnr/traceloop_sdk/__init__.py,sha256=AVTqhuom40hx34zNB8TvqtfPliKYo7EGi08fw3Rs670,2384
|
14
|
-
lmnr/traceloop_sdk/config/__init__.py,sha256=DliMGp2NjYAqRFLKpWQPUKjGMHRO8QsVfazBA1qENQ8,248
|
15
|
-
lmnr/traceloop_sdk/decorators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
16
|
-
lmnr/traceloop_sdk/decorators/base.py,sha256=SeImd8SAeqdC8LV1bvoQUq0d_TLkOLyd5HCe7vXKhNU,5559
|
17
|
-
lmnr/traceloop_sdk/instruments.py,sha256=CGGUEELldrXkQwAzAkDeAtDq07_pjhz7i14a92P7C_E,1036
|
18
|
-
lmnr/traceloop_sdk/tests/__init__.py,sha256=RYnG0-8zbXL0-2Ste1mEBf5sN4d_rQjGTCgPBuaZC74,20
|
19
|
-
lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_and_external_association_properties.yaml,sha256=26g0wRA0juicHg_XrhcE8H4vhs1lawDs0o0aLFn-I7w,3103
|
20
|
-
lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_association_properties.yaml,sha256=FNlSWlYCsWc3w7UPZzfGjDnxS3gAOhL-kpsu4BTxsDE,3061
|
21
|
-
lmnr/traceloop_sdk/tests/cassettes/test_manual/test_manual_report.yaml,sha256=iq_U_DBKNyM8mhgwGZrqw1OMalIb3g1422cqkvsrPHw,2956
|
22
|
-
lmnr/traceloop_sdk/tests/cassettes/test_manual/test_resource_attributes.yaml,sha256=IxAYRGTo46TtVsbxwLY2MPjgNehnvBVhzrH2ErHGxNA,2936
|
23
|
-
lmnr/traceloop_sdk/tests/cassettes/test_privacy_no_prompts/test_simple_workflow.yaml,sha256=4KUVSMVLOMzubVXqwKY7ukhrQEXTtysa0RyPXydMu0c,5861
|
24
|
-
lmnr/traceloop_sdk/tests/cassettes/test_prompt_management/test_prompt_management.yaml,sha256=ASroB5TiDVoJ1pUIQte4rajjlOs7XclIjDxPT9EpVmA,6142
|
25
|
-
lmnr/traceloop_sdk/tests/cassettes/test_sdk_initialization/test_resource_attributes.yaml,sha256=gUQ1mlrDG-2qmp7E6nmQ8ma7T0EeYL6Ve0nIZkmkEJ0,5877
|
26
|
-
lmnr/traceloop_sdk/tests/cassettes/test_tasks/test_task_io_serialization_with_langchain.yaml,sha256=OLtmIMglgFwNOIFSzZ5Xye6mO6PA5gPfHf2db6U_uPQ,2852
|
27
|
-
lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_aworkflow.yaml,sha256=xbol_wTn-SeEanT4kLY4Y2_HLCTZf0ZHRFkPw402gqI,2944
|
28
|
-
lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_workflow.yaml,sha256=ueiJY_6pyKQwbuMpeTAqHui4Ux7kYq_KTBZSob-cAjc,5866
|
29
|
-
lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_streaming_workflow.yaml,sha256=flOkiaW0DnQfD4rn_9F9dA0nIGMFjqwR3UzPyaanVjE,7947
|
30
|
-
lmnr/traceloop_sdk/tests/conftest.py,sha256=XG6U9T6OyQliJUS8sBTXStjIP7Bb6ZChWTt0fulvHuc,3039
|
31
|
-
lmnr/traceloop_sdk/tests/test_association_properties.py,sha256=D_LxhiVLwyXE0eW70uztmvZh3RRbVucM0L2C7O1oaFk,6735
|
32
|
-
lmnr/traceloop_sdk/tests/test_manual.py,sha256=YHmVYfDfFUalAzYQsz50PIzXdj3Jfjcl4erpBU4ae4A,1759
|
33
|
-
lmnr/traceloop_sdk/tests/test_nested_tasks.py,sha256=o7GPLVdgQOI5YH5HMBjInW4sprY4Nlu4SuwjMr1dxWU,1377
|
34
|
-
lmnr/traceloop_sdk/tests/test_privacy_no_prompts.py,sha256=lS8bwg_xOS4gcwwzrrWflMkTSn8eZWyTmAxL3h3hZA0,1478
|
35
|
-
lmnr/traceloop_sdk/tests/test_sdk_initialization.py,sha256=fRaf6lrxFzJIN94P1Tav_z_eywOsF5JXLPWzbJPMMyQ,1477
|
36
|
-
lmnr/traceloop_sdk/tests/test_tasks.py,sha256=xlEx8BKp4yG83SCjK5WkPGfyC33JSrx4h8VyjVwGbgw,906
|
37
|
-
lmnr/traceloop_sdk/tests/test_workflows.py,sha256=RVcfY3WAFIDZC15-aSua21aoQyYeWE7KypDyUsm-2EM,9372
|
38
|
-
lmnr/traceloop_sdk/tracing/__init__.py,sha256=Ckq7zCM26VdJVB5tIZv0GTPyMZKyfso_KWD5yPHaqdo,66
|
39
|
-
lmnr/traceloop_sdk/tracing/attributes.py,sha256=h970zmb7yTszzf2oHBfOY3cDYhE6O7LhkiHLqa_7x1k,1261
|
40
|
-
lmnr/traceloop_sdk/tracing/content_allow_list.py,sha256=3feztm6PBWNelc8pAZUcQyEGyeSpNiVKjOaDk65l2ps,846
|
41
|
-
lmnr/traceloop_sdk/tracing/context_manager.py,sha256=csVlB6kDmbgSPsROHwnddvGGblx55v6lJMRj0wsSMQM,304
|
42
|
-
lmnr/traceloop_sdk/tracing/tracing.py,sha256=enZ6uRH9H9ZShPl4LK9B6ThzOZrBBK1Bap4l3NoqhQ8,29145
|
43
|
-
lmnr/traceloop_sdk/utils/__init__.py,sha256=pNhf0G3vTd5ccoc03i1MXDbricSaiqCbi1DLWhSekK8,604
|
44
|
-
lmnr/traceloop_sdk/utils/in_memory_span_exporter.py,sha256=H_4TRaThMO1H6vUQ0OpQvzJk_fZH0OOsRAM1iZQXsR8,2112
|
45
|
-
lmnr/traceloop_sdk/utils/json_encoder.py,sha256=dK6b_axr70IYL7Vv-bu4wntvDDuyntoqsHaddqX7P58,463
|
46
|
-
lmnr/traceloop_sdk/utils/package_check.py,sha256=Ki74WZME-ASF0fx7RXSIMsULGYUzI86sOINi1EGrc_Y,235
|
47
|
-
lmnr/traceloop_sdk/version.py,sha256=OlatFEFA4ttqSSIiV8jdE-sq3KG5zu2hnC4B4mzWF3s,23
|
48
|
-
lmnr-0.4.36.dist-info/LICENSE,sha256=67b_wJHVV1CBaWkrKFWU1wyqTPSdzH77Ls-59631COg,10411
|
49
|
-
lmnr-0.4.36.dist-info/METADATA,sha256=Kbcvfb28HQX4Qv35xfSnAOV0q7jlfHSKVnAl0dg-S7o,10322
|
50
|
-
lmnr-0.4.36.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
51
|
-
lmnr-0.4.36.dist-info/entry_points.txt,sha256=K1jE20ww4jzHNZLnsfWBvU3YKDGBgbOiYG5Y7ivQcq4,37
|
52
|
-
lmnr-0.4.36.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|