能力
能力是 Application 与 Provider 用来就一次请求能做什么达成一致的契约。协议把 Chat、Tools、Images、Reasoning 和结构化输出定义为命名能力;Application 声明它需要什么,Provider 声明每个模型支持什么。Bricoop 把两者取交集,使请求只在模型确实能服务它时才运行。
声明能力
Provider 通过 models[].kind 和 models[].capabilities.* 声明其模型支持什么;一个 kind: chat 且 capabilities.tools: true 的条目表示该模型接受 tool 调用。Application 通过其模型槽位和能力标志声明它需要什么;一个发起 tool 调用的槽位声明 Tools 能力。Bricoop 读取两边的声明,只有当所有必需能力都存在时才把模型提供给 Application。
协商
当用户为某个槽位选择模型时,Bricoop 通过把 Application 必需的能力与模型支持的能力取交集来协商。如果每个必需能力都存在,就提供该模型;如果缺少任何一个,就隐藏该模型或加以标记。协商在选择时发生,而不是在请求时,所以用户从不会在发送消息后看到“模型无法做这件事”的错误。
不可用的能力
不支持的请求会被明确拒绝,并显示一个清晰的“不支持的能力”错误,指出缺少哪个能力。Bricoop 从不会静默降级请求,从不会为了凑合而剥离 tool 调用,也从不会把缺少能力视为 Application 与 Provider 之间的配对不兼容。如果用户需要该能力,就选择一个支持它的模型;Application 与 Provider 本身仍然兼容。