diff --git a/packages/server/src/server/agent/providers/pi/agent.test.ts b/packages/server/src/server/agent/providers/pi/agent.test.ts index 52d7c65128..0712160ecd 100644 --- a/packages/server/src/server/agent/providers/pi/agent.test.ts +++ b/packages/server/src/server/agent/providers/pi/agent.test.ts @@ -2505,6 +2505,26 @@ describe("PiRpcAgentClient", () => { expect(pi.recordedLaunches[0]).toMatchObject({ cwd: "/workspace/with-extension" }); }); + test("marks the model Pi resolves from its own settings as the catalog default", async () => { + const pi = new FakePi(); + const unconfigured = { provider: "openai", id: "gpt-4", name: "GPT-4", reasoning: false }; + const configured = { provider: "zai", id: "glm-5.3", name: "GLM-5.3", reasoning: true }; + pi.queueSessionSetup((session) => { + session.models = [unconfigured, configured]; + session.state = { ...session.state, model: configured }; + }); + + const catalog = await createClient(pi).fetchCatalog({ + scope: "workspace", + cwd: "/workspace/project", + force: false, + }); + + expect(catalog.models.filter((model) => model.isDefault).map((model) => model.id)).toEqual([ + "zai/glm-5.3", + ]); + }); + test("honors per-model Pi thinking maps and clamps the catalog default upward", async () => { const pi = new FakePi(); pi.queueSessionSetup((session) => { diff --git a/packages/server/src/server/agent/providers/pi/agent.ts b/packages/server/src/server/agent/providers/pi/agent.ts index aa6117f550..4c2760cdba 100644 --- a/packages/server/src/server/agent/providers/pi/agent.ts +++ b/packages/server/src/server/agent/providers/pi/agent.ts @@ -2664,12 +2664,23 @@ export class PiRpcAgentClient implements AgentClient { }); if (!runtimeSession) throw new Error("Pi catalog runtime did not start"); const catalogSession = runtimeSession; + const piModels = await runProviderRefreshActivity(context, "get_available_models", () => + catalogSession.getAvailableModels(null), + ); + // A fresh Pi session starts on the model Pi resolves from its own settings. + const { model: configuredModel } = await runProviderRefreshActivity( + context, + "get_state", + () => catalogSession.getState(), + ); const models = transformPiModels( - ( - await runProviderRefreshActivity(context, "get_available_models", () => - catalogSession.getAvailableModels(null), - ) - ).map((model) => mapPiModel(model, PI_PROVIDER)), + piModels.map((model) => { + const mapped = mapPiModel(model, PI_PROVIDER); + const isConfigured = + model.provider === configuredModel?.provider && model.id === configuredModel?.id; + if (isConfigured) mapped.isDefault = true; + return mapped; + }), ); return { models, modes: [] }; } finally {