AAYMA
RU
Войти

Freedom Graph

Полноценная AML-платформа: пайплайн по графу транзакций с ролями, кластерами и приоритетами, React-дашборд с интерактивным графом, AI-помощник…

Доведённый продукт
Команда «ascend.» 23💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: ascend.
Кейс HackAlem.ai: Финансы — Freedom
Стадия: Доведённый продукт

Задача кейса: «Граф денег»: восстановить структуру организованной группы по сети транзакций (AML)

Суть

Полноценная AML-платформа: пайплайн по графу транзакций с ролями, кластерами и приоритетами, React-дашборд с интерактивным графом, AI-помощник, выгрузка PDF-досье, а также Telegram-бот и Mini App с уведомлениями о новых связях.

Как устроено

Три Parquet-файла валидируются, строится направленный граф. Считаются степени, betweenness, PageRank и достижимость от seed, кластеры выделяются Louvain на неориентированной проекции. Шесть ролей назначаются по правилам из methodology.yaml. Extras: временные паттерны, цепочки и циклы, признаки дробления, устойчивость сети, граница наблюдения. Backend на FastAPI публикует снимки с run_id; помощник на OpenAI Responses API имеет 16 read-only инструментов и локальный fallback. Telegram-бот сравнивает снимки и уведомляет о впервые появившихся направленных связях.

Ключевые решения

  • NetworkX
  • Louvain
  • PageRank
  • betweenness
  • кратчайший направленный путь
  • проверка хронологии
  • правила аномалий (дробление)
  • анализ устойчивости
  • function calling
  • сравнение снимков

Особенности

PDF-досье сервер собирает из фактов выбранного снимка, а не из текста клиента. Telegram-канал оповещает о новых связях между снимками. Эвалуация ассистента в репозитории (assistant_eval). В репо лежат презентация pptx и видео mp4.

Стек

Python · FastAPI · Uvicorn · Pydantic · ReportLab · pandas · NumPy · NetworkX · SciPy · PyArrow · React · TypeScript · Vite · Cytoscape.js · Telegram Bot API · SQLite · Docker

Модели

gpt-4.1-mini (OpenAI Responses API)


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-0b94fdb6-ascend.

README

README.md

Freedom Graph — Ascend

Объяснимая аналитика финансовых связей для AML-аналитика банка. Проект команды Ascend для HackAlem AI: от транзакционного графа к приоритетам проверки, наблюдаемым основаниям и досье аналитика.

Жюри: инструкция быстрого запуска и проверки. Весь комплект уже в репозитории: три Parquet, готовый расчёт и сборка сайта. После скачивания и распаковки репозитория выполните py -3.12 jury_start.py в Windows или python3 jury_start.py в Linux/macOS и откройте http://127.0.0.1:8000/. Ключи OpenAI и Telegram для этого не нужны. GitHub хранит код; постоянный публичный сайт пока не развёрнут.

Роли, уровни приоритета и найденные структуры — аналитические гипотезы. Они не устанавливают виновность, не заменяют проверку первичных документов и не являются вероятностью нарушения.

1. Какую проблему решает проект

В сети переводов аналитику нужно определить, какие узлы проверить первыми, кто собирает или распределяет средства и какие связи подтверждают рабочую гипотезу. Freedom Graph рассчитывает признаки графа, назначает объяснимые роли и приоритеты, показывает контекст клиента по GID и помогает сформировать проверяемый отчёт.

Основной пользователь — AML-аналитик банка. Интерфейс предназначен для ручного исследования наблюдаемой сети, а не для автоматического принятия санкционных решений.

2. Что реализовано

Основной сайт

  • React-dashboard с backend API: статистика и период снимка, список приоритетных узлов, точный поиск по GID, фильтры ролей и кластеров.
  • Интерактивный направленный граф: масштабирование, перемещение, выбор узлов и рёбер, просмотр соседей, раскраска по приоритету, роли или кластеру. Анимация потоков включается отдельно, по умолчанию выключена.
  • Карточка узла: роль, role_score, priority_score, кластер, входящие и исходящие связи, полученные и отправленные суммы, evidence и пояснение правила. Отдельно отмечаются seed, граница обхода и изоляты.
  • Выбор уровня приоритета показывает соответствующие узлы с непосредственными соседями и связями внутри окружения. Обычный список расширяется порциями по 100 узлов.
  • «Расследование»: агрегаты связей, один кратчайший направленный путь до шести рёбер, проверка совместимости диапазонов дат, досье до 30 фактов и выгрузка PDF- и Markdown-отчётов. PDF формируется сервером по фактам выбранного снимка, а не по тексту клиента.
  • Скачивание nodes_roles.csv, clusters.csv, top_nodes.csv из того же опубликованного снимка, который использует API.
  • Переключатель RU / KZ / EN для основной оболочки. Часть новых аналитических панелей, сообщений API и объяснений пока остаётся на русском.

