Điều gì xảy ra trước khi request đến model upstream?
Theo dấu một request qua xác thực, entitlement, quota reservation, routing, streaming và settlement.
Cập nhật
Request bắt đầu từ trust boundary#
API key được xác thực ở gateway, không phải ở giao diện. Backend resolve user, subscription, plan, scope và restriction trước khi bất kỳ request nào được chuyển tới upstream. Điều này ngăn một thay đổi UI hoặc client tùy chỉnh bỏ qua policy.
Gateway sau đó resolve public model ID thành tập route mà user được phép sử dụng. Capability validation loại sớm các candidate không hỗ trợ streaming, tool calling hoặc protocol được yêu cầu.
Reserve trước, settle sau#
Quota nên được reserve trước khi dispatch để nhiều request đồng thời không cùng nhìn thấy một lượng quota còn lại. Sau khi upstream hoàn tất, hệ thống settle reservation bằng outcome và usage thực tế; nếu request không được dispatch, reservation được release theo policy.
Cách làm này quan trọng hơn một counter chỉ cập nhật sau response. Counter cập nhật muộn có thể cho phép burst đồng thời vượt xa giới hạn của plan.
JSON và streaming khác nhau ở đâu#
Với response JSON thông thường, gateway có thể đọc response có giới hạn, chuẩn hóa model ID, ghi usage rồi trả payload cho client. Nếu một candidate lỗi trước khi response được commit, policy có thể thử candidate tiếp theo.
Với Server-Sent Events, gateway phải kiểm tra content type, giới hạn kích thước event, buffer và tổng số byte. Usage có thể xuất hiện ở cuối stream. Marker kết thúc giúp phân biệt stream hoàn chỉnh với kết nối bị ngắt.
Sau khi dữ liệu đã được gửi, một disconnect có outcome không chắc chắn. Hệ thống cần phân loại bảo thủ thay vì tự phát lại request và có nguy cơ tạo hai câu trả lời.
Dữ liệu vận hành được ghi ở đâu#
Một routing trace hữu ích nên giữ request ID, public model, candidate đã chọn, attempt, fallback reason, status, latency và usage. Nó không cần lưu prompt hoặc response đầy đủ mặc định.
Dashboard và realtime event là các view hỗ trợ quan sát. PostgreSQL vẫn là nguồn dữ liệu lâu dài, còn Redis phù hợp với rotation state, rate limit và counter ngắn hạn dùng chung giữa nhiều instance.
Khi debug, hãy đi theo thứ tự#
- Xác nhận request ID và status public.
- Kiểm tra key, entitlement, model access và quota.
- Kiểm tra route candidate, health và cooldown.
- So sánh attempt đầu tiên với fallback attempt.
- Kiểm tra settlement và usage chỉ được ghi một lần.
Đi theo vòng đời request giúp tách lỗi client, policy, upstream và metering thay vì gom mọi thất bại vào một nhãn “provider error”.