gsd-oc-select-model

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Select Model skill

选择模型Skill

Interactive workflow to select an AI model from opencode's available providers and models.
从opencode的可用提供商和模型中选择AI模型的交互式工作流。

Script Location

脚本位置

The script is bundled with this skill at:
scripts/select-models.cjs
Run with:
bash
node <skill-dir>/scripts/select-models.cjs [options]
Where
<skill-dir>
is the installation directory of this skill.
该脚本随此Skill捆绑在以下路径:
scripts/select-models.cjs
运行方式:
bash
node <skill-dir>/scripts/select-models.cjs [options]
其中
<skill-dir>
是该Skill的安装目录。

Workflow

工作流

Step 1: Get Providers

步骤1:获取提供商列表

Run the script with
--providers-only
to get the list of providers:
bash
node <skill-dir>/scripts/select-models.cjs --providers-only
Returns JSON:
json
{
  "provider_count": N,
  "providers": [
    {"name": "...", "model_count": N, "sample_models": "...", "has_sub_providers": true|false}
  ]
}
Key field:
has_sub_providers
- indicates if this provider has a hierarchical structure (3-level) or flat structure (2-level).
使用
--providers-only
参数运行脚本以获取提供商列表:
bash
node <skill-dir>/scripts/select-models.cjs --providers-only
返回JSON格式结果:
json
{
  "provider_count": N,
  "providers": [
    {"name": "...", "model_count": N, "sample_models": "...", "has_sub_providers": true|false}
  ]
}
关键字段:
has_sub_providers
- 表示该提供商是否具有层级结构(3级)或扁平结构(2级)。

Step 2: Ask User to Select Provider (with Pagination)

步骤2:引导用户选择提供商(支持分页)

Use the question tool with paginated options. Show 10 providers per page.
Pagination pattern:
  • For each page, include navigation options as needed:
    • "→ Next"
      - to go to next page (include when not on last page)
    • "← Previous"
      - to go to previous page (include when not on first page)
  • Track current page index (0-based)
  • Label the provider options clearly: show name and model count
Example for page 0 (first 10 providers):
question: "Select a provider (page 1/N, showing 1-10 of M):"
Options:
- "google (28 models)"
- "google-vertex (27 models)"
- ...
- "→ Next"
When user selects "→ Next":
  • Increment page index
  • Call question tool again with next 10 providers
When user selects "← Previous":
  • Decrement page index
  • Call question tool again with previous 10 providers
When user selects a provider:
  • Save the selected provider name
  • Save
    has_sub_providers
    flag from the provider data
  • Proceed to Step 3
使用带分页选项的问答工具。每页显示10个提供商。
分页模式:
  • 每页根据需要包含导航选项:
    • "→ Next"
      - 跳转到下一页(非最后一页时显示)
    • "← Previous"
      - 返回上一页(非第一页时显示)
  • 跟踪当前页面索引(从0开始)
  • 清晰标记提供商选项:显示名称和模型数量
第0页示例(前10个提供商):
question: "选择一个提供商(第1/N页,显示第1-10个,共M个):"
选项:
- "google (28 models)"
- "google-vertex (27 models)"
- ...
- "→ Next"
当用户选择"→ Next"时:
  • 页面索引加1
  • 再次调用问答工具,显示下10个提供商
当用户选择"← Previous"时:
  • 页面索引减1
  • 再次调用问答工具,显示上10个提供商
当用户选择某个提供商时:
  • 保存选中的提供商名称
  • 保存提供商数据中的
    has_sub_providers
    标记
  • 进入步骤3

Step 3: Check Provider Hierarchy

步骤3:检查提供商层级

After provider selection, run the script to check if the provider has sub-providers:
bash
node <skill-dir>/scripts/select-models.cjs --provider "provider-name"
Returns one of two JSON structures:
A. For flat providers (2-level flow):
json
{
  "provider": "openai",
  "model_count": 5,
  "models": ["gpt-4", "gpt-3.5-turbo", ...]
}
  • models
    array present → Proceed to Step 5 (2-level flow)
B. For hierarchical providers (3-level flow):
json
{
  "provider": "synthetic",
  "has_sub_providers": true,
  "sub_provider_count": 3,
  "sub_providers": [
    {"name": "deepseek-ai", "model_count": 5, "sample_models": "..."},
    {"name": "nvidia", "model_count": 4, "sample_models": "..."},
    ...
  ]
}
  • has_sub_providers: true
    → Proceed to Step 4 (3-level flow)
  • Save the
    sub_providers
    array for the next step
