Skip to content

Commit 054f4be

Browse files
committed
zen: add safety identifier
1 parent e3e1e9a commit 054f4be

5 files changed

Lines changed: 33 additions & 26 deletions

File tree

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

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -139,19 +139,16 @@ export async function handler(
139139
const startTimestamp = Date.now()
140140
const reqUrl = providerInfo.modifyUrl(providerInfo.api, isStream)
141141
const reqBody = JSON.stringify(
142-
providerInfo.modifyBody(
143-
{
144-
...createBodyConverter(opts.format, providerInfo.format)(body),
145-
model: providerInfo.model,
146-
...(providerInfo.payloadModifier ?? {}),
147-
...Object.fromEntries(
148-
Object.entries(providerInfo.payloadMappings ?? {})
149-
.map(([k, v]) => [k, input.request.headers.get(v)])
150-
.filter(([_k, v]) => !!v),
151-
),
152-
},
153-
authInfo?.workspaceID,
154-
),
142+
providerInfo.modifyBody({
143+
...createBodyConverter(opts.format, providerInfo.format)(body),
144+
model: providerInfo.model,
145+
...(providerInfo.payloadModifier ?? {}),
146+
...Object.fromEntries(
147+
Object.entries(providerInfo.payloadMappings ?? {})
148+
.map(([k, v]) => [k, input.request.headers.get(v)])
149+
.filter(([_k, v]) => !!v),
150+
),
151+
}),
155152
)
156153
logger.debug("REQUEST URL: " + reqUrl)
157154
logger.debug("REQUEST: " + reqBody.substring(0, 300) + "...")
@@ -470,15 +467,17 @@ export async function handler(
470467
...(() => {
471468
const providerProps = zenData.providers[modelProvider.id]
472469
const format = providerProps.format
473-
const providerModel = modelProvider.model
474-
if (format === "anthropic") return anthropicHelper({ reqModel, providerModel })
475-
if (format === "google") return googleHelper({ reqModel, providerModel })
476-
if (format === "openai") return openaiHelper({ reqModel, providerModel })
477-
return oaCompatHelper({
470+
const opts = {
478471
reqModel,
479-
providerModel,
472+
providerModel: modelProvider.model,
480473
adjustCacheUsage: providerProps.adjustCacheUsage,
481-
})
474+
safetyIdentifier: ip,
475+
workspaceID: authInfo?.workspaceID,
476+
}
477+
if (format === "anthropic") return anthropicHelper(opts)
478+
if (format === "google") return googleHelper(opts)
479+
if (format === "openai") return openaiHelper(opts)
480+
return oaCompatHelper(opts)
482481
})(),
483482
}
484483
}

packages/console/app/src/routes/zen/util/provider/openai-compatible.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@ type Usage = {
2121
}
2222
}
2323

24-
export const oaCompatHelper: ProviderHelper = ({ adjustCacheUsage }) => ({
24+
export const oaCompatHelper: ProviderHelper = ({ adjustCacheUsage, safetyIdentifier }) => ({
2525
format: "oa-compat",
2626
modifyUrl: (providerApi: string) => providerApi + "/chat/completions",
2727
modifyHeaders: (headers: Headers, body: Record<string, any>, apiKey: string) => {
2828
headers.set("authorization", `Bearer ${apiKey}`)
2929
headers.set("x-session-affinity", headers.get("x-opencode-session") ?? "")
3030
},
31-
modifyBody: (body: Record<string, any>) => {
31+
modifyBody: (body: Record<string, any>, workspaceID?: string) => {
3232
return {
3333
...body,
3434
...(body.stream ? { stream_options: { include_usage: true } } : {}),
35+
...(safetyIdentifier ? { safety_identifier: safetyIdentifier } : {}),
3536
}
3637
},
3738
createBinaryStreamDecoder: () => undefined,

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ type Usage = {
1212
total_tokens?: number
1313
}
1414

15-
export const openaiHelper: ProviderHelper = () => ({
15+
export const openaiHelper: ProviderHelper = ({ workspaceID }) => ({
1616
format: "openai",
1717
modifyUrl: (providerApi: string) => providerApi + "/responses",
1818
modifyHeaders: (headers: Headers, body: Record<string, any>, apiKey: string) => {
1919
headers.set("authorization", `Bearer ${apiKey}`)
2020
},
21-
modifyBody: (body: Record<string, any>, workspaceID?: string) => ({
21+
modifyBody: (body: Record<string, any>) => ({
2222
...body,
2323
...(workspaceID ? { safety_identifier: workspaceID } : {}),
2424
}),

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,17 @@ export type UsageInfo = {
3333
cacheWrite1hTokens?: number
3434
}
3535

36-
export type ProviderHelper = (input: { reqModel: string; providerModel: string; adjustCacheUsage?: boolean }) => {
36+
export type ProviderHelper = (input: {
37+
reqModel: string
38+
providerModel: string
39+
adjustCacheUsage?: boolean
40+
safetyIdentifier?: string
41+
workspaceID?: string
42+
}) => {
3743
format: ZenData.Format
3844
modifyUrl: (providerApi: string, isStream?: boolean) => string
3945
modifyHeaders: (headers: Headers, body: Record<string, any>, apiKey: string) => void
40-
modifyBody: (body: Record<string, any>, workspaceID?: string) => Record<string, any>
46+
modifyBody: (body: Record<string, any>) => Record<string, any>
4147
createBinaryStreamDecoder: () => ((chunk: Uint8Array) => Uint8Array | undefined) | undefined
4248
streamSeparator: string
4349
createUsageParser: () => {

packages/console/core/src/model.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export namespace ZenData {
4949
payloadModifier: z.record(z.string(), z.any()).optional(),
5050
payloadMappings: z.record(z.string(), z.string()).optional(),
5151
adjustCacheUsage: z.boolean().optional(),
52+
safetyIdentifier: z.boolean().optional(),
5253
})
5354

5455
const ModelsSchema = z.object({

0 commit comments

Comments
 (0)