( requestArg: RequestArg, requestText: string, )
| 271 | * @returns |
| 272 | */ |
| 273 | export async function getGPTResponseBy( |
| 274 | requestArg: RequestArg, |
| 275 | requestText: string, |
| 276 | ) { |
| 277 | const views = Zotero.ZoteroGPT.views as Views |
| 278 | const deltaTime = Zotero.Prefs.get(`${config.addonRef}.deltaTime`) as number |
| 279 | let responseText: string | undefined |
| 280 | let _responseText = "" |
| 281 | views.messages.push({ |
| 282 | role: "user", |
| 283 | content: requestText |
| 284 | }) |
| 285 | // 储存上一次的结果 |
| 286 | // 激活输出 |
| 287 | views.stopAlloutput() |
| 288 | views.setText("") |
| 289 | const id = window.setInterval(() => { |
| 290 | _responseText.trim().length > 0 && views.setText(_responseText) |
| 291 | if (responseText && responseText == _responseText) { |
| 292 | views.setText(_responseText, true) |
| 293 | window.clearInterval(id) |
| 294 | } |
| 295 | }, deltaTime) |
| 296 | views._ids.push({ type: "output", id: id }) |
| 297 | const chatNumber = Zotero.Prefs.get(`${config.addonRef}.chatNumber`) as number |
| 298 | const body = JSON.stringify(requestArg.body(requestText, views.messages.slice(-chatNumber))) |
| 299 | await Zotero.HTTP.request( |
| 300 | "POST", |
| 301 | requestArg.api, |
| 302 | { |
| 303 | headers: { |
| 304 | "Content-Type": "application/json", |
| 305 | ...requestArg.headers |
| 306 | }, |
| 307 | body, |
| 308 | responseType: "text", |
| 309 | requestObserver: (xmlhttp: XMLHttpRequest) => { |
| 310 | xmlhttp.onprogress = (e: any) => { |
| 311 | _responseText = e.target.response.replace(requestArg.remove, "") |
| 312 | if (requestArg.process) { |
| 313 | _responseText = requestArg.process(_responseText) |
| 314 | } |
| 315 | if (e.target.timeout) { |
| 316 | e.target.timeout = 0; |
| 317 | } |
| 318 | }; |
| 319 | }, |
| 320 | } |
| 321 | ); |
| 322 | // if (views._ids.map(i => i.id).indexOf(id) >= 0) { |
| 323 | // views.setText(responseText, true) |
| 324 | // } |
| 325 | // window.clearInterval(id) |
| 326 | // if (views.isInNote) { |
| 327 | // window.setTimeout(async () => { |
| 328 | // Meet.BetterNotes.replaceEditorText( |
| 329 | // // await Zotero.BetterNotes.api.convert.md2html(responseText) |
| 330 | // views.container.querySelector(".markdown-body")!.innerHTML |
no test coverage detected