thoughts.

reflections and musings

Movie: Good Will Hunting (1997)

   •   literature.

I rewatched Good Will Hunting and previously had thought that it was about the character developments of two lonely individuals, one who continues to push others away and another who has known what it's like to be alone for a long time. After this watch, I can't help but think it was the most likely friendship that could have possibly developed.


Will is a genius but has an ego like no other - a defense mechanism, requiring him to be tough to endure the pains of his childhood. When his ego is hurt, he can't submit nor can he admit that he is lesser. And this is why this relationship works. In the context of the movie, Sean is the first to have an explicitly stated strength that is greater than that of Will's. It was the first moment to crack into Will's ego and begin allowing himself to maybe, just maybe, bring him back down to earth.

Freshening Up on Math Again for Master's @ UIUC

   •   educational.

As an incoming computer science grad student at the University of Illinois - Urbana Champaign, I'm brushing up on my math knowledge as my core focus will be in machine learning and artificial intelligence. Trying to freshen up on linear algebra, calculus, and probability has brought me back to the nights at Olssen Hall loaded up on Red Bulls.


Resources

Beginning a Literature Section

   •   literature.

Now that I'm adding a tab for this on my website, I hope that I remember it exists and continue to write my thoughts here about pieces outside of technical learning.

Building a Knowledge Base for AI Applications

   •   professional.

Context

I'm building an AI application and taking on context engineering challenges. There's a lot of domain specific knowledge that an LLM could not possibly know unless the AI has worked for the company for a long time. The LLM is like a new intern that can learn and do everything quicker than a person can but just needs to know how.


Overview

I created a project where we generate embeddings for common questions and definitions along with the context associated to them (which will be provided to the LLM), and we added that to our vector store. When our application is presented with a user query, we create embeddings from it, reach out to the vector store, retrieve n documents, run a reranker, and use topm documents as context for the LLM.


Learnings

  • More dimensions do not mean that the retrieval is better. In fact, because the data we were embedding was short and from a next-token-prediction perspective, very similar, the retrieval was poor. Once we used an embedding model with fewer dimensions, the recall was much higher and consistent.
  • Reranker saves the day. Even if recall is good, it may not be the top choice from our retrieval. Writing an LLM-based reranker made the passed-in context much more relevant for the user's ask.
  • Evaluation frameworks are crucial. We would not have known the previous two if it had not been for the evaluation metrics I wrote to measure recall, precision, and MRR. With a non-deterministic system like an AI application, evaluations for both pre- and post-deployment are critical and should not be ignored for the sake of getting the feature out quicker.

Losing a Love

   •   personal.

It puts my heart at peace that you are in a better place.


The sacrifices you've had to make to give your grandchildren the best life possible will never be forgotten or unappreciated.


Please watch over me from above.


I think about the 주먹밥 you made me every morning before school.

Building the SeatGeek MCP Server

   •   technical.

I wanted to build an MCP server of a platform that I use quite often. I noticed that SeatGeek had a developer API but I didn't see an MCP server that could allow me to use it from an MCP client. So I thought, "why not build one myself?" It gave me the opportunity to learn more about how to build an MCP server from scratch. I used Typescript to implement this project, and I was able to run it in both Claude Desktop and OpenWebUI/Ollama.


Biggest Takeaway

Building tools is not so easy. I used to think that a tool was just a simple interface to call an API, but when an endpoint has many flexible parameters, the LLM opts to use them as much as possible. For example, many public/developer APIs offer a free-search parameter. In the SeatGeek API, it was the "q" parameter. Every search ended up using the "q" parameter, which often brought back poor results. It was even worse for some APIs where "q" could search both performers and events together. So my solution was to expose more structured, yet flexible parameters. I separately evaluated the user's query to determine possible "event_q" and "performers_q" parameters and individually ran them on an event search query and a performer search query, then aggregated the results. Tool calls have to be designed carefully to avoid ambiguity and poor results.


Interesting Fact

Because no one has built an MCP server for SeatGeek, I am the top Google Search result and am even included by responses from ChatGPT, Gemini, and Claude when asked about the SeatGeek MCP server. It's funny, and it's like a UFC belt. Just waiting for someone to take it away from me.

Team Shake Up

   •   professional.

For the first time in my career, I experienced a team shake-up where the most experienced engineers and manager on the team have moved to a new one. Perhaps the first of many.


Gratitude

Giving thanks to my manager for teaching me how to grow as a software engineer as quickly as possible. He taught me how to push hard to achieve my own goals that benefit both me and the team. Always gave me the opportunity to work on the most challenging problems that helped me grow in as many as aspects as possible.


Giving thanks to my mentor for teaching me what it means to be a mentor. Truly the best mentor I could have possibly asked for. I remember him helping me once at midnight because he saw that I was online. Investing time in new team members' growth truly accelerates the team's overall capabilities. I will pay it forward as you did.

Making petershin.dev

   •   technical.

This is something that every software engineer should make for the sake of practice and self-expression, and I finally got around to making one. Nothing fancy, but I had a lot of fun developing my technical skills and also found the designing process compelling. I'm more of a coffee-and-a-book-looking-out-into-a-flat-meadow kind of guy, so designing a website where it feels calm and soothing was the goal, and I think I achieved that for the most part.


I hope to add new skills, projects, and career developments to this site as I continue to grow in my search for challenge, peace, and adventure. Basically just saying let's not forget (Peter) that this site you built actually exists.


This was built using Next.js and Typescript.