package router import ( "net/http" "ai-platform/internal/config" "ai-platform/internal/handler" "ai-platform/internal/service" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" ) func New(cfg *config.Config) http.Handler { r := chi.NewRouter() r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.RequestID) // Инициализация сервисов ollamaClient := service.NewOllamaClient(cfg.OllamaURL, cfg.NumCtx) llmRouter := service.NewRouter(ollamaClient, cfg) proxyHandler := handler.NewProxyHandler(ollamaClient, llmRouter) // Health check — без авторизации r.Get("/health", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) w.Write([]byte(`{"status":"ok"}`)) }) // Ollama API — с проверкой токена r.Group(func(r chi.Router) { r.Use(handler.TokenAuth(cfg.AuthToken)) // Ollama API r.Post("/api/chat", proxyHandler.HandleChat) r.Post("/api/generate", proxyHandler.HandleGenerate) r.Get("/api/tags", proxyHandler.HandleTags) // OpenAI-совместимый API (для Codex CLI и других клиентов) r.Post("/v1/chat/completions", proxyHandler.HandleChatV1) r.Get("/v1/models", proxyHandler.HandleModelsV1) // Responses API — используется Codex CLI r.Post("/responses", proxyHandler.HandleResponses) r.Post("/v1/responses", proxyHandler.HandleResponses) r.Get("/responses", proxyHandler.HandleGetResponse) r.Get("/responses/{id}", proxyHandler.HandleGetResponse) r.Get("/v1/responses/{id}", proxyHandler.HandleGetResponse) }) return r }