ManimCat / src /services /code-retry /prompt-builder.ts
Bin29's picture
Sync from main: 68df783 feat: support multimodal studio reference images
d47b053
import { getSharedModule, getRoleSystemPrompt, getRoleUserPrompt } from '../../prompts'
import type { PromptOverrides } from '../../types'
import type { CodeRetryContext } from './types'
function applyPromptTemplate(
template: string,
values: Record<string, string | boolean>,
promptOverrides?: PromptOverrides
): string {
let output = template
output = output.replace(/\{\{apiIndexModule\}\}/g, getSharedModule('apiIndex', promptOverrides))
output = output.replace(/\{\{sharedSpecification\}\}/g, getSharedModule('specification', promptOverrides))
for (const [key, value] of Object.entries(values)) {
output = output.replace(new RegExp(`\\{\\{\\s*${key}\\s*\\}\\}`, 'g'), String(value))
}
return output
}
export function getCodeRetrySystemPrompt(promptOverrides?: PromptOverrides): string {
return getRoleSystemPrompt('codeRetry', promptOverrides)
}
export function buildRetryFixPrompt(
concept: string,
errorMessage: string,
code: string,
codeSnippet: string | undefined,
attempt: number | string,
outputMode: 'video' | 'image',
promptOverrides?: PromptOverrides
): string {
return getRoleUserPrompt(
'codeRetry',
{
concept,
errorMessage,
code,
codeSnippet,
attempt: Number(attempt),
outputMode,
isImage: outputMode === 'image',
isVideo: outputMode === 'video'
},
promptOverrides
)
}
export function buildRetryPrompt(
context: CodeRetryContext,
errorMessage: string,
attempt: number,
currentCode: string,
codeSnippet?: string
): string {
const override = context.promptOverrides?.roles?.codeRetry?.user
if (override) {
return applyPromptTemplate(
override,
{
concept: context.concept,
errorMessage,
code: currentCode,
codeSnippet: codeSnippet || '',
attempt: String(attempt),
outputMode: context.outputMode,
isImage: context.outputMode === 'image',
isVideo: context.outputMode === 'video'
},
context.promptOverrides
)
}
return buildRetryFixPrompt(
context.concept,
errorMessage,
currentCode,
codeSnippet,
attempt,
context.outputMode,
context.promptOverrides
)
}