Skip to content

Commit 87d6a88

Browse files
committed
fix: resolve per-model api and baseUrl override in transport selection
1 parent 115375f commit 87d6a88

3 files changed

Lines changed: 44 additions & 3 deletions

File tree

src/agents/model-auth.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,6 +1093,7 @@ describe("resolveApiKeyForProvider – synthetic local auth for custom providers
10931093
input: ["text"],
10941094
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
10951095
contextWindow: 8192,
1096+
maxTokens: 4096,
10961097
},
10971098
cfg: {
10981099
models: {

src/agents/pi-embedded-runner/model.test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -709,6 +709,46 @@ describe("resolveModel", () => {
709709
expect(result.error).toBe("Unknown model: openai/typoed-model");
710710
});
711711

712+
it("resolves per-model api and baseUrl override in fallback model", () => {
713+
const cfg = {
714+
models: {
715+
providers: {
716+
"my-router": {
717+
baseUrl: "http://localhost:8080",
718+
api: "ollama",
719+
models: [
720+
{
721+
id: "my-router/claude",
722+
name: "Claude via Router",
723+
api: "anthropic-messages",
724+
input: ["text", "image"],
725+
contextWindow: 200_000,
726+
},
727+
{
728+
id: "my-router/gpt",
729+
name: "GPT via Router",
730+
api: "openai-completions",
731+
baseUrl: "http://localhost:8080/v1",
732+
input: ["text"],
733+
contextWindow: 400_000,
734+
},
735+
],
736+
},
737+
},
738+
},
739+
} as unknown as OpenClawConfig;
740+
741+
const claude = resolveModelForTest("my-router", "my-router/claude", "/tmp/agent", cfg);
742+
const claudeModel = expectResolvedModel(claude);
743+
expect(claudeModel.api).toBe("anthropic-messages");
744+
expect(claudeModel.baseUrl).toBe("http://localhost:8080");
745+
746+
const gpt = resolveModelForTest("my-router", "my-router/gpt", "/tmp/agent", cfg);
747+
const gptModel = expectResolvedModel(gpt);
748+
expect(gptModel.api).toBe("openai-completions");
749+
expect(gptModel.baseUrl).toBe("http://localhost:8080/v1");
750+
});
751+
712752
it("defaults baseUrl-only local custom fallback models to chat completions", () => {
713753
const cfg = {
714754
agents: {

src/agents/pi-embedded-runner/model.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -655,7 +655,7 @@ function applyConfiguredProviderOverrides(params: {
655655
providerConfig.api ??
656656
discoveredModel.api ??
657657
resolveConfiguredProviderDefaultApi(providerConfig),
658-
baseUrl: providerConfig.baseUrl ?? discoveredModel.baseUrl,
658+
baseUrl: metadataOverrideModel?.baseUrl ?? providerConfig.baseUrl ?? discoveredModel.baseUrl,
659659
cfg: params.cfg,
660660
workspaceDir: params.workspaceDir,
661661
runtimeHooks: params.runtimeHooks,
@@ -913,8 +913,8 @@ function resolveConfiguredFallbackModel(params: {
913913
}
914914
const fallbackTransport = resolveProviderTransport({
915915
provider,
916-
api: resolveConfiguredProviderDefaultApi(providerConfig) ?? "openai-responses",
917-
baseUrl: providerConfig?.baseUrl,
916+
api: normalizeResolvedTransportApi(configuredModel?.api) ?? resolveConfiguredProviderDefaultApi(providerConfig) ?? "openai-responses",
917+
baseUrl: configuredModel?.baseUrl ?? providerConfig?.baseUrl,
918918
cfg,
919919
workspaceDir,
920920
runtimeHooks,

0 commit comments

Comments
 (0)