ai-startup-skills
AI 제품을 만드는 스타트업을 위한 7단계 에이전트 스킬: 검증 → 비즈플랜 → 정책 → 로드쇼 → 고객 확보 → 가격 책정 → 등록
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗We don't write personas. We built the system that writes one per seller from their data, backs every choice with evidence from 9,657 real VANI calls, and rewrites it mid-call when the seller's behaviour changes.
┌──────────────── offline (batch) ────────────────┐
IndiaMART CSVs ─┤ data/warehouse.py → DuckDB warehouse │
(data/private) │ evidence/miner.py → evidence.json (140 findings)│
└──────────────────────────────────────────────────┘
│
seller glid ──> persona/generator.py ──> PersonaSpec (voice, language, tone, plan; reason + confidence per field)
│
┌────────────────────────────┴───────────────────────────┐
web runtime (our UI) Sarvam Samvaad agent (phone/web)
Saaras STT → signals → adapter → policy → LLM → Bulbul agent → tool analyze_turn → signals → adapter → policy
└──────────────── runtime/service.py (one CallService) ─┘
│
SQLite: sessions + switch log → /api/v1/switch-log
| Layer | Code | Notes |
|---|---|---|
| Domain | vani/domain/ | Typed models: SellerProfile, PersonaSpec + Decision, Signal, SwitchEvent, CallSession |
| Data | vani/data/ | Normaliser (state→language, turnover bands, disposition parsing, missing-field flags), DuckDB warehouse, repository interface |
| Evidence | vani/evidence/ | Call features from AI summaries + transcripts; outcome drivers, segment risks (Bonferroni, Wilson CI), bot-version variants; EvidenceBook query API |
| Persona | vani/persona/ | Generator (seller history > evidence > rule > default), voices, bilingual lines, LLM/agent prompt rendering, distinctness metric |
| Live | vani/live/ | LLM brain (one structured Sarvam LLM call per turn: understand + reply), rule detector calibrated on real seller turns as guardrail/fallback, adapter (latest-turn strategy, audible pace/tone targets), offline evaluation |
| Speech text | vani/speech/ | Bulbul formatter: strips markdown/notes/emoji, Indian number commas, optional Sarvam transliteration |
| Runtime | vani/runtime/ | Dialogue policy, CallService, session stores (SQLite/memory) |
| Sarvam | vani/integrations/sarvam/ | Async client (Saaras, Bulbul, sarvam-105b), agent prompt template |
| API | vani/api/ | FastAPI /api/v1/* incl. agent tools, demo-sellers, TTS |
| UI | web/ | Plain HTML/JS (no build step): Live call, Compare personas, Evidence |
Scaling: the API is stateless (state lives in the session store); repository, store and speech client sit behind interfaces, so DuckDB→Postgres, SQLite→Redis or a second STT/TTS vendor are drop-in. Evidence mining is a batch job; persona generation is pure and fast (~5k sellers/40 s including DB reads).
cd backend
pip install -r requirements.txt
cp .env.example .env # add SARVAM_API_KEY
# put the dataset CSVs in data/private/raw/gc/ (gitignored)
python -m vani.data.warehouse # CSV -> DuckDB
python -m vani.evidence.miner # -> data/private/evidence.json
python -m vani.tools.smoke # check Sarvam STT/TTS/LLM with your key
python -m uvicorn vani.api.app:app --port 8000 # UI: http://localhost:8000 API docs: /docs
Other tools:
python -m vani.live.evaluate # detector precision/recall on real transcripts
python -m vani.tools.export --sample 50 # persona specs + 3 contrasting demo sellers -> data/private/out
python -m vani.tools.voice_audition # every Bulbul voice x pace, to pick voices by ear
python -m vani.tools.tts_compare # Roman vs Devanagari vs transliterated text, to pick by ear
python -m pytest -q # 234 tests (real-data tests auto-skip without the dataset)
Sarvam agent setup: docs/SARVAM_AGENT_SETUP.md.
seller audio ─> Saaras STT (translit: Roman Hinglish)
─> rule detector (1 ms, guardrail + offline fallback)
─> LLM brain: ONE Sarvam LLM call over the WHOLE conversation, json_schema output
{intent, mood, seller_question, seller_slot, seller_cannot_days, agreed_to_meeting, agreed_slot, reply}
prompt carries: persona + global seller context (mined from 9,657 calls) + this seller's past
call summaries + call state (slots offered, days ruled out)
─> merge: LLM's contextual reading decides mood & agreement; rules keep only hard safety signals
(do-not-call, end-call, explicit slow-down/language, seller gender) and run alone if the LLM is down
─> call state: days ruled out, seller's slot (their time beats ours), agreed slot; Hinglish + Gujarati time parser
double-checks the LLM ("kal shaam paanch baje" -> tomorrow 17:00)
─> adapter: pace / expressiveness / strategy switch ─> switch log
─> policy: outcome lines (booked / goodbye) are fixed templates, never improvised
─> reply guardrails (no false 'booked', no rude fillers) ─> Bulbul formatter ─> Bulbul TTS
Every persona field carries source (seller_data / evidence / rule / default / live_signal) and confidence (strong / moderate / weak / informed_guess / default / live).
bulbul:v2 supports it; the spec carries a target that v3 ignores.Raw data, the warehouse, evidence, sessions and exports live in data/private/ (gitignored). Test fixtures use the real column headers with invented rows; test phrases are paraphrased.
With the server running: node tests_e2e/ui_scenarios.js http://127.0.0.1:8001. It plays 15 seller scenarios
through the web UI (rush, frustration, confusion, interest, English and Gujarati switches, slow down, bot question,
human request, do-not-call, end call, slot negotiation, two refusals, a multi-switch call, male voice + seller gender),
checks the switch log, persona fields, language, outcome and the human acknowledgement, and saves screenshots
to tests_e2e/out/.
A public demo runs on Vercel with fictional sellers and aggregate evidence only (no customer data):
see docs/DEPLOY_VERCEL.md for the demo glids and how it is deployed.