Skip to main content

การ routing และความทนทาน

คำขอ chat, messages และ embeddings ทุกรายการจะถูกส่งไปยัง provider ตาม catalog ของ model เมื่อ provider นั้นล้มเหลว Prism สามารถ retry และย้ายไป provider ถัดไปที่ตั้งค่าไว้ ก่อนจะส่ง error กลับ หน้านี้อธิบายว่าเกิดอะไรขึ้น คุณควบคุมอะไรได้ และอ่านผลอย่างไร

Timeout

แต่ละครั้งที่เรียก upstream จะมี timeout ถึง byte แรก ค่าเริ่มต้นคือ 60 วินาที ส่ง header x-prism-timeout-ms เพื่อเปลี่ยนค่าสำหรับคำขอนั้น:
ค่าจะถูกจำกัดตามขอบเขตของเซิร์ฟเวอร์ (อย่างน้อย 1000 ms) ค่าที่ไม่ใช่จำนวนเต็มของมิลลิวินาที จะถูกละเว้นและใช้ค่าเริ่มต้นแทน timeout ที่ต่ำกว่าค่าเริ่มต้นของเซิร์ฟเวอร์จะปิดการ retry กรณี timeout สำหรับคำขอนั้น เพื่อไม่ให้ timeout สั้นบนคำตอบยาวแบบไม่ stream สร้างค่าใช้จ่าย สองรอบ

Retry และ fallback

เมื่อผู้ดูแลเปิดใช้ Prism จะ retry provider เดิมเมื่อเจอความล้มเหลวชั่วคราว (rate limit, 5xx, connection error, timeout หนึ่งครั้ง) ด้วย exponential backoff และเคารพ Retry-After ของ provider ถ้ายังล้มเหลวและ model มี provider สำรองตั้งค่าไว้ คำขอจะย้ายไป provider ถัดไป ลำดับทั้งหมดใช้งบเวลาเดียวกัน คำขอจึงไม่รอ retry อย่างไม่มีที่สิ้นสุด Prism จะไม่ retry หรือ fallback กับ error ที่เกิดจากตัวคำขอเอง เช่น prompt เกิน context window ของ model, parameter ไม่ถูกต้อง หรือ provider ปฏิเสธว่าคำขอผิดรูปแบบ กรณีเหล่านี้จะส่ง กลับตามเดิม คุณถูกคิดเงินครั้งเดียว เฉพาะครั้งที่ให้ผลลัพธ์ ครั้งที่ล้มเหลวไม่ถูกคิดเงิน

Conditional routing

ผู้ดูแลระบบสามารถผูก rule กับ model เพื่อส่ง request ไปยัง provider, upstream model หรือ credential อื่นเมื่อ context ตรงเงื่อนไข context ประกอบด้วย tag ของ organization (ผู้ดูแลกำหนด), scope ของ key, model id และ request metadata คือ object metadata ใน body รวมทับ header x-prism-metadata (JSON object ไม่เกิน 4 KB ไม่เกิน 32 ค่าแบบ primitive) metadata ใช้เปรียบเทียบเท่านั้น ไม่ได้ระบุ provider เอง
rule แรกที่ตรงจะถูกใช้และแทนที่ chain ทั้งหมดของ model รวมถึง fallback ดังนั้น rule ที่ปักหมุด region จะไม่หลุดออกนอก region เมื่อเกิด failure ชั่วคราว x-prism-provider ยังรายงาน provider ที่ให้บริการ request นั้นเช่นเดิม metadata มาจากผู้เรียก ดังนั้น key ไหนก็ส่งค่าอะไรก็ได้ ผู้ดูแลจึงใช้มันกับ preference (region, experiment) และใช้ tag ขององค์กรหรือ scope ของ key กับ สิ่งที่มีผลด้านต้นทุนหรือ compliance key ที่ไม่มีใน metadata ไม่เท่ากับ null แต่ผ่านเงื่อนไข $ne

การอ่าน response header

header เหล่านี้ถูกตั้งใน error response ด้วย จึงเห็นได้ว่า Prism ลองอะไรไปก่อนยอมแพ้

รหัส error

เมื่อทุกความพยายามล้มเหลว รหัส error จะบอกว่าเกิดอะไรขึ้นครั้งสุดท้าย: Embeddings ใช้รหัสเดียวกันโดยขึ้นต้นด้วย runtime_embeddings_failed: ดูแนวทาง retry ได้ที่ Errors Read in English