Google: Gemini 2.5 Pro
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Ailoot · Anthropic Messages
POST /v1/messagesgemini-2.5-pro - Ailoot · Gemini generateContent
POST /v1beta/models/{model}:generateContentgemini-2.5-pro - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgemini-2.5-pro - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgemini-2.5-pro - Ailoot Ultra · OpenAI Chat
POST /v1/chat/completionsgoogle/gemini-2.5-pro - Ailoot Ultra · Anthropic Messages
POST /v1/messagesgoogle/gemini-2.5-pro
Về mô hình
Mô tả này trình bày khả năng của mô hình. Đầu vào, đầu ra và tùy chọn có trên Ailoot được liệt kê bên dưới cho phương thức đã chọn.
Gemini 2.5 Pro là cấu hình suy nghĩ bản ổn định của Google dành cho lập trình nâng cao, toán học, STEM và phân tích ngữ cảnh dài. Mô hình có thể hiểu văn bản, âm thanh, hình ảnh, video và toàn bộ kho mã, và cấu hình Gemini API cũng nhận đầu vào PDF. Đầu ra là văn bản, gồm mã, phân tích bằng chữ hoặc bản ghi có cấu trúc. Một nhiệm vụ hữu ích cung cấp bằng chứng và yêu cầu kết quả có thể kiểm tra, chẳng hạn lời giải có giải thích, phát hiện về kho mã hoặc so sánh giữa nhiều tài liệu.
Đối với lập trình, cung cấp các tệp liên quan, hành vi quan sát được và thay đổi hoặc câu hỏi quan trọng. Ngữ cảnh dài có thể giúp mô hình liên hệ các mô-đun thay vì suy luận từ một đoạn mã biệt lập. Khi điều tra luồng mã, yêu cầu mô hình truy vết một mã định danh từ biểu mẫu đầu vào qua xử lý đến lưu trữ, xác định nơi quy ước giao tiếp thay đổi và đề xuất sửa đổi tập trung. Giữ các ràng buộc và yêu cầu tham chiếu hỗ trợ. Bản sửa đổi được đề xuất cần được đối chiếu với mã thực tế và mọi xác thực đã thực hiện qua công cụ kết nối.
Đối với toán học hoặc phân tích khoa học, nêu bài toán, giả định, đơn vị và hình thức câu trả lời yêu cầu. Cung cấp dữ liệu hoặc hình vẽ mà phép tính phụ thuộc vào. Yêu cầu kết quả có cơ sở và các kiểm tra giúp đánh giá được nó, chẳng hạn trường hợp biên hoặc so sánh với giá trị gốc. Khả năng suy luận của mô hình không loại bỏ sự mơ hồ trong đề bài. Giữ rõ đại lượng chưa biết hoặc giả định chưa có cơ sở thay vì thay bằng một giá trị thuận tiện.
Suy nghĩ động là mặc định được tài liệu hóa. Hướng dẫn GenerateContent của Gemini 2.5 hỗ trợ ngân sách suy luận đặt rõ từ 128 đến 32,768 token cho Pro, hoặc -1 để suy nghĩ thích ứng. Phiên bản này không thể tắt hoàn toàn khả năng suy nghĩ. Những điều khiển đó khác với lựa chọn ngân sách bằng không của Flash và thiết lập mức suy nghĩ của Gemini 3. Ngân sách suy nghĩ định hướng suy luận thay vì bảo đảm số token nội bộ chính xác, và giới hạn câu trả lời cũng cần chừa chỗ cho sản phẩm cuối cùng.
Đối với công việc tài liệu đa phương thức, xác định trang, biểu đồ, vùng ảnh hoặc sự kiện trong bản ghi cần hỗ trợ câu trả lời. Một tác vụ tổng hợp thực tế có thể yêu cầu các khẳng định trái nhau trong nhiều tài liệu nguồn, đoạn hỗ trợ chúng và những khác biệt quan trọng đối với một quyết định. Yêu cầu mô hình phân biệt dữ kiện được nêu với suy luận. Với video hoặc âm thanh, xác định kết quả cần là mô tả, bản chép lời, bản tóm tắt hay so sánh. Hình ảnh và âm thanh là bằng chứng cho kết quả văn bản trong cấu hình này.
Trang API chính xác ghi nhận gọi hàm, thực thi mã, tìm kiếm tệp, grounding bằng tìm kiếm, grounding bằng Maps, ngữ cảnh URL và đầu ra có cấu trúc. Định nghĩa mục đích hàm cùng các trường tham số và giữ kết quả thực tế trong các lượt sau. Với bản ghi ràng buộc theo lược đồ, chỉ định trường bắt buộc và cách biểu diễn thông tin thiếu. Kiến trúc gốc là transformer đa phương thức dạng mixture-of-experts thưa; thiết kế mô hình đó tự nó không cung cấp việc thực thi công cụ bên ngoài hoặc ứng dụng hoàn chỉnh ngoài văn bản hay mã được trả về.
Thẻ gốc liệt kê ngữ cảnh đầu vào 1M và đầu ra văn bản 64K; bảng API quy định 1,048,576 token đầu vào và 65,536 token đầu ra. Chỉ dẫn, nội dung nguồn và lịch sử được giữ lại cùng góp vào quá trình chuẩn bị đầu vào. Hạn mức phản hồi tối đa gồm cả token suy luận, nên giới hạn quá nhỏ có thể ngắt câu trả lời cuối cùng. Bộ nhớ đệm và xử lý hàng loạt được tài liệu hóa, cùng các lựa chọn Flex và Priority. Giữ mã định danh của từng nguồn và hình thức cuối cùng được yêu cầu khi chuẩn bị các tác vụ ngữ cảnh dài độc lập.
Mã bản ổn định khác với các phiên bản Experimental và Preview được bàn riêng trong thẻ mô hình Pro chung. Không gán kết quả đặc thù phiên bản của chúng cho cấu hình này chỉ vì cùng tên Pro. Thẻ xác định khả năng tạo thông tin sai và hạn chế về hiểu quan hệ nhân quả, suy diễn phức tạp cùng suy luận phản thực, với mốc kiến thức tháng 1 năm 2025. Cung cấp bằng chứng hiện tại khi cần và kiểm tra tham chiếu nguồn, phép tính cùng sửa đổi đề xuất. Đầu ra hữu ích là sản phẩm văn bản hoặc mã có cơ sở mà tác vụ yêu cầu.
Tác vụ thực tế
Tác vụ thực tế
Ví dụ kỹ thuật bằng tiếng Anh
Trace an identifier through storage
Trace this identifier through three excerpts: form sends {customer_id:'0017'}; service computes id=Number(body.customer_id); repository stores String(id). Requirement: preserve leading zeros. Identify where the contract changes, propose a minimal consistent correction and give tests for '0017', '17' and a missing ID. Do not claim the tests were executed.Kết quả mong đợi
A source-path explanation, a proposed patch and a three-case regression-test plan.Kiểm tra kết quả
Check that the proposed path preserves distinct strings 0017 and 17 while specifying missing-ID behavior.Ailoot · Anthropic Messages POST /v1/messages gemini-2.5-pro
gemini-2.5-proBắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản · Ảnh
- Kết quả
- Văn bản
Có trên Ailoot · đầu vào & phương thức
Ailoot · Anthropic Messages POST /v1/messages
- Đầu vào
text,image- Đầu ra
text- Ngữ cảnh
- 1.048.576 tokens
- Đầu ra tối đa
- 65.536 tokens
- Định dạng đầu ra
- json hoặc SSE
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn gemini-2.5-pro | Mặc định— |
Trườngmessages | Loạimessage[] | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 | Mặc định— |
Trườngmessages[].role | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn user, assistant | Mặc định— |
Trườngmessages[].content | Loạistring|content_block[] | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngsystem | Loạistring|content_block[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmax_tokens | Loạiinteger | Yêu cầuBắt buộc | Giá trị & giới hạn Tối thiểu: 1 Giới hạn áp dụng cho: Giới hạn trên chính xác của mô hình hoặc thẻ được chọn | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Trườngtemperature | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtop_p | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngstop_sequences | Loạistring[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtools | Loạitool[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtools[].name | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: Có cung cấp công cụ | Mặc định— |
Trườngtools[].description | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngtools[].input_schema | LoạiJSON_schema | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngtool_choice | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngthinking.type | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngthinking.budget_tokens | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngoutput_config.effort | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngmetadata | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngcache_control | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF8
messages[].content hoặc khối type=text
Văn bản + ảnh
{type:image,source:{type:base64,media_type,data}} hoặc nguồn có type=url
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốmaterial_types | Hợp đồngtext, image |
Tham sốrequired | Hợp đồngmodel, messages, max_tokens |
Tham sốoptional_controls | Hợp đồngnull |
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốtext_file_material | Hợp đồngNội dung UTF-8 thực tế được chèn dưới dạng văn bản; ID tệp/URLs cần được hỗ trợ chính xác riêng |
Vòng đời: exact retained published method
Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.
Bảng giá
Mức phí phương thức Ailoot
POST /v1/messages- Đầu vào
- 0,00125 US$ / 1K
- Đầu ra
- 0,01 US$ / 1K
- Đọc bộ nhớ đệm
- 0,000125 US$ / 1K
Giá theo độ dài yêu cầu · Anthropic Messages
| Độ dài yêu cầu, token | Đầu vào | Đầu ra | Đọc bộ nhớ đệm | Ghi bộ nhớ đệm | Bộ nhớ đệm 5 phút | Bộ nhớ đệm 1 giờ |
|---|---|---|---|---|---|---|
| Độ dài yêu cầu, token(0; 200.000] | Đầu vào0,00125 US$ | Đầu ra0,01 US$ | Đọc bộ nhớ đệm0,000125 US$ | Ghi bộ nhớ đệmGiá cơ bản: — | Bộ nhớ đệm 5 phútGiá cơ bản: — | Bộ nhớ đệm 1 giờGiá cơ bản: — |
| Độ dài yêu cầu, token(200.000; ∞) | Đầu vào0,0025 US$ | Đầu ra0,015 US$ | Đọc bộ nhớ đệm0,00025 US$ | Ghi bộ nhớ đệmGiá cơ bản: — | Bộ nhớ đệm 5 phútGiá cơ bản: — | Bộ nhớ đệm 1 giờGiá cơ bản: — |
Mức phí bằng USD cho mỗi 1K token. Nếu chưa đặt mức phí, mức phí cơ bản của phương thức này được kế thừa; «—» nghĩa là chưa đặt mức phí cơ bản.
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Chi tiết giá cước tham chiếu
Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.
Biểu tham chiếu của mô hình
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhOpenAI Chat · Đơn giá token cơ bản | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhOpenAI Chat · Bậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhOpenAI Chat · Bậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhAnthropic Messages · Đơn giá token cơ bản | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhAnthropic Messages · Bậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhAnthropic Messages · Bậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ví dụ yêu cầu
Ailoot · Anthropic Messages
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-2.5-pro", "max_tokens": 1024, "messages": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["messages"]=[{"role":"user","content":"Summarize this material and quote supporting source passages.\n\n"+text}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "gemini-2.5-pro", "max_tokens": 1024, "messages": [{"role": "user", "content": [{"type": "text", "text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["messages"][0]["content"].append({"type":"image","source":{"type":"base64","media_type":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
PY_RESULT
import anthropic
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = anthropic.Anthropic(base_url="https://api.ailoot.ai", api_key=os.environ["AILOOT_API_KEY"], max_retries=0)
msg = client.messages.create(
model="gemini-2.5-pro",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}],
)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(msg.to_dict(mode="json"))
import Anthropic from "@anthropic-ai/sdk";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new Anthropic({ baseURL: "https://api.ailoot.ai", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const msg = await client.messages.create({
model: "gemini-2.5-pro",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain the difference between an observation and a hypothesis in three sentences." }],
});
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(msg);
import anthropic,os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=anthropic.Anthropic(base_url="https://api.ailoot.ai",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.messages.stream(model='gemini-2.5-pro',max_tokens=1024,messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_message()
save_result(final.to_dict(mode="json"),"stream-result")
Nhận và lưu kết quả
Ailoot · Anthropic Messages
json hoặc SSE
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi khối nội dung, chữ ký suy nghĩ và ID sử dụng công cụ thực tế. Ghép tất cả các phần thay đổi của khối SSE; khối văn bản đầu tiên không phải toàn bộ đầu ra.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngid | Loạistring |
Trườngmodel | Loạistring |
Trườngcontent[] | Loạitext|thinking|tool_use|other content block |
Trườngstop_reason | Loạistring|null |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent gemini-2.5-pro
gemini-2.5-proBắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản · Ảnh
- Kết quả
- Văn bản
Có trên Ailoot · đầu vào & phương thức
Ailoot · Gemini generateContent POST /v1beta/models/{model}:generateContent
- Đầu vào
text,image- Đầu ra
text- Ngữ cảnh
- 1.048.576 tokens
- Đầu ra tối đa
- 65.536 tokens
- Định dạng đầu ra
- json hoặc truyền luồng được hỗ trợ
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngpath.model | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn gemini-2.5-pro | Mặc định— |
Trườngcontents | Loạicontent[] | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 | Mặc định— |
Trườngcontents[].role | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn user, model | Mặc định— |
Trườngcontents[].parts | Loạipart[] | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
TrườngsystemInstruction | Loạicontent | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
TrườnggenerationConfig.maxOutputTokens | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.temperature | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.topP | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.topK | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.stopSequences | Loạistring[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.thinkingConfig.includeThoughts | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườnggenerationConfig.thinkingConfig.thinkingBudget | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtools[].functionDeclarations | Loạifunction_declaration[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườngtoolConfig.functionCallingConfig.mode | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườngsafetySettings | Loạiobject[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
TrườngsessionId | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF8
contents[].parts[].text
Văn bản + ảnh
parts[].inlineData={mimeType,data}
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốmaterial_types | Hợp đồngtext, image |
Tham sốrequired | Hợp đồngcontents |
Tham sốoptional_controls | Hợp đồngnull |
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốtext_file_material | Hợp đồngNội dung UTF-8 thực tế được chèn dưới dạng văn bản; ID tệp/URLs cần được hỗ trợ chính xác riêng |
Vòng đời: exact retained published method
Cấu trúc phương thức và ID là chính xác; khả năng của nhà cung cấp tách biệt với việc cho phép tiếp nhận yêu cầu.
Bảng giá
Mức phí phương thức Ailoot
POST /v1beta/models/{model}:generateContent- Đầu vào
- 0,00125 US$ / 1K
- Đầu ra
- 0,01 US$ / 1K
- Đọc bộ nhớ đệm
- 0,000125 US$ / 1K
Giá theo độ dài yêu cầu · Gemini generateContent
| Độ dài yêu cầu, token | Đầu vào | Đầu ra | Đọc bộ nhớ đệm | Ghi bộ nhớ đệm | Bộ nhớ đệm 5 phút | Bộ nhớ đệm 1 giờ |
|---|---|---|---|---|---|---|
| Độ dài yêu cầu, token(0; 200.000] | Đầu vào0,00125 US$ | Đầu ra0,01 US$ | Đọc bộ nhớ đệm0,000125 US$ | Ghi bộ nhớ đệmGiá cơ bản: — | Bộ nhớ đệm 5 phútGiá cơ bản: — | Bộ nhớ đệm 1 giờGiá cơ bản: — |
| Độ dài yêu cầu, token(200.000; ∞) | Đầu vào0,0025 US$ | Đầu ra0,015 US$ | Đọc bộ nhớ đệm0,00025 US$ | Ghi bộ nhớ đệmGiá cơ bản: — | Bộ nhớ đệm 5 phútGiá cơ bản: — | Bộ nhớ đệm 1 giờGiá cơ bản: — |
Mức phí bằng USD cho mỗi 1K token. Nếu chưa đặt mức phí, mức phí cơ bản của phương thức này được kế thừa; «—» nghĩa là chưa đặt mức phí cơ bản.
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Chi tiết giá cước tham chiếu
Biểu tham chiếu cấp mô hình không thay đổi việc chọn phương thức, báo giá hoặc khoản phí. Khoản phí đang áp dụng dùng mức phí phương thức Ailoot đã chọn.
Biểu tham chiếu của mô hình
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhOpenAI Chat · Đơn giá token cơ bản | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhOpenAI Chat · Bậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhOpenAI Chat · Bậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhAnthropic Messages · Đơn giá token cơ bản | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhAnthropic Messages · Bậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhAnthropic Messages · Bậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ví dụ yêu cầu
Ailoot · Gemini generateContent
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 source-material file}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": []}')
f=Path(os.environ["AILOOT_TEXT_FILE"])
if not f.is_file():raise SystemExit("Choose your actual UTF-8 source material")
text=f.read_text(encoding="utf-8")
if not text.strip():raise SystemExit("Source material must contain text")
p["contents"]=[{"role":"user","parts":[{"text":"Summarize this material and quote supporting source passages.\n\n"+text}]}]
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-2.5-pro:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_IMAGE_FILE:?Set your actual PNG JPEG or WebP image}"
export AILOOT_IMAGE_FILE
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"contents": [{"role": "user", "parts": [{"text": "Read labels and numbers in this image; flag unreadable text."}]}]}')
import base64
f=Path(os.environ["AILOOT_IMAGE_FILE"])
if not f.is_file():raise SystemExit("Choose an actual PNG JPEG or WebP image")
raw=f.read_bytes()
mime="image/png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "image/jpeg" if raw.startswith(b"\xff\xd8") else "image/webp" if raw[:4]==b"RIFF" and raw[8:12]==b"WEBP" else None
if not mime:raise SystemExit("Use PNG JPEG or WebP")
b64=base64.b64encode(raw).decode()
p["contents"][0]["parts"].append({"inlineData":{"mimeType":mime,"data":b64}})
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1beta/models/gemini-2.5-pro:generateContent \
-H "x-goog-api-key: $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(json.loads(Path("result.json").read_text(encoding="utf-8")))
PY_RESULT
from google import genai
from google.genai import types
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client = genai.Client(
api_key=os.environ["AILOOT_API_KEY"],
http_options=types.HttpOptions(base_url="https://api.ailoot.ai"),
)
resp = client.models.generate_content(model="gemini-2.5-pro", contents="Explain the difference between an observation and a hypothesis in three sentences.")
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(resp.to_json_dict())
import { GoogleGenAI } from "@google/genai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const ai = new GoogleGenAI({ apiKey: process.env.AILOOT_API_KEY, httpOptions: { baseUrl: "https://api.ailoot.ai" } });
const resp = await ai.models.generateContent({ model: "gemini-2.5-pro", contents: "Explain the difference between an observation and a hypothesis in three sentences." });
import { writeFileSync } from "node:fs";
function saveResult(data, stem = "result") {
writeFileSync(stem + ".json", JSON.stringify(data, null, 2));
console.log(JSON.stringify(data, null, 2));
const saveBlob = (encoded, suffix, label) => {
const raw = Buffer.from(encoded, "base64");
const ext = raw.subarray(0,8).equals(Buffer.from([137,80,78,71,13,10,26,10])) ? "png" : raw[0]===255 && raw[1]===216 ? "jpg" : raw.subarray(0,4).toString()==="RIFF" && raw.subarray(8,12).toString()==="WEBP" ? "webp" : suffix;
const file = `${stem}-${label}.${ext}`;
writeFileSync(file, raw); console.log("Saved", file);
};
for (const [i, block] of (data.content || []).entries()) console.log("Content", i, JSON.stringify(block));
for (const choice of data.choices || []) console.log("Choice", choice.index, JSON.stringify(choice.message || choice.delta || {}));
for (const [i, item] of (data.output || []).entries()) {
console.log("Output", i, JSON.stringify(item));
if (item.type === "image_generation_call" && item.result) saveBlob(item.result, item.output_format || "bin", `output-${i}`);
}
for (const [ci, candidate] of (data.candidates || []).entries()) {
for (const [pi, part] of (candidate.content?.parts || []).entries()) {
console.log("Candidate/part", ci, pi, JSON.stringify(part));
const blob = part.inlineData || part.inline_data;
if (blob?.data) {
const mime = blob.mimeType || blob.mime_type;
const suffix = ({"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"})[mime] || "bin";
saveBlob(blob.data, suffix, `candidate-${ci}-part-${pi}`);
}
}
}
}
saveResult(resp);
from google import genai
from google.genai import types
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=genai.Client(api_key=os.environ["AILOOT_API_KEY"],http_options=types.HttpOptions(base_url="https://api.ailoot.ai"))
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
count=0
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for chunk in client.models.generate_content_stream(model='gemini-2.5-pro',contents="Explain observations and hypotheses in three sentences."):
payload=chunk.to_json_dict()
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
save_result(payload,"stream-chunk-"+str(count))
count+=1
Nhận và lưu kết quả
Ailoot · Gemini generateContent
json hoặc truyền luồng được hỗ trợ
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi phương án và phần, kể cả lệnh gọi hàm, chữ ký suy nghĩ và dữ liệu sử dụng; ghép các phần luồng theo đúng thứ tự.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
TrườngresponseId | Loạistring |
TrườngmodelVersion | Loạistring |
Trườngcandidates[].content.parts[] | Loạitext|inlineData|functionCall|other part |
Trườngcandidates[].finishReason | Loạistring |
TrườngusageMetadata | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-2.5-pro
gemini-2.5-progemini-2.5-progoogle/gemini-2.5-pro
Bắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản
- Kết quả
- Văn bản
Có trên Ailoot · đầu vào & phương thức
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Đầu vào
text- Đầu ra
text- Định dạng đầu ra
- json hoặc SSE
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn gemini-2.5-pro | Mặc định— |
Trườngmessages | Loạimessage[] | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 | Mặc định— |
Trườngmessages[].role | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngmessages[].content | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: Hội thoại văn bản | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF8
messages[].content
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốrequired | Hợp đồngmodel, messages |
Tham sốmaterial_types | Hợp đồngtext |
Tham sốmessages | Hợp đồngMảng thông điệp có cấu trúc role/content |
Tham sốfile_material | Hợp đồngTài liệu UTF-8 thực tế được chèn nguyên dạng văn bản; không suy ra ID tệp |
Tham sốoptional_controls | Hợp đồngstream |
Tham sốcontrol_scope | Hợp đồngHội thoại văn bản; stream là giá trị boolean và mặc định là false. |
Tham sốoutput_modalities | Hợp đồngtext |
Tham sốhosted_operations | Hợp đồngfalse |
Tham sốmultimodal_input_binding | Hợp đồngnull |
Bí danh phương thức: /chat/completions
Vòng đời: synchronous_or_streamed
Gửi ID mô hình chính xác cùng messages.
Độ dài ngữ cảnh không phải giới hạn đầu ra.
Tệp văn bản có thể cung cấp nguyên văn nội dung; đầu vào hình ảnh, âm thanh hoặc đối tượng tệp cần có liên kết chính xác.
Bảng giá
Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.
- Chế độ nhanh
- Mức giá tiêu chuẩn Khi chọn chế độ nhanh
- Chế độ Flex
- Mức giá tiêu chuẩn Khi chọn chế độ flex
- Mức độ suy luận tối đa
- Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
- Giá lưu đệm tường minh
- Chưa bật Khi yêu cầu lưu đệm tường minh
- Đầu ra suy luận
- Phần suy luận dùng đơn giá tập con được liệt kê trong tổng đầu ra; không cộng những token đó hai lần. Khi đầu ra bao gồm token suy luận
Mức phí Ailoot
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhBậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Ví dụ yêu cầu
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"gemini-2.5-pro","messages":[{"role":"user","content":"hello"}],"stream":false}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="gemini-2.5-pro", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
Nhận và lưu kết quả
Ailoot Ultra · OpenAI Chat
json hoặc SSE
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi phương án trả lời cùng nội dung, lệnh gọi công cụ và dữ liệu suy luận của phương án đó. Với SSE, ghép các phần thay đổi theo chỉ số phương án và công cụ, giữ lý do kết thúc cuối cùng cùng dữ liệu sử dụng.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngchoices[].index | Loạiinteger |
Trườngchoices[].message.content | Loạistring|null |
Trườngchoices[].message.tool_calls | Loạitool_call[] |
Trườngchoices[].message.reasoning_content | Loạistring |
Trườngchoices[].message.reasoning_details | Loạiobject|array |
Trườngchoices[].finish_reason | Loạistring|null |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-2.5-pro
gemini-2.5-progemini-2.5-progoogle/gemini-2.5-pro
Bắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản
- Kết quả
- json · sse
Có trên Ailoot · đầu vào & phương thức
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Đầu vào
text- Đầu ra
json,sse- Định dạng đầu ra
- JSON hoặc SSE
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn gemini-2.5-pro | Mặc định— |
Trườngmessages | Loạimessage[] | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmessages[].role | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn user, assistant | Mặc định— |
Trườngmessages[].content | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmax_tokens | Loạiinteger | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF-8
Chuỗi messages[].content
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốrequired | Hợp đồngmodel, messages, max_tokens |
Tham sốoptional_controls | Hợp đồngstream |
Tham sốmaterial_types | Hợp đồngtext |
Tham sốtext_file_material | Hợp đồngĐọc tài liệu UTF-8 thực tế và đặt nội dung văn bản vào chuỗi đầu vào hoặc nội dung thông điệp được chỉ định. |
Vòng đời: synchronous_or_streamed
Bảng giá
Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.
- Chế độ nhanh
- Mức giá tiêu chuẩn Khi chọn chế độ nhanh
- Chế độ Flex
- Mức giá tiêu chuẩn Khi chọn chế độ flex
- Mức độ suy luận tối đa
- Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
- Giá lưu đệm tường minh
- Chưa bật Khi yêu cầu lưu đệm tường minh
- Đầu ra suy luận
- Phần suy luận dùng đơn giá tập con được liệt kê trong tổng đầu ra; không cộng những token đó hai lần. Khi đầu ra bao gồm token suy luận
Mức phí Ailoot
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhBậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Ví dụ yêu cầu
Ailoot Ultra · Anthropic Messages
{
"model": "gemini-2.5-pro",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-2.5-pro', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-2.5-pro', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Nhận và lưu kết quả
Ailoot Ultra · Anthropic Messages
JSON hoặc SSE
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi khối nội dung, chữ ký suy nghĩ và ID sử dụng công cụ thực tế. Ghép tất cả các phần thay đổi của khối SSE; khối văn bản đầu tiên không phải toàn bộ đầu ra.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngid | Loạistring |
Trườngmodel | Loạistring |
Trườngcontent[] | Loạitext|thinking|tool_use|other content block |
Trườngstop_reason | Loạistring|null |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions google/gemini-2.5-pro
google/gemini-2.5-progemini-2.5-progoogle/gemini-2.5-pro
Bắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản
- Kết quả
- Văn bản
Có trên Ailoot · đầu vào & phương thức
Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
- Đầu vào
text- Đầu ra
text- Định dạng đầu ra
- json hoặc SSE
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn google/gemini-2.5-pro | Mặc định— |
Trườngmessages | Loạimessage[] | Yêu cầuBắt buộc | Giá trị & giới hạn Số mục tối thiểu: 1 | Mặc định— |
Trườngmessages[].role | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn Ví dụ: system, user, assistant, tool, function Điều kiện: Các vai trò này được biểu diễn rõ trong các kiểu tương thích của mã nguồn; tập vai trò chính xác vẫn tùy từng mô hình. Tùy thuộc vào mô hình | Mặc định— |
Trườngmessages[].content | Loạistring|content_part[]|null | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmessages[].tool_calls | Loạitool_call[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmessages[].tool_call_id | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: role=tool; dùng ID thực tế được trả về | Mặc định— |
Trườngmessages[].name | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmessages[].reasoning_content | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Áp dụng khi: Gửi lại dữ liệu suy luận thực tế đã được trả về khi mô hình này sử dụng dữ liệu đó | Mặc định— |
Trườngmessages[].reasoning_details | Loạiobject|array | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngmax_tokens | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Tùy thuộc vào mô hình | Mặc định— |
Trườngmax_completion_tokens | Loạiinteger | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tối thiểu: 1 Tùy thuộc vào mô hình | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Trườngstream_options.include_usage | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtemperature | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtop_p | Loạinumber | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngstop | Loạistring|string[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtools | Loạifunction_tool[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngtools[].type | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn function Tùy thuộc vào mô hình | Mặc định— |
Trườngtools[].function.name | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn Áp dụng khi: Có cung cấp công cụ hàm | Mặc định— |
Trườngtools[].function.description | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngtools[].function.parameters | LoạiJSON_schema | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngtool_choice | Loạistring|object | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngparallel_tool_calls | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngresponse_format | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngreasoning_effort | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngreasoning | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngservice_tier | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườnginstructions | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Trường tương thích | Mặc định— |
Trườngfunctions | Loạifunction[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngfunction_call | Loạistring|object | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngprompt_cache_options | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Tùy thuộc vào mô hình | Mặc định— |
Trườngmodalities | Loạistring[] | Yêu cầuKhông bắt buộc | Giá trị & giới hạn text | Mặc định— |
Trườngprovider | Loạiobject | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Điều kiện: provider.options bị từ chối trên tuyến văn bản Ultra này | Mặc định— |
Trườngcache_control.ttl | Loạistring | Yêu cầuKhông bắt buộc | Giá trị & giới hạn Điều kiện: 1h bị từ chối tại các vị trí lưu đệm prompt thực tế | Mặc định— |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF8
messages[].content
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốrequired | Hợp đồngmodel, messages |
Tham sốmaterial_types | Hợp đồngtext |
Tham sốmessages | Hợp đồngMảng thông điệp có cấu trúc role/content |
Tham sốfile_material | Hợp đồngTài liệu UTF-8 thực tế được chèn nguyên dạng văn bản; không suy ra ID tệp |
Tham sốoptional_controls | Hợp đồngstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Tham sốcontrol_scope | Hợp đồngTùy từng mô hình; công cụ hàm của người dùng khác với công cụ do dịch vụ cung cấp |
Tham sốoutput_modalities | Hợp đồngtext |
Tham sốhosted_operations | Hợp đồngfalse |
Tham sốmultimodal_input_binding | Hợp đồngnull |
Vòng đời: synchronous_or_streamed
Gửi ID mô hình chính xác cùng messages.
Độ dài ngữ cảnh không phải giới hạn đầu ra.
Tệp văn bản có thể cung cấp nguyên văn nội dung; đầu vào hình ảnh, âm thanh hoặc đối tượng tệp cần có liên kết chính xác.
Bảng giá
Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.
- Chế độ nhanh
- Mức giá tiêu chuẩn Khi chọn chế độ nhanh
- Chế độ Flex
- Mức giá tiêu chuẩn Khi chọn chế độ flex
- Mức độ suy luận tối đa
- Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
- Giá lưu đệm tường minh
- Chưa bật Khi yêu cầu lưu đệm tường minh
- Đầu ra suy luận
- Phần suy luận dùng đơn giá tập con được liệt kê trong tổng đầu ra; không cộng những token đó hai lần. Khi đầu ra bao gồm token suy luận
Mức phí Ailoot
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhBậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Ví dụ yêu cầu
Ailoot Ultra · OpenAI Chat
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "google/gemini-2.5-pro", "messages": [{"role": "user", "content": "Explain the difference between an observation and a hypothesis in three sentences."}]}')
Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
-H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model='google/gemini-2.5-pro',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}])
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
save_result(result.to_dict(mode="json"))
from openai import OpenAI
import os
from pathlib import Path
if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
import base64, json
from pathlib import Path
def save_result(data, stem="result"):
# Keep every field, including usage, IDs, reasoning and tool requests.
Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
print(json.dumps(data, ensure_ascii=False, indent=2))
def save_blob(encoded, suffix, label):
raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
file = Path(stem + "-" + label + "." + ext)
file.write_bytes(raw)
print("Saved", file)
for index, block in enumerate(data.get("content") or []):
print("Content", index, json.dumps(block, ensure_ascii=False))
for choice in data.get("choices") or []:
print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
for index, item in enumerate(data.get("output") or []):
print("Output", index, json.dumps(item, ensure_ascii=False))
if item.get("type") == "image_generation_call" and item.get("result"):
save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
for ci, candidate in enumerate(data.get("candidates") or []):
for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
blob = part.get("inlineData") or part.get("inline_data")
if blob and blob.get("data"):
mime = blob.get("mimeType") or blob.get("mime_type")
suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))
with client.chat.completions.stream(model='google/gemini-2.5-pro',messages=[{"role":"user","content":"Explain observations and hypotheses in three sentences."}]) as stream:
with Path("stream-events.jsonl").open("w",encoding="utf-8") as log:
for event in stream:
payload=event.to_dict(mode="json")
log.write(json.dumps(payload,ensure_ascii=False)+"\n"); log.flush()
print(json.dumps(payload,ensure_ascii=False))
final=stream.get_final_completion()
save_result(final.to_dict(mode="json"),"stream-result")
Nhận và lưu kết quả
Ailoot Ultra · OpenAI Chat
json hoặc SSE
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi phương án trả lời cùng nội dung, lệnh gọi công cụ và dữ liệu suy luận của phương án đó. Với SSE, ghép các phần thay đổi theo chỉ số phương án và công cụ, giữ lý do kết thúc cuối cùng cùng dữ liệu sử dụng.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngchoices[].index | Loạiinteger |
Trườngchoices[].message.content | Loạistring|null |
Trườngchoices[].message.tool_calls | Loạitool_call[] |
Trườngchoices[].message.reasoning_content | Loạistring |
Trườngchoices[].message.reasoning_details | Loạiobject|array |
Trườngchoices[].finish_reason | Loạistring|null |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
Ailoot Ultra · Anthropic Messages POST /v1/messages google/gemini-2.5-pro
google/gemini-2.5-progemini-2.5-progoogle/gemini-2.5-pro
Bắt đầu
Gemini 2.5 Pro là mô hình suy nghĩ bản ổn định của Google dành cho mã phức tạp, toán học, STEM và phân tích ngữ cảnh dài. Mô hình nhận văn bản, hình ảnh, âm thanh, video và PDF rồi trả về văn bản, với công cụ và đầu ra có cấu trúc. Ngân sách suy luận động hỗ trợ 128–32,768 token và không thể tắt hoàn toàn.
- Đầu vào được chấp nhận
- Văn bản
- Kết quả
- json · sse
Có trên Ailoot · đầu vào & phương thức
Ailoot Ultra · Anthropic Messages POST /v1/messages
- Đầu vào
text- Đầu ra
json,sse- Định dạng đầu ra
- JSON hoặc SSE
| Trường | Loại | Yêu cầu | Giá trị & giới hạn | Mặc định |
|---|---|---|---|---|
Trườngmodel | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn google/gemini-2.5-pro | Mặc định— |
Trườngmessages | Loạimessage[] | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmessages[].role | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn user, assistant | Mặc định— |
Trườngmessages[].content | Loạistring | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngmax_tokens | Loạiinteger | Yêu cầuBắt buộc | Giá trị & giới hạn | Mặc định— |
Trườngstream | Loạiboolean | Yêu cầuKhông bắt buộc | Giá trị & giới hạn | Mặc địnhfalse |
Tổ hợp tư liệu đầu vào
Văn bản · Văn bản UTF-8
Chuỗi messages[].content
Tham số phương thức và vòng đời
| Tham số | Hợp đồng |
|---|---|
Tham sốcontent_type | Hợp đồngapplication/json |
Tham sốrequired | Hợp đồngmodel, messages, max_tokens |
Tham sốoptional_controls | Hợp đồngstream |
Tham sốmaterial_types | Hợp đồngtext |
Tham sốtext_file_material | Hợp đồngĐọc tài liệu UTF-8 thực tế và đặt nội dung văn bản vào chuỗi đầu vào hoặc nội dung thông điệp được chỉ định. |
Vòng đời: synchronous_or_streamed
Bảng giá
Thông tin biểu giá không bổ sung tùy chọn yêu cầu. Các tham số được hỗ trợ nằm trong phương thức đã chọn.
- Chế độ nhanh
- Mức giá tiêu chuẩn Khi chọn chế độ nhanh
- Chế độ Flex
- Mức giá tiêu chuẩn Khi chọn chế độ flex
- Mức độ suy luận tối đa
- Mức giá tiêu chuẩn Khi áp dụng mức điều chỉnh mặc định (default) cho mức độ suy luận tối đa
- Giá lưu đệm tường minh
- Chưa bật Khi yêu cầu lưu đệm tường minh
- Đầu ra suy luận
- Phần suy luận dùng đơn giá tập con được liệt kê trong tổng đầu ra; không cộng những token đó hai lần. Khi đầu ra bao gồm token suy luận
Mức phí Ailoot
Giá theo cấu hình
Đối chiếu từng khoản phí với điều kiện hiển thị. Dùng một mức phí cho mỗi nhóm cấu hình thay thế.
| Cấu hình | Biểu mức phí | Token ngữ cảnh, lớn hơn | Token ngữ cảnh, tối đa và bao gồm | Phí |
|---|---|---|---|---|
| Cấu hìnhGiá cơ sở cho token | Biểu mức phíMức phí cơ bản | Token ngữ cảnh, lớn hơn— | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token Đầu ra · Token suy luận đầu ra $0.02 / 1K token |
| Cấu hìnhBậc 1 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn0 | Token ngữ cảnh, tối đa và bao gồm200.000 | Phí Đầu vào · Token đầu vào $0.0025 / 1K token Đầu ra · Token đầu ra $0.02 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.00025 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
| Cấu hìnhBậc 2 theo độ dài yêu cầu | Biểu mức phí— | Token ngữ cảnh, lớn hơn200.000 | Token ngữ cảnh, tối đa và bao gồmKhông có giới hạn trên | Phí Đầu vào · Token đầu vào $0.005 / 1K token Đầu ra · Token đầu ra $0.03 / 1K token Đầu vào · Đọc bộ nhớ đệm $0.0005 / 1K token Đầu vào · Ghi bộ nhớ đệm $0.00075 / 1K token Đầu vào · Ghi bộ nhớ đệm, 1 giờ — / 1K token |
Ailoot tạm giữ một khoản ước tính trước yêu cầu. Sau khi có kết quả, phí cuối cùng được quyết toán theo mức sử dụng đo được. Việc quyết toán khi truyền luồng dùng bản ghi mức sử dụng cuối cùng. Cách hoạt động của cơ chế tạm giữ và quyết toán →
Ví dụ yêu cầu
Ailoot Ultra · Anthropic Messages
{
"model": "google/gemini-2.5-pro",
"max_tokens": 128,
"messages": [
{
"role": "user",
"content": "Summarize the incident report."
}
],
"stream": false
}set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-pro', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
-H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
--data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path
source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
raise SystemExit('Choose a document containing text')
payload = {'model': 'google/gemini-2.5-pro', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError
api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
with urlopen(request, timeout=120) as response:
raw = response.read()
Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
Path('result.json').write_bytes(error.read())
Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path
result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
Nhận và lưu kết quả
Ailoot Ultra · Anthropic Messages
JSON hoặc SSE
Lưu tất cả kết quả đã hoàn tất
Lưu mọi phản hồi hoàn chỉnh, tệp và phần nội dung được trả về.
Giữ mọi khối nội dung, chữ ký suy nghĩ và ID sử dụng công cụ thực tế. Ghép tất cả các phần thay đổi của khối SSE; khối văn bản đầu tiên không phải toàn bộ đầu ra.
Nếu cần kiểm tra phản hồi gốc
Giữ ID và header của yêu cầu, phản hồi. Không cung cấp URL chung để truy xuất tác vụ văn bản.
Trường phản hồi
| Trường | Loại |
|---|---|
Trườngid | Loạistring |
Trườngmodel | Loạistring |
Trườngcontent[] | Loạitext|thinking|tool_use|other content block |
Trườngstop_reason | Loạistring|null |
Trườngusage | Loạiobject |
Lỗi và bước tiếp theo
| Phản hồi | Điều kiện | Bước tiếp theo |
|---|---|---|
Phản hồi400 · invalid_request_error | Điều kiệnTrường bắt buộc, cách biểu diễn tài liệu hoặc giá trị tham số không hợp lệ | Bước tiếp theoSửa các trường được chỉ ra trước khi gửi yêu cầu tạo mới. |
Bí danh
Bí danh mô hình
Ailoot gemini-2.5-pro
Ailoot Ultra gemini-2.5-pro, google/gemini-2.5-pro
Bí danh đường dẫn phương thức
/chat/completions
ID gọi liên quan
FAQ · Google: Gemini 2.5 Pro
- Có những đầu vào và kết quả nào?
POST /v1/messages·gemini-2.5-pro:text,image→textPOST /v1beta/models/{model}:generateContent·gemini-2.5-pro:text,image→textPOST /v1/chat/completions·gemini-2.5-pro:text→textPOST /v1/messages·gemini-2.5-pro:text→json,ssePOST /v1/chat/completions·google/gemini-2.5-pro:text→textPOST /v1/messages·google/gemini-2.5-pro:text→json,sse- Yêu cầu sử dụng những trường nào?
POST /v1/messages·gemini-2.5-pro:model,messages,system,max_tokens,stream,metadataPOST /v1beta/models/{model}:generateContent·gemini-2.5-pro:contents,systemInstruction,sessionIdPOST /v1/chat/completions·gemini-2.5-pro:model,messages,streamPOST /v1/messages·gemini-2.5-pro:model,messages,max_tokens,streamPOST /v1/chat/completions·google/gemini-2.5-pro:model,messages,stream,modalities,providerPOST /v1/messages·google/gemini-2.5-pro:model,messages,max_tokens,stream- Áp dụng những giới hạn nào?
POST /v1/messages·gemini-2.5-pro:ctx:1048576;max_out:65536;messages.min_items:1;max_tokens.minimum:1POST /v1beta/models/{model}:generateContent·gemini-2.5-pro:ctx:1048576;max_out:65536;contents.min_items:1POST /v1/chat/completions·gemini-2.5-pro:messages.min_items:1POST /v1/chat/completions·google/gemini-2.5-pro:messages.min_items:1