@larkup/cli 0.1.16 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/LICENSE +176 -24
  2. package/dist/index.js +2504 -244
  3. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -66,11 +66,98 @@ var prompts = {
66
66
  spinner: p.spinner
67
67
  };
68
68
 
69
+ // package.json
70
+ var package_default = {
71
+ name: "@larkup/cli",
72
+ version: "0.1.19",
73
+ publishConfig: {
74
+ access: "public"
75
+ },
76
+ type: "module",
77
+ bin: {
78
+ larkup: "./dist/index.js"
79
+ },
80
+ files: [
81
+ "dist"
82
+ ],
83
+ scripts: {
84
+ build: "tsup",
85
+ dev: "tsup --watch",
86
+ larkup: "tsx src/index.ts"
87
+ },
88
+ dependencies: {
89
+ "@ai-sdk/cohere": "^3.0.39",
90
+ "@ai-sdk/deepseek": "^2.0.39",
91
+ "@ai-sdk/gateway": "^3.0.133",
92
+ "@ai-sdk/google": "^3.0.83",
93
+ "@ai-sdk/mistral": "^3.0.40",
94
+ "@ai-sdk/openai": "^3.0.68",
95
+ "@ai-sdk/openai-compatible": "^2.0.51",
96
+ "@clack/prompts": "^0.10.1",
97
+ "@lancedb/lancedb": "^0.30.0",
98
+ "@larkup/core": "workspace:*",
99
+ "@larkup/vector-stores": "workspace:*",
100
+ "@pinecone-database/pinecone": "^7.2.0",
101
+ ai: "^6.0.197",
102
+ chalk: "^5.6.2",
103
+ chromadb: "^1.10.5",
104
+ "cli-table3": "^0.6.5",
105
+ commander: "^13.1.0",
106
+ zod: "^4.4.3"
107
+ },
108
+ devDependencies: {
109
+ tsup: "^8.0.0",
110
+ tsx: "^4.22.4",
111
+ typescript: "5.7.3"
112
+ }
113
+ };
114
+
115
+ // src/updater.ts
116
+ var VERSION_CHECK_URL = "https://larkup.de/api/version";
117
+ function compareVersions(a, b) {
118
+ const pa = a.replace(/^v/, "").split(".").map(Number);
119
+ const pb = b.replace(/^v/, "").split(".").map(Number);
120
+ for (let i = 0; i < 3; i++) {
121
+ const va = pa[i] || 0;
122
+ const vb = pb[i] || 0;
123
+ if (va > vb) return 1;
124
+ if (va < vb) return -1;
125
+ }
126
+ return 0;
127
+ }
128
+ async function checkUpdate() {
129
+ try {
130
+ const controller = new AbortController();
131
+ const timeout = setTimeout(() => controller.abort(), 1500);
132
+ const res = await fetch(VERSION_CHECK_URL, {
133
+ signal: controller.signal
134
+ });
135
+ clearTimeout(timeout);
136
+ if (!res.ok) return;
137
+ const data = await res.json();
138
+ const currentVersion = package_default.version;
139
+ if (data.version && compareVersions(data.version, currentVersion) > 0) {
140
+ console.log("");
141
+ log.info(`\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E`);
142
+ log.info(
143
+ `\u2502 Update available: ${currentVersion} \u2192 ${data.version}${" ".repeat(25 - currentVersion.length - data.version.length)}\u2502`
144
+ );
145
+ log.info(
146
+ `\u2502 Run: ${log.fmt.cyan("npm install -g @larkup/cli")} \u2502`
147
+ );
148
+ log.info(`\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F`);
149
+ console.log("");
150
+ }
151
+ } catch {
152
+ }
153
+ }
154
+
69
155
  // ../../packages/core/src/workspace.ts
70
156
  import { promises as fs } from "fs";
71
157
  import path from "path";
72
158
  import { randomUUID } from "crypto";
73
159
  import { AsyncLocalStorage } from "async_hooks";
160
+ import net from "net";
74
161
 
75
162
  // ../../packages/core/src/types.ts
