summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAiden Cline <[email protected]>2025-11-11 13:58:14 -0800
committerGitHub <[email protected]>2025-11-11 15:58:14 -0600
commitc5e096c76a1435473667c4a2e99dc5c10b8fd6cb (patch)
treef65b3070d4714c9b97536cb93f092641e5aad5dc
parente1fc4a756b87e1eafb32baadefaf6b23a625d62c (diff)
downloadopencode-c5e096c76a1435473667c4a2e99dc5c10b8fd6cb.tar.gz
opencode-c5e096c76a1435473667c4a2e99dc5c10b8fd6cb.zip
fix: costs being 0 when using custom model id overrides (#4219)
-rw-r--r--packages/opencode/src/cli/cmd/models.ts46
-rw-r--r--packages/opencode/src/provider/provider.ts2
2 files changed, 42 insertions, 6 deletions
diff --git a/packages/opencode/src/cli/cmd/models.ts b/packages/opencode/src/cli/cmd/models.ts
index 268ed5ff2..f7da2462a 100644
--- a/packages/opencode/src/cli/cmd/models.ts
+++ b/packages/opencode/src/cli/cmd/models.ts
@@ -1,20 +1,56 @@
+import type { Argv } from "yargs"
import { Instance } from "../../project/instance"
import { Provider } from "../../provider/provider"
import { cmd } from "./cmd"
+import { UI } from "../ui"
+import { EOL } from "os"
export const ModelsCommand = cmd({
- command: "models",
+ command: "models [provider]",
describe: "list all available models",
- handler: async () => {
+ builder: (yargs: Argv) => {
+ return yargs
+ .positional("provider", {
+ describe: "provider ID to filter models by",
+ type: "string",
+ array: false,
+ })
+ .option("verbose", {
+ describe: "use more verbose model output (includes metadata like costs)",
+ type: "boolean",
+ })
+ },
+ handler: async (args) => {
await Instance.provide({
directory: process.cwd(),
async fn() {
const providers = await Provider.list()
- for (const [providerID, provider] of Object.entries(providers)) {
- for (const modelID of Object.keys(provider.info.models)) {
- console.log(`${providerID}/${modelID}`)
+ function printModels(providerID: string, verbose?: boolean) {
+ const provider = providers[providerID]
+ for (const [modelID, model] of Object.entries(provider.info.models)) {
+ process.stdout.write(`${providerID}/${modelID}`)
+ process.stdout.write(EOL)
+ if (verbose) {
+ process.stdout.write(JSON.stringify(model, null, 2))
+ process.stdout.write(EOL)
+ }
+ }
+ }
+
+ if (args.provider) {
+ const provider = providers[args.provider]
+ if (!provider) {
+ UI.error(`Provider not found: ${args.provider}`)
+ return
}
+
+ printModels(args.provider, args.verbose)
+ return
+ }
+
+ for (const providerID of Object.keys(providers)) {
+ printModels(providerID, args.verbose)
}
},
})
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index ed0c1dace..e30576bf7 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -289,7 +289,7 @@ export namespace Provider {
}
for (const [modelID, model] of Object.entries(provider.models ?? {})) {
- const existing = parsed.models[modelID]
+ const existing = parsed.models[model.id ?? modelID]
const parsedModel: ModelsDev.Model = {
id: modelID,
name: model.name ?? existing?.name ?? modelID,