feat: 添加vLLM适配器、修复SSE流式输出和中间件问题
CI / lint (push) Has been cancelled
CI / test (push) Has been cancelled
CI / build (push) Has been cancelled
CI / security-scan (push) Has been cancelled

- 新增 vLLM 适配器 (internal/adapter/vllm.go),支持 OpenAI 兼容 API
- 修复 responseWriter 未实现 http.Flusher 导致 SSE 流式输出 500 错误
- 调整中间件顺序:BodyLimit 移至 Auth 之前,提前拒绝超大请求
- BodyLimit 增强:检查 Content-Length header
- 导出 Server.Authenticator() 方法供测试使用
- 配置更新:使用本地 deepseek-r1:1.5b 模型,新增 vllm-chat 逻辑模型
- 修复 handlers.go 中未使用的 target 参数 lint 警告
This commit is contained in:
freedakgmail
2026-08-03 07:52:50 +08:00
parent 93a469061d
commit 63eec59773
5 changed files with 331 additions and 4 deletions
+2 -2
View File
@@ -122,7 +122,7 @@ func (s *Server) handleChatCompletions(w http.ResponseWriter, r *http.Request) {
}
}
func (s *Server) handleStreaming(w http.ResponseWriter, r *http.Request, adapterInst adapter.ModelAdapter, req *adapter.ChatRequest, tk *task.Task, requestID string, target *router.ModelTarget, logicalModel string) {
func (s *Server) handleStreaming(w http.ResponseWriter, r *http.Request, adapterInst adapter.ModelAdapter, req *adapter.ChatRequest, tk *task.Task, requestID string, _ *router.ModelTarget, logicalModel string) {
sse := handler.NewSSEWriter(w)
if sse == nil {
s.scheduler.Complete(tk.ID)
@@ -158,7 +158,7 @@ func (s *Server) handleStreaming(w http.ResponseWriter, r *http.Request, adapter
s.metrics.IncRequest("stream_ok")
}
func (s *Server) handleNonStreaming(w http.ResponseWriter, r *http.Request, adapterInst adapter.ModelAdapter, req *adapter.ChatRequest, tk *task.Task, requestID string, target *router.ModelTarget, logicalModel string) {
func (s *Server) handleNonStreaming(w http.ResponseWriter, r *http.Request, adapterInst adapter.ModelAdapter, req *adapter.ChatRequest, tk *task.Task, requestID string, _ *router.ModelTarget, logicalModel string) {
ctx, cancel := context.WithTimeout(r.Context(), time.Duration(s.cfg.Timeouts.DefaultInferenceMs)*time.Millisecond)
defer cancel()
+2
View File
@@ -68,6 +68,8 @@ func New(cfg *config.Config, logger *observability.Logger) (*Server, error) {
switch mc.Provider {
case "ollama":
registry.Register(mc.Provider, adapter.NewOllamaAdapter(mc.Endpoint))
case "vllm":
registry.Register(mc.Provider, adapter.NewVLLMAdapter(mc.Endpoint))
}
registered[key] = true
}