MCPcopy Create free account
hub / github.com/Hello-Application-XH/HelloGML / createCompletion

Function createCompletion

src/chat.ts:348–409  ·  view source on GitHub ↗
(messages: any[], refreshToken: string, model = MODEL_NAME, refConvId = "", retryCount = 0, tools?: any[])

Source from the content-addressed store, hash-verified

346}
347
348export async function createCompletion(messages: any[], refreshToken: string, model = MODEL_NAME, refConvId = "", retryCount = 0, tools?: any[]): Promise<any> {
349 return (async () => {
350 let processedMessages = convertToolMessages(messages);
351 processedMessages = injectToolsPrompt(processedMessages, tools || []);
352 const refFileUrls = extractRefFileUrls(processedMessages);
353 const refs = refFileUrls.length ? await Promise.all(refFileUrls.map((fileUrl) => uploadFile(fileUrl, refreshToken))) : [];
354 if (!/[0-9a-zA-Z]{24}/.test(refConvId)) refConvId = "";
355 let assistantId = /^[a-z0-9]{24,}$/.test(model) ? model : DEFAULT_ASSISTANT_ID;
356 let chatMode = '';
357 if (model.includes('think') || model.includes('zero')) { chatMode = 'zero'; }
358 if (model.includes('deepresearch')) { chatMode = 'deep_research'; }
359 const token = await acquireToken(refreshToken);
360 const sign = await generateSign();
361 const response = await glmPostStream(
362 "https://chatglm.cn/chatglm/backend-api/assistant/stream",
363 {
364 assistant_id: assistantId,
365 conversation_id: refConvId,
366 project_id: "",
367 chat_type: "user_chat",
368 messages: messagesPrepare(processedMessages, refs, !!refConvId),
369 meta_data: {
370 channel: "",
371 chat_mode: chatMode || undefined,
372 draft_id: "",
373 if_plus_model: true,
374 input_question_type: "xxxx",
375 is_networking: true,
376 is_test: false,
377 platform: "pc",
378 quote_log_id: "",
379 cogview: { rm_label_watermark: false }
380 },
381 },
382 {
383 Authorization: `Bearer ${token}`,
384 ...getHeaders(),
385 "X-Device-Id": uuid(false),
386 "X-Request-Id": uuid(false),
387 "X-Sign": sign.sign,
388 "X-Timestamp": sign.timestamp,
389 "X-Nonce": sign.nonce,
390 }
391 );
392 const contentType = response.headers.get("content-type") || "";
393 if (!contentType.includes("text/event-stream")) {
394 const errText = await response.text();
395 console.error(errText);
396 throw new Error(`Stream response Content-Type invalid: ${contentType}`);
397 }
398 const answer = await receiveStream(model, response.body!, tools);
399 removeConversation(answer.id, refreshToken, assistantId).catch(() => {});
400 return answer;
401 })().catch(async (err) => {
402 if (retryCount < MAX_RETRY_COUNT) {
403 console.error(`Stream response error: ${err.stack || err.message}`);
404 await sleep(RETRY_DELAY);
405 return createCompletion(messages, refreshToken, model, refConvId, retryCount + 1, tools);

Callers 3

handleChatCompletionsFunction · 0.90
createClaudeCompletionFunction · 0.90
createGeminiCompletionFunction · 0.90

Calls 13

uuidFunction · 0.90
sleepFunction · 0.90
convertToolMessagesFunction · 0.85
injectToolsPromptFunction · 0.85
extractRefFileUrlsFunction · 0.85
uploadFileFunction · 0.85
acquireTokenFunction · 0.85
generateSignFunction · 0.85
glmPostStreamFunction · 0.85
messagesPrepareFunction · 0.85
getHeadersFunction · 0.85
receiveStreamFunction · 0.85

Tested by

no test coverage detected