Overview
The idea: instead of a 200-item questionnaire, just have a conversation and let the system
read the personality out of the language. The profile build is a Flask app that
manages a dialogue, runs NLP over each turn, and incrementally estimates Big Five traits,
the eight Jungian cognitive functions behind MBTI, and an emotional state that it tracks
over time -; then streams all of it to a web dashboard via WebSockets as you talk.
The whole thing runs on a local LLM through Ollama, which was the point: a tool that pokes at your own psychology should not be shipping the transcript to someone else's server.
Background
This grew out of a longer fascination with self-assessment instruments. There's a companion
psych-assessment-tool -; a more conventional unified test harness that runs
a battery of established questionnaires (including a Primal World Beliefs assessment) and
scores them -; and this profiling system is the inverted version of that idea: derive
the same dimensions from natural behaviour rather than from forced-choice answers.
It's explicitly a self-examination tool. The goal was a mirror, not a screening device for judging other people.
How It Works
The system is built from three cooperating modules sitting on a Flask + WebSocket spine:
- Core conversation manager -; runs the dialogue, does the baseline NLP, and maintains the running Big Five estimate.
- Advanced NLP module -; BERT-based personality detection with ensemble methods, emotion analysis structured on Plutchik's wheel, a VAD (valence-arousal-dominance) emotional-state tracker, and a knowledge graph that maps the relationships mentioned in conversation.
- MBTI visualization -; scores all eight cognitive functions (Ti, Te, Fi, Fe, Ni, Ne, Si, Se), works out the dynamic function stack, and renders the real-time Plotly dashboard.
Underneath: SQLite for persistent profiles with automated backups, Redis for caching and rate limiting, session management for multi-user runs, and a Docker setup so the whole stack comes up with one compose command. The LLM calls route through an Ollama conversation manager rather than a hosted API.
Where It Landed
Archived as a working prototype. It produced real saved profiles -; there's a database of them and a stack of timestamped assessment results from the runs -; but it stayed a personal experiment rather than something I hardened for anyone else to use.
- End-to-end loop works: talk to it, watch the dashboard update live, get a stored profile out the other side.
- Three analysis modules (Big Five, MBTI functions, emotional trajectory) all feed the same session.
- Whether language-derived typing is actually valid is the open question -; fun to build, genuinely hard to validate.