DevWhisper is a voice-first AI agent built for developers. Instead of stopping to search through files or documentation, you just ask out loud — and it answers based on your actual codebase.
Developers lose focus constantly. Switching between your editor, a browser, Stack Overflow, and documentation breaks the flow of thinking. Most AI tools still require you to type, copy-paste code, and wait.
DevWhisper lets you stay in flow. Ask a question with your voice, get an answer in seconds, and keep coding.
🎤 You ask a question about your code 🔍 It searches your actual codebase with hybrid vector + keyword search 🔊 It responds in plain spoken English, like a senior dev sitting next to you
Example questions that work:
- "What does the preprocess function do?"
- "Where is the model saved after training?"
- "How do I debug a KeyError in the pipeline?"
Developer speaks
↓
Vapi — Speech to Text
↓
FastAPI Webhook Server
↓
Qdrant + BM25 Hybrid Search
↓
Groq LLaMA 3.3 70B
↓
FastAPI sends answer back
↓
Vapi — Text to Speech
↓
Developer hears the response
| Component | Role |
|---|---|
| 🎙️ Vapi | Handles voice input and output |
| 🗄️ Qdrant + BM25 | Hybrid vector + keyword search |
| 🤖 Groq (LLaMA 3.3 70B) | Generates the response |
| ⚡ FastAPI | Receives webhooks from Vapi and orchestrates everything |
- Python 3.10+
- API keys for:
- ngrok (or similar tunneling tool) to expose your local server to Vapi
-
Clone the repository
git clone https://github.com/Aharshi3614/Devwhisper.git cd Devwhisper -
Create and activate a virtual environment
python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Configure environment variables
Copy the example file and fill in your keys:
cp .env.example .env
Then edit
.env:QDRANT_URL=your_qdrant_cluster_url QDRANT_API_KEY=your_qdrant_api_key GROQ_API_KEY=your_groq_api_key -
Add your codebase
Drop the Python files you want DevWhisper to answer questions about into the
sample_codebase/folder. -
Index your codebase
python indexer.py
-
Start the server
uvicorn main:app --reload --port 8000
-
Create a
.envfile in the root folder:cp ./.env.example ./.env -
Expose it publicly
ngrok http 8000
-
Connect Vapi
Update your Vapi tool's Server URL to your ngrok URL plus
/webhook.
With the server running, confirm it responds:
curl http://localhost:8000/healthYou should get a response back confirming the server is live. You can also run the standalone test client (see below) to check the full pipeline end-to-end without needing a live voice call.
- Build the image:
docker build -t devwhisper . - Create a
.envfile with your API keys (same as above). - Run the container:
docker run -p 8000:8000 --env-file .env devwhisper
- Expose it with ngrok and update your Vapi tool's Server URL as in the steps above.
You can test DevWhisper's conversation flow directly from your terminal — without using Vapi or making a voice call — using the standalone test client. This is useful for local development and debugging.
- Make sure your FastAPI server is running:
uvicorn main:app --reload --port 8000
- Run the test client in interactive mode:
python test_client.py
- Or pass a one-off query:
python test_client.py --query "What does the preprocess function do?"
| File / Folder | Purpose |
|---|---|
main.py |
FastAPI webhook server, handles all Vapi events |
indexer.py |
Chunks, embeds, and uploads to Qdrant plus builds BM25 keyword index |
retriever.py |
Hybrid search: vector + BM25 + symbol matching fused via RRF |
llm.py |
Sends the query and context to Groq and returns the answer |
test_client.py |
Standalone CLI client for testing without Vapi |
sample_codebase/ |
Put your own Python project files here |
- The ngrok URL changes every time you restart it — remember to update the Server URL in your Vapi tool settings each time.
- The
.envfile is not included in this repo for security. Create your own using.env.exampleas a starting point.
Contributions are welcome! Check out the open issues — issues labeled good first issue are a great place to start.
See the LICENSE file for details.