VocaliZ is an intelligent document chat system that helps organizations make their knowledge accessible through conversational AI. Upload your documents, and let your team or customers ask questions in natural languageβgetting accurate, context-aware answers instantly.
- Upload Documents: Simply upload your text files (manuals, FAQs, policies, knowledge bases, etc.)
- Automatic Indexing: The system automatically processes and organizes your documents
- Instant Accessibility: Your knowledge becomes searchable and accessible through natural conversation
- Ask Questions: Type questions in plain English about your organization's documents
- Get Instant Answers: Receive accurate, contextual responses powered by AI
- Conversation History: Continue conversations across sessions with automatic memory
- Source References: Answers include references to source documents for verification
VocaliZ is perfect for:
- Customer Support: Let customers find answers from your documentation instantly
- Employee Onboarding: New employees can ask questions about company policies and procedures
- Knowledge Management: Make organizational knowledge accessible to everyone
- Technical Documentation: Help users navigate complex technical manuals
- FAQ Automation: Reduce support load by automating common questions
You'll need:
- A computer with Python 3.13 or later installed
- Internet connection
- API keys for required services (your IT team can help with this)
-
Download the project to your computer
-
Install dependencies:
pip install -r requirements.txt
-
Set up environment variables:
- Copy the
.env.examplefile and rename it to.env - Fill in your API keys and configuration (ask your IT administrator if you need help)
- Copy the
-
Start the system:
Option A: Using the simple interface (Streamlit)
make frontend
Then open your browser to
http://localhost:8501Option B: Using the full API
make api
The API will be available at
http://localhost:8000
- Open the VocaliZ interface in your browser
- Switch to "Org" mode in the sidebar
- Configure your settings:
- Bucket/Index Name: Choose a name for your document collection (e.g., "customer-support")
- Chunk Size: Leave default (1000) for best results
- Embeddings Model: Leave default unless advised otherwise
- Click "Choose a text file to upload" and select your document
- Click "π Process and Index Document"
- Wait for processing to completeβyou'll see a success message with details
- Switch to "Customer" mode in the sidebar
- Make sure the Bucket/Index Name matches the one you uploaded documents to
- Type your question in the chat box at the bottom
- Press Enter or click Send
- The AI will search your documents and provide an answer
- Be specific: Instead of "What is this about?", try "What are the warranty terms for laptops?"
- Use natural language: Ask questions like you would ask a person
- Follow up: You can ask follow-up questions in the same conversation
- Check sources: Review the source information to verify answers
VocaliZ uses a Retrieval-Augmented Generation (RAG) architecture:
User Question β Document Search β Context Retrieval β AI Answer Generation β Response
- Backend Framework: FastAPI (Python)
- Frontend: Streamlit (with additional frontend in development)
- System Orchestration: LangChain, LangGraph for orchestration
- Vector Database: Pinecone + Supabase
- Embeddings: HuggingFace Sentence Transformers
- LLM: Groq (configurable)
- Conversation Storage: PostgreSQL with persistent memory
CallGPT/
βββ app/
β βββ core/ # Core configuration and settings
β βββ modules/ # Main application modules
β β βββ conversation/ # Conversation management
β β βββ document/ # Document processing
β β βββ embedding/ # Text embeddings
β β βββ llm/ # Language model integration
β β βββ pipeline/ # RAG pipeline orchestration
β β βββ retrieval/ # Document retrieval
β β βββ vectorstore/ # Vector database operations
β βββ main.py # FastAPI application entry point
βββ tests/ # Test files
βββ streamlit_app.py # Streamlit UI
βββ .env.example # Environment variables template
βββ requirements.txt # Python dependencies
βββ Makefile # Convenient commands
βββ README.md # This file
The system is configured through environment variables in the .env file:
| Variable | Purpose | Required |
|---|---|---|
GROQ_API_KEY |
API key for Groq LLM | β Yes |
SUPABASE_URL |
Supabase project URL | β Yes |
SUPABASE_SERVICE_KEY |
Supabase service key | β Yes |
SUPABASE_BUCKET |
Default storage bucket name | β Yes |
PINECONE_API_KEY |
Pinecone vector database key | β Yes |
DATABASE_URL |
PostgreSQL connection string | β Yes |
LLM_MODEL |
Which AI model to use | Optional |
EMBEDDING_MODEL |
Which embedding model to use | Optional |
- β Multi-format document upload and processing
- β Intelligent text chunking and embedding
- β Vector similarity search
- β Conversational AI with context awareness
- β Persistent conversation history
- β Multi-tenant support (different buckets/indexes)
- β Configurable retrieval parameters
- β Two-stage retrieval with reranking option
- β Streaming responses for better UX
- β REST API for integration
Note: A new, enhanced frontend is currently being developed by another team member. The current Streamlit interface is fully functional and will be replaced once the new frontend is merged.
The FastAPI backend provides RESTful endpoints:
GET /health
POST /api/v1/pipeline/organisations/upload-file
POST /api/v1/pipeline/organisations/upload
POST /api/v1/pipeline/customer/query
/api/v1/embeddings/*- Embedding operations/api/v1/retrieval/*- Document retrieval/api/v1/llm/*- Language model operations/api/v1/conversations/*- Conversation management/api/v1/documents/*- Document operations/api/v1/vectorstore/*- Vector storage operations
Full API documentation is available at http://localhost:8000/docs when running the API server.
Individual module tests:
pytest tests/test_document_node.py
pytest tests/test_embedding_node.py
pytest tests/test_vectorstore_node.py
pytest tests/test_answer_node.pyFor convenience, common tasks are available through the Makefile:
make install # Install all dependencies
make api # Start the FastAPI backend server
make frontend # Start the Streamlit frontend
make format # Format code with Ruff
make lint # Lint code with Flake8- API Keys: Never commit your
.envfile to version control - Service Keys: Use Supabase service keys only on the backend, never expose them to clients
- Access Control: Implement proper authentication and authorization for production use
- Data Privacy: Be mindful of what documents you upload and who has access
- Check the documentation in each module's README
- Review the architecture documentation in
app/modules/pipeline/ARCHITECTURE.md - Contact your system administrator or IT team
See the Developer Guide section below for detailed technical information.
This project is licensed under the MIT License - see the LICENSE file for details.
CallGPT follows a modular monolith architecture with clear separation of concerns. The application is built using FastAPI for the backend, with a pipeline-based approach using LangGraph for RAG orchestration.
- Modular Design: Each module (document, embedding, retrieval, etc.) is self-contained
- Layered Architecture: Clear separation between models, services, and routers
- Type Safety: Extensive use of Pydantic models and Python type hints
- Testability: Each layer can be tested independently
- Scalability: Designed for easy horizontal scaling and service extraction
Each module follows a consistent pattern:
module_name/
βββ __init__.py # Public API exports
βββ models.py # Pydantic request/response models
βββ service.py # Business logic
βββ router.py # FastAPI endpoints
βββ README.md # Module-specific documentation
- FastAPI: Async web framework for high-performance APIs
- LangChain/LangGraph: LLM orchestration and workflow management
- Pydantic: Data validation and settings management
- PostgreSQL: Conversation storage and checkpointing
- Pinecone: Vector similarity search
- Supabase: Vector storage and file management
- Sentence Transformers: Text embeddings
- Groq: LLM inference
-
Clone and install:
git clone <repository-url> cd CallGPT uv add -r requirements.txt # Using uv for faster installs
-
Set up environment:
cp .env.example .env # Fill in your API keys and configuration -
Database setup:
# Ensure PostgreSQL is running and DATABASE_URL is set # Tables are created automatically by LangGraph checkpointer
-
Run development servers:
# Terminal 1 - Backend make api # Terminal 2 - Frontend make frontend
The RAG pipeline is implemented as a state graph:
class RAGState(TypedDict):
question: str
messages: Annotated[Sequence[BaseMessage], add_messages]
context: List[Document]
answer: str
# ... more fieldsBusiness logic is isolated in service classes:
class PipelineService:
def process_organisation_document(self, ...):
# Pure business logic
def query_documents(self, ...):
# Pure business logicSettings and configuration are injected via Pydantic:
from app.core.config import settings
# Use settings anywhere
api_key = settings.GROQ_API_KEYLangGraph checkpointer provides conversation memory:
customer = customer_pipeline.compile(checkpointer=checkpointer)
# Conversations are automatically saved with thread_id
result = customer.invoke(state, config={"configurable": {"thread_id": thread_id}})-
Create a new feature:
- Add models in
models.py - Implement business logic in
service.py - Expose via API in
router.py - Write tests in
tests/
- Add models in
-
Code quality:
make format # Auto-format with Ruff make lint # Check code quality pytest # Run tests
Streaming responses:
# Use LangGraph streaming
for event in graph.stream(state, stream_mode="updates"):
yield eventDatabase operations:
# Conversations are auto-saved via checkpointer
# Access with thread_id in config
config = {"configurable": {"thread_id": thread_id}}
state = graph.get_state(config)- Environment variables: Use secrets management in production
- Database: Ensure PostgreSQL has sufficient resources
- Scaling: Consider containerization with Docker
- Monitoring: Add logging, metrics, and alerting
- API rate limits: Implement rate limiting for production
Built with β€οΈ by parth1609
Last Updated: January 2026