Skip to content

Commit

Permalink
Refactor variable names and update README
Browse files Browse the repository at this point in the history
- Refactored variable names for better readability, changing 'uuid' to 'uid' and 'chat_requirements' to 'chatRequirements'.
- Updated the WebSocket connection initialization and chat requirements retrieval to use the new variable names.
- Adjusted function calls throughout the code to match these changes.
- Added a default value for ConversationMode.Kind in convertAPIRequest function if it's not provided.
- Updated README with instructions on how to apply third-party client-side.
  • Loading branch information
leokwsw committed Mar 26, 2024
1 parent 5db44cd commit a266ee0
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 14 deletions.
15 changes: 15 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,21 @@
the `harPool` folder of the same level as this program.
2. You can download the binary from releases or `go run main.go`

### How to apply to third-party client-side (last update at : 2024/03/26)

- [ChatGPTNextWeb/ChatGPT-Next-Web](https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web)

.env
```
OPENAI_API_KEY=<your openai api key>
BASE_URL=http://localhost:8080/platform
...
```

---



---

<details>
Expand Down
32 changes: 18 additions & 14 deletions api/imitate/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,17 +71,17 @@ func CreateChatCompletions(c *gin.Context) {
return
}

uuid := uuid.NewString()
var chat_requirements *chatgpt.ChatRequirements
uid := uuid.NewString()
var chatRequirements *chatgpt.ChatRequirements
var waitGroup sync.WaitGroup
waitGroup.Add(2)
go func() {
defer waitGroup.Done()
err = chatgpt.InitWebSocketConnect(token, uuid)
err = chatgpt.InitWebSocketConnect(token, uid)
}()
go func() {
defer waitGroup.Done()
chat_requirements, err = chatgpt.GetChatRequirementsByAccessToken(token)
chatRequirements, err = chatgpt.GetChatRequirementsByAccessToken(token)
if err != nil {
c.AbortWithStatusJSON(http.StatusInternalServerError, api.ReturnMessage(err.Error()))
return
Expand All @@ -92,15 +92,15 @@ func CreateChatCompletions(c *gin.Context) {
c.JSON(500, gin.H{"error": "unable to create ws tunnel"})
return
}
if chat_requirements == nil {
if chatRequirements == nil {
c.JSON(500, gin.H{"error": "unable to check chat requirement"})
return
}

// 将聊天请求转换为ChatGPT请求。
translatedRequest := convertAPIRequest(originalRequest, chat_requirements.Arkose.Required)
translatedRequest := convertAPIRequest(originalRequest, chatRequirements.Arkose.Required)

response, done := sendConversationRequest(c, translatedRequest, token, chat_requirements.Token)
response, done := sendConversationRequest(c, translatedRequest, token, chatRequirements.Token)
if done {
c.JSON(500, gin.H{
"error": "error sending request",
Expand All @@ -124,7 +124,7 @@ func CreateChatCompletions(c *gin.Context) {
for i := 3; i > 0; i-- {
var continueInfo *ContinueInfo
var responsePart string
responsePart, continueInfo = Handler(c, response, token, uuid, originalRequest.Stream)
responsePart, continueInfo = Handler(c, response, token, uid, originalRequest.Stream)
fullResponse += responsePart
if continueInfo == nil {
break
Expand All @@ -134,10 +134,10 @@ func CreateChatCompletions(c *gin.Context) {
translatedRequest.Action = "continue"
translatedRequest.ConversationID = &continueInfo.ConversationID
translatedRequest.ParentMessageID = continueInfo.ParentID
if chat_requirements.Arkose.Required {
if chatRequirements.Arkose.Required {
chatgpt.RenewTokenForRequest(&translatedRequest)
}
response, done = sendConversationRequest(c, translatedRequest, token, chat_requirements.Token)
response, done = sendConversationRequest(c, translatedRequest, token, chatRequirements.Token)

if done {
c.JSON(500, gin.H{
Expand Down Expand Up @@ -169,7 +169,7 @@ func CreateChatCompletions(c *gin.Context) {
return
}
if !originalRequest.Stream {
c.JSON(200, newChatCompletion(fullResponse, translatedRequest.Model, uuid))
c.JSON(200, newChatCompletion(fullResponse, translatedRequest.Model, uid))
} else {
c.String(200, "data: [DONE]\n\n")
}
Expand Down Expand Up @@ -223,6 +223,10 @@ func convertAPIRequest(apiRequest APIRequest, chatRequirementsArkoseRequired boo
chatgptRequest.AddMessage(apiMessage.Role, apiMessage.Content, apiMessage.Metadata)
}

if chatgptRequest.ConversationMode.Kind == "" {
chatgptRequest.ConversationMode.Kind = "primary_assistant"
}

return chatgptRequest
}

Expand All @@ -236,7 +240,7 @@ func NewChatGPTRequest() chatgpt.CreateConversationRequest {
}
}

func sendConversationRequest(c *gin.Context, request chatgpt.CreateConversationRequest, accessToken string, chatRequirementsTokenL string) (*http.Response, bool) {
func sendConversationRequest(c *gin.Context, request chatgpt.CreateConversationRequest, accessToken string, chatRequirementsToken string) (*http.Response, bool) {
jsonBytes, _ := json.Marshal(request)
req, _ := http.NewRequest(http.MethodPost, api.ChatGPTApiUrlPrefix+"/backend-api/conversation", bytes.NewBuffer(jsonBytes))
req.Header.Set("User-Agent", api.UserAgent)
Expand All @@ -245,8 +249,8 @@ func sendConversationRequest(c *gin.Context, request chatgpt.CreateConversationR
if request.ArkoseToken != "" {
req.Header.Set("Openai-Sentinel-Arkose-Token", request.ArkoseToken)
}
if chatRequirementsTokenL != "" {
req.Header.Set("Openai-Sentinel-Chat-Requirements-Token", chatRequirementsTokenL)
if chatRequirementsToken != "" {
req.Header.Set("Openai-Sentinel-Chat-Requirements-Token", chatRequirementsToken)
}
if api.PUID != "" {
req.Header.Set("Cookie", "_puid="+api.PUID+";")
Expand Down

0 comments on commit a266ee0

Please sign in to comment.