Browse Source

fix: costs being 0 when using custom model id overrides (#4219)

Aiden Cline 3 months ago
parent
commit
c5e096c76a

+ 41 - 5
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)
         }
       },
     })

+ 1 - 1
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,