ByteDance: UI-TARS 7B
UI-TARS-1.5-7B — открытая мультимодальная модель ByteDance для агентов, работающих с компьютером. Она рассуждает по скриншотам и задаче, затем выдаёт следующее действие в GUI для исполнения приложением; этот выпуск 7B ориентирован на общее использование компьютера, а не на оптимизацию под игры.
- Ailoot Ultra · Чат OpenAI
POST /v1/chat/completionsbytedance/ui-tars-1.5-7b - Ailoot Ultra · Сообщения Anthropic
POST /v1/messagesbytedance/ui-tars-1.5-7b
О модели
Описание раскрывает возможности модели. Доступные в Ailoot входные данные, результаты и параметры выбранного метода перечислены ниже.
UI-TARS-1.5-7B — выпущенная ByteDance мультимодальная модель GUI-агента с 7B параметров для общего использования компьютера. Она сочетает визуальное восприятие интерфейса с рассуждением перед действием, развивая собственную архитектуру UI-TARS с обучением с подкреплением. В официальном процессе на вход подаются инструкция, скриншоты и история действий; вывод описывает следующее действие в интерфейсе, часто с Thought, объясняющим задуманный шаг. Приложение исполняет действие и предоставляет следующий скриншот для продолжения задачи.
Производитель отделяет эту скачиваемую контрольную точку 7B от более крупной исследовательской модели UI-TARS-1.5. Выпуск 7B специально не оптимизирован для игровых сценариев, поэтому демонстрации и результаты более крупной исследовательской модели не следует считать равнозначными возможностями этой версии. Её практическая роль — взаимодействовать с видимыми элементами управления: навигацией браузера, офисным ПО, файлами и сходными настольными процессами. Чтение скриншота и выбор действия отличаются от генерации видео или получения невидимого состояния приложения.
Официальный репозиторий описывает шаблоны действий для настольных и мобильных устройств. Настольные действия включают клики, двойные и правые клики, перетаскивание, сочетания клавиш, ввод текста и прокрутку, а также wait и finished для проверки меняющегося экрана или завершения задачи. Мобильный шаблон добавляет долгое нажатие, открытие приложения, переход домой или назад. Отдельный шаблон привязки к интерфейсу запрашивает Action без Thought и предназначен для облегчённых задач вывода действий. Выбирайте словарь действий, который действительно понимает среда исполнения, не считая все шаблоны взаимозаменяемыми.
Полезное задание называет цель, предоставляет текущий скриншот и нужную историю действий и определяет критерий завершения. Например, авторский рабочий запрос может попросить модель найти указанную настройку, изменить её на заданное значение и остановиться после появления нового состояния. Запрашивайте следующий шаг по текущему экрану вместо длинной предположительной последовательности. Явно сохраняйте инструкции и ограничения разрешённых операций; после исполнения шага возвращайте полученный экран, чтобы дальнейшее рассуждение использовало наблюдения, а не предположения о случившемся.
Обработка координат — существенная часть официального процесса. Репозиторий отделяет предсказание модели от постобработки, которая разбирает действие и сопоставляет его цель с экраном. Руководство по координатам показывает преобразование координат из изображения изменённого размера обратно в исходные размеры. Сохраняйте исходную ширину и высоту скриншота и используйте соглашение координат конкретного шаблона действий и парсера. Позиция, выглядящая правдоподобно на уменьшенном изображении, может указывать на другой элемент, если прямо применить её к исходному экрану. Поэтому текст действия модели — инструкция для интерпретации, а не уже выполненное событие мыши.
Руководство по развёртыванию даёт конкретный одношаговый пример с Thought и Action в результате, а настольное приложение репозитория — отдельная среда исполнения. Настроенная длина ввода и пример бюджета вывода в руководстве являются параметрами развёртывания, а не универсальным утверждением о контексте или лимите действий каждой интеграции. Для практической работы с GUI отправляйте чёткие читаемые скриншоты с элементами управления и контекстом для следующего решения. UI-TARS может ошибочно определять элементы, неверно описывать незнакомые интерфейсы или выбирать неоптимальное действие, особенно при неоднозначном экране; проверка нового скриншота после каждого действия связывает такие ошибки с реальным состоянием задачи.
Практическая задача
Практическая задача
Технический пример на английском
Choose a safe next interface step
Goal: enable weekly email summaries. Text description of the current settings page: a checkbox labelled Weekly summary is unchecked; a Save button is below it. History: settings opened, no changes saved. Describe the next interface action and the state to verify afterward. Use labels rather than inventing screen coordinates.Ожидаемый результат
One proposed action, a brief reason and the resulting visible state an application should check.Проверка результата
Check that the answer proposes checking Weekly summary before saving and does not claim that any click was executed.Ailoot Ultra · Чат OpenAI POST /v1/chat/completions bytedance/ui-tars-1.5-7b
bytedance/ui-tars-1.5-7bНачало
UI-TARS-1.5-7B — открытая мультимодальная модель ByteDance для агентов, работающих с компьютером. Она рассуждает по скриншотам и задаче, затем выдаёт следующее действие в GUI для исполнения приложением; этот выпуск 7B ориентирован на общее использование компьютера, а не на оптимизацию под игры.
- Допустимые входные данные
- Текст
- Результаты
- Текст
Доступно в Ailoot · входные данные и методы
Ailoot Ultra · Чат OpenAI POST /v1/chat/completions
- Входные данные
text- Результат
text- Выходной формат
- json или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения bytedance/ui-tars-1.5-7b | По умолчанию— |
Поле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)
Ставки Ailoot
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияБазовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0002 / 1K токенов Выход · Выходные токены $0.0004 / 1K токенов Вход · Чтение кэша $0.0002 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияУровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0002 / 1K токенов Выход · Выходные токены $0.0004 / 1K токенов Вход · Чтение кэша $0.0002 / 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": "bytedance/ui-tars-1.5-7b", "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='bytedance/ui-tars-1.5-7b',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='bytedance/ui-tars-1.5-7b',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 Ultra bytedance/ui-tars-1.5-7b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
Ailoot Ultra · Сообщения Anthropic POST /v1/messages bytedance/ui-tars-1.5-7b
bytedance/ui-tars-1.5-7bНачало
UI-TARS-1.5-7B — открытая мультимодальная модель ByteDance для агентов, работающих с компьютером. Она рассуждает по скриншотам и задаче, затем выдаёт следующее действие в GUI для исполнения приложением; этот выпуск 7B ориентирован на общее использование компьютера, а не на оптимизацию под игры.
- Допустимые входные данные
- Текст
- Результаты
- json · sse
Доступно в Ailoot · входные данные и методы
Ailoot Ultra · Сообщения Anthropic POST /v1/messages
- Входные данные
text- Результат
json,sse- Выходной формат
- JSON или SSE
| Поле | Тип | Требование | Значения и ограничения | По умолчанию |
|---|---|---|---|---|
Полеmodel | Типstring | ТребованиеОбязательно | Значения и ограничения bytedance/ui-tars-1.5-7b | По умолчанию— |
Поле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)
Ставки Ailoot
Цены по конфигурациям
Сопоставьте каждую плату с указанными условиями. Для каждого набора альтернативных конфигураций используйте одну ставку.
| Конфигурация | Шкала ставок | Токенов контекста больше | Токенов контекста не более, включительно | Плата |
|---|---|---|---|---|
| КонфигурацияБазовые ставки за токены | Шкала ставокБазовая ставка | Токенов контекста больше— | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0002 / 1K токенов Выход · Выходные токены $0.0004 / 1K токенов Вход · Чтение кэша $0.0002 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
| КонфигурацияУровень 1 по длине запроса | Шкала ставок— | Токенов контекста больше0 | Токенов контекста не более, включительноБез верхней границы | Плата Вход · Входные токены $0.0002 / 1K токенов Выход · Выходные токены $0.0004 / 1K токенов Вход · Чтение кэша $0.0002 / 1K токенов Вход · Запись в кэш — / 1K токенов Вход · Запись в кэш, 1 час — / 1K токенов |
Ailoot резервирует расчётную сумму перед запросом. После получения результата списывает итоговую плату по измеренному расходу. Для окончательного списания за потоковый ответ используется итоговая запись расхода. Как работают резервирование и расчёт →
Примеры запросов
Ailoot Ultra · Сообщения Anthropic
{
"model": "bytedance/ui-tars-1.5-7b",
"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': 'bytedance/ui-tars-1.5-7b', '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': 'bytedance/ui-tars-1.5-7b', '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 Ultra bytedance/ui-tars-1.5-7b
Псевдонимы путей метода
Используйте пути методов, указанные выше.
Связанные ID для вызова
FAQ · ByteDance: UI-TARS 7B
- Какие входные данные и результаты доступны?
POST /v1/chat/completions·bytedance/ui-tars-1.5-7b:text→textPOST /v1/messages·bytedance/ui-tars-1.5-7b:text→json,sse- Какие поля использует запрос?
POST /v1/chat/completions·bytedance/ui-tars-1.5-7b:model,messages,stream,modalities,providerPOST /v1/messages·bytedance/ui-tars-1.5-7b:model,messages,max_tokens,stream- Какие ограничения действуют?
POST /v1/chat/completions·bytedance/ui-tars-1.5-7b:messages.min_items:1