Skip to content
Honorable Mentions

Call My Parts

Sit back and relax while our agent help find the right fit

Core trick

Bridges Twilio call audio to Gemini Live by transcoding 8kHz μ-law to 16kHz PCM, and classifies IVR or voicemail before the agent speaks.

Tags

Built with

adkbrowser-usecloud-rundockerfastapifirebasegcpgeminipythonreacttwiliotypescriptwebsockets

Description

Inspiration Working at a used car dealership we came across a problem of how time consuming finding a used part can be. Especially when you work at a dealership which needs used parts for multiple vehicles on an every day basis. What it does Helps you save time where it can be utilized for other important things rather than phoning around for parts and negotiating with vendors. How we built it Built on FastAPI with Google's Agent Development Kit (ADK) orchestrating three agents: voice intake, browser search, and outbound calling Voice intake uses Gemini 2.5 Flash Native Audio streamed over WebSocket so the conversation feels natural and supports real-time interruptions Browser search uses BrowserUse with LLM-driven navigation plus Playwright fallbacks for sites like RockAuto and car-parts.com Outbound calling bridges Twilio's Programmable Voice with Gemini Live, dialing up to 3 vendors in parallel and extracting structured results Frontend built in React with a live pipeline tracker and real-time vendor call status, deployed to Firebase Hosting Challenges we ran into Building the Twilio to Gemini audio bridge required full codec conversion (8kHz μ-law in, 16kHz PCM out) with no room for latency Real phone calls meant navigating IVR menus, answering machines, and AI screeners so we built a 4-phase gatekeeper classifier Voice activity detection needed significant tuning to avoid triggering on background noise and cutting off the agent mid-sentence Keeping browser sessions alive across mid-conversation pauses and resuming them in the exact same state took multiple iterations Accomplishments that we're proud of The full loop works end-to-end: speak a request, the system searches vendors, calls them with AI, and returns a ranked results list without touching a phone Handling real-world call messiness like IVR trees and answering machines while still extracting clean structured pricing data A frontend that shows concurrent vendor calls resolving in real time, making the whole system transparent rather than a black box What we learned AI voice products are mostly infrastructure problems codec pipelines, connection drops, and session state management are harder than the model logic Starting from a real workplace problem kept every architectural decision grounded and prevented over-engineering What's next for Call My Parts Docker-based Chrome containers for multi-user browser concurrency A negotiation layer that pushes back on price and asks about condition and warranty Expanding beyond auto parts the architecture is domain-agnostic and any business sourcing inventory by phone is a potential use case
Top-Notch-X/C2B-Concierge★ 20 forksPythonApache-2.0Created Feb 23, 2026 · last push Mar 16, 2026

README excerpt

# Call My Parts

An AI-powered voice agent that finds used auto parts by searching vendor websites and calling them on your behalf.

---

# 1. Tech Stack

**Backend**
- Python 3.13 · FastAPI · Uvicorn
- Google ADK (LlmAgent, Runner, InMemorySessionService)
- Gemini 2.0 Flash (routing LLM) · Gemini 2.5 Flash Native Audio (voice + calls)
- Playwright · BrowserUse (browser automation)
- Twilio Programmable Voice (outbound calls)
- Google Custom Search JSON API
- Docker · Google Cloud Run

**Frontend**
- React 19 · TypeScript · Vite
- TailwindCSS · Framer Motion · Zustand
- Firebase Hosting

---

# 2. Project Structure

```
C2B-Concierge/
│
├── backend/
│   ├── app/
│   │   ├── main.py                            # FastAPI app, CORS, routers, error handlers
│   │   ├── settings.py                        # Pydantic Settings — all env vars
│   │   │
│   │   ├── api/
│   │   │   ├── deps.py                        # Dependency injection (BrowserProvider)
│   │   │   └── v1/
│   │   │       ├── chat.py                    # POST /api/v1/chat — ADK Runner entry point
│   │   │       ├── agent.py                   # Agent management endpoints
│   │   │       └── health.py                  # GET /api/v1/health
│   │   │
│   │   ├── core/
│   │   │   ├── base_agent.py                  # BaseAgent ABC (model/instruction/tools/callback)
│   │   │   ├── models.py                      # SearchQuery, SearchHit, SearchConfig
│   │   │   ├── errors.py                      # Custom exceptions + Fas

Team