package model import ( "github.com/google/uuid" "github.com/zbronya/free-chat-to-api/model/request" "github.com/zbronya/free-chat-to-api/utils" ) type ChatRequirementReq struct { P string `json:"p"` } type ProofWork struct { Difficulty string `json:"difficulty"` Required bool `json:"required"` Seed string `json:"seed"` } type ChatRequirementRes struct { Token string `json:"token"` Proof ProofWork `json:"proofofwork"` Arkose struct { Required bool `json:"required"` DX string `json:"dx"` } `json:"arkose"` ForceLogin bool `json:"force_login"` } type ChatAuthor struct { Role string `json:"role"` } type ChatContent struct { ContentType string `json:"content_type"` Parts []string `json:"parts"` } type ChatMessages struct { Author ChatAuthor `json:"author"` Content ChatContent `json:"content"` } type ChatConversationMode struct { Kind string `json:"kind"` } type ChatCompletionRequest struct { Action string `json:"action"` Messages []ChatMessages `json:"messages"` ParentMessageId string `json:"parent_message_id"` Model string `json:"model"` TimeZoneOffsetMin int `json:"timezone_offset_min"` Suggestions []string `json:"suggestions"` HistoryAndTrainingDisabled bool `json:"history_and_training_disabled"` ConversationMode ChatConversationMode `json:"conversation_mode"` WebsocketRequestId string `json:"websocket_request_id"` } func ApiReqToChatReq(req *request.ChatRequest) (chatReq *ChatCompletionRequest) { messages := make([]ChatMessages, 0) for _, apiMessage := range req.Messages { chatMessage := ChatMessages{ Author: ChatAuthor{ Role: apiMessage.Role, }, Content: ChatContent{ ContentType: "text", Parts: []string{apiMessage.Content}, }, } messages = append(messages, chatMessage) } chatReq = &ChatCompletionRequest{ Action: "next", Messages: messages, ParentMessageId: uuid.New().String(), Model: utils.MappingModel(req.Model), TimeZoneOffsetMin: -180, Suggestions: make([]string, 0), HistoryAndTrainingDisabled: true, ConversationMode: ChatConversationMode{ Kind: "primary_assistant", }, WebsocketRequestId: uuid.New().String(), } return chatReq } type ChatCompletionResp struct { Message struct { Id string `json:"id"` Author struct { Role string `json:"role"` Name interface{} `json:"name"` Metadata struct { } `json:"metadata"` } `json:"author"` CreateTime float64 `json:"create_time"` UpdateTime interface{} `json:"update_time"` Content struct { ContentType string `json:"content_type"` Parts []string `json:"parts"` } `json:"content"` Status string `json:"status"` EndTurn interface{} `json:"end_turn"` Weight float64 `json:"weight"` Metadata struct { Citations []interface{} `json:"citations"` GizmoId interface{} `json:"gizmo_id"` MessageType string `json:"message_type"` ModelSlug string `json:"model_slug"` DefaultModelSlug string `json:"default_model_slug"` Pad string `json:"pad"` ParentId string `json:"parent_id"` } `json:"metadata"` Recipient string `json:"recipient"` } `json:"message"` ConversationId string `json:"conversation_id"` Error interface{} `json:"error"` }