|
|
@@ -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)
|
|
|
}
|
|
|
},
|
|
|
})
|