Skip to content

Commit 1a28d1b

Browse files
committed
fork: support custom model in agent command
1 parent 8a3a9b3 commit 1a28d1b

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

packages/opencode/src/cli/cmd/agent.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ export const AgentCommand = cmd({
5656
type: "string",
5757
describe: "additional context to pass to the agent (JSON format)",
5858
})
59+
.option("model", {
60+
type: "string",
61+
alias: ["m"],
62+
describe: "model to use in the format of provider/model",
63+
})
5964
.check((argv) => {
6065
if (!argv.list && !argv.name) {
6166
throw new Error("Agent name is required unless using --list")
@@ -113,12 +118,14 @@ export const AgentCommand = cmd({
113118
}
114119
}
115120

116-
const session = await Session.createForAgent(agentId, initContext)
121+
const session = await Session.createForAgent(agentId, initContext, args.model)
117122
const agentConfig = await AgentServices.loadConfig(
118123
agentId,
119124
session.agentContext,
120125
)
121-
const model = agentConfig.model
126+
const model = session.model
127+
? Provider.parseModel(session.model)
128+
: agentConfig.model
122129
? Provider.parseModel(agentConfig.model)
123130
: await Provider.defaultModel()
124131
const modelName = `${model.providerID}/${model.modelID}`

packages/opencode/src/session/index.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export namespace Session {
6767
}),
6868
agent: z.string().optional(),
6969
agentContext: Agent.Context,
70+
model: z.string().optional(),
7071
revert: z
7172
.object({
7273
messageID: z.string(),
@@ -167,6 +168,7 @@ export namespace Session {
167168
export async function createForAgent(
168169
agentId: string,
169170
initContext: Agent.Context,
171+
model?: string,
170172
): Promise<Info> {
171173
const session = await create(undefined, agentId)
172174
const fullContext = await AgentServices.loadContext(
@@ -178,6 +180,7 @@ export namespace Session {
178180
return (await update(session.id, (draft) => {
179181
draft.agent = agentId
180182
draft.agentContext = fullContext
183+
if (model) draft.model = model
181184
}))!
182185
}
183186

@@ -328,12 +331,13 @@ export namespace Session {
328331
? await AgentServices.loadConfig(session.agent, session.agentContext)
329332
: undefined
330333

331-
const agentModel = agentConfig?.model
332-
? Provider.parseModel(agentConfig.model)
333-
: undefined
334+
const resolvedModel = (() => {
335+
if (session.model) return Provider.parseModel(session.model)
336+
if (agentConfig?.model) return Provider.parseModel(agentConfig.model)
337+
return { providerID: input.providerID, modelID: input.modelID }
338+
})()
334339

335-
const modelID = agentModel ? agentModel?.modelID : input.modelID
336-
const providerID = agentModel ? agentModel?.providerID : input.providerID
340+
const { providerID, modelID } = resolvedModel
337341
const model = await Provider.getModel(providerID, modelID)
338342

339343
if (session.revert) {

0 commit comments

Comments
 (0)