github / github/app

**Title:** GitHub Copilot App BYOK fails with OpenAI-compatible endpoint whil...

Open
#2,903 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
No language data
Stars
2.1k
Forks
153
PR merge metrics
No merged PRs in 30d

Description

**Title:** GitHub Copilot App BYOK fails with OpenAI-compatible endpoint while VS Code works

I'm using an OpenAI-compatible BYOK endpoint from OpenCode Go.

The same endpoint, API key, and model work normally when configured in VS Code, but fail when configured in the GitHub Copilot App.

The Copilot App returns HTTP 400 errors such as:

```text
Failed to deserialize the JSON body into the target type:
messages[1]: unknown variant `image_url`, expected `text`
```

and:

```text
invalid_request_error:
Extra inputs are not permitted,
field: `messages[2].refusal`,
value: None
```

Steps to reproduce:

1. Configure the OpenCode Go OpenAI-compatible endpoint in VS Code.
2. Use the model normally — requests succeed.
3. Configure the same endpoint, API key, and model in GitHub Copilot App using BYOK.
4. Send a request.
5. GitHub Copilot App returns HTTP 400.

Expected behavior:

The same OpenAI-compatible endpoint should work in GitHub Copilot App as it does in VS Code.

Actual behavior:

Requests from GitHub Copilot App contain fields/message formats that the endpoint rejects, while VS Code requests succeed.

I'm not sure whether this is caused by the Copilot App request payload or an incompatibility in the endpoint, but the issue is reproducible specifically with GitHub Copilot App.

---
| Field | Value |
| --- | --- |
| App version | 1.1.10 |
| OS | Windows 10.0.26300 |
| Theme | GitHub |
| Path | /chat |
| Tenure | Week 9 |

Contributor guide

Open the contributing guide

Research direction

Start at the /chat BYOK request path and compare the GitHub Copilot App payload with the working VS Code request for the same endpoint, key, and model. Reproduce the HTTP 400 responses and determine whether the image_url and refusal fields are sent by the app; done means the endpoint accepts the app's request without those deserialization errors.

Written by the indexing model from the issue text.

Assessment

Tech stack
github, vscode
Domain
api
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.