Skip to content

Commit 3beadee

Browse files
MrMushrooooomfwang
andauthored
feat(go): add Go model listing endpoint (#24304)
Co-authored-by: Frank <[email protected]>
1 parent dcee1c3 commit 3beadee

21 files changed

Lines changed: 233 additions & 37 deletions

File tree

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import type { APIEvent } from "@solidjs/start/server"
2+
import { getHandler, optionsHandler } from "../../util/modelsHandler"
3+
4+
export async function OPTIONS(_input: APIEvent) {
5+
return optionsHandler()
6+
}
7+
8+
export async function GET(input: APIEvent) {
9+
return getHandler({ modelList: "lite" })
10+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { ZenData } from "@opencode-ai/console-core/model.js"
2+
3+
export async function optionsHandler() {
4+
return new Response(null, {
5+
status: 200,
6+
headers: {
7+
"Access-Control-Allow-Origin": "*",
8+
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
9+
"Access-Control-Allow-Headers": "Content-Type, Authorization",
10+
},
11+
})
12+
}
13+
14+
export async function getHandler(opts: { modelList: "lite" | "full"; disabledModels?: string[] }) {
15+
const zenData = ZenData.list(opts.modelList)
16+
17+
return new Response(
18+
JSON.stringify({
19+
object: "list",
20+
data: Object.entries(zenData.models)
21+
.filter(([id]) => !opts.disabledModels?.includes(id))
22+
.filter(([id]) => !id.startsWith("alpha-"))
23+
.map(([id, _model]) => ({
24+
id,
25+
object: "model",
26+
created: Math.floor(Date.now() / 1000),
27+
owned_by: "opencode",
28+
})),
29+
}),
30+
{
31+
headers: {
32+
"Content-Type": "application/json",
33+
},
34+
},
35+
)
36+
}

packages/console/app/src/routes/zen/v1/models.ts

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,59 +3,29 @@ import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/ind
33
import { KeyTable } from "@opencode-ai/console-core/schema/key.sql.js"
44
import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js"
55
import { ModelTable } from "@opencode-ai/console-core/schema/model.sql.js"
6-
import { ZenData } from "@opencode-ai/console-core/model.js"
6+
import { optionsHandler, getHandler } from "~/routes/zen/util/modelsHandler"
77

88
export async function OPTIONS(_input: APIEvent) {
9-
return new Response(null, {
10-
status: 200,
11-
headers: {
12-
"Access-Control-Allow-Origin": "*",
13-
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
14-
"Access-Control-Allow-Headers": "Content-Type, Authorization",
15-
},
16-
})
9+
return optionsHandler()
1710
}
1811

1912
export async function GET(input: APIEvent) {
20-
const zenData = ZenData.list("full")
21-
const disabledModels = await authenticate()
22-
23-
return new Response(
24-
JSON.stringify({
25-
object: "list",
26-
data: Object.entries(zenData.models)
27-
.filter(([id]) => !disabledModels.includes(id))
28-
.filter(([id]) => !id.startsWith("alpha-"))
29-
.map(([id, _model]) => ({
30-
id,
31-
object: "model",
32-
created: Math.floor(Date.now() / 1000),
33-
owned_by: "opencode",
34-
})),
35-
}),
36-
{
37-
headers: {
38-
"Content-Type": "application/json",
39-
},
40-
},
41-
)
42-
43-
async function authenticate() {
13+
const disabledModels = await (() => {
4414
const apiKey = input.request.headers.get("authorization")?.split(" ")[1]
4515
if (!apiKey) return []
4616

47-
const disabledModels = await Database.use((tx) =>
17+
return Database.use((tx) =>
4818
tx
4919
.select({
5020
model: ModelTable.model,
5121
})
5222
.from(KeyTable)
5323
.innerJoin(WorkspaceTable, eq(WorkspaceTable.id, KeyTable.workspaceID))
54-
.leftJoin(ModelTable, and(eq(ModelTable.workspaceID, KeyTable.workspaceID), isNull(ModelTable.timeDeleted)))
24+
.innerJoin(ModelTable, and(eq(ModelTable.workspaceID, KeyTable.workspaceID), isNull(ModelTable.timeDeleted)))
5525
.where(and(eq(KeyTable.key, apiKey), isNull(KeyTable.timeDeleted)))
5626
.then((rows) => rows.map((row) => row.model)),
5727
)
28+
})()
5829

59-
return disabledModels
60-
}
30+
return getHandler({ modelList: "full", disabledModels })
6131
}

packages/web/src/content/docs/ar/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ OpenCode Go حاليًا في المرحلة التجريبية.
155155

156156
---
157157

158+
### النماذج
159+
160+
يمكنك جلب القائمة الكاملة بالنماذج المتاحة وبياناتها الوصفية من:
161+
162+
```
163+
https://opencode.ai/zen/go/v1/models
164+
```
165+
166+
---
167+
158168
## الخصوصية
159169

160170
صُمّمت هذه الخطة أساسًا للمستخدمين الدوليين، مع استضافة النماذج في الولايات المتحدة والاتحاد الأوروبي وسنغافورة لضمان وصول عالمي مستقر. ويتّبع مزودونا سياسة عدم الاحتفاظ بالبيانات، ولا يستخدمون بياناتك لتدريب النماذج.

packages/web/src/content/docs/bs/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ koristi format `opencode-go/<model-id>`. Na primjer, za Kimi K2.6, koristili bis
169169

170170
---
171171

172+
### Modeli
173+
174+
Pun spisak dostupnih modela i njihovih metapodataka možete preuzeti na:
175+
176+
```
177+
https://opencode.ai/zen/go/v1/models
178+
```
179+
180+
---
181+
172182
## Privatnost
173183

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

packages/web/src/content/docs/da/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ bruge `opencode-go/kimi-k2.6` i din config.
169169

170170
---
171171

172+
### Modeller
173+
174+
Du kan hente den fulde liste over tilgængelige modeller og deres metadata fra:
175+
176+
```
177+
https://opencode.ai/zen/go/v1/models
178+
```
179+
180+
---
181+
172182
## Privatliv
173183

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

packages/web/src/content/docs/de/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,16 @@ Die [Modell-ID](/docs/config/#models) in deiner OpenCode Config verwendet das Fo
157157

158158
---
159159

160+
### Models
161+
162+
Du kannst die vollständige Liste der verfügbaren Modelle und ihrer Metadaten hier abrufen:
163+
164+
```
165+
https://opencode.ai/zen/go/v1/models
166+
```
167+
168+
---
169+
160170
## Datenschutz
161171

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

packages/web/src/content/docs/es/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ usa el formato `opencode-go/<model-id>`. Por ejemplo, para Kimi K2.6, usarías
169169

170170
---
171171

172+
### Modelos
173+
174+
Puedes obtener la lista completa de modelos disponibles y sus metadatos desde:
175+
176+
```
177+
https://opencode.ai/zen/go/v1/models
178+
```
179+
180+
---
181+
172182
## Privacidad
173183

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

packages/web/src/content/docs/fr/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,16 @@ L'[ID de modèle](/docs/config/#models) dans votre configuration OpenCode utilis
155155

156156
---
157157

158+
### Modèles
159+
160+
Vous pouvez récupérer la liste complète des modèles disponibles et leurs métadonnées à partir de :
161+
162+
```
163+
https://opencode.ai/zen/go/v1/models
164+
```
165+
166+
---
167+
158168
## Confidentialité
159169

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

packages/web/src/content/docs/go.mdx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,16 @@ use `opencode-go/kimi-k2.6` in your config.
169169

170170
---
171171

172+
### Models
173+
174+
You can fetch the full list of available models and their metadata from:
175+
176+
```
177+
https://opencode.ai/zen/go/v1/models
178+
```
179+
180+
---
181+
172182
## Privacy
173183

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

0 commit comments

Comments
 (0)