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.
Files changed (48) hide show
  1. lmnr/__init__.py +2 -2
  2. lmnr/{traceloop_sdk → openllmetry_sdk}/__init__.py +3 -3
  3. lmnr/{traceloop_sdk → openllmetry_sdk}/decorators/base.py +4 -4
  4. lmnr/openllmetry_sdk/tracing/__init__.py +1 -0
  5. lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/context_manager.py +1 -1
  6. lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/tracing.py +61 -47
  7. lmnr/sdk/decorators.py +3 -3
  8. lmnr/sdk/evaluations.py +2 -2
  9. lmnr/sdk/laminar.py +7 -7
  10. {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/METADATA +2 -2
  11. lmnr-0.4.37.dist-info/RECORD +32 -0
  12. lmnr/traceloop_sdk/tests/__init__.py +0 -1
  13. lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_and_external_association_properties.yaml +0 -101
  14. lmnr/traceloop_sdk/tests/cassettes/test_association_properties/test_langchain_association_properties.yaml +0 -99
  15. lmnr/traceloop_sdk/tests/cassettes/test_manual/test_manual_report.yaml +0 -98
  16. lmnr/traceloop_sdk/tests/cassettes/test_manual/test_resource_attributes.yaml +0 -98
  17. lmnr/traceloop_sdk/tests/cassettes/test_privacy_no_prompts/test_simple_workflow.yaml +0 -199
  18. lmnr/traceloop_sdk/tests/cassettes/test_prompt_management/test_prompt_management.yaml +0 -202
  19. lmnr/traceloop_sdk/tests/cassettes/test_sdk_initialization/test_resource_attributes.yaml +0 -199
  20. lmnr/traceloop_sdk/tests/cassettes/test_tasks/test_task_io_serialization_with_langchain.yaml +0 -96
  21. lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_aworkflow.yaml +0 -98
  22. lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_simple_workflow.yaml +0 -199
  23. lmnr/traceloop_sdk/tests/cassettes/test_workflows/test_streaming_workflow.yaml +0 -167
  24. lmnr/traceloop_sdk/tests/conftest.py +0 -111
  25. lmnr/traceloop_sdk/tests/test_association_properties.py +0 -229
  26. lmnr/traceloop_sdk/tests/test_manual.py +0 -48
  27. lmnr/traceloop_sdk/tests/test_nested_tasks.py +0 -47
  28. lmnr/traceloop_sdk/tests/test_privacy_no_prompts.py +0 -50
  29. lmnr/traceloop_sdk/tests/test_sdk_initialization.py +0 -57
  30. lmnr/traceloop_sdk/tests/test_tasks.py +0 -32
  31. lmnr/traceloop_sdk/tests/test_workflows.py +0 -262
  32. lmnr/traceloop_sdk/tracing/__init__.py +0 -1
  33. lmnr-0.4.36.dist-info/RECORD +0 -52
  34. /lmnr/{traceloop_sdk → openllmetry_sdk}/.flake8 +0 -0
  35. /lmnr/{traceloop_sdk → openllmetry_sdk}/.python-version +0 -0
  36. /lmnr/{traceloop_sdk → openllmetry_sdk}/config/__init__.py +0 -0
  37. /lmnr/{traceloop_sdk → openllmetry_sdk}/decorators/__init__.py +0 -0
  38. /lmnr/{traceloop_sdk → openllmetry_sdk}/instruments.py +0 -0
  39. /lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/attributes.py +0 -0
  40. /lmnr/{traceloop_sdk → openllmetry_sdk}/tracing/content_allow_list.py +0 -0
  41. /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/__init__.py +0 -0
  42. /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/in_memory_span_exporter.py +0 -0
  43. /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/json_encoder.py +0 -0
  44. /lmnr/{traceloop_sdk → openllmetry_sdk}/utils/package_check.py +0 -0
  45. /lmnr/{traceloop_sdk → openllmetry_sdk}/version.py +0 -0
  46. {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/LICENSE +0 -0
  47. {lmnr-0.4.36.dist-info → lmnr-0.4.37.dist-info}/WHEEL +0 -0
  48. {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
@@ -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