Spaces:
Runtime error
Runtime error
| package unofficialapi | |
| import ( | |
| "encoding/json" | |
| "fmt" | |
| "log" | |
| "math/rand" | |
| "strconv" | |
| "strings" | |
| "time" | |
| "github.com/google/uuid" | |
| ) | |
| type ChatReqTemplate struct { | |
| Id string `json:"id"` | |
| Author struct { | |
| Role string `json:"role"` | |
| } `json:"author"` | |
| Content struct { | |
| ContentType string `json:"content_type"` | |
| Parts []interface{} `json:"parts"` | |
| } `json:"content"` | |
| Metadata interface{} `json:"metadata"` | |
| } | |
| type ChatReqStr struct { | |
| Action string `json:"action"` | |
| Messages []ChatReqTemplate `json:"messages"` | |
| ParentMessageId string `json:"parent_message_id"` | |
| Model string `json:"model"` | |
| TimezoneOffsetMin int `json:"timezone_offset_min"` | |
| HistoryAndTrainingDisabled bool `json:"history_and_training_disabled"` | |
| ArkoseToken string `json:"arkose_token"` | |
| ConversationMode struct { | |
| Kind string `json:"kind"` | |
| } `json:"conversation_mode"` | |
| ForceParagen bool `json:"force_paragen"` | |
| ForceRateLimit bool `json:"force_rate_limit"` | |
| } | |
| type ChatRespStr 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 bool `json:"end_turn"` | |
| Weight float64 `json:"weight"` | |
| Metadata struct { | |
| FinishDetails struct { | |
| Type string `json:"type"` | |
| StopTokens []int `json:"stop_tokens"` | |
| } `json:"finish_details"` | |
| IsComplete bool `json:"is_complete"` | |
| MessageType string `json:"message_type"` | |
| ModelSlug string `json:"model_slug"` | |
| ParentId string `json:"parent_id"` | |
| Timestamp string `json:"timestamp_"` | |
| IsUserSystemMessage bool `json:"is_user_system_message"` | |
| UserContextMessageData struct { | |
| AboutModelMessage string `json:"about_model_message"` | |
| } `json:"user_context_message_data"` | |
| } `json:"metadata"` | |
| Recipient string `json:"recipient"` | |
| } `json:"message"` | |
| ConversationId string `json:"conversation_id"` | |
| Error interface{} `json:"error"` | |
| } | |
| type ChatEndRespStr struct { | |
| ConversationId string `json:"conversation_id"` | |
| MessageId string `json:"message_id"` | |
| IsCompletion bool `json:"is_completion"` | |
| ModerationResponse struct { | |
| Flagged bool `json:"flagged"` | |
| Blocked bool `json:"blocked"` | |
| ModerationId string `json:"moderation_id"` | |
| } `json:"moderation_response"` | |
| } | |
| type ChatUserSystemMsgReqStr struct { | |
| AboutUserMessage string `json:"about_user_message"` | |
| AboutModelMessage string `json:"about_model_message"` | |
| Enabled bool `json:"enabled"` | |
| } | |
| type ChatUserSystemMsgRespStr struct { | |
| Object string `json:"object"` | |
| Enabled bool `json:"enabled"` | |
| AboutUserMessage string `json:"about_user_message"` | |
| AboutModelMessage string `json:"about_model_message"` | |
| } | |
| type ChatDetectedErrorRespStr struct { | |
| Message interface{} `json:"message"` | |
| ConversationId string `json:"conversation_id"` | |
| Error string `json:"error"` | |
| } | |
| type DALLERespStr struct { | |
| Message struct { | |
| Id string `json:"id"` | |
| Author struct { | |
| Role string `json:"role"` | |
| Name string `json:"name"` | |
| Metadata struct { | |
| } `json:"metadata"` | |
| } `json:"author"` | |
| CreateTime interface{} `json:"create_time"` | |
| UpdateTime interface{} `json:"update_time"` | |
| Content struct { | |
| ContentType string `json:"content_type"` | |
| Parts []struct { | |
| ContentType string `json:"content_type"` | |
| AssetPointer string `json:"asset_pointer"` | |
| SizeBytes int `json:"size_bytes"` | |
| Width int `json:"width"` | |
| Height int `json:"height"` | |
| Fovea int `json:"fovea"` | |
| Metadata struct { | |
| Dalle struct { | |
| GenId string `json:"gen_id"` | |
| Prompt string `json:"prompt"` | |
| Seed int64 `json:"seed"` | |
| SerializationTitle string `json:"serialization_title"` | |
| } `json:"dalle"` | |
| } `json:"metadata"` | |
| } `json:"parts"` | |
| } `json:"content"` | |
| Status string `json:"status"` | |
| EndTurn interface{} `json:"end_turn"` | |
| Weight float64 `json:"weight"` | |
| Metadata struct { | |
| MessageType string `json:"message_type"` | |
| ModelSlug string `json:"model_slug"` | |
| ParentId string `json:"parent_id"` | |
| } `json:"metadata"` | |
| Recipient string `json:"recipient"` | |
| } `json:"message"` | |
| ConversationId string `json:"conversation_id"` | |
| Error interface{} `json:"error"` | |
| } | |
| type StrChoices struct { | |
| Index int `json:"index"` | |
| Message struct { | |
| Role string `json:"role"` | |
| Content string `json:"content"` | |
| } `json:"message"` | |
| FinishReason string `json:"finish_reason"` | |
| } | |
| type ApiRespStr struct { | |
| Id string `json:"id"` | |
| Object string `json:"object"` | |
| Created int64 `json:"created"` | |
| Model string `json:"model"` | |
| SystemFingerprint string `json:"system_fingerprint"` | |
| Choices []StrChoices `json:"choices"` | |
| Usage struct { | |
| PromptTokens int `json:"prompt_tokens"` | |
| CompletionTokens int `json:"completion_tokens"` | |
| TotalTokens int `json:"total_tokens"` | |
| } `json:"usage"` | |
| } | |
| type StreamChoice struct { | |
| Delta struct { | |
| Content string `json:"content"` | |
| } `json:"delta"` | |
| Index int `json:"index"` | |
| FinishReason interface{} `json:"finish_reason"` | |
| } | |
| type ApiRespStrStream struct { | |
| Id string `json:"id"` | |
| Object string `json:"object"` | |
| Created int64 `json:"created"` | |
| Model string `json:"model"` | |
| SystemFingerprint string `json:"system_fingerprint"` | |
| Choices []StreamChoice `json:"choices"` | |
| } | |
| type ApiRespStrStreamEnd struct { | |
| Id string `json:"id"` | |
| Object string `json:"object"` | |
| Created int64 `json:"created"` | |
| Model string `json:"model"` | |
| SystemFingerprint interface{} `json:"system_fingerprint"` | |
| Choices []struct { | |
| Index int `json:"index"` | |
| Delta struct { | |
| } `json:"delta"` | |
| FinishReason string `json:"finish_reason"` | |
| } `json:"choices"` | |
| } | |
| type ApiImageGenerationRespStr struct { | |
| Created int64 `json:"created"` | |
| Data []ApiImageItem `json:"data"` | |
| } | |
| type ApiImageItem struct { | |
| RevisedPrompt string `json:"revised_prompt"` | |
| Url string `json:"url"` | |
| } | |
| type ApiImageGenerationErrorRespStr struct { | |
| Error struct { | |
| Code interface{} `json:"code"` | |
| Message string `json:"message"` | |
| Param interface{} `json:"param"` | |
| Type string `json:"type"` | |
| } `json:"error"` | |
| } | |
| type ImageDownloadUrl struct { | |
| Status string `json:"status"` | |
| DownloadUrl string `json:"download_url"` | |
| Metadata struct { | |
| } `json:"metadata"` | |
| FileName string `json:"file_name"` | |
| CreationTime string `json:"creation_time"` | |
| } | |
| func GetChatReqStr(model string) *ChatReqStr { | |
| jsonStr := `{ | |
| "action": "next", | |
| "messages": [], | |
| "parent_message_id": "", | |
| "model": "gpt-4-code-interpreter", | |
| "timezone_offset_min": -480, | |
| "history_and_training_disabled": true, | |
| "arkose_token": "", | |
| "conversation_mode": { | |
| "kind": "primary_assistant" | |
| }, | |
| "force_paragen": false, | |
| "force_rate_limit": false | |
| }` | |
| t := new(ChatReqStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.ParentMessageId = uuid.New().String() | |
| t.Model = model | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetChatReqTemplate() *ChatReqTemplate { | |
| jsonStr := `{ | |
| "id": "", | |
| "author": { | |
| "role": "" | |
| }, | |
| "content": { | |
| "content_type": "text", | |
| "parts": [] | |
| }, | |
| "metadata": {} | |
| }` | |
| t := new(ChatReqTemplate) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Id = uuid.New().String() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetChatFileReqTemplate() *ChatReqTemplate { | |
| jsonStr := `{ | |
| "id": "", | |
| "author": { | |
| "role": "" | |
| }, | |
| "content": { | |
| "content_type": "multimodal_text", | |
| "parts": [ | |
| ] | |
| }, | |
| "metadata": { | |
| "attachments": [ | |
| ] | |
| } | |
| }` | |
| t := new(ChatReqTemplate) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Id = uuid.New().String() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetChatRespStr() *ChatRespStr { | |
| jsonStr := `{ | |
| "message": | |
| { | |
| "id": "", | |
| "author": | |
| { | |
| "role": "assistant", | |
| "name": null, | |
| "metadata": {} | |
| }, | |
| "create_time": 1699032699.636848, | |
| "update_time": null, | |
| "content": { | |
| "content_type": "text", | |
| "parts": [] | |
| }, | |
| "status": "finished_successfully", | |
| "end_turn": true, | |
| "weight": 1.0, | |
| "metadata": { | |
| "finish_details": | |
| { | |
| "type": "stop", | |
| "stop_tokens": [100260] | |
| }, | |
| "is_complete": true, | |
| "message_type": "next", | |
| "timestamp_": "absolute", | |
| "message_type": null, | |
| "is_user_system_message": true, | |
| "user_context_message_data": { | |
| "about_model_message": "Strict adherence to Instructions" | |
| } | |
| }, "recipient": "all" | |
| }, | |
| "conversation_id": "611228f2-94fd-44ed-b5d9-4f229ef3c400", | |
| "error": null | |
| }` | |
| t := new(ChatRespStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| nowTime := fmt.Sprintf("%.6f\n", float64(time.Now().UnixNano())/1e9) | |
| floatTime, _ := strconv.ParseFloat(nowTime, 64) | |
| t.Message.CreateTime = floatTime | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetChatEndRespStr() *ChatEndRespStr { | |
| jsonStr := `{ | |
| "conversation_id": "", | |
| "message_id": "", | |
| "is_completion": true, | |
| "moderation_response": { | |
| "flagged": false, | |
| "blocked": false, | |
| "moderation_id": "" | |
| } | |
| }` | |
| t := new(ChatEndRespStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetChatUserSystemMsgReqStr() *ChatUserSystemMsgReqStr { | |
| jsonStr := `{ | |
| "about_user_message": "", | |
| "about_model_message": "", | |
| "enabled": true | |
| }` | |
| t := new(ChatUserSystemMsgReqStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetApiRespStr(id string) *ApiRespStr { | |
| jsonStr := `{ | |
| "id": "", | |
| "object": "chat.completion", | |
| "created": 1699074998, | |
| "model": "", | |
| "system_fingerprint": null, | |
| "choices": [ | |
| ], | |
| "usage": { | |
| "prompt_tokens": 0, | |
| "completion_tokens": 0, | |
| "total_tokens": 0 | |
| } | |
| }` | |
| t := new(ApiRespStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Id = id | |
| t.Created = time.Now().Unix() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func IdGenerator() string { | |
| const prefix = "chatcmpl-" | |
| const characters = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" | |
| var uniqueString strings.Builder | |
| rand.Seed(time.Now().UnixNano()) // 初始化随机数生成器 | |
| for i := 0; i < 29; i++ { | |
| uniqueString.WriteByte(characters[rand.Intn(len(characters))]) | |
| } | |
| log.Println("id_generator") | |
| return prefix + uniqueString.String() | |
| } | |
| func GetApiRespStrStream(id string) *ApiRespStrStream { | |
| jsonStr := `{ | |
| "id": "", | |
| "object": "chat.completion.chunk", | |
| "created": 1701705204, | |
| "model": "", | |
| "system_fingerprint": null, | |
| "choices": [ | |
| { | |
| "index": 0, | |
| "delta": { | |
| "role": "assistant", | |
| "content": "" | |
| }, | |
| "finish_reason": null | |
| } | |
| ] | |
| }` | |
| t := new(ApiRespStrStream) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Id = id | |
| t.Created = time.Now().Unix() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetApiRespStrStreamEnd(id string) *ApiRespStrStreamEnd { | |
| jsonStr := `{ | |
| "id": "", | |
| "object": "chat.completion.chunk", | |
| "created": 1701705204, | |
| "model": "", | |
| "system_fingerprint": null, | |
| "choices": [ | |
| { | |
| "index": 0, | |
| "delta": {}, | |
| "finish_reason": "stop" | |
| } | |
| ] | |
| }` | |
| t := new(ApiRespStrStreamEnd) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Id = id | |
| t.Created = time.Now().Unix() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetApiImageGenerationRespStr() *ApiImageGenerationRespStr { | |
| jsonStr := `{ | |
| "created": 1700809991, | |
| "data": [ | |
| { | |
| "revised_prompt": "", | |
| "url": "" | |
| } | |
| ] | |
| }` | |
| t := new(ApiImageGenerationRespStr) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| t.Created = time.Now().Unix() | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetStreamChoice() *StreamChoice { | |
| jsonStr := ` { | |
| "index": 0, | |
| "delta": { | |
| "content": "" | |
| }, | |
| "finish_reason": null | |
| }` | |
| t := new(StreamChoice) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |
| func GetStrChoices() *StrChoices { | |
| jsonStr := `{ | |
| "finish_reason": "stop", | |
| "index": 0, | |
| "message": { | |
| "content": "", | |
| "role": "assistant" | |
| } | |
| }` | |
| t := new(StrChoices) | |
| err := json.Unmarshal([]byte(jsonStr), &t) | |
| if err != nil { | |
| log.Printf("Error parsing JSON: %v", err) | |
| } | |
| return t | |
| } | |