Skip to content

Commit 6c04739

Browse files
committed
wip: zen
1 parent 350df0b commit 6c04739

4 files changed

Lines changed: 16 additions & 13 deletions

File tree

packages/console/app/src/routes/zen/util/handler.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ export async function handler(
9797
const zenData = ZenData.list(opts.modelList)
9898
const modelInfo = validateModel(zenData, model)
9999
const dataDumper = createDataDumper(sessionId, requestId, projectId)
100-
const trialLimiter = createTrialLimiter(modelInfo.trialProvider, ip)
101-
const trialProvider = await trialLimiter?.check()
100+
const trialLimiter = createTrialLimiter(modelInfo.trialProviders, ip)
101+
const trialProviders = await trialLimiter?.check()
102102
const rateLimiter = createRateLimiter(
103103
modelInfo.id,
104104
modelInfo.allowAnonymous,
@@ -120,7 +120,7 @@ export async function handler(
120120
authInfo,
121121
modelInfo,
122122
sessionId,
123-
trialProvider,
123+
trialProviders,
124124
retry,
125125
stickyProvider,
126126
)
@@ -402,7 +402,7 @@ export async function handler(
402402
authInfo: AuthInfo,
403403
modelInfo: ModelInfo,
404404
sessionId: string,
405-
trialProvider: string | undefined,
405+
trialProviders: string[] | undefined,
406406
retry: RetryOptions,
407407
stickyProvider: string | undefined,
408408
) {
@@ -411,15 +411,17 @@ export async function handler(
411411
return modelInfo.providers.find((provider) => provider.id === modelInfo.byokProvider)
412412
}
413413

414-
if (trialProvider) {
415-
return modelInfo.providers.find((provider) => provider.id === trialProvider)
416-
}
417-
418414
if (stickyProvider) {
419415
const provider = modelInfo.providers.find((provider) => provider.id === stickyProvider)
420416
if (provider) return provider
421417
}
422418

419+
if (trialProviders) {
420+
const trialProvider = trialProviders[Math.floor(Math.random() * trialProviders.length)]
421+
const provider = modelInfo.providers.find((provider) => provider.id === trialProvider)
422+
if (provider) return provider
423+
}
424+
423425
if (retry.retryCount !== MAX_FAILOVER_RETRIES) {
424426
const providers = modelInfo.providers
425427
.filter((provider) => !provider.disabled)

packages/console/app/src/routes/zen/util/provider/anthropic.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,8 @@ export const anthropicHelper: ProviderHelper = ({ reqModel, providerModel }) =>
175175
outputTokens: usage.output_tokens ?? 0,
176176
reasoningTokens: undefined,
177177
cacheReadTokens: usage.cache_read_input_tokens ?? undefined,
178-
cacheWrite5mTokens: usage.cache_creation?.ephemeral_5m_input_tokens ?? undefined,
178+
cacheWrite5mTokens:
179+
usage.cache_creation?.ephemeral_5m_input_tokens ?? usage.cache_creation_input_tokens ?? undefined,
179180
cacheWrite1hTokens: usage.cache_creation?.ephemeral_1h_input_tokens ?? undefined,
180181
}),
181182
}

packages/console/app/src/routes/zen/util/trialLimiter.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { IpTable } from "@opencode-ai/console-core/schema/ip.sql.js"
33
import { UsageInfo } from "./provider/provider"
44
import { Subscription } from "@opencode-ai/console-core/subscription.js"
55

6-
export function createTrialLimiter(trialProvider: string | undefined, ip: string) {
7-
if (!trialProvider) return
6+
export function createTrialLimiter(trialProviders: string[] | undefined, ip: string) {
7+
if (!trialProviders) return
88
if (!ip) return
99

1010
const limit = Subscription.getFreeLimits().promoTokens
@@ -24,7 +24,7 @@ export function createTrialLimiter(trialProvider: string | undefined, ip: string
2424
)
2525

2626
_isTrial = (data?.usage ?? 0) < limit
27-
return _isTrial ? trialProvider : undefined
27+
return _isTrial ? trialProviders : undefined
2828
},
2929
track: async (usageInfo: UsageInfo) => {
3030
if (!_isTrial) return

packages/console/core/src/model.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export namespace ZenData {
2626
allowAnonymous: z.boolean().optional(),
2727
byokProvider: z.enum(["openai", "anthropic", "google"]).optional(),
2828
stickyProvider: z.enum(["strict", "prefer"]).optional(),
29-
trialProvider: z.string().optional(),
29+
trialProviders: z.array(z.string()).optional(),
3030
fallbackProvider: z.string().optional(),
3131
rateLimit: z.number().optional(),
3232
providers: z.array(

0 commit comments

Comments
 (0)