选择提供商后,运行脚本检查该提供商是否有子提供商:
bash
node <skill-dir>/scripts/select-models.cjs --provider "provider-name"
返回以下两种JSON结构之一:
A. 扁平提供商(2级流程):
json
{
  "provider": "openai",
  "model_count": 5,
  "models": ["gpt-4", "gpt-3.5-turbo", ...]
}
  • 存在
    models
    数组 → 进入步骤5(2级流程)
B. 层级提供商(3级流程):
json
{
  "provider": "synthetic",
  "has_sub_providers": true,
  "sub_provider_count": 3,
  "sub_providers": [
    {"name": "deepseek-ai", "model_count": 5, "sample_models": "..."},
    {"name": "nvidia", "model_count": 4, "sample_models": "..."},
    ...
  ]
}
  • has_sub_providers: true
    → 进入步骤4(3级流程)
  • 保存
    sub_providers
    数组供下一步使用

Step 4: Sub-Provider Selection (3-level flow only)

步骤4:子提供商选择(仅3级流程)

Only for hierarchical providers. Use the question tool with paginated options. Show 10 sub-providers per page.
Breadcrumb format:
Provider: {name} > Select a sub-provider (page X/Y, showing A-B of M)
Example for page 0:
question: "Provider: synthetic > Select a sub-provider (page 1/1, showing 1-3 of 3):"
Options:
- "deepseek-ai (5 models)"
- "nvidia (4 models)"
- "perplexity-ai (3 models)"
- "← Back"
Navigation:
  • "→ Next"
    /
    "← Previous"
    - standard pagination
  • "← Back"
    - returns to provider selection (Step 2), preserves
    provider_page
When user selects a sub-provider:
  • Save the selected sub-provider name
  • Proceed to Step 5
仅适用于层级提供商。 使用带分页选项的问答工具。每页显示10个子提供商。
面包屑格式:
提供商:{name} > 选择子提供商(第X/Y页,显示第A-B个,共M个)
第0页示例:
question: "提供商:synthetic > 选择子提供商(第1/1页,显示第1-3个,共3个):"
选项:
- "deepseek-ai (5 models)"
- "nvidia (4 models)"
- "perplexity-ai (3 models)"
- "← Back"
导航:
  • "→ Next"
    /
    "← Previous"
    - 标准分页
  • "← Back"
    - 返回提供商选择(步骤2),保留
    provider_page
当用户选择某个子提供商时:
  • 保存选中的子提供商名称
  • 进入步骤5

Step 5: Model Selection

步骤5:模型选择

For 2-level flow: Use models from Step 3 response
For 3-level flow: Run the script with both provider and sub-provider:
bash
node <skill-dir>/scripts/select-models.cjs --provider "provider-name" --sub-provider "sub-provider-name"
Returns JSON:
json
{
  "provider": "synthetic",
  "sub_provider": "deepseek-ai",
  "model_count": 5,
  "models": ["DeepSeek-R1", "DeepSeek-V3", ...]
}
Pagination: Show 15 models per page.
Breadcrumb format varies by flow:
  • 2-level:
    Provider: {name} > Select a model (page X/Y, showing A-B of M)
  • 3-level:
    Provider: {p} > Sub-provider: {sp} > Select a model (page X/Y, showing A-B of M)
Example for 2-level flow (page 0):
question: "Provider: openai > Select a model (page 1/1, showing 1-5 of 5):"
Options:
- "gpt-4"
- "gpt-3.5-turbo"
- "..."
- "← Back"
Example for 3-level flow (page 0):
question: "Provider: synthetic > Sub-provider: deepseek-ai > Select a model (page 1/1, showing 1-5 of 5):"
Options:
- "DeepSeek-R1"
- "DeepSeek-V3"
- "..."
- "← Back"
Navigation:
  • "→ Next"
    /
    "← Previous"
    - standard pagination
  • "← Back"
    - returns to provider selection (2-level) or sub-provider selection (3-level)
When user selects a model:
  • Return the full model ID:
    • 2-level:
      provider/model-name
    • 3-level:
      provider/sub-provider/model-name
