Skip to content

Commit 5bce0ae

Browse files
committed
Use new getApiKeyAndHeaders to fetch the API key from the model registry
1 parent 138acb8 commit 5bce0ae

3 files changed

Lines changed: 96 additions & 8 deletions

File tree

packages/budget-model/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
"@mariozechner/pi-coding-agent": "*"
3838
},
3939
"devDependencies": {
40-
"@mariozechner/pi-ai": "^0.57.0",
41-
"@mariozechner/pi-coding-agent": "^0.57.0",
40+
"@mariozechner/pi-ai": "^0.63.0",
41+
"@mariozechner/pi-coding-agent": "^0.63.0",
4242
"@types/node": "^25.3.5",
4343
"tsup": "^8.5.1",
4444
"typescript": "^5.9.3"

packages/budget-model/src/index.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,11 @@ export async function findBudgetModel(ctx: ExtensionContext, options?: BudgetMod
121121
return findSameProvider(ctx, activeModel, opts.costRatio, opts.majorVersions);
122122
}
123123

124+
async function getApiKey(ctx: ExtensionContext, model: Model<Api>): Promise<string | undefined> {
125+
const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
126+
return auth.ok ? auth.apiKey : undefined;
127+
}
128+
124129
// --- Strategies ---
125130

126131
async function findSameProvider(
@@ -162,7 +167,7 @@ async function findSameProvider(
162167

163168
for (const candidate of candidates) {
164169
if (candidate.cost.input >= activeModel.cost.input * costRatio) break;
165-
const apiKey = await ctx.modelRegistry.getApiKey(candidate);
170+
const apiKey = await getApiKey(ctx, candidate);
166171
if (apiKey) {
167172
return { model: candidate, apiKey };
168173
}
@@ -205,7 +210,7 @@ async function findAnyProvider(
205210

206211
for (const model of allCandidates) {
207212
if (model.cost.input >= activeModel.cost.input * costRatio) break;
208-
const apiKey = await ctx.modelRegistry.getApiKey(model);
213+
const apiKey = await getApiKey(ctx, model);
209214
if (apiKey) {
210215
return { model, apiKey };
211216
}
@@ -226,7 +231,7 @@ async function resolveModelOverride(ctx: ExtensionContext, override: string): Pr
226231
throw new NoBudgetModelError(`model override "${override}" not found in registry`);
227232
}
228233

229-
const apiKey = await ctx.modelRegistry.getApiKey(model);
234+
const apiKey = await getApiKey(ctx, model);
230235
if (!apiKey) {
231236
throw new NoBudgetModelError(`no API key for model override "${override}"`);
232237
}
@@ -276,7 +281,7 @@ export function findCheapestInMajorVersions(models: Model<Api>[], majorVersions:
276281

277282
/** Build a ModelCandidate from a Model (checks API key availability). */
278283
async function toCandidate(ctx: ExtensionContext, model: Model<Api>, provider: string): Promise<ModelCandidate> {
279-
const apiKey = await ctx.modelRegistry.getApiKey(model);
284+
const apiKey = await getApiKey(ctx, model);
280285
return {
281286
provider,
282287
modelId: model.id,

yarn.lock

Lines changed: 85 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1381,6 +1381,15 @@ __metadata:
13811381
languageName: node
13821382
linkType: hard
13831383

1384+
"@mariozechner/pi-agent-core@npm:^0.63.2":
1385+
version: 0.63.2
1386+
resolution: "@mariozechner/pi-agent-core@npm:0.63.2"
1387+
dependencies:
1388+
"@mariozechner/pi-ai": "npm:^0.63.2"
1389+
checksum: 10c0/6a8644e6e54b69e83dd109630d09e4af7a1606fa5026fb207a7d2022934e36682550672c74ed5f48d2b28007d6dd8adb3cac9337e6c0c9059a15cfbb49093808
1390+
languageName: node
1391+
linkType: hard
1392+
13841393
"@mariozechner/pi-ai@npm:*, @mariozechner/pi-ai@npm:^0.57.0":
13851394
version: 0.57.0
13861395
resolution: "@mariozechner/pi-ai@npm:0.57.0"
@@ -1404,6 +1413,29 @@ __metadata:
14041413
languageName: node
14051414
linkType: hard
14061415

1416+
"@mariozechner/pi-ai@npm:^0.63.0, @mariozechner/pi-ai@npm:^0.63.2":
1417+
version: 0.63.2
1418+
resolution: "@mariozechner/pi-ai@npm:0.63.2"
1419+
dependencies:
1420+
"@anthropic-ai/sdk": "npm:^0.73.0"
1421+
"@aws-sdk/client-bedrock-runtime": "npm:^3.983.0"
1422+
"@google/genai": "npm:^1.40.0"
1423+
"@mistralai/mistralai": "npm:1.14.1"
1424+
"@sinclair/typebox": "npm:^0.34.41"
1425+
ajv: "npm:^8.17.1"
1426+
ajv-formats: "npm:^3.0.1"
1427+
chalk: "npm:^5.6.2"
1428+
openai: "npm:6.26.0"
1429+
partial-json: "npm:^0.1.7"
1430+
proxy-agent: "npm:^6.5.0"
1431+
undici: "npm:^7.19.1"
1432+
zod-to-json-schema: "npm:^3.24.6"
1433+
bin:
1434+
pi-ai: dist/cli.js
1435+
checksum: 10c0/b1c881858ca44fee1a1749056b21fe90d6902d56dd89c57d470773055c435dfa68af1df37ffe565ca0ffa6fb8cacf91e25c2303eb7d52c60d0fe24b4943edcf9
1436+
languageName: node
1437+
linkType: hard
1438+
14071439
"@mariozechner/pi-coding-agent@npm:*, @mariozechner/pi-coding-agent@npm:^0.57.0":
14081440
version: 0.57.0
14091441
resolution: "@mariozechner/pi-coding-agent@npm:0.57.0"
@@ -1437,6 +1469,40 @@ __metadata:
14371469
languageName: node
14381470
linkType: hard
14391471

1472+
"@mariozechner/pi-coding-agent@npm:^0.63.0":
1473+
version: 0.63.2
1474+
resolution: "@mariozechner/pi-coding-agent@npm:0.63.2"
1475+
dependencies:
1476+
"@mariozechner/clipboard": "npm:^0.3.2"
1477+
"@mariozechner/jiti": "npm:^2.6.2"
1478+
"@mariozechner/pi-agent-core": "npm:^0.63.2"
1479+
"@mariozechner/pi-ai": "npm:^0.63.2"
1480+
"@mariozechner/pi-tui": "npm:^0.63.2"
1481+
"@silvia-odwyer/photon-node": "npm:^0.3.4"
1482+
ajv: "npm:^8.17.1"
1483+
chalk: "npm:^5.5.0"
1484+
cli-highlight: "npm:^2.1.11"
1485+
diff: "npm:^8.0.2"
1486+
extract-zip: "npm:^2.0.1"
1487+
file-type: "npm:^21.1.1"
1488+
glob: "npm:^13.0.1"
1489+
hosted-git-info: "npm:^9.0.2"
1490+
ignore: "npm:^7.0.5"
1491+
marked: "npm:^15.0.12"
1492+
minimatch: "npm:^10.2.3"
1493+
proper-lockfile: "npm:^4.1.2"
1494+
strip-ansi: "npm:^7.1.0"
1495+
undici: "npm:^7.19.1"
1496+
yaml: "npm:^2.8.2"
1497+
dependenciesMeta:
1498+
"@mariozechner/clipboard":
1499+
optional: true
1500+
bin:
1501+
pi: dist/cli.js
1502+
checksum: 10c0/cd8ffa7e2389979420fc45222a3248213dc46430083d608512a9f833aac48a20be62cb9bbdad87d7f26f617b9bffef0aff70d53baf766600d5901b322e27530e
1503+
languageName: node
1504+
linkType: hard
1505+
14401506
"@mariozechner/pi-tui@npm:^0.57.0":
14411507
version: 0.57.0
14421508
resolution: "@mariozechner/pi-tui@npm:0.57.0"
@@ -1454,6 +1520,23 @@ __metadata:
14541520
languageName: node
14551521
linkType: hard
14561522

1523+
"@mariozechner/pi-tui@npm:^0.63.2":
1524+
version: 0.63.2
1525+
resolution: "@mariozechner/pi-tui@npm:0.63.2"
1526+
dependencies:
1527+
"@types/mime-types": "npm:^2.1.4"
1528+
chalk: "npm:^5.5.0"
1529+
get-east-asian-width: "npm:^1.3.0"
1530+
koffi: "npm:^2.9.0"
1531+
marked: "npm:^15.0.12"
1532+
mime-types: "npm:^3.0.1"
1533+
dependenciesMeta:
1534+
koffi:
1535+
optional: true
1536+
checksum: 10c0/576a865593e85642793bde9924559a2e3a511952d0e5bac0e5ed417f5f6e9229bc9f03582b786d1ef475bcb721dab64bcab88e1fb92fc64bcf1cd4dee66b4358
1537+
languageName: node
1538+
linkType: hard
1539+
14571540
"@mistralai/mistralai@npm:1.14.1":
14581541
version: 1.14.1
14591542
resolution: "@mistralai/mistralai@npm:1.14.1"
@@ -4530,8 +4613,8 @@ __metadata:
45304613
version: 0.0.0-use.local
45314614
resolution: "pi-budget-model@workspace:packages/budget-model"
45324615
dependencies:
4533-
"@mariozechner/pi-ai": "npm:^0.57.0"
4534-
"@mariozechner/pi-coding-agent": "npm:^0.57.0"
4616+
"@mariozechner/pi-ai": "npm:^0.63.0"
4617+
"@mariozechner/pi-coding-agent": "npm:^0.63.0"
45354618
"@types/node": "npm:^25.3.5"
45364619
tsup: "npm:^8.5.1"
45374620
typescript: "npm:^5.9.3"

0 commit comments

Comments
 (0)