# AgentUI Project Overview ## Цель проекта AgentUI — это прокси‑сервер с визуальным редактором пайплайнов (на базе Drawflow), который нормализует запросы от различных клиентов в единый формат и выполняет их через цепочку узлов (nodes). Это позволяет гибко собирать пайплайны обработки текстовых/LLM‑запросов без необходимости вручную интегрировать каждый провайдер. --- ## Основные компоненты ### Фронтенд: Визуальный редактор - Построен на **Drawflow**. - Поддерживает узлы, входы/выходы и соединения. - Реализована надёжная сериализация/десериализация: - `toPipelineJSON()` сохраняет структуру + все соединения. - `fromPipelineJSON()` восстанавливает узлы и соединения с учётом времени рендера DOM (retry‑логика). - Исправлены баги исчезающих соединений. - В инспекторе узлов отображается оригинальный ID узла, а не runtime ID от Drawflow. - UI подсказки: макрохинты в синтаксисе `[[...]]` (например `[[VAR:system.prompt]]`, `[[OUT:node1.text]]`). ### Бэкенд: Исполнение пайплайна - Основной код: [`agentui/pipeline/executor.py`](agentui/pipeline/executor.py). - Выполняется **топологическая сортировка** графа для правильного порядка исполнения и предотвращения циклов. - Узлы: - **RawForwardNode**: - Прямой HTTP‑форвардинг с макросами в `base_url`, `override_path`, `headers`. - Автоопределение провайдера. - **ProviderCallNode**: - Унифицированный вызов LLM‑провайдеров. - Преобразует внутренний формат сообщений в специфический формат для OpenAI, Gemini, Anthropic. - Поддерживает параметры `temperature`, `max_tokens`, `top_p`, `stop` (или аналоги). - Поддержка **макросов**: - `{{ path }}` — Jinja‑подобный. - `[[VAR:...]]` — доступ к данным контекста (system, chat, params). - `[[OUT:nodeId(.attr)]]` — ссылки на вывод других узлов. - `{{ OUT.node.* }}` — альтернативная форма. ### API сервер (`agentui/api/server.py`) - Нормализует запросы под форматы `/v1/chat/completions`, Gemini, Anthropic. - Формирует контекст макросов (vendor, model, params, incoming). --- ## Текущий прогресс - Исправлены баги сериализации соединений во фронтенде. - Добавлены подсказки по макросам. - Реализована топологическая сортировка исполнения. - Создан универсальный рендер макросов `render_template_simple`. - Интегрирован RawForward с макроподстановкой. - ProviderCall теперь преобразует сообщения под формат конкретного провайдера. --- ## Текущая задача (для нового разработчика) В проекте мы начинаем реализацию **Prompt Manager**, который станет частью узла `ProviderCall`. **Что уже решено:** - Архитектура пайплайна, сериализация/десериализация, макросная система, базовые конвертеры форматов. **Что нужно сделать:** - [ ] Спроектировать структуру prompt‑менеджера: массив блоков `{ name, role, prompt, enabled, order }`. - [ ] Добавить универсальный рендер макросов, который применяется ко всем блокам перед конвертацией. - [ ] Доработать конвертеры форматов под OpenAI, Gemini, Anthropic, чтобы они учитывали эти блоки. - [ ] Интегрировать prompt‑менеджер в `ProviderCallNode`: - Сборка последовательности сообщений. - Подстановка макросов. - Конвертация в провайдерский формат. - [ ] Реализовать UI prompt‑менеджера во фронтенде: - CRUD операций над блоками. - Drag&Drop сортировку. - Возможность включать/выключать блок. - Выбор роли (`user`, `system`, `assistant`, `tool`). --- ## Важные файлы - [`static/editor.html`](static/editor.html) — визуальный редактор пайплайнов. - [`agentui/pipeline/executor.py`](agentui/pipeline/executor.py) — логика исполнения пайплайнов, макросов и узлов. - [`agentui/api/server.py`](agentui/api/server.py) — REST API для внешних клиентов. - [`pipeline.json`](pipeline.json) — сохранённый пайплайн по умолчанию.