From 84bf88e95e0fa8b403e34181b182589b36ed3392 Mon Sep 17 00:00:00 2001 From: Rahul Sharma Date: Wed, 26 Aug 2026 15:04:51 +0530 Subject: [PATCH] fix: resolve gh/github provider alias to github-copilot, not google MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Resolves #45 — resolveProviderAlias() in src/models-dev.ts mapped both 'gh' and 'github' to 'google' when looking up models.dev fallback data (used when OmniRoute's /v1/models doesn't supply a field like contextWindow). GitHub Copilot proxies many upstream providers, not just Google, so this misdirected fallback lookups for gh/*|github/* models into the wrong provider bucket. Now correctly maps to github-copilot, models.dev's actual provider key. 5 new tests in test/provider-alias.test.mjs, 76/76 total passing. --- CHANGELOG.md | 6 ++++++ src/models-dev.ts | 4 ++-- test/provider-alias.test.mjs | 31 +++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 test/provider-alias.test.mjs diff --git a/CHANGELOG.md b/CHANGELOG.md index 6980c66..e261454 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to this project are documented in this file. +## [Unreleased] + +### Fixed + +- **GitHub Copilot models.dev provider alias** — `resolveProviderAlias()` in `src/models-dev.ts` incorrectly mapped both `gh` and `github` provider prefixes to `google` when looking up models.dev capability/context-window fallback data. GitHub Copilot proxies many upstream providers (Anthropic, OpenAI, xAI, etc.), not just Google, so this misdirected any models.dev fallback lookup for `gh/*`/`github/*` models into the wrong provider's data. Now correctly maps to `github-copilot`, models.dev's actual provider key. 5 new tests in `test/provider-alias.test.mjs`. (resolves #45) + ## [1.2.2] - 2026-05-22 ### Added diff --git a/src/models-dev.ts b/src/models-dev.ts index 429f8c7..9089b16 100644 --- a/src/models-dev.ts +++ b/src/models-dev.ts @@ -608,8 +608,8 @@ export function resolveProviderAlias( glm: 'zai-coding-plan', 'kimi-coding': 'moonshotai', kmc: 'moonshotai', - gh: 'google', - github: 'google', + gh: 'github-copilot', + github: 'github-copilot', ...config?.modelsDev?.providerAliases, }; diff --git a/test/provider-alias.test.mjs b/test/provider-alias.test.mjs new file mode 100644 index 0000000..cfbc30b --- /dev/null +++ b/test/provider-alias.test.mjs @@ -0,0 +1,31 @@ +import test from 'node:test'; +import assert from 'node:assert/strict'; + +import { resolveProviderAlias } from '../dist/src/models-dev.js'; + +test('resolveProviderAlias maps gh/github to github-copilot, not google', () => { + assert.equal(resolveProviderAlias('gh'), 'github-copilot'); + assert.equal(resolveProviderAlias('github'), 'github-copilot'); + assert.equal(resolveProviderAlias('GH'), 'github-copilot'); + assert.equal(resolveProviderAlias('GitHub'), 'github-copilot'); +}); + +test('resolveProviderAlias still maps gemini/google to google', () => { + assert.equal(resolveProviderAlias('gemini'), 'google'); + assert.equal(resolveProviderAlias('google'), 'google'); +}); + +test('resolveProviderAlias allows user config to override defaults', () => { + assert.equal( + resolveProviderAlias('gh', { modelsDev: { providerAliases: { gh: 'custom-provider' } } }), + 'custom-provider', + ); +}); + +test('resolveProviderAlias falls back to the lowercased key when unknown', () => { + assert.equal(resolveProviderAlias('SomeUnknownProvider'), 'someunknownprovider'); +}); + +test('resolveProviderAlias returns null for null input', () => { + assert.equal(resolveProviderAlias(null), null); +});