Meta: Muse Glimmer 30B
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Ailoot · Сообщения Anthropic
POST /v1/messagesmeta/muse-glimmer-30b - Ailoot · Чат OpenAI
POST /v1/chat/completionsmeta/muse-glimmer-30b - Ailoot Ultra · Чат OpenAI
POST /v1/chat/completionsmeta/muse-glimmer-30b - Ailoot Ultra · Сообщения Anthropic
POST /v1/messagesmeta/muse-glimmer-30b - Ailoot · Чат OpenAI
POST /v1/chat/completionsmuse-glimmer - Ailoot · Чат OpenAI
POST /v1/chat/completionsmuse-glimmer-latest
О модели
Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.
Агентная работа от задачи до результата
Muse Glimmer объединяет планирование, работу с кодом, вызовы функций, визуальное понимание и восстановление после неудачных действий. Модель предназначена для длительных задач, где помощник сохраняет план, использует инструменты и разбирает полученные результаты. Она также может готовить синтетические данные и оценивать ответы других моделей.
Восприятие рабочей среды
В текущем каталоге Ailoot для этой модели представлены только текстовые входы. Производитель также предусматривает чередование текста и изображений с текстовым ответом. Использование этой визуальной способности требует метода, который явно принимает изображения. При таком визуальном входе модель может разбирать скриншоты, графики, документы и иллюстрации вместе с перепиской. На одну картинку предусмотрено до 4096 визуальных токенов. Для воспроизведения внешнего действия приложение предоставляет инструмент; модель выбирает функцию и её аргументы.
Если действие не удалось или результат отличается от ожидаемого, модель обучена анализировать ошибку и продолжать задачу. Это способность рассуждать о неудаче, а не гарантия успешного исправления каждого сбоя.
Масштаб и глубина рассуждения
Плотная причинная архитектура содержит около 29,6 млрд параметров вместе с отдельным энкодером восприятия. В её слоях чередуется локальное и глобальное внимание. Общий контекст входа и ответа — 131 072 и более токенов. Модель получена дистилляцией из Muse Spark.
Поддерживаются уровни low, medium, high и xhigh. Более глубокие варианты предназначены для сложных программных и агентных задач. Знания в обучающих данных ограничены 4 января 2026 года; обучение охватывает более ста языков.
Известные ограничения
Разнообразие языков обучения не означает, что каждый из них проверен для конкретной задачи. Возможны неточности и ошибки в длинных рассуждениях, особенно в незнакомой ситуации. Аудиовход и аудиовыход не поддерживаются. Видео не является отдельной оптимизированной модальностью: визуальная обработка осуществляется по отдельным кадрам. Результат модели текстовый; автоматическое выполнение действий зависит от приложенных инструментов.
Практическая задача
Практическая задача
Технический пример на английском
Plan a correction after a failed action
A proposed deployment script copied config.json into ./dist, but the supplied command result is: cp: ./dist: No such file or directory; exit 1. The build creates ./build, and the deployment contract requires config.json beside ./build/app.js. Propose the next code change and a check. Do not claim the copy or deployment succeeded.Ожидаемый результат
A focused script-change proposal with the evidence behind it and a post-change filesystem check.Проверка результата
Check that the destination follows the stated ./build contract and the failed command remains recorded as failed.Ailoot · Сообщения Anthropic POST /v1/messages meta/muse-glimmer-30b
meta/muse-glimmer-30bНачало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot · Сообщения Anthropic POST /v1/messages
- Входные данные
text- Результат
text- Контекст
- 131 072 tokens
- Максимальный выход
- 32 768 tokens
- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения meta/muse-glimmer-30b | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения user, assistant | По умолчанию— |
Полеmessages[].content | Типstring|content_block[] | ТребованиеОбязательно | Значения и ограничения | По умолчанию— |
Полеsystem | Типstring|content_block[] | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеОбязательно | Значения и ограничения Минимум: 1 Объект ограничения: точный верхний предел выбранной модели/карточки | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Полеtemperature | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtop_p | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеstop_sequences | Типstring[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools | Типtool[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].name | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: передан инструмент | По умолчанию— |
Полеtools[].description | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtools[].input_schema | ТипJSON_schema | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtool_choice | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеthinking.type | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеthinking.budget_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеoutput_config.effort | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmetadata | Типobject | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеcache_control | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Сочетания входных материалов
Текст · Текст UTF8
messages[].content или блок type=text
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрmaterial_types | Контрактtext |
Параметрrequired | Контрактmodel, messages, max_tokens |
Параметрoptional_controls | Контрактnull |
Параметрcontent_type | Контрактapplication/json |
Параметрtext_file_material | Контрактфактическое содержимое UTF-8 вставляется как текст; ID файлов и URLs требуют отдельной точной поддержки |
Жизненный цикл: exact retained published method
Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.
Тарифы
Ставки методов Ailoot
POST /v1/messages- Вход
- 0,0003 $ / 1K
- Выход
- 0,0011 $ / 1K
- Чтение кэша
- 0,00004 $ / 1K
- Запись в кэш
- 0,0003 $ / 1K
- Запись в кэш, 5 мин
- 0,0003 $ / 1K tokens
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Сведения о справочном тарифе
Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.
Справочные шкалы модели
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияOpenAI Chat · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияOpenAI Chat · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Примеры запросов
Ailoot · Сообщения Anthropic
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": "meta/muse-glimmer-30b", "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
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="meta/muse-glimmer-30b",
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: "meta/muse-glimmer-30b",
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='meta/muse-glimmer-30b',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")
Получить и сохранить результаты
Ailoot · Сообщения Anthropic
json или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте все блоки содержимого, подписи рассуждений и фактические ID обращений к инструментам. Собирайте все изменения блоков SSE; первый текстовый блок не является полным выходом.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеid | Типstring |
Полеmodel | Типstring |
Полеcontent[] | Типtext|thinking|tool_use|other content block |
Полеstop_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot · Чат OpenAI POST /v1/chat/completions meta/muse-glimmer-30b
meta/muse-glimmer-30bmeta/muse-glimmer-30bmuse-glimmermuse-glimmer-latest
Начало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot · Чат OpenAI POST /v1/chat/completions
- Входные данные
text- Результат
text- Контекст
- 4 096 tokens
- Максимальный выход
- 1 024 tokens
- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения meta/muse-glimmer-30b | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения Примеры: system, user, assistant, tool, function Условия: Эти роли явно представлены типами совместимости исходного кода; точный набор ролей зависит от модели. Зависит от модели | По умолчанию— |
Полеmessages[].content | Типstring|content_part[]|null | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_calls | Типtool_call[] | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_call_id | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: role=tool; используйте фактически возвращённый ID | По умолчанию— |
Полеmessages[].name | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].reasoning_content | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: Передавайте обратно фактически возвращённые рассуждения, если эта модель их использует | По умолчанию— |
Полеmessages[].reasoning_details | Типobject|array | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеmax_completion_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Полеstream_options.include_usage | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtemperature | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtop_p | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеstop | Типstring|string[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools | Типfunction_tool[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].type | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].function.name | Типstring | ТребованиеОбязательно | Значения и ограничения Применяется, когда: передан инструмент-функция | По умолчанию— |
Полеtools[].function.description | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtools[].function.parameters | ТипJSON_schema | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtool_choice | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеparallel_tool_calls | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеresponse_format | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning_effort | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеservice_tier | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеinstructions | Типstring | ТребованиеНеобязательно | Значения и ограничения Поле совместимости | По умолчанию— |
Полеfunctions | Типfunction[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеfunction_call | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеprompt_cache_options | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Сочетания входных материалов
Текст · Текст UTF8
messages[].content
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрmaterial_types | Контрактtext |
Параметрrequired | Контрактmodel, messages |
Параметрoptional_controls | Контрактnull |
Параметрcontent_type | Контрактapplication/json |
Параметрtext_file_material | Контрактфактическое содержимое UTF-8 вставляется как текст; ID файлов и URLs требуют отдельной точной поддержки |
Жизненный цикл: exact retained published method
Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.
Тарифы
Ставки методов Ailoot
POST /v1/chat/completions- Вход
- 0,0003 $ / 1K
- Выход
- 0,0011 $ / 1K
- Чтение кэша
- 0,00004 $ / 1K
- Запись в кэш
- 0,0003 $ / 1K
- Запись в кэш, 5 мин
- 0,0003 $ / 1K tokens
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Сведения о справочном тарифе
Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.
Справочные шкалы модели
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияOpenAI Chat · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияOpenAI Chat · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Примеры запросов
Ailoot · Чат OpenAI
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": "meta/muse-glimmer-30b", "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/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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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)
resp = client.chat.completions.create(
model="meta/muse-glimmer-30b",
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(resp.to_dict(mode="json"))
import OpenAI from "openai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
model: "meta/muse-glimmer-30b",
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(resp);
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='meta/muse-glimmer-30b',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")
Получить и сохранить результаты
Ailoot · Чат OpenAI
json или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте каждый вариант ответа с его содержимым, вызовами инструментов и рассуждениями. В SSE собирайте изменения по индексам варианта и инструмента, сохраняйте итоговую причину завершения и данные использования.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеchoices[].index | Типinteger |
Полеchoices[].message.content | Типstring|null |
Полеchoices[].message.tool_calls | Типtool_call[] |
Полеchoices[].message.reasoning_content | Типstring |
Полеchoices[].message.reasoning_details | Типobject|array |
Полеchoices[].finish_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra · Чат OpenAI POST /v1/chat/completions meta/muse-glimmer-30b
meta/muse-glimmer-30bНачало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot Ultra · Чат OpenAI POST /v1/chat/completions
- Входные данные
text- Результат
text- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения meta/muse-glimmer-30b | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения Примеры: system, user, assistant, tool, function Условия: Эти роли явно представлены типами совместимости исходного кода; точный набор ролей зависит от модели. Зависит от модели | По умолчанию— |
Полеmessages[].content | Типstring|content_part[]|null | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_calls | Типtool_call[] | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_call_id | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: role=tool; используйте фактически возвращённый ID | По умолчанию— |
Полеmessages[].name | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].reasoning_content | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: Передавайте обратно фактически возвращённые рассуждения, если эта модель их использует | По умолчанию— |
Полеmessages[].reasoning_details | Типobject|array | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеmax_completion_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Полеstream_options.include_usage | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtemperature | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtop_p | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеstop | Типstring|string[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools | Типfunction_tool[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].type | Типstring | ТребованиеНеобязательно | Значения и ограничения function Зависит от модели | По умолчанию— |
Полеtools[].function.name | Типstring | ТребованиеОбязательно | Значения и ограничения Применяется, когда: передан инструмент-функция | По умолчанию— |
Полеtools[].function.description | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtools[].function.parameters | ТипJSON_schema | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtool_choice | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеparallel_tool_calls | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеresponse_format | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning_effort | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеservice_tier | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеinstructions | Типstring | ТребованиеНеобязательно | Значения и ограничения Поле совместимости | По умолчанию— |
Полеfunctions | Типfunction[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеfunction_call | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеprompt_cache_options | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmodalities | Типstring[] | ТребованиеНеобязательно | Значения и ограничения text | По умолчанию— |
Полеprovider | Типobject | ТребованиеНеобязательно | Значения и ограничения Условия: provider.options отклоняется на этом текстовом маршруте Ultra | По умолчанию— |
Полеcache_control.ttl | Типstring | ТребованиеНеобязательно | Значения и ограничения Условия: 1h отклоняется в фактических местах настройки кэша запросов | По умолчанию— |
Сочетания входных материалов
Текст · Текст UTF8
messages[].content
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрcontent_type | Контрактapplication/json |
Параметрrequired | Контрактmodel, messages |
Параметрmaterial_types | Контрактtext |
Параметрmessages | Контрактмассив сообщений со структурой role/content |
Параметрfile_material | Контрактфактический документ UTF-8 вставляется как буквальный текст; ID файла не выводится из него |
Параметрoptional_controls | Контрактstream, temperature, top_p, stop, max_tokens, max_completion_tokens, reasoning, response_format, tools, tool_choice |
Параметрcontrol_scope | Контрактзависит от модели; пользовательские инструменты-функции отличаются от инструментов, выполняемых на стороне сервиса |
Параметрoutput_modalities | Контрактtext |
Параметрhosted_operations | Контрактfalse |
Параметрmultimodal_input_binding | Контрактnull |
Жизненный цикл: synchronous_or_streamed
Отправляйте точный ID модели вместе с messages.
Длина контекста не является пределом выхода.
Текстовый файл может передавать буквальный текст; входные изображения, аудио и файловые объекты требуют точной привязки.
Тарифы
Тарифная справка не добавляет режимы запроса. Поддерживаемые параметры указаны для выбранного метода.
- Быстрый режим
- Стандартный тариф При выборе быстрого режима
- Режим flex
- Стандартный тариф При выборе режима flex
- Максимальная интенсивность рассуждений
- Стандартный тариф При максимальной интенсивности рассуждений с корректировкой по умолчанию (default)
- Интенсивность рассуждений · высокая (high)
- Стандартный тариф При высокой интенсивности рассуждений (high)
- Интенсивность рассуждений · низкая (low)
- Стандартный тариф При низкой интенсивности рассуждений (low)
- Интенсивность рассуждений · средняя (medium)
- Стандартный тариф При средней интенсивности рассуждений (medium)
- Интенсивность рассуждений · xhigh
- Стандартный тариф При интенсивности рассуждений xhigh
Ставки Ailoot
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияБазовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияУровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot Ultra · Чат OpenAI
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model": "meta/muse-glimmer-30b", "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='meta/muse-glimmer-30b',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='meta/muse-glimmer-30b',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")
Получить и сохранить результаты
Ailoot Ultra · Чат OpenAI
json или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте каждый вариант ответа с его содержимым, вызовами инструментов и рассуждениями. В SSE собирайте изменения по индексам варианта и инструмента, сохраняйте итоговую причину завершения и данные использования.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеchoices[].index | Типinteger |
Полеchoices[].message.content | Типstring|null |
Полеchoices[].message.tool_calls | Типtool_call[] |
Полеchoices[].message.reasoning_content | Типstring |
Полеchoices[].message.reasoning_details | Типobject|array |
Полеchoices[].finish_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra · Сообщения Anthropic POST /v1/messages meta/muse-glimmer-30b
meta/muse-glimmer-30bНачало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- json · sse
Доступно в Ailoot · входные данные и методы
Ailoot Ultra · Сообщения Anthropic POST /v1/messages
- Входные данные
text- Результат
json,sse- Выходной формат
- JSON или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения meta/muse-glimmer-30b | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения user, assistant | По умолчанию— |
Полеmessages[].content | Типstring | ТребованиеОбязательно | Значения и ограничения | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеОбязательно | Значения и ограничения | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Сочетания входных материалов
Текст · Текст UTF-8
строка messages[].content
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрcontent_type | Контрактapplication/json |
Параметрrequired | Контрактmodel, messages, max_tokens |
Параметрoptional_controls | Контрактstream |
Параметрmaterial_types | Контрактtext |
Параметрtext_file_material | КонтрактПрочитайте фактический документ UTF-8 и поместите его текст в указанную строку входа или содержимого сообщения. |
Жизненный цикл: synchronous_or_streamed
Тарифы
Тарифная справка не добавляет режимы запроса. Поддерживаемые параметры указаны для выбранного метода.
- Быстрый режим
- Стандартный тариф При выборе быстрого режима
- Режим flex
- Стандартный тариф При выборе режима flex
- Максимальная интенсивность рассуждений
- Стандартный тариф При максимальной интенсивности рассуждений с корректировкой по умолчанию (default)
- Интенсивность рассуждений · высокая (high)
- Стандартный тариф При высокой интенсивности рассуждений (high)
- Интенсивность рассуждений · низкая (low)
- Стандартный тариф При низкой интенсивности рассуждений (low)
- Интенсивность рассуждений · средняя (medium)
- Стандартный тариф При средней интенсивности рассуждений (medium)
- Интенсивность рассуждений · xhigh
- Стандартный тариф При интенсивности рассуждений xhigh
Ставки Ailoot
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияБазовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияУровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot Ultra · Сообщения Anthropic
{
"model": "meta/muse-glimmer-30b",
"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': 'meta/muse-glimmer-30b', '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': 'meta/muse-glimmer-30b', '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))
Получить и сохранить результаты
Ailoot Ultra · Сообщения Anthropic
JSON или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте все блоки содержимого, подписи рассуждений и фактические ID обращений к инструментам. Собирайте все изменения блоков SSE; первый текстовый блок не является полным выходом.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеid | Типstring |
Полеmodel | Типstring |
Полеcontent[] | Типtext|thinking|tool_use|other content block |
Полеstop_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot · Чат OpenAI POST /v1/chat/completions muse-glimmer
muse-glimmermeta/muse-glimmer-30bmuse-glimmermuse-glimmer-latest
Начало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot · Чат OpenAI POST /v1/chat/completions
- Входные данные
text- Результат
text- Контекст
- 4 096 tokens
- Максимальный выход
- 1 024 tokens
- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения muse-glimmer | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения Примеры: system, user, assistant, tool, function Условия: Эти роли явно представлены типами совместимости исходного кода; точный набор ролей зависит от модели. Зависит от модели | По умолчанию— |
Полеmessages[].content | Типstring|content_part[]|null | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_calls | Типtool_call[] | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_call_id | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: role=tool; используйте фактически возвращённый ID | По умолчанию— |
Полеmessages[].name | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].reasoning_content | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: Передавайте обратно фактически возвращённые рассуждения, если эта модель их использует | По умолчанию— |
Полеmessages[].reasoning_details | Типobject|array | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеmax_completion_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Полеstream_options.include_usage | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtemperature | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtop_p | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеstop | Типstring|string[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools | Типfunction_tool[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].type | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].function.name | Типstring | ТребованиеОбязательно | Значения и ограничения Применяется, когда: передан инструмент-функция | По умолчанию— |
Полеtools[].function.description | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtools[].function.parameters | ТипJSON_schema | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtool_choice | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеparallel_tool_calls | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеresponse_format | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning_effort | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеservice_tier | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеinstructions | Типstring | ТребованиеНеобязательно | Значения и ограничения Поле совместимости | По умолчанию— |
Полеfunctions | Типfunction[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеfunction_call | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеprompt_cache_options | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Сочетания входных материалов
Текст · Текст UTF8
messages[].content
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрmaterial_types | Контрактtext |
Параметрrequired | Контрактmodel, messages |
Параметрoptional_controls | Контрактnull |
Параметрcontent_type | Контрактapplication/json |
Параметрtext_file_material | Контрактфактическое содержимое UTF-8 вставляется как текст; ID файлов и URLs требуют отдельной точной поддержки |
Жизненный цикл: exact retained published method
Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.
Тарифы
Ставки методов Ailoot
POST /v1/chat/completions- Вход
- 0,0003 $ / 1K
- Выход
- 0,0011 $ / 1K
- Чтение кэша
- 0,00004 $ / 1K
- Запись в кэш
- 0,0003 $ / 1K
- Запись в кэш, 5 мин
- 0,0003 $ / 1K tokens
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Сведения о справочном тарифе
Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.
Справочные шкалы модели
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияOpenAI Chat · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияOpenAI Chat · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Примеры запросов
Ailoot · Чат OpenAI
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": "muse-glimmer", "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/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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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)
resp = client.chat.completions.create(
model="muse-glimmer",
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(resp.to_dict(mode="json"))
import OpenAI from "openai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
model: "muse-glimmer",
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(resp);
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='muse-glimmer',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")
Получить и сохранить результаты
Ailoot · Чат OpenAI
json или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте каждый вариант ответа с его содержимым, вызовами инструментов и рассуждениями. В SSE собирайте изменения по индексам варианта и инструмента, сохраняйте итоговую причину завершения и данные использования.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеchoices[].index | Типinteger |
Полеchoices[].message.content | Типstring|null |
Полеchoices[].message.tool_calls | Типtool_call[] |
Полеchoices[].message.reasoning_content | Типstring |
Полеchoices[].message.reasoning_details | Типobject|array |
Полеchoices[].finish_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot · Чат OpenAI POST /v1/chat/completions muse-glimmer-latest
muse-glimmer-latestmeta/muse-glimmer-30bmuse-glimmermuse-glimmer-latest
Начало
Muse Glimmer — модель Meta для многошагового планирования, программирования и работы с инструментами. В текущем каталоге Ailoot для неё представлены текстовые входы.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot · Чат OpenAI POST /v1/chat/completions
- Входные данные
text- Результат
text- Контекст
- 4 096 tokens
- Максимальный выход
- 1 024 tokens
- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения muse-glimmer-latest | По умолчанию— |
Полеmessages | Типmessage[] | ТребованиеОбязательно | Значения и ограничения Минимум элементов: 1 | По умолчанию— |
Полеmessages[].role | Типstring | ТребованиеОбязательно | Значения и ограничения Примеры: system, user, assistant, tool, function Условия: Эти роли явно представлены типами совместимости исходного кода; точный набор ролей зависит от модели. Зависит от модели | По умолчанию— |
Полеmessages[].content | Типstring|content_part[]|null | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_calls | Типtool_call[] | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].tool_call_id | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: role=tool; используйте фактически возвращённый ID | По умолчанию— |
Полеmessages[].name | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеmessages[].reasoning_content | Типstring | ТребованиеНеобязательно | Значения и ограничения Применяется, когда: Передавайте обратно фактически возвращённые рассуждения, если эта модель их использует | По умолчанию— |
Полеmessages[].reasoning_details | Типobject|array | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеmax_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеmax_completion_tokens | Типinteger | ТребованиеНеобязательно | Значения и ограничения Минимум: 1 Зависит от модели | По умолчанию— |
Полеstream | Типboolean | ТребованиеНеобязательно | Значения и ограничения | По умолчаниюfalse |
Полеstream_options.include_usage | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtemperature | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtop_p | Типnumber | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеstop | Типstring|string[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools | Типfunction_tool[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].type | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеtools[].function.name | Типstring | ТребованиеОбязательно | Значения и ограничения Применяется, когда: передан инструмент-функция | По умолчанию— |
Полеtools[].function.description | Типstring | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtools[].function.parameters | ТипJSON_schema | ТребованиеНеобязательно | Значения и ограничения | По умолчанию— |
Полеtool_choice | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеparallel_tool_calls | Типboolean | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеresponse_format | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning_effort | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеreasoning | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеservice_tier | Типstring | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеinstructions | Типstring | ТребованиеНеобязательно | Значения и ограничения Поле совместимости | По умолчанию— |
Полеfunctions | Типfunction[] | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеfunction_call | Типstring|object | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Полеprompt_cache_options | Типobject | ТребованиеНеобязательно | Значения и ограничения Зависит от модели | По умолчанию— |
Сочетания входных материалов
Текст · Текст UTF8
messages[].content
Параметры и жизненный цикл метода
| Параметр | Контракт |
|---|---|
Параметрmaterial_types | Контрактtext |
Параметрrequired | Контрактmodel, messages |
Параметрoptional_controls | Контрактnull |
Параметрcontent_type | Контрактapplication/json |
Параметрtext_file_material | Контрактфактическое содержимое UTF-8 вставляется как текст; ID файлов и URLs требуют отдельной точной поддержки |
Жизненный цикл: exact retained published method
Структуры методов и ID указаны точно; возможности поставщика рассматриваются отдельно от допуска.
Тарифы
Ставки методов Ailoot
POST /v1/chat/completions- Вход
- 0,0003 $ / 1K
- Выход
- 0,0011 $ / 1K
- Чтение кэша
- 0,00004 $ / 1K
- Запись в кэш
- 0,0003 $ / 1K
- Запись в кэш, 5 мин
- 0,0003 $ / 1K tokens
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Сведения о справочном тарифе
Справочные шкалы модели не меняют выбор метода, расчёт стоимости или списания. Действующая плата определяется ставками выбранного метода Ailoot.
Справочные шкалы модели
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияOpenAI Chat · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияOpenAI Chat · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Базовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияAnthropic Messages · Уровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0006 / 1K токенов Выход · Выходные токены $0.0024 / 1K токенов Вход · Чтение кэша $0.00008 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Примеры запросов
Ailoot · Чат OpenAI
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": "muse-glimmer-latest", "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/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
print(json.dumps(json.loads(Path("result.json").read_text()),ensure_ascii=False,indent=2))
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)
resp = client.chat.completions.create(
model="muse-glimmer-latest",
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(resp.to_dict(mode="json"))
import OpenAI from "openai";
if (!process.env.AILOOT_API_KEY?.trim()) throw new Error("Set AILOOT_API_KEY before making a request");
const client = new OpenAI({ baseURL: "https://api.ailoot.ai/v1", apiKey: process.env.AILOOT_API_KEY, maxRetries: 0 });
const resp = await client.chat.completions.create({
model: "muse-glimmer-latest",
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(resp);
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='muse-glimmer-latest',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")
Получить и сохранить результаты
Ailoot · Чат OpenAI
json или SSE
Сохраняйте все готовые результаты
Сохраняйте каждый полностью полученный ответ, файл и элемент содержимого.
Сохраняйте каждый вариант ответа с его содержимым, вызовами инструментов и рассуждениями. В SSE собирайте изменения по индексам варианта и инструмента, сохраняйте итоговую причину завершения и данные использования.
Если нужно проверить исходный ответ
Сохраняйте ID запросов и ответов, а также заголовки. Общий URL получения текстового задания не предоставлен.
Поля ответа
| Поле | Тип |
|---|---|
Полеchoices[].index | Типinteger |
Полеchoices[].message.content | Типstring|null |
Полеchoices[].message.tool_calls | Типtool_call[] |
Полеchoices[].message.reasoning_content | Типstring |
Полеchoices[].message.reasoning_details | Типobject|array |
Полеchoices[].finish_reason | Типstring|null |
Полеusage | Типobject |
Ошибки и дальнейшие шаги
| Ответ | Условие | Следующий шаг |
|---|---|---|
Ответ400 · invalid_request_error | УсловиеНеверные обязательные поля, представление материалов или значение параметра | Следующий шагИсправьте указанные поля перед новым запросом на создание. |
Псевдонимы
Псевдонимы моделей
Ailoot meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
Ailoot Ultra meta/muse-glimmer-30b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
meta/muse-glimmer-30b, meta/muse-glimmer-30b, muse-glimmer, muse-glimmer-latest
FAQ · meta/muse-glimmer-30b
- Какие входные данные и результаты доступны?
POST /v1/messages·meta/muse-glimmer-30b:text→textPOST /v1/chat/completions·meta/muse-glimmer-30b:text→textPOST /v1/chat/completions·meta/muse-glimmer-30b:text→textPOST /v1/messages·meta/muse-glimmer-30b:text→json,ssePOST /v1/chat/completions·muse-glimmer:text→textPOST /v1/chat/completions·muse-glimmer-latest:text→text- Какие поля использует запрос?
POST /v1/messages·meta/muse-glimmer-30b:model,messages,system,max_tokens,stream,metadataPOST /v1/chat/completions·meta/muse-glimmer-30b:model,messages,streamPOST /v1/chat/completions·meta/muse-glimmer-30b:model,messages,stream,modalities,providerPOST /v1/messages·meta/muse-glimmer-30b:model,messages,max_tokens,streamPOST /v1/chat/completions·muse-glimmer:model,messages,streamPOST /v1/chat/completions·muse-glimmer-latest:model,messages,stream- Какие ограничения действуют?
POST /v1/messages·meta/muse-glimmer-30b:ctx:131072;max_out:32768;messages.min_items:1;max_tokens.minimum:1POST /v1/chat/completions·meta/muse-glimmer-30b:ctx:4096;max_out:1024;messages.min_items:1POST /v1/chat/completions·meta/muse-glimmer-30b:messages.min_items:1POST /v1/chat/completions·muse-glimmer:ctx:4096;max_out:1024;messages.min_items:1POST /v1/chat/completions·muse-glimmer-latest:ctx:4096;max_out:1024;messages.min_items:1