{"id":49685755,"url":"https://github.com/redhat-community-ai-tools/UnifAI","last_synced_at":"2026-05-23T23:01:11.836Z","repository":{"id":326226846,"uuid":"1100626333","full_name":"redhat-community-ai-tools/UnifAI","owner":"redhat-community-ai-tools","description":"Production-grade multi-agent orchestration engine. Compose agentic workflows from a pluggable catalog of Agents, LLMs, tools, and retrievers. Execute locally with LangGraph or distributed with Temporal. Built-in RAG pipeline for enterprise knowledge retrieval. A2A and MCP protocol support. Visual drag-and-drop blueprint builder.","archived":false,"fork":false,"pushed_at":"2026-05-18T14:23:36.000Z","size":113797,"stargazers_count":35,"open_issues_count":22,"forks_count":15,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-18T14:33:24.010Z","etag":null,"topics":["a2a-protocol","agent-orchestration","ai-agents","flask","kubernetes","langgraph","llm","mcp","multi-agent-systems","qdrant","rag","react","temporal","vector-search"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/redhat-community-ai-tools.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-20T14:34:50.000Z","updated_at":"2026-05-14T12:28:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/redhat-community-ai-tools/UnifAI","commit_stats":null,"previous_names":["redhat-community-ai-tools/unifai"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/redhat-community-ai-tools/UnifAI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-community-ai-tools%2FUnifAI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-community-ai-tools%2FUnifAI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-community-ai-tools%2FUnifAI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-community-ai-tools%2FUnifAI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/redhat-community-ai-tools","download_url":"https://codeload.github.com/redhat-community-ai-tools/UnifAI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/redhat-community-ai-tools%2FUnifAI/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33415020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["a2a-protocol","agent-orchestration","ai-agents","flask","kubernetes","langgraph","llm","mcp","multi-agent-systems","qdrant","rag","react","temporal","vector-search"],"created_at":"2026-05-07T10:00:25.114Z","updated_at":"2026-05-23T23:01:11.830Z","avatar_url":"https://github.com/redhat-community-ai-tools.png","language":"Python","funding_links":[],"categories":["⚙️ Implementations \u0026 Libraries"],"sub_categories":[],"readme":"# UnifAI\n\n**A platform for building and running multi-agent AI workflows over your enterprise knowledge.**\n\nUnifAI lets you connect internal data sources — Slack, Jira, documents — into a unified vector store, then query them through composable, visual multi-agent pipelines. Define agent graphs as YAML blueprints or build them with a drag-and-drop UI, execute locally or at scale, and stream results in real time.\n\n---\n\n## What It Does\n\nMost teams have knowledge scattered across Slack threads, Jira tickets, PDFs, and internal wikis. Finding answers means manually digging through multiple systems. UnifAI fixes this:\n\n1. **Compose** — Build multi-agent workflows that reason across sources, route conditionally, and combine results\n2. **Execute** — Run workflows locally or distributed, with real-time streaming\n3. **Interact** — Use the web UI to build blueprints visually, trigger executions, and inspect every node's input/output\n4. **Ingest** — Pull content from Slack, documents (PDF, Markdown), and more into a vector database for agents to search\n\n---\n\n## Architecture\n\n```\n┌───────────────────────────────────────────────────────────────┐\n│                     React / Vite / Tailwind UI                │\n│                                                               │\n│   ┌─────────────────────┐    ┌──────────────────────────┐     │\n│   │   RAG Dashboard     │    │   Blueprint Builder \u0026    │     │\n│   │   Data source stats │    │   Agent Chat Interface   │     │\n│   └─────────────────────┘    └──────────────────────────┘     │\n└──────────┬───────────────────────────────┬────────────────────┘\n           │ /api1                         │ /api2\n           ▼                               ▼\n  ┌─────────────────┐          ┌──────────────────────────┐\n  │   RAG Backend   │◄────────►│  Multi-Agent Backend     │\n  │                 │  search  │                          │\n  │ • Ingestion     │          │ • Blueprint engine       │\n  │ • Chunking      │          │ • Agent orchestration    │\n  │ • Embedding     │          │ • LangGraph / Temporal   │\n  │ • Vector search │          │ • Real-time streaming    │\n  │ • Celery workers│          │ • A2A \u0026 MCP protocols    │\n  └────────┬────────┘          └─────────────┬────────────┘\n           │                                 │\n           ▼                                 ▼\n┌───────────────────────────────────────────────────────────────┐\n│                    Shared Infrastructure                       │\n│     MongoDB · Qdrant · RabbitMQ · Redis (opt) · Temporal      │\n└───────────────────────────────────────────────────────────────┘\n```\n\n---\n\n## Multi-Agent System — The Core\n\nThe heart of UnifAI is its **Multi-Agent System (MAS)**: a production-grade orchestration engine for defining, executing, and streaming multi-agent workflows.\n\n### Blueprint-Driven Workflows\n\nAgents are composed into directed graphs called **blueprints**. Each blueprint declares nodes, edges, conditions, and the tools/LLMs each agent can use — all in a single YAML file:\n\n```yaml\nname: \"Multi-Source Knowledge Search\"\n\nllms:\n  - rid: llm_rid\n    type: openai\n    config:\n      model_name: gpt-4o\n      base_url: https://api.openai.com/v1\n\nretrievers:\n  - rid: docs_retriever_rid\n    type: docs_rag\n    config: { top_k_results: 5 }\n  - rid: slack_retriever_rid\n    type: slack\n    config: { top_k_results: 5 }\n\nnodes:\n  - rid: input_rid\n    type: user_question_node\n  - rid: docs_agent_rid\n    type: custom_agent_node\n    config:\n      llm: llm_rid\n      retriever: docs_retriever_rid\n      system_message: \"Search internal documentation...\"\n  - rid: slack_agent_rid\n    type: custom_agent_node\n    config:\n      llm: llm_rid\n      retriever: slack_retriever_rid\n      system_message: \"Search Slack messages...\"\n  - rid: merger_rid\n    type: merger_node\n  - rid: answer_rid\n    type: final_answer_node\n\nplan:\n  - uid: input\n    node: input_rid\n  - uid: docs\n    after: input\n    node: docs_agent_rid\n  - uid: slack\n    after: input\n    node: slack_agent_rid\n  - uid: merge\n    after: [docs, slack]\n    node: merger_rid\n  - uid: answer\n    after: merge\n    node: answer_rid\n```\n\nBlueprints can be pre-defined in YAML or built visually through the UI's drag-and-drop editor.\n\n### Element Catalog\n\nBlueprints are composed from a rich catalog of pluggable elements:\n\n| Category | Available Types | Description |\n|----------|----------------|-------------|\n| **Nodes** | `custom_agent_node`, `orchestrator_node`, `merger_node`, `a2a_agent_node`, `branch_chooser_node`, `user_question_node`, `final_answer_node` | The building blocks of agent graphs |\n| **LLMs** | `openai`, `google_genai` | LLM providers (any OpenAI-compatible API) |\n| **Tools** | `ssh_exec`, `web_fetch`, `oc_exec`, `mcp_proxy` | Actions agents can perform |\n| **Providers** | `mcp_server`, `a2a_agent`, `rag_client` | External service integrations |\n| **Retrievers** | `docs_rag`, `slack` | RAG-powered context retrieval |\n| **Conditions** | `router_direct`, `router_boolean`, `threshold` | Conditional edge routing |\n\nThe catalog is extensible — new elements are auto-discovered at startup.\n\n### Execution Modes\n\n| Mode | Engine | Best For |\n|------|--------|----------|\n| **Local** | LangGraph | Development, single-process execution |\n| **Distributed** | Temporal | Production, horizontal scaling across workers |\n\nBoth modes use the same blueprint format. Switch between them with a single environment variable.\n\n### Real-Time Streaming\n\nExecutions stream node-by-node output as **NDJSON over HTTP**, so clients can render progress as it happens. Two patterns are supported:\n\n- **Synchronous streaming** — execute and stream results in a single request\n- **Fire-and-forget** — submit a workflow, then subscribe to its event stream from any client\n\n### Protocol Support\n\n- **A2A (Agent-to-Agent)** — Delegate tasks to remote agents over the A2A protocol. Any A2A-compatible agent can be added as a node in a blueprint.\n- **MCP (Model Context Protocol)** — Connect to MCP servers to give agents access to external tools (Jira, GitHub, databases, etc.). Configure once as a provider, then attach to any agent node.\n\n### Templates\n\nPre-built workflow templates with **placeholders** let users instantiate complex blueprints without writing YAML — browse templates in the UI, fill in the blanks, and start executing.\n\n---\n\n## Web UI\n\nA React-based interface with two primary views:\n\n**Blueprint Builder** — Visual drag-and-drop editor for composing agent graphs. Select nodes from the element catalog, wire them together, configure LLMs and tools, then execute — all without writing YAML. During execution, inspect each node's input/output in real time.\n\n**RAG Dashboard** — Monitor data source health: document counts, chunking/embedding status, last ingestion timestamps. Upload documents and register Slack channels.\n\n---\n\n## RAG Pipeline\n\nThe RAG module feeds the multi-agent system with indexed enterprise knowledge:\n\n- **Sources** — PDF, Markdown documents, Slack channels and threads\n- **Processing** — Intelligent chunking, metadata extraction, async background workers\n- **Storage** — Vector embeddings in Qdrant, metadata in MongoDB\n- **Search** — Semantic similarity search exposed to agents via retriever elements\n- **Flexibility** — Document conversion and embedding services can run locally or as remote microservices, toggled via feature flags\n\n---\n\n## Tech Stack\n\n| Layer | Technologies |\n|-------|-------------|\n| Multi-Agent Backend | Python 3.11+, Flask, LangGraph, Temporal, Redis |\n| RAG Backend | Python 3.11+, Flask, Celery, Qdrant, RabbitMQ |\n| Frontend | React 18, TypeScript, Vite, Tailwind CSS, Radix UI |\n| Auth | Keycloak (OAuth 2.0 / OIDC) |\n| Storage | MongoDB, Qdrant (vectors), Redis (streams) |\n| Deployment | Helm, Helmfile, OpenShift / Kubernetes, Docker |\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- Python 3.11+\n- Node.js 22+ and PNPM\n- MongoDB\n- Qdrant\n\nOptional: Redis (for distributed streaming), Temporal (for distributed execution), RabbitMQ (for async RAG pipelines), Keycloak (for auth).\n\n### Multi-Agent Backend\n\n```bash\ncd multi-agent\npip install -e \".[all]\"\n\n# Configure\nexport ENGINE_NAME=langgraph\nexport MONGODB_IP=localhost\n\n# Run\nmas api --dev\n```\n\n### RAG Backend\n\n```bash\ncd rag\npip install -r requirements.txt\n\n# Run Flask server\npython -m flask run --port 8001\n\n# Run Celery workers (separate terminal)\ncelery -A app.celery worker\n```\n\n### UI\n\n```bash\ncd ui\npnpm install --frozen-lockfile\npnpm dev\n```\n\nThe UI runs at `http://localhost:5173` and proxies API requests to the backends.\n\n### Deployment\n\nFor Kubernetes/OpenShift deployment, see the [Helm Deployment Guide](helm/README.md).\n\n---\n\n## Project Structure\n\n```\nunifai/\n├── multi-agent/          # Multi-Agent System — orchestration engine\n│   └── lib/mas/\n│       ├── elements/     # Nodes, tools, LLMs, providers, conditions\n│       ├── engine/       # LangGraph \u0026 Temporal execution engines\n│       ├── blueprints/   # Blueprint resolution \u0026 validation\n│       ├── sessions/     # Session lifecycle \u0026 streaming\n│       ├── templates/    # Template instantiation\n│       └── catalog/      # Element auto-discovery\n├── rag/                  # RAG pipeline — ingestion, chunking, search\n│   ├── core/             # Business logic \u0026 domain services\n│   ├── infrastructure/   # Adapters (MongoDB, Qdrant, Celery)\n│   └── bootstrap/        # Dependency injection \u0026 app setup\n├── ui/                   # React frontend\n├── shared-resources/     # Identity service (Keycloak integration)\n├── global_utils/         # Shared Python utilities\n├── helm/                 # Helm charts \u0026 Helmfile for deployment\n├── ci/                   # Jenkins CI/CD pipelines\n└── tests/                # Test infrastructure\n```\n\n---\n\n## Documentation\n\n| Module | README |\n|--------|--------|\n| Multi-Agent System | [multi-agent/README.md](multi-agent/README.md) |\n| RAG Pipeline | [rag/README.md](rag/README.md) |\n| Web UI | [ui/README.md](ui/README.md) |\n| Helm Deployment | [helm/README.md](helm/README.md) |\n| Identity / Auth | [shared-resources/identity/README.md](shared-resources/identity/README.md) |\n| CI/CD | [ci/README.md](ci/README.md) |\n\n---\n\n## Contributing\n\nContributions are welcome! The system is designed to be modular — new agent nodes, tools, LLM providers, retrievers, and data source adapters can be added without modifying the core engine.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-community-ai-tools%2FUnifAI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fredhat-community-ai-tools%2FUnifAI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fredhat-community-ai-tools%2FUnifAI/lists"}