FyleContext
TypeSafe Jev

A second opinion on every passage

Vector search finds text that looks like your question. Jev, a small decision model from TypeSafe, checks whether it actually answers it, and FyleContext only hands your AI the passages that pass.

Three stages, one Jev call

  1. 1
    RecallThe question is embedded and matched against your chunks with vector search. The 30 closest passages go forward. This stage decides what can be found at all.
  2. 2
    JudgeOne Jev call scores all 30 passages. For each one it answers a yes-or-no question, “does this passage help answer the query?”, as a probability between 0 and 1.
  3. 3
    GatePassages below the threshold (0.5) are dropped. The rest are sorted by probability, similarity breaking ties, and the top few are returned. An empty list is a real answer.

Measured, not assumed

Our retrieval eval runs 27 questions with known answers and 10 that our test documents can't answer, over the same 30 candidates, with and without Jev. Jev adds about 840 ms at p95 for a call scoring 30 passages.

MetricSimilarity onlyWith Jev
Right passage ranked first (recall@1)96.3%100%
Mean reciprocal rank0.9821.000
nDCG@100.9650.989
No-answer queries that still returned something10%0%

Similarity only uses the 0.55 fallback floor. A small corpus of six documents; treat it as a sanity check, not a benchmark.

What your AI receives

Every result carries both scores. relevance is Jev's probability; rerank tells the client whether Jev was applied or skipped. The same shape comes back over MCP and REST.

{
  "results": [
    {
      "document_id": "8f0c…",
      "title": "Employee Handbook",
      "page": 12,
      "text": "…chunk text…",
      "similarity": 0.71,
      "relevance": 0.93
    }
  ],
  "rerank": "applied",
  "trust": "untrusted_document_data"
}
Why not just a similarity cutoff?
Similarity measures how alike two texts look, not whether one answers the other. On our eval, questions our documents can't answer still reach 0.46–0.54 similarity, while real answers start at 0.64. A fixed floor has to sit in that narrow gap. Jev's probabilities separate them far more cleanly: no-answer queries top out around 0.12, real hits start around 0.84.
It fails open
If Jev is slow (2 s timeout), errors, or sends back something malformed, search still answers. Results fall back to similarity order with a 0.55 floor, the response says rerank: "skipped", and there is no relevance field. You always know which path you got.
Your text, handled carefully
Jev sees the question and the same sanitized passage text search returns. Internal chunk ids never leave our server. TypeSafe states that Jev isn't trained on customer requests or responses.
Scores are judgments, not guarantees
A relevance probability is a model's call, and a document can try to talk its way up the ranking. Every result is tagged as untrusted document data so the AI on the other end quotes it rather than obeys it.