Рабочая точка входа: Frontend/src/main.tsx → DesignDashboard.tsx. Старый App.tsx с mock-данными сохранён в исходниках, но не является текущим основным экраном.

Расчёт графа

  • Загрузка трёх Parquet-файлов; валидация GID, дат, сумм и связей; сверка агрегированных рёбер с транзакциями.
  • Направленный граф, степени узлов, наблюдаемые потоки, betweenness, PageRank, достижимость от seed; Louvain на неориентированной проекции для выделения кластеров.
  • Шесть ролей: consolidator, distributor, transit, terminal, coordinator, peripheral. Правила, пороги и веса — в methodology.yaml.
  • Детерминированные объяснения, рейтинг и гипотезы кластеров. role_score — эвристическое соответствие правилу; priority_score — относительная очерёдность проверки.
  • Дополнительные анализы: временные паттерны, цепочки и циклы, признаки дробления и другие правила аномалий, устойчивость сети при удалении узлов, граница наблюдения и рекомендации по недостающим данным.
  • Публикация каталога запуска с run_id, JSON-снимком, CSV, метаданными и отчётом качества.

Дополнительные анализы доступны через API и отдельный экран /analysis-extras при запуске через ai_agent; не все они встроены в основной React-dashboard.

AI-помощник

  • Чат в основном сайте: вопросы о приоритетах, узлах, соседях, путях и других доступных фактах снимка; переход из ответа к GID и просмотр вызванных инструментов.
  • OpenAI Responses API с 16 инструментами только для чтения. Модель не пересчитывает роли и не изменяет результаты анализа.
  • Без настроек OpenAI или при ошибке провайдера используется помеченный локальный режим fallback для поддерживаемых типов вопросов. Это разбор по правилам и фактам, не ответ LLM.
  • Ограничения времени и числа вызовов, проверки GID и числовых утверждений, предупреждения о неполных результатах. Эти проверки не гарантируют истинность каждого предложения.

Telegram-бот и Mini App

  • Отдельный Python-бот @FreedomGraphbot: личная активация кодом команды, автоматическая подписка, статус, пауза, возобновление и отключение.
  • Сравнение опубликованных backend-снимков и уведомления о впервые наблюдаемых направленных связях в сопоставимом срезе. Первый снимок создаёт базу без рассылки. Это не предсказание будущих связей и не поток банковских операций в реальном времени.
  • Подписки, очередь и история доставок — в локальной SQLite. По умолчанию разрешены только синтетические снимки, GID и суммы в сообщениях скрыты.
  • Mini App: мобильный интерфейс в тёмно-фиолетовой теме, RU / KZ / EN, сигналы, фильтры, граф и объяснения.
  • Mini App пока использует синтетические данные из data.mjs. Отметки проверки сохраняются только в браузерной сессии и не синхронизируются с ботом или backend. Серверная авторизация Mini App не реализована.

3. Основной пользовательский сценарий

  1. Команда помещает nodes.parquet, edges.parquet, transactions.parquet в backend/data/ и запускает pipeline.
  2. Graph Engine проверяет входы, рассчитывает роли, кластеры, приоритеты и объяснения. Backend публикует согласованный снимок.
  3. Аналитик открывает сайт, выбирает приоритетный узел или вводит полный GID. Интерфейс показывает окружение и карточку с основаниями.
  4. Аналитик изучает направление, суммы и даты связей, проверяет структурную цепочку и ограничения хронологии. При необходимости задаёт вопрос помощнику.
  5. Факты добавляются в досье. На выходе — PDF- или Markdown-отчёт с run_id, направлениями, суммами, датами и оговорками либо CSV результатов.

Цепочка показывает достижимость в графе. Суммы её рёбер нельзя автоматически складывать в «сумму прошедших по цепочке денег».

4. Технологии

КомпонентТехнологии
Основной frontendReact, TypeScript, Vite, Cytoscape.js, lucide-react, CSS; lockfile: Frontend/package-lock.json
API и публикация результатовPython, FastAPI, Uvicorn, Pydantic, python-dotenv, ReportLab для PDF, файловые снимки JSON/CSV
Графовая аналитикаpandas, NumPy, NetworkX, SciPy, PyArrow, PyYAML
AI-помощникPython SDK OpenAI, Responses API, function calling; модель задаётся OPENAI_MODEL
Telegram-ботPython standard library, Telegram Bot API, SQLite, long polling
Telegram Mini AppHTML, CSS, JavaScript ES-модули, SVG, Telegram WebApp SDK; без npm-сборки
Проверкиunittest, pytest, Node.js test runner, TypeScript

