models.ts 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import type { Argv } from "yargs"
  2. import { Instance } from "../../project/instance"
  3. import { Provider } from "../../provider/provider"
  4. import { ModelsDev } from "../../provider/models"
  5. import { cmd } from "./cmd"
  6. import { UI } from "../ui"
  7. import { EOL } from "os"
  8. export const ModelsCommand = cmd({
  9. command: "models [provider]",
  10. describe: "list all available models",
  11. builder: (yargs: Argv) => {
  12. return yargs
  13. .positional("provider", {
  14. describe: "provider ID to filter models by",
  15. type: "string",
  16. array: false,
  17. })
  18. .option("verbose", {
  19. describe: "use more verbose model output (includes metadata like costs)",
  20. type: "boolean",
  21. })
  22. .option("refresh", {
  23. describe: "refresh the models cache from models.dev",
  24. type: "boolean",
  25. })
  26. },
  27. handler: async (args) => {
  28. if (args.refresh) {
  29. await ModelsDev.refresh()
  30. UI.println(UI.Style.TEXT_SUCCESS_BOLD + "Models cache refreshed" + UI.Style.TEXT_NORMAL)
  31. }
  32. await Instance.provide({
  33. directory: process.cwd(),
  34. async fn() {
  35. const providers = await Provider.list()
  36. function printModels(providerID: string, verbose?: boolean) {
  37. const provider = providers[providerID]
  38. for (const [modelID, model] of Object.entries(provider.info.models)) {
  39. process.stdout.write(`${providerID}/${modelID}`)
  40. process.stdout.write(EOL)
  41. if (verbose) {
  42. process.stdout.write(JSON.stringify(model, null, 2))
  43. process.stdout.write(EOL)
  44. }
  45. }
  46. }
  47. if (args.provider) {
  48. const provider = providers[args.provider]
  49. if (!provider) {
  50. UI.error(`Provider not found: ${args.provider}`)
  51. return
  52. }
  53. printModels(args.provider, args.verbose)
  54. return
  55. }
  56. for (const providerID of Object.keys(providers)) {
  57. printModels(providerID, args.verbose)
  58. }
  59. },
  60. })
  61. },
  62. })