Blog

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

28th June, 2026 - Vancouver, BC

Boxing and the Practice of Staying Present

A few notes from learning how quickly attention can leave the room.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

The first few minutes

I notice how much of my mind arrives somewhere else before the work has even begun. I can be standing still and already arranging the rest of the day replaying a conversation or deciding what I should have said. Boxing makes that habit unusually visible because the next instruction comes before I have finished following the last one. In those first few minutes presence is not a mood I summon so much as a series of small returns.

A stance to come back to

The basic instructions are almost reassuringly plain: notice the feet soften the knees keep the hands where they need to be breathe. None of this asks me to become dramatic or fearless. It asks me to feel the weight of my body and the distance in front of me with a little more accuracy. I find that the ordinary details are enough to interrupt a mind that is trying to turn every moment into a larger story.

What tension reveals

Tension shows up quickly and it is difficult to negotiate with once I notice it. A clenched jaw raised shoulders or a breath held too high in the chest says more than the explanations I might give myself afterward. I have been thinking about how often I mistake bracing for readiness. In practice being rigid does not make me more available to what is happening it only makes each correction feel larger than it is.

One thing at a time

There is relief in having only one thing to pay attention to for a moment. If I am working on a particular movement I do not need to solve the whole session or predict whether I will get it right later. I only need to notice what my body is doing now and make the next attempt a little cleaner. That narrowness feels less like limitation than permission to stop carrying so many unfinished thoughts at once.

The pause between rounds

I have come to like the small pause between rounds because it does not ask for a grand interpretation. It is a chance to drink water let the breathing settle and notice whether I am carrying frustration from the previous few minutes. Sometimes I am surprised by how quickly a small mistake becomes a private argument in my head. The pause gives me a place to leave that argument behind before it decides the next round for me.

Being corrected without drama

Corrections can be simple and specific which is part of what I appreciate about them. A hand is too low a foot has drifted a movement is rushed and then there is another chance to try. I am used to treating correction as evidence that I have missed something essential about myself. Here it often feels more practical than that like being reminded to look where I am going.

Leaving with less noise

I do not leave with a big lesson a new identity or a clean answer about discipline. I leave a little more aware of where my attention went and how gently I can bring it back. The room does not erase the rest of my life but it gives me a short stretch in which the rest can wait. That seems modest and lately I find modest things easier to trust.

When presence slips

Of course I do not stay present the whole time and it would be strange to expect that I could. A thought can pull me away in the middle of something simple and I can realize a few seconds later that I have been moving without really noticing what I am doing as though my body had continued while the rest of me stepped into another room. I used to treat that lapse as a failure as though attention should be held perfectly once it has been found but that expectation only gives the wandering more power. Now I am more interested in the return itself in the small choice to notice that I have left and not make a drama out of it. There is something humane in discovering that the mind wandered and choosing without much ceremony to come back to the feet the breath the distance and the next instruction.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

21st February, 2026 - Tokyo, Japan

Horse Riding, Balance, and Trust

Learning that balance is more listening than control.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

A different kind of balance

I used to think balance meant holding myself perfectly still as if steadiness were a pose I could achieve and keep. Riding has made it feel more like a conversation made of very small adjustments. The body is never really frozen and trying to make it so usually creates a new kind of stiffness. What I notice instead is the quieter work of responding before an imbalance has become a problem.

Listening through the body

There is a useful humility in paying attention to another body that is larger alert and not interested in my private explanations. My mood and movements are not contained inside me once I am riding. A hurried cue a tense leg or a distracted posture becomes part of what is being communicated. I find that awareness clarifying because it makes attention less abstract and more considerate.

The temptation to overcorrect

When I feel uncertain my instinct is to do too much and do it quickly. I want to correct every wobble at once which can turn a small moment of uncertainty into a louder one. The better response is often smaller slower and easier to feel. It takes more patience than I expect to wait long enough to learn whether a small adjustment was already enough.

Trust without certainty

Trust has not meant assuming everything will go smoothly or pretending that uncertainty is not there. It has meant showing up carefully enough to respond when something changes. There is a difference between being careless and being willing to stay responsive. I have been thinking about trust as that willingness to keep noticing rather than a promise that nothing uncomfortable will happen.

The feeling of rhythm

Some moments have a rhythm that I can only recognize after I stop trying to force them. The movement asks for timing not just effort and it is easy to mistake more effort for better timing. When the rhythm feels clearer I become less preoccupied with whether I look composed. I am simply trying to stay available to what is happening underneath me and around me.

Room for a beginner's mind