В репозитории есть отчёт проверки агента с моделью gpt-4.1-mini. Это модель указанного прогона, а не автоматически выбираемая модель всех установок. NVIDIA и другие LLM-провайдеры в текущей реализации не подключены.

5. Архитектура

Три Parquet-файла
        │
        ▼
backend.run_pipeline → graph.analyze → роли, признаки, кластеры, extras
        │
        ▼
backend/output/runs/<run_id>/ + LATEST
        │
        ▼
FastAPI /api/v1
        ├── React-dashboard → карточки, граф, досье, CSV
        ├── AI-помощник → инструменты снимка → OpenAI или локальный fallback
        └── Telegram-бот → сравнение снимков → личные уведомления

Telegram Mini App → свои синтетические данные (пока отдельно от API)
КаталогНазначение
Frontend/Основной сайт и готовая сборка dist/
backend/Pipeline, API, публикация снимков и экспорт
graph/Аналитика, методика, валидация и extras/
ai_agent/Агент, интеграция и отдельные экраны
TelegramBot/Бот, локальная конфигурация и состояние
TelegramBot/miniapp/Независимая frontend-демонстрация Mini App

graph.analyze() сам не записывает файлы и не обращается к сети. Публикацией занимается backend. API использует один загруженный снимок до явного перечитывания. GID в JSON — строки: преобразование в JavaScript Number может потерять точность.

6. Установка и запуск

Команды выполняются из корня репозитория, если не указано иначе. Нужны Git, доступ к репозиторию и Python 3.11+; проверенные окружения описаны в документации модулей. Для первого получения зависимостей нужен интернет.

6.1. Получить код и зависимости

git clone https://github.com/BAITC-Hacks/hack-0b94fdb6-ascend.git
cd hack-0b94fdb6-ascend

Если рабочая копия уже есть, обновите её, предварительно сохранив свои изменения; не клонируйте поверх существующей папки.

Windows / PowerShell:

py -m venv backend/.venv
.\backend\.venv\Scripts\python.exe -m pip install -r backend/requirements-assistant.txt

macOS / Linux:

python3 -m venv backend/.venv
backend/.venv/bin/python -m pip install -r backend/requirements-assistant.txt

Набор включает API, Graph Engine и SDK агента. Установка SDK сама по себе не включает платные обращения к OpenAI. Готовая сборка Frontend/dist/ включена в Git: для обычного запуска основного сайта Node.js не требуется.

6.2. Запуск на данных кейса

Выданные организаторами файлы включены в репозиторий в следующей структуре:

backend/data/nodes.parquet
backend/data/edges.parquet
backend/data/transactions.parquet

Windows:

.\backend\.venv\Scripts\python.exe -m backend.run_pipeline
.\backend\.venv\Scripts\python.exe -m backend.serve

macOS / Linux:

backend/.venv/bin/python -m backend.run_pipeline
backend/.venv/bin/python -m backend.serve

Откройте основной сайт или диагностику. Схема API — openapi.json; Swagger UI /docs в текущем backend отключён.

Терминал сервера должен оставаться открытым. Остановка — Ctrl+C. По умолчанию сервер доступен только с того же компьютера через 127.0.0.1.

Три исходных файла и готовый расчёт backend/jury_snapshot/ входят в Git. Чтобы открыть готовый расчёт без повторного pipeline, используйте jury_start.py по инструкции жюри. Локальные пересчёты в backend/output/ и секретные настройки остаются вне Git.

Если pipeline выполнен при уже работающем сервере, на /check нажмите «Перечитать результат» (POST /api/v1/reload), затем обновите данные сайта. Кнопка обновления сайта сама по себе не пересчитывает граф и не выполняет reload API.

6.3. Запуск без исходных данных

Windows:

.\backend\.venv\Scripts\python.exe -m backend.run_pipeline --demo
.\backend\.venv\Scripts\python.exe -m backend.serve --demo

macOS / Linux:

backend/.venv/bin/python -m backend.run_pipeline --demo
backend/.venv/bin/python -m backend.serve --demo

Демо содержит 24 синтетических изолированных узла и 0 связей. Оно проверяет запуск, карточки, поиск и CSV, но не демонстрирует транзакционные цепочки. Пустые связи здесь ожидаемы. Ошибка анализа настоящих данных не подменяется демо автоматически.

Перед сменой режима остановите предыдущий сервер. Результаты демо находятся отдельно в backend/output-demo/.

6.4. OpenAI — необязательно

Создайте локальный backend/.env по backend/.env.example, если его ещё нет. Для AI заполните:

ASSISTANT_ENABLED=1
OPENAI_API_KEY=<ваш_секретный_ключ>
OPENAI_MODEL=<доступная_вашему_проекту_модель>

Значения в угловых скобках — заглушки. Нужна модель с поддержкой используемого Responses API и вызовов инструментов. После изменения настроек перезапустите backend.serve. Ключ не вводится в frontend и не коммитится.

