diff --git a/core/http/routes/localai.go b/core/http/routes/localai.go index 32e030bf3..f7db61b0e 100644 --- a/core/http/routes/localai.go +++ b/core/http/routes/localai.go @@ -137,7 +137,8 @@ func RegisterLocalAIRoutes(router *echo.Echo, requestExtractor.BuildFilteredFirstAvailableDefaultModel(config.BuildUsecaseFilterFn(config.FLAG_TOKENIZE)), requestExtractor.SetModelAndConfig(func() schema.LocalAIRequest { return new(schema.TokenizeRequest) })) - // MCP Stream endpoint + // MCP endpoint - supports both streaming and non-streaming modes + // Note: These are the canonical MCP routes (not duplicated in openai.go) if evaluator != nil { mcpStreamHandler := localai.MCPStreamEndpoint(cl, ml, evaluator, appConfig) mcpStreamMiddleware := []echo.MiddlewareFunc{ @@ -154,6 +155,7 @@ func RegisterLocalAIRoutes(router *echo.Echo, } router.POST("/v1/mcp/chat/completions", mcpStreamHandler, mcpStreamMiddleware...) router.POST("/mcp/v1/chat/completions", mcpStreamHandler, mcpStreamMiddleware...) + router.POST("/mcp/chat/completions", mcpStreamHandler, mcpStreamMiddleware...) } // Agent job routes diff --git a/core/http/routes/openai.go b/core/http/routes/openai.go index 93fed71db..e61e48a05 100644 --- a/core/http/routes/openai.go +++ b/core/http/routes/openai.go @@ -79,23 +79,8 @@ func RegisterOpenAIRoutes(app *echo.Echo, app.POST("/completions", completionHandler, completionMiddleware...) app.POST("/v1/engines/:model/completions", completionHandler, completionMiddleware...) - // MCPcompletion - mcpCompletionHandler := openai.MCPCompletionEndpoint(application.ModelConfigLoader(), application.ModelLoader(), application.TemplatesEvaluator(), application.ApplicationConfig()) - mcpCompletionMiddleware := []echo.MiddlewareFunc{ - traceMiddleware, - re.BuildFilteredFirstAvailableDefaultModel(config.BuildUsecaseFilterFn(config.FLAG_CHAT)), - re.SetModelAndConfig(func() schema.LocalAIRequest { return new(schema.OpenAIRequest) }), - func(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - if err := re.SetOpenAIRequest(c); err != nil { - return err - } - return next(c) - } - }, - } - app.POST("/mcp/v1/chat/completions", mcpCompletionHandler, mcpCompletionMiddleware...) - app.POST("/mcp/chat/completions", mcpCompletionHandler, mcpCompletionMiddleware...) + // Note: MCP endpoints are registered in localai.go to avoid route conflicts + // The localai.MCPStreamEndpoint handler supports both streaming and non-streaming modes // embeddings embeddingHandler := openai.EmbeddingsEndpoint(application.ModelConfigLoader(), application.ModelLoader(), application.ApplicationConfig()) diff --git a/core/http/routes/ui_api.go b/core/http/routes/ui_api.go index 84af2e32f..78b19468f 100644 --- a/core/http/routes/ui_api.go +++ b/core/http/routes/ui_api.go @@ -954,7 +954,7 @@ func RegisterUIAPIRoutes(app *echo.Echo, cl *config.ModelConfigLoader, ml *model if !appConfig.EnableTracing { return c.JSON(503, map[string]any{ "error": "Tracing disabled", - }) + }) } traces := middleware.GetTraces() return c.JSON(200, map[string]interface{}{