windowAiChat.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { Message } from "./messages";
  2. import { Output } from "window.ai";
  3. export async function getWindowAiChatResponseStream(name: string,messages: Message[]) {
  4. const stream = new ReadableStream({
  5. async start(controller: ReadableStreamDefaultController) {
  6. try {
  7. const [response]: Output[] = await window.ai.generateText({
  8. messages,
  9. }, {
  10. maxTokens: 400,
  11. temperature: 0.7,
  12. stopSequences: [
  13. "</s>",
  14. `${name}:`,
  15. "User:"
  16. ],
  17. onStreamResult: (res: Output | null, error: string | null): void => {
  18. if (res === null) {
  19. throw new Error("null result from window.ai");
  20. }
  21. if (error) {
  22. throw new Error(error);
  23. }
  24. // @ts-ignore
  25. const piece = res.message?.content;
  26. if (!! piece) {
  27. controller.enqueue(piece);
  28. }
  29. return;
  30. },
  31. });
  32. } catch (error) {
  33. controller.error(error);
  34. } finally {
  35. controller.close();
  36. }
  37. },
  38. });
  39. return stream;
  40. }