Bin29's picture
Sync from main: 68df783 feat: support multimodal studio reference images
d47b053
import type { StaticDiagnostic } from './types'
export function getStaticPatchSystemPrompt(): string {
return [
'你是一个静态修复员,只做局部替换。',
'你的唯一任务是根据静态检查报错,返回可直接替换的原片段和新片段。',
'优先修改最小片段;能改一行内局部就不要改整行;能改一行就不要改多行。',
'如果当前报错属于同一类、可模式化的静态问题,并且在同文件中明显重复出现,允许一次性返回多个局部 patch,一起修掉多个同类问题,连续或非连续都可以。',
'禁止返回完整代码,禁止解释,禁止附加任何文字。',
'不要输出 JSON。',
'只输出一个或多个 SEARCH/REPLACE patch 块。',
'每个 patch 严格使用下面格式:',
'[[PATCH]]',
'[[SEARCH]]',
'这里放原代码片段',
'[[REPLACE]]',
'这里放替换后的代码片段',
'[[END]]',
'original snippet 必须逐字摘抄自当前代码,不能改写,不能概括。',
'禁止 markdown 代码块,禁止 ```,禁止任何额外说明。',
'如果需要补充 Manim 类导入,必须新增单独的 from manim import Xxx 行,禁止写成 from manim import *, Xxx。',
'第一行必须是 [[PATCH]];如果无法生成合法 patch,返回空字符串。'
].join('\n')
}
function formatDiagnostic(diagnostic: StaticDiagnostic, index: number): string {
return [
`问题 ${index + 1}:`,
`- 工具:${diagnostic.tool}`,
`- 错误码:${diagnostic.code || 'unknown'}`,
`- 行号:${diagnostic.line}`,
`- 报错信息:${diagnostic.message}`
].join('\n')
}
export function buildStaticPatchUserPrompt(code: string, diagnostics: StaticDiagnostic[]): string {
const primaryDiagnostic = diagnostics[0]
return [
'完整代码:',
code,
'',
'静态检查结果:',
...diagnostics.map((diagnostic, index) => formatDiagnostic(diagnostic, index)),
'',
'修复要求:',
'- 优先做最小局部替换。',
'- 这是一批当前文件里真实存在的静态问题,请优先一起修掉同类问题;连续或非连续都可以。',
'- original_snippet 必须逐字摘抄自上面的当前代码,包含完全一致的空格、缩进、括号和变量名,不能改写,不能概括。',
'- 不要重写整个文件。',
primaryDiagnostic
? `- 优先围绕第一个问题(第 ${primaryDiagnostic.line} 行)组织修复,但可顺手修掉同批同类问题。`
: '- 没有问题时不要输出任何内容。',
'- 如果要补充导入,使用单独的新 import 行,不要构造非法 import 语法。',
'',
'只返回下面这种 patch 块,可返回多个:',
'[[PATCH]]',
'[[SEARCH]]',
'原代码片段1',
'[[REPLACE]]',
'新代码片段1',
'[[END]]',
'',
'示例 1:修复缺失的 ThreeDScene 导入',
'错误:Name "ThreeDScene" is not defined',
'当前代码:',
'from manim import *',
'',
'class MainScene(ThreeDScene):',
' pass',
'正确输出:',
'[[PATCH]]',
'[[SEARCH]]',
'from manim import *',
'[[REPLACE]]',
'from manim import *',
'from manim import ThreeDScene',
'[[END]]',
'',
'示例 2:修复非法 import 语法',
'错误:SyntaxError: invalid syntax',
'当前代码:',
'from manim import *, ThreeDScene',
'正确输出:',
'[[PATCH]]',
'[[SEARCH]]',
'from manim import *, ThreeDScene',
'[[REPLACE]]',
'from manim import *',
'from manim import ThreeDScene',
'[[END]]'
].join('\n')
}