arcananex-synapse
Version:
Agentic AI framework
61 lines (50 loc) • 1.38 kB
text/typescript
// Define the structure of the raw input
export interface RawData {
message: {
content: string;
role: string;
};
usage: {
promptTokens: number;
completionTokens: number;
totalTokens: number;
};
raw: unknown;
}
// Adapter class to extract content values
export class LlmResponseAdapter {
constructor(private rawData: RawData) {}
extractContent(): string | object {
const procesedContent = this.parseIfJsonOrMarkdown(
this.rawData.message.content
);
if (typeof procesedContent === "string") {
return this.tryParseJson(procesedContent);
}
return procesedContent;
}
private parseIfJsonOrMarkdown(text: string): string | object {
const jsonRegex = /```json\s([\s\S]*?)```/;
const markdownRegex = /```markdown\s([\s\S]*?)```/;
const jsonMatch = text.match(jsonRegex);
if (jsonMatch) {
try {
return JSON.parse(jsonMatch[1].trim());
} catch {
return text; // Return original text if parsing fails
}
}
const markdownMatch = text.match(markdownRegex);
if (markdownMatch) {
return markdownMatch[1].trim(); // Extract Markdown text
}
return text;
}
private tryParseJson(text: string): object | string {
try {
return JSON.parse(text);
} catch {
return text; // Return original text if parsing fails
}
}
}