From 8303fa9382d08dde1f99a008790084332aaa3c2c Mon Sep 17 00:00:00 2001 From: lploc94 Date: Tue, 27 Jan 2026 18:49:58 +0700 Subject: [PATCH] fix(models): inherit baseUrl and api from provider config When using custom providers with inline model definitions, the baseUrl and api properties from the provider config were not being passed to the individual models. This caused requests to be sent to the wrong endpoint or with the wrong API format. Changes: - buildInlineProviderModels now copies baseUrl from provider to models - buildInlineProviderModels now inherits api from provider if not set on model - resolveModel fallback path now includes baseUrl from provider config Co-Authored-By: Claude (claude-opus-4.5) --- src/agents/pi-embedded-runner/model.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/agents/pi-embedded-runner/model.ts b/src/agents/pi-embedded-runner/model.ts index 1d7201ea9..1792e6706 100644 --- a/src/agents/pi-embedded-runner/model.ts +++ b/src/agents/pi-embedded-runner/model.ts @@ -8,15 +8,25 @@ import { DEFAULT_CONTEXT_TOKENS } from "../defaults.js"; import { normalizeModelCompat } from "../model-compat.js"; import { normalizeProviderId } from "../model-selection.js"; -type InlineModelEntry = ModelDefinitionConfig & { provider: string }; +type InlineModelEntry = ModelDefinitionConfig & { provider: string; baseUrl?: string }; +type InlineProviderConfig = { + baseUrl?: string; + api?: ModelDefinitionConfig["api"]; + models?: ModelDefinitionConfig[]; +}; export function buildInlineProviderModels( - providers: Record, + providers: Record, ): InlineModelEntry[] { return Object.entries(providers).flatMap(([providerId, entry]) => { const trimmed = providerId.trim(); if (!trimmed) return []; - return (entry?.models ?? []).map((model) => ({ ...model, provider: trimmed })); + return (entry?.models ?? []).map((model) => ({ + ...model, + provider: trimmed, + baseUrl: entry?.baseUrl, + api: model.api ?? entry?.api, + })); }); } @@ -72,6 +82,7 @@ export function resolveModel( name: modelId, api: providerCfg?.api ?? "openai-responses", provider, + baseUrl: providerCfg?.baseUrl, reasoning: false, input: ["text"], cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },