# Tracking Response Stage URL: /concepts/message-threads/thread-status You may want to show your users something unique during each stage of tambo's response generation process, rather than a static 'loading' message for the entire duration. To enable this, each thread has a `generationStage` property that can be used to track the progress of the response generation process. You can expose the generation stage ( or a value you derive from it ) to your users so they know what their AI assistant is doing. ```typescript title="generation-stage.tsx" const { generationStage } = useTamboThread(); ... if (generationStage === GenerationStage.CHOOSING_COMPONENT) { return
Tambo is choosing the best component to use...
; } if (generationStage === GenerationStage.FETCHING_CONTEXT) { return
Tambo is fetching additional data to hydrate the component...
; } ... ``` ### Stages A thread's generation stage is an enum with the following possible values: ```typescript title="generation stages" enum GenerationStage { IDLE = "IDLE", // The thread is idle ( initial stage ) CHOOSING_COMPONENT = "CHOOSING_COMPONENT", // Tambo is choosing the best component to use based on the user's message FETCHING_CONTEXT = "FETCHING_CONTEXT", // Tambo is fetching additional data to hydrate a chosen component HYDRATING_COMPONENT = "HYDRATING_COMPONENT", // Tambo is hydrating the component STREAMING_RESPONSE = "STREAMING_RESPONSE", // Tambo is streaming the response COMPLETE = "COMPLETE", // Tambo has completed successfully ERROR = "ERROR", // Tambo has encountered an error CANCELLED = "CANCELLED", // The latest message generation was cancelled. } ``` ### Status Message Instead of determining a custom message for each stage, you can use the `statusMessage` property, which is a context-aware string that describes the current stage of the generation process, as generated by Tambo. For example, if the generation was triggered by a user message asking about the weather in Tokyo, during the `CHOOSING_COMPONENT` stage the `statusMessage` might be something like `"Looking for a component to help with your request about the weather in Tokyo"`. Use this along with the `isProcessing` helper property which returns `true` if the `generationStage` is `CHOOSING_COMPONENT`, `FETCHING_CONTEXT`, `HYDRATING_COMPONENT`, or `STREAMING_RESPONSE`. ```typescript title="generation-stage.tsx" const { statusMessage, isProcessing } = useTamboThread(); if (isProcessing) { return
{statusMessage}
; } ```