- Check
.envexists andGEMINI_API_KEYis set (or leave blank withENABLE_AI_FALLBACK=true) - Check venv is active:
source backend/.venv/bin/activate - Check port 8000 isn't already in use:
lsof -i :8000
The request was blocked before reaching Gemini. Two possible causes:
Topicality rail — the resume text has fewer than 4 recognisable resume signal words. Fix: submit a proper resume (experience, skills, education keywords expected).
Injection rail — one of the input fields (resume_text, target_role, job_description) matched a prompt injection pattern. Fix: remove phrases like "ignore previous instructions", "you are now", "act as", etc.
Check logs for guardrail_injection_blocked or guardrail_topicality_blocked with the matched pattern.
Minimum 80 characters. The sample resume pre-filled in the UI is always long enough.
Gemini call failed after retries. If ENABLE_AI_FALLBACK=true, the heuristic service should have responded instead. Check:
gemini_configured: falsein/healthmeansGEMINI_API_KEYis missing or empty- Rate limit exceeded — Gemini free tier is 15 RPM / 1 500 req/day
- Render backend is cold-starting — first request after inactivity takes ~30s
GEMINI_API_KEY is not set and ENABLE_AI_FALLBACK=false. Either add the key or set ENABLE_AI_FALLBACK=true.
The fetch to the backend timed out or was refused. Common causes:
- Render cold start — wait 30s and try again; the green dot in the header will appear when ready
- CORS — check
CORS_ORIGINSon the backend includes the frontend URL exactly - Wrong API URL — check
VITE_API_BASE_URLinfrontend/.envmatches the backend URL
- Only PDF and TXT accepted
- Maximum 5 MB
- Don't provide both
resume_textandresume_filesimultaneously — the tab switcher in the UI prevents this, but direct API calls can hit it
curl https://llm-ops-workshop-api.onrender.com/metrics- High
total_errorswith lowtotal_requests→ likely Gemini errors; check/healthforgemini_configured - Low latency errors → likely guardrail violations (instant rejection, no AI call)
- High latency errors → likely Gemini timeouts; check
GEMINI_TIMEOUT_SECONDS
Add the CVE ID to .trivyignore with a comment explaining why it's acceptable:
# .trivyignore
CVE-2023-12345 # dev-only dependency, not in production image
Then re-run the scan to confirm it's suppressed.
The theme is stored in localStorage under the key theme. To reset:
// In browser console
localStorage.removeItem('theme')
location.reload()