Skip to content

Commit 93db166

Browse files
committed
chore(lint): flag unneeded type assertions in api/
1 parent 682665e commit 93db166

11 files changed

Lines changed: 48 additions & 39 deletions

‎src/api/providers/anthropic-vertex.ts‎

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
143143
for await (const chunk of stream) {
144144
switch (chunk.type) {
145145
case "message_start": {
146-
const usage = chunk.message!.usage
146+
const usage = chunk.message.usage
147147

148148
// `output_tokens_details.thinking_tokens` decomposes the billed
149149
// output into internal reasoning tokens; surfaced for per-turn
@@ -155,19 +155,19 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
155155
cacheWriteTokens: usage.cache_creation_input_tokens || undefined,
156156
cacheReadTokens: usage.cache_read_input_tokens || undefined,
157157
...(typeof usage.output_tokens_details?.thinking_tokens === "number"
158-
? { reasoningTokens: usage.output_tokens_details!.thinking_tokens }
158+
? { reasoningTokens: usage.output_tokens_details.thinking_tokens }
159159
: {}),
160160
}
161161

162162
break
163163
}
164164
case "message_delta": {
165-
const deltaThinkingTokens = chunk.usage!.output_tokens_details?.thinking_tokens
165+
const deltaThinkingTokens = chunk.usage.output_tokens_details?.thinking_tokens
166166

167167
yield {
168168
type: "usage",
169169
inputTokens: 0,
170-
outputTokens: chunk.usage!.output_tokens || 0,
170+
outputTokens: chunk.usage.output_tokens || 0,
171171
...(typeof deltaThinkingTokens === "number"
172172
? { reasoningTokens: deltaThinkingTokens }
173173
: {}),
@@ -176,17 +176,17 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
176176
break
177177
}
178178
case "content_block_start": {
179-
switch (chunk.content_block!.type) {
179+
switch (chunk.content_block.type) {
180180
case "text": {
181-
if (chunk.index! > 0) {
181+
if (chunk.index > 0) {
182182
yield { type: "text", text: "\n" }
183183
}
184184

185-
yield { type: "text", text: chunk.content_block!.text }
185+
yield { type: "text", text: chunk.content_block.text }
186186
break
187187
}
188188
case "thinking": {
189-
if (chunk.index! > 0) {
189+
if (chunk.index > 0) {
190190
yield { type: "reasoning", text: "\n" }
191191
}
192192

@@ -198,8 +198,8 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
198198
yield {
199199
type: "tool_call_partial",
200200
index: chunk.index,
201-
id: chunk.content_block!.id,
202-
name: chunk.content_block!.name,
201+
id: chunk.content_block.id,
202+
name: chunk.content_block.name,
203203
arguments: undefined,
204204
}
205205
break
@@ -209,9 +209,9 @@ export class AnthropicVertexHandler extends BaseProvider implements SingleComple
209209
break
210210
}
211211
case "content_block_delta": {
212-
switch (chunk.delta!.type) {
212+
switch (chunk.delta.type) {
213213
case "text_delta": {
214-
yield { type: "text", text: chunk.delta!.text }
214+
yield { type: "text", text: chunk.delta.text }
215215
break
216216
}
217217
case "thinking_delta": {

‎src/api/providers/anthropic.ts‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import {
3232
// Pre-sorted list of known Anthropic model IDs (lowercased) by length (descending) for case-insensitive substring matching.
3333
const ANTHROPIC_MODEL_IDS_SORTED_LOWER = (Object.keys(anthropicModels) as AnthropicModelId[])
3434
.map((id) => id.toLowerCase())
35-
.sort((a, b) => b.length - a.length) as string[]
35+
.sort((a, b) => b.length - a.length)
3636

3737
// Original-case mapping: lowercase key → original AnthropicModelId for lookup.
3838
const ANTHROPIC_MODEL_ID_LOWER_TO_ORIGINAL = Object.fromEntries(
@@ -400,7 +400,7 @@ export class AnthropicHandler extends BaseProvider implements SingleCompletionHa
400400
return anthropicModels[anthropicDefaultModelId]
401401
}
402402

403-
const originalId = ANTHROPIC_MODEL_ID_LOWER_TO_ORIGINAL[matchedLower] as AnthropicModelId
403+
const originalId = ANTHROPIC_MODEL_ID_LOWER_TO_ORIGINAL[matchedLower]
404404
return anthropicModels[originalId]
405405
}
406406

‎src/api/providers/nanogpt.ts‎

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
providerIdentifiers,
1010
type ModelInfo,
1111
type ModelRecord,
12-
type NanoGptRoutingPreference,
1312
type ReasoningEffortExtended,
1413
} from "@roo-code/types"
1514

@@ -115,10 +114,7 @@ export class NanoGptHandler extends RouterProvider implements SingleCompletionHa
115114
}
116115

117116
private getRequestModelId(canonicalModelId: string): string {
118-
return applyNanoGptRoutingPreference(
119-
canonicalModelId,
120-
this.options.nanoGptRoutingPreference as NanoGptRoutingPreference | undefined,
121-
)
117+
return applyNanoGptRoutingPreference(canonicalModelId, this.options.nanoGptRoutingPreference)
122118
}
123119

124120
private createSafeError(operation: string, error: unknown): Error {

‎src/api/providers/openai-codex.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,7 +627,7 @@ export class OpenAiCodexHandler extends BaseProvider implements SingleCompletion
627627
if (block.type === "text") {
628628
content.push({ type: "input_text", text: block.text })
629629
} else if (block.type === "image") {
630-
const image = block as Anthropic.Messages.ImageBlockParam
630+
const image = block
631631
if (image.source.type === "base64") {
632632
const imageUrl = `data:${image.source.media_type};base64,${image.source.data}`
633633
content.push({ type: "input_image", image_url: imageUrl })

‎src/api/providers/openai-native.ts‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,7 @@ export class OpenAiNativeHandler extends BaseProvider implements SingleCompletio
145145
usage.cache_read_input_tokens ?? usage.cache_read_tokens ?? usage.cached_tokens ?? cachedFromDetails ?? 0
146146

147147
// Resolve effective tier: prefer actual tier from response; otherwise requested tier
148-
const effectiveTier =
149-
this.lastServiceTier || (this.options.openAiNativeServiceTier as ServiceTier | undefined) || undefined
148+
const effectiveTier = this.lastServiceTier || this.options.openAiNativeServiceTier || undefined
150149
const effectiveInfo = this.applyServiceTierPricing(model.info, effectiveTier)
151150

152151
// Pass total input tokens directly to calculateApiCostOpenAI
@@ -486,7 +485,7 @@ export class OpenAiNativeHandler extends BaseProvider implements SingleCompletio
486485
if (block.type === "text") {
487486
content.push({ type: "input_text", text: block.text })
488487
} else if (block.type === "image") {
489-
const image = block as Anthropic.Messages.ImageBlockParam
488+
const image = block
490489
if (image.source.type === "base64") {
491490
const imageUrl = `data:${image.source.media_type};base64,${image.source.data}`
492491
content.push({ type: "input_image", image_url: imageUrl })
@@ -1551,7 +1550,7 @@ export class OpenAiNativeHandler extends BaseProvider implements SingleCompletio
15511550

15521551
// Include text.verbosity only when the model explicitly supports it
15531552
if (model.info.supportsVerbosity === true) {
1554-
requestBody.text = { verbosity: (verbosity || "medium") as VerbosityLevel }
1553+
requestBody.text = { verbosity: verbosity || "medium" }
15551554
}
15561555

15571556
// Enable extended prompt cache retention for eligible models

‎src/api/providers/xai.ts‎

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,6 @@ export class XAIHandler extends BaseProvider implements SingleCompletionHandler
6262
return { id, info, ...params }
6363
}
6464

65-
/**
66-
* Convert tools from OpenAI Chat Completions format to Responses API format.
67-
* Chat Completions: { type: "function", function: { name, description, parameters } }
68-
* Responses API: { type: "function", name, description, parameters }
69-
*
70-
* Uses base provider's convertToolSchemaForOpenAI() for schema hardening
71-
* (additionalProperties: false, ensureAllRequired) and handles MCP tools.
72-
*/
7365
/**
7466
* Map a Chat Completions tool choice to the Responses API shape so TypeScript
7567
* validates the provider payload (the APIs use different object forms for the
@@ -125,6 +117,14 @@ export class XAIHandler extends BaseProvider implements SingleCompletionHandler
125117
}
126118
}
127119

120+
/**
121+
* Convert tools from OpenAI Chat Completions format to Responses API format.
122+
* Chat Completions: { type: "function", function: { name, description, parameters } }
123+
* Responses API: { type: "function", name, description, parameters }
124+
*
125+
* Uses base provider's convertToolSchemaForOpenAI() for schema hardening
126+
* (additionalProperties: false, ensureAllRequired) and handles MCP tools.
127+
*/
128128
private mapResponseTools(tools?: any[]): any[] | undefined {
129129
const converted = this.convertToolsForOpenAI(tools)
130130
if (!converted?.length) {
@@ -200,7 +200,7 @@ export class XAIHandler extends BaseProvider implements SingleCompletionHandler
200200
let stream: AsyncIterable<any>
201201
try {
202202
stream = (await this.client.responses.create(
203-
{ ...requestBody, stream: true } as any,
203+
requestBody,
204204
abortSignal ? { signal: abortSignal } : undefined,
205205
)) as unknown as AsyncIterable<any>
206206
} catch (error) {

‎src/api/transform/model-params.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ export function getModelParams({
137137
// Here we simply propagate the resolved effort into the params, while
138138
// still treating "disable" as an omission.
139139
if (effort && effort !== "disable") {
140-
reasoningEffort = effort as ReasoningEffortExtended
140+
reasoningEffort = effort
141141
}
142142
}
143143

‎src/api/transform/openai-format.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -465,7 +465,7 @@ export function convertToOpenAiMessages(
465465
] as OpenAI.Chat.ChatCompletionToolMessageParam
466466
if (lastToolMessage?.role === "tool") {
467467
const additionalText = filteredNonToolMessages
468-
.map((part) => sanitizeSurrogates((part as Anthropic.TextBlockParam).text))
468+
.map((part) => sanitizeSurrogates(part.text))
469469
.join("\n")
470470
lastToolMessage.content = `${lastToolMessage.content}\n\n${additionalText}`
471471
}

‎src/api/transform/reasoning.ts‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export const getOpenRouterReasoning = ({
6363
? { max_tokens: reasoningBudget }
6464
: shouldUseReasoningEffort({ model, settings })
6565
? reasoningEffort && reasoningEffort !== "disable"
66-
? { effort: reasoningEffort as ReasoningEffortExtended }
66+
? { effort: reasoningEffort }
6767
: undefined
6868
: undefined
6969

@@ -185,8 +185,7 @@ export const getGeminiReasoning = ({
185185
// We intentionally ignore enableReasoningEffort here so that explicitly chosen
186186
// efforts in the UI (e.g. "High" for gemini-3-pro-preview) always translate
187187
// into a thinkingConfig, regardless of legacy boolean flags.
188-
const selectedEffort = (settings.reasoningEffort ?? model.reasoningEffort) as
189-
ReasoningEffortExtended | "disable" | undefined
188+
const selectedEffort = settings.reasoningEffort ?? model.reasoningEffort
190189

191190
// Respect "off" / unset semantics from the effort selector itself.
192191
if (!selectedEffort || selectedEffort === "disable") {

‎src/eslint-suppressions.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@
446446
},
447447
"api/providers/xai.ts": {
448448
"@typescript-eslint/no-explicit-any": {
449-
"count": 5
449+
"count": 4
450450
}
451451
},
452452
"api/transform/__tests__/ai-sdk.spec.ts": {

0 commit comments

Comments
 (0)