gsd-oc-select-model
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSelect 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.cjsRun with:
bash
node <skill-dir>/scripts/select-models.cjs [options]Where is the installation directory of this skill.
<skill-dir>该脚本随此Skill捆绑在以下路径:
scripts/select-models.cjs运行方式:
bash
node <skill-dir>/scripts/select-models.cjs [options]其中是该Skill的安装目录。
<skill-dir>Workflow
工作流
Step 1: Get Providers
步骤1:获取提供商列表
Run the script with to get the list of providers:
--providers-onlybash
node <skill-dir>/scripts/select-models.cjs --providers-onlyReturns JSON:
json
{
"provider_count": N,
"providers": [
{"name": "...", "model_count": N, "sample_models": "...", "has_sub_providers": true|false}
]
}Key field: - indicates if this provider has a hierarchical structure (3-level) or flat structure (2-level).
has_sub_providers使用参数运行脚本以获取提供商列表:
--providers-onlybash
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}
]
}关键字段: - 表示该提供商是否具有层级结构(3级)或扁平结构(2级)。
has_sub_providersStep 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:
- - to go to next page (include when not on last page)
"→ Next" - - to go to previous page (include when not on first page)
"← Previous"
- 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 flag from the provider data
has_sub_providers - 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", ...]
}- array present → Proceed to Step 5 (2-level flow)
models
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": "..."},
...
]
}- → Proceed to Step 4 (3-level flow)
has_sub_providers: true - Save the array for the next step
sub_providers
选择提供商后,运行脚本检查该提供商是否有子提供商:
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", ...]
}- 存在数组 → 进入步骤5(2级流程)
models
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": "..."},
...
]
}- → 进入步骤4(3级流程)
has_sub_providers: true - 保存数组供下一步使用
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"- standard pagination"← Previous" - - returns to provider selection (Step 2), preserves
"← Back"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" - - 返回提供商选择(步骤2),保留
"← Back"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"- standard pagination"← Previous" - - returns to provider selection (2-level) or sub-provider selection (3-level)
"← Back"
When user selects a model:
- Return the full model ID:
- 2-level:
provider/model-name - 3-level:
provider/sub-provider/model-name
- 2-level:
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" - - 返回提供商选择(2级)或子提供商选择(3级)
"← Back"
当用户选择某个模型时:
- 返回完整模型ID:
- 2级:
provider/model-name - 3级:
provider/sub-provider/model-name
- 2级:
Breadcrumb Navigation
面包屑导航
Breadcrumbs appear in the question header to orient the user at each selection level.
面包屑会显示在问题标题中,帮助用户明确当前选择层级。
Breadcrumb Formats
面包屑格式
| Level | Format | Example |
|---|---|---|
| Provider selection | | "Select a provider (page 1/3, showing 1-10 of 25)" |
| Sub-provider selection (3-level) | | "Provider: synthetic > Select a sub-provider (page 1/2, showing 1-10 of 15)" |
| Model selection (2-level) | | "Provider: openai > Select a model (page 1/1, showing 1-5 of 5)" |
| Model selection (3-level) | | "Provider: synthetic > Sub-provider: deepseek-ai > Select a model (page 1/1, showing 1-5 of 5)" |
| 层级 | 格式 | 示例 |
|---|---|---|
| 提供商选择 | | "选择提供商(第1/3页,显示第1-10个,共25个)" |
| 子提供商选择(3级) | | "提供商:synthetic > 选择子提供商(第1/2页,显示第1-10个,共15个)" |
| 模型选择(2级) | | "提供商:openai > 选择模型(第1/1页,显示第1-5个,共5个)" |
| 模型选择(3级) | | "提供商: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 at the end of the breadcrumb
(page X/Y, showing A-B of M) - 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 option allows users to return to previous levels:
"← Back"| Current Level | "← Back" Goes To | State Preserved |
|---|---|---|
| Sub-provider selection | Provider selection | |
| Model selection (2-level) | Provider selection | |
| Model selection (3-level) | Sub-provider selection | |
"← Back"| 当前层级 | "← Back" 返回至 | 保留状态 |
|---|---|---|
| 子提供商选择 | 提供商选择 | |
| 模型选择(2级) | 提供商选择 | |
| 模型选择(3级) | 子提供商选择 | |
State Variables to Track
需要跟踪的状态变量
Maintain these variables at the conversation level:
| Variable | Type | Description |
|---|---|---|
| number (0-based) | Current provider page index |
| number (0-based) | Current sub-provider page index (3-level only) |
| number (0-based) | Current model page index |
| string | Name of the selected provider (for breadcrumbs) |
| string | Name of the selected sub-provider (3-level only) |
| boolean | Whether the selected provider is hierarchical |
在对话级别维护以下变量:
| 变量 | 类型 | 描述 |
|---|---|---|
| 数字(从0开始) | 当前提供商页面索引 |
| 数字(从0开始) | 当前子提供商页面索引(仅3级流程) |
| 数字(从0开始) | 当前模型页面索引 |
| 字符串 | 已选提供商名称(用于面包屑) |
| 字符串 | 已选子提供商名称(仅3级流程) |
| 布尔值 | 已选提供商是否为层级结构 |
Pagination State Preservation
分页状态保留
When navigating back, preserve the page index so the user returns to the same page they were on:
- Sub-provider → Provider: is preserved; user sees the same provider list page
provider_page - Models → Sub-provider (3-level): is preserved; user sees the same sub-provider list page
sub_provider_page - Models → Provider (2-level): is preserved; user sees the same provider list page
provider_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 and/or
"→ Next"at the end of the option list (before"← Previous"in 3-level flows)"← Back" - Page info: Include in the question header for orientation
(page X/Y, showing A-B of M) - State persistence: Page indices and selections persist at conversation level
- Back option: appears as the last option in the question list when not at the top level
"← Back" - 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: (e.g.,
provider/model)xai/grok-2 - 3-level: (e.g.,
provider/sub-provider/model)synthetic/deepseek-ai/DeepSeek-R1
- 2-level:
- 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"(3级流程中在"← Previous"之前)"← Back" - 页面信息: 在问题标题中包含以帮助用户定位
(第X/Y页,显示第A-B个,共M个) - 状态持久化: 页面索引和选择内容在对话级别持久保存
- 返回选项: 不在顶级时,作为问题列表的最后一个选项
"← Back" - 自定义输入: 问答工具自动添加“输入自定义答案”选项——用户可通过此选项直接跳转到特定提供商/模型
- 返回格式:
- 2级:(例如:
provider/model)xai/grok-2 - 3级:(例如:
provider/sub-provider/model)synthetic/deepseek-ai/DeepSeek-R1
- 2级:
- 依赖: 该脚本无外部依赖(独立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:
- = 0,
provider_page= "synthetic"selected_provider - = 0,
sub_provider_page= "deepseek-ai"selected_sub_provider - = 0
model_page
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)。
状态跟踪:
- = 0,
provider_page= "synthetic"selected_provider - = 0,
sub_provider_page= "deepseek-ai"selected_sub_provider - = 0
model_page
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"