I do not find the experience neat or instantly intuitive which may be part of its value. There are many things to remember and sometimes remembering them all makes me forget the simplest one. I am learning to let not knowing be present without turning it into embarrassment. A beginner's mind is not always charming from the inside but it can make observation more honest.

What stays with me

I keep thinking about how balance depends on attention. It is not a fixed position so much as a conversation that keeps changing with both sides bringing something to it. The best moments do not feel like control in the usual sense. They feel more like cooperation which is quieter and more demanding than I first assumed.

Care as a form of attention

What stays with me most is the sense that care is visible before it is explained often in choices so small that they would be easy to overlook from the ground or dismiss as ordinary. It appears in how closely I pay attention how willingly I slow down and whether I keep treating the other body as a partner with its own signals rather than a piece of equipment for my own learning especially when I feel preoccupied. That is not a sentimental thought for me because the relationship is practical before it becomes poetic and it asks for consistency rather than a good intention held at a distance or a feeling I can claim once. It is a practical one because impatience has a texture and so does respect and both seem to travel through posture pace and the pressure of a cue even when I believe I am hiding them. Riding makes those textures easier to feel and I find that useful even when I am still learning what to do with them and even when I cannot name the whole lesson cleanly under the pressure of a real moment without turning it into a rule.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

9th October, 2025 - Mumbai, India

Learning to Think With My Hands Through Sculpting

Notes on making room for material, friction, and surprise.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

Before there is a plan

I am used to beginning with words outlines and a sense that I should know what I mean before I start. Working with material asks me to begin by looking touching and waiting a little longer. The first information is often not an idea but a weight a texture or the way a surface catches the light. I find that shift both disorienting and relieving because it makes room for thought that has not yet found a sentence.

The resistance matters

A surface that will not do exactly what I expect can be frustrating at first. It can also point toward a shape I would not have imagined if I were only looking at a screen or a sketch. The material has its own limits and those limits are not merely obstacles to get around. Sometimes they are the only reason I pause long enough to see a different possibility.

Small decisions

The work seems to move through tiny choices: add remove turn smooth roughen or leave it alone. Each one feels modest in isolation but together they change the whole thing. I have been struck by how quickly a small mark can alter the balance of a form. It makes me less interested in dramatic gestures and more attentive to the consequence of the next small decision.

Letting it be awkward

I am learning not to rush past the clumsy stage. Sometimes the awkward part is simply evidence that my hands are still finding their way not proof that the work has failed. It is tempting to smooth over uncertainty because a clean surface can look like progress. But I find that an early awkwardness sometimes contains more life than the version I would make by trying to tidy everything too soon.

Looking from different sides

A form changes when I walk around it and that fact feels almost embarrassingly obvious until I experience it. What looks complete from one angle can become thin heavy or unresolved from another. I do not mean this as a lesson about everything else in life. I only notice that changing my position is sometimes more useful than staring harder at the same problem.

The value of stopping

There are moments when the most useful action is to stop touching the work. That can feel passive especially when I want an answer from the material right away. A pause lets the last change become visible instead of being buried under the next one. It also gives me a chance to ask whether I am responding to what is there or only to the discomfort of waiting.

A slower kind of thought

Sculpting gives me a way to think that is less tidy than a sentence and less eager to arrive at a conclusion. I do not need to name every decision for it to matter. The hands can hold a question for a while revise it and make it visible without fully resolving it. I find that reassuring especially when I do not yet know what I mean.

What remains unfinished

I am drawn to the point when a piece seems finished enough to stand on its own but still carries evidence of its making including the small uncertainties and revisions that brought it there. A perfectly resolved surface can be beautiful yet I also like seeing the record of a hand changing its mind pressing too hard taking something away or deciding that a previous mark should remain. The unfinished quality is not always a mistake or a lack of care and I do not think it needs to be defended as a virtue every time it appears. Sometimes it is simply the part that keeps the work open to another look because it has not closed every door behind the viewer. I have been thinking about how much I value that openness when I let myself stop asking for a final answer too quickly or treating uncertainty as a problem that must immediately be hidden from view smoothed away or explained before it has taught me anything.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

17th June, 2025 - Mexico City, Mexico

Klimt and the Courage to Make Work That Is Too Much

What I notice when decoration refuses to apologize.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

Looking for the edges

When I look at Klimt I keep noticing how much is allowed to happen at once. Pattern gold faces ornament and flatness all seem to make room for one another without agreeing to become simple. My eye keeps moving because there is no single tidy place to settle. I have been thinking about that abundance not as decoration piled on top of an image but as part of the image's way of asking to be looked at.

