MCPcopy
hub / github.com/MuiseDestiny/zotero-gpt / getGPTResponseBy

Function getGPTResponseBy

src/modules/Meet/OpenAI.ts:273–340  ·  view source on GitHub ↗
(
  requestArg: RequestArg,
  requestText: string,
)

Source from the content-addressed store, hash-verified

271 * @returns
272 */
273export 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

Callers 1

getGPTResponseFunction · 0.85

Calls 4

getMethod · 0.80
stopAlloutputMethod · 0.80
setTextMethod · 0.80
requestMethod · 0.80

Tested by

no test coverage detected