execution:适配与原生请求的生命周期编排
如何由其他模块接入
这里的“对外”指仓库内其他 Go 包。Go 的 internal 规则限制了仓库外的直接导入;HTTP 客户端使用已挂载的网关接口。
HTTP 入口交给 Serve 或 ServeBypass;宿主实现 contract.Adapted/Bypass,提供鉴权、配额、HTTP、凭据、状态和结算。执行器按一次请求生命周期协调这些能力,不由调用方零散补做。
| 入口或资源 | 调用方式与返回结果 |
|---|---|
| Serve(host,w,r,op) | 统一适配入口 |
| ServeBypass(host,w,r,hit) | 已匹配原生动作入口 |
接入 demo
先运行完整网关,配置 demo-model 指向本地模拟上游,设置具有模型调用权限的 XHUB_DEMO_TOKEN。真实宿主见 gateway/wire.go。
在仓库根目录执行以下命令。
curl -sS -i "http://localhost:4000/v1/responses" \
-H "Authorization: Bearer $XHUB_DEMO_TOKEN" \
-H "Content-Type: application/json" \
--data '{"model":"demo-model","input":"Hello","stream":false}'本地模拟上游可返回 response 对象;HTTP 失败时检查 error。实际模型必须支持 responses,此示例可能产生推理调用。
错误、状态与副作用
错误响应、超时、重试、计费与流终态必须一起处理;输出流后不能换源拼接,未知任务创建结果不能自动重放。
职责
适配与原生请求的生命周期编排。不做控制台 CRUD,不直接访问 PostgreSQL 或 Redis。重试、失败计费与成功终态需一起审核。
Review 顺序
serve.go: Serve → official.go: ServeBypass
先读消费方接口或输入契约,再沿入口阅读辅助函数及旁边的单元测试;涉及请求生命周期时检查上层调用方。
依赖
contract 注入身份、配额、凭据、HTTP、记账;routing、dialogue、transport、stream、usage、diagnostics 执行专门职责。
验证
同目录测试:bypass_logic_test.go, cache_scope_test.go, capability_test.go, endpoint_redesign_test.go, failure_log_test.go, fal_test.go, fallback_boundary_test.go, fallback_test.go, native_bypass_test.go, official_settlement_test.go, official_template_test.go, qiniu_live_test.go, route_diagnostic_test.go, stream_failure_regression_test.go, task_status_test.go, usage_stream_test.go
仓库根目录执行:go test ./internal/dataplane/execution -count=1
真实 HTTP/持久化契约放 cmd/regression;浏览器 → 网关 → 本地上游流程放 frontend/e2e。测试清理私有 schema 与临时夹具;离线测试不假设有付费供应商凭据。