← Back to projects

Final project · Research prototype

Lumen

A Socratic tool for introspection

Why I built Lumen

For my final project, I built Lumen: a Socratic introspection tool designed to help you illuminate your own story. The idea is simple. Instead of offering a finished interpretation of your life, it asks questions that encourage you to examine your emotions, challenge your assumptions, and think more deeply about your circumstances.

I started with a frustration: in my experience, large language model platforms can be too quick to validate what a user says. Supportive language has its place. Sometimes “take a deep breath” is exactly what someone needs to hear. But reassurance alone has rarely helped me solve the most important problems in my life. Meaningful reflection has: identifying where a difficult emotion comes from, understanding the problem beneath it, and deciding what I can do next.

Lumen is, first and foremost, something I built for myself. While designing it, I kept asking how I would want a true friend to respond when I was struggling. Would I want them to reassure me about an idea I had not thought through, or help me see a way out of a hole I had dug? I wanted Lumen to support that second kind of conversation.

Making room for the user to think

The design centers on questions rather than long answers. I deliberately kept the model’s responses brief so that the user would have room to think and write. The goal was not to produce a polished account of someone’s emotional state, but to help them reach an insight themselves.

One example from my reflection on the project is the chain beneath exam anxiety: I am nervous about finals because I am worried I will not pass; failing might make me feel like a failure; beneath that is a fear of disappointing my family. During testing, Lumen sometimes offered questions more useful than simply repeating “why?” Those questions helped me trace a feeling back toward its source.

To give the conversation continuity, I sent the full chat history back to the model with each new message. This basic form of conversational memory allowed it to connect earlier remarks with later ones within a conversation. It also created a practical constraint: longer conversations demand more memory and become harder to manage coherently.

How I built it

I built Lumen inside a Marimo notebook after encountering distribution problems in earlier class projects. I wanted to lower the setup barrier for people who do not code and make the experience closer to pressing “start” than managing a long list of dependencies. I also used Modal for GPU acceleration with PyTorch.

The interface uses custom HTML and CSS, Crimson Pro from Google Fonts, and CSS keyframe animations for the loading indicator. I used Claude from Anthropic to help with development, debugging, and research.

Finding the right model

Choosing the language model meant balancing speed, size, response quality, and memory requirements. These were my observations while building the prototype, rather than a formal benchmark:

  • Phi-3: my initial model repeated the prompt as output instead of treating it as instructions.
  • Mistral-7B-Instruct-v0.3: responses felt basic and repetitive.
  • Mistral-Small-3.1-24B-Instruct-2503: produced responses I liked, but ran into memory limits.
  • Llama-3.2-3B-Instruct: followed instructions initially, then became confused after several exchanges.
  • Llama-3.3-70B-Instruct: produced strong responses, but was too large for this project.
  • Qwen2.5-7B-Instruct / Qwen2.5-14B: my final choices offered a workable balance across these constraints. In testing, however, they sometimes switched to Chinese after several exchanges—an unresolved issue at the time of this reflection.

The ideas behind the project

Turing: extending thought

The course reading that stayed with me most was Alan Turing’s Computing Machinery and Intelligence. His question about whether machines can think made me consider a different role for AI: an extension of my own cognitive abilities. I wanted Lumen to offer an outside perspective from which I could examine my emotional state.

Using it sometimes felt like a guided tour through my own consciousness. Instead of handing me a complete account of who I was, the tool gave me space to work that out. I built it around the assumption that the intelligence is already there, in the user. The right question at the right moment might help unlock it.

Ghost writing: finding the story underneath

The course essay on ghost writing by Jesse Zhang also influenced the project. Its account of using AI to work through writer’s block amid grief made me think about the relationship between writing and understanding emotion. I have often struggled to follow my feelings back to their source. Lumen became a way to explore that chain and put my own story into words, with the model guiding the questions rather than supplying the story.

ELIZA: from reflection to continuity

ELIZA, the chatbot developed in 1966, was my strongest influence. Its question-driven exchanges showed how a system could offer material for reflection without understanding the person speaking to it. I wanted to extend that interaction with conversational context, allowing Lumen to draw connections across earlier and later messages.

In my testing, Lumen also sometimes pushed beyond surface-level remarks such as “I’m fine,” inviting a more specific description of what I was feeling. That possibility—asking a question that moves the conversation forward—mattered more to me than producing a longer response.

What I learned, and what comes next

The hardest part was defining consistent behavior in a probabilistic system. I spent hours adjusting the system prompt, choosing models, and tuning generation parameters. Those changes shaped the conversation, but they did not give me complete control over it. Lumen remained a prototype.

My next priority was a more efficient memory system: one that could support longer, more coherent conversations without resending an ever-growing history. My hope was that better context management could help a smaller model ask more insightful questions. That is a direction for further work, rather than a result I had already achieved.

Building Lumen changed how I thought about AI. Its value, for me, was in helping me do the thinking myself.