FTS — исполняемые спецификации FTS из Python, Go, Java и других языков
0%

FTS из Python, Go, Java и других языков

FTS из Python, Go, Java и других языков

FTS не требует переписывать parser на каждом языке. Есть три границы.

1. JSON CLI

Самый быстрый путь для Python:

import json
import subprocess

result = subprocess.run(
    ["fts", "run", "discount.fts", "--utility", "Рассчитать скидку", "--input", "purchase.json"],
    check=True,
    capture_output=True,
    text=True,
)

payload = json.loads(result.stdout)
print(payload["result"])

Плюсы: одна reference implementation, простой rollout. Минусы: запуск процесса дороже library call; для высокой нагрузки нужен worker или service boundary.

2. Отдельный FTS service

Node.js загружает модели один раз и предоставляет внутренний API. Go/Java-сервис отправляет только типизированный snapshot. Плюсы: контролируемая версия runtime, метрики и кэш. Минусы: сеть, отказоустойчивость и contract versioning.

3. Канонический JSON

Можно скомпилировать .fts в build pipeline и поставлять FtsDocument как data artifact. Хост пишет маленький adapter для структур, форм или собственной исполняющей среды. В этом случае semantic parity нужно подтверждать общим набором fixtures: два runtime обязаны давать одинаковые результаты и diagnostics.

Когда выбрать что

Сценарий Граница
Локальная утилита или CI CLI
Node.js backend Library API
Browser UI @digitable/fts/browser
Несколько сервисов с большой нагрузкой Internal FTS service
Собственный runtime в Rust/Go Canonical JSON + conformance suite
AI agent MCP

Версионирование

Версионируйте отдельно:

  • surface syntax;
  • canonical schema (fts/1, будущие версии);
  • runtime package;
  • конкретную бизнес-модель.

Не меняйте canonical field молча. Старые functors и apply во внутреннем wire format существуют ради совместимости, хотя публичная терминология использует морфизмы.

Упражнение

Вызовите одну модель из Python или shell. Проверьте успешный JSON и ошибочный stderr. Затем измерьте накладные расходы запуска процесса, чтобы осознанно решить: оставить CLI или поднять долгоживущий host.

Дальше: generation и CI

Нашли неточность? Выделите фрагмент текста — рядом появится жучок.

Нужен разбор именно вашей ситуации?

Статья описывает общий случай. Если у вас частный — можно разобрать его отдельно, платно. А если не хватает целого материала, предложите тему: её оплачивают вскладчину, и она выходит открытой для всех.

Доска запросов