{
  "aboutHtml": "<p>Gemini 3.1 Pro Preview เป็นโมเดลข้อความเน้นเหตุผลของ Google สำหรับงานซับซ้อนที่ต้องใช้วิศวกรรมซอฟต์แวร์ พัฒนาอัลกอริทึม หรือสังเคราะห์หลักฐานหลายสื่อ พัฒนาจาก Gemini 3 Pro โดยเน้นการใช้เครื่องมือแม่นยำ การให้เหตุผลมีประสิทธิภาพขึ้น และการดำเนินงานหลายขั้นตอนที่เชื่อถือได้ ข้อความ ภาพ เสียง วิดีโอ และ PDF ประกอบคำตอบเขียน ชิ้นงานโค้ด หรือผลมีโครงสร้างได้</p><p>สำหรับงานโค้ดท้าทาย ให้เป้าหมาย ข้อมูลรีโพซิทอรีเกี่ยวข้อง พฤติกรรมที่พบ และข้อจำกัดที่คงไว้ รีโพซิทอรีโค้ดทั้งชุดให้บริบทงานได้ สำหรับตรวจสัญญาโค้ด ให้โมเดลเทียบการจัดการสัญญาข้อมูลร่วมของสองโมดูล ระบุจุดไม่ตรง และเสนอการแก้เฉพาะจุดพร้อมอ้างอิงโค้ดรองรับ เอาต์พุตที่มีประโยชน์แยกการวิเคราะห์ การแก้ที่เสนอ และหลักฐานออกจากการยืนยันที่แอปพลิเคชันที่เชื่อมต่อดำเนินการ</p><p>สื่อเปิดตัวสาธิตคำอธิบายภาพด้วยโค้ดและโครงการโต้ตอบ รวมเอาต์พุต SVG เคลื่อนไหวจากบรีฟข้อความ สิ่งเหล่านี้เป็นชิ้นงานโค้ด แทนการสร้างภาพราสเตอร์ บรีฟชัดกำหนดสิ่งที่จะอธิบาย พฤติกรรมภาพ และข้อมูลที่ต้องแสดง ตรวจโค้ดและการเรนเดอร์กับข้อกำหนดเหล่านั้น สำหรับสังเคราะห์ข้อมูล ให้แหล่งจริงและขอมุมมองเดียวที่รักษาความสัมพันธ์และเงื่อนไขประกอบที่พบในข้อมูล</p><p>ระดับ thinking ที่ระบุคือ low, medium และ high โดย high เป็นค่าเริ่มต้นของ 3.1 Pro Preview ปิด thinking ทั้งหมดในโปรไฟล์ Pro นี้ไม่ได้ เลือกความพยายามต่ำลงสำหรับคำตอบมีขอบเขตและมากขึ้นสำหรับงานหลายขั้นตอนยาก พร้อมเผื่อเอาต์พุตเพียงพอสำหรับชิ้นงานสุดท้าย เพดานเอาต์พุตเล็กอาจตัดการให้เหตุผลก่อนมีคำตอบที่ใช้ได้ คู่มือ thinking แยกบทสรุปเหตุผลจากกระบวนการภายในเต็ม และอธิบายความสำคัญของบริบท thought-signature ในบทสนทนา</p><p>ตาราง Preview ตรงตัวระบุการเรียกฟังก์ชัน รันโค้ด อิงผลค้นหา อิง Maps บริบท URL และเอาต์พุตมีโครงสร้าง โดยจำกัด File Search ไว้ที่ AI Studio ให้จุดประสงค์ฟังก์ชันและนิยามพารามิเตอร์ แล้วทำต่อจากผลที่คืนจริง โปรไฟล์ Custom Tools Preview แยกปรับเพื่อให้ความสำคัญเครื่องมือกำหนดเองและ bash เป็นเอนด์พอยต์ผู้ผลิตที่มีชื่อเฉพาะ จึงไม่ควรถือความเชี่ยวชาญนั้นเป็นคุณสมบัติทุกคำขอ 3.1 Pro โดยไม่ระบุ เลือกสคีมาผลมีโครงสร้างเมื่องานต้องการระเบียนกำหนดไว้แทนร้อยแก้วอิสระ</p><p>สำหรับวิเคราะห์หลายสื่อ ระบุหน้า ภาพ ช่วงบันทึก หรือเหตุการณ์วิดีโอที่เกี่ยวข้อง สำหรับวิเคราะห์เอกสาร ให้เทียบแผนภาพกับข้อกำหนดเขียนและคืนแต่ละจุดไม่ตรงพร้อมข้อความรองรับ แหล่งเสียงพูดให้บทถอดเสียงหรือการตีความเป็นข้อความได้ เก็บแหล่งอ้างอิงสำหรับข้อสรุปที่ต้องตรวจ และแยกสิ่งที่เห็นหรือระบุจากสิ่งอนุมาน โปรไฟล์นี้ส่งออกข้อความรวมโค้ด การสร้างภาพหรือเสียงพูดดั้งเดิมไม่อยู่ในตารางความสามารถตรงตัว</p><p>ข้อมูลรุ่น 3.1 Pro ดั้งเดิมระบุบริบทสูงสุด 1M และเอาต์พุตข้อความ 64K ตาราง API Preview ตรงตัวระบุอินพุต 1,048,576 และเอาต์พุต 65,536 โทเคน รวมคำสั่ง ประวัติสนทนา และสื่อในงบอินพุต ระบุแคชและการประมวลผล batch พร้อม Flex และ Priority สำหรับโปรไฟล์ผู้ผลิต สำหรับหลายรายการอิสระ ให้กำหนดเอาต์พุตที่ต้องการและเก็บรหัสต้นทางแต่ละรายการ แทนรวมหลักฐานไม่เกี่ยวกันเป็นคำตอบที่ติดตามไม่ได้</p><p>รุ่น Preview ที่มีชื่อนี้ยังแยกจากโปรไฟล์ Custom Tools ของ Pro และรุ่น Flash หรือ Pro ภายหลัง จุดแข็งเกี่ยวกับเหตุผลซับซ้อน โค้ด และสังเคราะห์หลักฐาน ชิ้นงานสุดท้ายยังต้องตรวจเทียบต้นทางและผลเครื่องมือจริง รักษาความกำกวมที่ค้างเมื่อข้อมูลให้มาไม่รองรับข้อสรุปแน่นอน ชิ้นงานที่มีประโยชน์คือคำตอบ โค้ด หรือระเบียนที่งานขอและมีหลักฐานรองรับเพียงพอให้ประเมินข้อจำกัดการใช้จริง</p>",
  "aboutText": "Gemini 3.1 Pro Preview เป็นโมเดลข้อความเน้นเหตุผลของ Google สำหรับงานซับซ้อนที่ต้องใช้วิศวกรรมซอฟต์แวร์ พัฒนาอัลกอริทึม หรือสังเคราะห์หลักฐานหลายสื่อ พัฒนาจาก Gemini 3 Pro โดยเน้นการใช้เครื่องมือแม่นยำ การให้เหตุผลมีประสิทธิภาพขึ้น และการดำเนินงานหลายขั้นตอนที่เชื่อถือได้ ข้อความ ภาพ เสียง วิดีโอ และ PDF ประกอบคำตอบเขียน ชิ้นงานโค้ด หรือผลมีโครงสร้างได้\n\nสำหรับงานโค้ดท้าทาย ให้เป้าหมาย ข้อมูลรีโพซิทอรีเกี่ยวข้อง พฤติกรรมที่พบ และข้อจำกัดที่คงไว้ รีโพซิทอรีโค้ดทั้งชุดให้บริบทงานได้ สำหรับตรวจสัญญาโค้ด ให้โมเดลเทียบการจัดการสัญญาข้อมูลร่วมของสองโมดูล ระบุจุดไม่ตรง และเสนอการแก้เฉพาะจุดพร้อมอ้างอิงโค้ดรองรับ เอาต์พุตที่มีประโยชน์แยกการวิเคราะห์ การแก้ที่เสนอ และหลักฐานออกจากการยืนยันที่แอปพลิเคชันที่เชื่อมต่อดำเนินการ\n\nสื่อเปิดตัวสาธิตคำอธิบายภาพด้วยโค้ดและโครงการโต้ตอบ รวมเอาต์พุต SVG เคลื่อนไหวจากบรีฟข้อความ สิ่งเหล่านี้เป็นชิ้นงานโค้ด แทนการสร้างภาพราสเตอร์ บรีฟชัดกำหนดสิ่งที่จะอธิบาย พฤติกรรมภาพ และข้อมูลที่ต้องแสดง ตรวจโค้ดและการเรนเดอร์กับข้อกำหนดเหล่านั้น สำหรับสังเคราะห์ข้อมูล ให้แหล่งจริงและขอมุมมองเดียวที่รักษาความสัมพันธ์และเงื่อนไขประกอบที่พบในข้อมูล\n\nระดับ thinking ที่ระบุคือ low, medium และ high โดย high เป็นค่าเริ่มต้นของ 3.1 Pro Preview ปิด thinking ทั้งหมดในโปรไฟล์ Pro นี้ไม่ได้ เลือกความพยายามต่ำลงสำหรับคำตอบมีขอบเขตและมากขึ้นสำหรับงานหลายขั้นตอนยาก พร้อมเผื่อเอาต์พุตเพียงพอสำหรับชิ้นงานสุดท้าย เพดานเอาต์พุตเล็กอาจตัดการให้เหตุผลก่อนมีคำตอบที่ใช้ได้ คู่มือ thinking แยกบทสรุปเหตุผลจากกระบวนการภายในเต็ม และอธิบายความสำคัญของบริบท thought-signature ในบทสนทนา\n\nตาราง Preview ตรงตัวระบุการเรียกฟังก์ชัน รันโค้ด อิงผลค้นหา อิง Maps บริบท URL และเอาต์พุตมีโครงสร้าง โดยจำกัด File Search ไว้ที่ AI Studio ให้จุดประสงค์ฟังก์ชันและนิยามพารามิเตอร์ แล้วทำต่อจากผลที่คืนจริง โปรไฟล์ Custom Tools Preview แยกปรับเพื่อให้ความสำคัญเครื่องมือกำหนดเองและ bash เป็นเอนด์พอยต์ผู้ผลิตที่มีชื่อเฉพาะ จึงไม่ควรถือความเชี่ยวชาญนั้นเป็นคุณสมบัติทุกคำขอ 3.1 Pro โดยไม่ระบุ เลือกสคีมาผลมีโครงสร้างเมื่องานต้องการระเบียนกำหนดไว้แทนร้อยแก้วอิสระ\n\nสำหรับวิเคราะห์หลายสื่อ ระบุหน้า ภาพ ช่วงบันทึก หรือเหตุการณ์วิดีโอที่เกี่ยวข้อง สำหรับวิเคราะห์เอกสาร ให้เทียบแผนภาพกับข้อกำหนดเขียนและคืนแต่ละจุดไม่ตรงพร้อมข้อความรองรับ แหล่งเสียงพูดให้บทถอดเสียงหรือการตีความเป็นข้อความได้ เก็บแหล่งอ้างอิงสำหรับข้อสรุปที่ต้องตรวจ และแยกสิ่งที่เห็นหรือระบุจากสิ่งอนุมาน โปรไฟล์นี้ส่งออกข้อความรวมโค้ด การสร้างภาพหรือเสียงพูดดั้งเดิมไม่อยู่ในตารางความสามารถตรงตัว\n\nข้อมูลรุ่น 3.1 Pro ดั้งเดิมระบุบริบทสูงสุด 1M และเอาต์พุตข้อความ 64K ตาราง API Preview ตรงตัวระบุอินพุต 1,048,576 และเอาต์พุต 65,536 โทเคน รวมคำสั่ง ประวัติสนทนา และสื่อในงบอินพุต ระบุแคชและการประมวลผล batch พร้อม Flex และ Priority สำหรับโปรไฟล์ผู้ผลิต สำหรับหลายรายการอิสระ ให้กำหนดเอาต์พุตที่ต้องการและเก็บรหัสต้นทางแต่ละรายการ แทนรวมหลักฐานไม่เกี่ยวกันเป็นคำตอบที่ติดตามไม่ได้\n\nรุ่น Preview ที่มีชื่อนี้ยังแยกจากโปรไฟล์ Custom Tools ของ Pro และรุ่น Flash หรือ Pro ภายหลัง จุดแข็งเกี่ยวกับเหตุผลซับซ้อน โค้ด และสังเคราะห์หลักฐาน ชิ้นงานสุดท้ายยังต้องตรวจเทียบต้นทางและผลเครื่องมือจริง รักษาความกำกวมที่ค้างเมื่อข้อมูลให้มาไม่รองรับข้อสรุปแน่นอน ชิ้นงานที่มีประโยชน์คือคำตอบ โค้ด หรือระเบียนที่งานขอและมีหลักฐานรองรับเพียงพอให้ประเมินข้อจำกัดการใช้จริง",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "1ed0e3f864103f28fc36d52cedeb6f0cdc656f0e18ff0bbca0ba369576830e8f",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "th",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">G</span><h2 id=\"sheet-title\">Google: Gemini 3.1 Pro Preview (batch)</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"ปิด\">×</button></div><div class=\"idline\"><span>Google /</span><code>google/gemini-3.1-pro-preview:batch</code><button type=\"button\" id=\"copy-id\">คัดลอก ID</button></div><nav class=\"card-jump-nav\" aria-label=\"ส่วนต่าง ๆ ของการ์ดโมเดล\"><button type=\"button\" data-card-jump=\"overview\">เริ่มต้น</button><button type=\"button\" data-card-jump=\"methods\">อินพุตและเมธอด</button><button type=\"button\" data-card-jump=\"pricing\">ราคา</button><button type=\"button\" data-card-jump=\"examples\">ตัวอย่าง</button><button type=\"button\" data-card-jump=\"results\">ผลลัพธ์</button><button type=\"button\" data-card-jump=\"aliases\">ชื่ออื่น</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"เมธอด API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Ultra|batches|/v1/batches|google%2Fgemini-3.1-pro-preview%3Abatch\">แบตช์</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">เริ่มต้น</h3><p class=\"mdesc-full\">Gemini 3.1 Pro Preview เป็นโมเดลใช้เหตุผลหลายรูปแบบของ Google สำหรับงานซอฟต์แวร์ อัลกอริทึม และความรู้ที่ซับซ้อน รับข้อความ ภาพ เสียง วิดีโอ และ PDF แล้วส่งข้อความหรือโค้ด พร้อมเครื่องมือและเอาต์พุตมีโครงสร้าง ระดับเหตุผล Low, medium และ high กำกับความพยายาม โดย high เป็นค่าเริ่มต้นตามเอกสาร</p><dl class=\"card-io\" data-card-io><div><dt>อินพุตที่รองรับ</dt><dd>ข้อความ</dd></div><div><dt>ผลลัพธ์</dt><dd>ข้อความ</dd></div></dl><details class=\"card-about\"><summary>เกี่ยวกับโมเดล</summary><p class=\"note-s\" data-model-method-boundary>คำอธิบายนี้ครอบคลุมความสามารถของโมเดล อินพุต เอาต์พุต และตัวเลือกที่ใช้ได้ใน Ailoot แสดงด้านล่างตามเมธอดที่เลือก</p><div class=\"mabout\" id=\"m-about\"><p>Gemini 3.1 Pro Preview เป็นโมเดลข้อความเน้นเหตุผลของ Google สำหรับงานซับซ้อนที่ต้องใช้วิศวกรรมซอฟต์แวร์ พัฒนาอัลกอริทึม หรือสังเคราะห์หลักฐานหลายสื่อ พัฒนาจาก Gemini 3 Pro โดยเน้นการใช้เครื่องมือแม่นยำ การให้เหตุผลมีประสิทธิภาพขึ้น และการดำเนินงานหลายขั้นตอนที่เชื่อถือได้ ข้อความ ภาพ เสียง วิดีโอ และ PDF ประกอบคำตอบเขียน ชิ้นงานโค้ด หรือผลมีโครงสร้างได้</p><p>สำหรับงานโค้ดท้าทาย ให้เป้าหมาย ข้อมูลรีโพซิทอรีเกี่ยวข้อง พฤติกรรมที่พบ และข้อจำกัดที่คงไว้ รีโพซิทอรีโค้ดทั้งชุดให้บริบทงานได้ สำหรับตรวจสัญญาโค้ด ให้โมเดลเทียบการจัดการสัญญาข้อมูลร่วมของสองโมดูล ระบุจุดไม่ตรง และเสนอการแก้เฉพาะจุดพร้อมอ้างอิงโค้ดรองรับ เอาต์พุตที่มีประโยชน์แยกการวิเคราะห์ การแก้ที่เสนอ และหลักฐานออกจากการยืนยันที่แอปพลิเคชันที่เชื่อมต่อดำเนินการ</p><p>สื่อเปิดตัวสาธิตคำอธิบายภาพด้วยโค้ดและโครงการโต้ตอบ รวมเอาต์พุต SVG เคลื่อนไหวจากบรีฟข้อความ สิ่งเหล่านี้เป็นชิ้นงานโค้ด แทนการสร้างภาพราสเตอร์ บรีฟชัดกำหนดสิ่งที่จะอธิบาย พฤติกรรมภาพ และข้อมูลที่ต้องแสดง ตรวจโค้ดและการเรนเดอร์กับข้อกำหนดเหล่านั้น สำหรับสังเคราะห์ข้อมูล ให้แหล่งจริงและขอมุมมองเดียวที่รักษาความสัมพันธ์และเงื่อนไขประกอบที่พบในข้อมูล</p><p>ระดับ thinking ที่ระบุคือ low, medium และ high โดย high เป็นค่าเริ่มต้นของ 3.1 Pro Preview ปิด thinking ทั้งหมดในโปรไฟล์ Pro นี้ไม่ได้ เลือกความพยายามต่ำลงสำหรับคำตอบมีขอบเขตและมากขึ้นสำหรับงานหลายขั้นตอนยาก พร้อมเผื่อเอาต์พุตเพียงพอสำหรับชิ้นงานสุดท้าย เพดานเอาต์พุตเล็กอาจตัดการให้เหตุผลก่อนมีคำตอบที่ใช้ได้ คู่มือ thinking แยกบทสรุปเหตุผลจากกระบวนการภายในเต็ม และอธิบายความสำคัญของบริบท thought-signature ในบทสนทนา</p><p>ตาราง Preview ตรงตัวระบุการเรียกฟังก์ชัน รันโค้ด อิงผลค้นหา อิง Maps บริบท URL และเอาต์พุตมีโครงสร้าง โดยจำกัด File Search ไว้ที่ AI Studio ให้จุดประสงค์ฟังก์ชันและนิยามพารามิเตอร์ แล้วทำต่อจากผลที่คืนจริง โปรไฟล์ Custom Tools Preview แยกปรับเพื่อให้ความสำคัญเครื่องมือกำหนดเองและ bash เป็นเอนด์พอยต์ผู้ผลิตที่มีชื่อเฉพาะ จึงไม่ควรถือความเชี่ยวชาญนั้นเป็นคุณสมบัติทุกคำขอ 3.1 Pro โดยไม่ระบุ เลือกสคีมาผลมีโครงสร้างเมื่องานต้องการระเบียนกำหนดไว้แทนร้อยแก้วอิสระ</p><p>สำหรับวิเคราะห์หลายสื่อ ระบุหน้า ภาพ ช่วงบันทึก หรือเหตุการณ์วิดีโอที่เกี่ยวข้อง สำหรับวิเคราะห์เอกสาร ให้เทียบแผนภาพกับข้อกำหนดเขียนและคืนแต่ละจุดไม่ตรงพร้อมข้อความรองรับ แหล่งเสียงพูดให้บทถอดเสียงหรือการตีความเป็นข้อความได้ เก็บแหล่งอ้างอิงสำหรับข้อสรุปที่ต้องตรวจ และแยกสิ่งที่เห็นหรือระบุจากสิ่งอนุมาน โปรไฟล์นี้ส่งออกข้อความรวมโค้ด การสร้างภาพหรือเสียงพูดดั้งเดิมไม่อยู่ในตารางความสามารถตรงตัว</p><p>ข้อมูลรุ่น 3.1 Pro ดั้งเดิมระบุบริบทสูงสุด 1M และเอาต์พุตข้อความ 64K ตาราง API Preview ตรงตัวระบุอินพุต 1,048,576 และเอาต์พุต 65,536 โทเคน รวมคำสั่ง ประวัติสนทนา และสื่อในงบอินพุต ระบุแคชและการประมวลผล batch พร้อม Flex และ Priority สำหรับโปรไฟล์ผู้ผลิต สำหรับหลายรายการอิสระ ให้กำหนดเอาต์พุตที่ต้องการและเก็บรหัสต้นทางแต่ละรายการ แทนรวมหลักฐานไม่เกี่ยวกันเป็นคำตอบที่ติดตามไม่ได้</p><p>รุ่น Preview ที่มีชื่อนี้ยังแยกจากโปรไฟล์ Custom Tools ของ Pro และรุ่น Flash หรือ Pro ภายหลัง จุดแข็งเกี่ยวกับเหตุผลซับซ้อน โค้ด และสังเคราะห์หลักฐาน ชิ้นงานสุดท้ายยังต้องตรวจเทียบต้นทางและผลเครื่องมือจริง รักษาความกำกวมที่ค้างเมื่อข้อมูลให้มาไม่รองรับข้อสรุปแน่นอน ชิ้นงานที่มีประโยชน์คือคำตอบ โค้ด หรือระเบียนที่งานขอและมีหลักฐานรองรับเพียงพอให้ประเมินข้อจำกัดการใช้จริง</p></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">ใช้งานได้ใน Ailoot · อินพุตและเมธอด</h3><details class=\"card-method\" open><summary><b>Ailoot Ultra · การประมวลผลแบบชุด</b> <code>POST /v1/batches</code></summary><dl class=\"method-capabilities\"><div><dt>ขาเข้า</dt><dd><code>text</code></dd></div><div><dt>ขาออก</dt><dd><code>text</code></dd></div><div><dt>รูปแบบเอาต์พุต</dt><dd>JSON ของ results[].response.body ที่ส่งกลับโดยตรง</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th><th>ข้อกำหนด</th><th>ค่าและข้อจำกัด</th><th>ค่าเริ่มต้น</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">endpoint</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>/v1/chat/completions</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>google/gemini-3.1-pro-preview:batch</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">requests</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>batch_item[]</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>จำนวนรายการขั้นต่ำ: 1</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">requests[].custom_id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">requests[].body.messages</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>message[]</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>จำเป็น</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">completion_window</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>24h</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">provider</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>object|null</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">requests[].body.model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>google/gemini-3.1-pro-preview:batch, google/gemini-3.1-pro-preview</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">provider.only</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>string[]</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>google-vertex/global</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">provider.allow_fallbacks</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span><code>boolean|null</code></td><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ไม่บังคับ</td><td data-cell-label=\"ค่าและข้อจำกัด\"><span class=\"card-cell-label\">ค่าและข้อจำกัด</span><div>false, null</div></td><td data-cell-label=\"ค่าเริ่มต้น\" data-default=\"unspecified\"><span class=\"card-cell-label\">ค่าเริ่มต้น</span>—</td></tr></tbody></table></div><details class=\"note-s\" data-method-contract><summary>พารามิเตอร์และวงจรการทำงานของเมธอด</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>พารามิเตอร์</th><th>ข้อกำหนด</th></tr></thead><tbody><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>content_type</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>application/json</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>required</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>endpoint, model, requests</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>material_types</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>text</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>representation</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ส่ง requests[] ไว้ในคำขอโดยตรง โดยแต่ละรายการมี custom_id และ body</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>request_endpoint_profile</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>/v1/chat/completions</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>file_material</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>ผู้เรียกใช้อาจอ่านไฟล์ JSONL ที่เข้ารหัส UTF-8 จากเครื่องของตนลงใน requests[] ได้ ไม่มีการใช้ค่าระบุวัตถุประสงค์การอัปโหลด input_file_id หรือการอ้างอิงไฟล์ หากไม่มีข้อมูลของลูกค้าหรือข้อมูลว่าง ให้หยุดการเตรียมก่อนส่ง POST</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>serialization_order</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>endpoint, model, provider (หากระบุมา), completion_window (หากระบุมา), requests อยู่ท้ายสุด</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>optional_controls</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>provider.only, provider.allow_fallbacks, completion_window</td></tr><tr><th data-cell-label=\"พารามิเตอร์\" scope=\"row\"><span class=\"card-cell-label\">พารามิเตอร์</span><code>schema_scope</code></th><td data-cell-label=\"ข้อกำหนด\"><span class=\"card-cell-label\">ข้อกำหนด</span>เนื้อหาคำขอ Chat Completions แบบข้อความ ภายในโครงสร้างคำขอแบบชุดที่ส่งโดยตรงตามที่ระบุในเอกสาร</td></tr></tbody></table></div><p>วงจรการทำงาน: <code>asynchronous</code></p><p class=\"note-s\"><code>GET /v1/batches/{operation_id}</code> · ค่า response.id จริงจากการตอบกลับคำขอสร้างครั้งเดิม โดยใช้ผู้ใช้/คีย์/กลุ่มเดิม</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">ราคา</h3><div data-native-semantic-method=\"v1\" data-tariff-reference-only><p class=\"note-s\" data-rate-support-note>ข้อมูลอัตราราคาไม่ได้เพิ่มตัวเลือกคำขอ พารามิเตอร์ที่รองรับระบุไว้สำหรับเมธอดที่เลือก</p><dl data-price-conditions><dt>โหมดรวดเร็ว</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมดรวดเร็ว</span></dd><dt>โหมดยืดหยุ่น</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อเลือกโหมด flex</span></dd><dt>ระดับการใช้เหตุผลสูงสุด</dt><dd>ไม่ได้ระบุ <span class=\"note-s\">เมื่อใช้การปรับตามค่าเริ่มต้น (default) สำหรับระดับการใช้เหตุผลสูงสุด</span></dd><dt>การคิดราคาแคชแบบระบุชัด</dt><dd>ไม่ได้เปิดใช้ <span class=\"note-s\">เมื่อร้องขอแคชแบบระบุชัด</span></dd></dl></div><div data-declared-tariff-pricing><h4>อัตราค่าบริการ Ailoot</h4><h4>ราคาตามการตั้งค่า</h4><p class=\"note-s\">เทียบค่าบริการแต่ละรายการกับเงื่อนไขที่แสดง เลือกใช้อัตราเดียวสำหรับแต่ละชุดการตั้งค่าที่เป็นตัวเลือกทดแทนกัน</p><div class=\"tw\" data-pricing-profiles><table><thead><tr><th>การตั้งค่า</th><th>ตารางอัตราค่าบริการ</th><th>โทเค็นบริบท มากกว่า</th><th>โทเค็นบริบท ไม่เกินและรวมค่า</th><th>ค่าบริการ</th></tr></thead><tbody><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>อัตราราคาพื้นฐานของโทเคน</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>อัตราพื้นฐาน</td><td data-cell-label=\"โทเค็นบริบท มากกว่า\"><span class=\"card-cell-label\">โทเค็นบริบท มากกว่า</span>—</td><td data-cell-label=\"โทเค็นบริบท ไม่เกินและรวมค่า\"><span class=\"card-cell-label\">โทเค็นบริบท ไม่เกินและรวมค่า</span>ไม่มีขีดจำกัดสูงสุด</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต</span> <b>$0.002</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต</span> <b>$0.012</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับความยาวคำขอ 1</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"โทเค็นบริบท มากกว่า\"><span class=\"card-cell-label\">โทเค็นบริบท มากกว่า</span>0</td><td data-cell-label=\"โทเค็นบริบท ไม่เกินและรวมค่า\"><span class=\"card-cell-label\">โทเค็นบริบท ไม่เกินและรวมค่า</span>200,000</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต</span> <b>$0.002</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต</span> <b>$0.012</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr><tr><th data-cell-label=\"การตั้งค่า\" scope=\"row\"><span class=\"card-cell-label\">การตั้งค่า</span>ระดับความยาวคำขอ 2</th><td data-cell-label=\"ตารางอัตราค่าบริการ\"><span class=\"card-cell-label\">ตารางอัตราค่าบริการ</span>—</td><td data-cell-label=\"โทเค็นบริบท มากกว่า\"><span class=\"card-cell-label\">โทเค็นบริบท มากกว่า</span>200,000</td><td data-cell-label=\"โทเค็นบริบท ไม่เกินและรวมค่า\"><span class=\"card-cell-label\">โทเค็นบริบท ไม่เกินและรวมค่า</span>ไม่มีขีดจำกัดสูงสุด</td><td data-cell-label=\"ค่าบริการ\"><span class=\"card-cell-label\">ค่าบริการ</span><div><span>ขาเข้า · โทเค็นอินพุต</span> <b>$0.004</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาออก · โทเค็นเอาต์พุต</span> <b>$0.018</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การอ่านแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div><div><span>ขาเข้า · การเขียนแคช, 1 ชั่วโมง</span> <b>—</b> <span class=\"price-unit\">/ 1K โทเค็น</span></div></td></tr></tbody></table></div></div><p class=\"note-s\">Ailoot กันยอดเงินประมาณการไว้ก่อนส่งคำขอ หลังได้ผลลัพธ์ จะคิดค่าบริการสุดท้ายตามการใช้งานที่วัดได้ การคิดค่าบริการแบบสตรีมใช้บันทึกการใช้งานสุดท้าย <a href=\"/docs/th/billing/reserve/\">วิธีกันยอดเงินและคิดค่าบริการสุดท้าย →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">ตัวอย่างคำขอ</h3><h4>Ailoot Ultra · การประมวลผลแบบชุด</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1464-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1464-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · ข้อมูลทดสอบที่เก็บไว้</button><button class=\"cg-tab\" id=\"model-code-1464-tab-1\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1464-panel-1\" aria-selected=\"false\" tabindex=\"-1\">Python HTTP · JSONL จริงของลูกค้า</button><button class=\"cg-tab\" id=\"model-code-1464-tab-2\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1464-panel-2\" aria-selected=\"false\" tabindex=\"-1\">Python · บันทึกผลลัพธ์ที่เสร็จสมบูรณ์ทุกรายการ</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1464-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1464-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json\nfrom pathlib import Path\nbody=json.loads(&#39;{&quot;endpoint&quot;:&quot;/v1/chat/completions&quot;,&quot;model&quot;:&quot;google/gemini-3.1-pro-preview:batch&quot;,&quot;requests&quot;:[{&quot;custom_id&quot;:&quot;req-0001&quot;,&quot;body&quot;:{&quot;messages&quot;:[{&quot;role&quot;:&quot;user&quot;,&quot;content&quot;:&quot;Hello!&quot;}],&quot;max_tokens&quot;:16}}]}&#39;)\nPath(&quot;batch-request.json&quot;).write_text(json.dumps(body,ensure_ascii=False),encoding=&quot;utf-8&quot;)\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/batches \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @batch-request.json -D batch-response-headers.txt -o batch-create-response.json\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1464-panel-1\" role=\"tabpanel\" aria-labelledby=\"model-code-1464-tab-1\" hidden><pre data-lang=\"python\"><code>import json, os\nfrom pathlib import Path\nfrom urllib.request import Request, urlopen\n\ndef prepare_requests(customer_path):\n    path = Path(customer_path)\n    if not path.is_file(): raise ValueError(&quot;Customer JSONL file is missing&quot;)\n    items = [json.loads(line) for line in path.read_text(encoding=&quot;utf-8&quot;).splitlines() if line.strip()]\n    if not items: raise ValueError(&quot;Customer JSONL contains no requests&quot;)\n    ids = set()\n    for item in items:\n        if set(item) != {&quot;custom_id&quot;, &quot;body&quot;}: raise ValueError(&quot;Each item needs custom_id and body&quot;)\n        cid = item[&quot;custom_id&quot;]\n        if not isinstance(cid, str) or not cid.strip() or cid in ids: raise ValueError(&quot;custom_id must be nonempty and unique&quot;)\n        ids.add(cid)\n        if not isinstance(item[&quot;body&quot;], dict) or not item[&quot;body&quot;].get(&quot;messages&quot;): raise ValueError(&quot;Supply actual text messages&quot;)\n        supplied_model = item[&quot;body&quot;].get(&quot;model&quot;)\n        if supplied_model is not None and supplied_model not in [&#39;google/gemini-3.1-pro-preview:batch&#39;, &#39;google/gemini-3.1-pro-preview&#39;]: raise ValueError(&quot;body.model must be an exact documented caller or wire ID&quot;)\n    return {&quot;endpoint&quot;:&quot;/v1/chat/completions&quot;, &quot;model&quot;:&quot;google/gemini-3.1-pro-preview:batch&quot;, &quot;requests&quot;:items}\n\nif __name__ == &quot;__main__&quot;:\n    material = os.environ.get(&quot;AILOOT_BATCH_REQUESTS_JSONL&quot;, &quot;&quot;)\n    if not material: raise SystemExit(&quot;Set AILOOT_BATCH_REQUESTS_JSONL to your actual customer file&quot;)\n    body = prepare_requests(material)\n    key = os.environ.get(&quot;AILOOT_API_KEY&quot;, &quot;&quot;)\n    if not key: raise SystemExit(&quot;Set AILOOT_API_KEY&quot;)\n    request = Request(&quot;https://api.ailoot.ai/v1/batches&quot;, data=json.dumps(body, ensure_ascii=False).encode(&quot;utf-8&quot;), headers={&quot;Authorization&quot;:&quot;Bearer &quot; + key, &quot;Content-Type&quot;:&quot;application/json&quot;}, method=&quot;POST&quot;)\n    with urlopen(request) as response:\n        raw = response.read()\n        Path(&quot;batch-create-response.json&quot;).write_bytes(raw)\n        print(raw.decode(&quot;utf-8&quot;))\n</code></pre></div><div class=\"cg-pane\" id=\"model-code-1464-panel-2\" role=\"tabpanel\" aria-labelledby=\"model-code-1464-tab-2\" hidden><pre data-lang=\"python\"><code>import json\nfrom pathlib import Path\nraw = Path(&quot;batch-status-response.json&quot;).read_bytes()\nresponse = json.loads(raw)\nif response.get(&quot;status&quot;) != &quot;completed&quot;:\n    raise SystemExit(&quot;Keep the original operation; read its status without resubmitting&quot;)\nresults = response.get(&quot;results&quot;)\nif not isinstance(results, list) or not results:\n    raise SystemExit(&quot;Preserve the original response; completed results are missing&quot;)\nPath(&quot;batch-results.jsonl&quot;).write_text(&quot;&quot;.join(json.dumps(item, ensure_ascii=False) + &quot;\\n&quot; for item in results), encoding=&quot;utf-8&quot;)\n# Preserve batch-status-response.json with aggregate usage and every result/error.\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">รับและบันทึกผลลัพธ์</h3><h4>Ailoot Ultra · การประมวลผลแบบชุด</h4><p class=\"note-s\">JSON ของ results[].response.body ที่ส่งกลับโดยตรง</p><ul class=\"card-result-paths\"><li><code>GET /v1/batches/{operation_id}</code></li></ul><h5>ตรวจสอบสถานะงาน</h5><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"ตัวเลือกโค้ด\"><button class=\"cg-tab\" id=\"model-code-1465-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-1465-panel-0\" aria-selected=\"true\" tabindex=\"0\">curl · สถานะของการดำเนินการเดิม</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"คัดลอกโค้ด\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-1465-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-1465-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\nBATCH_OPERATION_ID=&quot;$(python3 - &lt;&lt;&#39;PY_ID&#39;\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nresponse = json.loads(Path(&quot;batch-create-response.json&quot;).read_text(encoding=&quot;utf-8&quot;))\noperation = response.get(&quot;id&quot;)\nif not isinstance(operation, str) or not operation: raise SystemExit(&quot;No actual original operation ID; preserve the response and do not resubmit&quot;)\nprint(quote(operation, safe=&quot;&quot;))\nPY_ID\n)&quot;\ncurl --fail-with-body --silent --show-error &quot;https://api.ailoot.ai/v1/batches/$BATCH_OPERATION_ID&quot; \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -o batch-status-response.json\n</code></pre></div></div></div><div class=\"card-result-process\" data-all-results><h5>เก็บผลลัพธ์ที่เสร็จสมบูรณ์ทั้งหมด</h5><p class=\"note-s\">เก็บทุกการตอบกลับ ไฟล์ และส่วนเนื้อหาที่ส่งกลับมาอย่างครบถ้วน</p><p class=\"note-s\">เก็บ JSON สถานะเดิมให้ครบถ้วน รวมถึงผลลัพธ์/custom_id ทุกรายการ และเนื้อหาการตอบกลับหรือข้อผิดพลาดทั้งหมด บันทึก results[] ที่เสร็จสมบูรณ์เป็น JSONL โดยไม่กรองข้อมูล</p></div><div class=\"card-result-process\" data-unknown-recovery><h5>เมื่อต้องตรวจสอบการตอบกลับต้นฉบับ</h5><p class=\"note-s\">เก็บ ID การดำเนินการเดิมไว้ การตอบกลับ 503 result_pending_check มี X-Should-Retry:false ห้ามส่งงานแบบชุดเดิมซ้ำเด็ดขาดเมื่อยังไม่ทราบสถานะของงาน</p></div><details class=\"card-about\" data-output-fields><summary>ฟิลด์การตอบกลับ</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>ฟิลด์</th><th>ประเภท</th></tr></thead><tbody><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].custom_id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].response.body.choices[].message.content</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string|null</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].error</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>object|null</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>object|null</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">endpoint</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">status</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">request_counts</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>object</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].response.status_code</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>integer</td></tr><tr><th data-cell-label=\"ฟิลด์\" scope=\"row\"><span class=\"card-cell-label\">ฟิลด์</span><code class=\"card-field-name\">results[].response.request_id</code></th><td data-cell-label=\"ประเภท\" data-field-type><span class=\"card-cell-label\">ประเภท</span>string</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>ข้อผิดพลาดและขั้นตอนถัดไป</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>การตอบกลับ</th><th>เงื่อนไข</th><th>ขั้นตอนถัดไป</th></tr></thead><tbody><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>โครงสร้างคำขอแบบส่งโดยตรงตามเอกสารไม่ถูกต้อง มีคีย์ซ้ำ หรือมีข้อขัดแย้งเกี่ยวกับตัวตนของรายการหรือความสามารถของโมเดลที่กำหนดไว้</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>แก้ไขฟิลด์ที่ระบุให้ถูกต้องก่อนส่งคำขอใหม่ทุกครั้ง</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>401 · <code>authentication_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>คีย์ API ไม่ถูกต้อง</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>ใช้คีย์ Ailoot ที่ได้รับอนุญาต</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>403 · <code>permission_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>กลุ่มสำหรับการประมวลผลแบบชุดไม่พร้อมใช้งาน</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>ตรวจสอบสิทธิ์ของคีย์/กลุ่ม</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>422 · <code>invalid_request_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>การประมวลผลแบบชุดเรียกเก็บเงินจากยอดเงินคงเหลือ คำขอสร้างที่ใช้การเรียกเก็บผ่านการสมัครสมาชิกจะถูกปฏิเสธ</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>ใช้กลุ่มที่ได้รับอนุญาตให้เรียกเก็บเงินจากยอดเงินคงเหลือ</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>422 · <code>price_unavailable</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ไม่สามารถคำนวณราคาล่วงหน้าสำหรับข้อมูลนำเข้าของงานแบบชุดได้</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>เก็บการตอบกลับไว้ และใช้ข้อมูลนำเข้าตามเอกสารของ API ประเภทนั้น</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>402 · <code>billing_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ไม่สามารถกันยอดเงินสำรองสำหรับการประมวลผลแบบชุดได้</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>แก้ไขเงื่อนไขการรับคำขอให้เรียบร้อยก่อนส่งคำขอใหม่</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>503 · <code>price_unavailable</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ราคาของวิธีประมวลผลแบบชุด/อัตราราคาของระบบไม่พร้อมใช้งาน</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>เก็บการตอบกลับไว้ ห้ามแทนที่ด้วยราคาอื่น</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>503 · <code>api_error</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>เส้นทางที่ระบุไว้ของผู้ให้บริการต้นทางไม่พร้อมใช้งาน</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>เก็บการตอบกลับไว้เพื่อแก้ไขเส้นทางการส่งคำขอ</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>503 · <code>result_pending_check</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ผลลัพธ์เดิมต้องได้รับการตรวจสอบ โดยมี X-Should-Retry:false</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>เก็บค่า operation_id/id เดิมไว้แล้วอ่านสถานะของการดำเนินการนั้น ห้ามส่ง POST เดิมซ้ำเด็ดขาด</td></tr><tr><th data-cell-label=\"การตอบกลับ\" scope=\"row\"><span class=\"card-cell-label\">การตอบกลับ</span>404 · <code>not_found</code></th><td data-cell-label=\"เงื่อนไข\"><span class=\"card-cell-label\">เงื่อนไข</span>ไม่พบการดำเนินการตรวจสอบสถานะงานแบบชุด หรือการดำเนินการนั้นเป็นของตัวตนอื่น</td><td data-cell-label=\"ขั้นตอนถัดไป\"><span class=\"card-cell-label\">ขั้นตอนถัดไป</span>ใช้ค่า id เดิมให้ตรงทุกตัว พร้อมผู้ใช้/คีย์/กลุ่มเดิม</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">ชื่ออื่น</h3><h4>ชื่ออื่นของโมเดล</h4><p class=\"note-s\"><span data-model-alias-route=\"Ultra\"><b>Ailoot Ultra</b> <a href=\"#m=google%2Fgemini-3.1-pro-preview%3Abatch&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview%3Abatch&amp;fmt=batches\"><code>google/gemini-3.1-pro-preview:batch</code></a></span></p><h4>ชื่อพาธเมธอดอื่น</h4><p class=\"note-s\">ใช้พาธเมธอดที่แสดงด้านบน</p><h4>ID ที่เกี่ยวข้องสำหรับเรียกใช้โมเดล</h4><p class=\"note-s\"><a href=\"#m=google%2Fgemini-3.1-pro-preview%3Abatch&amp;route=Ultra&amp;caller=google%2Fgemini-3.1-pro-preview%3Abatch&amp;fmt=batches\"><code>google/gemini-3.1-pro-preview:batch</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "google/gemini-3.1-pro-preview:batch",
        "fmt": "batches",
        "http": "POST",
        "path": "/v1/batches",
        "request_model_id": "google/gemini-3.1-pro-preview:batch",
        "route_label": "Ultra"
      },
      "method_key": "Ultra|batches|/v1/batches|google%2Fgemini-3.1-pro-preview%3Abatch",
      "ordinal": 0,
      "rawMethod": {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Preserve full JSON and every result; provider real IDs are only read from actual returned responses.",
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "errors": [
              {
                "code": null,
                "condition": "โครงสร้างคำขอแบบส่งโดยตรงตามเอกสารไม่ถูกต้อง มีคีย์ซ้ำ หรือมีข้อขัดแย้งเกี่ยวกับตัวตนของรายการหรือความสามารถของโมเดลที่กำหนดไว้",
                "http_status": 400,
                "recovery": "แก้ไขฟิลด์ที่ระบุให้ถูกต้องก่อนส่งคำขอใหม่ทุกครั้ง",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "คีย์ API ไม่ถูกต้อง",
                "http_status": 401,
                "recovery": "ใช้คีย์ Ailoot ที่ได้รับอนุญาต",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "กลุ่มสำหรับการประมวลผลแบบชุดไม่พร้อมใช้งาน",
                "http_status": 403,
                "recovery": "ตรวจสอบสิทธิ์ของคีย์/กลุ่ม",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "การประมวลผลแบบชุดเรียกเก็บเงินจากยอดเงินคงเหลือ คำขอสร้างที่ใช้การเรียกเก็บผ่านการสมัครสมาชิกจะถูกปฏิเสธ",
                "http_status": 422,
                "recovery": "ใช้กลุ่มที่ได้รับอนุญาตให้เรียกเก็บเงินจากยอดเงินคงเหลือ",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "ไม่สามารถคำนวณราคาล่วงหน้าสำหรับข้อมูลนำเข้าของงานแบบชุดได้",
                "http_status": 422,
                "recovery": "เก็บการตอบกลับไว้ และใช้ข้อมูลนำเข้าตามเอกสารของ API ประเภทนั้น",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "ไม่สามารถกันยอดเงินสำรองสำหรับการประมวลผลแบบชุดได้",
                "http_status": 402,
                "recovery": "แก้ไขเงื่อนไขการรับคำขอให้เรียบร้อยก่อนส่งคำขอใหม่",
                "type": "billing_error"
              },
              {
                "code": null,
                "condition": "ราคาของวิธีประมวลผลแบบชุด/อัตราราคาของระบบไม่พร้อมใช้งาน",
                "http_status": 503,
                "recovery": "เก็บการตอบกลับไว้ ห้ามแทนที่ด้วยราคาอื่น",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "เส้นทางที่ระบุไว้ของผู้ให้บริการต้นทางไม่พร้อมใช้งาน",
                "http_status": 503,
                "recovery": "เก็บการตอบกลับไว้เพื่อแก้ไขเส้นทางการส่งคำขอ",
                "type": "api_error"
              },
              {
                "code": "result_pending_check",
                "condition": "ผลลัพธ์เดิมต้องได้รับการตรวจสอบ โดยมี X-Should-Retry:false",
                "http_status": 503,
                "recovery": "เก็บค่า operation_id/id เดิมไว้แล้วอ่านสถานะของการดำเนินการนั้น ห้ามส่ง POST เดิมซ้ำเด็ดขาด",
                "type": null
              },
              {
                "code": "not_found",
                "condition": "ไม่พบการดำเนินการตรวจสอบสถานะงานแบบชุด หรือการดำเนินการนั้นเป็นของตัวตนอื่น",
                "http_status": 404,
                "recovery": "ใช้ค่า id เดิมให้ตรงทุกตัว พร้อมผู้ใช้/คีย์/กลุ่มเดิม",
                "type": null
              }
            ],
            "example_body": {
              "endpoint": "/v1/chat/completions",
              "model": "google/gemini-3.1-pro-preview:batch",
              "requests": [
                {
                  "body": {
                    "max_tokens": 16,
                    "messages": [
                      {
                        "content": "Hello!",
                        "role": "user"
                      }
                    ]
                  },
                  "custom_id": "req-0001"
                }
              ]
            },
            "input_constraints": [
              "Use the exact shown :batch model ID.",
              "Each custom_id must be nonempty and unique within the batch.",
              "Keep requests last in the serialized body; duplicate JSON keys are rejected.",
              "Each body.model is omitted or equals the exact batch caller or its documented base ID.",
              "Per-item provider, service_tier and input_type are outside this batch profile.",
              "stream is omitted or false.",
              "Supply text messages for this Chat batch profile; image/audio/file/video objects, hosted tools and cache-control fields are outside this profile.",
              "If body.model is present, use only the exact caller or wire ID listed here; no suffix conversion is needed.",
              "For google/ wire IDs, all items use an identical response_format."
            ],
            "outputs": {
              "all_results": "เก็บ JSON สถานะเดิมให้ครบถ้วน รวมถึงผลลัพธ์/custom_id ทุกรายการ และเนื้อหาการตอบกลับหรือข้อผิดพลาดทั้งหมด บันทึก results[] ที่เสร็จสมบูรณ์เป็น JSONL โดยไม่กรองข้อมูล",
              "enclosing_family": "batch",
              "family": "text",
              "fields": [
                {
                  "name": "results[].custom_id",
                  "type": "string"
                },
                {
                  "name": "results[].response.body.choices[].message.content",
                  "type": "string|null"
                },
                {
                  "name": "results[].error",
                  "type": "object|null"
                },
                {
                  "name": "usage",
                  "type": "object|null"
                },
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "endpoint",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "request_counts",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "results[].id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "results[].response.status_code",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "results[].response.request_id",
                  "type": "string"
                }
              ],
              "format": "JSON ของ results[].response.body ที่ส่งกลับโดยตรง"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "/v1/chat/completions"
                ],
                "enum_known": true,
                "name": "endpoint",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview:batch"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "requests",
                "required": true,
                "type": "batch_item[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "requests[].custom_id",
                "required": true,
                "type": "string",
                "unique_within_batch": true
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "requests[].body.messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "24h"
                ],
                "enum_known": true,
                "name": "completion_window",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview:batch",
                  "google/gemini-3.1-pro-preview"
                ],
                "enum_known": true,
                "name": "requests[].body.model",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  [
                    "google-vertex/global"
                  ]
                ],
                "enum_known": true,
                "name": "provider.only",
                "required": false,
                "type": "string[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "provider.allow_fallbacks",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "provider_policy": {
              "allow_fallbacks": false,
              "configured_only": [
                "google-vertex/global"
              ],
              "per_item_override": false,
              "when_omitted": "Current Source injects the exact persisted declaration before fresh submission."
            },
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "completion_window": {
                  "enum": [
                    "24h"
                  ],
                  "type": "string"
                },
                "endpoint": {
                  "enum": [
                    "/v1/chat/completions"
                  ],
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-pro-preview:batch"
                  ],
                  "type": "string"
                },
                "provider": {
                  "additionalProperties": false,
                  "properties": {
                    "allow_fallbacks": {
                      "enum": [
                        false,
                        null
                      ],
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "only": {
                      "enum": [
                        [
                          "google-vertex/global"
                        ]
                      ],
                      "items": {
                        "enum": [
                          "google-vertex/global"
                        ],
                        "type": "string"
                      },
                      "maxItems": 1,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "requests": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "body": {
                        "additionalProperties": true,
                        "properties": {
                          "max_tokens": {
                            "minimum": 1,
                            "type": "integer"
                          },
                          "messages": {
                            "items": {
                              "properties": {
                                "content": {
                                  "type": "string"
                                },
                                "role": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "role",
                                "content"
                              ],
                              "type": "object"
                            },
                            "minItems": 1,
                            "type": "array"
                          },
                          "model": {
                            "enum": [
                              "google/gemini-3.1-pro-preview:batch",
                              "google/gemini-3.1-pro-preview"
                            ],
                            "type": "string"
                          }
                        },
                        "required": [
                          "messages"
                        ],
                        "type": "object"
                      },
                      "custom_id": {
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "custom_id",
                      "body"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                }
              },
              "required": [
                "endpoint",
                "model",
                "requests"
              ],
              "type": "object"
            },
            "schema_template": {
              "endpoint": "/v1/chat/completions",
              "model": "google/gemini-3.1-pro-preview:batch",
              "requests": [
                {
                  "body": {
                    "max_tokens": 16,
                    "messages": [
                      {
                        "content": "Hello!",
                        "role": "user"
                      }
                    ]
                  },
                  "custom_id": "req-0001"
                }
              ]
            },
            "unsupported": [
              "Files/input_file_id batch upload workflow",
              "active cancel route",
              "public batch list/delete/result-download route",
              "model-name-derived capability or weights equivalence"
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "ผู้เรียกใช้อาจอ่านไฟล์ JSONL ที่เข้ารหัส UTF-8 จากเครื่องของตนลงใน requests[] ได้ ไม่มีการใช้ค่าระบุวัตถุประสงค์การอัปโหลด input_file_id หรือการอ้างอิงไฟล์ หากไม่มีข้อมูลของลูกค้าหรือข้อมูลว่าง ให้หยุดการเตรียมก่อนส่ง POST",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "provider.only",
              "provider.allow_fallbacks",
              "completion_window"
            ],
            "representation": "ส่ง requests[] ไว้ในคำขอโดยตรง โดยแต่ละรายการมี custom_id และ body",
            "request_endpoint_profile": "/v1/chat/completions",
            "required": [
              "endpoint",
              "model",
              "requests"
            ],
            "schema_scope": "เนื้อหาคำขอ Chat Completions แบบข้อความ ภายในโครงสร้างคำขอแบบชุดที่ส่งโดยตรงตามที่ระบุในเอกสาร",
            "serialization_order": [
              "endpoint",
              "model",
              "provider (หากระบุมา)",
              "completion_window (หากระบุมา)",
              "requests อยู่ท้ายสุด"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "accepted_status": 202,
              "http": "POST",
              "path": "/v1/batches"
            },
            "delete": null,
            "file_upload": null,
            "mode": "asynchronous",
            "observed_status_values": [
              "validating",
              "in_progress",
              "finalizing",
              "completed",
              "failed",
              "expired",
              "cancelling",
              "cancelled"
            ],
            "owned_results": {
              "behavior": "Completed results are saved as owned JSONL, read back byte-for-byte and registered in the existing media library before publication after settlement. Status returns inline results; no separate Batch download route is added.",
              "format": "application/x-ndjson",
              "public_url_field_in_status": null
            },
            "status": {
              "http": "GET",
              "id_source": "ค่า response.id จริงจากการตอบกลับคำขอสร้างครั้งเดิม โดยใช้ผู้ใช้/คีย์/กลุ่มเดิม",
              "path": "/v1/batches/{operation_id}"
            },
            "terminal": [
              "completed",
              "failed",
              "expired",
              "cancelled"
            ],
            "unknown": "เก็บ ID การดำเนินการเดิมไว้ การตอบกลับ 503 result_pending_check มี X-Should-Retry:false ห้ามส่งงานแบบชุดเดิมซ้ำเด็ดขาดเมื่อยังไม่ทราบสถานะของงาน"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/batches"
          },
          "output": {
            "all_results": "Preserve the full original status JSON, every result/custom_id and complete response or error body. Save completed results[] as JSONL without filtering.",
            "family": "batch",
            "format": "JSON; completed results[] are returned inline and can be saved as JSONL."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "อัตราราคาพื้นฐานของโทเคน",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "ระดับความยาวคำขอ 1",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "ระดับความยาวคำขอ 2",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000018",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json\nfrom pathlib import Path\nbody=json.loads('{\"endpoint\":\"/v1/chat/completions\",\"model\":\"google/gemini-3.1-pro-preview:batch\",\"requests\":[{\"custom_id\":\"req-0001\",\"body\":{\"messages\":[{\"role\":\"user\",\"content\":\"Hello!\"}],\"max_tokens\":16}}]}')\nPath(\"batch-request.json\").write_text(json.dumps(body,ensure_ascii=False),encoding=\"utf-8\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/batches \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @batch-request.json -D batch-response-headers.txt -o batch-create-response.json\n",
            "label": "curl · retained fixture",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\nfrom urllib.request import Request, urlopen\n\ndef prepare_requests(customer_path):\n    path = Path(customer_path)\n    if not path.is_file(): raise ValueError(\"Customer JSONL file is missing\")\n    items = [json.loads(line) for line in path.read_text(encoding=\"utf-8\").splitlines() if line.strip()]\n    if not items: raise ValueError(\"Customer JSONL contains no requests\")\n    ids = set()\n    for item in items:\n        if set(item) != {\"custom_id\", \"body\"}: raise ValueError(\"Each item needs custom_id and body\")\n        cid = item[\"custom_id\"]\n        if not isinstance(cid, str) or not cid.strip() or cid in ids: raise ValueError(\"custom_id must be nonempty and unique\")\n        ids.add(cid)\n        if not isinstance(item[\"body\"], dict) or not item[\"body\"].get(\"messages\"): raise ValueError(\"Supply actual text messages\")\n        supplied_model = item[\"body\"].get(\"model\")\n        if supplied_model is not None and supplied_model not in ['google/gemini-3.1-pro-preview:batch', 'google/gemini-3.1-pro-preview']: raise ValueError(\"body.model must be an exact documented caller or wire ID\")\n    return {\"endpoint\":\"/v1/chat/completions\", \"model\":\"google/gemini-3.1-pro-preview:batch\", \"requests\":items}\n\nif __name__ == \"__main__\":\n    material = os.environ.get(\"AILOOT_BATCH_REQUESTS_JSONL\", \"\")\n    if not material: raise SystemExit(\"Set AILOOT_BATCH_REQUESTS_JSONL to your actual customer file\")\n    body = prepare_requests(material)\n    key = os.environ.get(\"AILOOT_API_KEY\", \"\")\n    if not key: raise SystemExit(\"Set AILOOT_API_KEY\")\n    request = Request(\"https://api.ailoot.ai/v1/batches\", data=json.dumps(body, ensure_ascii=False).encode(\"utf-8\"), headers={\"Authorization\":\"Bearer \" + key, \"Content-Type\":\"application/json\"}, method=\"POST\")\n    with urlopen(request) as response:\n        raw = response.read()\n        Path(\"batch-create-response.json\").write_bytes(raw)\n        print(raw.decode(\"utf-8\"))\n",
            "label": "Python HTTP · actual customer JSONL",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nBATCH_OPERATION_ID=\"$(python3 - <<'PY_ID'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nresponse = json.loads(Path(\"batch-create-response.json\").read_text(encoding=\"utf-8\"))\noperation = response.get(\"id\")\nif not isinstance(operation, str) or not operation: raise SystemExit(\"No actual original operation ID; preserve the response and do not resubmit\")\nprint(quote(operation, safe=\"\"))\nPY_ID\n)\"\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/batches/$BATCH_OPERATION_ID\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o batch-status-response.json\n",
            "label": "curl · original operation status",
            "language": "bash"
          },
          {
            "code": "import json\nfrom pathlib import Path\nraw = Path(\"batch-status-response.json\").read_bytes()\nresponse = json.loads(raw)\nif response.get(\"status\") != \"completed\":\n    raise SystemExit(\"Keep the original operation; read its status without resubmitting\")\nresults = response.get(\"results\")\nif not isinstance(results, list) or not results:\n    raise SystemExit(\"Preserve the original response; completed results are missing\")\nPath(\"batch-results.jsonl\").write_text(\"\".join(json.dumps(item, ensure_ascii=False) + \"\\n\" for item in results), encoding=\"utf-8\")\n# Preserve batch-status-response.json with aggregate usage and every result/error.\n",
            "label": "Python · save every completed result",
            "language": "python"
          }
        ],
        "family": "batch",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "batches",
        "hints": [
          "Read your actual request items before submission; inline requests are required.",
          "Keep the returned operation ID and every result. Never replay an unknown submission."
        ],
        "http": "POST",
        "in": 2,
        "input": [
          "text"
        ],
        "label": "การประมวลผลแบบชุด",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": 12,
        "output": [
          "text"
        ],
        "path": "/v1/batches",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          },
          {
            "label": "Explicit cache pricing",
            "value": "Not enabled",
            "when": "When explicit cache is requested"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000018",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-pro-preview:batch",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/batches/{operation_id}"
        ],
        "tiers": [
          {
            "cache_read": null,
            "cache_read_multiplier": null,
            "cache_write": null,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 2,
            "input_multiplier": null,
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "out": 12,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": null,
            "cache_read_multiplier": null,
            "cache_write": null,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "out": 18,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000002",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    }
  ],
  "model_id": "google/gemini-3.1-pro-preview:batch",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "facd106a79e5003eacf3ab3603543144c0bdc37ce07e27bac32e89e8195525fd",
    "input_html_sha256": "42329dee2bf77c0e7e06a28a0b2072265293d9e8c5db6348a8d2dad45e826da7",
    "private_audit_sha256": "00139fc9a01d86bf9314cb8b64281cf28ed7c2c622ec8045a4b746bfc92bb17b",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/th/google-gemini-3-1-pro-preview-u003a-batch/",
    "description": "Gemini 3.1 Pro Preview เป็นโมเดลใช้เหตุผลหลายรูปแบบของ Google สำหรับงานซอฟต์แวร์ อัลกอริทึม และความรู้ที่ซับซ้อน รับข้อความ ภาพ เสียง วิดีโอ และ PDF แล้วส่งข้อความหรือโค้ด พร้อมเครื่องมือและเอาต์พุตมีโครงสร้าง ระดับเหตุผล Low, medium และ high กำกับความพยายาม โดย high เป็นค่าเริ่มต้นตามเอกสาร",
    "locale": "th",
    "md_url": "https://ailoot.ai/models/th/google-gemini-3-1-pro-preview-u003a-batch/index.md",
    "title": "Google: Gemini 3.1 Pro Preview (batch) — Ailoot",
    "url": "https://ailoot.ai/models/th/google-gemini-3-1-pro-preview-u003a-batch/"
  },
  "rawModel": {
    "about": "Gemini 3.1 Pro Preview เป็นโมเดลข้อความเน้นเหตุผลของ Google สำหรับงานซับซ้อนที่ต้องใช้วิศวกรรมซอฟต์แวร์ พัฒนาอัลกอริทึม หรือสังเคราะห์หลักฐานหลายสื่อ พัฒนาจาก Gemini 3 Pro โดยเน้นการใช้เครื่องมือแม่นยำ การให้เหตุผลมีประสิทธิภาพขึ้น และการดำเนินงานหลายขั้นตอนที่เชื่อถือได้ ข้อความ ภาพ เสียง วิดีโอ และ PDF ประกอบคำตอบเขียน ชิ้นงานโค้ด หรือผลมีโครงสร้างได้\n\nสำหรับงานโค้ดท้าทาย ให้เป้าหมาย ข้อมูลรีโพซิทอรีเกี่ยวข้อง พฤติกรรมที่พบ และข้อจำกัดที่คงไว้ รีโพซิทอรีโค้ดทั้งชุดให้บริบทงานได้ สำหรับตรวจสัญญาโค้ด ให้โมเดลเทียบการจัดการสัญญาข้อมูลร่วมของสองโมดูล ระบุจุดไม่ตรง และเสนอการแก้เฉพาะจุดพร้อมอ้างอิงโค้ดรองรับ เอาต์พุตที่มีประโยชน์แยกการวิเคราะห์ การแก้ที่เสนอ และหลักฐานออกจากการยืนยันที่แอปพลิเคชันที่เชื่อมต่อดำเนินการ\n\nสื่อเปิดตัวสาธิตคำอธิบายภาพด้วยโค้ดและโครงการโต้ตอบ รวมเอาต์พุต SVG เคลื่อนไหวจากบรีฟข้อความ สิ่งเหล่านี้เป็นชิ้นงานโค้ด แทนการสร้างภาพราสเตอร์ บรีฟชัดกำหนดสิ่งที่จะอธิบาย พฤติกรรมภาพ และข้อมูลที่ต้องแสดง ตรวจโค้ดและการเรนเดอร์กับข้อกำหนดเหล่านั้น สำหรับสังเคราะห์ข้อมูล ให้แหล่งจริงและขอมุมมองเดียวที่รักษาความสัมพันธ์และเงื่อนไขประกอบที่พบในข้อมูล\n\nระดับ thinking ที่ระบุคือ low, medium และ high โดย high เป็นค่าเริ่มต้นของ 3.1 Pro Preview ปิด thinking ทั้งหมดในโปรไฟล์ Pro นี้ไม่ได้ เลือกความพยายามต่ำลงสำหรับคำตอบมีขอบเขตและมากขึ้นสำหรับงานหลายขั้นตอนยาก พร้อมเผื่อเอาต์พุตเพียงพอสำหรับชิ้นงานสุดท้าย เพดานเอาต์พุตเล็กอาจตัดการให้เหตุผลก่อนมีคำตอบที่ใช้ได้ คู่มือ thinking แยกบทสรุปเหตุผลจากกระบวนการภายในเต็ม และอธิบายความสำคัญของบริบท thought-signature ในบทสนทนา\n\nตาราง Preview ตรงตัวระบุการเรียกฟังก์ชัน รันโค้ด อิงผลค้นหา อิง Maps บริบท URL และเอาต์พุตมีโครงสร้าง โดยจำกัด File Search ไว้ที่ AI Studio ให้จุดประสงค์ฟังก์ชันและนิยามพารามิเตอร์ แล้วทำต่อจากผลที่คืนจริง โปรไฟล์ Custom Tools Preview แยกปรับเพื่อให้ความสำคัญเครื่องมือกำหนดเองและ bash เป็นเอนด์พอยต์ผู้ผลิตที่มีชื่อเฉพาะ จึงไม่ควรถือความเชี่ยวชาญนั้นเป็นคุณสมบัติทุกคำขอ 3.1 Pro โดยไม่ระบุ เลือกสคีมาผลมีโครงสร้างเมื่องานต้องการระเบียนกำหนดไว้แทนร้อยแก้วอิสระ\n\nสำหรับวิเคราะห์หลายสื่อ ระบุหน้า ภาพ ช่วงบันทึก หรือเหตุการณ์วิดีโอที่เกี่ยวข้อง สำหรับวิเคราะห์เอกสาร ให้เทียบแผนภาพกับข้อกำหนดเขียนและคืนแต่ละจุดไม่ตรงพร้อมข้อความรองรับ แหล่งเสียงพูดให้บทถอดเสียงหรือการตีความเป็นข้อความได้ เก็บแหล่งอ้างอิงสำหรับข้อสรุปที่ต้องตรวจ และแยกสิ่งที่เห็นหรือระบุจากสิ่งอนุมาน โปรไฟล์นี้ส่งออกข้อความรวมโค้ด การสร้างภาพหรือเสียงพูดดั้งเดิมไม่อยู่ในตารางความสามารถตรงตัว\n\nข้อมูลรุ่น 3.1 Pro ดั้งเดิมระบุบริบทสูงสุด 1M และเอาต์พุตข้อความ 64K ตาราง API Preview ตรงตัวระบุอินพุต 1,048,576 และเอาต์พุต 65,536 โทเคน รวมคำสั่ง ประวัติสนทนา และสื่อในงบอินพุต ระบุแคชและการประมวลผล batch พร้อม Flex และ Priority สำหรับโปรไฟล์ผู้ผลิต สำหรับหลายรายการอิสระ ให้กำหนดเอาต์พุตที่ต้องการและเก็บรหัสต้นทางแต่ละรายการ แทนรวมหลักฐานไม่เกี่ยวกันเป็นคำตอบที่ติดตามไม่ได้\n\nรุ่น Preview ที่มีชื่อนี้ยังแยกจากโปรไฟล์ Custom Tools ของ Pro และรุ่น Flash หรือ Pro ภายหลัง จุดแข็งเกี่ยวกับเหตุผลซับซ้อน โค้ด และสังเคราะห์หลักฐาน ชิ้นงานสุดท้ายยังต้องตรวจเทียบต้นทางและผลเครื่องมือจริง รักษาความกำกวมที่ค้างเมื่อข้อมูลให้มาไม่รองรับข้อสรุปแน่นอน ชิ้นงานที่มีประโยชน์คือคำตอบ โค้ด หรือระเบียนที่งานขอและมีหลักฐานรองรับเพียงพอให้ประเมินข้อจำกัดการใช้จริง",
    "alias_of": null,
    "aliases": [],
    "author": "Google",
    "capabilities": {
      "context_length": 1048576,
      "manufacturer_input": [
        "audio",
        "file",
        "image",
        "text",
        "video"
      ],
      "manufacturer_output": [
        "text"
      ]
    },
    "card_routes": [
      {
        "label": "Ultra",
        "rates": [
          {
            "amount": "0.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000002",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          }
        ],
        "summary": "ดูราคาตามการกำหนดค่าแบบครบถ้วนในรายละเอียด"
      }
    ],
    "ctx": null,
    "formats": [
      "batches"
    ],
    "id": "google/gemini-3.1-pro-preview:batch",
    "input": [
      "text"
    ],
    "kind": "text",
    "max_out": null,
    "methods": [
      {
        "available": null,
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "contract": {
          "data": {
            "all_results": "Preserve full JSON and every result; provider real IDs are only read from actual returned responses.",
            "authentication": {
              "api_key_source": "AILOOT_API_KEY",
              "header": "Authorization: Bearer"
            },
            "errors": [
              {
                "code": null,
                "condition": "โครงสร้างคำขอแบบส่งโดยตรงตามเอกสารไม่ถูกต้อง มีคีย์ซ้ำ หรือมีข้อขัดแย้งเกี่ยวกับตัวตนของรายการหรือความสามารถของโมเดลที่กำหนดไว้",
                "http_status": 400,
                "recovery": "แก้ไขฟิลด์ที่ระบุให้ถูกต้องก่อนส่งคำขอใหม่ทุกครั้ง",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "คีย์ API ไม่ถูกต้อง",
                "http_status": 401,
                "recovery": "ใช้คีย์ Ailoot ที่ได้รับอนุญาต",
                "type": "authentication_error"
              },
              {
                "code": null,
                "condition": "กลุ่มสำหรับการประมวลผลแบบชุดไม่พร้อมใช้งาน",
                "http_status": 403,
                "recovery": "ตรวจสอบสิทธิ์ของคีย์/กลุ่ม",
                "type": "permission_error"
              },
              {
                "code": null,
                "condition": "การประมวลผลแบบชุดเรียกเก็บเงินจากยอดเงินคงเหลือ คำขอสร้างที่ใช้การเรียกเก็บผ่านการสมัครสมาชิกจะถูกปฏิเสธ",
                "http_status": 422,
                "recovery": "ใช้กลุ่มที่ได้รับอนุญาตให้เรียกเก็บเงินจากยอดเงินคงเหลือ",
                "type": "invalid_request_error"
              },
              {
                "code": null,
                "condition": "ไม่สามารถคำนวณราคาล่วงหน้าสำหรับข้อมูลนำเข้าของงานแบบชุดได้",
                "http_status": 422,
                "recovery": "เก็บการตอบกลับไว้ และใช้ข้อมูลนำเข้าตามเอกสารของ API ประเภทนั้น",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "ไม่สามารถกันยอดเงินสำรองสำหรับการประมวลผลแบบชุดได้",
                "http_status": 402,
                "recovery": "แก้ไขเงื่อนไขการรับคำขอให้เรียบร้อยก่อนส่งคำขอใหม่",
                "type": "billing_error"
              },
              {
                "code": null,
                "condition": "ราคาของวิธีประมวลผลแบบชุด/อัตราราคาของระบบไม่พร้อมใช้งาน",
                "http_status": 503,
                "recovery": "เก็บการตอบกลับไว้ ห้ามแทนที่ด้วยราคาอื่น",
                "type": "price_unavailable"
              },
              {
                "code": null,
                "condition": "เส้นทางที่ระบุไว้ของผู้ให้บริการต้นทางไม่พร้อมใช้งาน",
                "http_status": 503,
                "recovery": "เก็บการตอบกลับไว้เพื่อแก้ไขเส้นทางการส่งคำขอ",
                "type": "api_error"
              },
              {
                "code": "result_pending_check",
                "condition": "ผลลัพธ์เดิมต้องได้รับการตรวจสอบ โดยมี X-Should-Retry:false",
                "http_status": 503,
                "recovery": "เก็บค่า operation_id/id เดิมไว้แล้วอ่านสถานะของการดำเนินการนั้น ห้ามส่ง POST เดิมซ้ำเด็ดขาด",
                "type": null
              },
              {
                "code": "not_found",
                "condition": "ไม่พบการดำเนินการตรวจสอบสถานะงานแบบชุด หรือการดำเนินการนั้นเป็นของตัวตนอื่น",
                "http_status": 404,
                "recovery": "ใช้ค่า id เดิมให้ตรงทุกตัว พร้อมผู้ใช้/คีย์/กลุ่มเดิม",
                "type": null
              }
            ],
            "example_body": {
              "endpoint": "/v1/chat/completions",
              "model": "google/gemini-3.1-pro-preview:batch",
              "requests": [
                {
                  "body": {
                    "max_tokens": 16,
                    "messages": [
                      {
                        "content": "Hello!",
                        "role": "user"
                      }
                    ]
                  },
                  "custom_id": "req-0001"
                }
              ]
            },
            "input_constraints": [
              "Use the exact shown :batch model ID.",
              "Each custom_id must be nonempty and unique within the batch.",
              "Keep requests last in the serialized body; duplicate JSON keys are rejected.",
              "Each body.model is omitted or equals the exact batch caller or its documented base ID.",
              "Per-item provider, service_tier and input_type are outside this batch profile.",
              "stream is omitted or false.",
              "Supply text messages for this Chat batch profile; image/audio/file/video objects, hosted tools and cache-control fields are outside this profile.",
              "If body.model is present, use only the exact caller or wire ID listed here; no suffix conversion is needed.",
              "For google/ wire IDs, all items use an identical response_format."
            ],
            "outputs": {
              "all_results": "เก็บ JSON สถานะเดิมให้ครบถ้วน รวมถึงผลลัพธ์/custom_id ทุกรายการ และเนื้อหาการตอบกลับหรือข้อผิดพลาดทั้งหมด บันทึก results[] ที่เสร็จสมบูรณ์เป็น JSONL โดยไม่กรองข้อมูล",
              "enclosing_family": "batch",
              "family": "text",
              "fields": [
                {
                  "name": "results[].custom_id",
                  "type": "string"
                },
                {
                  "name": "results[].response.body.choices[].message.content",
                  "type": "string|null"
                },
                {
                  "name": "results[].error",
                  "type": "object|null"
                },
                {
                  "name": "usage",
                  "type": "object|null"
                },
                {
                  "description": null,
                  "name": "id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "model",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "endpoint",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "status",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "request_counts",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "results[].id",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "results[].response.status_code",
                  "type": "integer"
                },
                {
                  "description": null,
                  "name": "results[].response.request_id",
                  "type": "string"
                }
              ],
              "format": "JSON ของ results[].response.body ที่ส่งกลับโดยตรง"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "/v1/chat/completions"
                ],
                "enum_known": true,
                "name": "endpoint",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview:batch"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_items": 1,
                "name": "requests",
                "required": true,
                "type": "batch_item[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "requests[].custom_id",
                "required": true,
                "type": "string",
                "unique_within_batch": true
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "requests[].body.messages",
                "required": true,
                "type": "message[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "24h"
                ],
                "enum_known": true,
                "name": "completion_window",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "provider",
                "required": false,
                "type": "object|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "google/gemini-3.1-pro-preview:batch",
                  "google/gemini-3.1-pro-preview"
                ],
                "enum_known": true,
                "name": "requests[].body.model",
                "required": false,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  [
                    "google-vertex/global"
                  ]
                ],
                "enum_known": true,
                "name": "provider.only",
                "required": false,
                "type": "string[]"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "provider.allow_fallbacks",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "provider_policy": {
              "allow_fallbacks": false,
              "configured_only": [
                "google-vertex/global"
              ],
              "per_item_override": false,
              "when_omitted": "Current Source injects the exact persisted declaration before fresh submission."
            },
            "request_schema": {
              "additionalProperties": false,
              "properties": {
                "completion_window": {
                  "enum": [
                    "24h"
                  ],
                  "type": "string"
                },
                "endpoint": {
                  "enum": [
                    "/v1/chat/completions"
                  ],
                  "type": "string"
                },
                "model": {
                  "enum": [
                    "google/gemini-3.1-pro-preview:batch"
                  ],
                  "type": "string"
                },
                "provider": {
                  "additionalProperties": false,
                  "properties": {
                    "allow_fallbacks": {
                      "enum": [
                        false,
                        null
                      ],
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "only": {
                      "enum": [
                        [
                          "google-vertex/global"
                        ]
                      ],
                      "items": {
                        "enum": [
                          "google-vertex/global"
                        ],
                        "type": "string"
                      },
                      "maxItems": 1,
                      "minItems": 1,
                      "type": "array"
                    }
                  },
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "requests": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "body": {
                        "additionalProperties": true,
                        "properties": {
                          "max_tokens": {
                            "minimum": 1,
                            "type": "integer"
                          },
                          "messages": {
                            "items": {
                              "properties": {
                                "content": {
                                  "type": "string"
                                },
                                "role": {
                                  "type": "string"
                                }
                              },
                              "required": [
                                "role",
                                "content"
                              ],
                              "type": "object"
                            },
                            "minItems": 1,
                            "type": "array"
                          },
                          "model": {
                            "enum": [
                              "google/gemini-3.1-pro-preview:batch",
                              "google/gemini-3.1-pro-preview"
                            ],
                            "type": "string"
                          }
                        },
                        "required": [
                          "messages"
                        ],
                        "type": "object"
                      },
                      "custom_id": {
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "custom_id",
                      "body"
                    ],
                    "type": "object"
                  },
                  "minItems": 1,
                  "type": "array"
                }
              },
              "required": [
                "endpoint",
                "model",
                "requests"
              ],
              "type": "object"
            },
            "schema_template": {
              "endpoint": "/v1/chat/completions",
              "model": "google/gemini-3.1-pro-preview:batch",
              "requests": [
                {
                  "body": {
                    "max_tokens": 16,
                    "messages": [
                      {
                        "content": "Hello!",
                        "role": "user"
                      }
                    ]
                  },
                  "custom_id": "req-0001"
                }
              ]
            },
            "unsupported": [
              "Files/input_file_id batch upload workflow",
              "active cancel route",
              "public batch list/delete/result-download route",
              "model-name-derived capability or weights equivalence"
            ]
          },
          "input": {
            "content_type": "application/json",
            "file_material": "ผู้เรียกใช้อาจอ่านไฟล์ JSONL ที่เข้ารหัส UTF-8 จากเครื่องของตนลงใน requests[] ได้ ไม่มีการใช้ค่าระบุวัตถุประสงค์การอัปโหลด input_file_id หรือการอ้างอิงไฟล์ หากไม่มีข้อมูลของลูกค้าหรือข้อมูลว่าง ให้หยุดการเตรียมก่อนส่ง POST",
            "material_types": [
              "text"
            ],
            "optional_controls": [
              "provider.only",
              "provider.allow_fallbacks",
              "completion_window"
            ],
            "representation": "ส่ง requests[] ไว้ในคำขอโดยตรง โดยแต่ละรายการมี custom_id และ body",
            "request_endpoint_profile": "/v1/chat/completions",
            "required": [
              "endpoint",
              "model",
              "requests"
            ],
            "schema_scope": "เนื้อหาคำขอ Chat Completions แบบข้อความ ภายในโครงสร้างคำขอแบบชุดที่ส่งโดยตรงตามที่ระบุในเอกสาร",
            "serialization_order": [
              "endpoint",
              "model",
              "provider (หากระบุมา)",
              "completion_window (หากระบุมา)",
              "requests อยู่ท้ายสุด"
            ]
          },
          "lifecycle": {
            "cancel": null,
            "create": {
              "accepted_status": 202,
              "http": "POST",
              "path": "/v1/batches"
            },
            "delete": null,
            "file_upload": null,
            "mode": "asynchronous",
            "observed_status_values": [
              "validating",
              "in_progress",
              "finalizing",
              "completed",
              "failed",
              "expired",
              "cancelling",
              "cancelled"
            ],
            "owned_results": {
              "behavior": "Completed results are saved as owned JSONL, read back byte-for-byte and registered in the existing media library before publication after settlement. Status returns inline results; no separate Batch download route is added.",
              "format": "application/x-ndjson",
              "public_url_field_in_status": null
            },
            "status": {
              "http": "GET",
              "id_source": "ค่า response.id จริงจากการตอบกลับคำขอสร้างครั้งเดิม โดยใช้ผู้ใช้/คีย์/กลุ่มเดิม",
              "path": "/v1/batches/{operation_id}"
            },
            "terminal": [
              "completed",
              "failed",
              "expired",
              "cancelled"
            ],
            "unknown": "เก็บ ID การดำเนินการเดิมไว้ การตอบกลับ 503 result_pending_check มี X-Should-Retry:false ห้ามส่งงานแบบชุดเดิมซ้ำเด็ดขาดเมื่อยังไม่ทราบสถานะของงาน"
          },
          "manufacturer_capability": null,
          "method": {
            "http": "POST",
            "path": "/v1/batches"
          },
          "output": {
            "all_results": "Preserve the full original status JSON, every result/custom_id and complete response or error body. Save completed results[] as JSONL without filtering.",
            "family": "batch",
            "format": "JSON; completed results[] are returned inline and can be saved as JSONL."
          }
        },
        "ctx": null,
        "declared_pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "อัตราราคาพื้นฐานของโทเคน",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "ระดับความยาวคำขอ 1",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "ระดับความยาวคำขอ 2",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000018",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\npython3 - <<'PY_REQUEST'\nimport json\nfrom pathlib import Path\nbody=json.loads('{\"endpoint\":\"/v1/chat/completions\",\"model\":\"google/gemini-3.1-pro-preview:batch\",\"requests\":[{\"custom_id\":\"req-0001\",\"body\":{\"messages\":[{\"role\":\"user\",\"content\":\"Hello!\"}],\"max_tokens\":16}}]}')\nPath(\"batch-request.json\").write_text(json.dumps(body,ensure_ascii=False),encoding=\"utf-8\")\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/batches \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @batch-request.json -D batch-response-headers.txt -o batch-create-response.json\n",
            "label": "curl · retained fixture",
            "language": "bash"
          },
          {
            "code": "import json, os\nfrom pathlib import Path\nfrom urllib.request import Request, urlopen\n\ndef prepare_requests(customer_path):\n    path = Path(customer_path)\n    if not path.is_file(): raise ValueError(\"Customer JSONL file is missing\")\n    items = [json.loads(line) for line in path.read_text(encoding=\"utf-8\").splitlines() if line.strip()]\n    if not items: raise ValueError(\"Customer JSONL contains no requests\")\n    ids = set()\n    for item in items:\n        if set(item) != {\"custom_id\", \"body\"}: raise ValueError(\"Each item needs custom_id and body\")\n        cid = item[\"custom_id\"]\n        if not isinstance(cid, str) or not cid.strip() or cid in ids: raise ValueError(\"custom_id must be nonempty and unique\")\n        ids.add(cid)\n        if not isinstance(item[\"body\"], dict) or not item[\"body\"].get(\"messages\"): raise ValueError(\"Supply actual text messages\")\n        supplied_model = item[\"body\"].get(\"model\")\n        if supplied_model is not None and supplied_model not in ['google/gemini-3.1-pro-preview:batch', 'google/gemini-3.1-pro-preview']: raise ValueError(\"body.model must be an exact documented caller or wire ID\")\n    return {\"endpoint\":\"/v1/chat/completions\", \"model\":\"google/gemini-3.1-pro-preview:batch\", \"requests\":items}\n\nif __name__ == \"__main__\":\n    material = os.environ.get(\"AILOOT_BATCH_REQUESTS_JSONL\", \"\")\n    if not material: raise SystemExit(\"Set AILOOT_BATCH_REQUESTS_JSONL to your actual customer file\")\n    body = prepare_requests(material)\n    key = os.environ.get(\"AILOOT_API_KEY\", \"\")\n    if not key: raise SystemExit(\"Set AILOOT_API_KEY\")\n    request = Request(\"https://api.ailoot.ai/v1/batches\", data=json.dumps(body, ensure_ascii=False).encode(\"utf-8\"), headers={\"Authorization\":\"Bearer \" + key, \"Content-Type\":\"application/json\"}, method=\"POST\")\n    with urlopen(request) as response:\n        raw = response.read()\n        Path(\"batch-create-response.json\").write_bytes(raw)\n        print(raw.decode(\"utf-8\"))\n",
            "label": "Python HTTP · actual customer JSONL",
            "language": "python"
          },
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\nBATCH_OPERATION_ID=\"$(python3 - <<'PY_ID'\nimport json\nfrom pathlib import Path\nfrom urllib.parse import quote\nresponse = json.loads(Path(\"batch-create-response.json\").read_text(encoding=\"utf-8\"))\noperation = response.get(\"id\")\nif not isinstance(operation, str) or not operation: raise SystemExit(\"No actual original operation ID; preserve the response and do not resubmit\")\nprint(quote(operation, safe=\"\"))\nPY_ID\n)\"\ncurl --fail-with-body --silent --show-error \"https://api.ailoot.ai/v1/batches/$BATCH_OPERATION_ID\" \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -o batch-status-response.json\n",
            "label": "curl · original operation status",
            "language": "bash"
          },
          {
            "code": "import json\nfrom pathlib import Path\nraw = Path(\"batch-status-response.json\").read_bytes()\nresponse = json.loads(raw)\nif response.get(\"status\") != \"completed\":\n    raise SystemExit(\"Keep the original operation; read its status without resubmitting\")\nresults = response.get(\"results\")\nif not isinstance(results, list) or not results:\n    raise SystemExit(\"Preserve the original response; completed results are missing\")\nPath(\"batch-results.jsonl\").write_text(\"\".join(json.dumps(item, ensure_ascii=False) + \"\\n\" for item in results), encoding=\"utf-8\")\n# Preserve batch-status-response.json with aggregate usage and every result/error.\n",
            "label": "Python · save every completed result",
            "language": "python"
          }
        ],
        "family": "batch",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "batches",
        "hints": [
          "Read your actual request items before submission; inline requests are required.",
          "Keep the returned operation ID and every result. Never replay an unknown submission."
        ],
        "http": "POST",
        "in": 2,
        "input": [
          "text"
        ],
        "label": "การประมวลผลแบบชุด",
        "max_out": null,
        "max_reasoning_effort_multiplier": null,
        "out": 12,
        "output": [
          "text"
        ],
        "path": "/v1/batches",
        "price_conditions": [
          {
            "label": "Fast mode",
            "value": "Not specified",
            "when": "When fast mode is selected"
          },
          {
            "label": "Flex mode",
            "value": "Not specified",
            "when": "When flex mode is selected"
          },
          {
            "label": "Maximum reasoning effort",
            "value": "Not specified",
            "when": "When maximum reasoning effort uses the default adjustment"
          },
          {
            "label": "Explicit cache pricing",
            "value": "Not enabled",
            "when": "When explicit cache is requested"
          }
        ],
        "pricing": {
          "billing_mode": "token",
          "image_input_price": null,
          "image_output_price": null,
          "per_request_price": null
        },
        "pricing_profiles": [
          {
            "dimensions": {
              "regime": "base"
            },
            "label": "Base token rates",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": 200000,
              "min_context_tokens_exclusive": 0
            },
            "label": "Request-length tier 1",
            "units": [
              {
                "amount": "0.002000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000002",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.012000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000012",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          },
          {
            "dimensions": {
              "max_context_tokens_inclusive": null,
              "min_context_tokens_exclusive": 200000
            },
            "label": "Request-length tier 2",
            "units": [
              {
                "amount": "0.004000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "input_price",
                "label": "Input tokens",
                "native_amount_usd_per_unit": "0.000004",
                "native_quantity": 1,
                "native_unit": "input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "input_token"
              },
              {
                "amount": "0.018000",
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "output_price",
                "label": "Output tokens",
                "native_amount_usd_per_unit": "0.000018",
                "native_quantity": 1,
                "native_unit": "output_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "out",
                "unit": "output_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_read_price",
                "label": "Cache read",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "cached_input_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "cached_input_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_price",
                "label": "Cache write",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "generic_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "generic_cache_creation_token"
              },
              {
                "amount": null,
                "amount_unit": "usd_per_thousand_tokens",
                "billing_input": true,
                "estimate_only": false,
                "key": "cache_write_1h_price",
                "label": "Cache write, 1 hour",
                "native_amount_usd_per_unit": null,
                "native_quantity": 1,
                "native_unit": "one_hour_cache_creation_token",
                "public_unit_label": "/ 1K tokens",
                "quantity": 1000,
                "quantity_is_estimate": false,
                "rate_role": "typed_native_retail_rate",
                "side": "in",
                "unit": "one_hour_cache_creation_token"
              }
            ]
          }
        ],
        "request_model_id": "google/gemini-3.1-pro-preview:batch",
        "route_label": "Ultra",
        "status_reads": [
          "GET /v1/batches/{operation_id}"
        ],
        "tiers": [
          {
            "cache_read": null,
            "cache_read_multiplier": null,
            "cache_write": null,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 2,
            "input_multiplier": null,
            "max": 200000,
            "max_tokens": 200000,
            "min": 0,
            "min_tokens": 0,
            "out": 12,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 0,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          },
          {
            "cache_read": null,
            "cache_read_multiplier": null,
            "cache_write": null,
            "cache_write_1h": null,
            "cache_write_multiplier": null,
            "created_at": "0001-01-01T00:00:00Z",
            "in": 4,
            "input_multiplier": null,
            "max": null,
            "max_tokens": null,
            "min": 200000,
            "min_tokens": 200000,
            "out": 18,
            "output_multiplier": null,
            "per_request_price": null,
            "sort_order": 1,
            "tier_label": "",
            "updated_at": "0001-01-01T00:00:00Z"
          }
        ],
        "units": [
          {
            "amount": "0.002000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "input_price",
            "label": "Input tokens",
            "native_amount_usd_per_unit": "0.000002",
            "native_quantity": 1,
            "native_unit": "input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "input_token"
          },
          {
            "amount": "0.012000",
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "output_price",
            "label": "Output tokens",
            "native_amount_usd_per_unit": "0.000012",
            "native_quantity": 1,
            "native_unit": "output_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "out",
            "unit": "output_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_read_price",
            "label": "Cache read",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "cached_input_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "cached_input_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_price",
            "label": "Cache write",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "generic_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "generic_cache_creation_token"
          },
          {
            "amount": null,
            "amount_unit": "usd_per_thousand_tokens",
            "billing_input": true,
            "estimate_only": false,
            "key": "cache_write_1h_price",
            "label": "Cache write, 1 hour",
            "native_amount_usd_per_unit": null,
            "native_quantity": 1,
            "native_unit": "one_hour_cache_creation_token",
            "public_unit_label": "/ 1K tokens",
            "quantity": 1000,
            "quantity_is_estimate": false,
            "rate_role": "typed_native_retail_rate",
            "side": "in",
            "unit": "one_hour_cache_creation_token"
          }
        ]
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "google/gemini-3.1-pro-preview:batch",
        "request_model_id": "google/gemini-3.1-pro-preview:batch",
        "route_label": "Ultra"
      }
    ],
    "name": "Google: Gemini 3.1 Pro Preview (batch)",
    "price": {
      "in": 2,
      "in_label": null,
      "out": 12,
      "out_label": null,
      "scope_label": "Token rates",
      "sort_in": 2,
      "sort_out": 12,
      "varies": true
    },
    "short": "Gemini 3.1 Pro Preview เป็นโมเดลใช้เหตุผลหลายรูปแบบของ Google สำหรับงานซอฟต์แวร์ อัลกอริทึม และความรู้ที่ซับซ้อน รับข้อความ ภาพ เสียง วิดีโอ และ PDF แล้วส่งข้อความหรือโค้ด พร้อมเครื่องมือและเอาต์พุตมีโครงสร้าง ระดับเหตุผล Low, medium และ high กำกับความพยายาม โดย high เป็นค่าเริ่มต้นตามเอกสาร"
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Gemini 3.1 Pro Preview เป็นโมเดลใช้เหตุผลหลายรูปแบบของ Google สำหรับงานซอฟต์แวร์ อัลกอริทึม และความรู้ที่ซับซ้อน รับข้อความ ภาพ เสียง วิดีโอ และ PDF แล้วส่งข้อความหรือโค้ด พร้อมเครื่องมือและเอาต์พุตมีโครงสร้าง ระดับเหตุผล Low, medium และ high กำกับความพยายาม โดย high เป็นค่าเริ่มต้นตามเอกสาร",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "43c989436ec0d2ec27866ddab665124d31bacef5105fbacfaeb15d211e6782c6",
    "renderer_sha256": "890edb706fafafdd4f598bb324acf65fada58918b0911b97eb80e68be2ef65d9"
  },
  "sourceRevision": "ea93915abb09dfb9786dc47c996d4333cfbaf1a3bf44a7e483af6afa8b8a2fa9"
}
