ÌMỌ̀: LLM agents that know Lagos
Two LLM agents that share one persona engine: one writes the review a Lagos diner would leave, the other ranks places for them and explains why.
The problem
Recommendation and user-modelling systems are tuned on American and European reviews. They miss how Nigerians actually write and choose: price sensitivity in naira, local dishes, Nigerian English and Pidgin, and Lagos traffic deciding where you go.
Objectives
- Model a user from their review history, not a demographic guess
- Simulate the review they would write, in their own voice
- Recommend places with a reason a person would accept
- Measure both tasks on held-out data
Process
- DiscoverStudied how Lagos reviewers write and what decides where they eat and shop.
- DefineSplit the work into Task A (user modelling) and Task B (recommendation) around one shared persona.
- BuildA persona engine, two agents and two FastAPI services, deployed with Docker on Render.
- ProveAn evaluation suite: ROUGE-L for review text, RMSE for stars, NDCG@10 and hit rate for ranking.
Who it's for
Want recommendations that fit Nigerian users, not imported defaults.
Need a reproducible baseline with a disclosed synthetic dataset.
Challenges
- No public Nigerian review dataset of the right shape
- LLM reviews drift into generic, polite English
- Rankings must come with reasons, not just scores
- Two services must agree on one view of the user
What we built
Extracts traits such as price band, cuisine, register and timing from a user's history; both agents use the same persona.
Writes in the user's register, from Pidgin to formal English, and predicts the star rating.
Scores the catalogue against the persona and returns each pick with its reason.
Two FastAPI services with interactive docs, containerised and deployed.
Flow
- Review history
- Persona engine
- Task A: simulate review
- Task B: rank places
- Reasons attached
- FastAPI response
- Evaluation
Tools & languages
The code
Both agents, the FastAPI services, the dataset generator and the evaluation suite. The dataset is synthetic and disclosed as such.