Skip to content

Refactor model provider configuration to providerId-keyed structure (V4)#46

Open
BingqingLyu wants to merge 6 commits into
mainfrom
pr-2220-mingholy-refactor-model-providers-v2
Open

Refactor model provider configuration to providerId-keyed structure (V4)#46
BingqingLyu wants to merge 6 commits into
mainfrom
pr-2220-mingholy-refactor-model-providers-v2

Conversation

@BingqingLyu

@BingqingLyu BingqingLyu commented Apr 27, 2026

Copy link
Copy Markdown
Owner

TLDR

This PR introduces settings version V4 with a refactored model provider configuration structure, changing from authType-keyed arrays to providerId-keyed objects. It adds a new --providerId CLI flag for explicit provider selection and implements the V3→V4 migration path. All existing tests are updated to reflect the new settings version and configuration format.

Todo Actions

  • Backup settings.json when update coding plan configurations
  • Documents

Dive Deeper

Settings Migration V3→V4

  • Added v3-to-v4.ts migration that transforms modelProviders from an array format (keyed by authType) to an object format (keyed by providerId)
  • Each provider now has the structure: { authType, envKey, baseUrl?, models: [] }
  • The migration extracts model-level fields while moving provider-level metadata (envKey, baseUrl) to the provider container
  • Updated ALL_MIGRATIONS to include the V3→V4 migration

Model Provider Configuration Refactor

Before (V3):

modelProviders: {
  openai: [{ id: 'gpt-4', envKey: 'KEY', baseUrl: '...' }]
}

After (V4):

modelProviders: {
  'openai-custom': {
    authType: 'openai',
    envKey: 'KEY',
    baseUrl: '...',
    models: [{ id: 'gpt-4' }]
  }
}

This change allows multiple providers of the same authType with different configurations.

CLI Changes

  • Added --providerId flag to allow explicit provider selection at startup
  • Updated auth.ts to iterate over provider objects instead of authType-keyed arrays
  • Updated config resolution to prefer CLI --providerId over settings

Test Updates

  • All migration tests now reference SETTINGS_VERSION constant instead of hardcoded version numbers
  • Auth validation tests updated to use the new provider-keyed format
  • Integration tests verify V1→current version migration chain

Reviewer Test Plan

  1. Test settings migration:

    npm test -- integration-tests/settings-migration.test.ts

    Verify V1, V2, and V3 settings all migrate correctly to V4

  2. Test CLI provider selection:

    qwen --providerId openai-custom --model gpt-4

    Verify the specified provider is selected

  3. Test auth validation:

    npm test -- packages/cli/src/config/auth.test.ts
    npm test -- packages/core/src/models/modelRegistry.test.ts
  4. Run full test suite:

    npm test

Testing Matrix

🍏 🪟 🐧
npm run
npx
Docker
Podman - -
Seatbelt - -

Linked issues / bug

Fixes QwenLM#1820

Mingholy and others added 6 commits March 9, 2026 22:33
…sioning

- Changed references from V3 to current version in migration tests to reflect the new SETTINGS_VERSION.
- Updated test assertions to verify migration to the latest version instead of hardcoded version numbers.
- Introduced new migration logic for transitioning from V3 to V4 settings structure.
- Enhanced model provider configuration to support new providerId format and ensure backward compatibility.
Add generateProviderIdFromBaseUrl function to create more user-friendly
provider IDs by extracting domain names from baseUrl (e.g., api.openai.com
→ openai). Falls back to authType-based naming when URL parsing fails.

Update documentation to reflect v4 configuration format with providerId
structure, including new migration guide section.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
…ix chars

- Change selection indicator from ● to › for better visual alignment
- Add prefix character system (›, ↑, ↓) aligned with SessionPicker
- Add centerSelection prop to keep selected item centered in visible window
- Change scroll indicators from ▲/▼ to ↑/↓ for Unicode consistency
- Update DescriptiveRadioButtonSelect to support centerSelection
- Add height=2 and description fallback for consistent layout

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Update migration tests to expect providerIds generated from baseUrl domains
(e.g., 'my-proxy' instead of 'openai-2', 'api-1' instead of 'openai').

feat(ui): enable scroll indicators in ModelDialog

Add maxItemsToShow, showScrollArrows, and centerSelection props to
BaseSelectionList in ModelDialog for improved scrolling UX.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Add backupSettingsFile call before updating Coding Plan provider
configuration to preserve user settings in case of migration issues.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Update test snapshots to reflect the change from ● to › for
selection indicator, and fix useCodingPlanUpdates test mock.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
@BingqingLyu BingqingLyu added conflicting-group-1 conflicting-group-1 Conflicting PR group 1 — review as a batch conflicting-pr Shares at least one cross-PR dependency with other PRs and removed conflicting-group-1 labels May 7, 2026
@BingqingLyu

BingqingLyu commented May 7, 2026

Copy link
Copy Markdown
Owner Author

Conflict Group 1

This PR shares modified functions with 19 other PR(s): #10, #106, #112, #113, #114, #117, #14, #17, #18, #21, #22, #31, #36, #52, #7, #75, #8, #86, #88.

These PRs should be reviewed as a batch — merging one may affect the others.

