package com.zy.ai.controller; import com.zy.ai.entity.ResponsesApiRequest; import com.zy.ai.service.OpenAiResponsesService; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import java.util.LinkedHashMap; import java.util.Map; @RestController @RequiredArgsConstructor public class OpenAiCompatibleController { private final OpenAiResponsesService openAiResponsesService; @PostMapping(value = "/v1/responses", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity createResponse(@RequestBody ResponsesApiRequest request) { if (request == null) { return openAiError(HttpStatus.BAD_REQUEST, "请求体不能为空", "input"); } if (Boolean.TRUE.equals(request.getStream())) { return openAiError(HttpStatus.BAD_REQUEST, "暂不支持 stream=true", "stream"); } try { return ResponseEntity.ok(openAiResponsesService.create(request)); } catch (IllegalArgumentException ex) { return openAiError(HttpStatus.BAD_REQUEST, ex.getMessage(), "input"); } catch (IllegalStateException ex) { return openAiError(HttpStatus.BAD_GATEWAY, ex.getMessage(), null); } } private ResponseEntity> openAiError(HttpStatus status, String message, String param) { Map error = new LinkedHashMap<>(); error.put("message", message); error.put("type", "invalid_request_error"); error.put("param", param); error.put("code", null); Map body = new LinkedHashMap<>(); body.put("error", error); return ResponseEntity.status(status).body(body); } }