Skip to content

Commit 1adebe7

Browse files
authored
feat: add isOpenAIR1FormatEnabled option for DeepSeek compatibility (RooCodeInc#2408)
1 parent df48b97 commit 1adebe7

File tree

4 files changed

+25
-1
lines changed

4 files changed

+25
-1
lines changed

.changeset/itchy-ravens-attend.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"claude-dev": patch
3+
---
4+
5+
feat: add isR1FormatRequired option for DeepSeek compatibility

src/api/providers/openai.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export class OpenAiHandler implements ApiHandler {
3434
async *createMessage(systemPrompt: string, messages: Anthropic.Messages.MessageParam[]): ApiStream {
3535
const modelId = this.options.openAiModelId ?? ""
3636
const isDeepseekReasoner = modelId.includes("deepseek-reasoner")
37+
const isR1FormatRequired = this.options.openAiModelInfo?.isR1FormatRequired ?? false
3738
const isO3Mini = modelId.includes("o3-mini")
3839

3940
let openAiMessages: OpenAI.Chat.ChatCompletionMessageParam[] = [
@@ -43,7 +44,7 @@ export class OpenAiHandler implements ApiHandler {
4344
let temperature: number | undefined = this.options.openAiModelInfo?.temperature ?? openAiModelInfoSaneDefaults.temperature
4445
let reasoningEffort: ChatCompletionReasoningEffort | undefined = undefined
4546

46-
if (isDeepseekReasoner) {
47+
if (isDeepseekReasoner || isR1FormatRequired) {
4748
openAiMessages = convertToR1Format([{ role: "user", content: systemPrompt }, ...messages])
4849
}
4950

src/shared/api.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ export interface ModelInfo {
9393

9494
export interface OpenAiCompatibleModelInfo extends ModelInfo {
9595
temperature?: number
96+
isR1FormatRequired?: boolean
9697
}
9798

9899
// Anthropic
@@ -437,6 +438,7 @@ export const openAiModelInfoSaneDefaults: OpenAiCompatibleModelInfo = {
437438
contextWindow: 128_000,
438439
supportsImages: true,
439440
supportsPromptCache: false,
441+
isR1FormatRequired: false,
440442
inputPrice: 0,
441443
outputPrice: 0,
442444
temperature: 0,

webview-ui/src/components/settings/ApiOptions.tsx

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,22 @@ const ApiOptions = ({ showModelOptions, apiErrorMessage, modelIdErrorMessage, is
846846
}}>
847847
Supports Computer Use
848848
</VSCodeCheckbox>
849+
<VSCodeCheckbox
850+
checked={!!apiConfiguration?.openAiModelInfo?.isR1FormatRequired}
851+
onChange={(e: any) => {
852+
const isChecked = e.target.checked === true
853+
let modelInfo = apiConfiguration?.openAiModelInfo
854+
? apiConfiguration.openAiModelInfo
855+
: { ...openAiModelInfoSaneDefaults }
856+
modelInfo = { ...modelInfo, isR1FormatRequired: isChecked }
857+
858+
setApiConfiguration({
859+
...apiConfiguration,
860+
openAiModelInfo: modelInfo,
861+
})
862+
}}>
863+
Enable R1 messages format
864+
</VSCodeCheckbox>
849865
<div style={{ display: "flex", gap: 10, marginTop: "5px" }}>
850866
<VSCodeTextField
851867
value={

0 commit comments

Comments
 (0)