Skip to main content
AppDocc
Back to home

How AppDocc Works

BROWSER
(Next.js)
User clicks 'Search'
AUTHENTICATION
└─Validate JWT token (or API key)
QUESTION VALIDATION
└─Fast check: Does question contain documentation keywords?
YES
Proceed ✓
NO
Scope checkClaude Haiku
"Is this question about Roku development?"
YES
Proceed ✓
NO
Error / Stop ✗
EMBEDDING MODEL
Local
├─Initialize gte-Qwen2-1.5B-instruct (if not cached)
└─Initialize jina-embeddings-v2-base-code (if dual-model enabled)
Models loaded to server GPU (RTX 4000)
QUERY EXPANSION
Claude Haiku
└─Generate 3-5 alternative search queries
"roURLTransfer error"["roURLTransfer threading", "Task node network", "SceneGraph render thread", ...]
DOCUMENTATION SEARCH
Local Vector DBs
QWEN COLLECTION
└─ ChromaDB query
├─ Embed question (1536 dim)
├─ Cosine similarity search
└─ Return top 25 chunks
JINA COLLECTION
(when dual-model)
└─ ChromaDB query
├─ Embed question (768 dim)
├─ Cosine similarity search
└─ Return top 25 chunks
Multi-pass: Run search for each expanded query, dedupe results per model
CONTEXT PACKAGING
├─Format retrieved chunks into numbered excerpts
[1] https://developer.roku.com/docs/.../task.md
"Task nodes run on separate threads..."
└─Build user message: System prompt + Excerpts from results + Question
LLM SYNTHESIS
Claude Sonnet
QWEN CONTEXT
├─ System: Voice, formatting rules
├─ User: Doc excerpts + question
└─ Prompt: "Generate answer ONLY from these search results"
JINA CONTEXT
├─ System: Voice, formatting rules
├─ User: Doc excerpts + question
└─ Prompt: "Generate answer ONLY from these search results"
If single model (DaVinci Resolve, others): Only Qwen path
AGREEMENT ANALYSIS
Claude Opus
├─Only performed when dual-model mode used
├─Send both formatted answers to Claude Opus for semantic comparison, not accuracy validation
└─Verdict: "agree" | "partially_agree" | "disagree" + Explanation
FORMATTING
├─Convert markdown → HTML (code blocks, lists, etc.)
└─Apply doc links (keyword → hyperlink mapping from doc_links table)
"roURLTransfer" → <a href="...">roURLTransfer</a>
RESPONSE
├─Stream final JSON via SSE "complete" event
{
status: "success",
source: "roku",
dual_model: true,
answers: { qwen: {...}, jina: {...} },
timing: { validation_ms, search_ms, llm_ms, ... },
citations: [...],
analysis: { verdict, explanation }
}
└─Log query to database for human accuracy review (TBD)
BROWSER renders:
• Answer
• Tabs
• Citations
• Metrics