Matt aa383f53f8 feat(01-02): create ai-ranking.ts service with criteria parsing and ranking
- Add parseRankingCriteria() — parses natural-language criteria via OpenAI JSON mode
- Add executeAIRanking() — anonymizes projects (P001…), calls OpenAI, de-anonymizes results
- Add quickRank() — one-shot helper that parses + ranks both categories in parallel
- Add fetchAndRankCategory() — fetches eligible projects from Prisma and calls executeAIRanking
- compositeScore: 50% normalised avgGlobalScore + 50% passRate + tiny tiebreak bonus
- Projects with zero SUBMITTED evaluations are excluded (not ranked last)
- All project IDs anonymized before OpenAI — no PII in prompts
- Follows ai-filtering.ts pattern: getOpenAI, logAIUsage with action RANKING, classifyAIError
2026-02-27 00:48:09 +01:00
Description
No description provided
22 MiB
Languages
TypeScript 99.4%
JavaScript 0.2%
CSS 0.2%
Shell 0.2%