My instinct to edit

I often trust restraint because it feels safe legible and easy to defend. These paintings make me wonder when restraint is clarity and when it is simply hesitation wearing a cleaner outfit. There are times when taking something away reveals what matters. There are also times when removing the strange dense or excessive part only makes the work less willing to tell the truth about its own appetite.

Decoration as attention

The detail does not feel like an afterthought to me. It feels like a record of someone staying with a surface long enough to keep seeing more in it even after a quicker version might have seemed finished. I find myself looking at repeating shapes and wondering how repetition changes when it is made with real attention. It can become less like filler and more like a rhythm that keeps the eye awake.

Pleasure and discomfort

Some parts draw me in while others make me pull back and I like that I do not have to choose a single clean response. Beauty can be immediate but it can also feel withholding or a little too close. The ornate surface does not erase the faces at its center and the faces do not make the surface behave. That unresolved relationship is part of why I keep returning to the work in my mind.

A different kind of flatness

I am interested in the way flatness can still feel layered. A patterned field may seem to press forward while a face appears quiet inside it and the space becomes less like a window than a surface with its own gravity. I do not have the vocabulary of an art historian for all of this. I only know that the arrangement slows my looking down because it refuses to give depth in the usual comfortable way.

Attention takes time

The more I look the less useful a quick verdict becomes. I might first call something beautiful busy excessive or strange but none of those words has much patience in it. Attention changes what I can see because it makes room for a second and third impression. I have been trying to value that longer looking without pretending it always leads to certainty.

Permission to notice excess

I leave with a renewed respect for work that risks being too ornate too intimate or too strange. Excess can be empty of course but it can also carry feeling that restraint would flatten. What I take from Klimt is not permission to add more to everything. It is a reminder to ask whether my urge to simplify comes from discernment or from fear of being seen wanting too much.

Looking again

Looking again is different from merely looking longer because it asks me to give up the small confidence of a first impression. The first glance can be dazzled by the gold or caught by the most obvious figure while the next glance begins to notice how many decisions are quietly holding the composition together and how those decisions move the eye away from the obvious center. I do not need to solve those decisions to feel their effect or to turn them into an argument about what the painting finally means. It is enough to recognize that my first response was partial and that the painting has not run out of things to say after I have used up my quickest description of it. That possibility makes the experience feel generous without making it easy which is one of the forms of generosity I value most in art.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

13th February, 2025 - Peru

What Music Has Taught Me About Attention

A few small observations about listening all the way through.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

The urge to skip ahead

I catch myself wanting the familiar part of a song before it arrives. Sometimes I want the chorus sometimes the line I already know and sometimes I only want the feeling I associate with it. Listening has made that impatience easier to spot. The beginning of a song can seem like an obstacle when I have already decided which moment is supposed to matter.

Hearing the room around it

A track can change when I notice the space around a voice the small sound at the end of a phrase or an instrument that has been there quietly all along. There is often more happening than I first hear because I tend to follow the loudest or most familiar thing. I find that a second listen is not simply repetition. It is a chance to let a different detail become the center for a while.

Repetition is not empty

The same song can meet me differently on different days. The song stays put but my attention brings a different weather to it and that changes what seems important. A melody I once passed over can suddenly feel like the whole reason to return. I have been thinking about how repetition can reveal change even when the object of attention has not changed at all.

Letting a pause remain a pause

I like the moments where nothing rushes in to fill the space. A pause a breath or a held note can make the next sound feel less automatic as if it has been given room to arrive. I notice how quickly I want that space to be filled when I am distracted. When I let it remain a pause the silence starts to feel like part of the music rather than an absence inside it.

Mood is part of the room

I do not arrive at music as a blank listener. A tired day a restless morning or a quiet evening changes what I hear and what I need from it. That does not make the listening less real. It makes it more honest to admit that the room inside me is part of the experience too.

Listening without collecting

There is an impulse to turn every song into something I should rank recommend understand or attach to a larger story. I am trying to leave a little space between hearing something and making use of it. Some music can simply accompany a walk a meal or a moment of looking out a window. I find that this kind of listening has its own value precisely because it does not need to prove anything.

Listening as a small practice

I do not always listen carefully and that is fine. But when I do it reminds me that attention can be quiet ordinary and enough for a few minutes. I am not trying to become a better listener in any heroic sense. I only want to notice when I have rushed past something that was already asking to be heard.

The end of a song

