Loading...
Loading...
Compare original and translation side by side
base_urlmodel| Dimension | Script | Answers |
|---|---|---|
| Availability | | which model IDs work here, with 3-state error classification |
| Request fidelity | | do system prompt / tools / history actually REACH the model? |
| Speed | | TTFT + sustained decode tok/s, thinking-aware |
| Concurrency / stability | | success rate, p50/p90 latency, where it breaks |
| Protocol compliance | | does the Anthropic |
| Quality / use-case regression | | does it pass your accumulated cases? |
base_urlmodel| 维度 | 脚本 | 解决的问题 |
|---|---|---|
| 可用性 | | 哪些模型ID在此端点可用,包含三种状态的错误分类 |
| 请求保真度 | | 系统提示词/工具/对话历史是否真正送达模型? |
| 速度 | | TTFT + 持续解码tok/s,支持思考过程感知 |
| 并发/稳定性 | | 成功率、p50/p90延迟、性能崩溃阈值 |
| 协议合规性 | | 当请求Anthropic的 |
| 质量/用例退化 | | 模型是否能通过您积累的测试用例? |
--check history-replay--output--key-env MY_KEYps~/.llm-eval/--check history-replay--output--key-env MY_KEYps~/.llm-eval/export MY_KEY=sk-... # the key never appears in a command belowexport MY_KEY=sk-... # 密钥绝不会出现在下方的命令中
If the endpoint is Anthropic-Messages-shaped (`/v1/messages`), also run the protocol probe
(below). Pick dimensions by what the user actually asked — don't run all six if they only
asked "is it fast?".
如果端点是Anthropic-Messages格式(`/v1/messages`),还需运行协议探针(如下所示)。根据用户的实际问题选择维度——如果用户只问“它快吗?”,不要运行全部六个维度。uv run --with aiohttp python scripts/availability_probe.py \
--base-url <base> --key-env <ENV> --format both \
--models model-a vendor/model-b @models.txt --output /tmp/avail.jsonno-channelupstream-errorempty-content--max-tokens-previewsome-model[1m][1m]ANTHROPIC_MODEL/v1/modelsuv run --with aiohttp python scripts/availability_probe.py \\
--base-url <base> --key-env <ENV> --format both \\
--models model-a vendor/model-b @models.txt --output /tmp/avail.jsonno-channelupstream-errorempty-content--max-tokens-previewsome-model[1m][1m]ANTHROPIC_MODEL/v1/modelsuv run --with aiohttp python scripts/fidelity_probe.py \
--base-url <base> --model <model> --key-env <ENV> \
--format anthropic --check all --repeat 10 --output /tmp/fidelity.jsonsystemtoolsmultiturnauth--repeatuv run --with aiohttp python scripts/fidelity_probe.py \\
--base-url <base> --model <model> --key-env <ENV> \\
--format anthropic --check all --repeat 10 --output /tmp/fidelity.jsonsystemtoolsmultiturnauth--repeatuv run --with openai python scripts/speed_probe.py \
--base-url <…/v1> --model <model> --key-env <ENV> --mode both --output /tmp/speed.jsonmixeddecodebothreasoning_contentcompletion_tokenscontentcompletion_tokenscompletion_tokens / (total − TTFT)uv run --with openai python scripts/speed_probe.py \\
--base-url <…/v1> --model <model> --key-env <ENV> --mode both --output /tmp/speed.jsonmixeddecodebothreasoning_contentcompletion_tokenscontentcompletion_tokenscompletion_tokens / (total − TTFT)uv run --with aiohttp python scripts/concurrency_probe.py \
--url <full endpoint URL> --model <model> --key-env <ENV> \
--format openai|anthropic --concurrency 10 20 40 60 --output /tmp/conc.json--concurrencytrust_env=Falseforce_closeuv run --with aiohttp python scripts/concurrency_probe.py \\
--url <完整端点URL> --model <model> --key-env <ENV> \\
--format openai|anthropic --concurrency 10 20 40 60 --output /tmp/conc.json--concurrencytrust_env=Falseforce_closeuv run python scripts/protocol_probe.py \
--url <…/v1/messages> --model <model> --key-env <ENV> --check all --repeat 10 --output /tmp/proto.json/v1/messages--check allthinking: {type: enabled}thinking_deltasignature_deltatype: "thinking"--check history-replaypreserve_thinking--repeatfully-implementedintermittent (k/N)not-implementedaccepts-thinking-in-historyrejects-thinking-in-historyinconsistentinconclusiveConnection: closeuv run python scripts/protocol_probe.py \\
--url <…/v1/messages> --model <model> --key-env <ENV> --check all --repeat 10 --output /tmp/proto.json/v1/messages--check allthinking: {type: enabled}thinking_deltasignature_deltatype: "thinking"--check history-replaypreserve_thinking--repeatfully-implementedintermittent (k/N)not-implementedaccepts-thinking-in-historyrejects-thinking-in-historyinconsistentinconclusiveConnection: closeuv run --with openai python scripts/usecase_runner.py \
--base-url <…/v1> --model <model> --key-env <ENV> \
--usecases ~/.llm-eval/usecases.json --output-dir ~/.llm-eval/runs/<model>rubrictagsllm-rubricprovidersuv run --with openai python scripts/usecase_runner.py \\
--base-url <…/v1> --model <model> --key-env <ENV> \\
--usecases ~/.llm-eval/usecases.json --output-dir ~/.llm-eval/runs/<model>rubrictagsllm-rubricproviders~/.llm-eval/usecases.json[
{"id": "refund-window", "prompt": "A customer asks for a refund 20 days after purchase. Reply as support.",
"rubric": "1.0 if it correctly cites the 30-day refund window; 0.0 if it refuses or invents a different window.",
"tags": ["support", "policy"]},
{"id": "lru-cache", "prompt": "Implement an LRU cache in Python with O(1) get/put.",
"rubric": "1.0 if get and put are both O(1) via dict + doubly linked list and the self-test passes.",
"tags": ["code"]}
]assets/example_usecases.jsonidpromptrubricexpectedtags~/.llm-eval/usecases.json[
{"id": "refund-window", "prompt": "A customer asks for a refund 20 days after purchase. Reply as support.",
"rubric": "1.0 if it correctly cites the 30-day refund window; 0.0 if it refuses or invents a different window.",
"tags": ["support", "policy"]},
{"id": "lru-cache", "prompt": "Implement an LRU cache in Python with O(1) get/put.",
"rubric": "1.0 if get and put are both O(1) via dict + doubly linked list and the self-test passes.",
"tags": ["code"]}
]assets/example_usecases.jsonidpromptrubricexpectedtags/v1/chat/completions/v1/messagesGET /v1/models--output/v1/chat/completions/v1/messagesGET /v1/models--outputEvaluation complete for <model>.
Options:
A) Render an HTML dashboard of the results — compose with a visualization skill (Recommended if sharing)
B) Compare against another model — same probes, side-by-side
C) Add the failing cases to ~/.llm-eval/usecases.json as a permanent regression guard
D) Done — the numbers answer the question<model>评估完成。
选项:
A) 渲染结果的HTML仪表盘——与可视化技能组合使用(推荐用于分享)
B) 与另一个模型对比——使用相同探针,并排展示
C) 将失败案例添加到~/.llm-eval/usecases.json中,作为永久的退化防护
D) 完成——数值已解答问题
```",