Вопрос, до шести предыдущих сообщений и выбранные результаты инструментов могут передаваться OpenAI; обращения могут тарифицироваться. Без настройки OpenAI основные расчёты и сайт работают локально, помощник использует fallback. Значение assistant_enabled в health характеризует настройку провайдера, но не проверяет баланс или доступность модели.

6.5. Дополнительные экраны аналитики

Чтобы открыть /assistant и /analysis-extras, после расчёта используйте альтернативную точку входа на порту 8001:

# Windows
.\backend\.venv\Scripts\python.exe -m ai_agent --output backend/output --port 8001
# macOS / Linux
backend/.venv/bin/python -m ai_agent --output backend/output --port 8001

Этот процесс также предоставляет backend и основной сайт. Для OpenAI здесь нужно явно передать --env-file ai_agent/.env с тремя AI-настройками из инструкции агента; backend/.env автоматически не загружается. В старом снимке без extras новые анализы отсутствуют — требуется пересчёт текущим Graph Engine.

6.6. Разработка frontend

Нужны Node.js и npm, совместимые с установленной версией Vite. Из корня:

cd Frontend
npm ci
npm run dev

Vite проксирует /api на 127.0.0.1:8000: backend запускается отдельно. Адрес frontend показывает терминал Vite. Для обновления поставляемой сборки выполните npm run build; результат записывается в Frontend/dist/.

При отдельном API-адресе перед сборкой задайте VITE_API_BASE_URL и согласуйте CORS. Любые VITE_* доступны браузеру и не подходят для секретов.

6.7. Telegram и Mini App

Это дополнительные компоненты; для основного сайта они не требуются.

  • Запуск бота на macOS/Linux из корня: python3 -m TelegramBot.launch. Первая настройка запросит токен скрытым вводом и создаст локальную конфигурацию. На Windows для текущего бота нужен WSL/Linux из-за fcntl.
  • В TelegramBot/.env задаются BACKEND_URL, MINIAPP_URL и параметры уведомлений. backend/.env не заменяет конфигурацию бота.
  • Не запускайте одновременно два процесса одного токена. При переносе отдельно передаются конфигурация и SQLite; они не входят в Git.
  • Локальный Mini App: python3 -m http.server 5175 --bind 127.0.0.1 --directory TelegramBot/miniapp (на Windows можно использовать py). Открыть http://127.0.0.1:5175/.
  • Внутри Telegram нужен публичный HTTPS-адрес. Публикация и перенос описаны в README Mini App.

Не публикуйте .env, токены, код активации команды и TelegramBot/state/. Опубликованный ранее код активации нельзя считать секретом: перед использованием с ограниченным доступом его нужно заменить. Разрешение настоящих снимков через ALLOW_REAL_DATA=1 допустимо только после согласования передачи данных; это не настройка по умолчанию.

7. Как жюри проверить решение

На данных кейса — основной сценарий

  1. Выполните быстрый запуск или раздел 6.2 для самостоятельного пересчёта. На /check проверьте успешный run_id, отсутствие синтетической пометки и доступность CSV.
  2. На сайте выберите первый приоритетный узел, скопируйте полный GID и найдите его через поиск. Проверьте роль, вход/выход, кластер и evidence.
  3. Откройте связь через граф или «Расследование» → «Связи». Проверьте источник, получателя, сумму, количество переводов и диапазон дат.
  4. В разделе «Цепочка» укажите два GID с направленным путём. Изучите результат и сообщение о хронологии; отсутствие противоречия не доказывает передачу одних и тех же денег.
  5. Добавьте узел, связь и путь в досье, нажмите «Скачать PDF» или сохраните .md. Проверьте факты, run_id и ограничения. Сопоставьте выбранный узел с CSV.
  6. В «Спросить AI» отправьте «Выбери 10 приоритетных узлов» или «Объясни роль узла #<GID>». Проверьте режим ai / fallback, ссылки на узлы и перечень инструментов.

В репозитории есть сценарий на 3–4 минуты с конкретными GID, привязанный к снимку 20260923T093020Z-77346e52. Он подходит для соответствующих исходных данных; на другом наборе ожидания могут отличаться.

По зафиксированной проверке Graph Engine исходный набор содержит 2 248 узлов, 3 119 рёбер, 4 840 транзакций; получен 91 кластер. Это показатели конкретного набора, а не фиксированные значения интерфейса и не гарантия для произвольных входов.

Без данных кейса

Выполните раздел 6.3, найдите GID 900000000000000000, откройте карточку и CSV. Ожидаются синтетическая пометка, роль peripheral и отсутствие рёбер. Для проверки цепочек нужны данные кейса или автоматические тесты, а не этот smoke-test.

Автоматические проверки

