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:
wire_api: completions is ignored — log line shows
wireApi=responses even when SDK input was
wire_api="completions".
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)
- 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.)
- Honor
azure.api_version — pass through to the request URL
query string (?api-version=...) so operators can opt into
newer Azure API surfaces.
- 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):
Summary
When the GitHub Copilot CLI is configured (via
github-copilot-sdk'sProviderConfig) to usetype: azurewithwire_api: completions,the CLI ignores
wire_apiand sends requests to Azure OpenAI'sResponses API endpoint (
/openai/responses) anyway. It alsoappears to use a hardcoded api-version (per
copilot/session.py:819SDK docstring, defaults to
2024-10-21) regardless of what's passedin
azure.api_version, which Azure OpenAI rejects for the ResponsesAPI path:
This makes BYOK against Azure OpenAI / Microsoft Foundry deployments
non-functional today.
Environment
copilotCLI:0.0.353(Commitf8fd3e3), installed via Homebrewgithub-copilot-sdk:0.3.0(Python wrapper)Foundry hub (endpoint
https://<account>.openai.azure.com)az account get-access-token --resource https://cognitiveservices.azure.comReproducer
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_versionpassed in the ProviderConfig.Actual behavior
~/.copilot/logs/process-*.logshows:Two distinct issues:
wire_api: completionsis ignored — log line showswireApi=responseseven when SDK input waswire_api="completions".azure.api_versionis ignored or overridden — the requestthat reaches Azure OpenAI uses a version older than
2025-03-01-previewdespite us settingazure.api_version="2025-04-01-preview"inProviderConfig.The same error reproduces with
wire_api: responses,model: gpt-5.4, and explicitazure.api_versionoverrides up to2026-01-01-preview.Suggested fixes (any one would unblock BYOK Azure paths)
wire_api: completionsfortype: azure— route to<endpoint>/openai/v1/chat/completionsinstead of/openai/responseswhen set. (Cleanest; matches the SDKschema's
wire_api: Literal['completions', 'responses']typing.)azure.api_version— pass through to the request URLquery string (
?api-version=...) so operators can opt intonewer Azure API surfaces.
2025-03-01-preview— atminimum bring the default in line with current Azure OpenAI
Responses API requirements.
Possibly related (different concrete symptoms, same general area):