From a50eef2b19b8d58770f51e11fd8e7aab760817db Mon Sep 17 00:00:00 2001 From: Howie Leung Date: Fri, 5 Jun 2026 14:10:44 -0700 Subject: [PATCH] Update _responses_instrumentor.py This script fails to run, and this PR is the fix. import os import logging # 1) MUST be set before Azure SDK imports/client construction os.environ.setdefault("AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING", "true") # Tracing setup (required order) from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.sampling import ALWAYS_OFF from azure.core.settings import settings from azure.core.tracing.ext.opentelemetry_span import OpenTelemetrySpan from azure.ai.projects.telemetry import AIProjectInstrumentor from azure.ai.projects import AIProjectClient from azure.identity import DefaultAzureCredential def main() -> None: logging.basicConfig(level=logging.DEBUG) logging.getLogger("azure").setLevel(logging.DEBUG) logging.getLogger("openai").setLevel(logging.DEBUG) endpoint = os.environ.get("FOUNDRY_PROJECT_ENDPOINT") model = os.environ.get("FOUNDRY_MODEL_NAME") if not endpoint: raise RuntimeError("FOUNDRY_PROJECT_ENDPOINT is not set") if not model: raise RuntimeError("FOUNDRY_MODEL_NAME is not set") # 2) Global tracer provider with ALWAYS_OFF -> NonRecordingSpan trace.set_tracer_provider(TracerProvider(sampler=ALWAYS_OFF)) # 3) Use OpenTelemetry span implementation for azure-core tracing settings.tracing_implementation = OpenTelemetrySpan # 4) Explicitly activate AI Projects instrumentor exactly once AIProjectInstrumentor().instrument() credential = DefaultAzureCredential() client = AIProjectClient(endpoint=endpoint, credential=credential) # 5) Responses API call through OpenAI client openai_client = client.get_openai_client() response = openai_client.responses.create( model=model, input=[{"role": "user", "content": "hello from repro for #46544"}], ) output_text = getattr(response, "output_text", None) or "" print(f"response_id={response.id}") print(f"output_text={output_text}") if __name__ == "__main__": main() --- .../azure/ai/projects/telemetry/_responses_instrumentor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sdk/ai/azure-ai-projects/azure/ai/projects/telemetry/_responses_instrumentor.py b/sdk/ai/azure-ai-projects/azure/ai/projects/telemetry/_responses_instrumentor.py index fdb3cc456214..5fb17ab740cd 100644 --- a/sdk/ai/azure-ai-projects/azure/ai/projects/telemetry/_responses_instrumentor.py +++ b/sdk/ai/azure-ai-projects/azure/ai/projects/telemetry/_responses_instrumentor.py @@ -557,6 +557,10 @@ def _append_to_message_attribute( new_messages: List[Dict[str, Any]], ) -> None: """Helper to append messages to an existing attribute, combining with previous messages.""" + + if not span.span_instance.is_recording(): + return + # Get existing attribute value existing_value = span.span_instance.attributes.get(attribute_name) if span.span_instance.attributes else None