Следующие Python-команды выполняются Python из созданного окружения: backend/.venv/bin/python на macOS/Linux или .\backend\.venv\Scripts\python.exe на Windows. Ниже он обозначен как python.

python -m pip install -r graph/requirements-dev.txt
python -m pytest graph/tests ai_agent/tests backend/tests -q
python -m unittest TelegramBot.test_bot -v

Приёмочные тесты настоящих данных требуют локальных Parquet и могут пропускаться без них. Пропуск — не успешный анализ. Тесты с подставным провайдером не подтверждают работу живой модели. Живая оценка вынесена в инструкцию AI и может расходовать API-кредиты.

Для следующих тестов .ts нужен Node.js с поддержкой прямого выполнения TypeScript (например, использованный при локальной проверке Node.js 26):

node --test Frontend/tests/graphView.test.mjs Frontend/tests/flowAnimation.test.mjs Frontend/tests/investigation.test.mjs TelegramBot/miniapp/test.mjs

При подготовке комплекта 23.09.2026 прошли 17 Node.js-тестов интерфейса/Mini App и 80 тестов Graph/AI; TypeScript и сборка frontend — без ошибок. Приёмка комплекта на данных организаторов находится в backend/tests/test_jury_bundle.py: проверяет файлы, API, CSV, PDF, локальный помощник и Mini App. Для неё не нужны личные ключи.

Отдельные отчёты команды: Graph Engine, дополнительные анализы, агент. Это не заявление о завершённой сквозной приёмке всех компонентов.

8. Данные и интеграции

ВходОбязательные поля
nodes.parquetgid, depth, is_seed
edges.parquetsrc, dst, sum_kzt, n_tx, depth
transactions.parquetsrc, dst, date, sum_kzt

Источник — файлы кейса организаторов, включённые в backend/data/ для проверки жюри. Прямой коннектор к банковской системе, потоковому источнику или внешним реестрам не реализован. Проверяются точность идентификаторов, уникальность пар рёбер, допустимость дат и положительных сумм, согласованность рёбер с числом и суммами транзакций.

Основные запросы: /api/v1/health, /overview, /graph, /nodes, /nodes/{gid}, /nodes/{gid}/neighbors, /subgraph, /top, /clusters, /clusters/{id}, /export/{name}, /assistant. Все сокращённые пути в этом перечне начинаются с /api/v1. Дополнительные маршруты описаны в документации extras.

Внешние сервисы — OpenAI для необязательных AI-ответов и Telegram для бота/Mini App. Локальная графовая аналитика не требует внешней LLM или GPU. GitHub передаёт исходники, но не выполняет Python-приложение.

9. Ограничения и безопасность

  • Неполный срез. По методике кейса не видны межбанковские переводы, остатки, атрибуты клиентов и операции ниже порога наблюдения 5 000 KZT. У seed неполные входящие; на глубине 4 исходящие не прослежены. Отсутствие наблюдений не равно отсутствию активности.
  • Гипотезы, не диагноз. Роли, аномалии, кластеры и приоритеты рассчитаны правилами. Размеченной выборки для заявления accuracy нет. Название уровня приоритета в UI не является вероятностью нарушения.
  • Временная точность. Вход содержит календарную дату без времени суток. Связи главного графа агрегированы; хронология пути и FIFO-анализ не доказывают принадлежность денег конкретному маршруту.
  • Масштаб. Используются NetworkX и снимки в памяти; работа на миллионе узлов не реализована и не подтверждена. Браузер ограничивает отображение и анимацию, но всё равно загружает полный снимок графа.
  • Сохранение работы. Досье основного сайта сбрасывается при перезагрузке/смене снимка и требует выгрузки для сохранения. Нет общего хранилища расследований и совместного редактирования.
  • AI. Локальный fallback понимает ограниченные типы вопросов. Проверки ответа модели не доказывают корректность всей интерпретации. Перед внешним вызовом требуется разрешение на передачу выбранных фактов провайдеру.
  • Telegram. Нужны работающий бот и доступные согласованные снимки. Первый снимок и новый несопоставимый срез не запускают массовую рассылку старых связей. Доставка не обещает exactly-once: при потере сетевого подтверждения возможен повтор.
  • Mini App. Нет реальных сигналов, синхронизации с ботом и серверной проверки Telegram initData. Публичная кнопка Mini App сама по себе не подтверждает полномочия аналитика.
  • Не банковский production. В основном API нет полноценной аутентификации, разграничения доступа, SSO, защищённого многопользовательского контура и полного аудита. Не выставляйте API и клиентские данные в открытый интернет без отдельной защиты. Секреты и закрытые данные не должны попадать в Git.
  • Общая приёмка. Модульные тесты не подтверждают цепочку «новый backend-снимок → уведомление → реальные данные Mini App». Последний этап Mini App ещё не реализован.

