fix(ollama): don't auto-pull glm-4.7-flash during Local mode onboarding
This commit is contained in:
parent
4cc0bb07c1
commit
1ee548da05
@ -49,7 +49,6 @@ export default definePluginEntry({
|
||||
},
|
||||
],
|
||||
configPatch: result.config,
|
||||
defaultModel: `ollama/${result.defaultModelId}`,
|
||||
};
|
||||
},
|
||||
runNonInteractive: async (ctx: ProviderAuthMethodNonInteractiveContext) => {
|
||||
@ -118,7 +117,7 @@ export default definePluginEntry({
|
||||
return;
|
||||
}
|
||||
const providerSetup = await loadProviderSetup();
|
||||
await providerSetup.ensureOllamaModelPulled({ config, prompter });
|
||||
await providerSetup.ensureOllamaModelPulled({ config, model, prompter });
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
@ -14,15 +14,11 @@ vi.mock("../agents/auth-profiles.js", () => ({
|
||||
}));
|
||||
|
||||
const openUrlMock = vi.hoisted(() => vi.fn(async () => false));
|
||||
vi.mock("./onboard-helpers.js", async (importOriginal) => {
|
||||
const original = await importOriginal<typeof import("./onboard-helpers.js")>();
|
||||
return { ...original, openUrl: openUrlMock };
|
||||
});
|
||||
|
||||
const isRemoteEnvironmentMock = vi.hoisted(() => vi.fn(() => false));
|
||||
vi.mock("./oauth-env.js", () => ({
|
||||
isRemoteEnvironment: isRemoteEnvironmentMock,
|
||||
}));
|
||||
vi.mock("../plugins/setup-browser.js", async (importOriginal) => {
|
||||
const original = await importOriginal<typeof import("../plugins/setup-browser.js")>();
|
||||
return { ...original, openUrl: openUrlMock, isRemoteEnvironment: isRemoteEnvironmentMock };
|
||||
});
|
||||
|
||||
function createOllamaFetchMock(params: {
|
||||
tags?: string[];
|
||||
@ -104,26 +100,28 @@ describe("ollama setup", () => {
|
||||
isRemoteEnvironmentMock.mockReset().mockReturnValue(false);
|
||||
});
|
||||
|
||||
it("returns suggested default model for local mode", async () => {
|
||||
it("puts suggested local model first in local mode", async () => {
|
||||
const prompter = createModePrompter("local");
|
||||
|
||||
const fetchMock = createOllamaFetchMock({ tags: ["llama3:8b"] });
|
||||
vi.stubGlobal("fetch", fetchMock);
|
||||
|
||||
const result = await promptAndConfigureOllama({ cfg: {}, prompter });
|
||||
const modelIds = result.config.models?.providers?.ollama?.models?.map((m) => m.id);
|
||||
|
||||
expect(result.defaultModelId).toBe("glm-4.7-flash");
|
||||
expect(modelIds?.[0]).toBe("glm-4.7-flash");
|
||||
});
|
||||
|
||||
it("returns suggested default model for remote mode", async () => {
|
||||
it("puts suggested cloud model first in remote mode", async () => {
|
||||
const prompter = createModePrompter("remote");
|
||||
|
||||
const fetchMock = createOllamaFetchMock({ tags: ["llama3:8b"] });
|
||||
vi.stubGlobal("fetch", fetchMock);
|
||||
|
||||
const result = await promptAndConfigureOllama({ cfg: {}, prompter });
|
||||
const modelIds = result.config.models?.providers?.ollama?.models?.map((m) => m.id);
|
||||
|
||||
expect(result.defaultModelId).toBe("kimi-k2.5:cloud");
|
||||
expect(modelIds?.[0]).toBe("kimi-k2.5:cloud");
|
||||
});
|
||||
|
||||
it("mode selection affects model ordering (local)", async () => {
|
||||
@ -134,7 +132,6 @@ describe("ollama setup", () => {
|
||||
|
||||
const result = await promptAndConfigureOllama({ cfg: {}, prompter });
|
||||
|
||||
expect(result.defaultModelId).toBe("glm-4.7-flash");
|
||||
const modelIds = result.config.models?.providers?.ollama?.models?.map((m) => m.id);
|
||||
expect(modelIds?.[0]).toBe("glm-4.7-flash");
|
||||
expect(modelIds).toContain("llama3:8b");
|
||||
@ -238,6 +235,7 @@ describe("ollama setup", () => {
|
||||
|
||||
await ensureOllamaModelPulled({
|
||||
config: createDefaultOllamaConfig("ollama/glm-4.7-flash"),
|
||||
model: "ollama/glm-4.7-flash",
|
||||
prompter,
|
||||
});
|
||||
|
||||
@ -253,6 +251,7 @@ describe("ollama setup", () => {
|
||||
|
||||
await ensureOllamaModelPulled({
|
||||
config: createDefaultOllamaConfig("ollama/glm-4.7-flash"),
|
||||
model: "ollama/glm-4.7-flash",
|
||||
prompter,
|
||||
});
|
||||
|
||||
@ -266,6 +265,7 @@ describe("ollama setup", () => {
|
||||
|
||||
await ensureOllamaModelPulled({
|
||||
config: createDefaultOllamaConfig("ollama/kimi-k2.5:cloud"),
|
||||
model: "ollama/kimi-k2.5:cloud",
|
||||
prompter,
|
||||
});
|
||||
|
||||
@ -281,6 +281,7 @@ describe("ollama setup", () => {
|
||||
config: {
|
||||
agents: { defaults: { model: { primary: "openai/gpt-4o" } } },
|
||||
},
|
||||
model: "openai/gpt-4o",
|
||||
prompter,
|
||||
});
|
||||
|
||||
|
||||
@ -293,7 +293,7 @@ async function storeOllamaCredential(agentDir?: string): Promise<void> {
|
||||
export async function promptAndConfigureOllama(params: {
|
||||
cfg: OpenClawConfig;
|
||||
prompter: WizardPrompter;
|
||||
}): Promise<{ config: OpenClawConfig; defaultModelId: string }> {
|
||||
}): Promise<{ config: OpenClawConfig }> {
|
||||
const { prompter } = params;
|
||||
|
||||
// 1. Prompt base URL
|
||||
@ -398,14 +398,13 @@ export async function promptAndConfigureOllama(params: {
|
||||
...modelNames.filter((name) => !suggestedModels.includes(name)),
|
||||
];
|
||||
|
||||
const defaultModelId = suggestedModels[0] ?? OLLAMA_DEFAULT_MODEL;
|
||||
const config = applyOllamaProviderConfig(
|
||||
params.cfg,
|
||||
baseUrl,
|
||||
orderedModelNames,
|
||||
discoveredModelsByName,
|
||||
);
|
||||
return { config, defaultModelId };
|
||||
return { config };
|
||||
}
|
||||
|
||||
/** Non-interactive: auto-discover models and configure provider. */
|
||||
@ -512,15 +511,14 @@ export async function configureOllamaNonInteractive(params: {
|
||||
/** Pull the configured default Ollama model if it isn't already available locally. */
|
||||
export async function ensureOllamaModelPulled(params: {
|
||||
config: OpenClawConfig;
|
||||
model: string;
|
||||
prompter: WizardPrompter;
|
||||
}): Promise<void> {
|
||||
const modelCfg = params.config.agents?.defaults?.model;
|
||||
const modelId = typeof modelCfg === "string" ? modelCfg : modelCfg?.primary;
|
||||
if (!modelId?.startsWith("ollama/")) {
|
||||
if (!params.model.startsWith("ollama/")) {
|
||||
return;
|
||||
}
|
||||
const baseUrl = params.config.models?.providers?.ollama?.baseUrl ?? OLLAMA_DEFAULT_BASE_URL;
|
||||
const modelName = modelId.slice("ollama/".length);
|
||||
const modelName = params.model.slice("ollama/".length);
|
||||
if (isOllamaCloudModel(modelName)) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -486,7 +486,8 @@ export async function runSetupWizard(
|
||||
const modelSelection = await promptDefaultModel({
|
||||
config: nextConfig,
|
||||
prompter,
|
||||
allowKeep: true,
|
||||
// For ollama, don't allow "keep current" since we may need to download the selected model
|
||||
allowKeep: authChoice !== "ollama",
|
||||
ignoreAllowlist: true,
|
||||
includeProviderPluginSetups: true,
|
||||
preferredProvider: await resolvePreferredProviderForAuthChoice({
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user