summaryrefslogtreecommitdiffhomepage
path: root/packages/console
diff options
context:
space:
mode:
Diffstat (limited to 'packages/console')
-rw-r--r--packages/console/app/src/routes/zen/go/v1/models.ts10
-rw-r--r--packages/console/app/src/routes/zen/util/modelsHandler.ts36
-rw-r--r--packages/console/app/src/routes/zen/v1/models.ts44
3 files changed, 53 insertions, 37 deletions
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 000000000..85db30688
--- /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 000000000..d924e25c8
--- /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 6b4a878fc..d2fc36e45 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 })
}