feat(go): add Go model listing endpoint (#24304)

Co-authored-by: Frank <frank@anoma.ly>
This commit is contained in:
Jack
2026-04-27 02:46:49 +08:00
committed by GitHub
parent dcee1c3642
commit 3beadeebff
21 changed files with 233 additions and 37 deletions

View File

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

View File

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

View File

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

View File

@@ -155,6 +155,16 @@ OpenCode Go حاليًا في المرحلة التجريبية.
---
### النماذج
يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من:
```
https://opencode.ai/zen/go/v1/models
```
---
## الخصوصية
صُمّمت هذه الخطة أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. ويتّبع مزودونا سياسة عدم الاحتفاظ بالبيانات، ولا يستخدمون بياناتك لتدريب النماذج.

View File

@@ -169,6 +169,16 @@ koristi format `opencode-go/<model-id>`. 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.

View File

@@ -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.

View File

@@ -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.

View File

@@ -169,6 +169,16 @@ usa el formato `opencode-go/<model-id>`. 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.

View File

@@ -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 lEU et à Singapore afin dassurer un accès mondial stable. Nos fournisseurs appliquent une politique de rétention zéro et nutilisent pas vos données pour lentraînement des modèles.

View File

@@ -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.

View File

@@ -167,6 +167,16 @@ utilizza il formato `opencode-go/<model-id>`. 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, nellEU e a Singapore per un accesso globale stabile. I nostri provider seguono una politica di zero-retention e non utilizzano i tuoi dati per laddestramento dei modelli.

View File

@@ -155,6 +155,16 @@ OpenCode設定の[model id](/docs/config/#models)は、`opencode-go/<model-id>`
---
### モデル
利用可能なモデルとそのメタデータの完全な一覧は、次から取得できます。
```
https://opencode.ai/zen/go/v1/models
```
---
## プライバシー
このプランは主に海外ユーザー向けに設計されており、安定したグローバルアクセスのため、モデルは US、EU、Singapore でホストされています。各プロバイダーはデータを保持しないポリシーに従っており、お客様のデータをモデルのトレーニングに使用することはありません。

View File

@@ -155,6 +155,16 @@ OpenCode config의 [model id](/docs/config/#models)는 `opencode-go/<model-id>`
---
### 모델
사용 가능한 전체 모델 목록과 메타데이터는 다음에서 가져올 수 있습니다.
```
https://opencode.ai/zen/go/v1/models
```
---
## 개인정보 보호
이 플랜은 안정적인 전 세계 액세스를 위해 모델을 미국, EU, 싱가포르에 호스팅하며, 주로 해외 사용자를 위해 설계되었습니다. 저희 제공자는 zero-retention 정책을 따르며, 고객 데이터를 모델 학습에 사용하지 않습니다.

View File

@@ -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.

View File

@@ -161,6 +161,16 @@ używa formatu `opencode-go/<model-id>`. 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.

View File

@@ -169,6 +169,16 @@ usa o formato `opencode-go/<model-id>`. 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.

View File

@@ -169,6 +169,16 @@ OpenCode Go включает следующие лимиты:
---
### Модели
Вы можете получить полный список доступных моделей и их метаданных по адресу:
```
https://opencode.ai/zen/go/v1/models
```
---
## Конфиденциальность
Этот план разработан в первую очередь для международных пользователей: модели размещены в US, EU и Singapore, чтобы обеспечить стабильный доступ по всему миру. Наши провайдеры придерживаются политики zero-retention и не используют ваши данные для обучения моделей.

View File

@@ -155,6 +155,16 @@ OpenCode Go มีขีดจำกัดดังต่อไปนี้:
---
### Models
คุณสามารถดึงรายการโมเดลทั้งหมดที่พร้อมใช้งานและ metadata ของมันได้จาก:
```
https://opencode.ai/zen/go/v1/models
```
---
## Privacy
แพลนนี้ออกแบบมาสำหรับผู้ใช้ทั่วโลกเป็นหลัก โดยโฮสต์โมเดลไว้ใน US, EU และ Singapore เพื่อให้เข้าถึงได้อย่างเสถียรจากทั่วโลก ผู้ให้บริการของเราปฏิบัติตามนโยบาย zero-retention และไม่นำข้อมูลของคุณไปใช้ในการฝึกโมเดล

View File

@@ -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.

View File

@@ -155,6 +155,16 @@ OpenCode Go 包含以下限制:
---
### 模型
你可以从以下地址获取可用模型及其元数据的完整列表:
```
https://opencode.ai/zen/go/v1/models
```
---
## 隐私保护
该方案主要面向国际用户,模型托管在 US、EU 和 Singapore以提供稳定的全球访问。我们的提供商遵循零保留政策不会将您的数据用于模型训练。

View File

@@ -155,6 +155,16 @@ OpenCode Go 包含以下限制:
---
### 模型
你可以從以下位置取得所有可用模型及其中繼資料的完整清單:
```
https://opencode.ai/zen/go/v1/models
```
---
## 隱私權
此方案主要為國際使用者設計,模型部署於 US、EU 與 Singapore以提供穩定的全球存取體驗。我們的供應商遵循零保留政策不會將你的資料用於模型訓練。