Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
4e3fef1
feat: Add reasoning and capability controls for OpenAI Compatible models
benzntech Jan 7, 2026
8a902d2
chore: add changeset for openai compatible settings improvements
benzntech Jan 7, 2026
60fd79a
chore: add missing translations for custom model settings
benzntech Jan 9, 2026
526a398
Merge branch 'main' into feat/openai-compatible-settings-improvements
benzntech Jan 9, 2026
6ece36f
fix: Improve OpenAI Auto-fill feedback and Gemini proxy support
benzntech Jan 10, 2026
049590c
revert: remove gemini proxy support
benzntech Jan 10, 2026
c110138
feat: suppress unconfigured provider errors and fix Infinity serializ…
benzntech Jan 10, 2026
c901574
fix(jetbrains): auto-generate gradle.properties from template for bui…
benzntech Jan 10, 2026
c54a470
Merge remote-tracking branch 'origin/main' into feat/openai-compatibl…
benzntech Jan 10, 2026
ddda0b8
docs: add changelog entry for 4.143.21 to fix jetbrains build
benzntech Jan 10, 2026
b105400
docs: tag all moderators in changelog for PR 4860
benzntech Jan 11, 2026
bc474e1
docs: link issue #3271 in changelog for PR 4860
benzntech Jan 11, 2026
130ac8d
Merge branch 'main' into feat/openai-compatible-settings-improvements
benzntech Jan 11, 2026
57d2758
fix(ci): add libkrb5-dev to system dependencies
benzntech Jan 12, 2026
13c8a10
Merge branch 'feat/openai-compatible-settings-improvements' of https:…
benzntech Jan 12, 2026
89ee6c1
fix(openai-compatible): improve auto-fill to work with all models
Jan 13, 2026
2d3cb65
Merge origin/main into feat/openai-compatible-settings-improvements
Jan 19, 2026
d29d0ce
Merge branch 'main' into feat/openai-compatible-settings-improvements
benzntech Jan 19, 2026
42ed3b8
fix: use GetModelsOptions object for flushModels call
Jan 19, 2026
71426a0
fix(tests): correct mock order in requestRouterModels tests to match …
Jan 19, 2026
97ee264
Merge remote-tracking branch 'origin/main' into feat/openai-compatibl…
Jan 20, 2026
f9e4817
fix(tests): add apiProvider config to tests for conditional gemini/ol…
Jan 20, 2026
158e51a
Merge branch 'main' into feat/openai-compatible-settings-improvements
benzntech Jan 22, 2026
b4c2e38
Merge branch 'main' into feat/openai-compatible-settings-improvements
benzntech Jan 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/openai-compatible-settings-improvements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"kilo-code": minor
---

Add reasoning and capability controls for OpenAI Compatible models

- Added checkboxes for 'Supports Reasoning', 'Supports Function Calling', and 'Supports Computer Use' to the OpenAI Compatible settings UI.
- Compacted the capability checkboxes into a 2-column grid layout with tooltip-only descriptions.
- Updated OpenAiHandler to inject the 'thinking' parameter when reasoning is enabled and the model supports it.
- Gated tool inclusion based on the 'supportsNativeTools' flag.
1 change: 1 addition & 0 deletions .github/workflows/code-qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ jobs:
libxkbfile-dev \
pkg-config \
build-essential \
libkrb5-dev \
python3
- name: Turbo cache setup
uses: actions/cache@v5
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/marketplace-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,7 @@ jobs:
libxkbfile-dev \
pkg-config \
build-essential \
libkrb5-dev \
python3
- name: Turbo cache setup
uses: actions/cache@v5
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,15 @@ Note that available settings vary by provider and model. Each provider offers di
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-2.png" alt="Provider selection dropdown" width="550" />
- Enter API key

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-3.png" alt="API key entry field" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-3.png" alt="API key entry field" width="550" />

- Choose a model

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-8.png" alt="Model selection interface" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-8.png" alt="Model selection interface" width="550" />

- Adjust model parameters

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-5.png" alt="Model parameter adjustment controls" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-5.png" alt="Model parameter adjustment controls" width="550" />

### Switching Profiles

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,19 +36,19 @@ API 配置配置文件允许您创建和切换不同的 AI 设置集。每个配

- 选择您的 API 提供商

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-2.png" alt="提供商选择下拉菜单" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-2.png" alt="提供商选择下拉菜单" width="550" />

- 输入 API 密钥

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-3.png" alt="API 密钥输入字段" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-3.png" alt="API 密钥输入字段" width="550" />

- 选择模型

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-8.png" alt="模型选择界面" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-8.png" alt="模型选择界面" width="550" />

- 调整模型参数

<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-5.png" alt="模型参数调整控件" width="550" />
<img src="/docs/img/api-configuration-profiles/api-configuration-profiles-5.png" alt="模型参数调整控件" width="550" />

### 切换配置文件

Expand Down
30 changes: 15 additions & 15 deletions cli/src/auth/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,13 @@ export default async function authWizard(): Promise<void> {

// Prompt user to select a provider
const selectedProvider = await withRawMode(() =>
select({
message: "Select an AI provider:",
choices: providerChoices,
loop: false,
pageSize: process.stdout.rows ? Math.min(20, process.stdout.rows - 2) : 10,
})
)
select({
message: "Select an AI provider:",
choices: providerChoices,
loop: false,
pageSize: process.stdout.rows ? Math.min(20, process.stdout.rows - 2) : 10,
}),
)

// Find the selected provider
const provider = authProviders.find((p) => p.value === selectedProvider)
Expand Down Expand Up @@ -86,14 +86,14 @@ export default async function authWizard(): Promise<void> {
})