76
163
  var DEFAULT_CONFIG = {
@@ -87,7 +174,8 @@ var DEFAULT_CONFIG = {
87
174
  vectorStore: "lancedb",
88
175
  storeConfig: {
89
176
  mode: "local",
90
- dbPath: "./.larkup/lancedb"
177
+ dbPath: "./.larkup/lancedb",
178
+ tableName: "documents"
91
179
  },
92
180
  topK: 5,
93
181
  serperApiKey: "",
@@ -225,15 +313,35 @@ async function requireDataDir() {
225
313
  const { server } = await createServer("My RAG server");
226
314
  return serverDir(server.id);
227
315
  }
228
- function nextPort(ws) {
316
+ async function isPortFree(port) {
317
+ return new Promise((resolve) => {
318
+ const server = net.createServer();
319
+ server.once("error", () => resolve(false));
320
+ server.once("listening", () => {
321
+ server.close(() => resolve(true));
322
+ });
323
+ server.listen(port, "127.0.0.1");
324
+ });
325
+ }
326
+ async function nextPort(ws) {
229
327
  const ports = ws.servers.map((s) => s.port);
230
- return Math.max(BASE_PORT - 1, ...ports) + 1;
328
+ let candidate = Math.max(BASE_PORT - 1, ...ports) + 1;
329
+ while (!await isPortFree(candidate)) {
330
+ candidate++;
331
+ }
332
+ return candidate;
231
333
  }
232
- function defaultConfigFor(id, name) {
334
+ function defaultConfigFor(id, name, prevConfig = {}) {
233
335
  return {
234
336
  ...DEFAULT_CONFIG,
235
337
  projectName: name.toLowerCase().trim().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "my-rag",
236
338
  storeConfig: { mode: "local", dbPath: relServerPath(id, "lancedb") },
339
+ embeddingApiKey: prevConfig.embeddingApiKey ?? DEFAULT_CONFIG.embeddingApiKey,
340
+ customEmbeddings: prevConfig.customEmbeddings ?? DEFAULT_CONFIG.customEmbeddings,
341
+ chatApiKey: prevConfig.chatApiKey ?? DEFAULT_CONFIG.chatApiKey,
342
+ customChatModels: prevConfig.customChatModels ?? DEFAULT_CONFIG.customChatModels,
343
+ serperApiKey: prevConfig.serperApiKey ?? DEFAULT_CONFIG.serperApiKey,
344
+ firecrawlApiKey: prevConfig.firecrawlApiKey ?? DEFAULT_CONFIG.firecrawlApiKey,
237
345
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
238
346
  };
239
347
  }
@@ -245,15 +353,23 @@ function createServer(name) {
245
353
  const meta = {
246
354
  id,
247
355
  name: name.trim() || "Untitled server",
248
- port: nextPort(ws),
356
+ port: await nextPort(ws),
249
357
  createdAt: now,
250
358
  updatedAt: now
251
359
  };
252
360
  const dir = serverDir(id);
253
361
  await fs.mkdir(dir, { recursive: true });
362
+ let prevConfig = {};
363
+ if (ws.activeServerId) {
364
+ try {
365
+ const raw = await fs.readFile(path.join(serverDir(ws.activeServerId), "config.json"), "utf8");
366
+ prevConfig = JSON.parse(raw);
367
+ } catch {
368
+ }
369
+ }
254
370
  await fs.writeFile(
255
371
  path.join(dir, "config.json"),
256
- JSON.stringify(defaultConfigFor(id, meta.name), null, 2),
372
+ JSON.stringify(defaultConfigFor(id, meta.name, prevConfig), null, 2),
257
373
  "utf8"
258
374
  );
259
375
  const next = {
@@ -332,7 +448,7 @@ async function readConfig() {
332
448
  embeddingModelId: migratedEmbeddingId ?? DEFAULT_CONFIG.embeddingModelId,
333
449
  customEmbeddings: migratedEmbeddings,
334
450
  chunking: { ...DEFAULT_CONFIG.chunking, ...parsed.chunking },
335
- storeConfig: { ...parsed.storeConfig }
451
+ storeConfig: { ...DEFAULT_CONFIG.storeConfig, ...parsed.storeConfig }
336
452
  };
337
453
  delete result["customEmbedding"];
338
454
  return result;
@@ -838,20 +954,12 @@ var EMBEDDING_MODELS = [
838
954
  },
839
955
  // ── Google ───────────────────────────────────────────────────────────
840
956
  {
841
- id: "google/text-embedding-004",
842
- label: "text-embedding-004",
957
+ id: "google/gemini-embedding-001",
958
+ label: "gemini-embedding-001",
843
959
  provider: "google",
844
960
  dimensions: 768,
845
961
  maxInputTokens: 2048,
846
- description: "Compact, high-quality embeddings from Google."
847
- },
848
- {
849
- id: "google/gemini-embedding-exp-03-07",
850
- label: "gemini-embedding-exp-03-07",
851
- provider: "google",
852
- dimensions: 3072,
853
- maxInputTokens: 8192,
854
- description: "State-of-the-art Gemini embeddings with flexible dimensions."
962
+ description: "Gemini embedding 001."
855
963
  },
856
964
  // ── Cohere ───────────────────────────────────────────────────────────
857
965
  {
@@ -1147,7 +1255,7 @@ function getAIModel(config) {
1147
1255
  const google = createGoogleGenerativeAI({
1148
1256
  apiKey: config.embeddingApiKey || void 0
1149
1257
  });
1150
- return google.embedding(modelName);
1258
+ return google.textEmbeddingModel(modelName);
1151
1259
  }
1152
1260
  if (config.embeddingProvider === "cohere") {
1153
1261
  const cohere = createCohere({
@@ -1197,7 +1305,7 @@ function expectedDimensions(config) {
1197
1305
  const custom = (config.customEmbeddings ?? []).find(
1198
1306
  (m) => m.modelName === customName
1199
1307
  );
1200
- if (custom) return custom.dimensions;
1308
+ if (custom) return custom.dimensions ?? 0;
1201
1309
  }
1202
1310
  return getEmbeddingModel(config.embeddingModelId)?.dimensions ?? 0;
1203
1311
  }
@@ -1521,27 +1629,37 @@ if (IS_SERVERLESS && MODE !== "cloud") {
1521
1629
  console.warn("[LanceDB] Running on serverless \u2014 using /tmp/lancedb. Data will NOT persist between invocations. Use LanceDB Cloud for production.")
1522
1630
  }
1523
1631
 
1632
+ let _conn = null
1524
1633
  let _table = null
1525
1634
 
1526
- async function table() {
1527
- if (_table) return _table
1528
- let conn
1635
+ async function getConn() {
1636
+ if (_conn) return _conn
1529
1637
  if (MODE === "cloud") {
1530
1638
  if (!URI || !API_KEY) {
1531
1639
  throw new Error("LanceDB Cloud needs LANCEDB_URI and LANCEDB_API_KEY.")
1532
1640
  }
1533
- conn = await lancedb.connect(URI, { apiKey: API_KEY })
1641
+ _conn = await lancedb.connect(URI, { apiKey: API_KEY })
1534
1642
  } else {
1535
1643
  const abs = path.isAbsolute(DB_PATH) ? DB_PATH : path.join(process.cwd(), DB_PATH)
1536
- conn = await lancedb.connect(abs)
1644
+ _conn = await lancedb.connect(abs)
1537
1645
  }
1646
+ return _conn
1647
+ }
1538
1648
 
1539
- _table = await conn.openTable(TABLE)
1540
- return _table
1649
+ async function getTable() {
1650
+ if (_table) return _table
1651
+ const conn = await getConn()
1652
+ const names = await conn.tableNames()
1653
+ if (names.includes(TABLE)) {
1654
+ _table = await conn.openTable(TABLE)
1655
+ return _table
1656
+ }
1657
+ return null
1541
1658
  }
1542
1659
 
1543
1660
  export async function query(vector, topK) {
1544
- const t = await table()
1661
+ const t = await getTable()
1662
+ if (!t) return []
1545
1663
  const rows = await t.search(vector).limit(topK).toArray()
1546
1664
  return rows.map((row) => ({
1547
1665
  id: row.id,
@@ -1554,7 +1672,8 @@ export async function query(vector, topK) {
1554
1672
  }
1555
1673
 
1556
1674
  export async function list({ page = 1, limit = 20 } = {}) {
1557
- const t = await table()
1675
+ const t = await getTable()
1676
+ if (!t) return { documents: [], total: 0, page, limit, totalPages: 0 }
1558
1677
  // Fetch all rows to get total count, then slice for the page.
1559
1678
  // We explicitly exclude the "vector" column to avoid memory bloat and Rust panics on full scans.
1560
1679
  const allRows = await t.query().select(["id", "text", "title", "url", "documentId"]).toArray()
@@ -1577,7 +1696,8 @@ export async function list({ page = 1, limit = 20 } = {}) {
1577
1696
  }
1578
1697
 
1579
1698
  export async function get(id) {
1580
- const t = await table()
1699
+ const t = await getTable()
1700
+ if (!t) return null
1581
1701
  const rows = await t.query().filter(\`id = '\${id}'\`).limit(1).toArray()
1582
1702
  if (!rows.length) return null;
1583
1703
  const row = rows[0];
@@ -1585,24 +1705,44 @@ export async function get(id) {
1585
1705
  }
1586
1706
 
1587
1707
  export async function add(docs) {
1588
- const t = await table()
1589
- await t.add(docs)
1708
+ if (docs.length === 0) return { success: true }
1709
+ let t = await getTable()
1710
+ if (t) {
1711
+ await t.add(docs)
1712
+ } else {
1713
+ const conn = await getConn()
1714
+ const names = await conn.tableNames()
1715
+ if (names.includes(TABLE)) {
1716
+ t = await conn.openTable(TABLE)
1717
+ _table = t
1718
+ await t.add(docs)
1719
+ } else {
1720
+ t = await conn.createTable(TABLE, docs)
1721
+ _table = t
1722
+ }
1723
+ }
1590
1724
  return { success: true }
1591
1725
  }
1592
1726
 
1593
1727
  export async function remove(id) {
1594
- const t = await table()
1728
+ const t = await getTable()
1729
+ if (!t) return { success: true }
1595
1730
  await t.delete(\`id = '\${id}'\`)
1596
1731
  return { success: true }
1597
1732
  }
1598
1733
 
1599
1734
  export async function update(id, doc) {
1600
- const t = await table()
1735
+ let t = await getTable()
1736
+ if (!t) {
1737
+ const conn = await getConn()
1738
+ t = await conn.createTable(TABLE, [doc])
1739
+ _table = t
1740
+ return { success: true }
1741
+ }
1601
1742
  await t.delete(\`id = '\${id}'\`)
1602
1743
  await t.add([doc])
1603
1744
  return { success: true }
1604
- }
1605
- `;
1745
+ }`;
1606
1746
  }
1607
1747
  function pineconeStore() {
1608
1748
  return `import { Pinecone } from "@pinecone-database/pinecone"
@@ -1729,21 +1869,21 @@ function embedSource(config) {
1729
1869
  baseURL: process.env.EMBEDDING_BASE_URL || ${JSON.stringify(custom?.baseUrl || "")},
1730
1870
  apiKey: process.env.EMBEDDING_API_KEY
1731
1871
  })
1732
- const MODEL = provider.embedding(process.env.EMBEDDING_MODEL || ${JSON.stringify(custom?.modelName || "")})`;
1872
+ const MODEL = provider.embeddingModel(process.env.EMBEDDING_MODEL || ${JSON.stringify(custom?.modelName || "")})`;
1733
1873
  } else if (config.embeddingProvider === "deepseek") {
1734
1874
  imports += `import { createDeepSeek } from "@ai-sdk/deepseek"
1735
1875
  `;
1736
1876
  init = `const provider = createDeepSeek({
1737
1877
  apiKey: process.env.EMBEDDING_API_KEY
1738
1878
  })
1739
- const MODEL = provider.embedding(process.env.EMBEDDING_MODEL || ${JSON.stringify(config.embeddingModelId)})`;
1879
+ const MODEL = provider.embeddingModel(process.env.EMBEDDING_MODEL || ${JSON.stringify(config.embeddingModelId)})`;
1740
1880
  } else if (config.embeddingProvider === "google") {
1741
1881
  imports += `import { createGoogleGenerativeAI } from "@ai-sdk/google"
1742
1882
  `;
1743
1883
  init = `const provider = createGoogleGenerativeAI({
1744
1884
  apiKey: process.env.EMBEDDING_API_KEY
1745
1885
  })
1746
- const MODEL = provider.embedding(process.env.EMBEDDING_MODEL || ${JSON.stringify(config.embeddingModelId)})`;
1886
+ const MODEL = provider.textEmbeddingModel(process.env.EMBEDDING_MODEL || ${JSON.stringify(config.embeddingModelId)})`;
1747
1887
  } else if (config.embeddingProvider === "cohere") {
1748
1888
  imports += `import { createCohere } from "@ai-sdk/cohere"
1749
1889
  `;
@@ -1907,7 +2047,7 @@ const server = createServer(async (req, res) => {
1907
2047
  <svg class="icon" viewBox="0 0 24 24"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>
1908
2048
  API Reference
1909
2049
  </a>
1910
- <a href="https://github.com/BuddyHere-AI" target="_blank" rel="noopener" class="btn btn-outline">
2050
+ <a href="https://github.com/Larkup-AI/larkup-rag" target="_blank" rel="noopener" class="btn btn-outline">
1911
2051
  <svg class="icon" viewBox="0 0 24 24"><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/><circle cx="9" cy="7" r="4"/><path d="M23 21v-2a4 4 0 0 0-3-3.87"/><path d="M16 3.13a4 4 0 0 1 0 7.75"/></svg>
1912
2052
  Larkup Team
1913
2053
  </a>
@@ -1916,7 +2056,7 @@ const server = createServer(async (req, res) => {
1916
2056
  Contact
1917
2057
  </a>
1918
2058
  </div>
1919
- <div class="footer">Built with <a href="https://github.com/BuddyHere-AI/buddy-rag" target="_blank" rel="noopener">larkup</a> \xB7 v1.0</div>
2059
+ <div class="footer">Built with <a href="https://github.com/Larkup-AI/larkup-rag/buddy-rag" target="_blank" rel="noopener">larkup</a> \xB7 v1.0</div>
1920
2060
  </div>
1921
2061
  </body>
1922
2062
  </html>\`)
@@ -1964,9 +2104,10 @@ const server = createServer(async (req, res) => {
1964
2104
  if (!doc.text) return send(res, 400, { error: "Missing text" })
1965
2105
  const vector = await embedQuery(doc.text)
1966
2106
  const id = doc.id || Math.random().toString(36).slice(2)
1967
- await store.add([{ id, vector, text: doc.text, title: doc.title || "Untitled", url: doc.url, documentId: doc.documentId || id }])
2107
+ await store.add([{ id, vector, text: doc.text, title: doc.title || "Untitled", url: doc.url || "", documentId: doc.documentId || id }])
1968
2108
  return send(res, 200, { success: true, id })
1969
2109
  } catch (err) {
2110
+ console.error("[POST /documents] Error:", err)
1970
2111
  return send(res, 500, { error: String(err?.message || err) })
1971
2112
  }
1972
2113
  }
@@ -2019,7 +2160,7 @@ const server = createServer(async (req, res) => {
2019
2160
  for (const [idx, chunk] of chunks.entries()) {
2020
2161
  const id = \`\${documentId}-\${idx}\`
2021
2162
  const vector = await embedQuery(chunk)
2022
- await store.add([{ id, vector, text: chunk, title: \`\${title} (part \${idx + 1})\`, url: targetUrl, documentId }])
2163
+ await store.add([{ id, vector, text: chunk, title: \`\${title} (part \${idx + 1})\`, url: targetUrl || "", documentId }])
2023
2164
  }
2024
2165
 
2025
2166
  return send(res, 200, { success: true, documentId, chunks: chunks.length })
@@ -2720,139 +2861,39 @@ import { z } from "zod";
2720
2861
  import * as p3 from "@clack/prompts";
2721
2862
 
2722
2863
  // ../../packages/core/src/chat-models/registry.ts
2723
- var CHAT_MODELS = [
2724
- // ── OpenAI ──────────────────────────────────────────────────────────
2725
- {
2726
- id: "openai/gpt-4o-mini",
2727
- label: "GPT-4o Mini",
2728
- provider: "openai",
2729
- isDefault: true,
2730
- description: "Fast and affordable. Great for most chat use cases."
2731
- },
2732
- {
2733
- id: "openai/gpt-4o",
2734
- label: "GPT-4o",
2735
- provider: "openai",
2736
- description: "Most capable OpenAI model. Higher cost."
2737
- },
2738
- {
2739
- id: "openai/gpt-4.1-mini",
2740
- label: "GPT-4.1 Mini",
2741
- provider: "openai",
2742
- description: "Latest mini model with improved instruction following."
2743
- },
2744
- {
2745
- id: "openai/gpt-4.1-nano",
2746
- label: "GPT-4.1 Nano",
2747
- provider: "openai",
2748
- description: "Smallest and fastest GPT-4.1 variant."
2749
- },
2750
- // ── Google ──────────────────────────────────────────────────────────
2751
- {
2752
- id: "google/gemini-2.0-flash",
2753
- label: "Gemini 2.0 Flash",
2754
- provider: "google",
2755
- isDefault: true,
2756
- description: "Fast, affordable Gemini model. Great default."
2757
- },
2758
- {
2759
- id: "google/gemini-2.5-flash",
2760
- label: "Gemini 2.5 Flash",
2761
- provider: "google",
2762
- description: "Latest Gemini flash with improved reasoning."
2763
- },
2764
- {
2765
- id: "google/gemini-2.5-pro",
2766
- label: "Gemini 2.5 Pro",
2767
- provider: "google",
2768
- description: "Most capable Gemini model."
2769
- },
2770
- // ── Cohere ──────────────────────────────────────────────────────────
2771
- {
2772
- id: "cohere/command-r",
2773
- label: "Command R",
2774
- provider: "cohere",
2775
- isDefault: true,
2776
- description: "Optimized for RAG and tool use."
2777
- },
2778
- {
2779
- id: "cohere/command-r-plus",
2780
- label: "Command R+",
2781
- provider: "cohere",
2782
- description: "Most capable Cohere model for complex tasks."
2783
- },
2784
- // ── Mistral ─────────────────────────────────────────────────────────
2785
- {
2786
- id: "mistral/mistral-small-latest",
2787
- label: "Mistral Small",
2788
- provider: "mistral",
2789
- isDefault: true,
2790
- description: "Fast and efficient. Good for most tasks."
2791
- },
2792
- {
2793
- id: "mistral/mistral-large-latest",
2794
- label: "Mistral Large",
2795
- provider: "mistral",
2796
- description: "Mistral's most capable model."
2797
- },
2798
- // ── DeepSeek ────────────────────────────────────────────────────────
2799
- {
2800
- id: "deepseek/deepseek-chat",
2801
- label: "DeepSeek Chat",
2802
- provider: "deepseek",
2803
- isDefault: true,
2804
- description: "DeepSeek's primary chat model."
2805
- },
2806
- // ── Vercel AI Gateway ───────────────────────────────────────────────
2807
- {
2808
- id: "openai/gpt-4o-mini",
2809
- label: "GPT-4o Mini (via Gateway)",
2810
- provider: "vercel_ai_gateway",
2811
- isDefault: true,
2812
- description: "OpenAI GPT-4o Mini routed through Vercel AI Gateway."
2813
- },
2814
- {
2815
- id: "openai/gpt-4o",
2816
- label: "GPT-4o (via Gateway)",
2817
- provider: "vercel_ai_gateway",
2818
- description: "OpenAI GPT-4o routed through Vercel AI Gateway."
2819
- },
2820
- {
2821
- id: "google/gemini-2.0-flash",
2822
- label: "Gemini 2.0 Flash (via Gateway)",
2823
- provider: "vercel_ai_gateway",
2824
- description: "Google Gemini routed through Vercel AI Gateway."
2825
- },
2826
- {
2827
- id: "cohere/command-r-plus",
2828
- label: "Command R+ (via Gateway)",
2829
- provider: "vercel_ai_gateway",
2830
- description: "Cohere Command R+ routed through Vercel AI Gateway."
2831
- },
2832
- {
2833
- id: "mistral/mistral-large-latest",
2834
- label: "Mistral Large (via Gateway)",
2835
- provider: "vercel_ai_gateway",
2836
- description: "Mistral Large routed through Vercel AI Gateway."
2837
- },
2838
- {
2839
- id: "anthropic/claude-3-5-sonnet-20240620",
2840
- label: "Claude 3.5 Sonnet (via Gateway)",
2841
- provider: "vercel_ai_gateway",
2842
- description: "Anthropic Claude 3.5 Sonnet via Vercel AI Gateway."
2843
- },
2844
- {
2845
- id: "anthropic/claude-3-haiku-20240307",
2846
- label: "Claude 3 Haiku (via Gateway)",
2847
- provider: "vercel_ai_gateway",
2848
- description: "Anthropic Claude 3 Haiku via Vercel AI Gateway."
2849
- }
2850
- ];
2851
- function getDefaultChatModel(provider) {
2852
- return CHAT_MODELS.find((m) => m.provider === provider && m.isDefault) ?? CHAT_MODELS.find((m) => m.provider === provider);
2864
+ function toChatDescriptor(m) {
2865
+ return {
2866
+ id: m.id,
2867
+ name: m.name,
2868
+ provider: m.owned_by,
2869
+ context_window: m.context_window,
2870
+ max_tokens: m.max_tokens,
2871
+ tags: m.tags,
2872
+ description: m.description
2873
+ };
2874
+ }
2875
+ function getChatModelsForProvider(models, provider) {
2876
+ if (provider === "vercel_ai_gateway") return models;
2877
+ return models.filter((m) => m.provider?.toLowerCase() === provider.toLowerCase());
2878
+ }
2879
+ function getDefaultChatModel(models, provider) {
2880
+ const forProvider = getChatModelsForProvider(models, provider);
2881
+ const defaults = {
2882
+ openai: "openai/gpt-4o-mini",
2883
+ anthropic: "anthropic/claude-sonnet-4",
2884
+ google: "google/gemini-2.0-flash",
2885
+ mistral: "mistral/mistral-small-latest",
2886
+ deepseek: "deepseek/deepseek-chat",
2887
+ cohere: "cohere/command-r",
2888
+ meta: "meta/llama-4-maverick",
2889
+ xai: "xai/grok-3-mini",
2890
+ vercel_ai_gateway: "openai/gpt-4o-mini"
2891
+ };
2892
+ const defaultId = defaults[provider];
2893
+ return forProvider.find((m) => m.id === defaultId) ?? forProvider[0];
2853
2894
  }
2854
- function getChatModel(id) {
2855
- return CHAT_MODELS.find((m) => m.id === id);
2895
+ function getChatModel(models, id) {
2896
+ return models.find((m) => m.id === id);
2856
2897
  }
2857
2898
 
2858
2899
  // src/commands/chat.ts
@@ -2987,74 +3028,2293 @@ Chat error: ${e.message}`);
2987
3028
 
2988
3029
  // src/commands/settings.ts
2989
3030
  import * as p4 from "@clack/prompts";
2990
- async function settingsCommand(options) {
2991
- await inServerScope(options.server, async () => {
2992
- await requireActive();
2993
- const config = await readConfig();
2994
- log.info(log.fmt.bold("\n--- CLI Settings ---"));
2995
- const providers = Array.from(new Set(CHAT_MODELS.map((m) => m.provider)));
2996
- const selectedProvider = await p4.select({
2997
- message: "Select AI Provider for Chat:",
2998
- initialValue: config.embeddingProvider,
2999
- options: providers.map((p5) => ({ label: p5, value: p5 }))
3000
- });
3001
- if (p4.isCancel(selectedProvider)) {
3002
- log.info("Cancelled.");
3003
- return;
3004
- }
3005
- const availableModels = CHAT_MODELS.filter((m) => m.provider === selectedProvider);
3006
- const selectedModel = await p4.select({
3007
- message: "Select Chat Model:",
3008
- initialValue: config.chatModelId || availableModels[0]?.id,
3009
- options: availableModels.map((m) => ({ label: m.label, value: m.id }))
3010
- });
3011
- if (p4.isCancel(selectedModel)) {
3012
- log.info("Cancelled.");
3013
- return;
3014
- }
3015
- await writeConfig({ ...config, chatModelId: selectedModel });
3016
- log.success(`Settings saved. Chat model set to ${selectedModel}.`);
3017
- });
3018
- }
3019
3031
 
3020
- // src/index.ts
3021
- var program = new Command();
3022
- program.name("larkup").description("Build, index, and serve a RAG pipeline from the terminal.").version("0.1.3");
3023
- program.command("init [name]").description("Create a new RAG server (workspace project)").action(async (name) => {
3024
- prompts.intro(log.fmt.bold("larkup init"));
3025
- await initCommand(name);
3026
- prompts.outro("Done!");
3027
- });
3028
- program.command("servers").alias("list").description("List all servers (\u25CF = active)").action(async () => {
3029
- await listServersCommand();
3030
- });
3031
- program.command("use <serverId>").description("Switch the active server").action(async (serverId) => {
3032
- await useServerCommand(serverId);
3033
- });
3034
- program.command("config").description("Show the active server's configuration + status").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3035
- await configCommand(options);
3036
- });
3037
- program.command("add-doc").description("Add a document to the corpus").option("--file <path>", "Add a document from a file").option("--text <string>", "Add a document from inline text").option("--title <string>", "Document title").option("--url <string>", "Document URL").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3038
- await addDocCommand(options);
3039
- });
3040
- program.command("index").description("Chunk \u2192 embed \u2192 store the corpus").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3041
- await indexCommand(options);
3042
- });
3043
- program.command("generate").description("Emit the deployable RAG server to disk").option("--out <dir>", "Output directory").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3044
- await generateCommand(options);
3045
- });
3046
- program.command("serve").description("Run the generated server locally (foreground)").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3047
- await serveCommand(options);
3048
- });
3049
- program.command("query <question>").description("Retrieve top-k chunks").option("--topK <number>", "Number of results to return").option("--server <id>", "Target a specific server instead of the active one").action(async (question, options) => {
3050
- await queryCommand(question, options);
3051
- });
3052
- program.command("chat").description("Chat with your knowledge base in the terminal").option("--model <string>", "Specify the chat model ID").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3053
- await chatCommand(options);
3054
- });
3055
- program.command("settings").description("Configure CLI settings (e.g., chat models)").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
3056
- await settingsCommand(options);
3057
- });
3058
- program.parseAsync(process.argv).catch((err) => {
3059
- log.error(err instanceof Error ? err.message : String(err));
3032
+ // ../../packages/core/src/models-list.ts
3033
+ var ALL_MODELS = [
3034
+ {
3035
+ "id": "alibaba/qwen-3-14b",
3036
+ "name": "Qwen3-14B",
3037
+ "owned_by": "alibaba",
3038
+ "type": "language",
3039
+ "description": "Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support",
3040
+ "context_window": 40960,
3041
+ "max_tokens": 16384,
3042
+ "tags": [
3043
+ "reasoning",
3044
+ "tool-use"
3045
+ ]
3046
+ },
3047
+ {
3048
+ "id": "alibaba/qwen-3-235b",
3049
+ "name": "Qwen3 235B A22B",
3050
+ "owned_by": "alibaba",
3051
+ "type": "language",
3052
+ "description": "",
3053
+ "context_window": 262144,
3054
+ "max_tokens": 16384,
3055
+ "tags": [
3056
+ "tool-use",
3057
+ "reasoning"
3058
+ ]
3059
+ },
3060
+ {
3061
+ "id": "alibaba/qwen-3-30b",
3062
+ "name": "Qwen3-30B-A3B",
3063
+ "owned_by": "alibaba",
3064
+ "type": "language",
3065
+ "description": "Qwen3 is the latest generation of large language models in Qwen series, offering a comprehensive suite of dense and mixture-of-experts (MoE) models. Built upon extensive training, Qwen3 delivers groundbreaking advancements in reasoning, instruction-following, agent capabilities, and multilingual support",
3066
+ "context_window": 40960,
3067
+ "max_tokens": 16384,
3068
+ "tags": [
3069
+ "reasoning",
3070
+ "tool-use"
3071
+ ]
3072
+ },
3073
+ {
3074
+ "id": "alibaba/qwen-3-32b",
3075
+ "name": "Qwen 3 32B",
3076
+ "owned_by": "alibaba",
3077
+ "type": "language",
3078
+ "description": "Qwen3-32B is a world-class model with comparable quality to DeepSeek R1 while outperforming GPT-4.1 and Claude Sonnet 3.7. It excels in code-gen, tool-calling, and advanced reasoning, making it an exceptional model for a wide range of production use cases.",
3079
+ "context_window": 128e3,
3080
+ "max_tokens": 8192,
3081
+ "tags": [
3082
+ "reasoning",
3083
+ "tool-use",
3084
+ "implicit-caching"
3085
+ ]
3086
+ },
3087
+ {
3088
+ "id": "alibaba/qwen-3.6-max-preview",
3089
+ "name": "Qwen 3.6 Max Preview",
3090
+ "owned_by": "alibaba",
3091
+ "type": "language",
3092
+ "description": "Compared with the previously released Qwen3-Max and Qwen3.6-Plus, this model features enhanced vibe coding abilities, more efficient coding agent execution, and significantly improved front-end development skills. Additionally, its long-tail knowledge retention has been further upgraded.",
3093
+ "context_window": 24e4,
3094
+ "max_tokens": 64e3,
3095
+ "tags": [
3096
+ "reasoning",
3097
+ "tool-use"
3098
+ ]
3099
+ },
3100
+ {
3101
+ "id": "alibaba/qwen3-235b-a22b-thinking",
3102
+ "name": "Qwen3 VL 235B A22B Thinking",
3103
+ "owned_by": "alibaba",
3104
+ "type": "language",
3105
+ "description": "Qwen3 series VL models feature significantly enhanced multimodal reasoning capabilities, with a particular focus on optimizing the model for STEM and mathematical reasoning. Visual perception and recognition abilities have been comprehensively improved, and OCR capabilities have undergone a major upgrade.",
3106
+ "context_window": 131072,
3107
+ "max_tokens": 32768,
3108
+ "tags": [
3109
+ "vision",
3110
+ "reasoning",
3111
+ "tool-use",
3112
+ "file-input"
3113
+ ]
3114
+ },
3115
+ {
3116
+ "id": "alibaba/qwen3-coder",
3117
+ "name": "Qwen3 Coder 480B A35B Instruct",
3118
+ "owned_by": "alibaba",
3119
+ "type": "language",
3120
+ "description": "Qwen3-Coder-480B-A35B-Instruct is a cutting-edge open coding model from Qwen, matching Claude Sonnet\u2019s performance in agentic programming, browser automation, and core development tasks.",
3121
+ "context_window": 262144,
3122
+ "max_tokens": 65536,
3123
+ "tags": [
3124
+ "tool-use",
3125
+ "implicit-caching"
3126
+ ]
3127
+ },
3128
+ {
3129
+ "id": "alibaba/qwen3-coder-30b-a3b",
3130
+ "name": "Qwen 3 Coder 30B A3B Instruct",
3131
+ "owned_by": "alibaba",
3132
+ "type": "language",
3133
+ "description": "Efficient coding specialist balancing performance with cost-effectiveness for daily development tasks while maintaining strong tool integration capabilities.",
3134
+ "context_window": 262144,
3135
+ "max_tokens": 8192,
3136
+ "tags": [
3137
+ "tool-use"
3138
+ ]
3139
+ },
3140
+ {
3141
+ "id": "alibaba/qwen3-coder-next",
3142
+ "name": "Qwen3 Coder Next",
3143
+ "owned_by": "alibaba",
3144
+ "type": "language",
3145
+ "description": "Qwen3-Coder-Next is an open-weight language model built specifically for coding, with strong performance on large-scale software engineering and agentic coding benchmarks. It uses a hybrid Mixture-of-Experts architecture to offer high capability at relatively modest active parameter counts, improving efficiency for real-world deployments. The model is trained on diverse code and natural language data so it can handle tasks like code generation, refactoring, debugging, repository-level reasoning, and technical explanation across multiple programming languages. It is also optimized for tool use and function calling, making it suitable as the core of coding agents that interact with shells, editors, issue trackers, and other developer tools.",
3146
+ "context_window": 256e3,
3147
+ "max_tokens": 256e3,
3148
+ "tags": [
3149
+ "tool-use"
3150
+ ]
3151
+ },
3152
+ {
3153
+ "id": "alibaba/qwen3-coder-plus",
3154
+ "name": "Qwen3 Coder Plus",
3155
+ "owned_by": "alibaba",
3156
+ "type": "language",
3157
+ "description": "Powered by Qwen3 this is a powerful Coding Agent that excels in tool calling and environment interaction to achieve autonomous programming. It combines outstanding coding proficiency with versatile general-purpose abilities.",
3158
+ "context_window": 1e6,
3159
+ "max_tokens": 65536,
3160
+ "tags": [
3161
+ "implicit-caching",
3162
+ "tool-use"
3163
+ ]
3164
+ },
3165
+ {
3166
+ "id": "alibaba/qwen3-embedding-0.6b",
3167
+ "name": "Qwen3 Embedding 0.6B",
3168
+ "owned_by": "alibaba",
3169
+ "type": "embedding",
3170
+ "description": "The Qwen3 Embedding model series is the latest proprietary model of the Qwen family, specifically designed for text embedding and ranking tasks. Building upon the dense foundational models of the Qwen3 series, it provides a comprehensive range of text embeddings and reranking models in various sizes (0.6B, 4B, and 8B).",
3171
+ "context_window": 32768,
3172
+ "max_tokens": 32768,
3173
+ "tags": []
3174
+ },
3175
+ {
3176
+ "id": "alibaba/qwen3-embedding-4b",
3177
+ "name": "Qwen3 Embedding 4B",
3178
+ "owned_by": "alibaba",
3179
+ "type": "embedding",
3180
+ "description": "The Qwen3 Embedding model series is the latest proprietary model of the Qwen family, specifically designed for text embedding and ranking tasks. Building upon the dense foundational models of the Qwen3 series, it provides a comprehensive range of text embeddings and reranking models in various sizes (0.6B, 4B, and 8B).",
3181
+ "context_window": 32768,
3182
+ "max_tokens": 32768,
3183
+ "tags": []
3184
+ },
3185
+ {
3186
+ "id": "alibaba/qwen3-embedding-8b",
3187
+ "name": "Qwen3 Embedding 8B",
3188
+ "owned_by": "alibaba",
3189
+ "type": "embedding",
3190
+ "description": "The Qwen3 Embedding model series is the latest proprietary model of the Qwen family, specifically designed for text embedding and ranking tasks. Building upon the dense foundational models of the Qwen3 series, it provides a comprehensive range of text embeddings and reranking models in various sizes (0.6B, 4B, and 8B).",
3191
+ "context_window": 32768,
3192
+ "max_tokens": 32768,
3193
+ "tags": []
3194
+ },
3195
+ {
3196
+ "id": "alibaba/qwen3-max",
3197
+ "name": "Qwen3 Max",
3198
+ "owned_by": "alibaba",
3199
+ "type": "language",
3200
+ "description": "The Qwen 3 series Max model has undergone specialized upgrades in agent programming and tool invocation compared to the preview version. The officially released model this time has achieved state-of-the-art (SOTA) performance in its field and is better suited to meet the demands of agents operating in more complex scenarios.",
3201
+ "context_window": 262144,
3202
+ "max_tokens": 32768,
3203
+ "tags": [
3204
+ "tool-use",
3205
+ "implicit-caching"
3206
+ ]
3207
+ },
3208
+ {
3209
+ "id": "alibaba/qwen3-max-preview",
3210
+ "name": "Qwen3 Max Preview",
3211
+ "owned_by": "alibaba",
3212
+ "type": "language",
3213
+ "description": "Qwen3-Max-Preview shows substantial gains over the 2.5 series in overall capability, with significant enhancements in Chinese-English text understanding, complex instruction following, handling of subjective open-ended tasks, multilingual ability, and tool invocation; model knowledge hallucinations are reduced.",
3214
+ "context_window": 262144,
3215
+ "max_tokens": 32768,
3216
+ "tags": [
3217
+ "tool-use",
3218
+ "implicit-caching"
3219
+ ]
3220
+ },
3221
+ {
3222
+ "id": "alibaba/qwen3-max-thinking",
3223
+ "name": "Qwen 3 Max Thinking",
3224
+ "owned_by": "alibaba",
3225
+ "type": "language",
3226
+ "description": "Compared with the snapshot as of September 23, 2025, the Qwen-3 series Max model in this release achieves an effective integration of thinking and non-thinking modes, resulting in a comprehensive and substantial improvement in the model\u2019s overall performance. In thinking mode, the model simultaneously supports web search, web information extraction, and a code interpreter tool, enabling it to tackle more complex and challenging problems with greater accuracy by leveraging external tools while engaging in slow, deliberative reasoning. This version is based on a snapshot taken on January 23, 2026.",
3227
+ "context_window": 256e3,
3228
+ "max_tokens": 65536,
3229
+ "tags": [
3230
+ "reasoning",
3231
+ "tool-use"
3232
+ ]
3233
+ },
3234
+ {
3235
+ "id": "alibaba/qwen3-next-80b-a3b-instruct",
3236
+ "name": "Qwen3 Next 80B A3B Instruct",
3237
+ "owned_by": "alibaba",
3238
+ "type": "language",
3239
+ "description": "A new generation of open-source, non-thinking mode model powered by Qwen3. This version demonstrates superior Chinese text understanding, augmented logical reasoning, and enhanced capabilities in text generation tasks over the previous iteration (Qwen3-235B-A22B-Instruct-2507).",
3240
+ "context_window": 131072,
3241
+ "max_tokens": 32768,
3242
+ "tags": [
3243
+ "tool-use"
3244
+ ]
3245
+ },
3246
+ {
3247
+ "id": "alibaba/qwen3-next-80b-a3b-thinking",
3248
+ "name": "Qwen3 Next 80B A3B Thinking",
3249
+ "owned_by": "alibaba",
3250
+ "type": "language",
3251
+ "description": "A new generation of Qwen3-based open-source thinking mode models. This version offers improved instruction following and streamlined summary responses over the previous iteration (Qwen3-235B-A22B-Thinking-2507).",
3252
+ "context_window": 131072,
3253
+ "max_tokens": 32768,
3254
+ "tags": [
3255
+ "reasoning",
3256
+ "tool-use"
3257
+ ]
3258
+ },
3259
+ {
3260
+ "id": "alibaba/qwen3-vl-235b-a22b-instruct",
3261
+ "name": "Qwen3 VL 235B A22B Instruct",
3262
+ "owned_by": "alibaba",
3263
+ "type": "language",
3264
+ "description": "The Qwen3 series VL models has been comprehensively upgraded in areas such as visual coding and spatial perception. Its visual perception and recognition capabilities have significantly improved, supporting the understanding of ultra-long videos, and its OCR functionality has undergone a major enhancement.",
3265
+ "context_window": 131072,
3266
+ "max_tokens": 129024,
3267
+ "tags": [
3268
+ "tool-use",
3269
+ "vision",
3270
+ "implicit-caching"
3271
+ ]
3272
+ },
3273
+ {
3274
+ "id": "alibaba/qwen3-vl-instruct",
3275
+ "name": "Qwen3 VL 235B A22B Instruct",
3276
+ "owned_by": "alibaba",
3277
+ "type": "language",
3278
+ "description": "The Qwen3 series VL models has been comprehensively upgraded in areas such as visual coding and spatial perception. Its visual perception and recognition capabilities have significantly improved, supporting the understanding of ultra-long videos, and its OCR functionality has undergone a major enhancement.",
3279
+ "context_window": 131072,
3280
+ "max_tokens": 129024,
3281
+ "tags": [
3282
+ "tool-use",
3283
+ "vision",
3284
+ "implicit-caching"
3285
+ ]
3286
+ },
3287
+ {
3288
+ "id": "alibaba/qwen3-vl-thinking",
3289
+ "name": "Qwen3 VL 235B A22B Thinking",
3290
+ "owned_by": "alibaba",
3291
+ "type": "language",
3292
+ "description": "Qwen3 series VL models feature significantly enhanced multimodal reasoning capabilities, with a particular focus on optimizing the model for STEM and mathematical reasoning. Visual perception and recognition abilities have been comprehensively improved, and OCR capabilities have undergone a major upgrade.",
3293
+ "context_window": 131072,
3294
+ "max_tokens": 32768,
3295
+ "tags": [
3296
+ "vision",
3297
+ "reasoning",
3298
+ "tool-use",
3299
+ "file-input"
3300
+ ]
3301
+ },
3302
+ {
3303
+ "id": "alibaba/qwen3.5-flash",
3304
+ "name": "Qwen 3.5 Flash",
3305
+ "owned_by": "alibaba",
3306
+ "type": "language",
3307
+ "description": "The Qwen3.5 native vision-language Flash models are built on a hybrid architecture that integrates a linear attention mechanism with a sparse mixture-of-experts model, achieving higher inference efficiency. Compared to the 3 series, these models deliver a leap forward in performance for both pure text and multimodal tasks, offering fast response times while balancing inference speed and overall performance.",
3308
+ "context_window": 1e6,
3309
+ "max_tokens": 64e3,
3310
+ "tags": [
3311
+ "vision",
3312
+ "file-input",
3313
+ "reasoning",
3314
+ "tool-use"
3315
+ ]
3316
+ },
3317
+ {
3318
+ "id": "alibaba/qwen3.5-plus",
3319
+ "name": "Qwen 3.5 Plus",
3320
+ "owned_by": "alibaba",
3321
+ "type": "language",
3322
+ "description": "The Qwen3.5 native vision-language series Plus models are built on a hybrid architecture that integrates linear attention mechanisms with sparse mixture-of-experts models, achieving higher inference efficiency. In a variety of task evaluations, the 3.5 series consistently demonstrates performance on par with state-of-the-art leading models. Compared to the 3 series, these models show a leap forward in both pure-text and multimodal capabilities.",
3323
+ "context_window": 1e6,
3324
+ "max_tokens": 64e3,
3325
+ "tags": [
3326
+ "vision",
3327
+ "file-input",
3328
+ "reasoning",
3329
+ "tool-use"
3330
+ ]
3331
+ },
3332
+ {
3333
+ "id": "alibaba/qwen3.6-27b",
3334
+ "name": "Qwen 3.6 27B",
3335
+ "owned_by": "alibaba",
3336
+ "type": "language",
3337
+ "description": "The Qwen3.6 35B-A3B native vision-language model is built on a hybrid architecture that integrates linear attention mechanisms with a sparse mixture-of-experts framework, achieving higher inference efficiency. Compared with the 3.5-35B-A3B, this model demonstrates significantly improved agentic coding capabilities, mathematical and code reasoning abilities, spatial intelligence, as well as object localization and object detection performance.",
3338
+ "context_window": 256e3,
3339
+ "max_tokens": 256e3,
3340
+ "tags": [
3341
+ "reasoning",
3342
+ "tool-use",
3343
+ "file-input",
3344
+ "vision"
3345
+ ]
3346
+ },
3347
+ {
3348
+ "id": "alibaba/qwen3.6-plus",
3349
+ "name": "Qwen 3.6 Plus",
3350
+ "owned_by": "alibaba",
3351
+ "type": "language",
3352
+ "description": "The Qwen3.6 native vision-language Plus series models demonstrate exceptional performance on par with the current state-of-the-art models, with a significant improvement in overall results compared to the 3.5 series. The models have been markedly enhanced in code-related capabilities such as agentic coding, front-end programming, and Vibe coding, as well as in multi-modal general object recognition, OCR, and object localization.",
3353
+ "context_window": 1e6,
3354
+ "max_tokens": 64e3,
3355
+ "tags": [
3356
+ "reasoning",
3357
+ "tool-use",
3358
+ "vision",
3359
+ "file-input"
3360
+ ]
3361
+ },
3362
+ {
3363
+ "id": "alibaba/qwen3.7-max",
3364
+ "name": "Qwen 3.7 Max",
3365
+ "owned_by": "alibaba",
3366
+ "type": "language",
3367
+ "description": "Qwen3.7 is a next\u2011generation flagship model designed for the agent\u2011centric era, with its core strengths lying in the breadth and depth of its agent\u2011level capabilities: it excels at programming, office and productivity tasks, and long\u2011term autonomous execution.",
3368
+ "context_window": 991e3,
3369
+ "max_tokens": 64e3,
3370
+ "tags": [
3371
+ "implicit-caching",
3372
+ "reasoning",
3373
+ "tool-use"
3374
+ ]
3375
+ },
3376
+ {
3377
+ "id": "alibaba/qwen3.7-plus",
3378
+ "name": "Qwen 3.7 Plus",
3379
+ "owned_by": "alibaba",
3380
+ "type": "language",
3381
+ "description": "Among the Qwen3.7 series, the cost-effective Plus model builds on its robust text capabilities while delivering a comprehensive upgrade to its vision\u2011language abilities, all while preserving its full\u2011stack agent\u2011level intelligence for coding, tool use, and productivity workflows.",
3382
+ "context_window": 1e6,
3383
+ "max_tokens": 64e3,
3384
+ "tags": [
3385
+ "reasoning",
3386
+ "tool-use",
3387
+ "implicit-caching",
3388
+ "file-input",
3389
+ "vision"
3390
+ ]
3391
+ },
3392
+ {
3393
+ "id": "alibaba/wan-v2.5-t2v-preview",
3394
+ "name": "Wan v2.5 Text-to-Video Preview",
3395
+ "owned_by": "alibaba",
3396
+ "type": "video",
3397
+ "description": "",
3398
+ "tags": []
3399
+ },
3400
+ {
3401
+ "id": "alibaba/wan-v2.6-i2v",
3402
+ "name": "Wan v2.6 Image-to-Video",
3403
+ "owned_by": "alibaba",
3404
+ "type": "video",
3405
+ "description": "",
3406
+ "tags": []
3407
+ },
3408
+ {
3409
+ "id": "alibaba/wan-v2.6-i2v-flash",
3410
+ "name": "Wan v2.6 Image-to-Video Flash",
3411
+ "owned_by": "alibaba",
3412
+ "type": "video",
3413
+ "description": "",
3414
+ "tags": []
3415
+ },
3416
+ {
3417
+ "id": "alibaba/wan-v2.6-r2v",
3418
+ "name": "Wan v2.6 Reference-to-Video",
3419
+ "owned_by": "alibaba",
3420
+ "type": "video",
3421
+ "description": "",
3422
+ "tags": []
3423
+ },
3424
+ {
3425
+ "id": "alibaba/wan-v2.6-r2v-flash",
3426
+ "name": "Wan v2.6 Reference-to-Video Flash",
3427
+ "owned_by": "alibaba",
3428
+ "type": "video",
3429
+ "description": "",
3430
+ "tags": []
3431
+ },
3432
+ {
3433
+ "id": "alibaba/wan-v2.6-t2v",
3434
+ "name": "Wan v2.6 Text-to-Video",
3435
+ "owned_by": "alibaba",
3436
+ "type": "video",
3437
+ "description": "",
3438
+ "tags": []
3439
+ },
3440
+ {
3441
+ "id": "alibaba/wan-v2.7-r2v",
3442
+ "name": "Wan v2.7 Reference-to-Video",
3443
+ "owned_by": "alibaba",
3444
+ "type": "video",
3445
+ "description": "",
3446
+ "tags": []
3447
+ },
3448
+ {
3449
+ "id": "alibaba/wan-v2.7-t2v",
3450
+ "name": "Wan v2.7 Text-to-Video",
3451
+ "owned_by": "alibaba",
3452
+ "type": "video",
3453
+ "description": "",
3454
+ "tags": []
3455
+ },
3456
+ {
3457
+ "id": "anthropic/claude-3-haiku",
3458
+ "name": "Claude 3 Haiku",
3459
+ "owned_by": "anthropic",
3460
+ "type": "language",
3461
+ "description": "Claude 3 Haiku is Anthropic's fastest, most compact model for near-instant responsiveness. It answers simple queries and requests with speed. Customers will be able to build seamless AI experiences that mimic human interactions. Claude 3 Haiku can process images and return text outputs, and features a 200K context window.",
3462
+ "context_window": 2e5,
3463
+ "max_tokens": 4096,
3464
+ "tags": [
3465
+ "tool-use",
3466
+ "vision",
3467
+ "explicit-caching"
3468
+ ]
3469
+ },
3470
+ {
3471
+ "id": "anthropic/claude-fable-5",
3472
+ "name": "Claude Fable 5",
3473
+ "owned_by": "anthropic",
3474
+ "type": "language",
3475
+ "description": "Claude Fable 5 is a Mythos-class model with robust safeguards. It can handle long-running, complex, and asynchronous tasks where previous models would have needed more frequent check-ins.",
3476
+ "context_window": 1e6,
3477
+ "max_tokens": 128e3,
3478
+ "tags": [
3479
+ "reasoning",
3480
+ "tool-use",
3481
+ "explicit-caching",
3482
+ "file-input",
3483
+ "vision"
3484
+ ]
3485
+ },
3486
+ {
3487
+ "id": "anthropic/claude-haiku-4.5",
3488
+ "name": "Claude Haiku 4.5",
3489
+ "owned_by": "anthropic",
3490
+ "type": "language",
3491
+ "description": "Claude Haiku 4.5 matches Sonnet 4's performance on coding, computer use, and agent tasks at substantially lower cost and faster speeds. It delivers near-frontier performance and Claude\u2019s unique character at a price point that works for scaled sub-agent deployments, free tier products, and intelligence-sensitive applications with budget constraints.",
3492
+ "context_window": 2e5,
3493
+ "max_tokens": 64e3,
3494
+ "tags": [
3495
+ "explicit-caching",
3496
+ "file-input",
3497
+ "reasoning",
3498
+ "tool-use",
3499
+ "vision",
3500
+ "web-search"
3501
+ ]
3502
+ },
3503
+ {
3504
+ "id": "anthropic/claude-opus-4",
3505
+ "name": "Claude Opus 4",
3506
+ "owned_by": "anthropic",
3507
+ "type": "language",
3508
+ "description": "Claude Opus 4 is Anthropic's most powerful model yet and the state-of-the-art coding model. It delivers sustained performance on long-running tasks that require focused effort and thousands of steps, significantly expanding what AI agents can solve. Claude Opus 4 is ideal for powering frontier agent products and features.",
3509
+ "context_window": 2e5,
3510
+ "max_tokens": 8192,
3511
+ "tags": [
3512
+ "file-input",
3513
+ "reasoning",
3514
+ "tool-use",
3515
+ "vision",
3516
+ "explicit-caching"
3517
+ ]
3518
+ },
3519
+ {
3520
+ "id": "anthropic/claude-opus-4.1",
3521
+ "name": "Claude Opus 4.1",
3522
+ "owned_by": "anthropic",
3523
+ "type": "language",
3524
+ "description": "Claude Opus 4.1 is a drop-in replacement for Opus 4 that delivers superior performance and precision for real-world coding and agentic tasks. Opus 4.1 advances state-of-the-art coding performance to 74.5% on SWE-bench Verified, and handles complex, multi-step problems with more rigor and attention to detail.",
3525
+ "context_window": 2e5,
3526
+ "max_tokens": 32e3,
3527
+ "tags": [
3528
+ "file-input",
3529
+ "reasoning",
3530
+ "tool-use",
3531
+ "vision",
3532
+ "explicit-caching"
3533
+ ]
3534
+ },
3535
+ {
3536
+ "id": "anthropic/claude-opus-4.5",
3537
+ "name": "Claude Opus 4.5",
3538
+ "owned_by": "anthropic",
3539
+ "type": "language",
3540
+ "description": "Claude Opus 4.5 is Anthropic\u2019s latest model in the Opus series, meant for demanding reasoning tasks and complex problem solving. This model has improvements in general intelligence and vision compared to previous iterations. In addition, it is suited for difficult coding tasks and agentic workflows, especially those with computer use and tool use, and can effectively handle context usage and external memory files.",
3541
+ "context_window": 2e5,
3542
+ "max_tokens": 64e3,
3543
+ "tags": [
3544
+ "explicit-caching",
3545
+ "file-input",
3546
+ "reasoning",
3547
+ "tool-use",
3548
+ "vision",
3549
+ "web-search"
3550
+ ]
3551
+ },
3552
+ {
3553
+ "id": "anthropic/claude-opus-4.6",
3554
+ "name": "Claude Opus 4.6",
3555
+ "owned_by": "anthropic",
3556
+ "type": "language",
3557
+ "description": "Opus 4.6 is the world\u2019s best model for coding and professional work, built to power agents that take on whole categories of real-world work. It excels across the entire SDLC, breaking through on hard problems, identifying complex bugs, and demonstrating deeper codebase understanding. It also delivers a step-change in knowledge work, with near-production-ready documents, presentations, and spreadsheets on the first pass.",
3558
+ "context_window": 1e6,
3559
+ "max_tokens": 128e3,
3560
+ "tags": [
3561
+ "tool-use",
3562
+ "reasoning",
3563
+ "vision",
3564
+ "file-input",
3565
+ "explicit-caching",
3566
+ "web-search"
3567
+ ]
3568
+ },
3569
+ {
3570
+ "id": "anthropic/claude-opus-4.7",
3571
+ "name": "Claude Opus 4.7",
3572
+ "owned_by": "anthropic",
3573
+ "type": "language",
3574
+ "description": "Opus 4.7 builds on the coding and agentic strengths of Opus 4.6 with stronger performance on complex, multi-step tasks and more reliable agentic execution. It also brings improved performance on knowledge work, from drafting documents to building presentations and analyzing data.",
3575
+ "context_window": 1e6,
3576
+ "max_tokens": 128e3,
3577
+ "tags": [
3578
+ "tool-use",
3579
+ "reasoning",
3580
+ "vision",
3581
+ "file-input",
3582
+ "explicit-caching",
3583
+ "web-search",
3584
+ "fast"
3585
+ ]
3586
+ },
3587
+ {
3588
+ "id": "anthropic/claude-opus-4.7-fast",
3589
+ "name": "Claude Opus 4.7 (Fast)",
3590
+ "owned_by": "anthropic",
3591
+ "type": "language",
3592
+ "description": "Opus 4.7 builds on the coding and agentic strengths of Opus 4.6 with stronger performance on complex, multi-step tasks and more reliable agentic execution. It also brings improved performance on knowledge work, from drafting documents to building presentations and analyzing data.",
3593
+ "context_window": 1e6,
3594
+ "max_tokens": 128e3,
3595
+ "tags": [
3596
+ "tool-use",
3597
+ "reasoning",
3598
+ "vision",
3599
+ "file-input",
3600
+ "explicit-caching",
3601
+ "web-search",
3602
+ "fast"
3603
+ ]
3604
+ },
3605
+ {
3606
+ "id": "anthropic/claude-opus-4.8",
3607
+ "name": "Claude Opus 4.8",
3608
+ "owned_by": "anthropic",
3609
+ "type": "language",
3610
+ "description": "Opus 4.8 is a focused upgrade to Opus 4.7 and is Anthropic's best generally available model for coding, agentic tasks, and enterprise workflows. It builds on the strengths of previous Opus models with stronger performance on complex, multi-step coding tasks. Anthropic recommends using it on long-horizon coding and agentic tasks. It is also stronger on professional work, including document drafting, data analysis, and presentations.",
3611
+ "context_window": 1e6,
3612
+ "max_tokens": 128e3,
3613
+ "tags": [
3614
+ "tool-use",
3615
+ "reasoning",
3616
+ "vision",
3617
+ "file-input",
3618
+ "explicit-caching",
3619
+ "web-search",
3620
+ "fast"
3621
+ ]
3622
+ },
3623
+ {
3624
+ "id": "anthropic/claude-opus-4.8-fast",
3625
+ "name": "Claude Opus 4.8 (Fast)",
3626
+ "owned_by": "anthropic",
3627
+ "type": "language",
3628
+ "description": "Opus 4.8 is a focused upgrade to Opus 4.7 and is Anthropic's best generally available model for coding, agentic tasks, and enterprise workflows. It builds on the strengths of previous Opus models with stronger performance on complex, multi-step coding tasks. Anthropic recommends using it on long-horizon coding and agentic tasks. It is also stronger on professional work, including document drafting, data analysis, and presentations.",
3629
+ "context_window": 1e6,
3630
+ "max_tokens": 128e3,
3631
+ "tags": [
3632
+ "tool-use",
3633
+ "reasoning",
3634
+ "vision",
3635
+ "file-input",
3636
+ "explicit-caching",
3637
+ "web-search",
3638
+ "fast"
3639
+ ]
3640
+ },
3641
+ {
3642
+ "id": "anthropic/claude-sonnet-4",
3643
+ "name": "Claude Sonnet 4",
3644
+ "owned_by": "anthropic",
3645
+ "type": "language",
3646
+ "description": "Claude Sonnet 4 balances impressive performance for coding with the right speed and cost for high-volume use cases: Coding: Handle everyday development tasks with enhanced performance-power code reviews, bug fixes, API integrations, and feature development with immediate feedback loops.",
3647
+ "context_window": 1e6,
3648
+ "max_tokens": 8192,
3649
+ "tags": [
3650
+ "file-input",
3651
+ "reasoning",
3652
+ "tool-use",
3653
+ "vision",
3654
+ "explicit-caching"
3655
+ ]
3656
+ },
3657
+ {
3658
+ "id": "anthropic/claude-sonnet-4.5",
3659
+ "name": "Claude Sonnet 4.5",
3660
+ "owned_by": "anthropic",
3661
+ "type": "language",
3662
+ "description": "Claude Sonnet 4.5 is the newest model in the Sonnet series, offering improvements and updates over Sonnet 4.",
3663
+ "context_window": 1e6,
3664
+ "max_tokens": 64e3,
3665
+ "tags": [
3666
+ "explicit-caching",
3667
+ "file-input",
3668
+ "reasoning",
3669
+ "tool-use",
3670
+ "vision",
3671
+ "web-search"
3672
+ ]
3673
+ },
3674
+ {
3675
+ "id": "anthropic/claude-sonnet-4.6",
3676
+ "name": "Claude Sonnet 4.6",
3677
+ "owned_by": "anthropic",
3678
+ "type": "language",
3679
+ "description": "Claude Sonnet 4.6 is the most capable Sonnet-class model yet, with frontier performance across coding, agents, and professional work. It excels at iterative development, complex codebase navigation, end-to-end project management with memory, polished document creation, and confident computer use for web QA and workflow automation.",
3680
+ "context_window": 1e6,
3681
+ "max_tokens": 128e3,
3682
+ "tags": [
3683
+ "file-input",
3684
+ "reasoning",
3685
+ "tool-use",
3686
+ "vision",
3687
+ "explicit-caching",
3688
+ "web-search"
3689
+ ]
3690
+ },
3691
+ {
3692
+ "id": "anthropic/claude-sonnet-5",
3693
+ "name": "Claude Sonnet 5",
3694
+ "owned_by": "anthropic",
3695
+ "type": "language",
3696
+ "description": "Sonnet 5 is an upgrade to Sonnet 4.6, with gains across agentic coding and professional work. It builds on the strengths of previous Sonnet models, bringing top-tier intelligence at Sonnet pricing for coding, agents, and everyday professional work at scale.",
3697
+ "context_window": 1e6,
3698
+ "max_tokens": 128e3,
3699
+ "tags": [
3700
+ "reasoning",
3701
+ "tool-use",
3702
+ "explicit-caching",
3703
+ "file-input",
3704
+ "vision",
3705
+ "web-search"
3706
+ ]
3707
+ },
3708
+ {
3709
+ "id": "cohere/embed-v4.0",
3710
+ "name": "Embed v4.0",
3711
+ "owned_by": "cohere",
3712
+ "type": "embedding",
3713
+ "description": "A model that allows for text, images, or mixed content to be classified or turned into embeddings.",
3714
+ "context_window": 128e3,
3715
+ "tags": []
3716
+ },
3717
+ {
3718
+ "id": "cohere/rerank-v3.5",
3719
+ "name": "Cohere Rerank 3.5",
3720
+ "owned_by": "cohere",
3721
+ "type": "reranking",
3722
+ "description": "A model that allows for re-ranking English Language documents and semi-structured data (JSON).",
3723
+ "context_window": 4096,
3724
+ "max_tokens": 4096,
3725
+ "tags": []
3726
+ },
3727
+ {
3728
+ "id": "cohere/rerank-v4-fast",
3729
+ "name": "Cohere Rerank 4 Fast",
3730
+ "owned_by": "cohere",
3731
+ "type": "reranking",
3732
+ "description": "A light version of Rerank 4 Pro, this is a multilingual model that allows for re-ranking English and non-english documents and semi-structured data (JSON). This model is better suited for low latency and high throughput use-cases than its pro variant.",
3733
+ "context_window": 32e3,
3734
+ "max_tokens": 32e3,
3735
+ "tags": []
3736
+ },
3737
+ {
3738
+ "id": "cohere/rerank-v4-pro",
3739
+ "name": "Cohere Rerank 4 Pro",
3740
+ "owned_by": "cohere",
3741
+ "type": "reranking",
3742
+ "description": "A multilingual model that allows for re-ranking English and non-english documents and semi-structured data (JSON). This model is better suited for state-of-the-art quality and complex use-cases than its fast variant.",
3743
+ "context_window": 32e3,
3744
+ "max_tokens": 32e3,
3745
+ "tags": []
3746
+ },
3747
+ {
3748
+ "id": "deepseek/deepseek-v4-flash",
3749
+ "name": "DeepSeek V4 Flash",
3750
+ "owned_by": "deepseek",
3751
+ "type": "language",
3752
+ "description": "DeepSeek-V4 series incorporate several key upgrades in architecture and optimization: (1) a hybrid attention architecture that combines Compressed Sparse Attention (CSA)\nand Heavily Compressed Attention (HCA) to improve long-context efficiency; (2) ManifoldConstrained Hyper-Connections (mHC) that enhance conventional residual connections; (3)\nand the Muon optimizer for faster convergence and greater training stability",
3753
+ "context_window": 1e6,
3754
+ "max_tokens": 384e3,
3755
+ "tags": [
3756
+ "reasoning",
3757
+ "tool-use",
3758
+ "implicit-caching"
3759
+ ]
3760
+ },
3761
+ {
3762
+ "id": "deepseek/deepseek-v4-pro",
3763
+ "name": "DeepSeek V4 Pro",
3764
+ "owned_by": "deepseek",
3765
+ "type": "language",
3766
+ "description": "DeepSeek-V4 series incorporate several key upgrades in architecture and optimization: (1) a hybrid attention architecture that combines Compressed Sparse Attention (CSA)\nand Heavily Compressed Attention (HCA) to improve long-context efficiency; (2) ManifoldConstrained Hyper-Connections (mHC) that enhance conventional residual connections; (3)\nand the Muon optimizer for faster convergence and greater training stability",
3767
+ "context_window": 1e6,
3768
+ "max_tokens": 384e3,
3769
+ "tags": [
3770
+ "reasoning",
3771
+ "tool-use",
3772
+ "implicit-caching"
3773
+ ]
3774
+ },
3775
+ {
3776
+ "id": "google/gemini-3.1-flash-lite",
3777
+ "name": "Gemini 3.1 Flash Lite",
3778
+ "owned_by": "google",
3779
+ "type": "language",
3780
+ "description": "Gemini 3.1 Flash Lite outperforms 2.5 Flash Lite on overall quality and lands close to 2.5 Flash performance across key capability areas. It is a workhorse model for high-volume use cases, with improvements across audio input/ASR, RAG snippet ranking, translation, data extraction, and code completion.",
3781
+ "context_window": 1e6,
3782
+ "max_tokens": 65e3,
3783
+ "tags": [
3784
+ "reasoning",
3785
+ "tool-use",
3786
+ "implicit-caching",
3787
+ "file-input",
3788
+ "vision",
3789
+ "web-search"
3790
+ ]
3791
+ },
3792
+ {
3793
+ "id": "google/gemini-3.1-flash-lite-preview",
3794
+ "name": "Gemini 3.1 Flash Lite Preview",
3795
+ "owned_by": "google",
3796
+ "type": "language",
3797
+ "description": "Gemini 3.1 Flash Lite Preview outperforms 2.5 Flash Lite on overall quality and lands close to 2.5 Flash performance across key capability areas. It is a workhorse model for high-volume use cases, with improvements across audio input/ASR, RAG snippet ranking, translation, data extraction, and code completion.",
3798
+ "context_window": 1e6,
3799
+ "max_tokens": 65e3,
3800
+ "tags": [
3801
+ "reasoning",
3802
+ "tool-use",
3803
+ "implicit-caching",
3804
+ "file-input",
3805
+ "vision",
3806
+ "web-search"
3807
+ ]
3808
+ },
3809
+ {
3810
+ "id": "google/gemini-embedding-001",
3811
+ "name": "Gemini Embedding 001",
3812
+ "owned_by": "google",
3813
+ "type": "embedding",
3814
+ "description": "State-of-the-art embedding model with excellent performance across English, multilingual and code tasks.",
3815
+ "tags": []
3816
+ },
3817
+ {
3818
+ "id": "google/gemini-embedding-2",
3819
+ "name": "Gemini Embedding 2",
3820
+ "owned_by": "google",
3821
+ "type": "embedding",
3822
+ "description": "Google\u2019s first fully multimodal Embedding model that is capable of mapping text, image, video, audio, and PDFs and their interleaved combinations thereof into a single, unified vector space. Built on the Gemini architecture, it supports 100+ languages.",
3823
+ "tags": []
3824
+ },
3825
+ {
3826
+ "id": "google/gemma-4-26b-a4b-it",
3827
+ "name": "Gemma 4 26B A4B IT",
3828
+ "owned_by": "google",
3829
+ "type": "language",
3830
+ "description": "Gemma is a family of open models built by Google DeepMind. Gemma 4 models are multimodal, handling text and image input (with audio supported on small models) and generating text output. This release includes open-weights models in both pre-trained and instruction-tuned variants. Gemma 4 features a context window of up to 256K tokens and maintains multilingual support in over 140 languages.",
3831
+ "context_window": 262144,
3832
+ "max_tokens": 131072,
3833
+ "tags": [
3834
+ "file-input",
3835
+ "reasoning",
3836
+ "tool-use",
3837
+ "vision",
3838
+ "implicit-caching"
3839
+ ]
3840
+ },
3841
+ {
3842
+ "id": "google/gemma-4-31b-it",
3843
+ "name": "Gemma 4 31B IT",
3844
+ "owned_by": "google",
3845
+ "type": "language",
3846
+ "description": "Gemma 4 31B is engineered to tackle the most demanding enterprise workloads and complex reasoning tasks. With an expansive 256K-token context window, the 31B model can effortlessly ingest entire codebases, and massive sets of images in a single prompt.",
3847
+ "context_window": 262144,
3848
+ "max_tokens": 131072,
3849
+ "tags": [
3850
+ "file-input",
3851
+ "reasoning",
3852
+ "tool-use",
3853
+ "vision"
3854
+ ]
3855
+ },
3856
+ {
3857
+ "id": "google/imagen-4.0-fast-generate-001",
3858
+ "name": "Imagen 4 Fast",
3859
+ "owned_by": "google",
3860
+ "type": "image",
3861
+ "description": "Imagen 4 Fast is Google\u2019s speed-optimized variant of the Imagen 4 text-to-image model, designed for rapid, high-volume image generation. It\u2019s ideal for workflows like quick drafts, mockups, and iterative creative exploration. Despite emphasizing speed, it still benefits from the broader Imagen 4 family\u2019s improvements in clarity, text rendering, and stylistic flexibility, and supports high-resolution outputs up to 2K.",
3862
+ "context_window": 480,
3863
+ "tags": [
3864
+ "image-generation"
3865
+ ]
3866
+ },
3867
+ {
3868
+ "id": "google/imagen-4.0-generate-001",
3869
+ "name": "Imagen 4",
3870
+ "owned_by": "google",
3871
+ "type": "image",
3872
+ "description": "Imagen 4: Google's flagship text-to-image model that serves as the go-to choice for a wide variety of high-quality image generation tasks, featuring significant improvements in text rendering over previous models. It now supports up to 2K resolution generation for creating detailed and crisp visuals, making it suitable for everything from marketing assets to artistic compositions.",
3873
+ "context_window": 480,
3874
+ "tags": [
3875
+ "image-generation"
3876
+ ]
3877
+ },
3878
+ {
3879
+ "id": "google/imagen-4.0-ultra-generate-001",
3880
+ "name": "Imagen 4 Ultra",
3881
+ "owned_by": "google",
3882
+ "type": "image",
3883
+ "description": "Imagen 4 Ultra: Highest quality image generation model for detailed and photorealistic outputs.",
3884
+ "context_window": 480,
3885
+ "tags": [
3886
+ "image-generation"
3887
+ ]
3888
+ },
3889
+ {
3890
+ "id": "google/veo-3.0-fast-generate-001",
3891
+ "name": "Veo 3.0 Fast Generate",
3892
+ "owned_by": "google",
3893
+ "type": "video",
3894
+ "description": "Veo 3 Fast is a quicker and more cost effective version of Veo 3, allowing developers to create videos with sound while maintaining high quality and optimizing for speed and business use cases. Veo 3 Fast offers both text-to-video and image-to-video modalities.",
3895
+ "tags": []
3896
+ },
3897
+ {
3898
+ "id": "google/veo-3.0-generate-001",
3899
+ "name": "Veo 3.0",
3900
+ "owned_by": "google",
3901
+ "type": "video",
3902
+ "description": "Veo 3 is designed to handle a range of video generation tasks, from cinematic narratives to dynamic character animations. With Veo 3, you can create more immersive experiences by not only generating stunning visuals, but also audio like dialogue and sound effects.",
3903
+ "tags": []
3904
+ },
3905
+ {
3906
+ "id": "google/veo-3.1-fast-generate-001",
3907
+ "name": "Veo 3.1 Fast Generate",
3908
+ "owned_by": "google",
3909
+ "type": "video",
3910
+ "description": "Veo 3.1 Fast is a specialized, high-speed variant of Google DeepMind\u2019s Veo 3.1 text-to-video model, optimized for rapid generation of 8-second, high-fidelity videos. It is designed to create cinematic, 1080p, or 720p content with improved prompt adherence and native audio, making it ideal for creating quick, high-quality video clips, social media content, and ad creatives.",
3911
+ "tags": []
3912
+ },
3913
+ {
3914
+ "id": "google/veo-3.1-generate-001",
3915
+ "name": "Veo 3.1",
3916
+ "owned_by": "google",
3917
+ "type": "video",
3918
+ "description": "Veo 3.1 is Google's state-of-the-art model for generating high-fidelity, 8-second 720p, 1080p or 4k videos featuring stunning realism and natively generated audio.",
3919
+ "tags": []
3920
+ },
3921
+ {
3922
+ "id": "meta/llama-3.1-70b",
3923
+ "name": "Llama 3.1 70B Instruct",
3924
+ "owned_by": "meta",
3925
+ "type": "language",
3926
+ "description": "An update to Meta Llama 3 70B Instruct that includes an expanded 128K context length, multilinguality and improved reasoning capabilities.",
3927
+ "context_window": 128e3,
3928
+ "max_tokens": 8192,
3929
+ "tags": [
3930
+ "tool-use"
3931
+ ]
3932
+ },
3933
+ {
3934
+ "id": "meta/llama-3.1-8b",
3935
+ "name": "Llama 3.1 8B Instruct",
3936
+ "owned_by": "meta",
3937
+ "type": "language",
3938
+ "description": "An update to Meta Llama 3 8B Instruct that includes an expanded 128K context length, multilinguality and improved reasoning capabilities.",
3939
+ "context_window": 128e3,
3940
+ "max_tokens": 8192,
3941
+ "tags": [
3942
+ "tool-use",
3943
+ "implicit-caching"
3944
+ ]
3945
+ },
3946
+ {
3947
+ "id": "meta/llama-3.2-11b",
3948
+ "name": "Llama 3.2 11B Vision Instruct",
3949
+ "owned_by": "meta",
3950
+ "type": "language",
3951
+ "description": "Instruction-tuned image reasoning generative model (text + images in / text out) optimized for visual recognition, image reasoning, captioning and answering general questions about the image.",
3952
+ "context_window": 128e3,
3953
+ "max_tokens": 8192,
3954
+ "tags": [
3955
+ "tool-use",
3956
+ "vision"
3957
+ ]
3958
+ },
3959
+ {
3960
+ "id": "meta/llama-3.2-1b",
3961
+ "name": "Llama 3.2 1B Instruct",
3962
+ "owned_by": "meta",
3963
+ "type": "language",
3964
+ "description": "Text-only model, supporting on-device use cases such as multilingual local knowledge retrieval, summarization, and rewriting.",
3965
+ "context_window": 128e3,
3966
+ "max_tokens": 8192,
3967
+ "tags": []
3968
+ },
3969
+ {
3970
+ "id": "meta/llama-3.2-3b",
3971
+ "name": "Llama 3.2 3B Instruct",
3972
+ "owned_by": "meta",
3973
+ "type": "language",
3974
+ "description": "Text-only model, fine-tuned for supporting on-device use cases such as multilingual local knowledge retrieval, summarization, and rewriting.",
3975
+ "context_window": 128e3,
3976
+ "max_tokens": 8192,
3977
+ "tags": []
3978
+ },
3979
+ {
3980
+ "id": "meta/llama-3.2-90b",
3981
+ "name": "Llama 3.2 90B Vision Instruct",
3982
+ "owned_by": "meta",
3983
+ "type": "language",
3984
+ "description": "Instruction-tuned image reasoning generative model (text + images in / text out) optimized for visual recognition, image reasoning, captioning and answering general questions about the image.",
3985
+ "context_window": 128e3,
3986
+ "max_tokens": 8192,
3987
+ "tags": [
3988
+ "tool-use",
3989
+ "vision"
3990
+ ]
3991
+ },
3992
+ {
3993
+ "id": "meta/llama-3.3-70b",
3994
+ "name": "Llama 3.3 70B Instruct",
3995
+ "owned_by": "meta",
3996
+ "type": "language",
3997
+ "description": "Where performance meets efficiency. This model supports high-performance conversational AI designed for content creation, enterprise applications, and research, offering advanced language understanding capabilities, including text summarization, classification, sentiment analysis, and code generation.",
3998
+ "context_window": 128e3,
3999
+ "max_tokens": 8192,
4000
+ "tags": [
4001
+ "tool-use"
4002
+ ]
4003
+ },
4004
+ {
4005
+ "id": "meta/llama-4-maverick",
4006
+ "name": "Llama 4 Maverick 17B Instruct",
4007
+ "owned_by": "meta",
4008
+ "type": "language",
4009
+ "description": "As a general purpose LLM, Llama 4 Maverick contains 17 billion active parameters, 128 experts, and 400 billion total parameters, offering high quality at a lower price compared to Llama 3.3 70B.",
4010
+ "context_window": 128e3,
4011
+ "max_tokens": 8192,
4012
+ "tags": [
4013
+ "tool-use",
4014
+ "vision"
4015
+ ]
4016
+ },
4017
+ {
4018
+ "id": "meta/llama-4-scout",
4019
+ "name": "Llama 4 Scout 17B Instruct",
4020
+ "owned_by": "meta",
4021
+ "type": "language",
4022
+ "description": "Llama 4 Scout is the best multimodal model in the world in its class and is more powerful than our Llama 3 models, while fitting in a single H100 GPU. Additionally, Llama 4 Scout supports an industry-leading context window of up to 10M tokens.",
4023
+ "context_window": 128e3,
4024
+ "max_tokens": 8192,
4025
+ "tags": [
4026
+ "tool-use",
4027
+ "vision"
4028
+ ]
4029
+ },
4030
+ {
4031
+ "id": "meta/muse-spark-1.1",
4032
+ "name": "Muse Spark 1.1",
4033
+ "owned_by": "meta",
4034
+ "type": "language",
4035
+ "description": "Muse Spark 1.1 is strongest at agentic performance, tool use, and computer use. It does well on long-running tasks with 1M token context window, can delegate execution to sub-agents running in parallel, and is trained to use computer interfaces on desktop, mobile, or browser.",
4036
+ "context_window": 1048576,
4037
+ "max_tokens": 1048576,
4038
+ "tags": [
4039
+ "reasoning",
4040
+ "tool-use",
4041
+ "implicit-caching",
4042
+ "file-input",
4043
+ "vision"
4044
+ ]
4045
+ },
4046
+ {
4047
+ "id": "mistral/codestral-embed",
4048
+ "name": "Codestral Embed",
4049
+ "owned_by": "mistral",
4050
+ "type": "embedding",
4051
+ "description": "Code embedding model that can embed code databases and repositories to power coding assistants.",
4052
+ "tags": []
4053
+ },
4054
+ {
4055
+ "id": "mistral/mistral-embed",
4056
+ "name": "Mistral Embed",
4057
+ "owned_by": "mistral",
4058
+ "type": "embedding",
4059
+ "description": "General-purpose text embedding model for semantic search, similarity, clustering, and RAG workflows.",
4060
+ "tags": []
4061
+ },
4062
+ {
4063
+ "id": "mistral/mistral-medium",
4064
+ "name": "Mistral Medium 3.1",
4065
+ "owned_by": "mistral",
4066
+ "type": "language",
4067
+ "description": "Mistral Medium 3 delivers frontier performance while being an order of magnitude less expensive. For instance, the model performs at or above 90% of Claude Sonnet 3.7 on benchmarks across the board at a significantly lower cost.",
4068
+ "context_window": 128e3,
4069
+ "max_tokens": 64e3,
4070
+ "tags": [
4071
+ "tool-use",
4072
+ "vision"
4073
+ ]
4074
+ },
4075
+ {
4076
+ "id": "mistral/mistral-medium-3.5",
4077
+ "name": "Mistral Medium Latest",
4078
+ "owned_by": "mistral",
4079
+ "type": "language",
4080
+ "description": "Mistral's frontier-class multimodal model optimized for agentic and coding use cases.",
4081
+ "context_window": 256e3,
4082
+ "max_tokens": 256e3,
4083
+ "tags": [
4084
+ "reasoning",
4085
+ "tool-use",
4086
+ "vision"
4087
+ ]
4088
+ },
4089
+ {
4090
+ "id": "mistral/mistral-small",
4091
+ "name": "Mistral Small",
4092
+ "owned_by": "mistral",
4093
+ "type": "language",
4094
+ "description": "Mistral Small is the ideal choice for simple tasks that one can do in bulk - like Classification, Customer Support, or Text Generation. It offers excellent performance at an affordable price point.",
4095
+ "context_window": 32e3,
4096
+ "max_tokens": 4e3,
4097
+ "tags": [
4098
+ "tool-use",
4099
+ "vision"
4100
+ ]
4101
+ },
4102
+ {
4103
+ "id": "mistral/pixtral-12b",
4104
+ "name": "Pixtral 12B 2409",
4105
+ "owned_by": "mistral",
4106
+ "type": "language",
4107
+ "description": "A 12B model with image understanding capabilities in addition to text.",
4108
+ "context_window": 128e3,
4109
+ "max_tokens": 4e3,
4110
+ "tags": [
4111
+ "tool-use",
4112
+ "vision"
4113
+ ]
4114
+ },
4115
+ {
4116
+ "id": "openai/gpt-3.5-turbo",
4117
+ "name": "GPT-3.5 Turbo",
4118
+ "owned_by": "openai",
4119
+ "type": "language",
4120
+ "description": "OpenAI's most capable and cost effective model in the GPT-3.5 family optimized for chat purposes, but also works well for traditional completions tasks.",
4121
+ "context_window": 16385,
4122
+ "max_tokens": 4096,
4123
+ "tags": [
4124
+ "tool-use"
4125
+ ]
4126
+ },
4127
+ {
4128
+ "id": "openai/gpt-4-turbo",
4129
+ "name": "GPT-4 Turbo",
4130
+ "owned_by": "openai",
4131
+ "type": "language",
4132
+ "description": "gpt-4-turbo from OpenAI has broad general knowledge and domain expertise allowing it to follow complex instructions in natural language and solve difficult problems accurately. It has a knowledge cutoff of April 2023 and a 128,000 token context window.",
4133
+ "context_window": 128e3,
4134
+ "max_tokens": 4096,
4135
+ "tags": [
4136
+ "tool-use",
4137
+ "vision"
4138
+ ]
4139
+ },
4140
+ {
4141
+ "id": "openai/gpt-4.1",
4142
+ "name": "GPT-4.1",
4143
+ "owned_by": "openai",
4144
+ "type": "language",
4145
+ "description": "GPT 4.1 is OpenAI's flagship model for complex tasks. It is well suited for problem solving across domains.",
4146
+ "context_window": 1047576,
4147
+ "max_tokens": 32768,
4148
+ "tags": [
4149
+ "file-input",
4150
+ "implicit-caching",
4151
+ "tool-use",
4152
+ "vision",
4153
+ "web-search"
4154
+ ]
4155
+ },
4156
+ {
4157
+ "id": "openai/gpt-4.1-mini",
4158
+ "name": "GPT-4.1 mini",
4159
+ "owned_by": "openai",
4160
+ "type": "language",
4161
+ "description": "GPT 4.1 mini provides a balance between intelligence, speed, and cost that makes it an attractive model for many use cases.",
4162
+ "context_window": 1047576,
4163
+ "max_tokens": 32768,
4164
+ "tags": [
4165
+ "file-input",
4166
+ "implicit-caching",
4167
+ "tool-use",
4168
+ "vision",
4169
+ "web-search"
4170
+ ]
4171
+ },
4172
+ {
4173
+ "id": "openai/gpt-4.1-nano",
4174
+ "name": "GPT-4.1 nano",
4175
+ "owned_by": "openai",
4176
+ "type": "language",
4177
+ "description": "GPT-4.1 nano is the fastest, most cost-effective GPT 4.1 model.",
4178
+ "context_window": 1047576,
4179
+ "max_tokens": 32768,
4180
+ "tags": [
4181
+ "file-input",
4182
+ "implicit-caching",
4183
+ "tool-use",
4184
+ "vision",
4185
+ "web-search"
4186
+ ]
4187
+ },
4188
+ {
4189
+ "id": "openai/gpt-4o",
4190
+ "name": "GPT-4o",
4191
+ "owned_by": "openai",
4192
+ "type": "language",
4193
+ "description": "GPT-4o from OpenAI has broad general knowledge and domain expertise allowing it to follow complex instructions in natural language and solve difficult problems accurately. It matches GPT-4 Turbo performance with a faster and cheaper API.",
4194
+ "context_window": 128e3,
4195
+ "max_tokens": 16384,
4196
+ "tags": [
4197
+ "file-input",
4198
+ "implicit-caching",
4199
+ "tool-use",
4200
+ "vision",
4201
+ "web-search"
4202
+ ]
4203
+ },
4204
+ {
4205
+ "id": "openai/gpt-4o-mini",
4206
+ "name": "GPT-4o mini",
4207
+ "owned_by": "openai",
4208
+ "type": "language",
4209
+ "description": "GPT-4o mini from OpenAI is their most advanced and cost-efficient small model. It is multi-modal (accepting text or image inputs and outputting text) and has higher intelligence than gpt-3.5-turbo but is just as fast.",
4210
+ "context_window": 128e3,
4211
+ "max_tokens": 16384,
4212
+ "tags": [
4213
+ "file-input",
4214
+ "implicit-caching",
4215
+ "tool-use",
4216
+ "vision",
4217
+ "web-search"
4218
+ ]
4219
+ },
4220
+ {
4221
+ "id": "openai/gpt-4o-mini-search-preview",
4222
+ "name": "GPT 4o Mini Search Preview",
4223
+ "owned_by": "openai",
4224
+ "type": "language",
4225
+ "description": "GPT-4o mini Search Preview is a specialized model trained to understand and execute web search queries with the Chat Completions API. In addition to token fees, web search queries have a fee per tool call.",
4226
+ "context_window": 128e3,
4227
+ "max_tokens": 16384,
4228
+ "tags": [
4229
+ "web-search"
4230
+ ]
4231
+ },
4232
+ {
4233
+ "id": "openai/gpt-4o-mini-transcribe",
4234
+ "name": "GPT-4o mini Transcribe",
4235
+ "owned_by": "openai",
4236
+ "type": "transcription",
4237
+ "description": "GPT-4o mini Transcribe is a speech-to-text model that uses GPT-4o mini to transcribe audio. It offers improvements to word error rate and better language recognition and accuracy compared to original Whisper models. Use it for more accurate transcripts.",
4238
+ "tags": []
4239
+ },
4240
+ {
4241
+ "id": "openai/gpt-4o-transcribe",
4242
+ "name": "GPT-4o Transcribe",
4243
+ "owned_by": "openai",
4244
+ "type": "transcription",
4245
+ "description": "GPT-4o Transcribe is a speech-to-text model that uses GPT-4o to transcribe audio. It offers improvements to word error rate and better language recognition and accuracy compared to original Whisper models. Use it for more accurate transcripts.",
4246
+ "tags": []
4247
+ },
4248
+ {
4249
+ "id": "openai/gpt-5",
4250
+ "name": "GPT-5",
4251
+ "owned_by": "openai",
4252
+ "type": "language",
4253
+ "description": "GPT-5 is OpenAI's flagship language model that excels at complex reasoning, broad real-world knowledge, code-intensive, and multi-step agentic tasks.",
4254
+ "context_window": 4e5,
4255
+ "max_tokens": 128e3,
4256
+ "tags": [
4257
+ "file-input",
4258
+ "implicit-caching",
4259
+ "reasoning",
4260
+ "tool-use",
4261
+ "vision",
4262
+ "web-search"
4263
+ ]
4264
+ },
4265
+ {
4266
+ "id": "openai/gpt-5-chat",
4267
+ "name": "GPT 5 Chat",
4268
+ "owned_by": "openai",
4269
+ "type": "language",
4270
+ "description": "GPT-5 Chat points to the GPT-5 snapshot currently used in ChatGPT.",
4271
+ "context_window": 128e3,
4272
+ "max_tokens": 16384,
4273
+ "tags": [
4274
+ "file-input",
4275
+ "implicit-caching",
4276
+ "tool-use",
4277
+ "vision",
4278
+ "web-search"
4279
+ ]
4280
+ },
4281
+ {
4282
+ "id": "openai/gpt-5-codex",
4283
+ "name": "GPT-5-Codex",
4284
+ "owned_by": "openai",
4285
+ "type": "language",
4286
+ "description": "GPT-5-Codex is a version of GPT-5 optimized for agentic coding tasks in Codex or similar environments.",
4287
+ "context_window": 4e5,
4288
+ "max_tokens": 128e3,
4289
+ "tags": [
4290
+ "file-input",
4291
+ "implicit-caching",
4292
+ "reasoning",
4293
+ "tool-use",
4294
+ "vision",
4295
+ "web-search"
4296
+ ]
4297
+ },
4298
+ {
4299
+ "id": "openai/gpt-5-mini",
4300
+ "name": "GPT-5 mini",
4301
+ "owned_by": "openai",
4302
+ "type": "language",
4303
+ "description": "GPT-5 mini is a cost optimized model that excels at reasoning/chat tasks. It offers an optimal balance between speed, cost, and capability.",
4304
+ "context_window": 4e5,
4305
+ "max_tokens": 128e3,
4306
+ "tags": [
4307
+ "file-input",
4308
+ "implicit-caching",
4309
+ "reasoning",
4310
+ "tool-use",
4311
+ "vision",
4312
+ "web-search"
4313
+ ]
4314
+ },
4315
+ {
4316
+ "id": "openai/gpt-5-nano",
4317
+ "name": "GPT-5 nano",
4318
+ "owned_by": "openai",
4319
+ "type": "language",
4320
+ "description": "GPT-5 nano is a high throughput model that excels at simple instruction or classification tasks.",
4321
+ "context_window": 4e5,
4322
+ "max_tokens": 128e3,
4323
+ "tags": [
4324
+ "file-input",
4325
+ "implicit-caching",
4326
+ "reasoning",
4327
+ "tool-use",
4328
+ "vision",
4329
+ "web-search"
4330
+ ]
4331
+ },
4332
+ {
4333
+ "id": "openai/gpt-5-pro",
4334
+ "name": "GPT-5 pro",
4335
+ "owned_by": "openai",
4336
+ "type": "language",
4337
+ "description": "GPT-5 pro uses more compute to think harder and provide consistently better answers. Since GPT-5 pro is designed to tackle tough problems, some requests may take several minutes to finish.",
4338
+ "context_window": 4e5,
4339
+ "max_tokens": 272e3,
4340
+ "tags": [
4341
+ "file-input",
4342
+ "reasoning",
4343
+ "tool-use",
4344
+ "vision",
4345
+ "web-search"
4346
+ ]
4347
+ },
4348
+ {
4349
+ "id": "openai/gpt-5.1-codex",
4350
+ "name": "GPT-5.1-Codex",
4351
+ "owned_by": "openai",
4352
+ "type": "language",
4353
+ "description": "GPT-5.1-Codex is a version of GPT-5.1 optimized for agentic coding tasks in Codex or similar environments.",
4354
+ "context_window": 4e5,
4355
+ "max_tokens": 128e3,
4356
+ "tags": [
4357
+ "file-input",
4358
+ "implicit-caching",
4359
+ "reasoning",
4360
+ "tool-use",
4361
+ "vision",
4362
+ "web-search"
4363
+ ]
4364
+ },
4365
+ {
4366
+ "id": "openai/gpt-5.1-codex-max",
4367
+ "name": "GPT 5.1 Codex Max",
4368
+ "owned_by": "openai",
4369
+ "type": "language",
4370
+ "description": "GPT\u20115.1-Codex-Max is purpose-built for agentic coding.",
4371
+ "context_window": 4e5,
4372
+ "max_tokens": 128e3,
4373
+ "tags": [
4374
+ "file-input",
4375
+ "implicit-caching",
4376
+ "reasoning",
4377
+ "tool-use",
4378
+ "vision",
4379
+ "web-search"
4380
+ ]
4381
+ },
4382
+ {
4383
+ "id": "openai/gpt-5.1-codex-mini",
4384
+ "name": "GPT 5.1 Codex Mini",
4385
+ "owned_by": "openai",
4386
+ "type": "language",
4387
+ "description": "GPT-5.1 Codex mini is a smaller, faster, and cheaper version of GPT-5.1 Codex.",
4388
+ "context_window": 4e5,
4389
+ "max_tokens": 128e3,
4390
+ "tags": [
4391
+ "file-input",
4392
+ "implicit-caching",
4393
+ "reasoning",
4394
+ "tool-use",
4395
+ "vision",
4396
+ "web-search"
4397
+ ]
4398
+ },
4399
+ {
4400
+ "id": "openai/gpt-5.1-instant",
4401
+ "name": "GPT-5.1 Instant",
4402
+ "owned_by": "openai",
4403
+ "type": "language",
4404
+ "description": "GPT-5.1 Instant (or GPT-5.1 chat) is a warmer and more conversational version of GPT-5-chat, with improved instruction following and adaptive reasoning for deciding when to think before responding.",
4405
+ "context_window": 128e3,
4406
+ "max_tokens": 16384,
4407
+ "tags": [
4408
+ "file-input",
4409
+ "implicit-caching",
4410
+ "tool-use",
4411
+ "vision",
4412
+ "web-search"
4413
+ ]
4414
+ },
4415
+ {
4416
+ "id": "openai/gpt-5.1-thinking",
4417
+ "name": "GPT 5.1 Thinking",
4418
+ "owned_by": "openai",
4419
+ "type": "language",
4420
+ "description": "An upgraded version of GPT-5 that adapts thinking time more precisely to the question to spend more time on complex questions and respond more quickly to simpler tasks.",
4421
+ "context_window": 4e5,
4422
+ "max_tokens": 128e3,
4423
+ "tags": [
4424
+ "file-input",
4425
+ "implicit-caching",
4426
+ "reasoning",
4427
+ "tool-use",
4428
+ "vision",
4429
+ "web-search"
4430
+ ]
4431
+ },
4432
+ {
4433
+ "id": "openai/gpt-5.2",
4434
+ "name": "GPT 5.2",
4435
+ "owned_by": "openai",
4436
+ "type": "language",
4437
+ "description": "GPT-5.2 is OpenAI's best general-purpose model, part of the GPT-5 flagship model family. It's their most intelligent model yet for both general and agentic tasks.",
4438
+ "context_window": 4e5,
4439
+ "max_tokens": 128e3,
4440
+ "tags": [
4441
+ "file-input",
4442
+ "implicit-caching",
4443
+ "reasoning",
4444
+ "tool-use",
4445
+ "vision",
4446
+ "web-search"
4447
+ ]
4448
+ },
4449
+ {
4450
+ "id": "openai/gpt-5.2-chat",
4451
+ "name": "GPT 5.2 Chat",
4452
+ "owned_by": "openai",
4453
+ "type": "language",
4454
+ "description": "The model powering ChatGPT is gpt-5.2-chat-latest: this is OpenAI's best general-purpose model, part of the GPT-5 flagship model family.",
4455
+ "context_window": 128e3,
4456
+ "max_tokens": 16384,
4457
+ "tags": [
4458
+ "file-input",
4459
+ "implicit-caching",
4460
+ "tool-use",
4461
+ "vision",
4462
+ "web-search"
4463
+ ]
4464
+ },
4465
+ {
4466
+ "id": "openai/gpt-5.2-codex",
4467
+ "name": "GPT 5.2 Codex",
4468
+ "owned_by": "openai",
4469
+ "type": "language",
4470
+ "description": "GPT\u20115.2-Codex is a version of GPT\u20115.2\u2060 further optimized for agentic coding in Codex, including improvements on long-horizon work through context compaction, stronger performance on large code changes like refactors and migrations, improved performance in Windows environments, and significantly stronger cybersecurity capabilities.",
4471
+ "context_window": 4e5,
4472
+ "max_tokens": 128e3,
4473
+ "tags": [
4474
+ "file-input",
4475
+ "implicit-caching",
4476
+ "reasoning",
4477
+ "tool-use",
4478
+ "vision",
4479
+ "web-search"
4480
+ ]
4481
+ },
4482
+ {
4483
+ "id": "openai/gpt-5.2-pro",
4484
+ "name": "GPT 5.2 ",
4485
+ "owned_by": "openai",
4486
+ "type": "language",
4487
+ "description": "Version of GPT-5.2 that produces smarter and more precise responses.",
4488
+ "context_window": 4e5,
4489
+ "max_tokens": 128e3,
4490
+ "tags": [
4491
+ "tool-use",
4492
+ "vision",
4493
+ "reasoning",
4494
+ "file-input",
4495
+ "web-search"
4496
+ ]
4497
+ },
4498
+ {
4499
+ "id": "openai/gpt-5.3-chat",
4500
+ "name": "GPT-5.3 Chat",
4501
+ "owned_by": "openai",
4502
+ "type": "language",
4503
+ "description": "The model powering ChatGPT is gpt-5.3-chat-latest: this is OpenAI's best general-purpose model, part of the GPT-5 flagship model family.",
4504
+ "context_window": 128e3,
4505
+ "max_tokens": 16384,
4506
+ "tags": [
4507
+ "file-input",
4508
+ "implicit-caching",
4509
+ "tool-use",
4510
+ "vision",
4511
+ "web-search"
4512
+ ]
4513
+ },
4514
+ {
4515
+ "id": "openai/gpt-5.3-codex",
4516
+ "name": "GPT 5.3 Codex",
4517
+ "owned_by": "openai",
4518
+ "type": "language",
4519
+ "description": "GPT-5.3-Codex advances both the frontier coding performance of GPT\u20115.2-Codex and the reasoning and professional knowledge capabilities of GPT\u20115.2, together in one model, which is also 25% faster. This enables it to take on long-running tasks that involve research, tool use, and complex execution.",
4520
+ "context_window": 4e5,
4521
+ "max_tokens": 128e3,
4522
+ "tags": [
4523
+ "file-input",
4524
+ "implicit-caching",
4525
+ "reasoning",
4526
+ "tool-use",
4527
+ "vision",
4528
+ "web-search"
4529
+ ]
4530
+ },
4531
+ {
4532
+ "id": "openai/gpt-5.4",
4533
+ "name": "GPT 5.4",
4534
+ "owned_by": "openai",
4535
+ "type": "language",
4536
+ "description": "GPT-5.4 is OpenAI's best general-purpose model, part of the GPT-5 flagship model family. It's their most intelligent model yet for both general and agentic tasks.",
4537
+ "context_window": 105e4,
4538
+ "max_tokens": 128e3,
4539
+ "tags": [
4540
+ "file-input",
4541
+ "implicit-caching",
4542
+ "reasoning",
4543
+ "tool-use",
4544
+ "vision",
4545
+ "web-search",
4546
+ "websocket-realtime"
4547
+ ]
4548
+ },
4549
+ {
4550
+ "id": "openai/gpt-5.4-mini",
4551
+ "name": "GPT 5.4 Mini",
4552
+ "owned_by": "openai",
4553
+ "type": "language",
4554
+ "description": "GPT-5.4 Mini brings the strengths of GPT-5.4 to a faster, more efficient model designed for high-volume workloads.",
4555
+ "context_window": 4e5,
4556
+ "max_tokens": 128e3,
4557
+ "tags": [
4558
+ "file-input",
4559
+ "implicit-caching",
4560
+ "reasoning",
4561
+ "tool-use",
4562
+ "vision",
4563
+ "web-search"
4564
+ ]
4565
+ },
4566
+ {
4567
+ "id": "openai/gpt-5.4-nano",
4568
+ "name": "GPT 5.4 Nano",
4569
+ "owned_by": "openai",
4570
+ "type": "language",
4571
+ "description": "GPT-5.4 Nano is designed for tasks where speed and cost matter most like classification, data extraction, ranking, and sub-agents.",
4572
+ "context_window": 4e5,
4573
+ "max_tokens": 128e3,
4574
+ "tags": [
4575
+ "file-input",
4576
+ "implicit-caching",
4577
+ "reasoning",
4578
+ "tool-use",
4579
+ "vision",
4580
+ "web-search"
4581
+ ]
4582
+ },
4583
+ {
4584
+ "id": "openai/gpt-5.4-pro",
4585
+ "name": "GPT 5.4 Pro",
4586
+ "owned_by": "openai",
4587
+ "type": "language",
4588
+ "description": "GPT-5.4 Pro uses more compute to think harder and provide consistently better answers. It's designed to tackle tough problems.",
4589
+ "context_window": 105e4,
4590
+ "max_tokens": 128e3,
4591
+ "tags": [
4592
+ "file-input",
4593
+ "reasoning",
4594
+ "tool-use",
4595
+ "vision",
4596
+ "web-search"
4597
+ ]
4598
+ },
4599
+ {
4600
+ "id": "openai/gpt-5.5",
4601
+ "name": "GPT 5.5",
4602
+ "owned_by": "openai",
4603
+ "type": "language",
4604
+ "description": "GPT\u20115.5 understands what you\u2019re trying to do faster and can carry more of the work itself. It excels at writing and debugging code, researching online, analyzing data, creating documents and spreadsheets, operating software, and moving across tools until a task is finished. Instead of carefully managing every step, you can give GPT\u20115.5 a messy, multi-part task and trust it to plan, use tools, check its work, navigate through ambiguity, and keep going.",
4605
+ "context_window": 1e6,
4606
+ "max_tokens": 128e3,
4607
+ "tags": [
4608
+ "file-input",
4609
+ "implicit-caching",
4610
+ "reasoning",
4611
+ "tool-use",
4612
+ "vision",
4613
+ "web-search",
4614
+ "websocket-realtime"
4615
+ ]
4616
+ },
4617
+ {
4618
+ "id": "openai/gpt-5.5-pro",
4619
+ "name": "GPT 5.5 Pro",
4620
+ "owned_by": "openai",
4621
+ "type": "language",
4622
+ "description": "",
4623
+ "context_window": 1e6,
4624
+ "max_tokens": 128e3,
4625
+ "tags": [
4626
+ "reasoning",
4627
+ "tool-use",
4628
+ "file-input",
4629
+ "web-search",
4630
+ "vision"
4631
+ ]
4632
+ },
4633
+ {
4634
+ "id": "openai/gpt-5.6-luna",
4635
+ "name": "GPT 5.6 Luna",
4636
+ "owned_by": "openai",
4637
+ "type": "language",
4638
+ "description": "GPT-5.6 Luna is a fast, affordable GPT-5.6 model that brings strong capability at the lowest cost in the series.",
4639
+ "context_window": 105e4,
4640
+ "max_tokens": 128e3,
4641
+ "tags": [
4642
+ "reasoning",
4643
+ "file-input",
4644
+ "tool-use",
4645
+ "vision",
4646
+ "implicit-caching",
4647
+ "web-search",
4648
+ "websocket-realtime"
4649
+ ]
4650
+ },
4651
+ {
4652
+ "id": "openai/gpt-5.6-sol",
4653
+ "name": "GPT 5.6 Sol",
4654
+ "owned_by": "openai",
4655
+ "type": "language",
4656
+ "description": "GPT-5.6 Sol is the flagship of OpenAI's GPT-5.6 series, its most capable model for long-horizon agentic work across coding, biology, and cybersecurity.",
4657
+ "context_window": 105e4,
4658
+ "max_tokens": 128e3,
4659
+ "tags": [
4660
+ "reasoning",
4661
+ "tool-use",
4662
+ "implicit-caching",
4663
+ "file-input",
4664
+ "vision",
4665
+ "web-search",
4666
+ "websocket-realtime"
4667
+ ]
4668
+ },
4669
+ {
4670
+ "id": "openai/gpt-5.6-terra",
4671
+ "name": "GPT 5.6 Terra",
4672
+ "owned_by": "openai",
4673
+ "type": "language",
4674
+ "description": "GPT-5.6 Terra is a balanced GPT-5.6 model for everyday work, with performance comparable to the previous generation at half the cost.",
4675
+ "context_window": 105e4,
4676
+ "max_tokens": 128e3,
4677
+ "tags": [
4678
+ "reasoning",
4679
+ "web-search",
4680
+ "file-input",
4681
+ "tool-use",
4682
+ "vision",
4683
+ "implicit-caching",
4684
+ "websocket-realtime"
4685
+ ]
4686
+ },
4687
+ {
4688
+ "id": "openai/gpt-image-1",
4689
+ "name": "GPT Image 1",
4690
+ "owned_by": "openai",
4691
+ "type": "image",
4692
+ "description": "GPT Image 1 is OpenAI's new state-of-the-art image generation model. It is a natively multimodal language model that accepts both text and image inputs, and produces image outputs.",
4693
+ "tags": [
4694
+ "image-generation",
4695
+ "implicit-caching"
4696
+ ]
4697
+ },
4698
+ {
4699
+ "id": "openai/gpt-image-1-mini",
4700
+ "name": "GPT Image 1 Mini",
4701
+ "owned_by": "openai",
4702
+ "type": "image",
4703
+ "description": "A cost-efficient version of GPT Image 1. It is a natively multimodal language model that accepts both text and image inputs, and produces image outputs.",
4704
+ "tags": [
4705
+ "image-generation",
4706
+ "implicit-caching"
4707
+ ]
4708
+ },
4709
+ {
4710
+ "id": "openai/gpt-image-1.5",
4711
+ "name": "GPT Image 1.5",
4712
+ "owned_by": "openai",
4713
+ "type": "image",
4714
+ "description": "GPT Image 1.5 is OpenAI's latest image generation model, with better instruction following and adherence to prompts.",
4715
+ "tags": [
4716
+ "image-generation",
4717
+ "implicit-caching"
4718
+ ]
4719
+ },
4720
+ {
4721
+ "id": "openai/gpt-image-2",
4722
+ "name": "GPT Image 2",
4723
+ "owned_by": "openai",
4724
+ "type": "image",
4725
+ "description": "GPT Image 2 is OpenAI's state-of-the-art image generation model for fast, high-quality image generation and editing. It supports flexible image sizes and high-fidelity image inputs.",
4726
+ "tags": [
4727
+ "image-generation",
4728
+ "implicit-caching"
4729
+ ]
4730
+ },
4731
+ {
4732
+ "id": "openai/gpt-oss-120b",
4733
+ "name": "GPT OSS 120B",
4734
+ "owned_by": "openai",
4735
+ "type": "language",
4736
+ "description": "Extremely capable general-purpose LLM with strong, controllable reasoning capabilities",
4737
+ "context_window": 131072,
4738
+ "max_tokens": 131072,
4739
+ "tags": [
4740
+ "reasoning",
4741
+ "tool-use",
4742
+ "implicit-caching"
4743
+ ]
4744
+ },
4745
+ {
4746
+ "id": "openai/gpt-oss-20b",
4747
+ "name": "GPT OSS 20B",
4748
+ "owned_by": "openai",
4749
+ "type": "language",
4750
+ "description": "A compact, open-weight language model optimized for low-latency and resource-constrained environments, including local and edge deployments.",
4751
+ "context_window": 131072,
4752
+ "max_tokens": 8192,
4753
+ "tags": [
4754
+ "reasoning",
4755
+ "tool-use",
4756
+ "implicit-caching"
4757
+ ]
4758
+ },
4759
+ {
4760
+ "id": "openai/gpt-oss-safeguard-20b",
4761
+ "name": "GPT OSS Safeguard 20B",
4762
+ "owned_by": "openai",
4763
+ "type": "language",
4764
+ "description": "OpenAI's first open weight reasoning model specifically trained for safety classification tasks. Fine-tuned from GPT-OSS, this model helps classify text content based on customizable policies, enabling bring-your-own-policy Trust & Safety AI where your own taxonomy, definitions, and thresholds guide classification decisions.",
4765
+ "context_window": 131072,
4766
+ "max_tokens": 65536,
4767
+ "tags": [
4768
+ "implicit-caching",
4769
+ "reasoning",
4770
+ "tool-use"
4771
+ ]
4772
+ },
4773
+ {
4774
+ "id": "openai/gpt-realtime-1.5",
4775
+ "name": "GPT-Realtime-1.5",
4776
+ "owned_by": "openai",
4777
+ "type": "realtime",
4778
+ "description": "GPT-Realtime-1.5 is our flagship audio model for voice agents and customer support.",
4779
+ "tags": []
4780
+ },
4781
+ {
4782
+ "id": "openai/gpt-realtime-2",
4783
+ "name": "gpt-realtime-2",
4784
+ "owned_by": "openai",
4785
+ "type": "realtime",
4786
+ "description": "GPT Realtime 2 is our most capable realtime voice model. It supports speech-to-speech interactions with configurable reasoning effort, stronger instruction following, and more reliable tool use for complex voice-agent workflows.",
4787
+ "tags": [
4788
+ "websocket-realtime"
4789
+ ]
4790
+ },
4791
+ {
4792
+ "id": "openai/gpt-realtime-2.1",
4793
+ "name": "gpt-realtime-2.1",
4794
+ "owned_by": "openai",
4795
+ "type": "realtime",
4796
+ "description": "GPT-Realtime-2.1 updates GPT-Realtime-2 with improved alphanumeric recognition, silence and noise handling, and interruption behavior. It supports speech-to-speech interactions with configurable reasoning effort, instruction following, and tool use for complex voice-agent workflows.",
4797
+ "context_window": 128e3,
4798
+ "max_tokens": 32e3,
4799
+ "tags": []
4800
+ },
4801
+ {
4802
+ "id": "openai/gpt-realtime-mini",
4803
+ "name": "GPT-Realtime mini",
4804
+ "owned_by": "openai",
4805
+ "type": "realtime",
4806
+ "description": "GPT-Realtime mini is capable of responding to audio and text inputs in realtime over WebRTC, WebSocket, or SIP connections.",
4807
+ "tags": []
4808
+ },
4809
+ {
4810
+ "id": "openai/o1",
4811
+ "name": "o1",
4812
+ "owned_by": "openai",
4813
+ "type": "language",
4814
+ "description": "o1 is OpenAI's flagship reasoning model, designed for complex problems that require deep thinking. It provides strong reasoning capabilities with improved accuracy for complex multi-step tasks.",
4815
+ "context_window": 2e5,
4816
+ "max_tokens": 1e5,
4817
+ "tags": [
4818
+ "file-input",
4819
+ "reasoning",
4820
+ "tool-use",
4821
+ "vision",
4822
+ "implicit-caching"
4823
+ ]
4824
+ },
4825
+ {
4826
+ "id": "openai/o3",
4827
+ "name": "o3",
4828
+ "owned_by": "openai",
4829
+ "type": "language",
4830
+ "description": "OpenAI's o3 is their most powerful reasoning model, setting new state-of-the-art benchmarks in coding, math, science, and visual perception. It excels at complex queries requiring multi-faceted analysis, with particular strength in analyzing images, charts, and graphics.",
4831
+ "context_window": 2e5,
4832
+ "max_tokens": 1e5,
4833
+ "tags": [
4834
+ "file-input",
4835
+ "implicit-caching",
4836
+ "reasoning",
4837
+ "tool-use",
4838
+ "vision",
4839
+ "web-search"
4840
+ ]
4841
+ },
4842
+ {
4843
+ "id": "openai/o3-deep-research",
4844
+ "name": "o3-deep-research",
4845
+ "owned_by": "openai",
4846
+ "type": "language",
4847
+ "description": "o3-deep-research is OpenAI's most advanced model for deep research, designed to tackle complex, multi-step research tasks. It can search and synthesize information from across the internet as well as from your own data\u2014brought in through MCP connectors.",
4848
+ "context_window": 2e5,
4849
+ "max_tokens": 1e5,
4850
+ "tags": [
4851
+ "file-input",
4852
+ "implicit-caching",
4853
+ "reasoning",
4854
+ "tool-use",
4855
+ "vision",
4856
+ "web-search"
4857
+ ]
4858
+ },
4859
+ {
4860
+ "id": "openai/o3-mini",
4861
+ "name": "o3-mini",
4862
+ "owned_by": "openai",
4863
+ "type": "language",
4864
+ "description": "o3-mini is OpenAI's most recent small reasoning model, providing high intelligence at the same cost and latency targets of o1-mini.",
4865
+ "context_window": 2e5,
4866
+ "max_tokens": 1e5,
4867
+ "tags": [
4868
+ "implicit-caching",
4869
+ "reasoning",
4870
+ "tool-use"
4871
+ ]
4872
+ },
4873
+ {
4874
+ "id": "openai/o3-pro",
4875
+ "name": "o3 Pro",
4876
+ "owned_by": "openai",
4877
+ "type": "language",
4878
+ "description": "The o-series of models are trained with reinforcement learning to think before they answer and perform complex reasoning. The o3-pro model uses more compute to think harder and provide consistently better answers.",
4879
+ "context_window": 2e5,
4880
+ "max_tokens": 1e5,
4881
+ "tags": [
4882
+ "reasoning",
4883
+ "vision",
4884
+ "file-input",
4885
+ "tool-use",
4886
+ "web-search"
4887
+ ]
4888
+ },
4889
+ {
4890
+ "id": "openai/o4-mini",
4891
+ "name": "o4-mini",
4892
+ "owned_by": "openai",
4893
+ "type": "language",
4894
+ "description": "OpenAI's o4-mini delivers fast, cost-efficient reasoning with exceptional performance for its size, particularly excelling in math (best-performing on AIME benchmarks), coding, and visual tasks.",
4895
+ "context_window": 2e5,
4896
+ "max_tokens": 1e5,
4897
+ "tags": [
4898
+ "file-input",
4899
+ "implicit-caching",
4900
+ "reasoning",
4901
+ "tool-use",
4902
+ "vision",
4903
+ "web-search"
4904
+ ]
4905
+ },
4906
+ {
4907
+ "id": "openai/text-embedding-3-large",
4908
+ "name": "text-embedding-3-large",
4909
+ "owned_by": "openai",
4910
+ "type": "embedding",
4911
+ "description": "OpenAI's most capable embedding model for both english and non-english tasks.",
4912
+ "tags": []
4913
+ },
4914
+ {
4915
+ "id": "openai/text-embedding-3-small",
4916
+ "name": "text-embedding-3-small",
4917
+ "owned_by": "openai",
4918
+ "type": "embedding",
4919
+ "description": "OpenAI's improved, more performant version of their ada embedding model.",
4920
+ "tags": []
4921
+ },
4922
+ {
4923
+ "id": "openai/text-embedding-ada-002",
4924
+ "name": "text-embedding-ada-002",
4925
+ "owned_by": "openai",
4926
+ "type": "embedding",
4927
+ "description": "OpenAI's legacy text embedding model.",
4928
+ "tags": []
4929
+ },
4930
+ {
4931
+ "id": "openai/tts-1",
4932
+ "name": "TTS-1",
4933
+ "owned_by": "openai",
4934
+ "type": "speech",
4935
+ "description": "TTS is a model that converts text to natural sounding spoken text.",
4936
+ "tags": []
4937
+ },
4938
+ {
4939
+ "id": "openai/tts-1-hd",
4940
+ "name": "TTS-1 HD",
4941
+ "owned_by": "openai",
4942
+ "type": "speech",
4943
+ "description": "TTS is a model that converts text to natural sounding spoken text. The tts-1-hd model is optimized for high quality text-to-speech use cases.",
4944
+ "tags": []
4945
+ },
4946
+ {
4947
+ "id": "openai/whisper-1",
4948
+ "name": "Whisper",
4949
+ "owned_by": "openai",
4950
+ "type": "transcription",
4951
+ "description": "Whisper is a general-purpose speech recognition model, trained on a large dataset of diverse audio. You can also use it as a multitask model to perform multilingual speech recognition as well as speech translation and language identification.",
4952
+ "tags": []
4953
+ },
4954
+ {
4955
+ "id": "perplexity/sonar",
4956
+ "name": "Sonar",
4957
+ "owned_by": "perplexity",
4958
+ "type": "language",
4959
+ "description": "Perplexity's lightweight offering with search grounding, quicker and cheaper than Sonar Pro.",
4960
+ "context_window": 127e3,
4961
+ "max_tokens": 8e3,
4962
+ "tags": [
4963
+ "vision",
4964
+ "web-search"
4965
+ ]
4966
+ },
4967
+ {
4968
+ "id": "perplexity/sonar-pro",
4969
+ "name": "Sonar Pro",
4970
+ "owned_by": "perplexity",
4971
+ "type": "language",
4972
+ "description": "Perplexity's premier offering with search grounding, supporting advanced queries and follow-ups.",
4973
+ "context_window": 2e5,
4974
+ "max_tokens": 8e3,
4975
+ "tags": [
4976
+ "vision",
4977
+ "web-search"
4978
+ ]
4979
+ },
4980
+ {
4981
+ "id": "perplexity/sonar-reasoning-pro",
4982
+ "name": "Sonar Reasoning Pro",
4983
+ "owned_by": "perplexity",
4984
+ "type": "language",
4985
+ "description": "A premium reasoning-focused model that outputs Chain of Thought (CoT) in responses, providing comprehensive explanations with enhanced search capabilities and multiple search queries per request.",
4986
+ "context_window": 127e3,
4987
+ "max_tokens": 8e3,
4988
+ "tags": [
4989
+ "reasoning",
4990
+ "web-search"
4991
+ ]
4992
+ },
4993
+ {
4994
+ "id": "xai/grok-4.1-fast-non-reasoning",
4995
+ "name": "Grok 4.1 Fast Non-Reasoning",
4996
+ "owned_by": "xai",
4997
+ "type": "language",
4998
+ "description": "",
4999
+ "context_window": 1e6,
5000
+ "max_tokens": 1e6,
5001
+ "tags": [
5002
+ "tool-use",
5003
+ "file-input",
5004
+ "vision",
5005
+ "implicit-caching"
5006
+ ]
5007
+ },
5008
+ {
5009
+ "id": "xai/grok-4.1-fast-reasoning",
5010
+ "name": "Grok 4.1 Fast Reasoning",
5011
+ "owned_by": "xai",
5012
+ "type": "language",
5013
+ "description": "",
5014
+ "context_window": 1e6,
5015
+ "max_tokens": 1e6,
5016
+ "tags": [
5017
+ "reasoning",
5018
+ "file-input",
5019
+ "vision",
5020
+ "tool-use",
5021
+ "implicit-caching"
5022
+ ]
5023
+ },
5024
+ {
5025
+ "id": "xai/grok-4.20-multi-agent",
5026
+ "name": "Grok 4.20 Multi-Agent",
5027
+ "owned_by": "xai",
5028
+ "type": "language",
5029
+ "description": "Multiple agents collaborate in parallel to perform deep research tasks.",
5030
+ "context_window": 2e6,
5031
+ "max_tokens": 2e6,
5032
+ "tags": [
5033
+ "reasoning",
5034
+ "tool-use",
5035
+ "implicit-caching",
5036
+ "vision",
5037
+ "file-input",
5038
+ "web-search"
5039
+ ]
5040
+ },
5041
+ {
5042
+ "id": "xai/grok-4.20-multi-agent-beta",
5043
+ "name": "Grok 4.20 Multi Agent Beta",
5044
+ "owned_by": "xai",
5045
+ "type": "language",
5046
+ "description": "Multiple agents collaborate in parallel to perform deep research tasks.",
5047
+ "context_window": 2e6,
5048
+ "max_tokens": 2e6,
5049
+ "tags": [
5050
+ "reasoning",
5051
+ "tool-use",
5052
+ "implicit-caching",
5053
+ "vision",
5054
+ "file-input",
5055
+ "web-search"
5056
+ ]
5057
+ },
5058
+ {
5059
+ "id": "xai/grok-4.20-non-reasoning",
5060
+ "name": "Grok 4.20 Non-Reasoning",
5061
+ "owned_by": "xai",
5062
+ "type": "language",
5063
+ "description": "Grok 4.20 Beta is the newest flagship model from xAI with industry-leading speed and agentic tool calling capabilities. It combines the lowest hallucination rate on the market with strict prompt adherence, delivering consistently precise and truthful responses.",
5064
+ "context_window": 2e6,
5065
+ "max_tokens": 2e6,
5066
+ "tags": [
5067
+ "tool-use",
5068
+ "implicit-caching",
5069
+ "file-input",
5070
+ "vision",
5071
+ "web-search"
5072
+ ]
5073
+ },
5074
+ {
5075
+ "id": "xai/grok-4.20-non-reasoning-beta",
5076
+ "name": "Grok 4.20 Beta Non-Reasoning",
5077
+ "owned_by": "xai",
5078
+ "type": "language",
5079
+ "description": "Grok 4.20 Beta is the newest flagship model from xAI with industry-leading speed and agentic tool calling capabilities. It combines the lowest hallucination rate on the market with strict prompt adherance, delivering consistently precise and truthful responses.",
5080
+ "context_window": 2e6,
5081
+ "max_tokens": 2e6,
5082
+ "tags": [
5083
+ "tool-use",
5084
+ "implicit-caching",
5085
+ "vision",
5086
+ "file-input",
5087
+ "web-search"
5088
+ ]
5089
+ },
5090
+ {
5091
+ "id": "xai/grok-4.20-reasoning",
5092
+ "name": "Grok 4.20 Reasoning",
5093
+ "owned_by": "xai",
5094
+ "type": "language",
5095
+ "description": "Grok 4.20 Beta is the newest flagship model from xAI with industry-leading speed and agentic tool calling capabilities. It combines the lowest hallucination rate on the market with strict prompt adherence, delivering consistently precise and truthful responses.",
5096
+ "context_window": 2e6,
5097
+ "max_tokens": 2e6,
5098
+ "tags": [
5099
+ "reasoning",
5100
+ "tool-use",
5101
+ "implicit-caching",
5102
+ "vision",
5103
+ "file-input",
5104
+ "web-search"
5105
+ ]
5106
+ },
5107
+ {
5108
+ "id": "xai/grok-4.20-reasoning-beta",
5109
+ "name": "Grok 4.20 Beta Reasoning",
5110
+ "owned_by": "xai",
5111
+ "type": "language",
5112
+ "description": "Grok 4.20 Beta is the newest flagship model from xAI with industry-leading speed and agentic tool calling capabilities. It combines the lowest hallucination rate on the market with strict prompt adherance, delivering consistently precise and truthful responses.",
5113
+ "context_window": 2e6,
5114
+ "max_tokens": 2e6,
5115
+ "tags": [
5116
+ "reasoning",
5117
+ "tool-use",
5118
+ "vision",
5119
+ "file-input",
5120
+ "implicit-caching",
5121
+ "web-search"
5122
+ ]
5123
+ },
5124
+ {
5125
+ "id": "xai/grok-4.3",
5126
+ "name": "Grok 4.3",
5127
+ "owned_by": "xai",
5128
+ "type": "language",
5129
+ "description": "Grok 4.3 is a new model matching the scale of Grok 4.20 with an improved architecture and a December 2025 knowledge cutoff.",
5130
+ "context_window": 1e6,
5131
+ "max_tokens": 1e6,
5132
+ "tags": [
5133
+ "reasoning",
5134
+ "tool-use",
5135
+ "implicit-caching",
5136
+ "file-input",
5137
+ "vision",
5138
+ "web-search"
5139
+ ]
5140
+ },
5141
+ {
5142
+ "id": "xai/grok-4.5",
5143
+ "name": "Grok 4.5",
5144
+ "owned_by": "xai",
5145
+ "type": "language",
5146
+ "description": "SpaceXAI's smartest model with frontier performance on coding, knowledge work, and STEM.",
5147
+ "context_window": 5e5,
5148
+ "max_tokens": 5e5,
5149
+ "tags": [
5150
+ "reasoning",
5151
+ "tool-use",
5152
+ "implicit-caching",
5153
+ "file-input",
5154
+ "vision",
5155
+ "web-search"
5156
+ ]
5157
+ },
5158
+ {
5159
+ "id": "xai/grok-build-0.1",
5160
+ "name": "Grok Build 0.1",
5161
+ "owned_by": "xai",
5162
+ "type": "language",
5163
+ "description": "xAI's fast coding model trained specifically for agentic coding.",
5164
+ "context_window": 256e3,
5165
+ "max_tokens": 256e3,
5166
+ "tags": [
5167
+ "reasoning",
5168
+ "implicit-caching",
5169
+ "vision",
5170
+ "tool-use",
5171
+ "web-search"
5172
+ ]
5173
+ },
5174
+ {
5175
+ "id": "xai/grok-imagine-image",
5176
+ "name": "Grok Imagine Image",
5177
+ "owned_by": "xai",
5178
+ "type": "image",
5179
+ "description": "Generate high-quality images from text prompts with xAI's imagine API.",
5180
+ "tags": [
5181
+ "image-generation"
5182
+ ]
5183
+ },
5184
+ {
5185
+ "id": "xai/grok-imagine-video",
5186
+ "name": "Grok Imagine",
5187
+ "owned_by": "xai",
5188
+ "type": "video",
5189
+ "description": "State-of-the-art video generation across quality, cost, and latency. Grok Imagine is x.AI's most powerful video-audio generative model yet. Bring an image to life, start from a simple text prompt, or even refine a complex cinematic sequence.",
5190
+ "tags": []
5191
+ },
5192
+ {
5193
+ "id": "xai/grok-imagine-video-1.5",
5194
+ "name": "Grok Imagine Video 1.5",
5195
+ "owned_by": "xai",
5196
+ "type": "video",
5197
+ "description": "",
5198
+ "tags": []
5199
+ },
5200
+ {
5201
+ "id": "xai/grok-imagine-video-1.5-preview",
5202
+ "name": "Grok Imagine Video 1.5 Preview",
5203
+ "owned_by": "xai",
5204
+ "type": "video",
5205
+ "description": "",
5206
+ "tags": []
5207
+ },
5208
+ {
5209
+ "id": "xai/grok-stt",
5210
+ "name": "Grok STT",
5211
+ "owned_by": "xai",
5212
+ "type": "transcription",
5213
+ "description": "Transcribe audio to text in 25 languages with batch and streaming modes.",
5214
+ "tags": []
5215
+ },
5216
+ {
5217
+ "id": "xai/grok-tts",
5218
+ "name": "Grok TTS",
5219
+ "owned_by": "xai",
5220
+ "type": "speech",
5221
+ "description": "Generate speech with 5 expressive voices, speech tags, and telephony codecs.",
5222
+ "tags": []
5223
+ },
5224
+ {
5225
+ "id": "xai/grok-voice-think-fast-1.0",
5226
+ "name": "Grok Voice Think Fast 1.0",
5227
+ "owned_by": "xai",
5228
+ "type": "realtime",
5229
+ "description": "Build real-time voice applications powered by Grok. Stream audio and text bidirectionally via WebSocket for voice assistants, phone agents, and interactive voice systems.",
5230
+ "tags": []
5231
+ }
5232
+ ];
5233
+
5234
+ // ../../packages/core/src/models-cache.ts
5235
+ async function getAllModels() {
5236
+ return ALL_MODELS;
5237
+ }
5238
+
5239
+ // src/commands/settings.ts
5240
+ async function settingsCommand(options) {
5241
+ await inServerScope(options.server, async () => {
5242
+ await requireActive();
5243
+ const config = await readConfig();
5244
+ log.info(log.fmt.bold("\n--- CLI Settings ---"));
5245
+ const gatewayModels = await getAllModels();
5246
+ const chatModels = gatewayModels.filter((m) => m.type === "language").map(toChatDescriptor);
5247
+ const providers = Array.from(new Set(chatModels.map((m) => m.provider)));
5248
+ const selectedProvider = await p4.select({
5249
+ message: "Select AI Provider for Chat:",
5250
+ initialValue: config.chatProvider || config.embeddingProvider,
5251
+ options: providers.map((p5) => ({ label: p5, value: p5 }))
5252
+ });
5253
+ if (p4.isCancel(selectedProvider)) {
5254
+ log.info("Cancelled.");
5255
+ return;
5256
+ }
5257
+ const availableModels = chatModels.filter(
5258
+ (m) => m.provider === selectedProvider
5259
+ );
5260
+ const selectedModel = await p4.select({
5261
+ message: "Select Chat Model:",
5262
+ initialValue: config.chatModelId || availableModels[0]?.id,
5263
+ options: availableModels.map((m) => ({ label: m.name, value: m.id }))
5264
+ });
5265
+ if (p4.isCancel(selectedModel)) {
5266
+ log.info("Cancelled.");
5267
+ return;
5268
+ }
5269
+ await writeConfig({
5270
+ ...config,
5271
+ chatProvider: selectedProvider,
5272
+ chatModelId: selectedModel
5273
+ });
5274
+ log.success(`Settings saved. Chat model set to ${selectedModel}.`);
5275
+ });
5276
+ }
5277
+
5278
+ // src/index.ts
5279
+ var program = new Command();
5280
+ program.name("larkup").description("Build, index, and serve a RAG pipeline from the terminal.").version("0.1.3");
5281
+ program.command("init [name]").description("Create a new RAG server (workspace project)").action(async (name) => {
5282
+ prompts.intro(log.fmt.bold("larkup init"));
5283
+ await initCommand(name);
5284
+ prompts.outro("Done!");
5285
+ });
5286
+ program.command("servers").alias("list").description("List all servers (\u25CF = active)").action(async () => {
5287
+ await listServersCommand();
5288
+ });
5289
+ program.command("use <serverId>").description("Switch the active server").action(async (serverId) => {
5290
+ await useServerCommand(serverId);
5291
+ });
5292
+ program.command("config").description("Show the active server's configuration + status").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5293
+ await configCommand(options);
5294
+ });
5295
+ program.command("add-doc").description("Add a document to the corpus").option("--file <path>", "Add a document from a file").option("--text <string>", "Add a document from inline text").option("--title <string>", "Document title").option("--url <string>", "Document URL").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5296
+ await addDocCommand(options);
5297
+ });
5298
+ program.command("index").description("Chunk \u2192 embed \u2192 store the corpus").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5299
+ await indexCommand(options);
5300
+ });
5301
+ program.command("generate").description("Emit the deployable RAG server to disk").option("--out <dir>", "Output directory").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5302
+ await generateCommand(options);
5303
+ });
5304
+ program.command("serve").description("Run the generated server locally (foreground)").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5305
+ await serveCommand(options);
5306
+ });
5307
+ program.command("query <question>").description("Retrieve top-k chunks").option("--topK <number>", "Number of results to return").option("--server <id>", "Target a specific server instead of the active one").action(async (question, options) => {
5308
+ await queryCommand(question, options);
5309
+ });
5310
+ program.command("chat").description("Chat with your knowledge base in the terminal").option("--model <string>", "Specify the chat model ID").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5311
+ await chatCommand(options);
5312
+ });
5313
+ program.command("settings").description("Configure CLI settings (e.g., chat models)").option("--server <id>", "Target a specific server instead of the active one").action(async (options) => {
5314
+ await settingsCommand(options);
5315
+ });
5316
+ checkUpdate().then(() => {
5317
+ program.parseAsync(process.argv).catch((err) => {
5318
+ log.error(err instanceof Error ? err.message : String(err));
5319
+ });
3060
5320
  });