paid-python 0.3.3__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.
Files changed (26) hide show
  1. paid/_vendor/__init__.py +0 -0
  2. paid/_vendor/opentelemetry/__init__.py +0 -0
  3. paid/_vendor/opentelemetry/instrumentation/__init__.py +0 -0
  4. paid/_vendor/opentelemetry/instrumentation/openai/__init__.py +54 -0
  5. paid/_vendor/opentelemetry/instrumentation/openai/shared/__init__.py +399 -0
  6. paid/_vendor/opentelemetry/instrumentation/openai/shared/chat_wrappers.py +1192 -0
  7. paid/_vendor/opentelemetry/instrumentation/openai/shared/completion_wrappers.py +292 -0
  8. paid/_vendor/opentelemetry/instrumentation/openai/shared/config.py +15 -0
  9. paid/_vendor/opentelemetry/instrumentation/openai/shared/embeddings_wrappers.py +311 -0
  10. paid/_vendor/opentelemetry/instrumentation/openai/shared/event_emitter.py +108 -0
  11. paid/_vendor/opentelemetry/instrumentation/openai/shared/event_models.py +41 -0
  12. paid/_vendor/opentelemetry/instrumentation/openai/shared/image_gen_wrappers.py +68 -0
  13. paid/_vendor/opentelemetry/instrumentation/openai/shared/span_utils.py +0 -0
  14. paid/_vendor/opentelemetry/instrumentation/openai/utils.py +190 -0
  15. paid/_vendor/opentelemetry/instrumentation/openai/v0/__init__.py +176 -0
  16. paid/_vendor/opentelemetry/instrumentation/openai/v1/__init__.py +358 -0
  17. paid/_vendor/opentelemetry/instrumentation/openai/v1/assistant_wrappers.py +329 -0
  18. paid/_vendor/opentelemetry/instrumentation/openai/v1/event_handler_wrapper.py +134 -0
  19. paid/_vendor/opentelemetry/instrumentation/openai/v1/responses_wrappers.py +996 -0
  20. paid/_vendor/opentelemetry/instrumentation/openai/version.py +1 -0
  21. paid/tracing/autoinstrumentation.py +2 -1
  22. paid/tracing/tracing.py +8 -2
  23. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/METADATA +51 -2
  24. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/RECORD +26 -6
  25. {paid_python-0.3.3.dist-info → paid_python-0.3.5.dist-info}/LICENSE +0 -0
  26. {paid_python-0.3.3.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)