feat(parseJsonForChatGPTResponse): implement function to parse JSON response from ChatGPT API

This commit is contained in:
Will Hohyon Ryu 2024-03-07 18:54:20 -08:00
parent a9a064dfa1
commit 65c5653158
4 changed files with 34 additions and 1 deletions

View file

@ -14,12 +14,14 @@
"dependencies": { "dependencies": {
"@actions/core": "^1.10.0", "@actions/core": "^1.10.0",
"@octokit/rest": "^19.0.7", "@octokit/rest": "^19.0.7",
"jsonic": "^1.0.1",
"minimatch": "^7.4.2", "minimatch": "^7.4.2",
"openai": "^4.20.1", "openai": "^4.20.1",
"parse-diff": "^0.11.1", "parse-diff": "^0.11.1",
"ts-node": "^10.9.1" "ts-node": "^10.9.1"
}, },
"devDependencies": { "devDependencies": {
"@types/jsonic": "^0.3.3",
"@types/node": "^18.15.5", "@types/node": "^18.15.5",
"@vercel/ncc": "^0.36.1", "@vercel/ncc": "^0.36.1",
"prettier": "^2.8.6", "prettier": "^2.8.6",

View file

@ -4,6 +4,7 @@ import OpenAI from "openai";
import { Octokit } from "@octokit/rest"; import { Octokit } from "@octokit/rest";
import parseDiff, { Chunk, File } from "parse-diff"; import parseDiff, { Chunk, File } from "parse-diff";
import minimatch from "minimatch"; import minimatch from "minimatch";
import {parseJsonForChatGPTResponse} from "./parseJsonForChatGPTResponse";
const GITHUB_TOKEN: string = core.getInput("GITHUB_TOKEN"); const GITHUB_TOKEN: string = core.getInput("GITHUB_TOKEN");
const OPENAI_API_KEY: string = core.getInput("OPENAI_API_KEY"); const OPENAI_API_KEY: string = core.getInput("OPENAI_API_KEY");
@ -139,7 +140,7 @@ async function getAIResponse(prompt: string): Promise<Array<{
}); });
const res = response.choices[0].message?.content?.trim() || "{}"; const res = response.choices[0].message?.content?.trim() || "{}";
return JSON.parse(res).reviews; return parseJsonForChatGPTResponse(res).reviews;
} catch (error) { } catch (error) {
console.error("Error:", error); console.error("Error:", error);
return null; return null;

View file

@ -0,0 +1,20 @@
import jsonic from "jsonic";
export function parseJsonForChatGPTResponse(response: string) {
let jsonData: any = null;
const responseString = response
.replace(/```json/g, "")
.replace(/```/g, "");
try {
jsonData = jsonic(responseString);
} catch (e) {
try {
jsonData = JSON.parse(responseString);
} catch (e) {
console.error(e);
}
}
return jsonData;
}

View file

@ -163,6 +163,11 @@
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
"@types/jsonic@^0.3.3":
version "0.3.3"
resolved "https://registry.yarnpkg.com/@types/jsonic/-/jsonic-0.3.3.tgz#0f47f2ab95ce38647fc522d62104d411f004b7ba"
integrity sha512-QXYC0N2jOSGw21QkYRP4YyR9sFZkAPLjxn4PVswsgSz3r8SOBYQpQOFdRc8FbhWZ7pWPKEnq2u8tJCt2Qcn4oQ==
"@types/node-fetch@^2.6.4": "@types/node-fetch@^2.6.4":
version "2.6.9" version "2.6.9"
resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.9.tgz#15f529d247f1ede1824f7e7acdaa192d5f28071e" resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.6.9.tgz#15f529d247f1ede1824f7e7acdaa192d5f28071e"
@ -340,6 +345,11 @@ is-plain-object@^5.0.0:
resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344"
integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==
jsonic@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/jsonic/-/jsonic-1.0.1.tgz#817054df7abfaf525ecf39d6647a2ed6d5fca7f1"
integrity sha512-6GitEN4plTuB/I1o9kDZl7Pgc+DvFG1BG88IqaUz4eQglCA1uAgxWdXhLNA6ffaYsmzPjOysDpp6CYTwRiuXLw==
make-error@^1.1.1: make-error@^1.1.1:
version "1.3.6" version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"