123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package server
- import (
- "encoding/json"
- "net/http"
- "github.com/labstack/echo/v4"
- "github.com/usememos/memos/api"
- "github.com/usememos/memos/common"
- "github.com/usememos/memos/plugin/openai"
- )
- func (s *Server) registerOpenAIRoutes(g *echo.Group) {
- g.POST("/opanai/chat-completion", func(c echo.Context) error {
- ctx := c.Request().Context()
- openAIApiKeySetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
- Name: api.SystemSettingOpenAIAPIKeyName,
- })
- if err != nil && common.ErrorCode(err) != common.NotFound {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find openai api key").SetInternal(err)
- }
- openAIApiKey := ""
- if openAIApiKeySetting != nil {
- err = json.Unmarshal([]byte(openAIApiKeySetting.Value), &openAIApiKey)
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to unmarshal system setting value").SetInternal(err)
- }
- }
- if openAIApiKey == "" {
- return echo.NewHTTPError(http.StatusBadRequest, "OpenAI API key not set")
- }
- completionRequest := api.OpenAICompletionRequest{}
- if err := json.NewDecoder(c.Request().Body).Decode(&completionRequest); err != nil {
- return echo.NewHTTPError(http.StatusBadRequest, "Malformatted post chat completion request").SetInternal(err)
- }
- if completionRequest.Prompt == "" {
- return echo.NewHTTPError(http.StatusBadRequest, "Prompt is required")
- }
- result, err := openai.PostChatCompletion(completionRequest.Prompt, openAIApiKey)
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to post chat completion").SetInternal(err)
- }
- return c.JSON(http.StatusOK, composeResponse(result))
- })
- g.POST("/opanai/text-completion", func(c echo.Context) error {
- ctx := c.Request().Context()
- openAIApiKeySetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
- Name: api.SystemSettingOpenAIAPIKeyName,
- })
- if err != nil && common.ErrorCode(err) != common.NotFound {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find openai api key").SetInternal(err)
- }
- openAIApiKey := ""
- if openAIApiKeySetting != nil {
- err = json.Unmarshal([]byte(openAIApiKeySetting.Value), &openAIApiKey)
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to unmarshal system setting value").SetInternal(err)
- }
- }
- if openAIApiKey == "" {
- return echo.NewHTTPError(http.StatusBadRequest, "OpenAI API key not set")
- }
- textCompletion := api.OpenAICompletionRequest{}
- if err := json.NewDecoder(c.Request().Body).Decode(&textCompletion); err != nil {
- return echo.NewHTTPError(http.StatusBadRequest, "Malformatted post text completion request").SetInternal(err)
- }
- if textCompletion.Prompt == "" {
- return echo.NewHTTPError(http.StatusBadRequest, "Prompt is required")
- }
- result, err := openai.PostTextCompletion(textCompletion.Prompt, openAIApiKey)
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to post text completion").SetInternal(err)
- }
- return c.JSON(http.StatusOK, composeResponse(result))
- })
- g.GET("/opanai/enabled", func(c echo.Context) error {
- ctx := c.Request().Context()
- openAIApiKeySetting, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{
- Name: api.SystemSettingOpenAIAPIKeyName,
- })
- if err != nil && common.ErrorCode(err) != common.NotFound {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find openai api key").SetInternal(err)
- }
- openAIApiKey := ""
- if openAIApiKeySetting != nil {
- err = json.Unmarshal([]byte(openAIApiKeySetting.Value), &openAIApiKey)
- if err != nil {
- return echo.NewHTTPError(http.StatusInternalServerError, "Failed to unmarshal system setting value").SetInternal(err)
- }
- }
- return c.JSON(http.StatusOK, composeResponse(openAIApiKey != ""))
- })
- }
|