* feat(image): 图片参数 - 统一插件声明配置与生成合同 * docs(image): 图片参数 - 说明声明合同与验证边界 * fix(plugins): 图片声明 - 保留内联素材支持并同步制品文档 * fix(image): 参数合同 - 对齐审批意图和尺寸预检调用方 * fix(image): 调用链 - 保留公开意图并接通独立分辨率 * fix(image): 图片参数 - 补齐分辨率接线与目录价格投影
37 lines
1.4 KiB
TypeScript
37 lines
1.4 KiB
TypeScript
import { ChoiceBrowser } from "./choice-browser";
|
|
import type { ModelProtocolDefinition, ProtocolCapability } from "@/lib/model-protocols";
|
|
|
|
export function ModelProtocolBrowser({
|
|
capability,
|
|
protocols,
|
|
...props
|
|
}: {
|
|
capability?: ProtocolCapability;
|
|
protocols: ModelProtocolDefinition[];
|
|
value?: string;
|
|
onChange?: (value: string) => void;
|
|
loading?: boolean;
|
|
error?: string;
|
|
disabled?: boolean;
|
|
id?: string;
|
|
}) {
|
|
const options = protocols
|
|
.filter((protocol) => (!capability || protocol.capability === capability) && protocol.enabled !== false)
|
|
.map((protocol) => ({
|
|
value: protocol.value,
|
|
label: protocol.label,
|
|
subtitle: protocol.create,
|
|
vendor: protocol.vendor,
|
|
searchText: protocol.value,
|
|
details: [
|
|
{ label: "请求", value: <code>{protocol.create}</code> },
|
|
{ label: "请求体", value: protocol.contentType },
|
|
{ label: "响应", value: protocol.poll ? "异步轮询" : "同步响应" },
|
|
{ label: "来源", value: protocol.media },
|
|
...(protocol.imageParameters ? [{ label: "图片参数", value: protocol.imageParameters.map((p) => p.label).join("、") }] : []),
|
|
],
|
|
}));
|
|
|
|
return <ChoiceBrowser key={capability || "all"} {...props} label="调用协议" placeholder="搜索协议名称、厂商或请求路径" options={options} />;
|
|
}
|