Uses reward functions to reinforce models toward higher-quality responses.
Reinforcement tuning trains models to generate higher-quality responses by scoring candidate outputs and reinforcing preferred behaviors. SeekrFlow implements reinforcement tuning using group relative policy optimization (GRPO).For implementation details including dataset format and code examples, see the Reinforcement tuning SDK guide.
UI supportReinforcement tuning is available in the UI with mathematical accuracy as a reward function. User-defined reward functions are not currently supported in the UI but are available through the API and SDK.
Reinforcement tuning operates through a reinforcement learning process:
1
Generation: The model generates multiple candidate responses to each prompt.
2
Evaluation: A reward function scores each candidate based on quality criteria.
3
Optimization: Training gradients push the model toward generating higher-scoring responses.
Reward functions use one or more graders to score outputs on specific qualities like numerical accuracy, keyword matching, text similarity, or LLM-judged quality. The model learns to maximize expected reward across diverse prompts.
A reward function scores model outputs during training to reinforce desired behaviors. In SeekrFlow, reward functions are built from one or more graders — individual scoring operations that each evaluate a specific quality of the output.
Evaluates whether the model output is numerically correct. Useful for financial auditing, math, and other tasks with definite numerical answers.
String check
Evaluates whether the model output contains or matches a specific phrase. Useful for enforcing keyword usage or required terminology.
Text similarity
Evaluates how lexically similar the model output is to the reference answer. Useful for enforcing tone, style, or compliant language.
LLM (LLM-as-a-judge)
Uses an LLM to score how well the output matches the reference answer in meaning and quality. Useful for open-ended or subjective responses where exact or lexical matching is too rigid.
You can combine multiple graders into a single reward function by assigning weight percentages to each. This creates a hybrid reward signal tailored to your use case. For example, you might weight numerical accuracy at 80% and text similarity at 20% to reward both the mathematical correctness and formatting of the model’s answers.For implementation details and code examples, see the Reinforcement tuning SDK guide.
Reinforcement tuning learns quality patterns through reinforcement of high-scoring outputs. Unlike instruction fine-tuning, it doesn’t require explicit demonstrations of correct responses. Reinforcement tuning typically follows instruction fine-tuning in training pipelines — the instruction phase teaches domain knowledge, while reinforcement tuning refines response quality and alignment.Reinforcement tuning can be combined with LoRA for efficient training. The adapter learns preference patterns while the base model provides general capabilities, reducing compute requirements without sacrificing quality improvements.
Reinforcement-tuned models are deployed as standard model endpoints. The reinforced model behaviors are embedded in model parameters, so no special inference infrastructure is required. The model generates responses that reflect the learned quality preferences.
Last modified on August 1, 2026
⌘I
{"docsConfig":{"theme":"linden","$schema":"https://mintlify.com/docs.json","name":"Seekr Documentation","colors":{"primary":"#007774","light":"#00DAD3","dark":"#007774"},"logo":{"light":"https://mintcdn.com/seekr/xCjyiASvtfX59CGv/logo/light.svg?fit=max\u0026auto=format\u0026n=xCjyiASvtfX59CGv\u0026q=85\u0026s=5631304b029d4cfaefb138711ec30bd9","dark":"https://mintcdn.com/seekr/xCjyiASvtfX59CGv/logo/dark.svg?fit=max\u0026auto=format\u0026n=xCjyiASvtfX59CGv\u0026q=85\u0026s=5757dbcccbf86fd9503b6b579ffeabbe","href":"/"},"favicon":"https://mintcdn.com/seekr/xCjyiASvtfX59CGv/favicon.png?fit=max\u0026auto=format\u0026n=xCjyiASvtfX59CGv\u0026q=85\u0026s=7d7b7568b4fc9d19a790b3f0b5c28d87","appearance":{"default":"system"},"background":{"color":{"light":"#F7F7F7","dark":"#101010"}},"navbar":{"links":[{"href":"https://apps.seekr.com/signup?_gl=1*1t0lzvp*_gcl_au*MjY4NjQ1Mzg3LjE3ODEyNDExMjU.","label":"Get started"}],"primary":{"type":"button","label":"Request a demo","href":"https://www.seekr.com/request-a-demo/"}},"footer":{"socials":{"youtube":"https://www.youtube.com/@seekrtechnologies","x":"https://x.com/seekrtechnology","linkedin":"https://www.linkedin.com/company/seekrtechnologies"}},"seo":{"metatags":{"google-site-verification":"RDMpUYE1uCSa_-TiRs1E4lMyGuAOUVkzmji5t4kVsEM","canonical":"https://docs.seekr.com"}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"styling":{"eyebrows":"breadcrumbs","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/seekr/-zCoynlpxo7UthaS/images/og-background.png?fit=max\u0026auto=format\u0026n=-zCoynlpxo7UthaS\u0026q=85\u0026s=b40b0a1967ede7eaf3cdc61d29d8a437"},"interaction":{"drilldown":false},"metadata":{"timestamp":true},"navigation":{"global":{"tabs":[{"tab":"Self-managed","icon":"server","href":"/self-managed/flow"}],"anchors":[{"anchor":"About us","icon":"circle-info","href":"https://www.seekr.com/about/"},{"anchor":"Contact us","icon":"headset","href":"https://www.seekr.com/contact-us/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.seekr.com/resource-center/?type=blog"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"seekr","hasAudioNarration":false,"actualSubdomain":"seekr","customDomains":["docs.seekr.com"],"gitSource":{"type":"github","owner":"seekr-technologies","repo":"documentation","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"c12cb1b3-0c09-4767-91ae-5e137415631f","liveDeploymentHistoryId":"6ae2118b9297755be1a0052c","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae2118b9297755be1a0052c"},"feedback":{"thumbs":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae2118b9297755be1a0052c","clientVersion":"0.0.4005","searchFilterCounts":[{"language":"default","tag":"SeekrFlow","count":260},{"language":"default","tag":"Developer","count":184},{"language":"default","tag":"API Reference","count":149},{"language":"default","tag":"Endpoints","count":147},{"language":"default","tag":"Guides","count":50},{"language":"default","tag":"SDK","count":35},{"language":"default","tag":"SeekrFlow SDK","count":35},{"language":"default","tag":"Agents","count":29},{"language":"default","tag":"Self-managed","count":29},{"language":"default","tag":"Deployment guides","count":27}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"print.css","content":"@media print{#banner,#footer,#navbar,#pagination,#sidebar,#table-of-contents,.contextual-feedback-container,advanced-footer,footer{display:none!important}.card,.card *,callout{background:0 0!important}.card,.card *{border:0!important;box-shadow:none!important;border-radius:0!important;ring:none!important}card-group,columns{display:block!important}callout{border-left:2px solid #000!important;padding:.25rem .5rem!important}#content-area{width:100%!important;max-width:100%!important;margin:0!important;padding:0!important}code-block,step{page-break-inside:avoid}}"},{"filePath":"style.css","content":"/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 400;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 500;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\n/* cyrillic-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');\n unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;\n}\n/* cyrillic */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');\n unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;\n}\n/* symbols2 */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');\n unicode-range: U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;\n}\n/* vietnamese */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');\n unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;\n}\n/* latin-ext */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');\n unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;\n}\n/* latin */\n@font-face {\n font-family: 'Geist Mono';\n font-style: normal;\n font-weight: 600;\n font-display: swap;\n src: url(/_mintlify/assets/fonts/google/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;\n}\ntable code{white-space:nowrap}.font-mono,code,kbd,pre,pre code,samp{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace!important}.prose :not(pre)>code{font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace!important;padding-left:.2em!important;padding-right:.2em!important;background-color:rgba(65,68,71,.08)!important}.dark .prose :not(pre)>code{background-color:rgba(255,255,255,.1)!important}.breadcrumb-item,.breadcrumb-item a,.breadcrumb-item svg,.eyebrow{color:#d03722!important;font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace!important;text-transform:uppercase!important;font-weight:600!important}.dark .breadcrumb-item,.dark .breadcrumb-item a,.dark .breadcrumb-item svg,.dark .eyebrow{color:#e2513d!important}.breadcrumb-item svg{opacity:.55!important}.breadcrumb-item a:hover{color:#a82b1b!important}.dark .breadcrumb-item a:hover{color:#f2705c!important}.card,.code-group{border-color:#d5d6d7!important}.dark .card{background-color:#272628!important;border-color:#414447!important}.card,.code-block-background,.code-group{background-color:#fff!important}.code-group .code-block-background{background-color:#f7f7f7!important}.dark .code-group{border-color:#414447!important}.dark .code-block-background,.dark .code-group{background-color:#272628!important}.prose,.prose b,.prose h1,.prose h2,.prose h3,.prose h4,.prose h5,.prose h6,.prose strong,.prose th{color:#101010!important}.dark .prose,.dark .prose b,.dark .prose h1,.dark .prose h2,.dark .prose h3,.dark .prose h4,.dark .prose h5,.dark .prose h6,.dark .prose strong,.dark .prose th{color:#fff!important}.prose-gray{--tw-prose-bullets:#101010!important;--tw-prose-counters:#101010!important}.dark .prose-gray{--tw-prose-bullets:#FFFFFF!important;--tw-prose-counters:#FFFFFF!important}.prose :is(p, li, td, th, dd, blockquote, h1, h2, h3, h4, h5, h6) a,.prose :is(p, li, td, th, dd, blockquote, h1, h2, h3, h4, h5, h6) a *{color:#007774!important}.dark .prose :is(p, li, td, th, dd, blockquote, h1, h2, h3, h4, h5, h6) a,.dark .prose :is(p, li, td, th, dd, blockquote, h1, h2, h3, h4, h5, h6) a *{color:#00dad3!important}[data-component-part=step-number] .rounded-full{background-color:transparent!important;border:2px solid #d5d6d7!important;border-radius:9999px!important;color:#101010!important;font-family:\"Geist Mono\",ui-monospace,SFMono-Regular,Menlo,monospace!important}[data-component-part=step-number] .rounded-full *{color:#101010!important}.dark [data-component-part=step-number] .rounded-full{border-color:#414447!important;color:#fff!important}.dark .callout [data-component-part=callout-content],.dark [data-component-part=step-number] .rounded-full *{color:#fff!important}[data-component-part=step-line]{background-image:linear-gradient(to bottom,#d5d6d7,#d5d6d7 80%,transparent)!important}.dark [data-component-part=step-line]{background-image:linear-gradient(to bottom,#414447,#414447 80%,transparent)!important}.callout [data-component-part=callout-content]{color:#101010!important}.callout[data-callout-type=info]{background-color:rgba(65,68,71,.06)!important;border-color:#d5d6d7!important}[data-callout-type=info] [data-component-part=callout-icon] svg{color:#414447!important}.dark .callout[data-callout-type=info]{background-color:rgba(255,255,255,.05)!important;border-color:#595c5f!important}.dark [data-callout-type=info] [data-component-part=callout-icon] svg{color:#d5d6d7!important}.callout[data-callout-type=tip]{background-color:#e9fff5!important;border-color:#79eeb7!important}[data-callout-type=tip] [data-component-part=callout-icon] svg{color:#269b63!important}.dark .callout[data-callout-type=tip]{background-color:rgba(38,155,99,.2)!important;border-color:#269b63!important}.dark [data-callout-type=tip] [data-component-part=callout-icon] svg{color:#3fd78f!important}.callout[data-callout-type=note]{background-color:#e0efff!important;border-color:#8cc6ff!important}[data-callout-type=note] [data-component-part=callout-icon] svg{color:#0b5eb8!important}.dark .callout[data-callout-type=note]{background-color:rgba(11,94,184,.2)!important;border-color:#0b5eb8!important}.dark [data-callout-type=note] [data-component-part=callout-icon] svg{color:#44b4ff!important}.callout[data-callout-type=warning]{background-color:#fff7e8!important;border-color:#ffc369!important}[data-callout-type=warning] [data-component-part=callout-icon] svg{color:#e18f0d!important}.dark .callout[data-callout-type=warning]{background-color:rgba(225,143,13,.2)!important;border-color:#e18f0d!important}.dark [data-callout-type=warning] [data-component-part=callout-icon] svg{color:#ffba4b!important}.callout[data-callout-type=danger]{background-color:#fff2f2!important;border-color:#ff7077!important}[data-callout-type=danger] [data-component-part=callout-icon] svg{color:#d30214!important}.dark .callout[data-callout-type=danger]{background-color:rgba(211,2,20,.2)!important;border-color:#d30214!important}.dark [data-callout-type=danger] [data-component-part=callout-icon] svg{color:#ff7077!important}svg[id^=mermaid-] .node circle,svg[id^=mermaid-] .node path,svg[id^=mermaid-] .node polygon,svg[id^=mermaid-] .node rect{fill:#fff!important;stroke:#007774!important}.dark svg[id^=mermaid-] .node circle,.dark svg[id^=mermaid-] .node path,.dark svg[id^=mermaid-] .node polygon,.dark svg[id^=mermaid-] .node rect{fill:#272628!important;stroke:#00dad3!important}svg[id^=mermaid-] .node .label,svg[id^=mermaid-] .node text,svg[id^=mermaid-] .nodeLabel{color:#101010!important;fill:#101010!important}.dark svg[id^=mermaid-] .node .label,.dark svg[id^=mermaid-] .node text,.dark svg[id^=mermaid-] .nodeLabel{color:#fff!important;fill:#fff!important}svg[id^=mermaid-] .edgePath .path,svg[id^=mermaid-] .flowchart-link{stroke:#414447!important}svg[id^=mermaid-] .marker,svg[id^=mermaid-] marker path{fill:#414447!important;stroke:#414447!important}.dark svg[id^=mermaid-] .edgePath .path,.dark svg[id^=mermaid-] .flowchart-link{stroke:#595c5f!important}.dark svg[id^=mermaid-] .marker,.dark svg[id^=mermaid-] marker path{fill:#595c5f!important;stroke:#595c5f!important}svg[id^=mermaid-] .edgeLabel,svg[id^=mermaid-] .edgeLabel p{color:#101010!important;background-color:#f7f7f7!important}svg[id^=mermaid-] .edgeLabel rect{fill:#f7f7f7!important;opacity:1!important}.dark svg[id^=mermaid-] .edgeLabel,.dark svg[id^=mermaid-] .edgeLabel p{color:#fff!important;background-color:#101010!important}.dark svg[id^=mermaid-] .edgeLabel rect{fill:#101010!important}html[data-current-path=\"/\"] .nav-tabs,html[data-current-path=\"/\"] [data-component-part=products-selector-trigger]{display:none!important}html[data-current-path^=\"/self-managed\"] .nav-tabs .nav-tabs-item[href=\"/self-managed/flow\"]:last-child{display:none!important}div:has(>[data-component-part=version-select-trigger]){order:1!important}"}],"page":{"pagePath":"flow/components/fine-tuning/grpo","slug":"/flow/components/fine-tuning/grpo","pageMetadata":{"title":"Reinforcement tuning (GRPO)","description":"Uses reward functions to reinforce models toward higher-quality responses.","href":"/flow/components/fine-tuning/grpo"},"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: \"Uses reward functions to reinforce models toward higher-quality responses.\"\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];const DownloadFile=({href,filename,label})=>{const _components={a:`a`,..._provideComponents()},{Icon}=_components;if(!Icon)_missingMdxReference(`Icon`,true);return _jsx(`div`,{className:`not-prose`,style:{marginTop:`4px`,marginBottom:`16px`},children:_jsxs(_components.a,{href,download:filename,className:`mint-inline-flex mint-items-center mint-gap-2 mint-border mint-border-[#00dad3] mint-bg-[#00dad3]/10 mint-text-[#007774] dark:mint-text-[#00dad3] mint-no-underline`,style:{padding:`6px 14px`,borderRadius:`8px`,fontSize:`14px`,fontWeight:`600`},children:[_jsx(Icon,{icon:`download`,size:16}),label||`Download file`]})})};const SupportedOn=({ui=false,api=true,sdk=true,sdkVersion=null})=>{const{Icon}=_provideComponents()||{};if(!Icon)_missingMdxReference(`Icon`,true);return _jsxs(`div`,{className:`not-prose`,children:[_jsxs(`div`,{className:`mint-inline-flex mint-flex-wrap mint-items-center mint-gap-x-5 mint-gap-y-2 mint-px-4 mint-py-2.5 mint-rounded-lg mint-border mint-border-[#00dad3] mint-bg-[#00dad3]/10 mint-text-sm`,children:[_jsx(`span`,{className:`mint-font-bold mint-text-black dark:mint-text-white mint-whitespace-nowrap`,children:`Supported on`}),_jsxs(`div`,{className:`mint-flex mint-items-center mint-gap-5`,children:[_jsxs(`span`,{className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-font-semibold mint-text-black dark:mint-text-white`,children:[_jsx(Icon,{icon:ui?`circle-check`:`circle-xmark`,color:ui?`#00dad3`:`#9ca3af`,size:16}),`UI`]}),_jsxs(`span`,{className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-font-semibold mint-text-black dark:mint-text-white`,children:[_jsx(Icon,{icon:api?`circle-check`:`circle-xmark`,color:api?`#00dad3`:`#9ca3af`,size:16}),`API`]}),_jsxs(`span`,{className:`mint-inline-flex mint-items-center mint-gap-1.5 mint-font-semibold mint-text-black dark:mint-text-white`,children:[_jsx(Icon,{icon:sdk?`circle-check`:`circle-xmark`,color:sdk?`#00dad3`:`#9ca3af`,size:16}),`SDK`]})]})]}),sdk\u0026\u0026sdkVersion\u0026\u0026_jsxs(`div`,{className:`mint-mt-1.5 mint-text-xs mint-text-black/60 dark:mint-text-white/60`,children:[`Requires seekrai `,sdkVersion]})]})};function _createMdxContent(props){const _components={a:`a`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Info,Step,Steps,Table,_MdxComponentBoundary}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!_MdxComponentBoundary)_missingMdxReference(`_MdxComponentBoundary`,true);return _jsxs(_Fragment,{children:[_jsx(_MdxComponentBoundary,{name:`SupportedOn`,children:_jsx(SupportedOn,{ui:true,api:true,sdk:true})}),`\n`,_jsx(_components.p,{children:`Reinforcement tuning trains models to generate higher-quality responses by scoring candidate outputs and reinforcing preferred behaviors. SeekrFlow implements reinforcement tuning using group relative policy optimization (GRPO).`}),`\n`,_jsxs(_components.p,{children:[`For implementation details including dataset format and code examples, see the `,_jsx(_components.a,{href:`/flow/sdk/fine-tuning/grpo-fine-tuning`,children:`Reinforcement tuning SDK guide`}),`.`]}),`\n`,_jsxs(Info,{children:[_jsx(_components.p,{children:_jsx(_components.strong,{children:`UI support`})}),_jsx(_components.p,{children:`Reinforcement tuning is available in the UI with mathematical accuracy as a reward function. User-defined reward functions are not currently supported in the UI but are available through the API and SDK.`})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsx(_components.p,{children:`Reinforcement tuning operates through a reinforcement learning process:`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Generation`}),`: The model generates multiple candidate responses to each prompt.`]})}),_jsx(Step,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Evaluation`}),`: A reward function scores each candidate based on quality criteria.`]})}),_jsx(Step,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Optimization`}),`: Training gradients push the model toward generating higher-scoring responses.`]})})]}),`\n`,_jsxs(_components.p,{children:[`Reward functions use one or more `,_jsx(_components.a,{href:`#available-graders`,children:`graders`}),` to score outputs on specific qualities like numerical accuracy, keyword matching, text similarity, or LLM-judged quality. The model learns to maximize expected reward across diverse prompts.`]}),`\n`,_jsx(Heading,{level:`2`,id:`when-to-use-reinforcement-tuning`,children:`When to use reinforcement tuning`}),`\n`,_jsx(_components.p,{children:`Reinforcement tuning provides value when:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Improving overall response quality beyond what demonstration data captures`}),`\n`,_jsx(_components.li,{children:`Aligning model outputs with subjective preferences or style guidelines`}),`\n`,_jsx(_components.li,{children:`Reducing unwanted behaviors (verbosity, hedging, unsafe content)`}),`\n`,_jsx(_components.li,{children:`Optimizing for measurable quality metrics (accuracy, user satisfaction)`}),`\n`,_jsx(_components.li,{children:`Teaching models to balance multiple competing objectives`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`training-requirements`,children:`Training requirements`}),`\n`,_jsx(_components.p,{children:`Effective reinforcement tuning requires:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reward function`}),`: Clear criteria for evaluating response quality through one or more graders`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Diverse prompts`}),`: Training examples covering the range of scenarios where quality preferences apply`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Reference answers`}),`: Answers against which the model can score its generated outputs`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Base model capability`}),`: Strong starting model that can generate reasonable candidates before preference optimization`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Download a sample dataset to see the expected format, or review the `,_jsx(_components.a,{href:`/flow/sdk/fine-tuning/grpo-fine-tuning`,children:`Reinforcement tuning SDK guide`}),` for the full schema.`]}),`\n`,_jsx(_MdxComponentBoundary,{name:`DownloadFile`,children:_jsx(DownloadFile,{href:`/samples/numina-math-dataset-small.json`,filename:`numina-math-dataset-small.jsonl`,label:`Download sample dataset`})}),`\n`,_jsx(Heading,{level:`2`,id:`reward-functions`,children:`Reward functions`}),`\n`,_jsxs(_components.p,{children:[`A reward function scores model outputs during training to reinforce desired behaviors. In SeekrFlow, reward functions are built from one or more `,_jsx(_components.strong,{children:`graders`}),` — individual scoring operations that each evaluate a specific quality of the output.`]}),`\n`,_jsx(Heading,{level:`3`,id:`available-graders`,children:`Available graders`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Grader`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Numerical accuracy`})}),_jsx(_components.td,{children:`Evaluates whether the model output is numerically correct. Useful for financial auditing, math, and other tasks with definite numerical answers.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`String check`})}),_jsx(_components.td,{children:`Evaluates whether the model output contains or matches a specific phrase. Useful for enforcing keyword usage or required terminology.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Text similarity`})}),_jsx(_components.td,{children:`Evaluates how lexically similar the model output is to the reference answer. Useful for enforcing tone, style, or compliant language.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`LLM (LLM-as-a-judge)`})}),_jsx(_components.td,{children:`Uses an LLM to score how well the output matches the reference answer in meaning and quality. Useful for open-ended or subjective responses where exact or lexical matching is too rigid.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`combining-graders`,children:`Combining graders`}),`\n`,_jsx(_components.p,{children:`You can combine multiple graders into a single reward function by assigning weight percentages to each. This creates a hybrid reward signal tailored to your use case. For example, you might weight numerical accuracy at 80% and text similarity at 20% to reward both the mathematical correctness and formatting of the model’s answers.`}),`\n`,_jsxs(_components.p,{children:[`For implementation details and code examples, see the `,_jsx(_components.a,{href:`/flow/sdk/fine-tuning/grpo-fine-tuning`,children:`Reinforcement tuning SDK guide`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`comparison-with-other-methods`,children:`Comparison with other methods`}),`\n`,_jsx(_components.p,{children:`Reinforcement tuning learns quality patterns through reinforcement of high-scoring outputs. Unlike instruction fine-tuning, it doesn’t require explicit demonstrations of correct responses. Reinforcement tuning typically follows instruction fine-tuning in training pipelines — the instruction phase teaches domain knowledge, while reinforcement tuning refines response quality and alignment.`}),`\n`,_jsx(_components.p,{children:`Reinforcement tuning can be combined with LoRA for efficient training. The adapter learns preference patterns while the base model provides general capabilities, reducing compute requirements without sacrificing quality improvements.`}),`\n`,_jsx(Heading,{level:`2`,id:`model-deployment`,children:`Model deployment`}),`\n`,_jsx(_components.p,{children:`Reinforcement-tuned models are deployed as standard model endpoints. The reinforced model behaviors are embedded in model parameters, so no special inference infrastructure is required. The model generates responses that reflect the learned quality preferences.`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{DownloadFile,SupportedOn,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":"Reinforcement tuning (GRPO)","description":"Uses reward functions to reinforce models toward higher-quality responses.","href":"/flow/components/fine-tuning/grpo"}}},"mdxSourceWithNoJs":null,"noJsSplices":[[148,2253,")=>null;const SupportedOn=()=>null;funct"]]},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"When to use reinforcement tuning","slug":"when-to-use-reinforcement-tuning","depth":2,"children":[]},{"title":"Training requirements","slug":"training-requirements","depth":2,"children":[]},{"title":"Reward functions","slug":"reward-functions","depth":2,"children":[{"title":"Available graders","slug":"available-graders","depth":3,"children":[]},{"title":"Combining graders","slug":"combining-graders","depth":3,"children":[]}]},{"title":"Comparison with other methods","slug":"comparison-with-other-methods","depth":2,"children":[]},{"title":"Model deployment","slug":"model-deployment","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"dynamicCss":".mint-mt-1\\.5 {\n margin-top: 0.375rem\n}\n.mint-flex {\n display: flex\n}\n.mint-inline-flex {\n display: inline-flex\n}\n.mint-flex-wrap {\n flex-wrap: wrap\n}\n.mint-items-center {\n align-items: center\n}\n.mint-gap-1\\.5 {\n gap: 0.375rem\n}\n.mint-gap-2 {\n gap: 0.5rem\n}\n.mint-gap-5 {\n gap: 1.25rem\n}\n.mint-gap-x-5 {\n column-gap: 1.25rem\n}\n.mint-gap-y-2 {\n row-gap: 0.5rem\n}\n.mint-whitespace-nowrap {\n white-space: nowrap\n}\n.mint-rounded-lg {\n border-radius: 0.5rem\n}\n.mint-border {\n border-width: 1px\n}\n.mint-border-\\[\\#00dad3\\] {\n --tw-border-opacity: 1;\n border-color: rgb(0 218 211 / var(--tw-border-opacity, 1))\n}\n.mint-bg-\\[\\#00dad3\\]\\/10 {\n background-color: rgb(0 218 211 / 0.1)\n}\n.mint-px-4 {\n padding-left: 1rem;\n padding-right: 1rem\n}\n.mint-py-2\\.5 {\n padding-top: 0.625rem;\n padding-bottom: 0.625rem\n}\n.mint-text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem\n}\n.mint-text-xs {\n font-size: 0.75rem;\n line-height: 1rem\n}\n.mint-font-bold {\n font-weight: 700\n}\n.mint-font-semibold {\n font-weight: 600\n}\n.mint-text-\\[\\#007774\\] {\n --tw-text-opacity: 1;\n color: rgb(0 119 116 / var(--tw-text-opacity, 1))\n}\n.mint-text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1))\n}\n.mint-text-black\\/60 {\n color: rgb(0 0 0 / 0.6)\n}\n.mint-no-underline {\n text-decoration-line: none\n}\n.dark\\:mint-text-\\[\\#00dad3\\]:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(0 218 211 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-text-white:is(.dark *) {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1))\n}\n.dark\\:mint-text-white\\/60:is(.dark *) {\n color: rgb(255 255 255 / 0.6)\n}","subdomain":"seekr","siteName":"Seekr Documentation","title":"Reinforcement tuning (GRPO) - Seekr Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-01T18:41:14.902Z","gitLastModified":"2026-08-01T18:40:41.000Z","originalFileLocation":"flow/components/fine-tuning/grpo.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=\"Uses reward functions to reinforce models toward higher-quality responses.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Seekr Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_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/seekr/stRf9o-EBn2ru4KI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Reinforcement tuning (GRPO) - Seekr Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Uses reward functions to reinforce models toward higher-quality responses.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Seekr Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.seekr.com/flow/components/fine-tuning/grpo\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://seekr.mintlify.app/_mintlify/api/og/v2?division=Fine-tuning\u0026amp;title=Reinforcement+tuning+%28GRPO%29\u0026amp;description=Uses+reward+functions+to+reinforce+models+toward+higher-quality+responses.\u0026amp;theme=005cf4e0d79661173c99c723\u0026amp;signature=177555e7e215a755367de33caaafe547e8a5a9784657214aeec484892e7081d9\">\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=\"Reinforcement tuning (GRPO) - Seekr Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Uses reward functions to reinforce models toward higher-quality responses.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://seekr.mintlify.app/_mintlify/api/og/v2?division=Fine-tuning\u0026amp;title=Reinforcement+tuning+%28GRPO%29\u0026amp;description=Uses+reward+functions+to+reinforce+models+toward+higher-quality+responses.\u0026amp;theme=005cf4e0d79661173c99c723\u0026amp;signature=177555e7e215a755367de33caaafe547e8a5a9784657214aeec484892e7081d9\">\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/seekr/stRf9o-EBn2ru4KI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Seekr Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#007774\">\u003cmeta data-mint-head name=\"google-site-verification\" content=\"RDMpUYE1uCSa_-TiRs1E4lMyGuAOUVkzmji5t4kVsEM\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.seekr.com/flow/components/fine-tuning/grpo\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/flow/components/fine-tuning/grpo.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.seekr.com/#organization\",\"name\":\"Seekr Documentation\",\"url\":\"https://docs.seekr.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/seekr/xCjyiASvtfX59CGv/logo/light.svg?fit=max\u0026auto=format\u0026n=xCjyiASvtfX59CGv\u0026q=85\u0026s=5631304b029d4cfaefb138711ec30bd9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.seekr.com#website\",\"name\":\"Seekr Documentation\",\"url\":\"https://docs.seekr.com\",\"publisher\":{\"@id\":\"https://docs.seekr.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo#webpage\",\"url\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo\",\"name\":\"Reinforcement tuning (GRPO)\",\"description\":\"Uses reward functions to reinforce models toward higher-quality responses.\",\"dateModified\":\"2026-08-01T18:40:41.000Z\",\"isPartOf\":{\"@id\":\"https://docs.seekr.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"SeekrFlow Overview\",\"item\":\"https://docs.seekr.com/flow/what-is-seekrflow\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Components\",\"item\":\"https://docs.seekr.com/flow/components\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Fine-tuning\",\"item\":\"https://docs.seekr.com/flow/components/fine-tuning\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Reinforcement tuning (GRPO)\",\"item\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo#article\",\"headline\":\"Reinforcement tuning (GRPO)\",\"name\":\"Reinforcement tuning (GRPO)\",\"description\":\"Uses reward functions to reinforce models toward higher-quality responses.\",\"url\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo\",\"mainEntityOfPage\":{\"@id\":\"https://docs.seekr.com/flow/components/fine-tuning/grpo#webpage\"},\"dateModified\":\"2026-08-01T18:40:41.000Z\",\"publisher\":{\"@id\":\"https://docs.seekr.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.seekr.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Seekr Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Seekr Documentation","nav":{"global":{"tabs":[{"tab":"Self-managed","icon":"server","href":"/self-managed/flow"}],"anchors":[{"anchor":"About us","icon":"circle-info","href":"https://www.seekr.com/about/"},{"anchor":"Contact us","icon":"headset","href":"https://www.seekr.com/contact-us/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.seekr.com/resource-center/?type=blog"}]},"products":[{"product":"SeekrFlow","icon":"circle-nodes","description":"Build, tune, and deploy enterprise AI agents","tabs":[{"tab":"Guides","icon":"book-open","groups":[{"group":"SeekrFlow Overview","pages":[{"title":"What is SeekrFlow","href":"/flow/what-is-seekrflow"},{"group":"Components","root":{"title":"Components","href":"/flow/components"},"pages":[{"group":"Models","root":{"title":"Models","href":"/flow/components/models"},"pages":[{"title":"Generative models","href":"/flow/components/models/generative-models"},{"title":"Embedding models","href":"/flow/components/models/embedding-models"}]},{"group":"Agents","root":{"title":"Agents","href":"/flow/components/agents"},"pages":[{"title":"Tools","href":"/flow/components/agents/tools"}]},{"group":"Data engine","root":{"title":"Data engine","href":"/flow/components/data-engine"},"pages":[{"title":"Storage","href":"/flow/components/data-engine/storage"},{"title":"AI-ready data","href":"/flow/components/data-engine/ai-ready-data"}]},{"group":"Fine-tuning","root":{"title":"Fine-tuning","href":"/flow/components/fine-tuning"},"pages":[{"title":"Instruction fine-tuning","href":"/flow/components/fine-tuning/instruction-fine-tuning"},{"title":"Context-grounded fine-tuning","description":"Train models to access and retrieve information from external knowledge bases during inference.","href":"/flow/components/fine-tuning/context-grounded-fine-tuning"},{"title":"Reinforcement tuning (GRPO)","href":"/flow/components/fine-tuning/grpo"},{"title":"Preference tuning (DPO)","description":"Align model outputs with human preferences by learning directly from response comparisons.","href":"/flow/components/fine-tuning/preference-tuning"},{"title":"Low-rank adaptation (LoRA)","href":"/flow/components/fine-tuning/lora"},{"title":"Vision language tuning","href":"/flow/components/fine-tuning/vision-language-tuning"}]},{"title":"Deployments","href":"/flow/components/deployments"},{"group":"Explainability","root":{"title":"Explainability","href":"/flow/components/explainability"},"pages":[{"title":"Context attribution","href":"/flow/components/explainability/context-attribution"},{"title":"Training data attribution","href":"/flow/components/explainability/training-data-attribution"},{"title":"Source tracing","href":"/flow/components/explainability/source-tracing"}]},{"title":"Content moderation","href":"/flow/components/content-moderation"},{"title":"Observability","href":"/flow/components/observability"}]},{"title":"Role-based access control","href":"/flow/role-based-access-control"},{"title":"Use cases","href":"/flow/use-case-identification"}]},{"group":"SeekrFlow App","pages":[{"title":"Access SeekrFlow","href":"/flow/app/access-seekrflow"},{"title":"Manage permissions","href":"/flow/app/manage-permissions"},{"title":"Dashboard","href":"/flow/app/dashboard"},{"group":"Agent Builder","root":{"title":"Agent Builder","href":"/flow/app/agent-builder"},"pages":[{"group":"Agents","root":{"title":"Agents","href":"/flow/app/agents"},"pages":[{"title":"Create an agent","href":"/flow/app/create-an-agent"},{"title":"Manage agents","href":"/flow/app/manage-agents"}]},{"group":"Tool Library","root":{"title":"Tool Library","href":"/flow/app/tool-library"},"pages":[{"title":"Create a tool","href":"/flow/app/create-a-tool"},{"title":"Manage tools","href":"/flow/app/manage-tools"}]}]},{"group":"Data Engine","root":{"title":"Data Engine","href":"/flow/app/data-engine"},"pages":[{"title":"AI-Ready Data","href":"/flow/app/ai-ready-data"},{"group":"Storage","root":{"title":"Storage","href":"/flow/app/storage"},"pages":[{"title":"File Storage","href":"/flow/app/file-storage"},{"title":"Vector Stores","href":"/flow/app/vector-stores"}]}]},{"group":"Model Development","root":{"title":"Model Development","href":"/flow/app/model-development"},"pages":[{"title":"Fine-Tuning","href":"/flow/app/fine-tuning"},{"title":"Deployments","href":"/flow/app/deployments"},{"title":"Model Library","href":"/flow/app/model-library"}]},{"group":"Playground","root":{"title":"Playground","href":"/flow/app/playground"},"pages":[{"title":"Test a model","href":"/flow/app/test-a-model"},{"title":"Chat with an agent","href":"/flow/app/chat-with-an-agent"},{"title":"Understand a response","href":"/flow/app/understand-a-response"}]}]},{"group":"SeekrFlow MCP Server","pages":[{"title":"Connect to MCP Server","href":"/flow/mcp"}]}]},{"tab":"Developer","icon":"code","menu":[{"item":"SDK","icon":"cube","pages":[{"title":"SDK","href":"/flow/sdk/getting-started"}]},{"item":"API Reference","icon":"terminal","pages":[{"title":"API Reference","href":"/flow/reference/getting-started-with-your-api"}]}],"pages":[{"title":"Developer","href":"/flow/sdk/getting-started"}]},{"tab":"Recipes","icon":"flask","pages":[{"title":"Recipes","href":"/flow/recipes"}]},{"tab":"Release notes","icon":"bullhorn","pages":[{"title":"Release notes","href":"/flow/changelog/2026"}]}]},{"product":"SeekrGuard","icon":"shield-halved","description":"Evaluate AI models for safety, quality, and risk","pages":[{"title":"SeekrGuard","href":"/guard/what-is-seekrguard"}]},{"product":"Self-managed","icon":"server","description":"Deploy and operate the Seekr platform in your own environment","pages":[{"title":"Self-managed","href":"/self-managed/flow"}]}]},"title":"Reinforcement tuning (GRPO) - Seekr Documentation","buildId":"dpl_48qhjNLiu9iJQQSZJz9Fa2ihBbPH","deploymentId":"dpl_48qhjNLiu9iJQQSZJz9Fa2ihBbPH","dynamics":[],"chunks":[]}