2级流程: 使用步骤3返回的模型列表
3级流程: 同时传入提供商和子提供商参数运行脚本:
bash
node <skill-dir>/scripts/select-models.cjs --provider "provider-name" --sub-provider "sub-provider-name"
返回JSON格式结果:
json
{
  "provider": "synthetic",
  "sub_provider": "deepseek-ai",
  "model_count": 5,
  "models": ["DeepSeek-R1", "DeepSeek-V3", ...]
}
分页: 每页显示15个模型。
面包屑格式因流程而异:
  • 2级:
    提供商:{name} > 选择模型(第X/Y页,显示第A-B个,共M个)
  • 3级:
    提供商:{p} > 子提供商:{sp} > 选择模型(第X/Y页,显示第A-B个,共M个)
2级流程第0页示例:
question: "提供商:openai > 选择模型(第1/1页,显示第1-5个,共5个):"
选项:
- "gpt-4"
- "gpt-3.5-turbo"
- "..."
- "← Back"
3级流程第0页示例:
question: "提供商:synthetic > 子提供商:deepseek-ai > 选择模型(第1/1页,显示第1-5个,共5个):"
选项:
- "DeepSeek-R1"
- "DeepSeek-V3"
- "..."
- "← Back"
导航:
  • "→ Next"
    /
    "← Previous"
    - 标准分页
  • "← Back"
    - 返回提供商选择(2级)或子提供商选择(3级)
当用户选择某个模型时:
  • 返回完整模型ID:
    • 2级:
      provider/model-name
    • 3级:
      provider/sub-provider/model-name

Breadcrumb Navigation

面包屑导航

Breadcrumbs appear in the question header to orient the user at each selection level.
面包屑会显示在问题标题中,帮助用户明确当前选择层级。

Breadcrumb Formats

面包屑格式

LevelFormatExample
Provider selection
Select a provider (page X/Y, showing A-B of M)
"Select a provider (page 1/3, showing 1-10 of 25)"
Sub-provider selection (3-level)
Provider: {name} > Select a sub-provider (page X/Y, showing A-B of M)
"Provider: synthetic > Select a sub-provider (page 1/2, showing 1-10 of 15)"
Model selection (2-level)
Provider: {name} > Select a model (page X/Y, showing A-B of M)
"Provider: openai > Select a model (page 1/1, showing 1-5 of 5)"
Model selection (3-level)
Provider: {p} > Sub-provider: {sp} > Select a model (page X/Y, showing A-B of M)
"Provider: synthetic > Sub-provider: deepseek-ai > Select a model (page 1/1, showing 1-5 of 5)"
层级格式示例
提供商选择
选择提供商(第X/Y页,显示第A-B个,共M个)
"选择提供商(第1/3页,显示第1-10个,共25个)"
子提供商选择(3级)
提供商:{name} > 选择子提供商(第X/Y页,显示第A-B个,共M个)
"提供商:synthetic > 选择子提供商(第1/2页,显示第1-10个,共15个)"
模型选择(2级)
提供商:{name} > 选择模型(第X/Y页,显示第A-B个,共M个)
"提供商:openai > 选择模型(第1/1页,显示第1-5个,共5个)"
模型选择(3级)
提供商:{p} > 子提供商:{sp} > 选择模型(第X/Y页,显示第A-B个,共M个)
"提供商:synthetic > 子提供商:deepseek-ai > 选择模型(第1/1页,显示第1-5个,共5个)"

Implementation Notes

实现说明

  • Separator: Use
    " > "
    (space-angle-space) between levels for readability
  • Current context: Always show the selected provider/sub-provider name to orient the user
  • Page info: Include
    (page X/Y, showing A-B of M)
    at the end of the breadcrumb
  • Internal vs display: Page indices are 0-based internally, displayed as 1-based to users
  • 分隔符: 使用
    " > "
    (空格-大于号-空格)分隔层级,提升可读性
  • 当前上下文: 始终显示已选的提供商/子提供商名称,帮助用户定位
  • 页面信息: 在面包屑末尾包含
    (第X/Y页,显示第A-B个,共M个)
  • 内部与显示: 页面索引内部从0开始,向用户展示时从1开始

Navigation and State Management

导航与状态管理

"← Back" Navigation

"← Back" 导航

The
"← Back"
option allows users to return to previous levels:
Current Level"← Back" Goes ToState Preserved
Sub-provider selectionProvider selection
provider_page
Model selection (2-level)Provider selection
provider_page
Model selection (3-level)Sub-provider selection
sub_provider_page
,
provider_page
"← Back"
选项允许用户返回上一层级:
当前层级"← Back" 返回至保留状态
子提供商选择提供商选择
provider_page
模型选择(2级)提供商选择
provider_page
模型选择(3级)子提供商选择
sub_provider_page
,
provider_page

