How Curator caches responses so you can resume failed runs and reuse finished ones.
Curator caches the output of every LLM call. This helps in two cases.
Recovery. A long run can fail or stop part way. When you start it again, Curator keeps the responses it already has and only sends the requests that are missing.
Reuse. In a pipeline with several steps, you often change a later step and run the whole pipeline again. Curator reads the earlier steps from the cache, so they cost no time or money.
To see the cache work, run this code twice. The second run reads the response from the cache and does not call the model.
from bespokelabs import curatorllm = curator.LLM(model_name="gpt-4o-mini")poem = llm("Write a poem about the importance of data in AI.")print(poem.dataset.to_pandas())
If the cache directory gets too large or is corrupt, delete it.
rm -rf ~/.cache/curator
This deletes all cached responses, and Curator will call the models again on the next run.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Bespoke Labs","colors":{"primary":"#11484E","light":"#CED9D0","dark":"#11484E"},"logo":{"light":"https://mintcdn.com/bespoke-labs/nC5kUDiXmNvTys-q/logo/light.svg?fit=max\u0026auto=format\u0026n=nC5kUDiXmNvTys-q\u0026q=85\u0026s=171de5f01730190bc7bffb17a5c22d10","dark":"https://mintcdn.com/bespoke-labs/nC5kUDiXmNvTys-q/logo/dark.svg?fit=max\u0026auto=format\u0026n=nC5kUDiXmNvTys-q\u0026q=85\u0026s=78f2a620be45061fac8b5b3d73c314b6","href":"https://bespokelabs.ai"},"favicon":"https://mintcdn.com/bespoke-labs/nC5kUDiXmNvTys-q/favicon.svg?fit=max\u0026auto=format\u0026n=nC5kUDiXmNvTys-q\u0026q=85\u0026s=f8f532e2c437caee65fbe44df1d89591","background":{"color":{"light":"#F7F4ED","dark":"#0E1A1B"}},"navbar":{"primary":{"type":"button","label":"Get an API key","href":"https://console.bespokelabs.ai/home/keys"}},"footer":{"socials":{"github":"https://github.com/bespokelabsai","website":"https://bespokelabs.ai"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/bespokelabsai"},{"anchor":"Console","icon":"key","href":"https://console.bespokelabs.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"bespoke-labs","hasAudioNarration":false,"actualSubdomain":"bespoke-labs","customDomains":["docs.bespokelabs.ai"],"gitSource":{"type":"github","owner":"bespokelabsai","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6aed8418e36b681e507fea45","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Curator","count":20},{"language":"default","tag":"Guides","count":11},{"language":"default","tag":"Nimble","count":8},{"language":"default","tag":"Get started","count":7},{"language":"default","tag":"Core features","count":4},{"language":"default","tag":"Recipes","count":4},{"language":"default","tag":"API reference","count":2},{"language":"default","tag":"Nimble API","count":2},{"language":"default","tag":"Reference","count":1},{"language":"default","tag":"Fine-tuning","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"curator/caching","slug":"/curator/caching","pageMetadata":{"title":"Caching and recovery","description":"How Curator caches responses so you can resume failed runs and reuse finished ones.","href":"/curator/caching"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"How Curator caches responses so you can resume failed runs and reuse finished ones.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Curator caches the output of every `,_jsx(_components.code,{children:`LLM`}),` call. This helps in two cases.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Recovery.`}),` A long run can fail or stop part way. When you start it again, Curator keeps the responses it already has and only sends the requests that are missing.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reuse.`}),` In a pipeline with several steps, you often change a later step and run the whole pipeline again. Curator reads the earlier steps from the cache, so they cost no time or money.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`To see the cache work, run this code twice. The second run reads the response from the cache and does not call the model.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` bespokelabs `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` curator`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`llm `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` curator.LLM(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`model_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"gpt-4o-mini\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`poem `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` llm(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Write a poem about the importance of data in AI.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(poem.dataset.to_pandas())`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`turn-off-caching`,children:`Turn off caching`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`CURATOR_DISABLE_CACHE`}),` before you run your code.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` CURATOR_DISABLE_CACHE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`change-the-cache-directory`,children:`Change the cache directory`}),`\n`,_jsxs(_components.p,{children:[`Curator saves the cache in `,_jsx(_components.code,{children:`~/.cache/curator`}),` by default. You can change this in two ways.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Set the `,_jsx(_components.code,{children:`CURATOR_CACHE_DIR`}),` environment variable to the directory you want.`]}),`\n`,_jsxs(_components.li,{children:[`Pass `,_jsx(_components.code,{children:`working_dir`}),` when you call the `,_jsx(_components.code,{children:`LLM`}),` object, e.g., `,_jsx(_components.code,{children:`llm(\"Write a poem.\", working_dir=\"/path/to/my/poems\")`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-decides-a-cache-hit`,children:`What decides a cache hit`}),`\n`,_jsx(_components.p,{children:`Curator gives each run a fingerprint. Two runs share a cache entry when all of these are the same.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`The input dataset.`}),`\n`,_jsxs(_components.li,{children:[`The `,_jsx(_components.code,{children:`prompt`}),` method.`]}),`\n`,_jsx(_components.li,{children:`The model name.`}),`\n`,_jsx(_components.li,{children:`The response format.`}),`\n`,_jsx(_components.li,{children:`Whether the run uses batch mode.`}),`\n`,_jsxs(_components.li,{children:[`The generation parameters, e.g., `,_jsx(_components.code,{children:`temperature`}),`.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`parse`}),` method is not part of the fingerprint. If you change only `,_jsx(_components.code,{children:`parse`}),`, Curator reuses the cached responses and runs the new `,_jsx(_components.code,{children:`parse`}),` on them.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-is-in-the-cache-directory`,children:`What is in the cache directory`}),`\n`,_jsx(_components.p,{children:`This part may change in future versions. The cache directory holds these items.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`metadata.db`}),`, a SQLite database with details about each run.`]}),`\n`,_jsx(_components.li,{children:`One directory per run, named after the run’s fingerprint.`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`5`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`ls`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.cache/curator`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# 032bc5ead2892f8f 6d1f31229726231d`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# 137851647e75f9a7 91f4ad23d5821c9f`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# 24b1d8917f7ef6f1 a2a3c8e5a58e3fc3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# metadata.db`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsx(_components.p,{children:`If the cache directory gets too large or is corrupt, delete it.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`rm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -rf`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ~/.cache/curator`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`This deletes all cached responses, and Curator will call the models again on the next run.`})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Caching and recovery","description":"How Curator caches responses so you can resume failed runs and reuse finished ones.","href":"/curator/caching"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Turn off caching","slug":"turn-off-caching","depth":2,"children":[]},{"title":"Change the cache directory","slug":"change-the-cache-directory","depth":2,"children":[]},{"title":"What decides a cache hit","slug":"what-decides-a-cache-hit","depth":2,"children":[]},{"title":"What is in the cache directory","slug":"what-is-in-the-cache-directory","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"bespoke-labs","siteName":"Bespoke Labs","title":"Caching and recovery - Bespoke Labs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-30T21:08:22.849Z","originalFileLocation":"curator/caching.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"How Curator caches responses so you can resume failed runs and reuse finished ones.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Bespoke Labs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Caching and recovery - Bespoke Labs\">\u003cmeta data-mint-head property=\"og:description\" content=\"How Curator caches responses so you can resume failed runs and reuse finished ones.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Bespoke Labs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.bespokelabs.ai/curator/caching\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://bespoke-labs.mintlify.site/_mintlify/api/og/v2?division=Core+features\u0026amp;title=Caching+and+recovery\u0026amp;description=How+Curator+caches+responses+so+you+can+resume+failed+runs+and+reuse+finished+ones.\u0026amp;theme=34cbb9435b7dce8d52f7c693\u0026amp;signature=492952e915984cd098fa74122371bb6bd4db415b99f0cfa86d9d721968c0261f\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Caching and recovery - Bespoke Labs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"How Curator caches responses so you can resume failed runs and reuse finished ones.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://bespoke-labs.mintlify.site/_mintlify/api/og/v2?division=Core+features\u0026amp;title=Caching+and+recovery\u0026amp;description=How+Curator+caches+responses+so+you+can+resume+failed+runs+and+reuse+finished+ones.\u0026amp;theme=34cbb9435b7dce8d52f7c693\u0026amp;signature=492952e915984cd098fa74122371bb6bd4db415b99f0cfa86d9d721968c0261f\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/bespoke-labs/kAfbXmwob42TBPM5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Bespoke Labs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#11484E\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.bespokelabs.ai/curator/caching\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/curator/caching.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.bespokelabs.ai/#organization\",\"name\":\"Bespoke Labs\",\"url\":\"https://docs.bespokelabs.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/bespoke-labs/nC5kUDiXmNvTys-q/logo/light.svg?fit=max\u0026auto=format\u0026n=nC5kUDiXmNvTys-q\u0026q=85\u0026s=171de5f01730190bc7bffb17a5c22d10\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.bespokelabs.ai#website\",\"name\":\"Bespoke Labs\",\"url\":\"https://docs.bespokelabs.ai\",\"publisher\":{\"@id\":\"https://docs.bespokelabs.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.bespokelabs.ai/curator/caching#webpage\",\"url\":\"https://docs.bespokelabs.ai/curator/caching\",\"name\":\"Caching and recovery\",\"description\":\"How Curator caches responses so you can resume failed runs and reuse finished ones.\",\"dateModified\":\"2026-09-30T21:08:22.849Z\",\"isPartOf\":{\"@id\":\"https://docs.bespokelabs.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.bespokelabs.ai/curator/caching#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.bespokelabs.ai/curator/caching#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core features\",\"item\":\"https://docs.bespokelabs.ai/curator/structured-output\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caching and recovery\",\"item\":\"https://docs.bespokelabs.ai/curator/caching\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.bespokelabs.ai/curator/caching#article\",\"headline\":\"Caching and recovery\",\"name\":\"Caching and recovery\",\"description\":\"How Curator caches responses so you can resume failed runs and reuse finished ones.\",\"url\":\"https://docs.bespokelabs.ai/curator/caching\",\"mainEntityOfPage\":{\"@id\":\"https://docs.bespokelabs.ai/curator/caching#webpage\"},\"dateModified\":\"2026-09-30T21:08:22.849Z\",\"publisher\":{\"@id\":\"https://docs.bespokelabs.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.bespokelabs.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Bespoke Labs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Bespoke Labs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/curator/caching.md","siteName":"Bespoke Labs","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/bespokelabsai"},{"anchor":"Console","icon":"key","href":"https://console.bespokelabs.ai"}]},"tabs":[{"tab":"Nimble","pages":[{"title":"Nimble","href":""}]},{"tab":"Curator","groups":[{"group":"Get started","pages":[{"title":"Curator overview","sidebarTitle":"Overview","href":"/curator/overview"},{"title":"Curator quickstart","sidebarTitle":"Quickstart","href":"/curator/quickstart"},{"title":"Key concepts","href":"/curator/key-concepts"}]},{"group":"Core features","pages":[{"title":"Structured output","description":"Use Pydantic models to get typed responses and chain LLM calls into a pipeline.","href":"/curator/structured-output"},{"title":"Caching and recovery","href":"/curator/caching"},{"title":"Curator Viewer","description":"Watch and share your datasets in the hosted Curator Viewer while Curator generates them.","href":"/curator/viewer"},{"title":"Batch inference","href":"/curator/batch"}]},{"group":"Guides","pages":[{"title":"Online processing","href":"/curator/guides/online-processing"},{"title":"LiteLLM","href":"/curator/guides/litellm"},{"title":"vLLM","href":"/curator/guides/vllm"},{"title":"Ollama","href":"/curator/guides/ollama"},{"title":"Hugging Face Inference Providers","href":"/curator/guides/hf-inference-providers"},{"title":"Multimodal data","href":"/curator/guides/multimodal"},{"title":"Code execution","href":"/curator/guides/code-execution"}]},{"group":"Recipes","pages":[{"title":"Diverse QA dataset","href":"/curator/recipes/diverse-qa"},{"title":"SimpleStrat","href":"/curator/recipes/simplestrat"},{"title":"Reasoning traces","href":"/curator/recipes/reasoning-traces"},{"title":"Function calling data","href":"/curator/recipes/function-calling"}]},{"group":"Fine-tuning","pages":[{"title":"Aspect-based sentiment analysis","href":"/curator/finetuning/absa"}]},{"group":"Reference","pages":[{"title":"API reference","href":"/curator/api-reference"}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/authentication"}]}]},"basePath":"","title":"Caching and recovery - Bespoke Labs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":[],"chunks":[]}