Azure OpenAI doesn't surface the underlying model id through
vscode.lm — it surfaces a deployment name chosen by whoever
provisioned the resource (e.g. gpt-4o-prod, my-team-mini). Right
now Token Proctor's router only matches on canonical ids, so Azure
users see their deployments as "unknown" and get routed to whatever
non-Azure model is available.
What to do
- Add an optional
azureDeployments section to .token-proctor.json
that maps deployment name → canonical model id, e.g.:
{
"azureDeployments": {
"gpt-4o-prod": "gpt-4o",
"my-team-mini": "gpt-4o-mini"
}
}
- Update
src/core/policy.ts to parse the new
field.
- In
src/core/modelRouter.ts, when
resolving a model id that isn't in the catalog, check the deployment
map before marking it unknown.
- Document it in the README policy block.
Acceptance
Why this matters
Teams on Azure-hosted Copilot / Foundry are exactly the audience that
cares most about cost visibility — and today they get the worst
experience.
Azure OpenAI doesn't surface the underlying model id through
vscode.lm— it surfaces a deployment name chosen by whoeverprovisioned the resource (e.g.
gpt-4o-prod,my-team-mini). Rightnow Token Proctor's router only matches on canonical ids, so Azure
users see their deployments as "unknown" and get routed to whatever
non-Azure model is available.
What to do
azureDeploymentssection to.token-proctor.jsonthat maps deployment name → canonical model id, e.g.:
{ "azureDeployments": { "gpt-4o-prod": "gpt-4o", "my-team-mini": "gpt-4o-mini" } }src/core/policy.tsto parse the newfield.
src/core/modelRouter.ts, whenresolving a model id that isn't in the catalog, check the deployment
map before marking it unknown.
Acceptance
my-team-minigets costed asgpt-4o-miniin the estimate.Why this matters
Teams on Azure-hosted Copilot / Foundry are exactly the audience that
cares most about cost visibility — and today they get the worst
experience.