summaryrefslogtreecommitdiffhomepage
path: root/packages/console/app/src
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-12-11 23:41:04 -0500
committerFrank <[email protected]>2025-12-11 23:41:04 -0500
commit57120e69edadb5dd6a03538ee8dfb85a228d5173 (patch)
tree8778c6788bc00a45b78dd94425b47bb9c1f9a8b6 /packages/console/app/src
parent11efda3f5caae86848478cebe479cab5f5fde002 (diff)
downloadopencode-57120e69edadb5dd6a03538ee8dfb85a228d5173.tar.gz
opencode-57120e69edadb5dd6a03538ee8dfb85a228d5173.zip
Zen: sync
Diffstat (limited to 'packages/console/app/src')
-rw-r--r--packages/console/app/src/routes/workspace/[id]/model-section.tsx7
-rw-r--r--packages/console/app/src/routes/zen/util/handler.ts15
-rw-r--r--packages/console/app/src/routes/zen/util/trialLimiter.ts18
3 files changed, 27 insertions, 13 deletions
diff --git a/packages/console/app/src/routes/workspace/[id]/model-section.tsx b/packages/console/app/src/routes/workspace/[id]/model-section.tsx
index 30815336d..e760ccea2 100644
--- a/packages/console/app/src/routes/workspace/[id]/model-section.tsx
+++ b/packages/console/app/src/routes/workspace/[id]/model-section.tsx
@@ -43,9 +43,12 @@ const getModelsInfo = query(async (workspaceID: string) => {
const pA = getPriority(idA)
const pB = getPriority(idB)
if (pA !== pB) return pA - pB
- return modelA.name.localeCompare(modelB.name)
+
+ const modelAName = Array.isArray(modelA) ? modelA[0].name : modelA.name
+ const modelBName = Array.isArray(modelB) ? modelB[0].name : modelB.name
+ return modelAName.localeCompare(modelBName)
})
- .map(([id, model]) => ({ id, name: model.name })),
+ .map(([id, model]) => ({ id, name: Array.isArray(model) ? model[0].name : model.name })),
disabled: await Model.listDisabled(),
}
}, workspaceID)
diff --git a/packages/console/app/src/routes/zen/util/handler.ts b/packages/console/app/src/routes/zen/util/handler.ts
index 7d7767b8d..5e9c877cc 100644
--- a/packages/console/app/src/routes/zen/util/handler.ts
+++ b/packages/console/app/src/routes/zen/util/handler.ts
@@ -57,15 +57,17 @@ export async function handler(
const sessionId = input.request.headers.get("x-opencode-session") ?? ""
const requestId = input.request.headers.get("x-opencode-request") ?? ""
const projectId = input.request.headers.get("x-opencode-project") ?? ""
+ const ocClient = input.request.headers.get("x-opencode-client") ?? ""
logger.metric({
is_tream: isStream,
session: sessionId,
request: requestId,
+ client: ocClient,
})
const zenData = ZenData.list()
const modelInfo = validateModel(zenData, model)
const dataDumper = createDataDumper(sessionId, requestId, projectId)
- const trialLimiter = createTrialLimiter(modelInfo.trial?.limit, ip)
+ const trialLimiter = createTrialLimiter(modelInfo.trial, ip, ocClient)
const isTrial = await trialLimiter?.isTrial()
const rateLimiter = createRateLimiter(modelInfo.id, modelInfo.rateLimit, ip)
await rateLimiter?.check()
@@ -286,11 +288,14 @@ export async function handler(
}
function validateModel(zenData: ZenData, reqModel: string) {
- if (!(reqModel in zenData.models)) {
- throw new ModelError(`Model ${reqModel} not supported`)
- }
+ if (!(reqModel in zenData.models)) throw new ModelError(`Model ${reqModel} not supported`)
+
const modelId = reqModel as keyof typeof zenData.models
- const modelData = zenData.models[modelId]
+ const modelData = Array.isArray(zenData.models[modelId])
+ ? zenData.models[modelId].find((model) => opts.format === model.formatFilter)
+ : zenData.models[modelId]
+
+ if (!modelData) throw new ModelError(`Model ${reqModel} not supported for format ${opts.format}`)
logger.metric({ model: modelId })
diff --git a/packages/console/app/src/routes/zen/util/trialLimiter.ts b/packages/console/app/src/routes/zen/util/trialLimiter.ts
index 15561c9f6..531e5cf0c 100644
--- a/packages/console/app/src/routes/zen/util/trialLimiter.ts
+++ b/packages/console/app/src/routes/zen/util/trialLimiter.ts
@@ -1,12 +1,18 @@
import { Database, eq, sql } from "@opencode-ai/console-core/drizzle/index.js"
import { IpTable } from "@opencode-ai/console-core/schema/ip.sql.js"
import { UsageInfo } from "./provider/provider"
+import { ZenData } from "@opencode-ai/console-core/model.js"
-export function createTrialLimiter(limit: number | undefined, ip: string) {
- if (!limit) return
+export function createTrialLimiter(trial: ZenData.Trial | undefined, ip: string, client: string) {
+ if (!trial) return
if (!ip) return
- let trial: boolean
+ const limit =
+ trial.limits.find((limit) => limit.client === client)?.limit ??
+ trial.limits.find((limit) => limit.client === undefined)?.limit
+ if (!limit) return
+
+ let _isTrial: boolean
return {
isTrial: async () => {
@@ -20,11 +26,11 @@ export function createTrialLimiter(limit: number | undefined, ip: string) {
.then((rows) => rows[0]),
)
- trial = (data?.usage ?? 0) < limit
- return trial
+ _isTrial = (data?.usage ?? 0) < limit
+ return _isTrial
},
track: async (usageInfo: UsageInfo) => {
- if (!trial) return
+ if (!_isTrial) return
const usage =
usageInfo.inputTokens +
usageInfo.outputTokens +