diff --git a/packages/console/app/src/routes/zen/go/v1/models.ts b/packages/console/app/src/routes/zen/go/v1/models.ts new file mode 100644 index 0000000000..85db306880 --- /dev/null +++ b/packages/console/app/src/routes/zen/go/v1/models.ts @@ -0,0 +1,10 @@ +import type { APIEvent } from "@solidjs/start/server" +import { getHandler, optionsHandler } from "../../util/modelsHandler" + +export async function OPTIONS(_input: APIEvent) { + return optionsHandler() +} + +export async function GET(input: APIEvent) { + return getHandler({ modelList: "lite" }) +} diff --git a/packages/console/app/src/routes/zen/util/modelsHandler.ts b/packages/console/app/src/routes/zen/util/modelsHandler.ts new file mode 100644 index 0000000000..d924e25c80 --- /dev/null +++ b/packages/console/app/src/routes/zen/util/modelsHandler.ts @@ -0,0 +1,36 @@ +import { ZenData } from "@opencode-ai/console-core/model.js" + +export async function optionsHandler() { + return new Response(null, { + status: 200, + headers: { + "Access-Control-Allow-Origin": "*", + "Access-Control-Allow-Methods": "GET, POST, OPTIONS", + "Access-Control-Allow-Headers": "Content-Type, Authorization", + }, + }) +} + +export async function getHandler(opts: { modelList: "lite" | "full"; disabledModels?: string[] }) { + const zenData = ZenData.list(opts.modelList) + + return new Response( + JSON.stringify({ + object: "list", + data: Object.entries(zenData.models) + .filter(([id]) => !opts.disabledModels?.includes(id)) + .filter(([id]) => !id.startsWith("alpha-")) + .map(([id, _model]) => ({ + id, + object: "model", + created: Math.floor(Date.now() / 1000), + owned_by: "opencode", + })), + }), + { + headers: { + "Content-Type": "application/json", + }, + }, + ) +} diff --git a/packages/console/app/src/routes/zen/v1/models.ts b/packages/console/app/src/routes/zen/v1/models.ts index 6b4a878fc7..d2fc36e459 100644 --- a/packages/console/app/src/routes/zen/v1/models.ts +++ b/packages/console/app/src/routes/zen/v1/models.ts @@ -3,59 +3,29 @@ import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/ind import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js" -import { ZenData } from "@opencode-ai/console-core/model.js" +import { optionsHandler, getHandler } from "~/routes/zen/util/modelsHandler" export async function OPTIONS(_input: APIEvent) { - return new Response(null, { - status: 200, - headers: { - "Access-Control-Allow-Origin": "*", - "Access-Control-Allow-Methods": "GET, POST, OPTIONS", - "Access-Control-Allow-Headers": "Content-Type, Authorization", - }, - }) + return optionsHandler() } export async function GET(input: APIEvent) { - const zenData = ZenData.list("full") - const disabledModels = await authenticate() - - return new Response( - JSON.stringify({ - object: "list", - data: Object.entries(zenData.models) - .filter(([id]) => !disabledModels.includes(id)) - .filter(([id]) => !id.startsWith("alpha-")) - .map(([id, _model]) => ({ - id, - object: "model", - created: Math.floor(Date.now() / 1000), - owned_by: "opencode", - })), - }), - { - headers: { - "Content-Type": "application/json", - }, - }, - ) - - async function authenticate() { + const disabledModels = await (() => { const apiKey = input.request.headers.get("authorization")?.split(" ")[1] if (!apiKey) return [] - const disabledModels = await Database.use((tx) => + return Database.use((tx) => tx .select({ model: ModelTable.model, }) .from(KeyTable) .innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID)) - .leftJoin(ModelTable, and(eq(ModelTable.workspaceID, KeyTable.workspaceID), isNull(ModelTable.timeDeleted))) + .innerJoin(ModelTable, and(eq(ModelTable.workspaceID, KeyTable.workspaceID), isNull(ModelTable.timeDeleted))) .where(and(eq(KeyTable.key, apiKey), isNull(KeyTable.timeDeleted))) .then((rows) => rows.map((row) => row.model)), ) + })() - return disabledModels - } + return getHandler({ modelList: "full", disabledModels }) } diff --git a/packages/web/src/content/docs/ar/go.mdx b/packages/web/src/content/docs/ar/go.mdx index 9e5d52c60b..f760be36bf 100644 --- a/packages/web/src/content/docs/ar/go.mdx +++ b/packages/web/src/content/docs/ar/go.mdx @@ -155,6 +155,16 @@ OpenCode Go حاليًا في المرحلة التجريبية. --- +### النماذج + +يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## الخصوصية صُمّمت هذه الخطة أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. ويتّبع مزودونا سياسة عدم الاحتفاظ بالبيانات، ولا يستخدمون بياناتك لتدريب النماذج. diff --git a/packages/web/src/content/docs/bs/go.mdx b/packages/web/src/content/docs/bs/go.mdx index 86418c335b..7977725ac7 100644 --- a/packages/web/src/content/docs/bs/go.mdx +++ b/packages/web/src/content/docs/bs/go.mdx @@ -169,6 +169,16 @@ koristi format `opencode-go/`. Na primjer, za Kimi K2.6, koristili bis --- +### Modeli + +Pun spisak dostupnih modela i njihovih metapodataka možete preuzeti na: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privatnost Plan je prvenstveno namijenjen međunarodnim korisnicima, a modeli su smješteni u US, EU i Singaporeu radi stabilnog globalnog pristupa. Naši pružaoci usluga primjenjuju politiku nultog zadržavanja podataka i ne koriste vaše podatke za treniranje modela. diff --git a/packages/web/src/content/docs/da/go.mdx b/packages/web/src/content/docs/da/go.mdx index 70d9e9c8f7..123e23c41d 100644 --- a/packages/web/src/content/docs/da/go.mdx +++ b/packages/web/src/content/docs/da/go.mdx @@ -169,6 +169,16 @@ bruge `opencode-go/kimi-k2.6` i din config. --- +### Modeller + +Du kan hente den fulde liste over tilgængelige modeller og deres metadata fra: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privatliv Planen er primært designet til internationale brugere med modeller hostet i US, EU og Singapore for stabil global adgang. Vores udbydere følger en zero-retention-policy og bruger ikke dine data til modeltræning. diff --git a/packages/web/src/content/docs/de/go.mdx b/packages/web/src/content/docs/de/go.mdx index 7bc9f3e279..fc49b9a71d 100644 --- a/packages/web/src/content/docs/de/go.mdx +++ b/packages/web/src/content/docs/de/go.mdx @@ -157,6 +157,16 @@ Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Fo --- +### Models + +Du kannst die vollständige Liste der verfügbaren Modelle und ihrer Metadaten hier abrufen: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Datenschutz Der Plan ist in erster Linie für internationale Nutzer konzipiert, mit in US, EU und Singapore gehosteten Modellen für einen stabilen weltweiten Zugriff. Unsere Anbieter befolgen eine Zero-Retention-Richtlinie und verwenden Ihre Daten nicht für das Modelltraining. diff --git a/packages/web/src/content/docs/es/go.mdx b/packages/web/src/content/docs/es/go.mdx index e346ba2e86..55068577b6 100644 --- a/packages/web/src/content/docs/es/go.mdx +++ b/packages/web/src/content/docs/es/go.mdx @@ -169,6 +169,16 @@ usa el formato `opencode-go/`. Por ejemplo, para Kimi K2.6, usarías --- +### Modelos + +Puedes obtener la lista completa de modelos disponibles y sus metadatos desde: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privacidad El plan está diseñado principalmente para usuarios internacionales, con modelos alojados en US, EU y Singapore para ofrecer un acceso global estable. Nuestros proveedores siguen una política de retención cero y no utilizan tus datos para el entrenamiento de modelos. diff --git a/packages/web/src/content/docs/fr/go.mdx b/packages/web/src/content/docs/fr/go.mdx index 219a17ebfe..8ab2d04df6 100644 --- a/packages/web/src/content/docs/fr/go.mdx +++ b/packages/web/src/content/docs/fr/go.mdx @@ -155,6 +155,16 @@ L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilis --- +### Modèles + +Vous pouvez récupérer la liste complète des modèles disponibles et leurs métadonnées à partir de : + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Confidentialité Cette offre est conçue avant tout pour les utilisateurs internationaux, avec des modèles hébergés aux US, dans l’EU et à Singapore afin d’assurer un accès mondial stable. Nos fournisseurs appliquent une politique de rétention zéro et n’utilisent pas vos données pour l’entraînement des modèles. diff --git a/packages/web/src/content/docs/go.mdx b/packages/web/src/content/docs/go.mdx index fca9337f4c..b12d29c48c 100644 --- a/packages/web/src/content/docs/go.mdx +++ b/packages/web/src/content/docs/go.mdx @@ -169,6 +169,16 @@ use `opencode-go/kimi-k2.6` in your config. --- +### Models + +You can fetch the full list of available models and their metadata from: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privacy The plan is designed primarily for international users, with models hosted in the US, EU, and Singapore for stable global access. Our providers follow a zero-retention policy and do not use your data for model training. diff --git a/packages/web/src/content/docs/it/go.mdx b/packages/web/src/content/docs/it/go.mdx index 023ee053aa..7c31325b14 100644 --- a/packages/web/src/content/docs/it/go.mdx +++ b/packages/web/src/content/docs/it/go.mdx @@ -167,6 +167,16 @@ utilizza il formato `opencode-go/`. Ad esempio, per Kimi K2.6, userest --- +### Modelli + +Puoi recuperare l'elenco completo dei modelli disponibili e i relativi metadati da: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privacy Il piano è pensato principalmente per gli utenti internazionali, con modelli ospitati negli US, nell’EU e a Singapore per un accesso globale stabile. I nostri provider seguono una politica di zero-retention e non utilizzano i tuoi dati per l’addestramento dei modelli. diff --git a/packages/web/src/content/docs/ja/go.mdx b/packages/web/src/content/docs/ja/go.mdx index 207a47dd93..ddfbcd93ec 100644 --- a/packages/web/src/content/docs/ja/go.mdx +++ b/packages/web/src/content/docs/ja/go.mdx @@ -155,6 +155,16 @@ OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/` --- +### モデル + +利用可能なモデルとそのメタデータの完全な一覧は、次から取得できます。 + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## プライバシー このプランは主に海外ユーザー向けに設計されており、安定したグローバルアクセスのため、モデルは US、EU、Singapore でホストされています。各プロバイダーはデータを保持しないポリシーに従っており、お客様のデータをモデルのトレーニングに使用することはありません。 diff --git a/packages/web/src/content/docs/ko/go.mdx b/packages/web/src/content/docs/ko/go.mdx index e9d1172326..23463b61a7 100644 --- a/packages/web/src/content/docs/ko/go.mdx +++ b/packages/web/src/content/docs/ko/go.mdx @@ -155,6 +155,16 @@ OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/` --- +### 모델 + +사용 가능한 전체 모델 목록과 메타데이터는 다음에서 가져올 수 있습니다. + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## 개인정보 보호 이 플랜은 안정적인 전 세계 액세스를 위해 모델을 미국, EU, 싱가포르에 호스팅하며, 주로 해외 사용자를 위해 설계되었습니다. 저희 제공자는 zero-retention 정책을 따르며, 고객 데이터를 모델 학습에 사용하지 않습니다. diff --git a/packages/web/src/content/docs/nb/go.mdx b/packages/web/src/content/docs/nb/go.mdx index 9191b94a31..9caf399904 100644 --- a/packages/web/src/content/docs/nb/go.mdx +++ b/packages/web/src/content/docs/nb/go.mdx @@ -169,6 +169,16 @@ bruke `opencode-go/kimi-k2.6` i konfigurasjonen din. --- +### Modeller + +Du kan hente hele listen over tilgjengelige modeller og metadataene deres fra: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Personvern Planen er primært utformet for internasjonale brukere, med modeller hostet i US, EU og Singapore for stabil global tilgang. Våre leverandører følger en zero-retention-policy og bruker ikke dataene dine til modelltrening. diff --git a/packages/web/src/content/docs/pl/go.mdx b/packages/web/src/content/docs/pl/go.mdx index 00771c0244..e9cf4f7a5d 100644 --- a/packages/web/src/content/docs/pl/go.mdx +++ b/packages/web/src/content/docs/pl/go.mdx @@ -161,6 +161,16 @@ używa formatu `opencode-go/`. Na przykład dla Kimi K2.6 należy uży --- +### Modele + +Pełną listę dostępnych modeli i ich metadane możesz pobrać z: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Prywatność Plan został zaprojektowany przede wszystkim z myślą o użytkownikach międzynarodowych, a modele są hostowane w US, EU i Singapore, aby zapewnić stabilny dostęp na całym świecie. Nasi dostawcy stosują politykę zerowej retencji i nie wykorzystują Twoich danych do trenowania modeli. diff --git a/packages/web/src/content/docs/pt-br/go.mdx b/packages/web/src/content/docs/pt-br/go.mdx index 9fbdd69f3c..7e3d3f9a21 100644 --- a/packages/web/src/content/docs/pt-br/go.mdx +++ b/packages/web/src/content/docs/pt-br/go.mdx @@ -169,6 +169,16 @@ usa o formato `opencode-go/`. Por exemplo, para o Kimi K2.6, você usa --- +### Modelos + +Você pode buscar a lista completa de modelos disponíveis e seus metadados em: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privacidade O plano foi projetado principalmente para usuários internacionais, com modelos hospedados em US, EU e Singapore para garantir acesso global estável. Nossos provedores seguem uma política de retenção zero e não usam seus dados para treinamento de modelos. diff --git a/packages/web/src/content/docs/ru/go.mdx b/packages/web/src/content/docs/ru/go.mdx index e91bc331d3..9ff1ae1410 100644 --- a/packages/web/src/content/docs/ru/go.mdx +++ b/packages/web/src/content/docs/ru/go.mdx @@ -169,6 +169,16 @@ OpenCode Go включает следующие лимиты: --- +### Модели + +Вы можете получить полный список доступных моделей и их метаданных по адресу: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Конфиденциальность Этот план разработан в первую очередь для международных пользователей: модели размещены в US, EU и Singapore, чтобы обеспечить стабильный доступ по всему миру. Наши провайдеры придерживаются политики zero-retention и не используют ваши данные для обучения моделей. diff --git a/packages/web/src/content/docs/th/go.mdx b/packages/web/src/content/docs/th/go.mdx index 0fb7020f3a..9a5d4c634f 100644 --- a/packages/web/src/content/docs/th/go.mdx +++ b/packages/web/src/content/docs/th/go.mdx @@ -155,6 +155,16 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้: --- +### Models + +คุณสามารถดึงรายการโมเดลทั้งหมดที่พร้อมใช้งานและ metadata ของมันได้จาก: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Privacy แพลนนี้ออกแบบมาสำหรับผู้ใช้ทั่วโลกเป็นหลัก โดยโฮสต์โมเดลไว้ใน US, EU และ Singapore เพื่อให้เข้าถึงได้อย่างเสถียรจากทั่วโลก ผู้ให้บริการของเราปฏิบัติตามนโยบาย zero-retention และไม่นำข้อมูลของคุณไปใช้ในการฝึกโมเดล diff --git a/packages/web/src/content/docs/tr/go.mdx b/packages/web/src/content/docs/tr/go.mdx index 37c5268b41..ab488eb257 100644 --- a/packages/web/src/content/docs/tr/go.mdx +++ b/packages/web/src/content/docs/tr/go.mdx @@ -155,6 +155,16 @@ OpenCode yapılandırmanızdaki [model id](/docs/config/#models) formatı `openc --- +### Modeller + +Mevcut modellerin tam listesini ve metadata'larını şuradan alabilirsiniz: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## Gizlilik Plan, öncelikle uluslararası kullanıcılar için tasarlanmıştır; dünya genelinde istikrarlı erişim sağlamak için modeller US, EU ve Singapore'da barındırılır. Sağlayıcılarımız sıfır veri saklama politikası uygular ve verilerinizi model eğitimi için kullanmaz. diff --git a/packages/web/src/content/docs/zh-cn/go.mdx b/packages/web/src/content/docs/zh-cn/go.mdx index c5d4a381a1..10ec977785 100644 --- a/packages/web/src/content/docs/zh-cn/go.mdx +++ b/packages/web/src/content/docs/zh-cn/go.mdx @@ -155,6 +155,16 @@ OpenCode Go 包含以下限制: --- +### 模型 + +你可以从以下地址获取可用模型及其元数据的完整列表: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## 隐私保护 该方案主要面向国际用户,模型托管在 US、EU 和 Singapore,以提供稳定的全球访问。我们的提供商遵循零保留政策,不会将您的数据用于模型训练。 diff --git a/packages/web/src/content/docs/zh-tw/go.mdx b/packages/web/src/content/docs/zh-tw/go.mdx index 290bdac367..9e460b9678 100644 --- a/packages/web/src/content/docs/zh-tw/go.mdx +++ b/packages/web/src/content/docs/zh-tw/go.mdx @@ -155,6 +155,16 @@ OpenCode Go 包含以下限制: --- +### 模型 + +你可以從以下位置取得所有可用模型及其中繼資料的完整清單: + +``` +https://opencode.ai/zen/go/v1/models +``` + +--- + ## 隱私權 此方案主要為國際使用者設計,模型部署於 US、EU 與 Singapore,以提供穩定的全球存取體驗。我們的供應商遵循零保留政策,不會將你的資料用於模型訓練。