diff --git a/agent/nodes/verificationSetup.ts b/agent/nodes/verificationSetup.ts index 86fd0d4..e142e37 100644 --- a/agent/nodes/verificationSetup.ts +++ b/agent/nodes/verificationSetup.ts @@ -1,8 +1,7 @@ import { GraphNode } from "@langchain/langgraph"; import { MessagesState, ProposedTriggerEventArray } from "../state"; import { logger } from "../utils/logger"; -import { queryScraper } from "../tools/webSearch"; -import { rankAndDisplayData } from "../tools/triggerEventTools"; +import { jsonrepair } from 'jsonrepair' export const verificationSetup: GraphNode = async (state) => { //this is kinda doing two things, but having two nodes for it seems overkill @@ -11,15 +10,29 @@ export const verificationSetup: GraphNode = async (state) logger.warn("No trigger events in memory, parsing") let genResponse = state.messages.at(-1)?.content.toString() ?? ""; - const parsed = ProposedTriggerEventArray.parse(JSON.parse(genResponse)); - for (let i = 0; i < parsed.length; i++) { - const search = parsed[i].SearchQuery - // const data = await queryScraper(search); - // const output = await rankAndDisplayData(data, search); + const repaired = jsonrepair(genResponse); - // parsed[i].context = output; - parsed[i].context = "NONE" + let parsed; + + try { + const json = JSON.parse(repaired); + + if (Array.isArray(json)) { + parsed = ProposedTriggerEventArray.parse(json); + } else { + // try grab first value + const firstValue = Object.values(json)[0]; + + if (Array.isArray(firstValue)) { + parsed = ProposedTriggerEventArray.parse(firstValue); + } else { + throw new Error("No array found in JSON"); + } + } + } catch (err: any) { + logger.error(`Failed to parse LLM response: ${err.message}`); + throw new Error(`Failed to parse LLM response: ${err}`); } return { proposedTriggerEvent: parsed, proposedTriggerEventIndex: 0 }; diff --git a/agent/package-lock.json b/agent/package-lock.json index 08c5227..fe05ef4 100644 --- a/agent/package-lock.json +++ b/agent/package-lock.json @@ -20,6 +20,7 @@ "dotenv": "^17.2.3", "exponential-backoff": "^3.1.3", "fs": "^0.0.1-security", + "jsonrepair": "^3.13.3", "langchain": "^1.2.14", "selenium-webdriver": "^4.40.0", "tldts": "^7.0.23", @@ -2075,6 +2076,15 @@ "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "license": "ISC" }, + "node_modules/jsonrepair": { + "version": "3.13.3", + "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.13.3.tgz", + "integrity": "sha512-BTznj0owIt2CBAH/LTo7+1I5pMvl1e1033LRl/HUowlZmJOIhzC0zbX5bxMngLkfT4WnzPP26QnW5wMr2g9tsQ==", + "license": "ISC", + "bin": { + "jsonrepair": "bin/cli.js" + } + }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", diff --git a/agent/package.json b/agent/package.json index 3355099..08d9784 100644 --- a/agent/package.json +++ b/agent/package.json @@ -24,6 +24,7 @@ "dotenv": "^17.2.3", "exponential-backoff": "^3.1.3", "fs": "^0.0.1-security", + "jsonrepair": "^3.13.3", "langchain": "^1.2.14", "selenium-webdriver": "^4.40.0", "tldts": "^7.0.23",