| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import type { Argv } from "yargs"
- import { Instance } from "../../project/instance"
- import { Provider } from "../../provider/provider"
- import { ModelsDev } from "../../provider/models"
- import { cmd } from "./cmd"
- import { UI } from "../ui"
- import { EOL } from "os"
- export const ModelsCommand = cmd({
- command: "models [provider]",
- describe: "list all available models",
- 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",
- })
- .option("refresh", {
- describe: "refresh the models cache from models.dev",
- type: "boolean",
- })
- },
- handler: async (args) => {
- if (args.refresh) {
- await ModelsDev.refresh()
- UI.println(UI.Style.TEXT_SUCCESS_BOLD + "Models cache refreshed" + UI.Style.TEXT_NORMAL)
- }
- await Instance.provide({
- directory: process.cwd(),
- async fn() {
- const providers = await Provider.list()
- 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)
- }
- },
- })
- },
- })
|