Дизайн TypeScript SDK
laya-client — это HTTP-клиент без зависимостей для самостоятельно размещённого сервера laya-serve.
Он использует конечную точку POST /v1/systemone и не добавляет продакшен-кода на Python
или серверных зависимостей.
Пакет npm начинается с версии 0.1.0, независимо от выпусков Python.
Границы
| Компонент | Ответственность |
|---|---|
sdk/typescript |
Типы вопросов/ответов, пресеты, валидация, нативный fetch, ошибки и отмена |
laya/serve.py |
Существующая конечная точка HTTP, аутентификация Bearer, проверка работоспособности и лимиты запросов |
laya/router.py |
Выбор чекпойнта, загрузка и маршрутизация инференса |
laya/agent.py |
Токенизация, инференс на PyTorch и форматирование калиброванных ответов |
laya/presets.py |
Источник для пяти сгенерированных пресетов вопросов TypeScript |
flowchart LR
A[JavaScript or TypeScript application] --> B[laya-client]
B -->|POST /v1/systemone| C[Existing Laya server]
C --> E[Router and local checkpoint]
SDK экспортирует predict и проверку health, специфичную для Laya. Он поставляется в виде ESM,
CommonJS и деклараций, сохраняя выведенные идентификаторы вопросов и метки choice.
Используйте laya-client, когда приложение на JavaScript или TypeScript общается по HTTP с
самостоятельно размещённым Python-сервером laya-serve. Используйте laya-ts, когда инференс должен
выполняться напрямую внутри JavaScript через его локальную среду выполнения ONNX, без Python-сервера.
Общий контракт
Запросы содержат state и questions. Если model не задан в конфигурации и не передан для
предсказания, laya-client опускает его, позволяя laya-serve автоматически выбрать локальный
чекпойнт. model на уровне клиента или отдельного вызова может выбрать локальный чекпойнт, как и остальные управляющие элементы на каждый запрос из таблицы ниже. Массивы
меток choice нормализуются к словарям с описаниями null перед передачей.
Ответы сохраняют model, answers и usage токенов. Поля routing у Laya и action у
ответа — необязательные расширения; уверенность Noul тоже необязательна. Уверенность Choice и
Score, распределения и легенды Score остаются обязательными. Каждый ответ несёт answer_confidence — массу max(p) на сообщаемом ответе, которая для всех трёх типов вопросов одна и та же величина. Вызов, которому передали min_confidence, сообщает abstention и abstention_threshold на каждом своём ответе и low_confidence: true на тех, что ниже порога; если порог не задан, ни один из этих трёх ключей не отправляется, и это отсутствие и есть отчёт. Необязательные расширения проверяются,
когда присутствуют.
/v1/systemone — единственная конечная точка, которую вызывает клиент, и у неё нет отдельного метода маршрутизации: laya-client предоставляет predict и health и ничего больше, а интеграционный тест на живом сервере утверждает, что сервер отвечает 404 на /v1/route. Управляющие элементы, которые эта конечная точка действительно учитывает, действуют на каждый запрос, и каждый отправляется только тогда, когда вызывающий код передал опцию – отсутствующая опция оставляет в силе собственные настройки Router(...) развёртывания, вместо того чтобы переопределять их клиентским значением по умолчанию:
| опция | поле запроса |
|---|---|
model |
model |
task |
task |
lang |
lang |
langGuess |
lang_guess |
maxLen |
max_len |
headMaxLen |
head_max_len |
minConfidence |
min_confidence |
Опция, которая не может ничего означать, отклоняется локально, до отправки запроса: пустой task, бюджет, не являющийся положительным целым числом, порог вне [0, 1], или карта порогов, которая пуста или содержит значение вне [0, 1]. Ничто не игнорируется молча. Публичный /health у Laya возвращает status, loaded и device. Предсказание никогда не проверяет работоспособность заранее.
Строки с подробностями FastAPI и массивы валидации сохраняются как
сообщения/детали LayaAPIError. Структурированные конверты ошибок от совместимых бэкендов также
принимаются. У запросов есть настраиваемые сроки и отмена со стороны вызывающего кода, и они никогда
не повторяются автоматически.
Проверка и выпуск
Юнит-тесты охватывают построение запросов, все формы ответов, расширения Laya, ошибки FastAPI,
валидацию JSON, сроки и отмену, и привязывают таблицу управляющих элементов этой страницы к полям, которые клиент действительно кладёт в провод. Проверки типов охватывают необязательные метаданные, выведенные типы ответов и потребителей ESM/CommonJS. Интеграционный тест
на живом сервере запускает неизменённое приложение laya.serve с крошечным офлайн-чекпойнтом,
сравнивает предсказания SDK с прямым инференсом Python и проверяет маршрутизацию, пресеты,
аутентификацию и лимиты запросов. CI запускает проверки SDK на Node.js 22 и 24.
Крошечные случайные веса проверяют передачу и числовую согласованность, а не качество или производительность предобученной модели.
См. руководство по SDK
по настройке, примерам и публикации в npm. Пакет будет опубликован под именем
laya-client. Рабочие процессы выпуска Python не изменились.