Skip to content

Commit 569b43d

Browse files
WebMadedelauna
andauthored
refactor(api): centralize service-tier primitives (Zoo-Code-Org#1040)
* refactor(api): centralize service-tier primitives * test(openai-native): cover omitted completion tiers * test(openai-native): cover resolved streaming tiers * test(api): cover service tier fallbacks * test(api): cover remaining service tier branches * refactor(api): remove duplicate tier capture * test(openai-native): cover flex service tier * test(openai-native): expand service tier coverage * refactor: address service tier review feedback * refactor(api): address service tier review feedback * test(webview): add model info visual snapshot * fix(webview): isolate visual test dependencies * test(webview): update service tier visual baseline * fix(webview): add @source directive so Tailwind utilities generate in CT builds --------- Co-authored-by: Elliott de Launay <edelauna@gmail.com>
1 parent c378193 commit 569b43d

21 files changed

Lines changed: 702 additions & 99 deletions

File tree

packages/types/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
"types": "./dist/index.d.cts",
1212
"default": "./dist/index.cjs"
1313
}
14+
},
15+
"./model": {
16+
"types": "./src/model.ts",
17+
"import": "./src/model.ts"
18+
},
19+
"./provider-identifiers": {
20+
"types": "./src/provider-identifiers.ts",
21+
"import": "./src/provider-identifiers.ts"
1422
}
1523
},
1624
"scripts": {

packages/types/src/model.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,19 @@ export const verbosityLevelsSchema = z.enum(verbosityLevels)
5454

5555
export type VerbosityLevel = z.infer<typeof verbosityLevelsSchema>
5656

57+
/** Serialized service tier field used in provider request payloads and responses. */
58+
export const SERVICE_TIER_KEY = "service_tier"
59+
5760
/**
58-
* Service tiers (OpenAI Responses API)
61+
* Service tiers for the public OpenAI Responses API.
5962
*/
60-
export const serviceTiers = ["default", "flex", "priority"] as const
63+
export const OpenAiServiceTier = {
64+
Default: "default",
65+
Flex: "flex",
66+
Priority: "priority",
67+
} as const
68+
69+
export const serviceTiers = [OpenAiServiceTier.Default, OpenAiServiceTier.Flex, OpenAiServiceTier.Priority] as const
6170
export const serviceTierSchema = z.enum(serviceTiers)
6271
export type ServiceTier = z.infer<typeof serviceTierSchema>
6372

src/api/providers/__tests__/bedrock.spec.ts

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858
BEDROCK_1M_CONTEXT_MODEL_IDS,
5959
BEDROCK_SERVICE_TIER_MODEL_IDS,
6060
bedrockModels,
61+
SERVICE_TIER_KEY,
6162
ApiProviderError,
6263
} from "@roo-code/types"
6364

@@ -1233,10 +1234,10 @@ describe("AwsBedrockHandler", () => {
12331234
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
12341235

12351236
// service_tier should be at the top level of the payload
1236-
expect(commandArg.service_tier).toBe("PRIORITY")
1237+
expect(commandArg[SERVICE_TIER_KEY]).toBe("PRIORITY")
12371238
// service_tier should NOT be in additionalModelRequestFields
12381239
if (commandArg.additionalModelRequestFields) {
1239-
expect(commandArg.additionalModelRequestFields.service_tier).toBeUndefined()
1240+
expect(commandArg.additionalModelRequestFields[SERVICE_TIER_KEY]).toBeUndefined()
12401241
}
12411242
})
12421243

@@ -1263,10 +1264,10 @@ describe("AwsBedrockHandler", () => {
12631264
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
12641265

12651266
// service_tier should be at the top level of the payload
1266-
expect(commandArg.service_tier).toBe("FLEX")
1267+
expect(commandArg[SERVICE_TIER_KEY]).toBe("FLEX")
12671268
// service_tier should NOT be in additionalModelRequestFields
12681269
if (commandArg.additionalModelRequestFields) {
1269-
expect(commandArg.additionalModelRequestFields.service_tier).toBeUndefined()
1270+
expect(commandArg.additionalModelRequestFields[SERVICE_TIER_KEY]).toBeUndefined()
12701271
}
12711272
})
12721273

@@ -1294,9 +1295,9 @@ describe("AwsBedrockHandler", () => {
12941295
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
12951296

12961297
// Service tier should NOT be included for unsupported models (at top level or in additionalModelRequestFields)
1297-
expect(commandArg.service_tier).toBeUndefined()
1298+
expect(commandArg[SERVICE_TIER_KEY]).toBeUndefined()
12981299
if (commandArg.additionalModelRequestFields) {
1299-
expect(commandArg.additionalModelRequestFields.service_tier).toBeUndefined()
1300+
expect(commandArg.additionalModelRequestFields[SERVICE_TIER_KEY]).toBeUndefined()
13001301
}
13011302
})
13021303

@@ -1323,9 +1324,9 @@ describe("AwsBedrockHandler", () => {
13231324
const commandArg = mockConverseStreamCommand.mock.calls[0][0] as any
13241325

13251326
// Service tier should NOT be included when not specified (at top level or in additionalModelRequestFields)
1326-
expect(commandArg.service_tier).toBeUndefined()
1327+
expect(commandArg[SERVICE_TIER_KEY]).toBeUndefined()
13271328
if (commandArg.additionalModelRequestFields) {
1328-
expect(commandArg.additionalModelRequestFields.service_tier).toBeUndefined()
1329+
expect(commandArg.additionalModelRequestFields[SERVICE_TIER_KEY]).toBeUndefined()
13291330
}
13301331
})
13311332
})

src/api/providers/__tests__/openai-native-usage.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { describe, it, expect, beforeEach } from "vitest"
22
import { OpenAiNativeHandler } from "../openai-native"
3-
import { openAiNativeModels } from "@roo-code/types"
3+
import { OpenAiServiceTier, openAiNativeModels } from "@roo-code/types"
44

55
describe("OpenAiNativeHandler - normalizeUsage", () => {
66
let handler: OpenAiNativeHandler
@@ -468,7 +468,7 @@ describe("OpenAiNativeHandler - normalizeUsage", () => {
468468
it("should not apply GPT-5.4 long-context pricing to priority tier", () => {
469469
handler = new OpenAiNativeHandler({
470470
openAiNativeApiKey: "test-key",
471-
openAiNativeServiceTier: "priority",
471+
openAiNativeServiceTier: OpenAiServiceTier.Priority,
472472
})
473473

474474
const usage = {

0 commit comments

Comments
 (0)