package openai import "strings" func BuildResponsesCreatedPayload(responseID, model string) map[string]any { return map[string]any{ "type": "response.created", "id": responseID, "response_id": responseID, "object": "response", "model": model, "status": "in_progress", } } func BuildResponsesOutputItemAddedPayload(responseID, itemID string, outputIndex int, item map[string]any) map[string]any { return map[string]any{ "type": "response.output_item.added", "id": responseID, "response_id": responseID, "output_index": outputIndex, "item_id": itemID, "item": item, } } func BuildResponsesOutputItemDonePayload(responseID, itemID string, outputIndex int, item map[string]any) map[string]any { return map[string]any{ "type": "response.output_item.done", "id": responseID, "response_id": responseID, "output_index": outputIndex, "item_id": itemID, "item": item, } } func BuildResponsesContentPartAddedPayload(responseID, itemID string, outputIndex, contentIndex int, part map[string]any) map[string]any { return map[string]any{ "type": "response.content_part.added", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "content_index": contentIndex, "part": part, } } func BuildResponsesContentPartDonePayload(responseID, itemID string, outputIndex, contentIndex int, part map[string]any) map[string]any { return map[string]any{ "type": "response.content_part.done", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "content_index": contentIndex, "part": part, } } func BuildResponsesTextDeltaPayload(responseID, itemID string, outputIndex, contentIndex int, delta string) map[string]any { return map[string]any{ "type": "response.output_text.delta", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "content_index": contentIndex, "delta": delta, } } func BuildResponsesTextDonePayload(responseID, itemID string, outputIndex, contentIndex int, text string) map[string]any { return map[string]any{ "type": "response.output_text.done", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "content_index": contentIndex, "text": text, } } func BuildResponsesReasoningDeltaPayload(responseID, delta string) map[string]any { return map[string]any{ "type": "response.reasoning.delta", "id": responseID, "response_id": responseID, "delta": delta, } } func BuildResponsesFunctionCallArgumentsDeltaPayload(responseID, itemID string, outputIndex int, callID, delta string) map[string]any { return map[string]any{ "type": "response.function_call_arguments.delta", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "call_id": callID, "delta": delta, } } func BuildResponsesFunctionCallArgumentsDonePayload(responseID, itemID string, outputIndex int, callID, name, arguments string) map[string]any { return map[string]any{ "type": "response.function_call_arguments.done", "id": responseID, "response_id": responseID, "item_id": itemID, "output_index": outputIndex, "call_id": callID, "name": name, "arguments": normalizeJSONString(arguments), } } func BuildResponsesFailedPayload(responseID, model string, status int, message, code string) map[string]any { code = strings.TrimSpace(code) if code == "" { code = "api_error" } return map[string]any{ "type": "response.failed", "id": responseID, "response_id": responseID, "object": "response", "model": model, "status": "failed", "status_code": status, "error": map[string]any{ "message": message, "type": responsesErrorType(status), "code": code, "param": nil, }, } } func responsesErrorType(status int) string { switch status { case 400, 404, 422: return "invalid_request_error" case 401: return "authentication_error" case 403: return "permission_error" case 429: return "rate_limit_error" case 503: return "service_unavailable_error" default: if status >= 500 { return "api_error" } return "invalid_request_error" } } func BuildResponsesCompletedPayload(response map[string]any) map[string]any { responseID, _ := response["id"].(string) return map[string]any{ "type": "response.completed", "response_id": responseID, "response": response, } }