github / github/copilot-cli

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

Open
#3,208 1 comment 1 reaction 0 assignees View on GitHub
area:configuration area:models
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

### 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://.openai.azure.com`)
- Auth: Azure AD bearer token via `az account get-access-token
--resource https://cognitiveservices.azure.com`

### Reproducer

```python
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://.openai.azure.com",
bearer_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
`/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=,
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
`/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):**
- #2576 — BYOK azure provider 404 error
- #2710 — Proposal: External model provider API surface for Copilot CLI
- #2755 — CLI headless mode: latency degradation under BYOK

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.