paid-python 0.3.4__py3-none-any.whl → 0.3.5__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.
- paid/_vendor/__init__.py +0 -0
- paid/_vendor/opentelemetry/__init__.py +0 -0
- paid/_vendor/opentelemetry/instrumentation/__init__.py +0 -0
- paid/_vendor/opentelemetry/instrumentation/openai/__init__.py +54 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/__init__.py +399 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +1192 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +292 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/config.py +15 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py +311 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/event_emitter.py +108 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/event_models.py +41 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py +68 -0
- paid/_vendor/opentelemetry/instrumentation/openai/shared/span_utils.py +0 -0
- paid/_vendor/opentelemetry/instrumentation/openai/utils.py +190 -0
- paid/_vendor/opentelemetry/instrumentation/openai/v0/__init__.py +176 -0
- paid/_vendor/opentelemetry/instrumentation/openai/v1/__init__.py +358 -0
- paid/_vendor/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +329 -0
- paid/_vendor/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py +134 -0
- paid/_vendor/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +996 -0
- paid/_vendor/opentelemetry/instrumentation/openai/version.py +1 -0
- paid/tracing/autoinstrumentation.py +2 -1
- {paid_python-0.3.4.dist-info → paid_python-0.3.5.dist-info}/METADATA +1 -2
- {paid_python-0.3.4.dist-info → paid_python-0.3.5.dist-info}/RECORD +25 -5
- {paid_python-0.3.4.dist-info → paid_python-0.3.5.dist-info}/LICENSE +0 -0
- {paid_python-0.3.4.dist-info → paid_python-0.3.5.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
from paid._vendor.opentelemetry.instrumentation.openai.shared import _set_span_attribute
|
|
2
|
+
from paid._vendor.opentelemetry.instrumentation.openai.shared.event_emitter import emit_event
|
|
3
|
+
from paid._vendor.opentelemetry.instrumentation.openai.shared.event_models import ChoiceEvent
|
|
4
|
+
from paid._vendor.opentelemetry.instrumentation.openai.utils import should_emit_events
|
|
5
|
+
from opentelemetry.semconv.attributes.error_attributes import ERROR_TYPE
|
|
6
|
+
from opentelemetry.semconv._incubating.attributes import (
|
|
7
|
+
gen_ai_attributes as GenAIAttributes,
|
|
8
|
+
)
|
|
9
|
+
from opentelemetry.trace import Status, StatusCode
|
|
10
|
+
from typing_extensions import override
|
|
11
|
+
|
|
12
|
+
from openai import AssistantEventHandler
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class EventHandleWrapper(AssistantEventHandler):
|
|
16
|
+
_current_text_index = 0
|
|
17
|
+
_prompt_tokens = 0
|
|
18
|
+
_completion_tokens = 0
|
|
19
|
+
|
|
20
|
+
def __init__(self, original_handler, span):
|
|
21
|
+
super().__init__()
|
|
22
|
+
self._original_handler = original_handler
|
|
23
|
+
self._span = span
|
|
24
|
+
|
|
25
|
+
@override
|
|
26
|
+
def on_end(self):
|
|
27
|
+
_set_span_attribute(
|
|
28
|
+
self._span,
|
|
29
|
+
GenAIAttributes.GEN_AI_USAGE_INPUT_TOKENS,
|
|
30
|
+
self._prompt_tokens,
|
|
31
|
+
)
|
|
32
|
+
_set_span_attribute(
|
|
33
|
+
self._span,
|
|
34
|
+
GenAIAttributes.GEN_AI_USAGE_OUTPUT_TOKENS,
|
|
35
|
+
self._completion_tokens,
|
|
36
|
+
)
|
|
37
|
+
self._original_handler.on_end()
|
|
38
|
+
self._span.end()
|
|
39
|
+
|
|
40
|
+
@override
|
|
41
|
+
def on_event(self, event):
|
|
42
|
+
self._original_handler.on_event(event)
|
|
43
|
+
|
|
44
|
+
@override
|
|
45
|
+
def on_run_step_created(self, run_step):
|
|
46
|
+
self._original_handler.on_run_step_created(run_step)
|
|
47
|
+
|
|
48
|
+
@override
|
|
49
|
+
def on_run_step_delta(self, delta, snapshot):
|
|
50
|
+
self._original_handler.on_run_step_delta(delta, snapshot)
|
|
51
|
+
|
|
52
|
+
@override
|
|
53
|
+
def on_run_step_done(self, run_step):
|
|
54
|
+
if run_step.usage:
|
|
55
|
+
self._prompt_tokens += run_step.usage.prompt_tokens
|
|
56
|
+
self._completion_tokens += run_step.usage.completion_tokens
|
|
57
|
+
self._original_handler.on_run_step_done(run_step)
|
|
58
|
+
|
|
59
|
+
@override
|
|
60
|
+
def on_tool_call_created(self, tool_call):
|
|
61
|
+
self._original_handler.on_tool_call_created(tool_call)
|
|
62
|
+
|
|
63
|
+
@override
|
|
64
|
+
def on_tool_call_delta(self, delta, snapshot):
|
|
65
|
+
self._original_handler.on_tool_call_delta(delta, snapshot)
|
|
66
|
+
|
|
67
|
+
@override
|
|
68
|
+
def on_tool_call_done(self, tool_call):
|
|
69
|
+
self._original_handler.on_tool_call_done(tool_call)
|
|
70
|
+
|
|
71
|
+
@override
|
|
72
|
+
def on_exception(self, exception: Exception):
|
|
73
|
+
self._span.set_attribute(ERROR_TYPE, exception.__class__.__name__)
|
|
74
|
+
self._span.record_exception(exception)
|
|
75
|
+
self._span.set_status(Status(StatusCode.ERROR, str(exception)))
|
|
76
|
+
self._original_handler.on_exception(exception)
|
|
77
|
+
|
|
78
|
+
@override
|
|
79
|
+
def on_timeout(self):
|
|
80
|
+
self._original_handler.on_timeout()
|
|
81
|
+
|
|
82
|
+
@override
|
|
83
|
+
def on_message_created(self, message):
|
|
84
|
+
self._original_handler.on_message_created(message)
|
|
85
|
+
|
|
86
|
+
@override
|
|
87
|
+
def on_message_delta(self, delta, snapshot):
|
|
88
|
+
self._original_handler.on_message_delta(delta, snapshot)
|
|
89
|
+
|
|
90
|
+
@override
|
|
91
|
+
def on_message_done(self, message):
|
|
92
|
+
_set_span_attribute(
|
|
93
|
+
self._span,
|
|
94
|
+
f"gen_ai.response.{self._current_text_index}.id",
|
|
95
|
+
message.id,
|
|
96
|
+
)
|
|
97
|
+
emit_event(
|
|
98
|
+
ChoiceEvent(
|
|
99
|
+
index=self._current_text_index,
|
|
100
|
+
message={
|
|
101
|
+
"content": [item.model_dump() for item in message.content],
|
|
102
|
+
"role": message.role,
|
|
103
|
+
},
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
self._original_handler.on_message_done(message)
|
|
107
|
+
self._current_text_index += 1
|
|
108
|
+
|
|
109
|
+
@override
|
|
110
|
+
def on_text_created(self, text):
|
|
111
|
+
self._original_handler.on_text_created(text)
|
|
112
|
+
|
|
113
|
+
@override
|
|
114
|
+
def on_text_delta(self, delta, snapshot):
|
|
115
|
+
self._original_handler.on_text_delta(delta, snapshot)
|
|
116
|
+
|
|
117
|
+
@override
|
|
118
|
+
def on_text_done(self, text):
|
|
119
|
+
self._original_handler.on_text_done(text)
|
|
120
|
+
if not should_emit_events():
|
|
121
|
+
_set_span_attribute(
|
|
122
|
+
self._span,
|
|
123
|
+
f"{GenAIAttributes.GEN_AI_COMPLETION}.{self._current_text_index}.role",
|
|
124
|
+
"assistant",
|
|
125
|
+
)
|
|
126
|
+
_set_span_attribute(
|
|
127
|
+
self._span,
|
|
128
|
+
f"{GenAIAttributes.GEN_AI_COMPLETION}.{self._current_text_index}.content",
|
|
129
|
+
text.value,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
@override
|
|
133
|
+
def on_image_file_done(self, image_file):
|
|
134
|
+
self._original_handler.on_image_file_done(image_file)
|