mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-18 10:11:02 +00:00
fix(config): preserve agent-level apiKey/baseUrl during models.json merge
When ensureOpenClawModelsJson runs in merge mode, the shallow merge
{ ...existingProviders, ...providers } causes the main config to
overwrite agent-level models.json entries entirely. This drops any
apiKey or baseUrl that the user set specifically for an agent.
Preserve existing agent-level apiKey and baseUrl when merging, while
still accepting all other updates (model catalog, api type, etc.)
from the newly computed provider config.
Closes #27243
This commit is contained in:
committed by
Gustavo Madeira Santana
parent
92c309f2e1
commit
ee26a90bf5
@@ -142,7 +142,30 @@ export async function ensureOpenClawModelsJson(
|
||||
string,
|
||||
NonNullable<ModelsConfig["providers"]>[string]
|
||||
>;
|
||||
mergedProviders = { ...existingProviders, ...providers };
|
||||
mergedProviders = {};
|
||||
for (const [key, entry] of Object.entries(existingProviders)) {
|
||||
mergedProviders[key] = entry;
|
||||
}
|
||||
for (const [key, newEntry] of Object.entries(providers)) {
|
||||
const existing = existingProviders[key] as
|
||||
| (NonNullable<ModelsConfig["providers"]>[string] & {
|
||||
apiKey?: string;
|
||||
baseUrl?: string;
|
||||
})
|
||||
| undefined;
|
||||
if (existing) {
|
||||
const preserved: Record<string, unknown> = {};
|
||||
if (typeof existing.apiKey === "string" && existing.apiKey) {
|
||||
preserved.apiKey = existing.apiKey;
|
||||
}
|
||||
if (typeof existing.baseUrl === "string" && existing.baseUrl) {
|
||||
preserved.baseUrl = existing.baseUrl;
|
||||
}
|
||||
mergedProviders[key] = { ...newEntry, ...preserved };
|
||||
} else {
|
||||
mergedProviders[key] = newEntry;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user