diff options
| author | Frank <[email protected]> | 2025-10-08 00:03:34 -0400 |
|---|---|---|
| committer | Frank <[email protected]> | 2025-10-08 00:03:36 -0400 |
| commit | 99b72eb1ea136ef6569751061d50b6f691718564 (patch) | |
| tree | 98e93be1fe291cb884b5e83817613954c447649e /packages/console/core/src | |
| parent | 22a6849ff8f34ef9d3fab55a295fcfbb766f9d5a (diff) | |
| download | opencode-99b72eb1ea136ef6569751061d50b6f691718564.tar.gz opencode-99b72eb1ea136ef6569751061d50b6f691718564.zip | |
wip: zen
Diffstat (limited to 'packages/console/core/src')
| -rw-r--r-- | packages/console/core/src/identifier.ts | 1 | ||||
| -rw-r--r-- | packages/console/core/src/model.ts | 62 | ||||
| -rw-r--r-- | packages/console/core/src/schema/model.sql.ts | 13 |
3 files changed, 76 insertions, 0 deletions
diff --git a/packages/console/core/src/identifier.ts b/packages/console/core/src/identifier.ts index f8e73852e..98c12a6c6 100644 --- a/packages/console/core/src/identifier.ts +++ b/packages/console/core/src/identifier.ts @@ -6,6 +6,7 @@ export namespace Identifier { account: "acc", billing: "bil", key: "key", + model: "mod", payment: "pay", usage: "usg", user: "usr", diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 028d94655..ae636c4f3 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -1,4 +1,11 @@ import { z } from "zod" +import { eq, and } from "drizzle-orm" +import { Database } from "./drizzle" +import { ModelTable } from "./schema/model.sql" +import { Identifier } from "./identifier" +import { fn } from "./util/fn" +import { Actor } from "./actor" +import { Resource } from "@opencode-ai/console-resource" export namespace ZenModel { const ModelCostSchema = z.object({ @@ -27,4 +34,59 @@ export namespace ZenModel { }) export const ModelsSchema = z.record(z.string(), ModelSchema) + + export const list = fn(z.void(), () => ModelsSchema.parse(JSON.parse(Resource.ZEN_MODELS.value))) +} + +export namespace Model { + export const enable = fn(z.object({ model: z.string() }), ({ model }) => { + const workspaceID = Actor.workspace() + return Database.use((db) => + db.delete(ModelTable).where(and(eq(ModelTable.workspaceID, workspaceID), eq(ModelTable.model, model))), + ) + }) + + export const disable = fn(z.object({ model: z.string() }), ({ model }) => { + return Database.use((db) => + db + .insert(ModelTable) + .values({ + id: Identifier.create("model"), + workspaceID: Actor.workspace(), + model: model, + }) + .onDuplicateKeyUpdate({ + set: { + timeDeleted: null, + }, + }), + ) + }) + + export const listDisabled = fn(z.void(), () => { + return Database.use((db) => + db + .select({ model: ModelTable.model }) + .from(ModelTable) + .where(eq(ModelTable.workspaceID, Actor.workspace())) + .then((rows) => rows.map((row) => row.model)), + ) + }) + + export const isDisabled = fn( + z.object({ + model: z.string(), + }), + ({ model }) => { + return Database.use(async (db) => { + const result = await db + .select() + .from(ModelTable) + .where(and(eq(ModelTable.workspaceID, Actor.workspace()), eq(ModelTable.model, model))) + .limit(1) + + return result.length > 0 + }) + }, + ) } diff --git a/packages/console/core/src/schema/model.sql.ts b/packages/console/core/src/schema/model.sql.ts new file mode 100644 index 000000000..1c032aad2 --- /dev/null +++ b/packages/console/core/src/schema/model.sql.ts @@ -0,0 +1,13 @@ +import { mysqlTable, varchar, uniqueIndex } from "drizzle-orm/mysql-core" +import { timestamps, workspaceColumns } from "../drizzle/types" +import { workspaceIndexes } from "./workspace.sql" + +export const ModelTable = mysqlTable( + "model", + { + ...workspaceColumns, + ...timestamps, + model: varchar("model", { length: 64 }).notNull(), + }, + (table) => [...workspaceIndexes(table), uniqueIndex("model_workspace_model").on(table.workspaceID, table.model)], +) |
