construct requests
This commit is contained in:
parent
5b0989fbc3
commit
c27f8a0c3a
1
go.mod
1
go.mod
@ -4,6 +4,7 @@ go 1.20
|
||||
|
||||
require (
|
||||
github.com/gin-gonic/gin v1.9.0
|
||||
github.com/google/uuid v1.3.0
|
||||
github.com/r3labs/sse/v2 v2.10.0
|
||||
)
|
||||
|
||||
|
2
go.sum
2
go.sum
@ -24,6 +24,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
|
||||
|
13
internal/chatgpt/convert.go
Normal file
13
internal/chatgpt/convert.go
Normal file
@ -0,0 +1,13 @@
|
||||
package chatgpt
|
||||
|
||||
import (
|
||||
internal_types "freechatgpt/internal/types"
|
||||
)
|
||||
|
||||
func ConvertAPIRequest(api_request internal_types.APIRequest) internal_types.ChatGPTRequest {
|
||||
chatgpt_request := internal_types.NewChatGPTRequest()
|
||||
for _, api_message := range api_request.Messages {
|
||||
chatgpt_request.AddMessage(api_message.Role, api_message.Content)
|
||||
}
|
||||
return chatgpt_request
|
||||
}
|
10
internal/types/api.go
Normal file
10
internal/types/api.go
Normal file
@ -0,0 +1,10 @@
|
||||
package types
|
||||
|
||||
type APIRequest struct {
|
||||
Messages []api_message `json:"messages"`
|
||||
}
|
||||
|
||||
type api_message struct {
|
||||
Role string `json:"role"`
|
||||
Content string `json:"content"`
|
||||
}
|
37
internal/types/chatgpt.go
Normal file
37
internal/types/chatgpt.go
Normal file
@ -0,0 +1,37 @@
|
||||
package types
|
||||
|
||||
import "github.com/google/uuid"
|
||||
|
||||
type chatgpt_message struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
Role string `json:"role"`
|
||||
Content chatgpt_content `json:"content"`
|
||||
}
|
||||
|
||||
type chatgpt_content struct {
|
||||
ContentType string `json:"content_type"`
|
||||
Parts []string `json:"parts"`
|
||||
}
|
||||
|
||||
type ChatGPTRequest struct {
|
||||
Action string `json:"action"`
|
||||
Messages []chatgpt_message `json:"messages"`
|
||||
ParentMessageID string `json:"parent_message_id,omitempty"`
|
||||
Model string `json:"model"`
|
||||
}
|
||||
|
||||
func NewChatGPTRequest() ChatGPTRequest {
|
||||
return ChatGPTRequest{
|
||||
Action: "next",
|
||||
ParentMessageID: uuid.NewString(),
|
||||
Model: "text-davinci-002-render-sha",
|
||||
}
|
||||
}
|
||||
|
||||
func (c *ChatGPTRequest) AddMessage(role string, content string) {
|
||||
c.Messages = append(c.Messages, chatgpt_message{
|
||||
ID: uuid.New(),
|
||||
Role: role,
|
||||
Content: chatgpt_content{ContentType: "text", Parts: []string{content}},
|
||||
})
|
||||
}
|
15
main.go
15
main.go
@ -1,6 +1,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"freechatgpt/internal/chatgpt"
|
||||
internal_types "freechatgpt/internal/types"
|
||||
"os"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
@ -65,5 +67,18 @@ func main() {
|
||||
ACCESS_TOKENS = tokens
|
||||
c.String(200, "tokens updated")
|
||||
})
|
||||
/// Public routes
|
||||
router.POST("/v1/chat/completions", func(c *gin.Context) {
|
||||
var chat_request internal_types.APIRequest
|
||||
err := c.BindJSON(&chat_request)
|
||||
if err != nil {
|
||||
c.String(400, "chat request not provided")
|
||||
return
|
||||
}
|
||||
// Convert the chat request to a ChatGPT request
|
||||
chatgpt_request := chatgpt.ConvertAPIRequest(chat_request)
|
||||
c.JSON(200, chatgpt_request)
|
||||
|
||||
})
|
||||
router.Run(HOST + ":" + PORT)
|
||||
}
|
||||
|
Reference in New Issue
Block a user