Архитектура и точки расширения¶
English · Русский
Как проходит запрос¶
flowchart TD
CLI[CLI] --> APP[Application services]
MCP[MCP transport] --> APP
PY[Python API] --> CORE[Типизированные модели и детерминированное ядро]
APP --> IO[Ограниченное чтение и запись]
APP --> PROFILE[Профилирование]
APP --> CORE
PROFILE --> CORE
CORE --> GEN[Генератор и constraint solver]
GEN --> VAL[Валидация]
VAL --> IO
APP --> ADVISOR[Необязательный advisor]
ADVISOR --> REVIEW[Предложение и review]
REVIEW --> CORE
| Зона | Реальные модули | Ответственность |
|---|---|---|
| Контракты | core/dataset.py, entity.py, field.py, settings.py | Pydantic-модели DatasetProfile и DatasetSpec, ссылки и настройки |
| CSV-профиль | profiling/schema_profiler.py, relationship_profiler.py, constraint_miner.py, cache.py | Потоковый анализ, ограниченная выборка, гипотезы, кеш метаданных |
| Генерация | generation/planner.py, entity_generator.py, constraint_solver.py | Spec из профиля, новые значения, согласование ограничений |
| Проверка | validation/schema_validator.py, relationship_validator.py, constraint_validator.py, reconciliation.py | Секции отчёта и обязательные post-solve guards |
| CLI | cli.py, cli_parser.py, cli_presenter.py, cli_contract.py | Разбор, dispatch, безопасное представление, коды завершения |
| Базы | postgres_config.py, postgres_client.py, postgres_profiler.py; trino_config.py, trino_client.py, trino_profiling.py | Scope, read-only доступ, агрегаты и бюджеты |
| Query source | sql_query_source.py, sql_query_profiling.py, sql_query_adapters.py | Локальный AST, allowlists, no-row/aggregate-only профиль |
| MCP | mcp_generator_transport.py, mcp_trino_transport.py и соответствующие server.py | Ограниченный транспорт и регистрация инструментов |
| Публикация | io/workflows.py, io/artifacts.py, workspace_store.py | Выходные артефакты, staging, workspace |
| Advisor | advisor.py и provider adapters | Ограниченные предложения по метаданным без auto-approval |
Все пути в таблице — внутри src/test_data_agent/. I/O и provider adapters не должны подменять детерминированное ядро. Семена, бюджеты и зависимости передаются явно.
Минимальный Python API¶
В активном окружении из корня checkout выполните этот локальный пример; он не читает источник и не печатает строки:
from test_data_agent import DatasetSpec, generate_dataset, validate_dataset
spec = DatasetSpec.model_validate({
"schema_version": "1.1",
"entities": [{
"name": "checks", "row_count": 3,
"primary_key": "check_id",
"fields": [{"name": "check_id", "data_type": "integer", "is_identifier": True}],
}],
})
rows = generate_dataset(spec, seed=12345)
assert len(rows["checks"]) == 3
assert validate_dataset(rows, spec).valid
print("python API: ok")
Предварительно нужен установленный базовый пакет. Ожидается python API: ok; при ошибке проверьте Python/package version и схему. Пример проверен в аудите; подробности окружения — отчёт. Эта операция возвращает строки вызывающему Python-коду, поэтому вывод в чат/лог по умолчанию недопустим. Безопасный признак завершения — сводка assert, а для сохранения файлов используйте документированный bundle workflow.
Подробные карты: Application boundaries, описание проекта. Карта исходных модулей также хранится в docs/implementation_map.md (служебный файл исключён из сайта).
Дополнения 1.6.0¶
core/distribution.py и core/decimal_units.py задают exact DECIMAL; DatasetSpec 1.1 переносит embedded business_rules. io/transformation_batch_workflow.py, transformation_batch_profile.py, transformation_query_workflow.py координируют отдельную mixed-origin обработку, фиксированные snapshots и local receipt consumption. CLI registration находится в cli_parser.py и cli_transformation_candidate.py; running generator MCP регистрирует соответствующие consumers. Внутреннее имя candidate не означает отсутствие публичной команды. Расширение публичного Python API из внутренних helpers не следует: проверяйте all и contract fixtures.