I am often surprised by how quickly I move on when a song ends as though its final seconds were only a signal to begin choosing the next thing from an endless shelf. Another track begins a notification appears or I reach for something else before the last sound has fully disappeared and before I have noticed what the ending changed in the room around me. Sometimes I try to wait for a few seconds instead not as a rule but as a way of letting the song finish on its own terms and allowing my response to arrive after it. The silence afterward is not profound but it lets the song keep its shape for a moment before it becomes part of a stream of other things competing for my attention each asking to be chosen quickly. I find that small delay helps me hear the ending as an ending rather than as the brief gap before I ask for more and it makes the next sound feel slightly less inevitable and more like a new arrival with its own small demands.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

12th January, 2020 - Boston, MA

Learn and Understand Recursion in JavaScript

I’ll walk you through two popular JS recursion examples in 10 minutes so you can finally understand how recursion works in JavaScript.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

What is Recursion?

Recursion is simply when a function calls itself.

Lets jump right in and take a look at probably the most famous recursion example. This example returns the factorial of a supplied integer:

 function factorial(x) {
if (x < 0) return;
if (x === 0) return 1;
return x * factorial(x - 1);
}

factorial(3);
// 6

Woah. It’s Okay if that makes no sense to you.The important part is happening on line 4:return x * factorial(x — 1);. As you can see the function is actually calling itself again (factorial(x-1)) but with a parameter that is one less than when it was called the first time. This makes it a recursive function.

Before I break down that code example any further, it’s important you understand what factorials are.

To get the factorial of a number you multiply that number by itself minus one until you reach the number one.

Example 1: The factorial of 4 is 4 * 3 * 2 * 1 or 24.

"Example 2: The factorial of 2 is just 2 * 1 or "2.

Awesome now that our High School Math lesson is over we can return to the good stuff!

The three key features of recursion

All recursive functions should have three key features:

A Termination Condition

Simply put: if(something bad happend)[ STOP }; The Termination Condition is our recursion fail-safe. Think of it like your emergency brake. It’s put there in case of bad input to prevent the recursion from ever running. In our factorial example if(x < 0) return;is our termination condition. It’s not possible to factorial a negative number and thus we don’t even want to run our recursion if a negative number is input.

A Base Case

