diff options
Diffstat (limited to 'packages/console')
| -rw-r--r-- | packages/console/app/src/routes/zen/go/v1/models.ts | 10 | ||||
| -rw-r--r-- | packages/console/app/src/routes/zen/util/modelsHandler.ts | 36 | ||||
| -rw-r--r-- | packages/console/app/src/routes/zen/v1/models.ts | 44 |
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 }) } |
