Skip to content

BYOK Azure: wire_api: completions ignored; hardcoded api-version rejected by Azure OpenAI Responses API #3208

Open

Description

@davidatorres

Summary

When the GitHub Copilot CLI is configured (via github-copilot-sdk's
ProviderConfig) to use type: azure with wire_api: completions,
the CLI ignores wire_api and sends requests to Azure OpenAI's
Responses API endpoint (/openai/responses) anyway. It also
appears to use a hardcoded api-version (per copilot/session.py:819
SDK docstring, defaults to 2024-10-21) regardless of what's passed
in azure.api_version, which Azure OpenAI rejects for the Responses
API path:

400 Azure OpenAI Responses API is enabled only for api-version
2025-03-01-preview and later

This makes BYOK against Azure OpenAI / Microsoft Foundry deployments
non-functional today.

Environment

  • copilot CLI: 0.0.353 (Commit f8fd3e3), installed via Homebrew
  • github-copilot-sdk: 0.3.0 (Python wrapper)
  • Host: macOS 25.4.0 / arm64
  • Upstream: Azure OpenAI deployment provisioned through Microsoft
    Foundry hub (endpoint https://<account>.openai.azure.com)
  • Auth: Azure AD bearer token via az account get-access-token --resource https://cognitiveservices.azure.com

Reproducer

import asyncio
from copilot import CopilotClient, ProviderConfig

async def main() -> None:
    client = CopilotClient()
    provider = ProviderConfig(
        type="azure",
        wire_api="completions",       # asks for Chat Completions
        base_url="https://<your-aoai-endpoint>.openai.azure.com",
        bearer_token="<az-ad-token>",
        azure={"api_version": "2025-04-01-preview"},  # explicit modern version
    )
    session = await client.create_session(
        model="gpt-5",
        working_directory="/tmp/test",
        provider=provider,
        on_permission_request=lambda *a, **kw: {"behavior": "allow"},
    )
    response = await session.send_and_wait("Write hello.py")
    print(response)

asyncio.run(main())

Expected behavior

The Copilot CLI sends requests to
<endpoint>/openai/v1/chat/completions (Chat Completions endpoint,
no api-version constraint), OR honors the explicit
azure.api_version passed in the ProviderConfig.

Actual behavior

~/.copilot/logs/process-*.log shows:

[INFO] Using custom provider: type=azure, baseUrl=<endpoint>,
       wireApi=responses    ← wire_api was set to "completions"
[ERROR] {
  "code": "BadRequest",
  "message": "Azure OpenAI Responses API is enabled only for
              api-version 2025-03-01-preview and later"
}

Two distinct issues:

  1. wire_api: completions is ignored — log line shows
    wireApi=responses even when SDK input was
    wire_api="completions".
  2. azure.api_version is ignored or overridden — the request
    that reaches Azure OpenAI uses a version older than
    2025-03-01-preview despite us setting
    azure.api_version="2025-04-01-preview" in ProviderConfig.

The same error reproduces with wire_api: responses, model: gpt-5.4, and explicit azure.api_version overrides up to
2026-01-01-preview.

Suggested fixes (any one would unblock BYOK Azure paths)

  1. Honor wire_api: completions for type: azure — route to
    <endpoint>/openai/v1/chat/completions instead of
    /openai/responses when set. (Cleanest; matches the SDK
    schema's wire_api: Literal['completions', 'responses'] typing.)
  2. Honor azure.api_version — pass through to the request URL
    query string (?api-version=...) so operators can opt into
    newer Azure API surfaces.
  3. Bump the hardcoded default to 2025-03-01-preview — at
    minimum bring the default in line with current Azure OpenAI
    Responses API requirements.


Possibly related (different concrete symptoms, same general area):

Activity

  1. davidatorres commented on May 8, 2026

    @davidatorres
    Author

    Companion issue: #3209 — Hosted-mode autonomous-codegen behavior gap (the related blocker we hit on the same code-agent abstraction effort)

  2. added
    area:modelsModel selection, availability, switching, rate limits, and model-specific behavior
    area:configurationConfig files, instruction files, settings, and environment variables
    on May 9, 2026
  3. added theissue type on May 9, 2026
  4. patniko commented on Oct 26, 2026

    @patniko
    Collaborator

    Thanks for the report. We've shipped fixes in this area since this was filed (most recently in Copilot CLI v1.0.85), and we believe this may now be resolved. Could you retest on the latest release (Copilot CLI v1.0.103) and let us know whether you still see it? If we don't hear back in a couple of weeks, we may close this issue — you can always reopen it.

    Triaged as part of a Copilot SDK backlog review, with help from GitHub Copilot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:configurationConfig files, instruction files, settings, and environment variablesarea:modelsModel selection, availability, switching, rate limits, and model-specific behaviormore-info-needed

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions