Skip to main content

agent-framework-openai

OpenAI integration for Microsoft Agent Framework.

This package provides:

  • OpenAIChatClient for the OpenAI Responses API
  • OpenAIChatCompletionClient for the Chat Completions API
  • OpenAIEmbeddingClient for embeddings

Installation

pip install agent-framework-openai

Which chat client should I use?

Use OpenAIChatClient for new work unless you specifically need the Chat Completions API.

  • OpenAIChatClient uses the Responses API and is the preferred general-purpose chat client.
  • OpenAIChatCompletionClient uses the Chat Completions API and is mainly for compatibility with existing Chat Completions-based integrations.

The previous deprecated Responses alias has been removed. Use OpenAIChatClient directly.

Citations and annotations

OpenAIChatClient exposes Responses API URL, file, file-path, and container-file citations through Content.annotations, using the provider-neutral Annotation(type="citation", ...) representation. URL citations retain their title, URL, and text-span indices, including SharePoint grounding citations.

Inspect content.annotations in response messages or streaming update.contents. Annotations can arrive in an update whose content.text is empty: completed content parts and output messages supply citations without repeating text that was already streamed. Annotation-added and completion events are deduplicated by item, content part, and annotation position, so separate references to the same source remain distinct. Foundry clients that inherit the Responses parser receive the same behavior.

Hosted function results

OpenAIChatClient parses hosted function_call_output items in both streaming and non-streaming responses. Each result retains its call_id for correlation with the corresponding function call. Outputs explicitly marked in_progress are deferred without claiming their deduplication ID, so an empty or partial .added placeholder cannot suppress a later .done result. Completed empty results remain valid.

Rich output parts are available through the function result's items; the backward-compatible result field contains only their text. Image and file parts retain their explicit provider type in OpenAI replay, including hosted file references, extensionless image URLs, and files whose names have image extensions.

The ordinary AG-UI TOOL_CALL_RESULT emitter currently reads only result, not items. It emits the text for mixed text/attachment outputs and empty event content for image/file-only outputs. Preserving rich parts in framework content and OpenAI replay does not provide frontend attachment display; that is a separate transport/frontend capability, outside this parser's scope.

Environment variables

OpenAI

These variables are used when the client is configured for OpenAI:

Variable Purpose
OPENAI_API_KEY OpenAI API key
OPENAI_ORG_ID OpenAI organization ID
OPENAI_BASE_URL Custom OpenAI-compatible base URL
OPENAI_MODEL Generic fallback model
OPENAI_CHAT_MODEL Preferred model for OpenAIChatClient
OPENAI_CHAT_COMPLETION_MODEL Preferred model for OpenAIChatCompletionClient
OPENAI_EMBEDDING_MODEL Preferred model for OpenAIEmbeddingClient

Model lookup order:

  • OpenAIChatClient: OPENAI_CHAT_MODEL -> OPENAI_MODEL
  • OpenAIChatCompletionClient: OPENAI_CHAT_COMPLETION_MODEL -> OPENAI_MODEL
  • OpenAIEmbeddingClient: OPENAI_EMBEDDING_MODEL -> OPENAI_MODEL

These model variables are only consulted when you do not pass model= directly. In other words, OpenAIChatClient(model="...") ignores OPENAI_CHAT_MODEL, and OpenAIChatCompletionClient(model="...") ignores OPENAI_CHAT_COMPLETION_MODEL.

Azure OpenAI

These variables are used when the client is configured for Azure OpenAI:

Variable Purpose
AZURE_OPENAI_ENDPOINT Azure OpenAI resource endpoint
AZURE_OPENAI_BASE_URL Full Azure OpenAI base URL (.../openai/v1)
AZURE_OPENAI_API_KEY Azure OpenAI API key
AZURE_OPENAI_API_VERSION Azure OpenAI API version
AZURE_OPENAI_MODEL Generic fallback deployment
AZURE_OPENAI_CHAT_MODEL Preferred deployment for OpenAIChatClient
AZURE_OPENAI_CHAT_COMPLETION_MODEL Preferred deployment for OpenAIChatCompletionClient
AZURE_OPENAI_EMBEDDING_MODEL Preferred deployment for OpenAIEmbeddingClient