Function File Also modified by
ModelDialog ModelDialog.tsx #52
getMergeStrategyForPath settings.ts #8
isSdkMcpServerConfig config.ts #106, #112, #113, #114, #117, #18, #75, #86, #88
loadCliConfig config.ts #106, #112, #113, #114, #117, #36, #75, #86, #88
parseApprovalModeValue config.ts #10, #112, #113, #114, #117, #21, #22, #36, #86, #88
parseArguments config.ts #10, #112, #113, #114, #117, #14, #17, #18, #21, #22, #31, #36, #7, #86, #88
validateModelConfig contentGenerator.ts #10
graph LR
    PR46["PR #46"]
    FModelDialog_7258["ModelDialog<br>ModelDialog.tsx"]
    PR46 -->|modifies| FModelDialog_7258
    PR52["PR #52"]
    PR52 -->|modifies| FModelDialog_7258
    FgetMergeStrategyForPath_2596["getMergeStrategyForPath<br>settings.ts"]
    PR46 -->|modifies| FgetMergeStrategyForPath_2596
    PR8["PR #8"]
    PR8 -->|modifies| FgetMergeStrategyForPath_2596
    FisSdkMcpServerConfig_803["isSdkMcpServerConfig<br>config.ts"]
    PR46 -->|modifies| FisSdkMcpServerConfig_803
    PR106["PR #106"]
    PR106 -->|modifies| FisSdkMcpServerConfig_803
    PR112["PR #112"]
    PR112 -->|modifies| FisSdkMcpServerConfig_803
    PR113["PR #113"]
    PR113 -->|modifies| FisSdkMcpServerConfig_803
    PR114["PR #114"]
    PR114 -->|modifies| FisSdkMcpServerConfig_803
    PR117["PR #117"]
    PR117 -->|modifies| FisSdkMcpServerConfig_803
    PR18["PR #18"]
    PR18 -->|modifies| FisSdkMcpServerConfig_803
    PR75["PR #75"]
    PR75 -->|modifies| FisSdkMcpServerConfig_803
    PR86["PR #86"]
    PR86 -->|modifies| FisSdkMcpServerConfig_803
    PR88["PR #88"]
    PR88 -->|modifies| FisSdkMcpServerConfig_803
    FloadCliConfig_6977["loadCliConfig<br>config.ts"]
    PR46 -->|modifies| FloadCliConfig_6977
    PR106 -->|modifies| FloadCliConfig_6977
    PR112 -->|modifies| FloadCliConfig_6977
    PR113 -->|modifies| FloadCliConfig_6977
    PR114 -->|modifies| FloadCliConfig_6977
    PR117 -->|modifies| FloadCliConfig_6977
    PR36["PR #36"]
    PR36 -->|modifies| FloadCliConfig_6977
    PR75 -->|modifies| FloadCliConfig_6977
    PR86 -->|modifies| FloadCliConfig_6977
    PR88 -->|modifies| FloadCliConfig_6977
    FparseApprovalModeValue_6977["parseApprovalModeValue<br>config.ts"]
    PR46 -->|modifies| FparseApprovalModeValue_6977
    PR10["PR #10"]
    PR10 -->|modifies| FparseApprovalModeValue_6977
    PR112 -->|modifies| FparseApprovalModeValue_6977
    PR113 -->|modifies| FparseApprovalModeValue_6977
    PR114 -->|modifies| FparseApprovalModeValue_6977
    PR117 -->|modifies| FparseApprovalModeValue_6977
    PR21["PR #21"]
    PR21 -->|modifies| FparseApprovalModeValue_6977
    PR22["PR #22"]
    PR22 -->|modifies| FparseApprovalModeValue_6977
    PR36 -->|modifies| FparseApprovalModeValue_6977
    PR86 -->|modifies| FparseApprovalModeValue_6977
    PR88 -->|modifies| FparseApprovalModeValue_6977
    FparseArguments_6977["parseArguments<br>config.ts"]
    PR46 -->|modifies| FparseArguments_6977
    PR10 -->|modifies| FparseArguments_6977
    PR112 -->|modifies| FparseArguments_6977
    PR113 -->|modifies| FparseArguments_6977
    PR114 -->|modifies| FparseArguments_6977
    PR117 -->|modifies| FparseArguments_6977
    PR14["PR #14"]
    PR14 -->|modifies| FparseArguments_6977
    PR17["PR #17"]
    PR17 -->|modifies| FparseArguments_6977
    PR18 -->|modifies| FparseArguments_6977
    PR21 -->|modifies| FparseArguments_6977
    PR22 -->|modifies| FparseArguments_6977
    PR31["PR #31"]
    PR31 -->|modifies| FparseArguments_6977
    PR36 -->|modifies| FparseArguments_6977
    PR7["PR #7"]
    PR7 -->|modifies| FparseArguments_6977
    PR86 -->|modifies| FparseArguments_6977
    PR88 -->|modifies| FparseArguments_6977
    FvalidateModelConfig_5386["validateModelConfig<br>contentGenerator.ts"]
    PR46 -->|modifies| FvalidateModelConfig_5386
    PR10 -->|modifies| FvalidateModelConfig_5386
Loading

Posted by codegraph-ai conflict detection.

@github-actions

github-actions Bot commented Jul 8, 2026

Copy link
Copy Markdown

This pull request has had no activity for 60 days and is being marked as stale. It will be closed in another 30 days if no further activity occurs. To keep it open, push a new commit or leave a comment. Maintainers may apply pinned, status/blocked, status/on-hold, or status/ready-for-merge to exempt it from auto-close.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

conflicting-group-1 Conflicting PR group 1 — review as a batch conflicting-pr Shares at least one cross-PR dependency with other PRs status/stale

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] /model command doesn't show all avaliable models

2 participants