{"slug": "find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings", "title": "🤗 Find the Pokemon you are w. PokéAPI, your resume & embeddings", "summary": "A developer built an open-source tool that matches a person's resume to a Pokémon character using embeddings and a reranker. The project, hosted on Hugging Face Spaces, uses the BAAI/bge-m3 model to embed resume sections and Pokémon data from the PokeAPI, then applies cosine similarity and a cross-encoder for precise matching. The tool runs entirely on a laptop with no GPU, relying on pure open-source software.", "body_md": "*This is a submission for *[Weekend Challenge: Passion Edition](https://dev.to/challenges/weekend-2026-07-09)\n\n##\n❔ What I Built\n\nThese two last weeks, my team mates started to to use Claude Code together with they yearly review :\n\n**to discover which Pokemon they are... and why**.\n\nI found that really really fun... and started to wonder\n\nif I could automate that with only onPrem resources, with embeddings, ML... only with a simple laptop without GPU, a simple core i5 and 8 Gib.\n\nAnd of course, only with pure Open Source software ❣️\n\nWhat you'll discover below is how I started to prototype it and make it happen.\n\n##\n🍿 Demo\n\n##\n🤗 Code\n\nThe whole code source is available as a HF Space, see `rastadidi/resume-to-pokemon`\n\nfor more... or to play wth it 🤓\n\n##\n🧰 How I Built It\n\nTo achieve this first prototype I :\n\n-\n**Used the data** I already prepared with my\n`registry.jsonresume.org/adriens`\n\n-\n**Bundled dataset (built once).** `build_dataset.py`\n\nfetches every\nspecies from the [PokeAPI](https://pokeapi.co/docs/v2) — name, types,\nbase stats, sprite, genus and English Pokedex flavor text. For each\nPokemon it also derives a **professional-archetype profile** from its\ntypes and stat spread (e.g. a Steel type → *\"a disciplined, precise,\nrobust engineer of structured systems\"*), so career resumes and\nmonster biology meet in the same trait vocabulary. Description +\nprofile are embedded with\n`BAAI/bge-m3`\n\nand committed as\n`data/pokemon.json`\n\n+ `data/embeddings.npy`\n\n— so the app makes **no\nPokeAPI calls at runtime**.\n-\n**Resume → phrases.** Sections that carry semantic signal —\n`basics.summary`\n\n, `skills`\n\n, `work`\n\n/`volunteer`\n\n, `projects`\n\n,\n`interests`\n\n— are each turned into a short phrase and embedded with\nthe same model. (Administrative sections like education, certificates\nand languages are skipped.)\n-\n**Retrieve → rerank.** Cosine similarity over the embeddings\nretrieves a shortlist of the closest Pokemon; a cross-encoder\n(`BAAI/bge-reranker-v2-m3`\n\n)\nthen re-scores the (resume, Pokemon) pairs jointly for much sharper\nprecision than cosine alone. The tool explains *why* by quoting the\nmatched resume phrase and the Pokemon's own profile + Pokedex text.\n-\n**Ranking + relative fit.** Pokemon are ranked by a blend of the\nrerank match and their base stats (adjustable). Because a broad\nresume matches many Pokemon similarly, raw scores cluster tightly and\nare unreadable — so the reported score is a **relative fit**: rerank\nscores are standardized across the shortlist and spread through a\nsigmoid, so the top clearly stands out (~100%) and the tail drops\noff. It's a fit *relative to the candidate pool*, not an absolute\nprobability. The two best-fitting **types** are derived from the same\nshortlist, so they always agree with the ranked Pokemon.\n-\n**Calibrated confidence.** Instead of a raw similarity number, a\nread-out reports how far the top match *stands out from the field*\n(a z-score over the shortlist), flagging decisive vs. diffuse,\nmulti-type profiles. Type scores and the ranked Pokemon are derived\nfrom the *same* reranked shortlist, so the \"best-fit typing\" always\nagrees with the cards.", "url": "https://wpnews.pro/news/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings", "canonical_source": "https://dev.to/adriens/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings-3bb5", "published_at": "2026-07-12 08:00:47+00:00", "updated_at": "2026-07-12 08:14:02.886896+00:00", "lang": "en", "topics": ["artificial-intelligence", "machine-learning", "natural-language-processing", "developer-tools", "ai-tools"], "entities": ["PokeAPI", "BAAI/bge-m3", "Hugging Face", "Claude Code", "rastadidi"], "alternates": {"html": "https://wpnews.pro/news/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings", "markdown": "https://wpnews.pro/news/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings.md", "text": "https://wpnews.pro/news/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings.txt", "jsonld": "https://wpnews.pro/news/find-the-pokemon-you-are-w-pokeapi-your-resume-embeddings.jsonld"}}