fix: apply default model aliases even when no user models configured
Previously, applyModelDefaults would return early if cfg.agents.defaults.models was empty, which meant the DEFAULT_MODEL_ALIASES (opus, sonnet, gpt, etc.) were never added to the config. This caused isolated cron sessions to fail with 'Unknown model' errors when using aliases like 'sonnet'. Now we always iterate through DEFAULT_MODEL_ALIASES and add them to the config, creating model entries if they don't exist.
This commit is contained in:
parent
5f4715acfc
commit
c3e4426a27
@ -211,18 +211,16 @@ export function applyModelDefaults(cfg: MoltbotConfig): MoltbotConfig {
|
||||
}
|
||||
|
||||
const existingAgent = nextCfg.agents?.defaults;
|
||||
if (!existingAgent) return mutated ? nextCfg : cfg;
|
||||
const existingModels = existingAgent.models ?? {};
|
||||
if (Object.keys(existingModels).length === 0) return mutated ? nextCfg : cfg;
|
||||
const existingModels = existingAgent?.models ?? {};
|
||||
|
||||
const nextModels: Record<string, { alias?: string }> = {
|
||||
...existingModels,
|
||||
};
|
||||
|
||||
// Always apply default model aliases, creating entries if they don't exist
|
||||
for (const [alias, target] of Object.entries(DEFAULT_MODEL_ALIASES)) {
|
||||
const entry = nextModels[target];
|
||||
if (!entry) continue;
|
||||
if (entry.alias !== undefined) continue;
|
||||
if (entry?.alias !== undefined) continue; // User already defined an alias
|
||||
nextModels[target] = { ...entry, alias };
|
||||
mutated = true;
|
||||
}
|
||||
|
||||
@ -4,6 +4,34 @@ import { applyModelDefaults } from "./defaults.js";
|
||||
import type { MoltbotConfig } from "./types.js";
|
||||
|
||||
describe("applyModelDefaults", () => {
|
||||
it("adds default aliases even when no user models are configured", () => {
|
||||
// Regression test: previously applyModelDefaults returned early when
|
||||
// agents.defaults.models was empty, causing cron jobs using aliases
|
||||
// like "sonnet" to fail with "Unknown model" errors.
|
||||
const cfg = {} satisfies MoltbotConfig;
|
||||
const next = applyModelDefaults(cfg);
|
||||
|
||||
expect(next.agents?.defaults?.models?.["anthropic/claude-opus-4-5"]?.alias).toBe("opus");
|
||||
expect(next.agents?.defaults?.models?.["anthropic/claude-sonnet-4-5"]?.alias).toBe("sonnet");
|
||||
expect(next.agents?.defaults?.models?.["openai/gpt-5.2"]?.alias).toBe("gpt");
|
||||
expect(next.agents?.defaults?.models?.["openai/gpt-5-mini"]?.alias).toBe("gpt-mini");
|
||||
expect(next.agents?.defaults?.models?.["google/gemini-3-pro-preview"]?.alias).toBe("gemini");
|
||||
expect(next.agents?.defaults?.models?.["google/gemini-3-flash-preview"]?.alias).toBe(
|
||||
"gemini-flash",
|
||||
);
|
||||
});
|
||||
|
||||
it("adds default aliases when agents.defaults exists but models is empty", () => {
|
||||
const cfg = {
|
||||
agents: {
|
||||
defaults: {},
|
||||
},
|
||||
} satisfies MoltbotConfig;
|
||||
const next = applyModelDefaults(cfg);
|
||||
|
||||
expect(next.agents?.defaults?.models?.["anthropic/claude-sonnet-4-5"]?.alias).toBe("sonnet");
|
||||
});
|
||||
|
||||
it("adds default aliases when models are present", () => {
|
||||
const cfg = {
|
||||
agents: {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user