File size: 1,795 Bytes
f152ae2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import type { ChatMessage } from "gpt-tokenizer/GptEncoding";
import type { ChatCompletionMessageParam } from "openai/resources/chat/completions.mjs";
import { getOpenAiClient } from "./openai";
import {
  getSettings,
  updateResponse,
  updateTextGenerationState,
} from "./pubSub";
import {
  canStartResponding,
  getDefaultChatCompletionCreateParamsStreaming,
  getDefaultChatMessages,
  getFormattedSearchResults,
  handleStreamingResponse,
} from "./textGenerationUtilities";

export async function generateTextWithOpenAi() {
  const settings = getSettings();
  const openai = getOpenAiClient({
    baseURL: settings.openAiApiBaseUrl,
    apiKey: settings.openAiApiKey,
  });

  await canStartResponding();
  updateTextGenerationState("preparingToGenerate");

  const completion = await openai.chat.completions.create({
    ...getDefaultChatCompletionCreateParamsStreaming(),
    model: settings.openAiApiModel,
    messages: getDefaultChatMessages(
      getFormattedSearchResults(true),
    ) as ChatCompletionMessageParam[],
  });

  await handleStreamingResponse(completion, updateResponse, {
    abortController: completion.controller,
    shouldUpdateGeneratingState: true,
  });
}

export async function generateChatWithOpenAi(
  messages: ChatMessage[],
  onUpdate: (partialResponse: string) => void,
) {
  const settings = getSettings();
  const openai = getOpenAiClient({
    baseURL: settings.openAiApiBaseUrl,
    apiKey: settings.openAiApiKey,
  });

  const completion = await openai.chat.completions.create({
    ...getDefaultChatCompletionCreateParamsStreaming(),
    model: settings.openAiApiModel,
    messages: messages as ChatCompletionMessageParam[],
  });

  return handleStreamingResponse(completion, onUpdate, {
    abortController: completion.controller,
  });
}