10. Развёрнутая версия

Постоянный публичный адрес общей версии пока не настроен. Для воспроизводимой проверки используйте JURY.md. Для размещения подготовлены Dockerfile, compose.yaml и render.yaml. Адрес 127.0.0.1 доступен только на машине сервера и не является ссылкой для удалённого жюри.

Ранее настроенный временный HTTPS-туннель относится только к демонстрационному Mini App, зависит от работающего ноутбука и не заменяет размещение всего проекта. Его адрес не указан здесь как стабильная ссылка решения. Инструкция для публикации Mini App — в его README.

11. Документация по компонентам

Некоторые ранние инструкции модулей описывают предыдущие этапы разработки. Этот README отражает текущие точки входа и разделяет основной сайт с API, необязательный AI и независимую демонстрацию Mini App.

Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
46
Авторы
6
Файлы
241
Ветки
3

Авторы коммитов

z1p1xxx 21Kinad-IT 11asevelev564-rgb 8Temochkaa 4helmut 1Odysseus 1

История коммитов

  • 2026-09-23 17:51Package organizer data and reproducible jury launchz1p1xxx
  • 2026-09-23 17:40Add files via uploadhelmut
  • 2026-09-23 17:28Presentation of Freedom GraphTemochkaa
  • 2026-09-23 17:21fix: localize interface controls and restore Windows miniapp servingz1p1xxx
  • 2026-09-23 17:13docs: add comprehensive Russian hackathon jury READMEKinad-IT
  • 2026-09-23 17:11docs(ai-agent): clarify manual answer verificationasevelev564-rgb
  • 2026-09-23 17:05feat: connect Telegram navigation and export verified PDF dossiersz1p1xxx
  • 2026-09-23 16:48docs(telegram): add teammate setup and bot transfer instructionsKinad-IT
Все коммиты (46)
  • 2026-09-23 16:46fix(frontend): distinguish local fallback and match agent response deadlinez1p1xxx
  • 2026-09-23 16:44feat(frontend): add evidence workspace, directed traces and chronology checksz1p1xxx
  • 2026-09-23 16:44Merge remote-tracking branch 'origin/main'z1p1xxx
  • 2026-09-23 16:43docs(telegram): explain temporary mini app tunnel and final handoffKinad-IT
  • 2026-09-23 16:37feat(telegram): add purple mini app and team lead handoff guideKinad-IT
  • 2026-09-23 16:31feat(graph-ai): implement optional analyses and resilient OpenAI assistantasevelev564-rgb
  • 2026-09-23 16:26fix(frontend): retain complete neighborhoods for priority levelsz1p1xxx
  • 2026-09-23 16:26Merge remote-tracking branch 'origin/main'z1p1xxx
  • 2026-09-23 16:22README.mdTemochkaa
  • 2026-09-23 16:19feat(frontend): refine midnight theme and focused graph workflowz1p1xxx
  • 2026-09-23 16:19Merge remote-tracking branch 'origin/main'z1p1xxx
  • 2026-09-23 16:14Update README.mdOdysseus
  • 2026-09-23 16:08fix(telegram): use verified macOS system CA bundleKinad-IT
  • 2026-09-23 16:06fix(frontend): load next hundred nodes and their graph edgesz1p1xxx
  • 2026-09-23 16:06Merge remote-tracking branch 'origin/main'z1p1xxx
  • 2026-09-23 16:04feat(telegram): add private activated alerts and local launcherKinad-IT
  • 2026-09-23 16:01perf(frontend): remove map and bound default graph renderingz1p1xxx
  • 2026-09-23 15:47feat: connect dashboard to graph API and integrated AI assistantz1p1xxx
  • 2026-09-23 15:33Merge remote-tracking branch 'origin/main'z1p1xxx
  • 2026-09-23 15:33fix(backend): return complete grounded top selections from AI toolsz1p1xxx
  • 2026-09-23 15:32feat(frontend): integrate role and cluster PNG artwork across dashboardKinad-IT
  • 2026-09-23 15:30fix(ai-agent): render exact financial facts and partial source coverageasevelev564-rgb
  • 2026-09-23 15:23fix(ai-agent): repair ungrounded drafts before returning answersasevelev564-rgb
  • 2026-09-23 15:22feat(frontend): add supplied artwork and unify role and cluster colorsKinad-IT
  • 2026-09-23 15:07feat(ai-agent): add website assistant and graph owner handoffasevelev564-rgb
  • 2026-09-23 15:04feat(frontend): animate Kazakhstan map and unify priority icon systemKinad-IT
  • 2026-09-23 14:56feat(frontend): checkpoint multilingual Freedom design and priority iconsKinad-IT
  • 2026-09-23 14:54feat(backend): connect graph AI agent and add question interfacez1p1xxx
  • 2026-09-23 14:35feat(graph): add offline graph snapshot viewerasevelev564-rgb
  • 2026-09-23 14:32test(backend): verify pipeline and API against local parquet dataz1p1xxx
  • 2026-09-23 14:22feat(backend): add snapshot API and offline check pagez1p1xxx
  • 2026-09-23 14:18feat(graph): copy tested graph package from feature to mainasevelev564-rgb
  • 2026-09-23 14:14feat(graph): implement contract analytics and optional OpenAI agentasevelev564-rgb
  • 2026-09-23 14:07Merge branch 'backend-pipeline'z1p1xxx
  • 2026-09-23 14:04feat(backend): add validated CSV pipeline and synthetic demoz1p1xxx
  • 2026-09-23 14:01Create CONTRACT_AITemochkaa
  • 2026-09-23 14:00Create PROJECTTemochkaa
  • 2026-09-23 13:41feat(frontend): build MoneyGraph AML dashboard MVPKinad-IT
