Kế hoạch tích hợp OpenResponses Gateway
Ngữ cảnh
Mayros Gateway hiện hiển thị endpoint Chat Completions tương thích OpenAI tối thiểu tại
/v1/chat/completions (xem OpenAI Chat Completions).
Open Responses là tiêu chuẩn inference mở dựa trên OpenAI Responses API. Nó được thiết kế
cho quy trình agentic và sử dụng input dựa trên item cộng sự kiện streaming ngữ nghĩa. Spec OpenResponses
định nghĩa /v1/responses, không phải /v1/chat/completions.
Mục tiêu
- Thêm endpoint
/v1/responsestuân thủ ngữ nghĩa OpenResponses. - Giữ Chat Completions như lớp tương thích dễ tắt và cuối cùng xóa.
- Chuẩn hóa xác thực và phân tích với schema có thể tái sử dụng, được cô lập.
Ngoài phạm vi
- Tính năng OpenResponses đầy đủ trong lần đầu tiên (hình ảnh, file, công cụ được lưu trữ).
- Thay thế logic thực thi agent nội bộ hoặc điều phối công cụ.
- Thay đổi hành vi
/v1/chat/completionshiện có trong giai đoạn đầu tiên.
Tóm tắt nghiên cứu
Nguồn: OpenAPI OpenResponses, trang spec OpenResponses và bài đăng blog Hugging Face.
Điểm chính được trích xuất:
POST /v1/responseschấp nhận trườngCreateResponseBodynhưmodel,input(chuỗi hoặcItemParam[]),instructions,tools,tool_choice,stream,max_output_tokensvàmax_tool_calls.ItemParamlà union được phân biệt của:- Item
messagevới rolesystem,developer,user,assistant function_callvàfunction_call_outputreasoningitem_reference
- Item
- Phản hồi thành công trả về
ResponseResourcevớiobject: "response",statusvà itemoutput. - Streaming sử dụng sự kiện ngữ nghĩa như:
response.created,response.in_progress,response.completed,response.failedresponse.output_item.added,response.output_item.doneresponse.content_part.added,response.content_part.doneresponse.output_text.delta,response.output_text.done
- Spec yêu cầu:
Content-Type: text/event-streamevent:phải khớp trườngtypeJSON- sự kiện terminal phải là literal
[DONE]
Kiến trúc đề xuất
- Thêm
src/gateway/open-responses.schema.tschứa chỉ schema Zod (không có import gateway). - Thêm
src/gateway/openresponses-http.ts(hoặcopen-responses-http.ts) cho/v1/responses. - Giữ
src/gateway/openai-http.tsnguyên vẹn như adapter tương thích cũ. - Thêm cấu hình
gateway.http.endpoints.responses.enabled(mặc địnhfalse). - Giữ
gateway.http.endpoints.chatCompletions.enabledđộc lập; cho phép cả hai endpoint được bật/tắt riêng biệt. - Phát ra cảnh báo khởi động khi Chat Completions được bật để báo hiệu trạng thái cũ.
Đường dẫn ngừng sử dụng cho Chat Completions
- Duy trì ranh giới module nghiêm ngặt: không có kiểu schema được chia sẻ giữa responses và chat completions.
- Làm Chat Completions tùy chọn bằng cấu hình để nó có thể bị tắt mà không cần thay đổi mã.
- Cập nhật tài liệu để gắn nhãn Chat Completions là cũ khi
/v1/responsesổn định. - Bước tương lai tùy chọn: ánh xạ yêu cầu Chat Completions sang handler Responses cho đường dẫn xóa đơn giản hơn.
Hỗ trợ tập hợp con giai đoạn 1
- Chấp nhận
inputnhư chuỗi hoặcItemParam[]với role message vàfunction_call_output. - Trích xuất message system và developer vào
extraSystemPrompt. - Sử dụng
userhoặcfunction_call_outputgần nhất làm message hiện tại cho agent run. - Từ chối phần nội dung không được hỗ trợ (image/file) với
invalid_request_error. - Trả về message assistant đơn với nội dung
output_text. - Trả về
usagevới giá trị zero cho đến khi kế toán token được kết nối.
Chiến lược xác thực (Không có SDK)
- Triển khai schema Zod cho tập hợp con được hỗ trợ của:
CreateResponseBodyItemParam+ union phần nội dung messageResponseResource- Shape sự kiện streaming được sử dụng bởi gateway
- Giữ schema trong một module được cô lập, đơn để tránh trôi dạt và cho phép codegen tương lai.
Triển khai streaming (Giai đoạn 1)
- Dòng SSE với cả
event:vàdata:. - Chuỗi bắt buộc (khả thi tối thiểu):
response.createdresponse.output_item.addedresponse.content_part.addedresponse.output_text.delta(lặp lại khi cần)response.output_text.doneresponse.content_part.doneresponse.completed[DONE]
Kế hoạch test và xác minh
- Thêm bao phủ e2e cho
/v1/responses:- Xác thực yêu cầu
- Shape phản hồi không stream
- Thứ tự sự kiện stream và
[DONE] - Định tuyến phiên với header và
user
- Giữ
src/gateway/openai-http.e2e.test.tskhông thay đổi. - Thủ công: curl đến
/v1/responsesvớistream: truevà xác minh thứ tự sự kiện và terminal[DONE].
Cập nhật tài liệu (Follow-up)
- Thêm trang tài liệu mới cho cách sử dụng và ví dụ
/v1/responses. - Cập nhật
/gateway/openai-http-apivới ghi chú cũ và con trỏ đến/v1/responses.