Files
HadTavern/PROJECT_OVERVIEW.md
2025-09-07 22:33:51 +03:00

81 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) — сохранённый пайплайн по умолчанию.