State Variables to Track

需要跟踪的状态变量

Maintain these variables at the conversation level:
VariableTypeDescription
provider_page
number (0-based)Current provider page index
sub_provider_page
number (0-based)Current sub-provider page index (3-level only)
model_page
number (0-based)Current model page index
selected_provider
stringName of the selected provider (for breadcrumbs)
selected_sub_provider
stringName of the selected sub-provider (3-level only)
has_sub_providers
booleanWhether the selected provider is hierarchical
在对话级别维护以下变量:
变量类型描述
provider_page
数字(从0开始)当前提供商页面索引
sub_provider_page
数字(从0开始)当前子提供商页面索引(仅3级流程)
model_page
数字(从0开始)当前模型页面索引
selected_provider
字符串已选提供商名称(用于面包屑)
selected_sub_provider
字符串已选子提供商名称(仅3级流程)
has_sub_providers
布尔值已选提供商是否为层级结构

Pagination State Preservation

分页状态保留

When navigating back, preserve the page index so the user returns to the same page they were on:
  • Sub-provider → Provider:
    provider_page
    is preserved; user sees the same provider list page
  • Models → Sub-provider (3-level):
    sub_provider_page
    is preserved; user sees the same sub-provider list page
  • Models → Provider (2-level):
    provider_page
    is preserved; user sees the same provider list page
Implementation: Store page indices before navigating to the next level, restore when user selects
"← Back"
.
返回上一层级时,保留页面索引,使用户回到之前所在的页面:
  • 子提供商 → 提供商: 保留
    provider_page
    ;用户看到相同的提供商列表页面
  • 模型 → 子提供商(3级): 保留
    sub_provider_page
    ;用户看到相同的子提供商列表页面
  • 模型 → 提供商(2级): 保留
    provider_page
    ;用户看到相同的提供商列表页面
实现: 进入下一层级前保存页面索引,用户选择
"← Back"
时恢复。

Implementation Notes

