Skip to content

Commit dd068f8

Browse files
committed
feat: model option for generating agent
1 parent 80b25c7 commit dd068f8

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

packages/opencode/src/agent/agent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ export namespace Agent {
101101
return state().then((x) => Object.values(x))
102102
}
103103

104-
export async function generate(input: { description: string }) {
105-
const defaultModel = await Provider.defaultModel()
104+
export async function generate(input: { description: string; model?: { providerID: string; modelID: string } }) {
105+
const defaultModel = input.model ?? (await Provider.defaultModel())
106106
const model = await Provider.getModel(defaultModel.providerID, defaultModel.modelID)
107107
const system = SystemPrompt.header(defaultModel.providerID)
108108
system.push(PROMPT_GENERATE)

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

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,22 @@ import * as prompts from "@clack/prompts"
33
import { UI } from "../ui"
44
import { Global } from "../../global"
55
import { Agent } from "../../agent/agent"
6+
import { Provider } from "../../provider/provider"
67
import path from "path"
78
import matter from "gray-matter"
89
import { App } from "../../app/app"
910

1011
const AgentCreateCommand = cmd({
1112
command: "create",
1213
describe: "create a new agent",
13-
async handler() {
14+
builder: (yargs) => {
15+
return yargs.option("model", {
16+
type: "string",
17+
alias: ["m"],
18+
describe: "model to use in the format of provider/model",
19+
})
20+
},
21+
async handler(args) {
1422
await App.provide({ cwd: process.cwd() }, async (app) => {
1523
UI.empty()
1624
prompts.intro("Create agent")
@@ -43,10 +51,33 @@ const AgentCreateCommand = cmd({
4351
})
4452
if (prompts.isCancel(query)) throw new UI.CancelledError()
4553

54+
let modelConfig: { providerID: string; modelID: string } | undefined
55+
if (args.model) {
56+
try {
57+
const parsed = Provider.parseModel(args.model)
58+
const provider = await Provider.getProvider(parsed.providerID)
59+
if (!provider) {
60+
throw new Error(`Provider '${parsed.providerID}' not found`)
61+
}
62+
await Provider.getModel(parsed.providerID, parsed.modelID)
63+
modelConfig = parsed
64+
} catch (error) {
65+
prompts.log.error(`Invalid model: ${args.model}`)
66+
prompts.log.error(error instanceof Error ? error.message : String(error))
67+
throw new UI.CancelledError()
68+
}
69+
}
70+
4671
const spinner = prompts.spinner()
4772

48-
spinner.start("Generating agent configuration...")
49-
const generated = await Agent.generate({ description: query })
73+
const spinnerMessage = modelConfig
74+
? `Generating agent configuration using ${modelConfig.providerID}/${modelConfig.modelID}...`
75+
: "Generating agent configuration..."
76+
spinner.start(spinnerMessage)
77+
const generated = await Agent.generate({
78+
description: query,
79+
model: modelConfig,
80+
})
5081
spinner.stop(`Agent ${generated.identifier} generated`)
5182

5283
const availableTools = [

0 commit comments

Comments
 (0)