Simply put: if(this happens) [ Yay! We're done }; The Base Case is similar to our termination condition in that it also stops our recursion. But remember the termination condition is a catch-all for bad data. Whereas the base case is the goal of our recursive function. Base cases are usually within an if statement. In the factorial example if(x === 0) return 1; is our base case. We know that once we’ve gotten x down to zero we’ve succeeded in determining our factorial!

Simply put: Our function calling itself. In the factorial examplereturn x * factorial(x — 1); is where the recursion actually happens. We’re returning the value of the number x multiplied by the value of whateverfactorial(x-1)evaluates to.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

22th July, 2024 - Toronto, CA

Implementing Retrieval-Augmented Generation (RAG) with LLMs

In this post, we’ll explore how RAG enhances Large Language Models (LLMs) by integrating real-time data retrieval, using simple examples to illustrate the process.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

What is Retrieval-Augmented Generation (RAG)?

RAG combines the power of LLMs with external knowledge retrieval.

Instead of relying entirely on pre-trained knowledge RAG retrieves relevant information from a connected source (like a database or API) and augments the response of the LLM in real-time.

 async function getAnswer(query) {
const documents = await retrieveRelevantDocs(query);
const prompt = buildPrompt(query documents);
return await llm.generate(prompt);
}

getAnswer("What are the symptoms of diabetes?");
// Returns accurate and current medical information

This method helps overcome some limitations of LLMs. LLMs may not have up-to-date information but with RAG the model retrieves data on-the-fly from external sources to enhance the response.

Let’s dive deeper into why RAG is useful and how it complements LLMs.

Think of RAG as a way to keep the LLM's answers accurate and relevant even after the model has been deployed.

Example 1: A legal advice chatbot retrieves the latest regulations to provide accurate responses.

Example 2: A medical assistant fetches recent journal publications when asked about new treatments.

These examples show how RAG ensures that AI applications stay relevant in dynamic fields.

How Does RAG Work?

RAG involves three main components:

1. Query and Document Retrieval

When a user makes a request the query is sent to a document store or external API to retrieve relevant data. Think of it as searching through a library to find the best books for your topic.

2. Augmenting the Prompt

The retrieved documents are embedded into the LLM prompt enhancing its response with external knowledge. This step ensures the response is not just based on the model's pre-trained data.const prompt = buildPrompt(userQuery retrievedDocs);

3. Generating the Response

Finally the LLM generates a response based on the augmented prompt producing accurate and contextual answers.return llm.generate(prompt);

RAG ensures that the model provides fact-based answers even when it didn’t originally know the information.

The retrieval step ensures that the AI isn't guessing or 'hallucinating' answers.

Example: Instead of relying on old data a travel assistant fetches live flight statuses to assist users.

This prevents outdated information from slipping through.

Applications of RAG with LLMs

Here are some common use cases where RAG with LLMs shines:

Customer Support Bots

Bots can fetch relevant knowledge base articles to solve user queries faster and more accurately.

Medical Assistants

LLMs with RAG integration pull the latest medical research to provide informed recommendations during consultations.

Legal Research

A legal AI assistant retrieves recent case law or statutes to answer complex legal questions accurately.

Benefits of RAG

1. Real-time Relevance: Ensures that responses are always up-to-date with the latest information.

2. Reduced Hallucination: By grounding responses in real data it minimizes the chances of incorrect or fabricated answers.

3. Enhanced Utility: Makes LLMs suitable for use in dynamic environments like healthcare finance and law.

With RAG applications powered by LLMs are more powerful accurate and trustworthy.

Bhimesh Chauhan profile avatar
Bhimesh Chauhan

14th September, 2024 - Toronto, CA

Fine-Tuning LLMs for Domain-Specific Applications

In this blog, I’ll walk you through the basics of fine-tuning LLMs and explain the steps required to make them more effective for specific tasks.

Blog article visual related to Bhimesh Chauhan's engineering and AI work

What is Fine-Tuning?

Fine-tuning involves adjusting the parameters of a pre-trained language model on new specialized data.

Pre-trained models like GPT or BERT are trained on large datasets containing general information but they may not perform well on niche topics like medical diagnoses or legal cases. Fine-tuning helps tailor these models to excel in specific domains.

 const fineTuneModel = async (dataset) => {
const model = await loadPretrainedModel("gpt-3.5-turbo");
model.train(dataset { epochs: 5 });
return model;
};
const medicalModel = fineTuneModel(medicalData);
// Model fine-tuned on medical notes

Fine-tuning helps overcome generalization issues. When LLMs are fine-tuned they become more focused and relevant for specific queries improving their performance on tasks related to the target domain.

Let’s dive deeper into why fine-tuning matters for real-world use cases.

Think of fine-tuning as adjusting a generic recipe to suit your specific taste. You retain the original recipe's structure but make changes to align with your personal preferences.

Example 1: A financial assistant chatbot fine-tuned on recent market trends can provide better advice compared to a general-purpose model.

Example 2: A customer support bot tailored to your business responds accurately to common issues and inquiries reducing response time and improving customer satisfaction.

How to Fine-Tune an LLM?

Fine-tuning can be broken down into a few key steps:

1. Data Preparation

Collect and clean your dataset. Ensure the text is properly formatted and labeled if necessary. For example if you're fine-tuning on medical notes each record should contain consistent terminology and structure.

2. Model Loading

Start by loading a pre-trained model like GPT or BERT from a model hub or library.const model = await loadPretrainedModel('bert-base');

3. Training the Model

Feed your specialized data into the model using your preferred framework (e.g. PyTorch TensorFlow). Make sure to adjust hyperparameters like the learning rate to avoid overfitting.model.train(data { batchSize: 16 epochs: 3 });

4. Evaluating and Fine-Tuning

Evaluate the fine-tuned model's performance using metrics like accuracy or F1-score. Continue adjusting the parameters as needed.

Remember: A good fine-tuning process requires careful evaluation to ensure the model generalizes well to unseen data.

Applications of Fine-Tuning

Fine-tuning LLMs opens up a world of possibilities:

Healthcare

A fine-tuned LLM can assist doctors by summarizing patient records and providing recommendations based on the latest research.

Finance

In the finance industry LLMs fine-tuned on stock data can generate accurate reports and forecasts.

Legal Advice

LLMs trained on legal documents can assist in drafting contracts and answering legal questions with precise language.

Key Benefits of Fine-Tuning

1. Increased Accuracy: Models become more reliable for specific tasks and queries.

2. Faster Response: Tailored models provide answers more efficiently improving user satisfaction.

3. Reduced Hallucination: By focusing on relevant data fine-tuned models are less likely to produce misleading information.

Fine-tuning is essential for LLMs to reach their full potential in real-world applications.

This site is hosted on Github | Ⓒ 2026 | Designed with ❤ by Bhimesh