Структура репозитория (241 файлов)
.dockerignore
.gitignore
CONTRACT_AI
Dockerfile
Freedom Graph — Граф денег.pptx
Freedom Graph.mp4
Frontend/.gitattributes
Frontend/.gitignore
Frontend/README.md
Frontend/design-assets/role-cluster-icons.zip
Frontend/docs/DEMO.md
Frontend/docs/DESIGN.md
Frontend/docs/PROGRESS_LOG.md
Frontend/index.html
Frontend/package-lock.json
Frontend/package.json
Frontend/scripts/extract-role-cluster-icons.mjs
Frontend/src/App.tsx
Frontend/src/DesignDashboard.tsx
Frontend/src/api.ts
Frontend/src/assets/brand/freedom-graph.png
Frontend/src/assets/priority/critical.jpeg
Frontend/src/assets/priority/high.jpeg
Frontend/src/assets/priority/low.jpeg
Frontend/src/assets/priority/medium.jpeg
Frontend/src/assets/priority/minimal.jpeg
Frontend/src/assets/role-cluster/README.md
Frontend/src/assets/role-cluster/clusters/cyan.png
Frontend/src/assets/role-cluster/clusters/green.png
Frontend/src/assets/role-cluster/clusters/neutral.png
Frontend/src/assets/role-cluster/clusters/orange.png
Frontend/src/assets/role-cluster/clusters/red.png
Frontend/src/assets/role-cluster/clusters/yellow.png
Frontend/src/assets/role-cluster/preview.png
Frontend/src/assets/role-cluster/roles/company.png
Frontend/src/assets/role-cluster/roles/risk.png
Frontend/src/assets/role-cluster/roles/sanction.png
Frontend/src/assets/role-cluster/roles/transaction.png
Frontend/src/assets/role-cluster/roles/verification.png
Frontend/src/components/AssistantChat.tsx
Frontend/src/components/DesignNetwork.tsx
Frontend/src/components/EntitySignalIcon.tsx
Frontend/src/components/Header.tsx
Frontend/src/components/InvestigationPanel.tsx
Frontend/src/components/KazakhstanMap.tsx
Frontend/src/components/NetworkGraph.tsx
Frontend/src/components/NodeDetails.tsx
Frontend/src/components/RiskAvatar.tsx
Frontend/src/components/Sidebar.tsx
Frontend/src/components/flowAnimation.ts
Frontend/src/data/mockData.ts
Frontend/src/data/networkArtwork.ts
Frontend/src/data/palette.ts
Frontend/src/data/visualAssets.ts
Frontend/src/design.css
Frontend/src/graphView.ts
Frontend/src/i18n.ts
Frontend/src/integration.css
Frontend/src/interfaceCopy.ts
Frontend/src/investigation.css
Frontend/src/investigation.ts
Frontend/src/main.tsx
Frontend/src/midnight.css
Frontend/src/motion.css
Frontend/src/styles.css
Frontend/src/types/graph.ts
Frontend/src/types/react-cytoscapejs.d.ts
Frontend/src/useAnalysis.ts
Frontend/src/vite-env.d.ts
Frontend/tests/flowAnimation.test.mjs
Frontend/tests/graphView.test.mjs
Frontend/tests/investigation.test.mjs
Frontend/tsconfig.app.json
Frontend/tsconfig.json
Frontend/tsconfig.node.json
Frontend/vite.config.ts
JURY.md
PROJECT
README.md
TelegramBot/.env.example
TelegramBot/.gitignore
TelegramBot/README.md
TelegramBot/__init__.py
TelegramBot/__main__.py
TelegramBot/bot.py
TelegramBot/config.py
TelegramBot/demo.py
TelegramBot/design/assets/brand.png
TelegramBot/design/index.html
TelegramBot/engine.py
TelegramBot/launch.command
TelegramBot/launch.py
TelegramBot/messages.py
TelegramBot/miniapp/README.md
TelegramBot/miniapp/app.mjs
TelegramBot/miniapp/assets/mark.svg
TelegramBot/miniapp/data.mjs
TelegramBot/miniapp/i18n.mjs
TelegramBot/miniapp/icons.mjs
TelegramBot/miniapp/index.html
TelegramBot/miniapp/styles.css
TelegramBot/miniapp/test.mjs
TelegramBot/serve_miniapp.py
TelegramBot/setup.py
TelegramBot/test_bot.py
TelegramBot/transport.py
ai_agent/.env.example
ai_agent/.gitignore
ai_agent/README.md
ai_agent/VALIDATION.md
ai_agent/__init__.py
ai_agent/__main__.py
ai_agent/api.py
ai_agent/app.py
ai_agent/config.py
ai_agent/docs/assistant_eval.json
ai_agent/docs/assistant_eval.md
ai_agent/docs/assistant_eval_offline.json
ai_agent/docs/assistant_eval_offline.md
ai_agent/evaluate.py
ai_agent/fallback.py
ai_agent/guard.py
ai_agent/report.py
ai_agent/requirements.txt
ai_agent/service.py
ai_agent/tests/test_api.py
ai_agent/tests/test_grounding.py
ai_agent/tests/test_report.py
ai_agent/tests/test_spec.py
ai_agent/ui/AssistantPanel.tsx
ai_agent/ui/assistant.js
ai_agent/ui/extras.html
ai_agent/ui/index.html
backend/.env.example
backend/.gitignore
backend/README.md
backend/__init__.py
backend/api.py
backend/assets/fonts/DejaVuSans.ttf
backend/assets/fonts/LICENSE-DejaVu.txt
backend/assistant.py
backend/check.html
backend/data/README.md
backend/data/edges.parquet
backend/data/nodes.parquet
backend/data/transactions.parquet
backend/demo.py
backend/export.py
backend/jury.py
backend/jury_snapshot/LATEST
backend/jury_snapshot/clusters.csv
backend/jury_snapshot/last_attempt.json
backend/jury_snapshot/nodes_roles.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/clusters.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/anomalies.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/boundary.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/boundary_rates.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/cards_top.md
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/chains.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/coverage.json
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/cycles.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/daily_flow.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/gaps.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/resilience.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/resilience_removed.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/extras/temporal_events.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/nodes_roles.csv
backend/jury_snapshot/runs/20260923T123524Z-761e950f/quality_report.json
backend/jury_snapshot/runs/20260923T123524Z-761e950f/run.json
backend/jury_snapshot/runs/20260923T123524Z-761e950f/snapshot.json
backend/jury_snapshot/runs/20260923T123524Z-761e950f/top_nodes.csv
backend/jury_snapshot/top_nodes.csv
backend/pipeline.py
backend/report_pdf.py
backend/requirements-assistant.txt
backend/requirements-graph.txt
backend/requirements.txt
backend/run_pipeline.py
backend/serve.py
backend/snapshot.py
backend/tests/test_backend_api.py
backend/tests/test_backend_assistant.py
backend/tests/test_backend_graph.py
backend/tests/test_backend_pdf.py
backend/tests/test_backend_pipeline.py
backend/tests/test_backend_real_data.py
backend/tests/test_jury_bundle.py
compose.yaml
edges.parquet
graph/.env.example
graph/.gitignore
graph/INTEGRATION.md
graph/NEXT_STEPS.md
graph/README.md
graph/VALIDATION.md
graph/__init__.py
graph/__main__.py
graph/assistant/__init__.py
graph/assistant/service.py
graph/assistant/tools.py
graph/clusters.py
graph/config/methodology.yaml
graph/docs/SPEC_IMPLEMENTATION.md
graph/evidence.py
graph/extra_query.py
graph/extras/__init__.py
graph/extras/anomalies.py
graph/extras/base.py
graph/extras/boundary.py
graph/extras/cards.py
graph/extras/export.py
graph/extras/gaps.py
graph/extras/resilience.py
graph/extras/routes.py
graph/extras/temporal.py
graph/features.py
graph/gui.py
graph/integration/backend_assistant.py
graph/integration/extras_api.py
graph/integration/frontend-adapter.ts
graph/layout.py
graph/load.py
graph/models.py
graph/priority.py
graph/query.py
graph/requirements-dev.txt
graph/requirements-optional.txt
graph/requirements.txt
graph/roles.py
graph/serialization.py
graph/tests/test_assistant.py
graph/tests/test_engine.py
graph/tests/test_extras.py
graph/tests/test_integration.py
graph/tool_limits.py
graph/validate.py
graph/viewer.html
jury_start.py
nodes.parquet
render.yaml
transactions.parquet
Ветки (3)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.