|
@@ -1127,54 +1127,72 @@ func allowedHostsMiddleware(addr net.Addr) gin.HandlerFunc {
|
|
|
}
|
|
|
|
|
|
func (s *Server) GenerateRoutes() http.Handler {
|
|
|
- config := cors.DefaultConfig()
|
|
|
- config.AllowWildcard = true
|
|
|
- config.AllowBrowserExtensions = true
|
|
|
- config.AllowHeaders = []string{"Authorization", "Content-Type", "User-Agent", "Accept", "X-Requested-With"}
|
|
|
- openAIProperties := []string{"lang", "package-version", "os", "arch", "retry-count", "runtime", "runtime-version", "async", "helper-method", "poll-helper", "custom-poll-interval", "timeout"}
|
|
|
- for _, prop := range openAIProperties {
|
|
|
- config.AllowHeaders = append(config.AllowHeaders, "x-stainless-"+prop)
|
|
|
- }
|
|
|
- config.AllowOrigins = envconfig.Origins()
|
|
|
+ corsConfig := cors.DefaultConfig()
|
|
|
+ corsConfig.AllowWildcard = true
|
|
|
+ corsConfig.AllowBrowserExtensions = true
|
|
|
+ corsConfig.AllowHeaders = []string{
|
|
|
+ "Authorization",
|
|
|
+ "Content-Type",
|
|
|
+ "User-Agent",
|
|
|
+ "Accept",
|
|
|
+ "X-Requested-With",
|
|
|
+
|
|
|
+ // OpenAI compatibility headers
|
|
|
+ "x-stainless-lang",
|
|
|
+ "x-stainless-package-version",
|
|
|
+ "x-stainless-os",
|
|
|
+ "x-stainless-arch",
|
|
|
+ "x-stainless-retry-count",
|
|
|
+ "x-stainless-runtime",
|
|
|
+ "x-stainless-runtime-version",
|
|
|
+ "x-stainless-async",
|
|
|
+ "x-stainless-helper-method",
|
|
|
+ "x-stainless-poll-helper",
|
|
|
+ "x-stainless-custom-poll-interval",
|
|
|
+ "x-stainless-timeout",
|
|
|
+ }
|
|
|
+ corsConfig.AllowOrigins = envconfig.AllowedOrigins()
|
|
|
|
|
|
r := gin.Default()
|
|
|
r.Use(
|
|
|
- cors.New(config),
|
|
|
+ cors.New(corsConfig),
|
|
|
allowedHostsMiddleware(s.addr),
|
|
|
)
|
|
|
|
|
|
+ // General
|
|
|
+ r.HEAD("/", func(c *gin.Context) { c.String(http.StatusOK, "Ollama is running") })
|
|
|
+ r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Ollama is running") })
|
|
|
+ r.HEAD("/api/version", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"version": version.Version}) })
|
|
|
+ r.GET("/api/version", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{"version": version.Version}) })
|
|
|
+
|
|
|
+ // Local model cache management
|
|
|
r.POST("/api/pull", s.PullHandler)
|
|
|
- r.POST("/api/generate", s.GenerateHandler)
|
|
|
- r.POST("/api/chat", s.ChatHandler)
|
|
|
- r.POST("/api/embed", s.EmbedHandler)
|
|
|
- r.POST("/api/embeddings", s.EmbeddingsHandler)
|
|
|
- r.POST("/api/create", s.CreateHandler)
|
|
|
r.POST("/api/push", s.PushHandler)
|
|
|
- r.POST("/api/copy", s.CopyHandler)
|
|
|
r.DELETE("/api/delete", s.DeleteHandler)
|
|
|
+ r.HEAD("/api/tags", s.ListHandler)
|
|
|
+ r.GET("/api/tags", s.ListHandler)
|
|
|
r.POST("/api/show", s.ShowHandler)
|
|
|
+
|
|
|
+ // Create
|
|
|
+ r.POST("/api/create", s.CreateHandler)
|
|
|
r.POST("/api/blobs/:digest", s.CreateBlobHandler)
|
|
|
r.HEAD("/api/blobs/:digest", s.HeadBlobHandler)
|
|
|
+ r.POST("/api/copy", s.CopyHandler)
|
|
|
+
|
|
|
+ // Inference
|
|
|
r.GET("/api/ps", s.PsHandler)
|
|
|
+ r.POST("/api/generate", s.GenerateHandler)
|
|
|
+ r.POST("/api/chat", s.ChatHandler)
|
|
|
+ r.POST("/api/embed", s.EmbedHandler)
|
|
|
+ r.POST("/api/embeddings", s.EmbeddingsHandler)
|
|
|
|
|
|
- // Compatibility endpoints
|
|
|
+ // Inference (OpenAI compatibility)
|
|
|
r.POST("/v1/chat/completions", openai.ChatMiddleware(), s.ChatHandler)
|
|
|
r.POST("/v1/completions", openai.CompletionsMiddleware(), s.GenerateHandler)
|
|
|
r.POST("/v1/embeddings", openai.EmbeddingsMiddleware(), s.EmbedHandler)
|
|
|
r.GET("/v1/models", openai.ListMiddleware(), s.ListHandler)
|
|
|
r.GET("/v1/models/:model", openai.RetrieveMiddleware(), s.ShowHandler)
|
|
|
|
|
|
- for _, method := range []string{http.MethodGet, http.MethodHead} {
|
|
|
- r.Handle(method, "/", func(c *gin.Context) {
|
|
|
- c.String(http.StatusOK, "Ollama is running")
|
|
|
- })
|
|
|
-
|
|
|
- r.Handle(method, "/api/tags", s.ListHandler)
|
|
|
- r.Handle(method, "/api/version", func(c *gin.Context) {
|
|
|
- c.JSON(http.StatusOK, gin.H{"version": version.Version})
|
|
|
- })
|
|
|
- }
|
|
|
-
|
|
|
return r
|
|
|
}
|
|
|
|