Show HN:利用声明式能力在编译期验证模型 ID
Show HN: Compile-time model-id validation with declared capability

原始链接: https://github.com/yujonglee/openrouter-toolkit

编译时校验的 OpenRouter 模型 ID。`model_supports!` 宏会根据内置的 OpenRouter 索引校验模型 ID 及其所需功能,并展开为模型 ID 字符串。 ```rust use openrouter_toolkit::model_supports; const MODEL: &str = model_supports!( "openai/gpt-5.4", param::tools, input::image, output::text, ); ``` 动态变体同样适用: ```rust const MODEL: &str = model_supports!("moonshotai/kimi-k2-0905:exacto", param::tools); ``` * `param::*` — 请求参数(例如 `param::tools`) * `input::*` — 输入模态(例如 `input::image`) * `output::*` — 输出模态(例如 `output::text`) 未知功能示例: ```rust const MODEL: &str = model_supports!("qwen/qwen3.7-max", param::toolz); // error: unknown OpenRouter capability `param::toolz`; did you mean `param::tools`? ``` 模型不支持的功能示例: ```rust const MODEL: &str = model_supports!("qwen/qwen3.7-max", input::image); // error: OpenRouter model `qwen/qwen3.7-max` does not support required capability(s): input::image ```

对不起。
相关文章

原文

Compile-time checked OpenRouter model ids.

model_supports! validates a model id and its required capabilities against a vendored OpenRouter index, then expands to the model id string.

use openrouter_toolkit::model_supports;

const MODEL: &str = model_supports!(
    "openai/gpt-5.4",
    param::tools,
    input::image,
    output::text,
);

Dynamic variants work too:

const MODEL: &str = model_supports!("moonshotai/kimi-k2-0905:exacto", param::tools);
  • param::* — request parameters (e.g. param::tools)
  • input::* — input modalities (e.g. input::image)
  • output::* — output modalities (e.g. output::text)

Unknown capability:

const MODEL: &str = model_supports!("qwen/qwen3.7-max", param::toolz);
error: unknown OpenRouter capability `param::toolz`; did you mean `param::tools`?

Capability not supported by the model:

const MODEL: &str = model_supports!("qwen/qwen3.7-max", input::image);
error: OpenRouter model `qwen/qwen3.7-max` does not support required capability(s): input::image
联系我们 contact @ memedata.com