How it works

How QnReady drafts an answer

  1. Read. Your browser opens each file (.docx, .xlsx, .csv, .md, .txt) and splits it into passages of about 900 characters, keeping the nearest heading.
  2. Match. For each question it ranks the passages with BM25, a standard keyword-ranking method, and keeps the best 5. If no passage matches well enough, the row is a gap and nothing is sent.
  3. Draft. The question and those passages go to the model with one instruction: answer only from these excerpts, cite them, and say “gap” if they don’t answer it. Answers without a valid citation are turned into gaps.
  4. Review. You see each draft with its status (answered, partial, needs your input) and can open the exact passage behind every citation. Edit, then tick “Approved”.
  5. Export. A CSV in the questionnaire’s order with row numbers, answers, status, approval and sources. Unapproved rows are marked.

Limits worth knowing

  • Keyword matching can miss a passage that uses different words. Gaps are a prompt to check, not proof the answer is missing.
  • Models can misread a passage. That is why every draft shows its source and needs your approval.
  • PDFs aren’t read yet: paste their text.
  • Drafts are kept only in the open tab. Export before you close it.

Questions, answered

Which AI model is used?
An open-weights model (Google Gemma 4, 26B) running on Cloudflare Workers AI, with a smaller Llama 3.1 model as fallback. The model is told to answer only from the numbered passages and to return a gap when they don’t answer the question.
Why might a correct answer show as a gap?
Because the matching step didn’t find the passage, for example when the document uses different words than the question. Add the relevant document or paste the passage, then draft that row again.
Why only 5 passages per question?
To keep each request small, fast and cheap, and to send as little of your documents as possible.