Model configuration editor for ~/.pi/agent/models.json with multi-protocol curl testing support.
Resources
1Install
npx skillscat add dwsy/agent/models-config Install via the SkillsCat registry.
We need to produce a 2-3 sentence plain-text summary, objective, factual, no marketing, no superlatives, no calls to action. Must be natural prose, no bullet points, no headings, no markdown. No quotes. At most 60 words. We need to explain what the skill does: Model configuration editor for ~/.pi/agent/models.json with multi-protocol curl testing support. Problem it solves: managing model provider configurations, testing API calls, fetching model price info.
Models Config Skill
功能
编辑和管理 ~/.pi/agent/models.json 配置文件,支持多种 API 协议的测试和验证,以及从 https://models.dev/api.json 自动获取模型价格信息。
配置结构
{
"providers": {
"provider-name": {
"baseUrl": "https://api.example.com",
"apiKey": "sk-xxx",
"api": "anthropic-messages|openai-completions|openai-responses",
"authHeader": true
}
}
}使用方法
基本操作
# 编辑配置文件
bat ~/.pi/agent/models.json
# 验证 JSON 格式
python3 -m json.tool ~/.pi/agent/models.json协议类型
| API 类型 | 用途 | 端点格式 |
|---|---|---|
anthropic-messages |
Claude 消息 API | /v1/messages |
openai-completions |
OpenAI Completions API | /v1/chat/completions |
openai-responses |
OpenAI Responses API | /v1/responses |
测试方法
1. Anthropic Messages API
export ANTHROPIC_BASE_URL=https://api.xairouter.com
export ANTHROPIC_AUTH_TOKEN=sk-XvsJhNdiXcDYA3e5hzD1AJP5ploMAaFuMTUxp3bHRfCiZRNt
curl $ANTHROPIC_BASE_URL/v1/messages \
-H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'2. OpenAI Completions API (Chat)
export OPENAI_BASE_URL=http://127.0.0.1:8317/v1
export OPENAI_API_KEY=proxypal-local
curl $OPENAI_BASE_URL/chat/completions \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "glm-4.7",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Hello"}]
}'3. OpenAI Responses API
export OPENAI_BASE_URL=http://127.0.0.1:8317/v1
export OPENAI_API_KEY=proxypal-local
curl $OPENAI_BASE_URL/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "glm-4.7",
"input": "Hello"
}'4. 简化测试脚本
#!/usr/bin/env bash
# test-model.sh
PROVIDER=$1
BASE_URL=$2
API_KEY=$3
MODEL=$4
echo "Testing $PROVIDER with model $MODEL..."
case "$PROVIDER" in
anthropic)
curl -s "$BASE_URL/v1/messages" \
-H "x-api-key: $API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d "{\"model\":\"$MODEL\",\"max_tokens\":256,\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}" \
| jq .
;;
openai-chat)
curl -s "$BASE_URL/chat/completions" \
-H "Authorization: Bearer $API_KEY" \
-H "content-type: application/json" \
-d "{\"model\":\"$MODEL\",\"max_tokens\":256,\"messages\":[{\"role\":\"user\",\"content\":\"Hi\"}]}" \
| jq .
;;
openai-responses)
curl -s "$BASE_URL/responses" \
-H "Authorization: Bearer $API_KEY" \
-H "content-type: application/json" \
-d "{\"model\":\"$MODEL\",\"input\":\"Hi\"}" \
| jq .
;;
esac使用示例:
# 测试 Anthropic
bash test-model.sh anthropic \
https://api.xairouter.com \
sk-XvsJhNdiXcDYA3e5hzD1AJP5ploMAaFuMTUxp3bHRfCiZRNt \
claude-sonnet-4-5
# 测试 OpenAI Chat
bash test-model.sh openai-chat \
http://127.0.0.1:8317/v1 \
proxypal-local \
glm-4.7常见配置
本地服务 (ProxyPal)
{
"proxypal": {
"baseUrl": "http://127.0.0.1:8317/v1",
"apiKey": "proxypal-local",
"api": "openai-completions",
"authHeader": true
}
}Cloud 服务 (xAIRouter)
{
"xairouter": {
"baseUrl": "https://api.xairouter.com",
"apiKey": "sk-xxx",
"api": "anthropic-messages",
"authHeader": true
}
}Ngrok 隧道
{
"ngrok": {
"baseUrl": "https://xxx.ngrok-free.dev/v1",
"apiKey": "proxypal-local",
"api": "openai-responses",
"authHeader": true
}
}价格更新功能
从 https://models.dev/api.json 获取模型价格并更新到配置文件。
使用方法
# 更新所有模型价格
bun ~/.pi/agent/skills/models-config/update-prices.ts工作原理
- 从 https://models.dev/api.json 获取最新价格数据
- 读取
~/.pi/agent/models.json配置文件 - 按 model ID 智能匹配价格信息
- 更新 cost 字段(input/output/cacheRead/cacheWrite)
- 显示更新摘要
匹配规则
优先级(从高到低):
- 精确匹配:model ID 完全相同
- 标准化匹配:去除前缀、版本号后相同
anthropic/claude-sonnet-4-5→claude-sonnet-4-5claude-sonnet-4-5-20250929→claude-sonnet-4-5
- 模糊匹配:基于 Levenshtein 距离的相似度匹配(≥70%)
- 自动匹配最佳相似度的模型
- 显示匹配相似度百分比
支持的别名映射:
| 你的模型 ID | 匹配到 |
|---|---|
opus4.5 |
claude-opus-4-5 |
claude-sonnet-4-5-20250929 |
claude-sonnet-4-5 |
claude-haiku-4-5-20251001 |
claude-haiku-4-5 |
z-ai/glm4.7 |
glm-4.7 |
minimaxai/minimax-m2.1 |
minimax-m2.1 |
模糊匹配示例
即使你的供应商不在 models.dev 中,只要模型名称相似,也会自动匹配:
bun ~/.pi/agent/skills/models-config/update-prices.ts
# 输出示例:
✓ Updated: claude-sonnet-4-5
Old: {"input":0,"output":0,"cacheRead":0,"cacheWrite":0}
New: {"input":2.6,"output":13,"cacheRead":0.26,"cacheWrite":3.2}
✓ Updated: glm-4.7
Fuzzy matched "glm-4.7" -> "zai-glm-4.7" (85.7% similarity)
Old: {"input":0,"output":0,"cacheRead":0,"cacheWrite":0}
New: {"input":0,"output":0,"cacheRead":0,"cacheWrite":0}
=== Summary ===
Updated: 15 models
Not found: 3 models
Models without price data:
- custom-model-x
- experimental-beta注意事项
baseUrl 格式:
anthropic-messages: 不需要/v1后缀openai-*: 通常需要/v1后缀
认证方式:
- Anthropic:
x-api-keyheader - OpenAI:
Authorization: Bearerheader
- Anthropic:
测试前检查:
- 确认服务端口已启动(如
curl http://127.0.0.1:8317) - 检查 API Key 有效性
- 验证网络连通性
- 确认服务端口已启动(如
价格更新:
- 模糊匹配阈值:70% 相似度
- 匹配成功会显示相似度百分比
- 未匹配的模型会在摘要中列出
- 价格单位:美元/百万 tokens ($/1M tokens)