Market intelligence and career optimization for India's AI/ML job landscape.
Disha is a multi-agent system that finds roles, scores them against a personal profile, analyzes companies, and can propose learning roadmaps β not generic chat, but structured matches with compensation fit, skill overlap, and explicit reasoning.
Portfolio: Disha owns job market fit only. Not ops (Ozyman), not FSRS (Scholar-Loop), not creative synthesis (IdeaForge). See docs/portfolio-product-boundaries.md.
| Doc | Purpose |
|---|---|
| docs/STATUS.md | Handoff β what works, gaps, resume |
| docs/setup.md | Env, backend/frontend run |
| docs/current_state.md | Longer architecture audit |
| docs/portfolio-product-boundaries.md | Disha vs Ozyman / Scholar-Loop / IdeaForge |
| AGENTS.md | Guidance for coding agents |
Ask things like:
- "Find Agentic AI and backend roles in Bangalore above 20 LPA"
- "Should I apply to Razorpay or Swiggy given my skill set?"
- "What LLMOps skills am I missing for Staff ML Engineer roles?"
- "Suggest an ArXiv-backed learning roadmap for my skill gaps"
Typical flow:
Query β Supervisor (keyword routing)
β Scraper (Greenhouse / Lever / Playwright + optional Gemini)
β Career Β· Financial Β· Learning specialists
β Guardrail β Synthesize β answer + structured jobs/recommendations
| Component | Status | Notes |
|---|---|---|
| Supervisor orchestration | β Working | Cyclic routing, max-6 iteration guard, guardrails |
| Career scoring | β Working | Skill match %, LPA fit, location, experience |
| Financial analyst | β Working | India-first private-market style scores |
| Learning companion | β Working | Gemini gap analysis + phased roadmap |
| FastAPI + SSE | β Working | /api/chat, /api/chat/stream with jobs + recs |
| Greenhouse + Lever tools | β Working | Structured boards + normalizers |
| Query-aware board selection | β Working | Company/topic/India filters choose boards; skip junk RSS on career queries |
| We Work Remotely + YC jobs | β Working | RSS + Work-at-a-Startup page; 12h file cache + dedupe |
| Playwright + Gemini extract | β Working | Only for named companies without a public board |
| Next.js chat UI | β Working | SSE chat, job cards, recommendations, dark mode |
| pgvector schema | π§ Scaffold | Models + repos exist; not on the live chat path |
| Error recovery node | β Working | Empty scrape β broader fallback plan; then continue / synthesize |
| Resume evaluation tool | π§ Partial | Gemini tool exists; not wired into the graph |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SUPERVISOR AGENT β
β Intent analysis Β· Deterministic routing Β· Iteration guard β
ββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββΌβββββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββββ βββββββββββββββββββ
β SCRAPER β β FINANCIAL β β CAREER β
β β β ANALYST β β STRATEGY β
β β’ Greenhouse β β β’ Growth β β β’ Skill match β
β β’ Lever β β β’ Burn / runwayβ β β’ LPA fit β
β β’ Playwright β β β’ ESOP / risk β β β’ India filter β
β β’ Gemini ext β β β β β’ Ranked recs β
ββββββββ¬ββββββββ ββββββββββ¬ββββββββ ββββββββββ¬βββββββββ
β β βΌ
β β βββββββββββββββββββ
β β β LEARNING β
β β β COMPANION β
β β β β’ Gaps / ArXiv β
β β β β’ Phase roadmap β
βββββββββββββββββββββββββΌβββββββββββββ΄βββββββββ¬βββββββββ
βΌ βΌ
ββββββββββββββββββββββββββββββββββββββββ
β GUARDRAIL β SYNTHESIZE β
β Domain filter Β· Final answer β
ββββββββββββββββββββββββββββββββββββββββ
Routing is deterministic (no LLM in the control plane). Specialists run sequentially and return to the supervisor.
| Layer | Stack |
|---|---|
| Orchestration | LangGraph, Pydantic v2 |
| LLM | Google Gemini (extraction, learning companion, resume tool) |
| Ingestion | Greenhouse/Lever APIs, Playwright, RSS |
| API | FastAPI, Server-Sent Events |
| UI | Next.js 14, TypeScript, Tailwind, Shadcn/UI |
| Storage | SQLAlchemy 2.0 async + pgvector (scaffold) |
| Config | profiles/default.yaml, optional request preferences, .env |
git clone https://github.com/anmolsharma152/Disha.git
cd Disha
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
# Optional: Postgres + pgvector
docker compose up -d
# .env
echo 'GEMINI_API_KEY="your_api_key_here"' >> .env
# CLI
python main.py "Find Agentic AI and backend roles in Bangalore"
python main.py "Should I invest in Indian AI companies?" --stream
python main.py "Analyze Razorpay financial health" --json
# API
uvicorn api.server:app --reload --host 0.0.0.0 --port 8000curl -X POST http://localhost:8000/api/chat \
-H "Content-Type: application/json" \
-d '{"query": "Find Agentic AI roles in Bangalore above 20 LPA"}'Interactive docs: http://localhost:8000/docs
cd frontend
npm install
# optional: export NEXT_PUBLIC_API_URL=http://localhost:8000
npm run devOpen http://localhost:3000. The UI streams agent status, job cards, career recommendations, and the final markdown answer from /api/chat/stream.
### 1. Senior AI/ML Engineer β Agentic Workflows @ Razorpay β 67.4/100 (MEDIUM)
- Location: Bangalore | Remote: Hybrid
- Base: βΉ55 LPA | Est. Total: βΉ73 LPA
- Skill Match: 68.4% (LangGraph, LangChain, Kubernetes, MLflow, vLLM)
- Gaps: multi-agent orchestration, model serving, drift detection
- Experience Fit: stretch
- Apply: razorpay.com/careers
Disha/
βββ main.py # LangGraph compile, CLI, synthesize / error_recovery
βββ schemas.py # JobOpening, CompanyMetrics, AgentState, β¦
βββ profiles/
β βββ default.yaml # Generic prefs (empty = no hard personal filters)
βββ agents/
β βββ supervisor_agent.py # Routing + pre-synthesis guardrail
β βββ scraper_agent.py # ATS + Playwright + optional Gemini extraction
β βββ career_agent.py # Deterministic match scoring
β βββ financial_agent.py # Company / investment style scores
β βββ learning_agent.py # Gemini learning roadmap
βββ tools/
β βββ scraper_tools.py # RSS, Playwright, Greenhouse, Lever
β βββ board_selection.py # Query β ATS boards + keyword plan
β βββ job_normalizer.py # ATS / WWR / YC payloads β JobOpening
β βββ job_cache.py # File cache + dedupe for job fetches
β βββ sources/ # WWR (RSS), YC Work-at-a-Startup, β¦
β βββ career_tools.py # Resume evaluation (Gemini)
βββ api/
β βββ server.py # FastAPI + SSE
βββ storage/
β βββ db.py # Async SQLAlchemy + pgvector models/repos
βββ frontend/ # Next.js chat UI (SSE, jobs, recommendations)
βββ docs/ # Architecture, ADRs, roadmaps
βββ docker-compose.yml # pgvector Postgres
Disha does not hardcode a personal dossier. Profile fields fill from:
- Resume upload (UI or
POST /api/profile/resume) β stored as single-user memory underdata/ - Request
preferencesβ optional per-query overrides profiles/default.yamlβ empty product defaults when no memory
| Preference | Empty means |
|---|---|
skills |
Skill match is neutral (not fake 0%) |
target_cities |
No hard location drop |
min_base_salary_inr |
Comp fit = unavailable (not auto βbelowβ) |
experience_years |
Experience fit = unknown |
After you upload a resume, chat/search uses that memory automatically (user id default for v1).
# Upload resume
curl -X POST "http://localhost:8000/api/profile/resume?user_id=default" \
-F "file=@/path/to/resume.pdf"
# Inspect memory
curl "http://localhost:8000/api/profile?user_id=default"Environment:
GEMINI_API_KEY="your_api_key_here"
# optional: DISHA_DATA_DIR=/path/to/data # where user_memory_*.json is stored
# optional frontend
NEXT_PUBLIC_API_URL="http://localhost:8000"- Supervisorβspecialist LangGraph graph with guardrails
- FastAPI gateway + SSE (including structured jobs/recommendations)
- Career + financial scoring engines (India-aware)
- Greenhouse + Lever ingestion + job normalizers
- Query-aware board selection (company match, topic keywords, India soft filter)
- Playwright scraping + optional Gemini job extraction
- Gemini learning companion
- Next.js chat UI (streaming status, job list, recommendation cards)
- Async Postgres + pgvector schema scaffold
- Expand live India ATS board coverage as more public boards are validated
- Wire
error_logβerror_recoveryfor real fallbacks - Persist jobs / use pgvector on the live path when needed
- Richer job dashboard + learning roadmap UI
- Deployment (e.g. Vercel + API host + managed Postgres)
- Observability (tracing, cost), circuit breakers, cover letters
MIT