(c *gin.Context)
| 443 | } |
| 444 | |
| 445 | func (h *Handler) responses(c *gin.Context) { |
| 446 | var responsesRequest officialtypes.ResponsesAPIRequest |
| 447 | err := c.BindJSON(&responsesRequest) |
| 448 | if err != nil { |
| 449 | c.JSON(400, gin.H{"error": gin.H{ |
| 450 | "message": "Request must be proper JSON", |
| 451 | "type": "invalid_request_error", |
| 452 | "param": nil, |
| 453 | "code": err.Error(), |
| 454 | }}) |
| 455 | return |
| 456 | } |
| 457 | |
| 458 | original_request, err := responsesRequest.ToAPIRequest() |
| 459 | if err != nil { |
| 460 | c.JSON(400, gin.H{"error": gin.H{ |
| 461 | "message": err.Error(), |
| 462 | "type": "invalid_request_error", |
| 463 | "param": "input", |
| 464 | "code": "invalid_request_error", |
| 465 | }}) |
| 466 | return |
| 467 | } |
| 468 | |
| 469 | proxyUrl := h.proxy.GetProxyIP() |
| 470 | input_tokens := 0 |
| 471 | for _, message := range original_request.Messages { |
| 472 | input_tokens += util.CountToken(message.Text()) |
| 473 | } |
| 474 | secret, status, err := h.secretFromAuthorization(c, original_requestHasFiles(original_request), false, proxyUrl) |
| 475 | if err != nil { |
| 476 | c.JSON(status, gin.H{"error": gin.H{ |
| 477 | "message": err.Error(), |
| 478 | "type": "authorization_error", |
| 479 | "param": "Authorization", |
| 480 | "code": status, |
| 481 | }}) |
| 482 | return |
| 483 | } |
| 484 | if secret == nil { |
| 485 | c.JSON(400, gin.H{"error": "Not Account Found."}) |
| 486 | c.Abort() |
| 487 | return |
| 488 | } |
| 489 | |
| 490 | uid := uuid.NewString() |
| 491 | client := bogdanfinn.NewStdClient() |
| 492 | |
| 493 | translated_request := chatgptrequestconverter.ConvertAPIRequest(original_request, secret, proxyUrl, client) |
| 494 | |
| 495 | // 按 conversationID 复用 ChatClientState,保持 DeviceID/SessionID 一致 |
| 496 | var clientState *chatgpt.ChatClientState |
| 497 | if translated_request.ConversationID != "" { |
| 498 | clientState = h.sessions.Get(translated_request.ConversationID) |
| 499 | } |
| 500 | if clientState == nil { |
| 501 | clientState = chatgpt.NewChatClientState() |
| 502 | } |
nothing calls this directly
no test coverage detected