(w http.ResponseWriter, r *http.Request)
| 291 | } |
| 292 | |
| 293 | func (s *Server) handleResponsesWithLabels(w http.ResponseWriter, r *http.Request) { |
| 294 | s.logger.Debug(r.Context(), "handling OpenAI responses request") |
| 295 | defer s.logger.Debug(r.Context(), "handled OpenAI responses request") |
| 296 | |
| 297 | ctx := r.Context() |
| 298 | requestID := uuid.New() |
| 299 | now := time.Now() |
| 300 | |
| 301 | var req llmRequest |
| 302 | if err := json.NewDecoder(r.Body).Decode(&req); err != nil { |
| 303 | s.logger.Error(ctx, "failed to parse OpenAI responses request", slog.Error(err)) |
| 304 | http.Error(w, "invalid request body", http.StatusBadRequest) |
| 305 | return |
| 306 | } |
| 307 | |
| 308 | if s.artificialLatency > 0 { |
| 309 | time.Sleep(s.artificialLatency) |
| 310 | } |
| 311 | |
| 312 | var resp responsesResponse |
| 313 | resp.ID = fmt.Sprintf("resp_%s", requestID.String()[:8]) |
| 314 | resp.Object = "response" |
| 315 | resp.Created = now.Unix() |
| 316 | resp.Model = req.Model |
| 317 | |
| 318 | var responseContent string |
| 319 | if s.responsePayloadSize > 0 { |
| 320 | pattern := "x" |
| 321 | repeated := strings.Repeat(pattern, s.responsePayloadSize) |
| 322 | responseContent = repeated[:s.responsePayloadSize] |
| 323 | } else { |
| 324 | responseContent = "This is a mock response from OpenAI Responses." |
| 325 | } |
| 326 | |
| 327 | resp.Output = []struct { |
| 328 | ID string `json:"id,omitempty"` |
| 329 | Type string `json:"type"` |
| 330 | Role string `json:"role"` |
| 331 | Content []struct { |
| 332 | Type string `json:"type"` |
| 333 | Text string `json:"text"` |
| 334 | } `json:"content"` |
| 335 | }{ |
| 336 | { |
| 337 | ID: fmt.Sprintf("msg_%s", requestID.String()[:8]), |
| 338 | Type: "message", |
| 339 | Role: "assistant", |
| 340 | Content: []struct { |
| 341 | Type string `json:"type"` |
| 342 | Text string `json:"text"` |
| 343 | }{ |
| 344 | { |
| 345 | Type: "output_text", |
| 346 | Text: responseContent, |
| 347 | }, |
| 348 | }, |
| 349 | }, |
| 350 | } |
no test coverage detected