文档首页/deployment

deployment

English

显式绑定、校验与候选筛选.

如何由其他模块接入

这里的“对外”指仓库内其他 Go 包。Go 的 internal 规则限制了仓库外的直接导入;HTTP 客户端使用已挂载的网关接口。

启动和管理写入时 ValidateDeployment,运行时 Execution/AllowsEndpoint/ResolveHit 再校验当前配置。输入必须明确 model_info.transport 与 endpoint_types,不能只填写供应商和地址。

入口或资源 调用方式与返回结果
ValidateDeployment(model) 错误时拒绝保存或执行
Execution(model) 返回显式绑定传输和 bool
Candidates / DeploymentEndpoints 过滤候选并生成入口视图

接入 demo

将下面代码保存为仓库内的 demo/main.go,在仓库根目录执行 go run ./demo;运行后删除本次创建的 demo 目录。

package main

import (
	"fmt"
	"github.com/sunqirui1987/xhub/internal/config"
	_ "github.com/sunqirui1987/xhub/internal/provider/all"
	"github.com/sunqirui1987/xhub/internal/provider/deployment"
)

// main 演示本页 API 的最小调用;无参数和返回值,打印上述预期结果,依赖与副作用见本页说明。
func main() {
	model := config.ModelEntry{ModelName: "demo-model", LiteLLMParams: map[string]any{"model": "demo-upstream"}, ModelInfo: map[string]any{"transport": "bypass_openai_responses", "endpoint_types": []string{"bypass:openai-responses"}}}
	if err := deployment.ValidateDeployment(model); err != nil {
		panic(err)
	}
	transport, ok := deployment.Execution(model)
	fmt.Println(ok, transport.ID)
}

输出 true bypass_openai_responses;这是协议绑定校验,不测试地址、凭据或网络。

错误、状态与副作用

缺失声明不得从 api_base/custom_llm_provider 猜执行方式。能力符合后仍须检查停用、权限、预算与权重。

源码与验证

代码入口:bindings.go, candidates.go, catalog_binding.go, execution.go, registry.go, validate.go

单元测试与源代码放在一起:bindings_test.go, candidates_test.go, catalog_binding_test.go, endpoint_redesign_test.go, registry_test.go, validate_test.go

go test ./internal/provider/deployment/...

真实后台回归在 cmd/regression,浏览器流程在 frontend/e2e。离线测试使用本地 HTTP 上游,不证明生产凭据或外部厂商服务可用性。

Responses 可选联网搜索

部署元数据 web_search_support 支持 inherit(默认,保留原生 Responses 行为)、 supported(仅原生 Responses 上游)和 unsupported;web_search_fallback 支持 reject(默认)与显式 drop_optional。EncodeDialogue 在候选、预览及执行阶段复用同一策略。 仅移除可选的 Responses web_search/web_search_preview 声明,兼容 Codex additional_tools。 强制搜索和其他不支持的能力仍会拒绝;不执行外部搜索,也不根据模型名称推断能力。 响应头 X-XHub-Dropped-Capabilities: web_search、持久化诊断 dropped_capabilities 和日志详情中的双语提示记录降级。关闭搜索不等于获得联网能力。

输入关键词搜索全文,例如:预算、路由、Docker