29 lines
793 B
TypeScript
29 lines
793 B
TypeScript
export function parseJsonResponseText(text: string) {
|
|
const trimmed = text.trim();
|
|
if (!trimmed) {
|
|
throw new Error('LLM returned an empty response.');
|
|
}
|
|
|
|
const fencedMatch = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/iu);
|
|
if (fencedMatch?.[1]) {
|
|
return JSON.parse(fencedMatch[1].trim());
|
|
}
|
|
|
|
const firstBrace = trimmed.indexOf('{');
|
|
const lastBrace = trimmed.lastIndexOf('}');
|
|
if (firstBrace >= 0 && lastBrace > firstBrace) {
|
|
return JSON.parse(trimmed.slice(firstBrace, lastBrace + 1));
|
|
}
|
|
|
|
return JSON.parse(trimmed);
|
|
}
|
|
|
|
export function parseLineListContent(text: string, maxItems = 3) {
|
|
return text
|
|
.replace(/\r/g, '')
|
|
.split('\n')
|
|
.map((line) => line.trim().replace(/^[-*\d.)\s]+/u, '').trim())
|
|
.filter(Boolean)
|
|
.slice(0, maxItems);
|
|
}
|