Skip to content

Commit 3f69b56

Browse files
committed
Enhance OpenAI instrumentation with new response handling and telemetry support
- Added `opentelemetry-util-genai` as a dependency for improved telemetry handling. - Refactored response handling in `patch_responses.py` to utilize `TelemetryHandler` for tracing. - Updated `responses_create` and `responses_retrieve` methods to integrate new telemetry features. - Simplified imports and removed unused code in `__init__.py`. - Added extensive test cases and YAML cassettes for various response scenarios, including streaming and standard responses. - Adjusted requirements files to include the new utility package for testing.
1 parent 5e26cdd commit 3f69b56

11 files changed

Lines changed: 3997 additions & 387 deletions

File tree

instrumentation-genai/opentelemetry-instrumentation-openai-v2/pyproject.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ classifiers = [
2727
dependencies = [
2828
"opentelemetry-api ~= 1.37",
2929
"opentelemetry-instrumentation ~= 0.58b0",
30-
"opentelemetry-semantic-conventions ~= 0.58b0"
30+
"opentelemetry-semantic-conventions ~= 0.58b0",
31+
"opentelemetry-util-genai >= 0.2b0, <0.3b0",
3132
]
3233

3334
[project.optional-dependencies]

instrumentation-genai/opentelemetry-instrumentation-openai-v2/src/opentelemetry/instrumentation/openai_v2/__init__.py

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,11 +60,7 @@
6060
chat_completions_create,
6161
embeddings_create,
6262
)
63-
from .patch_responses import (
64-
responses_create,
65-
responses_retrieve,
66-
responses_stream,
67-
)
63+
from .patch_responses import responses_create, responses_retrieve
6864

6965

7066
class OpenAIInstrumentor(BaseInstrumentor):
@@ -136,31 +132,29 @@ def _instrument(self, **kwargs):
136132
# Responses API is only available in openai>=1.66.0
137133
# https://github.com/openai/openai-python/blob/main/CHANGELOG.md#1660-2025-03-11
138134
try:
139-
wrap_function_wrapper(
140-
module="openai.resources.responses.responses",
141-
name="Responses.create",
142-
wrapper=responses_create(
143-
tracer, logger, instruments, is_content_enabled()
144-
),
135+
from opentelemetry.util.genai.handler import ( # pylint: disable=import-outside-toplevel
136+
TelemetryHandler,
137+
)
138+
139+
handler = TelemetryHandler(
140+
tracer_provider=tracer_provider,
141+
meter_provider=meter_provider,
142+
logger_provider=logger_provider,
145143
)
146144

147145
wrap_function_wrapper(
148146
module="openai.resources.responses.responses",
149-
name="Responses.stream",
150-
wrapper=responses_stream(
151-
tracer, logger, instruments, is_content_enabled()
152-
),
147+
name="Responses.create",
148+
wrapper=responses_create(handler, is_content_enabled()),
153149
)
154150

155151
wrap_function_wrapper(
156152
module="openai.resources.responses.responses",
157153
name="Responses.retrieve",
158-
wrapper=responses_retrieve(
159-
tracer, logger, instruments, is_content_enabled()
160-
),
154+
wrapper=responses_retrieve(handler, is_content_enabled()),
161155
)
162156
except (AttributeError, ModuleNotFoundError):
163-
# Responses API not available in this version of openai
157+
# Responses API or TelemetryHandler not available
164158
pass
165159

166160
def _uninstrument(self, **kwargs):
@@ -175,7 +169,6 @@ def _uninstrument(self, **kwargs):
175169
# https://github.com/openai/openai-python/blob/main/CHANGELOG.md#1660-2025-03-11
176170
try:
177171
unwrap(openai.resources.responses.responses.Responses, "create")
178-
unwrap(openai.resources.responses.responses.Responses, "stream")
179172
unwrap(openai.resources.responses.responses.Responses, "retrieve")
180173
except (AttributeError, ModuleNotFoundError):
181174
# Responses API not available in this version of openai

0 commit comments

Comments
 (0)