实现说明

  • Page size: 10 for providers/sub-providers, 15 for models
  • Navigation options: Always show
    "→ Next"
    and/or
    "← Previous"
    at the end of the option list (before
    "← Back"
    in 3-level flows)
  • Page info: Include
    (page X/Y, showing A-B of M)
    in the question header for orientation
  • State persistence: Page indices and selections persist at conversation level
  • Back option:
    "← Back"
    appears as the last option in the question list when not at the top level
  • Type your own: The question tool adds a "Type your own answer" option automatically - users can use this to jump to a specific provider/model by name
  • Return formats:
    • 2-level:
      provider/model
      (e.g.,
      xai/grok-2
      )
    • 3-level:
      provider/sub-provider/model
      (e.g.,
      synthetic/deepseek-ai/DeepSeek-R1
      )
  • Dependencies: The script has no external dependencies (self-contained Node.js)
  • Indices: Page indices are 0-based internally, displayed as 1-based to users
  • 页面大小: 提供商/子提供商每页10个,模型每页15个
  • 导航选项: 始终在选项列表末尾显示
    "→ Next"
    和/或
    "← Previous"
    (3级流程中在
    "← Back"
    之前)
  • 页面信息: 在问题标题中包含
    (第X/Y页,显示第A-B个,共M个)
    以帮助用户定位
  • 状态持久化: 页面索引和选择内容在对话级别持久保存
  • 返回选项: 不在顶级时,
    "← Back"
    作为问题列表的最后一个选项
  • 自定义输入: 问答工具自动添加“输入自定义答案”选项——用户可通过此选项直接跳转到特定提供商/模型
  • 返回格式:
    • 2级:
      provider/model
      (例如:
      xai/grok-2
    • 3级:
      provider/sub-provider/model
      (例如:
      synthetic/deepseek-ai/DeepSeek-R1
  • 依赖: 该脚本无外部依赖(独立Node.js脚本)
  • 索引: 页面索引内部从0开始,向用户展示时从1开始

Example Flows

示例流程

Example 1: 2-Level Flow (Flat Provider)

示例1:2级流程(扁平提供商)

This is the standard flow for providers without sub-providers (e.g., openai, xai, google).
1. LLM: Run select-models --providers-only
2. LLM: question: "Select a provider (page 1/2, showing 1-10 of 15):"
   Options: [google, google-vertex, ..., → Next]
3. User: Selects "→ Next"
4. LLM: question: "Select a provider (page 2/2, showing 11-15 of 15):"
   Options: [← Previous, vercel, xai, zai-coding-plan]
5. User: Selects "xai (22 models)"
6. LLM: Run select-models --provider xai
   Response: {"provider": "xai", "model_count": 22, "models": [...]}
7. LLM: question: "Provider: xai > Select a model (page 1/2, showing 1-15 of 22):"
   Options: [grok-2, grok-2-1212, ..., → Next, ← Back]
8. User: Selects "grok-2"
9. LLM: Returns "Selected model: xai/grok-2"
这是无提供商的标准流程(例如:openai、xai、google)。
1. LLM:运行select-models --providers-only
2. LLM:question: "选择提供商(第1/2页,显示第1-10个,共15个):"
   选项:[google, google-vertex, ..., → Next]
3. 用户:选择"→ Next"
4. LLM:question: "选择提供商(第2/2页,显示第11-15个,共15个):"
   选项:[← Previous, vercel, xai, zai-coding-plan]
5. 用户:选择"xai (22 models)"
6. LLM:运行select-models --provider xai
   响应:{"provider": "xai", "model_count": 22, "models": [...]}
7. LLM:question: "提供商:xai > 选择模型(第1/2页,显示第1-15个,共22个):"
   选项:[grok-2, grok-2-1212, ..., → Next, ← Back]
8. 用户:选择"grok-2"
9. LLM:返回"已选模型:xai/grok-2"

Example 2: 3-Level Flow (Hierarchical Provider) with Back Navigation

示例2:带返回导航的3级流程(层级提供商)

This flow demonstrates hierarchical provider selection with back navigation (e.g., synthetic).
State tracking:
  • provider_page
    = 0,
    selected_provider
    = "synthetic"
  • sub_provider_page
    = 0,
    selected_sub_provider
    = "deepseek-ai"
  • model_page
    = 0
1. LLM: Run select-models --providers-only
   Response includes: {"name": "synthetic", "model_count": 100, "has_sub_providers": true, ...}
2. LLM: question: "Select a provider (page 1/3, showing 1-10 of 25):"
   Options: [google, synthetic (100 models, 12 sub-providers), ..., → Next]
3. User: Selects "synthetic"
   State: provider_page = 0, selected_provider = "synthetic", has_sub_providers = true
4. LLM: Run select-models --provider synthetic
   Response: {"provider": "synthetic", "has_sub_providers": true, "sub_providers": [...]}
5. LLM: question: "Provider: synthetic > Select a sub-provider (page 1/2, showing 1-10 of 12):"
   Options: [deepseek-ai (5 models), nvidia (4 models), ..., → Next, ← Back]
6. User: Selects "deepseek-ai"
   State: sub_provider_page = 0, selected_sub_provider = "deepseek-ai"
7. LLM: Run select-models --provider synthetic --sub-provider deepseek-ai
   Response: {"provider": "synthetic", "sub_provider": "deepseek-ai", "model_count": 5, "models": [...]}
8. LLM: question: "Provider: synthetic > Sub-provider: deepseek-ai > Select a model (page 1/1, showing 1-5 of 5):"
   Options: [DeepSeek-R1, DeepSeek-V3, ..., ← Back]
9. User: Selects "← Back" (wants to choose different sub-provider)
10. LLM: question: "Provider: synthetic > Select a sub-provider (page 1/2, showing 1-10 of 12):"
    Options: [deepseek-ai (5 models), nvidia (4 models), ..., → Next, ← Back]
    (Note: Returns to same page due to preserved sub_provider_page = 0)
11. User: Selects "nvidia"
    State: sub_provider_page = 0 (preserved), selected_sub_provider = "nvidia"
12. LLM: Run select-models --provider synthetic --sub-provider nvidia
13. LLM: question: "Provider: synthetic > Sub-provider: nvidia > Select a model (page 1/1, showing 1-4 of 4):"
    Options: [Llama-3.1-8B, ..., ← Back]
14. User: Selects "Llama-3.1-8B"
15. LLM: Returns "Selected model: synthetic/nvidia/Llama-3.1-8B"
该流程展示带返回导航的层级提供商选择(例如:synthetic)。
状态跟踪:
  • provider_page
    = 0,
    selected_provider
    = "synthetic"
  • sub_provider_page
    = 0,
    selected_sub_provider
    = "deepseek-ai"
  • model_page
    = 0
1. LLM:运行select-models --providers-only
   响应包含:{"name": "synthetic", "model_count": 100, "has_sub_providers": true, ...}
2. LLM:question: "选择提供商(第1/3页,显示第1-10个,共25个):"
   选项:[google, synthetic (100 models, 12 sub-providers), ..., → Next]
3. 用户:选择"synthetic"
   状态:provider_page = 0, selected_provider = "synthetic", has_sub_providers = true
4. LLM:运行select-models --provider synthetic
   响应:{"provider": "synthetic", "has_sub_providers": true, "sub_providers": [...]}
5. LLM:question: "提供商:synthetic > 选择子提供商(第1/2页,显示第1-10个,共12个):"
   选项:[deepseek-ai (5 models), nvidia (4 models), ..., → Next, ← Back]
6. 用户:选择"deepseek-ai"
   状态:sub_provider_page = 0, selected_sub_provider = "deepseek-ai"
7. LLM:运行select-models --provider synthetic --sub-provider deepseek-ai
   响应:{"provider": "synthetic", "sub_provider": "deepseek-ai", "model_count": 5, "models": [...]}
8. LLM:question: "提供商:synthetic > 子提供商:deepseek-ai > 选择模型(第1/1页,显示第1-5个,共5个):"
   选项:[DeepSeek-R1, DeepSeek-V3, ..., ← Back]
9. 用户:选择"← Back"(想要选择其他子提供商)
10. LLM:question: "提供商:synthetic > 选择子提供商(第1/2页,显示第1-10个,共12个):"
    选项:[deepseek-ai (5 models), nvidia (4 models), ..., → Next, ← Back]
    (注:因保留sub_provider_page = 0,返回同一页面)
11. 用户:选择"nvidia"
    状态:sub_provider_page = 0(保留), selected_sub_provider = "nvidia"
12. LLM:运行select-models --provider synthetic --sub-provider nvidia
13. LLM:question: "提供商:synthetic > 子提供商:nvidia > 选择模型(第1/1页,显示第1-4个,共4个):"
    选项:[Llama-3.1-8B, ..., ← Back]
14. 用户:选择"Llama-3.1-8B"
15. LLM:返回"已选模型:synthetic/nvidia/Llama-3.1-8B"

Example 3: Back Navigation from Models to Providers (2-Level)

示例3:从模型选择返回至提供商选择(2级)

Demonstrates state preservation when navigating back in a 2-level flow.
1. LLM: Run select-models --providers-only
2. LLM: question: "Select a provider (page 1/3, showing 1-10 of 28):"
   Options: [google, ..., → Next]
3. User: Selects "→ Next" (twice) to reach page 3
4. LLM: question: "Select a provider (page 3/3, showing 21-28 of 28):"
   Options: [← Previous, xai, zai-coding-plan]
   State: provider_page = 2
5. User: Selects "xai"
6. LLM: Run select-models --provider xai
7. LLM: question: "Provider: xai > Select a model (page 1/2, showing 1-15 of 22):"
   Options: [grok-2, ..., → Next, ← Back]
8. User: Selects "← Back" (wants to choose different provider)
9. LLM: question: "Select a provider (page 3/3, showing 21-28 of 28):"
   Options: [← Previous, xai, zai-coding-plan]
   (Note: Returns to page 3 due to preserved provider_page = 2)
10. User: Selects "zai-coding-plan"
11. LLM: Run select-models --provider zai-coding-plan
12. LLM: Returns "Selected model: zai-coding-plan/plan-1"
展示2级流程中返回导航的状态保留。
1. LLM:运行select-models --providers-only
2. LLM:question: "选择提供商(第1/3页,显示第1-10个,共28个):"
   选项:[google, ..., → Next]
3. 用户:选择"→ Next"两次以到达第3页
4. LLM:question: "选择提供商(第3/3页,显示第21-28个,共28个):"
   选项:[← Previous, xai, zai-coding-plan]
   状态:provider_page = 2
5. 用户:选择"xai"
6. LLM:运行select-models --provider xai
7. LLM:question: "提供商:xai > 选择模型(第1/2页,显示第1-15个,共22个):"
   选项:[grok-2, ..., → Next, ← Back]
8. 用户:选择"← Back"(想要选择其他提供商)
9. LLM:question: "选择提供商(第3/3页,显示第21-28个,共28个):"
   选项:[← Previous, xai, zai-coding-plan]
   (注:因保留provider_page = 2,返回第3页)
10. 用户:选择"zai-coding-plan"
11. LLM:运行select-models --provider zai-coding-plan
12. LLM:返回"已选模型:zai-coding-plan/plan-1"