humanifyjs
Version:
> Deobfuscate Javascript code using LLMs ("AI")
56 lines (55 loc) • 2.07 kB
JavaScript
import OpenAI from "openai";
import { visitAllIdentifiers } from "../local-llm-rename/visit-all-identifiers.js";
import { showPercentage } from "../../progress.js";
import { verbose } from "../../verbose.js";
export function openaiRename({ apiKey, model }) {
const client = new OpenAI({ apiKey });
return async (code) => {
return await visitAllIdentifiers(code, async (name, surroundingCode) => {
var _a;
verbose.log(`Renaming ${name}`);
verbose.log("Context: ", surroundingCode);
const response = await client.chat.completions.create(toRenamePrompt(name, surroundingCode, model));
const result = (_a = response.choices[0].message) === null || _a === void 0 ? void 0 : _a.content;
if (!result) {
throw new Error("Failed to rename", { cause: response });
}
const renamed = JSON.parse(result).newName;
verbose.log(`Renamed to ${renamed}`);
return renamed;
}, showPercentage);
};
}
function toRenamePrompt(name, surroundingCode, model) {
return {
model,
messages: [
{
role: "system",
content: `Rename Javascript variables/function \`${name}\` to have descriptive name based on their usage in the code."`
},
{
role: "user",
content: surroundingCode
}
],
response_format: {
type: "json_schema",
json_schema: {
strict: true,
name: "rename",
schema: {
type: "object",
properties: {
newName: {
type: "string",
description: `The new name for the variable/function called \`${name}\``
}
},
required: ["newName"],
additionalProperties: false
}
}
}
};
}