odysseus/specs/model-providers/github-copilot.md

1.7 KiB

GitHub Copilot Provider Shape

Last updated: dev@e57f60b | 2026-07-20

Scope

Canonical provider ID copilot; OpenAI-compatible chat with Copilot headers and OAuth; runtime adapter src/copilot.py and routes in routes/copilot_routes.py. There is no dedicated Copilot canonical reader on current dev.

Catalog Shape

The observed Copilot /models response uses data[] entries with:

  • id;
  • model_picker_enabled;
  • capabilities.supports.tool_calls and .vision;
  • optional limit/family metadata.

Runtime model discovery uses picker state for availability. The canonical reader package does not map the nested support fields; an explicitly supplied copilot vendor currently uses generic identity-only normalization, and model_picker_enabled does not become canonical capability.

Request And Response Shape

Chat is OpenAI-compatible but requires Copilot/GitHub API version, editor/plugin identity, intent, integration, and initiator headers; image requests add the vision request flag. Header derivation must tolerate malformed message entries. OAuth token exchange and access policies are provider authentication, not model capability.

Fallback And Safety

Use exact GitHub Copilot host or explicit kind, including the constrained enterprise copilot-api.*.ghe.com form. Do not treat arbitrary ghe.com hosts as Copilot. Official model availability tables are useful registry context but do not replace the account-scoped catalog response.

Current Gaps

  • The catalog shape is implementation-observed and needs ongoing fixture comparison with current Copilot clients.
  • Copilot catalog capability fields are not normalized by current dev.
  • Account/plan/policy availability must remain endpoint-user scoped.