About Mitra

A multi-agent career
intelligence system

Mitra is a portfolio project built at IIT Madras demonstrating production-grade agentic AI: multi-agent orchestration, semantic memory, skill gap detection, and fine-tuned models, all in a single domain-specific system for ML/AI internship pipelines.

6 Specialised Agents

Each agent is an isolated async node in a LangGraph StateGraph. The graph is rebuilt per request to bind the DB session: no global state, no module-level caches.

opportunity_hunter

Finds ML/AI internships using pgvector semantic similarity against your skill profile.

gap_detector

Compares your resume skills against job requirements and surfaces specific gaps to close.

roadmap_planner

Generates time-boxed learning plans calibrated to your current level and target role.

resume_analyzer

Extracts and categorises skills from PDF resumes, building a semantic skill graph.

interview_coach

Runs contextual mock interviews on ML system design and behavioural questions.

application_tracker

Maintains pipeline state across wishlist, applied, interviewing, offer, and rejected.

Technology Stack

Orchestration
  • LangGraph 0.2
  • Multi-agent StateGraph
  • SSE streaming
Intelligence
  • Claude Sonnet 4.6
  • QLoRA fine-tuned Qwen2.5-3B
  • Semantic re-ranking
Memory
  • pgvector (Neon)
  • Episodic memory store
  • Cosine similarity search
Backend
  • FastAPI
  • SQLAlchemy async
  • Psycopg3
Frontend
  • Next.js 14 App Router
  • TypeScript
  • CSS Modules

Key Design Decisions

Graph rebuilt per request

build_graph(db) is called inside the SSE endpoint so each request gets a fresh graph with a bound async DB session, avoiding session sharing across concurrent requests.

Single LLM gateway

All Claude calls route through services/llm_client.py. No agent imports anthropic directly, making model swaps and rate-limit handling a one-file change.

Psycopg3 + pgvector

Psycopg3 (asyncio) gives cleaner integration with pgvector than asyncpg. Embeddings are generated by a sentence-transformers singleton loaded once at startup.

QLoRA fine-tuned classifier

Qwen2.5-3B fine-tuned with QLoRA on 500 synthetic training pairs to classify intent before routing, keeping the main LLM call focused on generation, not classification.