-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
81 lines (57 loc) · 2.02 KB
/
main.js
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
const input = document.querySelector('input')
const output = document.querySelector('output')
const errorOutput = document.querySelector('output.err')
if (!('ai' in window)) {
errorOutput.innerText = 'Error: window.ai not found (needs Chrome Canary)'
} else {
try {
const session = await ai.assistant.create({
monitor(m) {
m.addEventListener("downloadprogress", e => {
errorOutput.innerText = `Downloaded ${e.loaded} of ${e.total} bytes.`
});
}
});
console.log(session)
let current;
let pending;
async function requestLoop() {
if (!pending) return setTimeout(requestLoop, 100)
console.log("request: ", pending)
const value = pending;
pending = false// ready for more
input.classList.add('requesting')
try {
current = new AbortController()
const stream = await session.promptStreaming(value, { signal: current.signal })
for await (const chunk of stream) {
console.log(chunk);
output.innerText = chunk;
}
current = null;
} catch (e) {
errorOutput.innerText = `err: ${e.message}`
}
input.classList.remove('requesting')
return setTimeout(requestLoop, 1000)
}
requestLoop();
let timer;
function debounce() {
clearTimeout(timer);
input.classList.add('debounced')
timer = setTimeout(() => {
input.classList.remove('debounced');
pending = input.value;
current?.abort()
}, 500);
}
// rather than debounce, a prioritised queue?
input.addEventListener('input', e => {
debounce()
})
} catch (e) {
errorOutput.innerText = `Error: ${e.message}`
}
}
// assessing a PR Description