-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathscript.js
More file actions
103 lines (86 loc) · 2.56 KB
/
script.js
File metadata and controls
103 lines (86 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
window.LSI = LSI;
const baseUrl = "MY_URL_ROOT";
/**
* Makes a request to the configured LLM sending the given prompt
*/
async function fetchLLM(prompt) {
const params = { prompt, llm_endpoint_name: "chatgpt", redteam_categories: ["cat1"] };
const searchParams = new URLSearchParams(params).toString();
const url = `${baseUrl}?${searchParams}`;
const response = await fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
// No auth needed because the API is currently open
},
});
const data = await response.json();
}
/**
* Sends the introduced prompt to the LLM endpoint and attahces the given results to the annotation
*/
async function sendPrompt() {
const promptTag = LSI.annotation.names.get('prompt')
promptTag.submitChanges();
const prompt = promptTag.result?.value.text.join("\n");
if (!prompt) {
Htx.showModal("The prompt is empty", 'error');
return false;
}
let response
// console.log("Input prompt:" + prompt);
try {
response = await fetchLLM(prompt);
} catch (error) {
Htx.showModal(`Error fetching the LLM endpoint "${baseUrl}": ${error.message}`, 'error');
return false
}
const results = [];
const llmResponse = llmResponse["LLM_response"]
if (llmResponse) {
const llmResult = {
from_name: "response",
to_name: "placeholder",
type: "textarea",
value: { "text": [] },
}
results.push(llmResult);
}
// console.log("Response:" + llmResponse["LLM_response"]);
const category = llmResponse["Category"]?.category;
if (category?.length) {
const attackResult = {
from_name: "category",
to_name: "placeholder",
type: "choices",
value: { choices: category },
}
results.push(attackResult);
// console.log("Category:" + category);
}
const reasonText = llmResponse["Type"]?.reason;
if (reasonText) {
const reasonResult = {
from_name: "reason",
to_name: "placeholder",
type: "textarea",
value: { "text": [reasonText] },
}
results.push(reasonResult);
// console.log("Reason:" + reason);
}
LSI.annotation.deserializeResults(results);
}
/**
* Sets up the onClick event of the template to trigger the LLM request
*/
function setup() {
const aBtn = document.querySelector('.analyzeButton');
const button = document.createElement('button');
button.textContent = 'Analyze'; // Set the button text
// Attach an onclick event to the button
button.onclick = sendPrompt;
// Insert the button into the div
aBtn.replaceChildren(button);
}
setup();