multi-format document ingestion and chunking with semantic preservation
Accepts heterogeneous document types (PDF, Word, images, structured data) and processes them through a document upload pipeline that extracts content, applies intelligent chunking strategies, and preserves semantic boundaries. Uses event-driven architecture with async task processing via Asynq to handle large-scale document ingestion without blocking the main service, storing chunks in a vector-indexed database with metadata tags for retrieval.
Unique: Combines event-driven async task processing (Asynq) with semantic-aware chunking and multi-tenant isolation, allowing organizations to ingest heterogeneous documents at scale without blocking chat interactions. The architecture separates document processing from retrieval, enabling independent scaling of ingestion pipelines.
vs alternatives: Outperforms single-threaded document processors by using async task queues and event-driven architecture, enabling concurrent ingestion of multiple documents while maintaining semantic chunk boundaries across diverse formats.
hybrid retrieval with semantic and keyword search fusion
Implements a hybrid retrieval strategy combining vector similarity search (semantic) with keyword-based matching, using a configurable reranking engine to fuse results from both approaches. The retrieval pipeline queries the vector database for semantic matches and applies optional reranking (e.g., BM25, cross-encoder models) to surface the most relevant chunks before passing them to the LLM context window.
Unique: Decouples semantic and keyword retrieval into independent pipelines with pluggable reranking, allowing fine-grained control over fusion strategy per knowledge base. Supports multiple reranking backends (BM25, cross-encoder models) without requiring model retraining.
vs alternatives: More flexible than pure semantic search (handles domain jargon better) and more intelligent than keyword-only search (understands intent), with configurable reranking that adapts to domain-specific precision/recall tradeoffs.
async task processing with asynq for background document and embedding operations
Uses Asynq (Redis-backed task queue) to handle long-running operations asynchronously, including document processing, embedding generation, and knowledge graph construction. Tasks are enqueued with configurable retry policies, priority levels, and deadlines. The system provides task status tracking and allows users to monitor progress without blocking the API.
Unique: Decouples long-running operations from API request/response cycles using Asynq, enabling responsive user experience during heavy processing. Tasks support priority levels and configurable retry policies.
vs alternatives: More reliable than naive async (Asynq provides persistence and retry), more scalable than synchronous processing (operations don't block API), and more observable than fire-and-forget (task status is trackable).
event-driven chat pipeline with streaming response support
Implements an event-driven architecture for chat interactions where user messages trigger events that flow through handlers (retrieval, reasoning, response generation). The pipeline supports streaming responses, allowing partial results to be sent to the client as they become available. Events are processed sequentially within a session to maintain conversation order.
Unique: Decouples chat processing into event-driven stages with streaming support, allowing partial results to be sent to clients immediately. Events flow through handlers sequentially per session, maintaining conversation order.
vs alternatives: More responsive than batch processing (streaming provides real-time feedback), more reliable than naive event handling (sequential processing per session), and more flexible than monolithic chat handlers (stages are composable).
configurable embedding model selection with multi-provider support
Allows organizations to select and configure embedding models from multiple providers (OpenAI, Ollama, local models) at the knowledge base level. Embeddings are generated during document indexing and stored in the vector database. The system supports model switching with re-embedding of existing documents, and provides fallback mechanisms if the primary provider is unavailable.
Unique: Decouples embedding model selection from core RAG logic, allowing per-knowledge-base model configuration. Supports model switching with re-embedding, enabling experimentation without data loss.
vs alternatives: More flexible than fixed embedding models (supports multiple providers), more cost-efficient than always using premium models (can use cheaper alternatives), and more privacy-preserving than cloud-only embeddings (supports local models).
tag-based document organization and hierarchical filtering
Allows documents and chunks to be tagged with custom labels, enabling hierarchical organization and filtering during retrieval. Tags are stored in the database and indexed for fast filtering. Queries can be scoped to specific tags, and retrieval results can be filtered by tag combinations. Tags support hierarchical relationships (parent-child).
Unique: Integrates tagging as a first-class feature in the indexing and retrieval pipeline, supporting both flat and hierarchical tag structures. Tags enable content organization without requiring separate document collections.
vs alternatives: More flexible than fixed document categories (tags are user-defined), more efficient than separate knowledge bases (single index with filtering), and more maintainable than prompt-based filtering (tags are explicit metadata).
evaluation framework for rag quality assessment and benchmarking
Provides tools to evaluate RAG pipeline quality by measuring retrieval precision/recall, answer relevance, and end-to-end QA accuracy. Supports benchmark datasets and allows comparing performance across different retrieval strategies, embedding models, and LLM configurations. Evaluation results are stored and can be tracked over time.
Unique: Integrates evaluation as a built-in capability, allowing RAG quality to be measured and tracked over time. Supports comparing multiple configurations and storing historical results.
vs alternatives: More systematic than manual testing (automated metrics), more comprehensive than single-metric evaluation (multiple metrics), and more actionable than offline metrics (enables configuration comparison).
react agent-driven reasoning with tool orchestration
Implements a ReAct (Reasoning + Acting) agent engine that decomposes user queries into reasoning steps, selects appropriate tools (web search, knowledge base retrieval, MCP-integrated functions), executes them, and iterates until reaching a conclusion. The agent maintains conversation context across multiple turns, uses dependency injection to wire tools dynamically, and supports both synchronous and streaming responses.
Unique: Combines ReAct reasoning with dependency-injected tool orchestration and multi-turn session management, allowing agents to reason across heterogeneous data sources (KB, web, MCP tools) while maintaining conversation context. Supports both streaming and batch reasoning modes.
vs alternatives: More transparent and debuggable than black-box agent frameworks (reasoning steps are visible), more flexible than fixed RAG pipelines (can adapt strategy per query), and more cost-efficient than multi-turn LLM calls by batching reasoning and retrieval.
+7 more capabilities