const selectedModel = await withRawMode(() =>
select({
message: "Select a model to use:",
choices: modelChoices,
default: defaultModel,
loop: false,
pageSize: 10,
})
)
select({
message: "Select a model to use:",
choices: modelChoices,
default: defaultModel,
loop: false,
pageSize: 10,
}),
)

const modelKey = getModelIdKey(providerId)
authResult.providerConfig[modelKey] = selectedModel
Expand Down
4 changes: 2 additions & 2 deletions cli/src/commands/checkpoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -222,8 +222,8 @@ function getCheckpointsPath(): string {
}

/**
* Handle /checkpoint disable
*/
* Handle /checkpoint disable
*/
async function handleDisable(context: CommandContext): Promise<void> {
const { addMessage, sendWebviewMessage } = context

Expand Down
28 changes: 24 additions & 4 deletions cli/src/services/__tests__/autocomplete.detectInputState.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,18 @@ describe("detectInputState", () => {
{
condition: (context) => context.getArgument("subcommand") === "select",
provider: async () => [
{ value: "personal", description: "Personal account", matchScore: 1, highlightedValue: "personal" },
{ value: "kilo-code", description: "Kilo Code team", matchScore: 1, highlightedValue: "kilo-code" },
{
value: "personal",
description: "Personal account",
matchScore: 1,
highlightedValue: "personal",
},
{
value: "kilo-code",
description: "Kilo Code team",
matchScore: 1,
highlightedValue: "kilo-code",
},
],
},
],
Expand Down Expand Up @@ -108,7 +118,12 @@ describe("detectInputState", () => {
},
provider: async () => [
{ value: "gpt-4", description: "GPT-4", matchScore: 1, highlightedValue: "gpt-4" },
{ value: "claude-sonnet", description: "Claude Sonnet", matchScore: 1, highlightedValue: "claude-sonnet" },
{
value: "claude-sonnet",
description: "Claude Sonnet",
matchScore: 1,
highlightedValue: "claude-sonnet",
},
],
},
],
Expand All @@ -132,7 +147,12 @@ describe("detectInputState", () => {
required: true,
provider: async () => [
{ value: "code", description: "Code mode", matchScore: 1, highlightedValue: "code" },
{ value: "architect", description: "Architect mode", matchScore: 1, highlightedValue: "architect" },
{
value: "architect",
description: "Architect mode",
matchScore: 1,
highlightedValue: "architect",
},
],
},
],
Expand Down
1 change: 0 additions & 1 deletion cli/src/state/hooks/__tests__/useSessionCost.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,6 @@ describe("useSessionCost", () => {
expect(result.hasCostData).toBe(true)
})


it("should handle messages with empty text", () => {
const messages: ExtensionChatMessage[] = [
{
Expand Down
45 changes: 45 additions & 0 deletions docs/context-window-autofill.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Context Window Auto-fill Feature

## Objective

Implement an auto-fill feature for the context window and other model capabilities in the OpenAI Compatible settings.

## Changes

### Backend

1. **`src/shared/WebviewMessage.ts`**:

- Added `requestOpenAiModelInfo` to `WebviewMessage` type.
- This message allows the frontend to request model information based on the selected model ID.

2. **`src/shared/ExtensionMessage.ts`**:

- Added `openAiModelInfo` to `ExtensionMessage` type.
- This property carriers the `ModelInfo` payload back to the frontend.

3. **`src/api/providers/openai.ts`**:

- Imported known model maps (`openAiNativeModels`, `anthropicModels`, etc.) from `@roo-code/types`.
- Added `getOpenAiModelInfo(modelId: string)` helper function.
- This function iterates through known model maps to find and return the `ModelInfo` for a given model ID.

4. **`src/core/webview/webviewMessageHandler.ts`**:
- Added a handler for `requestOpenAiModelInfo`.
- It calls `getOpenAiModelInfo` and sends back an `openAiModelInfo` message with the result.

### Frontend

1. **`webview-ui/src/i18n/locales/en/settings.json`**:

- Added `"autoFill": "Auto-fill"` translation key.

2. **`webview-ui/src/components/settings/providers/OpenAICompatible.tsx`**:
- Imported `vscode` utility for message passing.
- Implemented `handleAutoFill` function that sends `requestOpenAiModelInfo`.
- Added a listener in `onMessage` to handle `openAiModelInfo` response and update `openAiCustomModelInfo` state.
- Added an "Auto-fill" button in the "Model Capabilities" section header.

## Verification

- Ran `pnpm check-types` successfully, confirming type safety across the monorepo.
15 changes: 15 additions & 0 deletions jetbrains/scripts/check-dependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,21 @@ function checkBuildSystem() {
const gradlew = path.join(pluginDir, process.platform === "win32" ? "gradlew.bat" : "gradlew")
const buildGradle = path.join(pluginDir, "build.gradle.kts")
const gradleProps = path.join(pluginDir, "gradle.properties")
const gradlePropsTemplate = path.join(pluginDir, "gradle.properties.template")

// Auto-generate gradle.properties from template if missing
if (!fs.existsSync(gradleProps) && fs.existsSync(gradlePropsTemplate)) {
try {
printWarning("gradle.properties is missing, generating from template...")
let content = fs.readFileSync(gradlePropsTemplate, "utf8")
// Use a default version for CI check - strict version sync happens later via sync:version
content = content.replace("{{VERSION}}", "0.0.0-dev")
fs.writeFileSync(gradleProps, content)
printFix("Generated gradle.properties from template")
} catch (error) {
printError(`Failed to generate gradle.properties: ${error.message}`)
}
}

if (fs.existsSync(gradlew) && fs.existsSync(buildGradle) && fs.existsSync(gradleProps)) {
printSuccess("Gradle build system is configured")
Expand Down
Loading