Deployment lookup order:

  • OpenAIChatClient: AZURE_OPENAI_CHAT_MODEL -> AZURE_OPENAI_MODEL
  • OpenAIChatCompletionClient: AZURE_OPENAI_CHAT_COMPLETION_MODEL -> AZURE_OPENAI_MODEL
  • OpenAIEmbeddingClient: AZURE_OPENAI_EMBEDDING_MODEL -> AZURE_OPENAI_MODEL

For Azure routing, the same rule applies: the client-specific deployment variable is checked first, then the generic AZURE_OPENAI_MODEL fallback. Passing model= overrides both environment variables and the deployment configured on an injected client.

When model= is omitted and an AsyncAzureOpenAI client is injected, that client's configured deployment is used instead of the AZURE_OPENAI_* model variables. A plain AsyncOpenAI client has no Azure deployment, so the OpenAI model variables above still apply. The injected client stays caller-owned.

When both OpenAI and Azure environment variables are present, the generic clients prefer OpenAI when OPENAI_API_KEY is configured. To use Azure explicitly, pass azure_endpoint or credential.

OpenAI example

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(model="gpt-4.1")

Azure OpenAI example

from azure.identity.aio import AzureCliCredential

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(
    model="my-responses-deployment",
    azure_endpoint="https://my-resource.openai.azure.com",
    credential=AzureCliCredential(),
)

ChatClient vs ChatCompletionClient

Use OpenAIChatClient when you want the Responses API as your default chat surface.

Use OpenAIChatCompletionClient when you specifically need the Chat Completions API:

from agent_framework.openai import OpenAIChatCompletionClient

client = OpenAIChatCompletionClient(model="gpt-4o-mini")

Concurrent reuse

This contract applies to the Responses API OpenAIChatClient, not the OpenAIChatCompletionClient shown above. An OpenAIChatClient instance can be shared by concurrent asynchronous calls on the same event loop. Streaming, non-streaming, and mixed calls are supported. Keep mutable run state isolated by creating a separate Agent and AgentSession for each concurrent run and by passing separate messages and options.

This guarantee does not extend to user-supplied middleware, tools, or callbacks unless those implementations are also safe for concurrent use. Do not share one client across OS threads or event loops, and do not mutate its configuration while calls are active.

Metadata

Release files for agent-framework-openai 1.18.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agent-framework-openai 1.18.1
File Size Uploaded Provenance Actions
agent_framework_openai-1.18.1.tar.gz 79.7 kB Without provenance Details for agent_framework_openai-1.18.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for agent-framework-openai 1.18.1
File Interpreter ABI Platform Actions
agent_framework_openai-1.18.1-py3-none-any.whl Python 3 none any Details for agent_framework_openai-1.18.1-py3-none-any.whl

Total release size: 164.3 kB

Release files / agent_framework_openai-1.18.1.tar.gz

Download URL agent_framework_openai-1.18.1.tar.gz
Size 79.7 kB
Tags Source
SHA-256 checksum
How to use checksums
f8c380d68895c95161bdbf50202fcdd09d23109ebf9166de326a630b83bb8426
BLAKE2b-256 checksum
How to use checksums
9e877737f934a04ed89187b7cfbc0651cf326245a4cee709e77fbdc427a31300
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via RestSharp/106.13.0.0

Release files / agent_framework_openai-1.18.1-py3-none-any.whl

Download URL agent_framework_openai-1.18.1-py3-none-any.whl
Size 84.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e69cd8a51bc312af13d955f5c022ca62b570a14a9c4aa3cd6a41450a4ce89445
BLAKE2b-256 checksum
How to use checksums
c67e2da93904bf41e329861f63fd8ebd26b0208cb26bea8bbfdeaf578259d255
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via RestSharp/106.13.0.0

Security for agent-framework-openai 1.18.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.18.1 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page