diff options
| author | Shoubhit Dash <[email protected]> | 2026-04-16 17:30:14 +0530 |
|---|---|---|
| committer | Shoubhit Dash <[email protected]> | 2026-04-16 17:30:14 +0530 |
| commit | 2e18a603f0ea24154908e748493fd4bfaa74fc00 (patch) | |
| tree | b723e00af2821b213573b16fa199b64babd5f1f5 /packages/console/core/src | |
| parent | 9819eb04614fd607cacb07d754052f1531a82331 (diff) | |
| parent | 7341718f9234b0cf3a8758c87e91d2006b71bff6 (diff) | |
| download | opencode-2e18a603f0ea24154908e748493fd4bfaa74fc00.tar.gz opencode-2e18a603f0ea24154908e748493fd4bfaa74fc00.zip | |
merge dev
Diffstat (limited to 'packages/console/core/src')
| -rw-r--r-- | packages/console/core/src/key.ts | 16 | ||||
| -rw-r--r-- | packages/console/core/src/model.ts | 72 | ||||
| -rw-r--r-- | packages/console/core/src/schema/ip.sql.ts | 10 | ||||
| -rw-r--r-- | packages/console/core/src/util/env.cloudflare.ts | 1 | ||||
| -rw-r--r-- | packages/console/core/src/util/log.ts | 2 |
5 files changed, 84 insertions, 17 deletions
diff --git a/packages/console/core/src/key.ts b/packages/console/core/src/key.ts index 688f19b3d..aef4298c9 100644 --- a/packages/console/core/src/key.ts +++ b/packages/console/core/src/key.ts @@ -24,11 +24,9 @@ export namespace Key { .innerJoin(AuthTable, and(eq(UserTable.accountID, AuthTable.accountID), eq(AuthTable.provider, "email"))) .where( and( - ...[ - eq(KeyTable.workspaceID, Actor.workspace()), - isNull(KeyTable.timeDeleted), - ...(Actor.userRole() === "admin" ? [] : [eq(KeyTable.userID, Actor.userID())]), - ], + eq(KeyTable.workspaceID, Actor.workspace()), + isNull(KeyTable.timeDeleted), + ...(Actor.userRole() === "admin" ? [] : [eq(KeyTable.userID, Actor.userID())]), ), ) .orderBy(sql`${KeyTable.name} DESC`), @@ -84,11 +82,9 @@ export namespace Key { }) .where( and( - ...[ - eq(KeyTable.id, input.id), - eq(KeyTable.workspaceID, Actor.workspace()), - ...(Actor.userRole() === "admin" ? [] : [eq(KeyTable.userID, Actor.userID())]), - ], + eq(KeyTable.id, input.id), + eq(KeyTable.workspaceID, Actor.workspace()), + ...(Actor.userRole() === "admin" ? [] : [eq(KeyTable.userID, Actor.userID())]), ), ), ) diff --git a/packages/console/core/src/model.ts b/packages/console/core/src/model.ts index 3b2439431..3d614d303 100644 --- a/packages/console/core/src/model.ts +++ b/packages/console/core/src/model.ts @@ -26,7 +26,7 @@ export namespace ZenData { allowAnonymous: z.boolean().optional(), byokProvider: z.enum(["openai", "anthropic", "google"]).optional(), stickyProvider: z.enum(["strict", "prefer"]).optional(), - trialProviders: z.array(z.string()).optional(), + trialProvider: z.string().optional(), trialEnded: z.boolean().optional(), fallbackProvider: z.string().optional(), rateLimit: z.number().optional(), @@ -44,8 +44,9 @@ export namespace ZenData { }) const ProviderSchema = z.object({ + displayName: z.string().optional(), api: z.string(), - apiKey: z.string(), + apiKey: z.union([z.string(), z.record(z.string(), z.string())]), format: FormatSchema.optional(), headerMappings: z.record(z.string(), z.string()).optional(), payloadModifier: z.record(z.string(), z.any()).optional(), @@ -54,7 +55,10 @@ export namespace ZenData { }) const ModelsSchema = z.object({ - models: z.record(z.string(), z.union([ModelSchema, z.array(ModelSchema.extend({ formatFilter: FormatSchema }))])), + zenModels: z.record( + z.string(), + z.union([ModelSchema, z.array(ModelSchema.extend({ formatFilter: FormatSchema }))]), + ), liteModels: z.record( z.string(), z.union([ModelSchema, z.array(ModelSchema.extend({ formatFilter: FormatSchema }))]), @@ -99,10 +103,66 @@ export namespace ZenData { Resource.ZEN_MODELS29.value + Resource.ZEN_MODELS30.value, ) - const { models, liteModels, providers } = ModelsSchema.parse(json) + const { zenModels, liteModels, providers } = ModelsSchema.parse(json) + const compositeProviders = Object.fromEntries( + Object.entries(providers).map(([id, provider]) => [ + id, + typeof provider.apiKey === "string" + ? [{ id: id, key: provider.apiKey }] + : Object.entries(provider.apiKey).map(([kid, key]) => ({ + id: `${id}.${kid}`, + key, + })), + ]), + ) return { - models: modelList === "lite" ? liteModels : models, - providers, + providers: Object.fromEntries( + Object.entries(providers).flatMap(([providerId, provider]) => + compositeProviders[providerId].map((p) => [p.id, { ...provider, apiKey: p.key }]), + ), + ), + models: (() => { + const normalize = (model: z.infer<typeof ModelSchema>) => { + const composite = model.providers.find((p) => compositeProviders[p.id].length > 1) + if (!composite) + return { + trialProvider: model.trialProvider ? [model.trialProvider] : undefined, + } + + const weightMulti = compositeProviders[composite.id].length + + return { + trialProvider: (() => { + if (!model.trialProvider) return undefined + if (model.trialProvider === composite.id) return compositeProviders[composite.id].map((p) => p.id) + return [model.trialProvider] + })(), + providers: model.providers.flatMap((p) => + p.id === composite.id + ? compositeProviders[p.id].map((sub) => ({ + ...p, + id: sub.id, + weight: p.weight ?? 1, + })) + : [ + { + ...p, + weight: (p.weight ?? 1) * weightMulti, + }, + ], + ), + } + } + + return Object.fromEntries( + Object.entries(modelList === "lite" ? liteModels : zenModels).map(([modelId, model]) => { + const n = Array.isArray(model) + ? model.map((m) => ({ ...m, ...normalize(m) })) + : { ...model, ...normalize(model) } + return [modelId, n] + }), + ) + })(), } }) } diff --git a/packages/console/core/src/schema/ip.sql.ts b/packages/console/core/src/schema/ip.sql.ts index 97e356024..a840a78c1 100644 --- a/packages/console/core/src/schema/ip.sql.ts +++ b/packages/console/core/src/schema/ip.sql.ts @@ -20,3 +20,13 @@ export const IpRateLimitTable = mysqlTable( }, (table) => [primaryKey({ columns: [table.ip, table.interval] })], ) + +export const KeyRateLimitTable = mysqlTable( + "key_rate_limit", + { + key: varchar("key", { length: 255 }).notNull(), + interval: varchar("interval", { length: 40 }).notNull(), + count: int("count").notNull(), + }, + (table) => [primaryKey({ columns: [table.key, table.interval] })], +) diff --git a/packages/console/core/src/util/env.cloudflare.ts b/packages/console/core/src/util/env.cloudflare.ts index e69de29bb..336ce12bb 100644 --- a/packages/console/core/src/util/env.cloudflare.ts +++ b/packages/console/core/src/util/env.cloudflare.ts @@ -0,0 +1 @@ +export {} diff --git a/packages/console/core/src/util/log.ts b/packages/console/core/src/util/log.ts index 4f2d25c13..ef3ad85c6 100644 --- a/packages/console/core/src/util/log.ts +++ b/packages/console/core/src/util/log.ts @@ -48,7 +48,7 @@ export namespace Log { function use() { try { return ctx.use() - } catch (e) { + } catch { return { tags: {} } } } |
