@@ -39,7 +39,6 @@ import { openaiHelper } from "./provider/openai"
3939import { oaCompatHelper } from "./provider/openai-compatible"
4040import { createRateLimiter as createIpRateLimiter } from "./ipRateLimiter"
4141import { createRateLimiter as createKeyRateLimiter } from "./keyRateLimiter"
42- import { createDataDumper } from "./dataDumper"
4342import { createTrialLimiter } from "./trialLimiter"
4443import { createStickyTracker } from "./stickyProviderTracker"
4544import { LiteData } from "@opencode-ai/console-core/lite.js"
@@ -103,7 +102,6 @@ export async function handler(
103102 const zenApiKey = rawZenApiKey === "public" ? undefined : rawZenApiKey
104103 const sessionId = input . request . headers . get ( "x-opencode-session" ) ?? ""
105104 const requestId = input . request . headers . get ( "x-opencode-request" ) ?? ""
106- const projectId = input . request . headers . get ( "x-opencode-project" ) ?? ""
107105 const ocClient = input . request . headers . get ( "x-opencode-client" ) ?? ""
108106 const userAgent = input . request . headers . get ( "user-agent" ) ?? ""
109107 logger . metric ( {
@@ -116,16 +114,16 @@ export async function handler(
116114 } )
117115 const zenData = ZenData . list ( opts . modelList )
118116 const modelInfo = validateModel ( zenData , model )
119- const dataDumper = createDataDumper ( sessionId , requestId , projectId )
120117 const trialLimiter = createTrialLimiter ( modelInfo . trialProvider , ip )
121118 const trialProviders = await trialLimiter ?. check ( )
122119 const rateLimiter = modelInfo . allowAnonymous
123120 ? createIpRateLimiter ( modelInfo . id , modelInfo . rateLimit , ip , input . request )
124121 : createKeyRateLimiter ( modelInfo . id , modelInfo . rateLimit , zenApiKey , input . request )
125122 await rateLimiter ?. check ( )
126- const stickyTracker = createStickyTracker ( modelInfo . id , modelInfo . stickyProvider , sessionId )
127- const stickyProvider = await stickyTracker ?. get ( )
128123 const authInfo = await authenticate ( modelInfo , zenApiKey )
124+ const stickyId = sessionId ? sessionId : ( authInfo ?. workspaceID ?? ip )
125+ const stickyTracker = createStickyTracker ( modelInfo . id , modelInfo . stickyProvider , stickyId )
126+ const stickyProvider = await stickyTracker ?. get ( )
129127 const billingSource = validateBilling ( authInfo , modelInfo )
130128 logger . metric ( { source : billingSource } )
131129 const modelTpmLimiter = createModelTpmLimiter ( modelInfo . providers )
@@ -139,8 +137,7 @@ export async function handler(
139137 zenData ,
140138 authInfo ,
141139 modelInfo ,
142- ip ,
143- sessionId ,
140+ stickyId ,
144141 trialProviders ,
145142 retry ,
146143 stickyProvider ,
@@ -167,13 +164,8 @@ export async function handler(
167164 if ( Array . isArray ( v ) ) return [ [ k , v ] ]
168165 if ( typeof v === "object" ) return [ [ k , replacer ( v ) ] ]
169166 if ( typeof v === "string" ) {
170- if ( v === "$ip" ) return [ [ k , ip ] ]
171167 if ( v === "$workspace" ) return authInfo ?. workspaceID ? [ [ k , authInfo ?. workspaceID ] ] : [ ]
172- if ( v === "$session" ) return sessionId ? [ [ k , sessionId ] ] : [ ]
173- if ( v === "$user" ) {
174- const user = sessionId ?? authInfo ?. workspaceID ?? ip
175- return user ? [ [ k , user ] ] : [ ]
176- }
168+ if ( v === "$user" ) return stickyId ? [ [ k , stickyId ] ] : [ ]
177169 if ( v . startsWith ( "$header." ) ) {
178170 const headerValue = input . request . headers . get ( v . slice ( 8 ) )
179171 return headerValue ? [ [ k , headerValue ] ] : [ ]
@@ -192,7 +184,7 @@ export async function handler(
192184 method : "POST" ,
193185 headers : ( ( ) => {
194186 const headers = new Headers ( input . request . headers )
195- providerInfo . modifyHeaders ( headers , body , providerInfo . apiKey )
187+ providerInfo . modifyHeaders ( headers , providerInfo . apiKey , stickyId )
196188 Object . entries ( providerInfo . headerMappings ?? { } ) . forEach ( ( [ k , v ] ) => {
197189 headers . set ( k , headers . get ( v ) ! )
198190 } )
@@ -237,10 +229,6 @@ export async function handler(
237229
238230 const { providerInfo, reqBody, res, startTimestamp } = await retriableRequest ( )
239231
240- // Store model request
241- dataDumper ?. provideModel ( providerInfo . storeModel )
242- dataDumper ?. provideRequest ( reqBody )
243-
244232 // Store sticky provider
245233 if ( res . status === 200 ) await stickyTracker ?. set ( providerInfo . id )
246234
@@ -281,8 +269,6 @@ export async function handler(
281269 const body = JSON . stringify ( responseConverter ( json ) )
282270 logger . metric ( { response_length : body . length } )
283271 logger . debug ( "RESPONSE: " + body )
284- dataDumper ?. provideResponse ( body )
285- dataDumper ?. flush ( )
286272 return new Response ( body , {
287273 status : resStatus ,
288274 statusText : res . statusText ,
@@ -313,7 +299,6 @@ export async function handler(
313299 response_length : responseLength ,
314300 "timestamp.last_byte" : timestampLastByte ,
315301 } )
316- dataDumper ?. flush ( )
317302 await rateLimiter ?. track ( )
318303 const usage = usageParser . retrieve ( )
319304 if ( usage ) {
@@ -351,7 +336,6 @@ export async function handler(
351336
352337 responseLength += value . length
353338 buffer += decoder . decode ( value , { stream : true } )
354- dataDumper ?. provideStream ( buffer )
355339
356340 const parts = buffer . split ( providerInfo . streamSeparator )
357341 buffer = parts . pop ( ) ?? ""
@@ -490,8 +474,7 @@ export async function handler(
490474 zenData : ZenData ,
491475 authInfo : AuthInfo ,
492476 modelInfo : ModelInfo ,
493- ip : string ,
494- sessionId : string ,
477+ stickyId : string ,
495478 trialProviders : string [ ] | undefined ,
496479 retry : RetryOptions ,
497480 stickyProvider : string | undefined ,
@@ -541,11 +524,10 @@ export async function handler(
541524 . flatMap ( ( provider ) => Array < typeof provider > ( provider . weight ) . fill ( provider ) )
542525
543526 // Use the last 4 characters of session ID to select a provider
544- const identifier = sessionId . length ? sessionId : ip
545527 let h = 0
546- const l = identifier . length
528+ const l = stickyId . length
547529 for ( let i = l - 4 ; i < l ; i ++ ) {
548- h = ( h * 31 + identifier . charCodeAt ( i ) ) | 0 // 32-bit int
530+ h = ( h * 31 + stickyId . charCodeAt ( i ) ) | 0 // 32-bit int
549531 }
550532 const index = ( h >>> 0 ) % providers . length // make unsigned + range 0..length-1
551533 const provider = providers [ index || 0 ]
0 commit comments