{"library":"openinference-instrumentation-openai-agents","title":"OpenInference OpenAI Agents Instrumentation","description":"This library provides OpenTelemetry instrumentation for OpenAI Agents (Assistants API). It automatically captures trace data for interactions with OpenAI's `client.beta.assistants`, `client.beta.threads`, `client.beta.threads.messages`, and `client.beta.threads.runs`, converting them into OpenInference-compliant spans. The current version is 1.4.1, and it's part of the broader OpenInference monorepo, which releases frequently, often with per-library updates.","language":"python","status":"active","last_verified":"Sat May 16","install":{"commands":["pip install openinference-instrumentation-openai-agents openai opentelemetry-sdk"],"cli":null},"imports":["from openinference.instrumentation.openai_agents import OpenAIInstrumentor"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nimport time\nfrom opentelemetry import trace\nfrom opentelemetry.sdk.resources import Resource\nfrom opentelemetry.sdk.trace import TracerProvider\nfrom opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter\nfrom openinference.instrumentation.openai_agents import OpenAIInstrumentor\nimport openai\n\n# 1. Setup OpenTelemetry (before instrumentation)\nresource = Resource.create({\"service.name\": \"openai-agents-quickstart\"})\ntracer_provider = TracerProvider(resource=resource)\ntracer_provider.add_span_processor(SimpleSpanProcessor(ConsoleSpanExporter()))\ntrace.set_tracer_provider(tracer_provider)\n\n# 2. Instrument OpenAI Agents\nOpenAIInstrumentor().instrument()\n\n# 3. Initialize OpenAI Client\n# Ensure OPENAI_API_KEY is set in your environment\nclient = openai.OpenAI(api_key=os.environ.get(\"OPENAI_API_KEY\", \"\"))\n\ntry:\n    # 4. Interact with OpenAI Assistants API\n    assistant = client.beta.assistants.create(\n        name=\"Math Tutor\",\n        instructions=\"You are a personal math tutor. Answer questions briefly.\",\n        model=\"gpt-4o\",\n    )\n    print(f\"Created Assistant: {assistant.id}\")\n\n    thread = client.beta.threads.create()\n    print(f\"Created Thread: {thread.id}\")\n\n    message = client.beta.threads.messages.create(\n        thread_id=thread.id,\n        role=\"user\",\n        content=\"What is 1 + 1?\",\n    )\n    print(f\"Added Message: {message.id}\")\n\n    run = client.beta.threads.runs.create(\n        thread_id=thread.id,\n        assistant_id=assistant.id,\n        instructions=\"Please address the user as Professor.\"\n    )\n    print(f\"Started Run: {run.id}\")\n\n    # 5. Wait for the run to complete (simulated polling)\n    while run.status in ['queued', 'in_progress', 'cancelling']:\n        time.sleep(1)\n        run = client.beta.threads.runs.retrieve(\n            thread_id=thread.id,\n            run_id=run.id\n        )\n        print(f\"Run status: {run.status}\")\n\n    # 6. Retrieve messages after the run\n    messages = client.beta.threads.messages.list(\n        thread_id=thread.id\n    )\n    print(\"\\nConversation:\")\n    for m in reversed(messages.data):\n        print(f\"{m.role}: {m.content[0].text.value}\")\n\nexcept openai.APIAssistantError as e:\n    print(f\"OpenAI API Error: {e}\")\n    print(\"Please ensure you have an OpenAI API key set and have access to the Assistants API.\")\nexcept Exception as e:\n    print(f\"An unexpected error occurred: {e}\")\nfinally:\n    # Clean up resources\n    try:\n        if 'thread' in locals() and thread.id:\n            client.beta.threads.delete(thread.id)\n            print(f\"Deleted Thread: {thread.id}\")\n        if 'assistant' in locals() and assistant.id:\n            client.beta.assistants.delete(assistant.id)\n            print(f\"Deleted Assistant: {assistant.id}\")\n    except Exception as e:\n        print(f\"Error during cleanup: {e}\")\n","lang":"python","description":"This quickstart demonstrates how to instrument an OpenAI Assistants API workflow. It sets up an OpenTelemetry TracerProvider, instruments the OpenAI library, creates an assistant, thread, message, and runs the assistant, capturing traces for each step. Remember to set your `OPENAI_API_KEY` environment variable.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-16","installed_version":"1.4.0","pypi_latest":"1.5.0","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":6.2,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"55.6M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":7,"import_time_s":null,"mem_mb":null,"disk_size":"55M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"60.3M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":5.9,"import_time_s":null,"mem_mb":null,"disk_size":"60M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"51.4M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":5,"import_time_s":null,"mem_mb":null,"disk_size":"51M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"51.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":5.2,"import_time_s":null,"mem_mb":null,"disk_size":"50M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"55.0M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"openinference-instrumentation-openai-agents","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":8,"import_time_s":null,"mem_mb":null,"disk_size":"54M"}]}}