Conversation
## 变更内容 - Dockerfile: golang:1.25-alpine 多阶段构建,最终镜像 ~10MB - .dockerignore: 排除 .git/docs/vendor 等无关文件 - docker-compose.yml: 端口映射 8080,configs 目录挂载 - K8s deployment/service/configmap/secret 完整部署配置 - /metrics: Prometheus 指标端点 + HTTP 请求计数 ## 测试 - [x] Docker 构建成功 - [x] /health 返回正常 - [x] /ready 返回正常 - [x] /metrics 返回 Prometheus 格式指标 - [x] K8s 部署测试通过"
## Summary 路由增强:多目标路由 + 优先级/权重策略 + 通配符匹配 + 模型映射 ## 改动 **路由核心** - routeYAML 支持 targets 列表和 strategy 字段 - targetYAML 新增 Priority / Weight 字段 - 新增 selectTarget / selectByWeight / matchModel / resolveRoute 方法 - Route() 支持精确匹配 + 通配符两遍扫描 - RouteDecision 新增可选 Model 字段,支持目标模型映射 **管线重构** - executePipeline 统一处理模型覆盖,返回三值 - 提取 resolveAdapter 消除 ExecuteChat / ExecuteChatStream 重复 **日志** - 全项目 log → slog 迁移(main.go / watcher.go / router.go) - 路由选择结构化日志输出 **配置** - routes.yaml 支持 targets + strategy 新格式 - 旧格式 target(单数)向后兼容 - target 和 targets 同时存在时输出 WARN 日志 **文档** - roadmap 更新 P4/P7 状态 - built-in.md 更新 router-yaml 配置说明 - deployment.md 补充 Docker / K8s / Metrics 部署指南
- 修正 NewServer 函数调用,新增 met 参数 - 解决服务器初始化时缺少依赖传递的问题 - 确保监控组件正确集成至服务器实例 - 增强服务器稳定性,防止启动异常
- 添加 ExecuteChat 不同场景的测试,包括成功、认证失败、认证成功、无适配器、路由错误和模型覆盖 - 添加 ExecuteChatStream 流式接口的成功测试 - 添加 Scheduler 的 ReloadManager 重新加载管理器后的行为测试 - 添加 router 包的单元测试,包括模型匹配、目标选择策略和路由端到端测试 - 实现 testutil 包中 MockRouter、MockAdapter 和 MockAuthenticator 的模拟实现,便于测试依赖注入 - 确保所有测试用例覆盖主要逻辑分支及异常情况,提高代码质量和稳定性
- 使用http.Server结构体启动HTTP服务 - 监听系统中断信号实现优雅关闭 - 在关闭时设置10秒的超时上下文 - 添加日志记录服务启动、关闭及异常信息 - 启动服务与信号监听在独立协程中运行
- 新增 Guard、PreProcessor、PostProcessor 三个插件接口,拓展插件类型支持 - 定义 PipelineContext 贯穿插件管线各阶段信息传递 - 插件管理器支持守卫、预处理器与后置处理器插件的注册与管理 - 插件加载器新增对 guard、preprocessor、postprocessor 类型插件的加载与日志区分 - 调度器执行流程改为鉴权 → 守卫 → 预处理 → 路由 → 适配 → 后置处理的管线顺序 - 适配器调用前后新增预处理与后置处理钩子,支持插件对请求和响应的修改 - 在启动命令行输出插件加载摘要,显示包括新插件类型的状态信息 - 新增提示注入插件 prompt-injector,支持在请求消息最前面注入系统提示语 - 配置文件示例添加 prompt-injector 插件的定义及默认系统提示配置
- 将插件加载拆分为 loadPlugin 和 registerPlugin 两个函数,将 loadPlugin 的圈复杂度从 16 降到 8 - registerPlugin 根据插件类型注册到管理器中 - 增加类型断言错误处理,确保插件类型正确 - 删除重复或无效的调试日志代码 - 统一插件加载成功时的日志输出格式
- 新增 ErrCode 类型及多种错误码常量,增强错误处理统一性 - 新增 NewPluginError 创建结构化插件错误的辅助函数 - 扩展 Plugin 接口,新增 Guard、PreProcessor、PostProcessor、StreamPostProcessor 等多种插件接口 - 新增 FailMode 类型及多种失败策略,支持插件故障时不同的容错行为 - 引入 PluginDescriptor 类型及 Describable 接口,实现插件元信息描述和优先级、超时配置 - 实现 Describe 函数以便统一获取插件描述符 - 扩展注册机制,支持插件工厂函数注册及按名称创建插件实例 - 为 ChatRequest 新增 CopyChatRequest 函数,支持请求深拷贝以保证预处理安全 - PipelineContext 增加 TraceID 字段及相关上下文注入和提取函数,支持全链路请求追踪 - 主程序启动、配置管理中新增 manifest.json 生成功能,用以聚合插件描述信息 - 新增丰富的插件开发文档和内置插件说明文档,完善开发者指导 - 配置文件 plugins.yaml 更新,支持插件优先级配置 - 各处代码结构优化,改进注释与代码风格,提升代码易读性和维护性
- 新增 ErrCode 类型及多种错误码常量,增强错误处理统一性 - 新增 NewPluginError 创建结构化插件错误的辅助函数 - 扩展 Plugin 接口,新增 Guard、PreProcessor、PostProcessor、StreamPostProcessor 等多种插件接口 - 新增 FailMode 类型及多种失败策略,支持插件故障时不同的容错行为 - 引入 PluginDescriptor 类型及 Describable 接口,实现插件元信息描述和优先级、超时配置 - 实现 Describe 函数以便统一获取插件描述符 - 扩展注册机制,支持插件工厂函数注册及按名称创建插件实例 - 为 ChatRequest 新增 CopyChatRequest 函数,支持请求深拷贝以保证预处理安全 - PipelineContext 增加 TraceID 字段及相关上下文注入和提取函数,支持全链路请求追踪 - 主程序启动、配置管理中新增 manifest.json 生成功能,用以聚合插件描述信息 - 新增丰富的插件开发文档和内置插件说明文档,完善开发者指导 - 配置文件 plugins.yaml 更新,支持插件优先级配置 - 各处代码结构优化,改进注释与代码风格,提升代码易读性和维护性
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PluginDescriptor/Describable),支持优先级、失败策略、超时、配置 SchemaStreamPostProcessor接口,支持流式响应后处理manifest.jsonSTRAIT_CORS_ORIGINS环境变量docs/en/+docs/zh/)插件系统
api.PluginDescriptor— 插件元信息描述(ID、类型、优先级、失败策略、超时、配置 Schema)api.Describable— 可选接口,插件实现Descriptor()声明自身api.FailMode— strict / skip / fallback 三种失败策略,由调度器统一处理api.StreamPostProcessor— 流式后处理接口,直接操作StreamChunkchannelapi.CopyChatRequest()— 管线入口深拷贝请求,预处理器修改不影响原始 payloadapi.WithTraceID()/api.TraceIDFrom()— TraceID 全链路上下文传递api.NewPluginError()+ErrCode常量 — 结构化错误处理priority/fail_modeYAML 配置覆盖 +DefaultConfig合并管线执行
pipelineStep统一 Guard / Pre / Post 的执行模型executeSteps()支持单插件超时(context.WithTimeout)和上下文取消检测wrapStreamPostProcess)Manager.Sort()按优先级排序所有插件Manager.Manifest()汇总已加载插件描述符服务端
STRAIT_CORS_ORIGINS配置允许来源StreamChunk.Err错误传播manifest.json文档
docs/en/+docs/zh/双语目录,每个文档含语言切换头docs/comparison.md(Strait vs LiteLLM / Kong)LICENSE文件(Apache 2.0)examples/failover-routing/加权路由示例Test plan
go build ./cmd/strait/编译通过go test ./internal/plugin/全部通过manifest.json生成正确plugins.yaml验证热重载 + manifest 重新生成docs/en/和docs/zh/文档链接正确