fix(ts): extract content from code blocks instead of deleting it (#4317)
Co-authored-by: d 🔹 <258577966+voidborne-d@users.noreply.github.com>
This commit is contained in:
@@ -278,5 +278,9 @@ export function parseMessages(messages: string[]): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function removeCodeBlocks(text: string): string {
|
export function removeCodeBlocks(text: string): string {
|
||||||
return text.replace(/```[^`]*```/g, "");
|
// Extract content inside code fences instead of deleting it.
|
||||||
|
// The old regex /```[^`]*```/g replaced the entire block (including
|
||||||
|
// its content) with an empty string, so when an LLM returned JSON
|
||||||
|
// wrapped in ```json ... ``` the actual payload was discarded.
|
||||||
|
return text.replace(/```(?:\w+)?\n?([\s\S]*?)```/g, "$1").trim();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import { removeCodeBlocks } from "../src/prompts";
|
||||||
|
|
||||||
|
describe("removeCodeBlocks", () => {
|
||||||
|
it("extracts JSON from ```json code fence", () => {
|
||||||
|
const input = '```json\n{"facts": ["hello"]}\n```';
|
||||||
|
expect(removeCodeBlocks(input)).toBe('{"facts": ["hello"]}');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("extracts content from bare ``` code fence", () => {
|
||||||
|
const input = '```\n{"key": "value"}\n```';
|
||||||
|
expect(removeCodeBlocks(input)).toBe('{"key": "value"}');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("returns plain text unchanged", () => {
|
||||||
|
const input = '{"facts": ["hello"]}';
|
||||||
|
expect(removeCodeBlocks(input)).toBe('{"facts": ["hello"]}');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("handles multiple code blocks", () => {
|
||||||
|
const input = '```json\n{"a":1}\n```\nsome text\n```json\n{"b":2}\n```';
|
||||||
|
expect(removeCodeBlocks(input)).toBe('{"a":1}\n\nsome text\n{"b":2}');
|
||||||
|
});
|
||||||
|
|
||||||
|
it("handles Claude-style response with surrounding text", () => {
|
||||||
|
const input = 'Here is the JSON:\n```json\n{"facts": ["user likes TypeScript"]}\n```';
|
||||||
|
expect(removeCodeBlocks(input)).toContain('"facts"');
|
||||||
|
expect(removeCodeBlocks(input)).not.toContain("```");
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user