# Cache Mode

Sometimes it is time-consuming to debug a Pro Config, since there might be a lot of AI widgets inside the workflow. Besides, debugging a Pro Config may cost a log of battery when some of the widgets are called repetitively.

To alleviate these issues, we release the **cache mode**, where the creator flexibly chooses which widget to skip during the workflow. When a widget is set to cache mode, it will be called only  once and store the outputs in our database. If the `module_config` is not changed, further calling the widget will simply return the previously stored outputs and cost zero battery. The cache  mode is very useful when you are building the workflow.&#x20;

The `cache` flag can be set either in the `automata` (when you want to use cache in the whole Pro Config) or in `state` (when you want to use cache in a specific state) or the `module_config` (when you want to debug a specific module). Note that the priority of the `debug` flag is `module_config > state > automata` , which means the value of `cache` set in the former would overwrite that in the latter.

Taking the simple demo in [Building Workflow](/proconfig-tutorial/tutorial/building-workflow.md) as an example:

```json
{
  "type": "automata",
  "id": "chat_demo",
  "initial": "chat_page_state",
  "properties": {
    "cache": true,
  }
  "states": {
    "chat_page_state": {
      "inputs": {
        "user_message": {
          "type": "IM",
          "user_input": true
        }
      },
      "tasks": [
        {
          "name": "generate_reply",
          "module_type": "AnyWidgetModule",
          "module_config": {
            "widget_id": "1744214024104448000", // GPT 3.5
            "system_prompt": "You are a teacher teaching Pro Config.",
            "user_prompt": "{{user_message}}",
            "output_name": "reply",
            "cache": true
          }
        },
        {
          "name": "generate_voice",
          "module_type": "AnyWidgetModule",
          "module_config": {
            "widget_id": "1743159010695057408", // TTS widget (Samantha)
            "content": "{{reply}}",
            "output_name": "reply_voice"
            "cache": true
          }
        }
      ],
      "render": {
        "text": "{{reply}}",
        "audio": "{{reply_voice}}"
      },
      "transitions": {
        "CHAT": "chat_page_state"
      }
    }
  }
}
```

here the two modules are set into cache mode and how it becomes:

<figure><img src="/files/YsAGgGMvobuWplNDtwVf" alt=""><figcaption></figcaption></figure>

We can see that both the results of LLM and TTS stay the same after the second chat. If we want to run the LLM, we can just set the debug as false:

```json
       {
          "name": "generate_reply",
          "module_type": "AnyWidgetModule",
          "module_config": {
            "widget_id": "1744214024104448000", // GPT 3.5
            "system_prompt": "You are a teacher teaching Pro Config.",
            "user_prompt": "{{user_message}}",
            "output_name": "reply",
            "debug": false
          }
        },
```

The results are as follows:

<figure><img src="/files/RTsgnCSmSEmQMb7JaFPC" alt=""><figcaption></figcaption></figure>

The response of LLM varies based on the user's input, while the output of TTS stays the same because the TTS widget is still in `cache` mode.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://myshell-wiki.gitbook.io/proconfig-tutorial/tools/cache-mode.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
