eliezer avihail
retrieval: remove the cross-encoder reranker (ablation showed no earned keep) (#100)
7c37d31 unverified
Raw
History Blame Contribute Delete
7.5 kB
name: Eval
# The measurement loop, one button:
# suite=retrieval+judge (default) — recall@k + MRR over the 100-question set
# against the LIVE index (plus the rank diagnostic), AND the LLM-as-judge
# answer-quality anchor. The default is the full one-click measurement
# because the GitHub mobile app cannot set workflow inputs.
# suite=retrieval — recall/MRR only. No LLM needed.
# suite=agentic — the agent-loop benchmark (loop vs single-shot coverage
# delta). Needs LLM keys; slow on free tiers.
# suite=judge — LLM-as-judge answer quality (faithfulness / relevance /
# citation-correctness) over the grounded path. Needs LLM keys.
# suite=all — everything.
# Results are committed back to main for before/after diffing.
on:
workflow_dispatch:
inputs:
suite:
description: "what to measure. The default runs retrieval AND judge —
deliberately, because the GitHub mobile app can't set inputs, so the
default must be the measurement we actually want one click to give:
recall/MRR plus the answer-quality anchor. agentic stays opt-in."
type: choice
options: [retrieval+judge, retrieval, agentic, judge, all]
default: retrieval+judge
set:
description: "retrieval eval set (v1 = 100 questions, v0 = original 13)"
type: string
default: v1
model:
description: "embedding model to query with — MUST match the model the
live index was built with, or the query vector width won't fit."
type: string
default: "BAAI/bge-small-en-v1.5"
k:
description: "top-k sections retrieved per question (the app's default
is 8; try 4 to measure precision-over-volume)"
type: string
default: "8"
provider:
description: "agentic/judge: LLM provider. Default openai-compat = PAID
hy3 (account credit) — reliable, no daily cap. gemini free is only
20 req/day per model, so it 429s (RESOURCE_EXHAUSTED) partway through
the judge set; failures still fall through to the other provider."
type: choice
options: [openai-compat, gemini]
default: openai-compat
llm:
description: "agentic/judge: OpenRouter slugs (fallback chain). Primary
is PAID tencent/hy3 (spends account credit) — no free-tier queue; the
:free llama stays as an emergency fallback only."
type: string
default: "tencent/hy3,meta-llama/llama-3.3-70b-instruct:free"
limit:
description: "agentic only: first N questions (0 = all 20)"
type: string
default: "6"
judge_limit:
description: "judge only: first N questions of the set (0 = all)"
type: string
default: "10"
permissions:
contents: write
jobs:
retrieval:
if: ${{ inputs.suite == 'retrieval' || inputs.suite == 'retrieval+judge' || inputs.suite == 'all' }}
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
- name: Restore embedding model
uses: actions/cache/restore@v4
with:
path: ~/.cache/huggingface
key: hf-${{ inputs.model }}
- run: pip install -e .
- name: Measure recall/MRR
env:
PYTHONUNBUFFERED: "1"
NEON_URL: ${{ secrets.NEON }}
TORCHDOCS_EVAL_SET: ${{ inputs.set }}
TORCHDOCS_EMBED_MODEL: ${{ inputs.model }}
TORCHDOCS_RETRIEVAL_K: ${{ inputs.k }}
run: python -m eval.run_retrieval
- name: Rank diagnostic (why do the known misses miss)
env:
PYTHONUNBUFFERED: "1"
NEON_URL: ${{ secrets.NEON }}
TORCHDOCS_EMBED_MODEL: ${{ inputs.model }}
run: python -m eval.diagnose_retrieval
- name: Commit results back to the branch
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -f eval/results/retrieval_*.jsonl
git diff --cached --quiet || git commit -m "eval: retrieval results from Actions run [skip ci]"
git pull --rebase origin main # main may have moved during the run
git push
agentic:
if: ${{ inputs.suite == 'agentic' || inputs.suite == 'all' }}
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
- name: Restore embedding model
uses: actions/cache/restore@v4
with:
path: ~/.cache/huggingface
key: hf-${{ inputs.model }}
- run: pip install -e .
- name: Run the agentic benchmark
env:
PYTHONUNBUFFERED: "1"
NEON_URL: ${{ secrets.NEON }}
TORCHDOCS_PROVIDER: ${{ inputs.provider }}
GEMINI_API_KEY: ${{ secrets.GOOGLE_API }}
TORCHDOCS_EMBED_MODEL: ${{ inputs.model }}
OPENAI_COMPAT_BASE_URL: https://openrouter.ai/api/v1
OPENAI_COMPAT_API_KEY: ${{ secrets.OPENROUTER }}
TORCHDOCS_OPENAI_COMPAT_MODEL: ${{ inputs.llm }}
TORCHDOCS_AGENTIC_LIMIT: ${{ inputs.limit }}
run: python -m eval.run_agentic
- name: Commit results back to the branch
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -f eval/results/agentic_v1*.jsonl
git diff --cached --quiet || git commit -m "eval: agentic results from Actions run [skip ci]"
git pull --rebase origin main # main may have moved during the run
git push
judge:
if: ${{ inputs.suite == 'judge' || inputs.suite == 'retrieval+judge' || inputs.suite == 'all' }}
runs-on: ubuntu-latest
timeout-minutes: 120
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.11"
cache: pip
- name: Restore embedding model
uses: actions/cache/restore@v4
with:
path: ~/.cache/huggingface
key: hf-${{ inputs.model }}
- run: pip install -e .
- name: Judge answer quality (faithfulness / relevance / citations)
env:
PYTHONUNBUFFERED: "1"
NEON_URL: ${{ secrets.NEON }}
TORCHDOCS_PROVIDER: ${{ inputs.provider }}
GEMINI_API_KEY: ${{ secrets.GOOGLE_API }}
TORCHDOCS_EMBED_MODEL: ${{ inputs.model }}
OPENAI_COMPAT_BASE_URL: https://openrouter.ai/api/v1
OPENAI_COMPAT_API_KEY: ${{ secrets.OPENROUTER }}
TORCHDOCS_OPENAI_COMPAT_MODEL: ${{ inputs.llm }}
TORCHDOCS_EVAL_SET: ${{ inputs.set }}
TORCHDOCS_JUDGE_LIMIT: ${{ inputs.judge_limit }}
TORCHDOCS_RETRIEVAL_K: ${{ inputs.k }}
run: python -m eval.run_judge
- name: Commit results back to the branch
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add -f eval/results/judge_*.jsonl
git diff --cached --quiet || git commit -m "eval: judge results from Actions run [skip ci]"
git pull --rebase origin main # main may have moved during the run
git push