@apia/ai 3.0.13 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
1
  import * as react from 'react';
2
2
  import { ReactNode, FC, ReactElement } from 'react';
3
3
  import * as _apia_util from '@apia/util';
4
- import { EventEmitter } from '@apia/util';
4
+ import { EventEmitter, AudioRecorder } from '@apia/util';
5
+ import { ResponseStream as ResponseStream$1 } from '@apia/ai';
5
6
 
6
7
  declare const AutoscrollContainer: ({ children }: {
7
8
  children: ReactNode;
@@ -16,8 +17,8 @@ interface Reactive {
16
17
  }
17
18
 
18
19
  declare class AIContent implements Reactive {
19
- protected content: ReactNode;
20
- constructor(content: ReactNode);
20
+ content: ReactNode;
21
+ constructor(content?: ReactNode);
21
22
  Component: () => react.JSX.Element;
22
23
  }
23
24
 
@@ -27,8 +28,10 @@ declare class AIMessageAttachments implements Reactive {
27
28
  content: AIContent;
28
29
  id: string;
29
30
  constructor(role: AIMessageRole, content: AIContent, close?: (() => void) | undefined);
31
+ addDescription: () => Promise<void>;
30
32
  Component: (props: {
31
33
  closeButton?: boolean;
34
+ canAddDescription?: boolean;
32
35
  }) => react.JSX.Element;
33
36
  }
34
37
 
@@ -121,5 +124,37 @@ declare class ResponseStream extends EventEmitter<{
121
124
  run(): void;
122
125
  }
123
126
 
124
- export { AIMessageAttachments as AIMessage, AutoscrollContainer, ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream, type TMessageType, type TMultipleChoiceMessageOption };
127
+ type RoutinesGenerationState = {
128
+ isLoading: boolean;
129
+ progress: number;
130
+ };
131
+ type TGenerateFromImage = {
132
+ base64: string;
133
+ description: string;
134
+ };
135
+ type TRoutineCompletion = Partial<{
136
+ images: TGenerateFromImage[];
137
+ parameters: Record<string, string>;
138
+ stream: ResponseStream$1;
139
+ }> & {
140
+ routineName: string;
141
+ };
142
+ declare class RoutinesGeneration {
143
+ audioRecorder: AudioRecorder;
144
+ private routineId;
145
+ state: RoutinesGenerationState;
146
+ constructor();
147
+ private checkCanGenerate;
148
+ private pollRoutine;
149
+ private executeRoutine;
150
+ private poll;
151
+ private resetLoading;
152
+ completion<T>(params: TRoutineCompletion): Promise<T | null>;
153
+ stop(): void;
154
+ transcribeAudio(audio: Blob): Promise<{
155
+ transcription: string;
156
+ } | null>;
157
+ }
158
+
159
+ export { AIMessageAttachments, AutoscrollContainer, ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream, RoutinesGeneration, type TGenerateFromImage, type TMessageType, type TMultipleChoiceMessageOption, type TRoutineCompletion };
125
160
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -3,10 +3,13 @@ import { Box, getVariant, Textarea, Paragraph } from '@apia/theme';
3
3
  import { useRef, useCallback, useState } from 'react';
4
4
  import { IconButton, SimpleButton, ApiaUtil } from '@apia/components';
5
5
  import { getLabel, noNaN, AudioRecorder, EventEmitter } from '@apia/util';
6
- import { makeObservable, observable } from 'mobx';
6
+ import { makeObservable, observable, action } from 'mobx';
7
7
  import { FileIcon } from '@apia/icons';
8
8
  import { uniqueId } from '@apia/notifications';
9
+ import { Collector } from '@apia/validations';
9
10
  import { observer } from 'mobx-react-lite';
11
+ import axios from 'axios';
12
+ import { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';
10
13
 
11
14
  const AutoscrollContainer = ({ children }) => {
12
15
  const observer = useRef(null);
@@ -190,10 +193,10 @@ function useHandleFileUpload({
190
193
  return { progress, handleFileUpload };
191
194
  }
192
195
 
193
- var __defProp$5 = Object.defineProperty;
194
- var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
195
- var __publicField$5 = (obj, key, value) => {
196
- __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
196
+ var __defProp$6 = Object.defineProperty;
197
+ var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
198
+ var __publicField$6 = (obj, key, value) => {
199
+ __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value);
197
200
  return value;
198
201
  };
199
202
  let maxId = 0;
@@ -202,9 +205,9 @@ class ChatMessage {
202
205
  this.message = message;
203
206
  this.messageType = messageType;
204
207
  this.attachments = attachments;
205
- __publicField$5(this, "id");
206
- __publicField$5(this, "copy", () => new ChatMessage(this.message, this.messageType, this.attachments));
207
- __publicField$5(this, "Component", () => {
208
+ __publicField$6(this, "id");
209
+ __publicField$6(this, "copy", () => new ChatMessage(this.message, this.messageType, this.attachments));
210
+ __publicField$6(this, "Component", () => {
208
211
  return /* @__PURE__ */ jsxs(
209
212
  Box,
210
213
  {
@@ -243,16 +246,16 @@ class ChatMessage {
243
246
  }
244
247
  }
245
248
 
246
- var __defProp$4 = Object.defineProperty;
247
- var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
248
- var __publicField$4 = (obj, key, value) => {
249
- __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
249
+ var __defProp$5 = Object.defineProperty;
250
+ var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
251
+ var __publicField$5 = (obj, key, value) => {
252
+ __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value);
250
253
  return value;
251
254
  };
252
255
  class AIContent {
253
256
  constructor(content) {
254
- __publicField$4(this, "content");
255
- __publicField$4(this, "Component", () => {
257
+ __publicField$5(this, "content");
258
+ __publicField$5(this, "Component", () => {
256
259
  return /* @__PURE__ */ jsx(Box, { variant: "layout.common.components.aiMessage.textBox", children: /* @__PURE__ */ jsx(Box, { variant: "layout.common.components.aiMessage.textSnippet", children: this.content }) });
257
260
  });
258
261
  this.content = content;
@@ -287,24 +290,53 @@ var AIMessageRole = /* @__PURE__ */ ((AIMessageRole2) => {
287
290
  return AIMessageRole2;
288
291
  })(AIMessageRole || {});
289
292
 
290
- var __defProp$3 = Object.defineProperty;
291
- var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
292
- var __publicField$3 = (obj, key, value) => {
293
- __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
293
+ var __defProp$4 = Object.defineProperty;
294
+ var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
295
+ var __publicField$4 = (obj, key, value) => {
296
+ __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value);
294
297
  return value;
295
298
  };
296
299
  const _AIFileContent = class _AIFileContent extends AIContent {
297
- constructor(content, fileUrl, fileName, f) {
300
+ constructor(fileUrl, fileName, f, error) {
298
301
  const extension = _AIFileContent.getExtensionFromFileName(fileName);
299
- if (!_AIFileContent.isValidExtension(extension))
300
- throw new Error(_AIFileContent.getExtensionErrorMessage(extension));
301
- super(content);
302
- __publicField$3(this, "type");
303
- __publicField$3(this, "fileUrl");
304
- __publicField$3(this, "fileName");
305
- __publicField$3(this, "extension");
306
- __publicField$3(this, "__file");
307
- __publicField$3(this, "Component", () => /* @__PURE__ */ jsxs(Box, { variant: "layout.common.components.aiMessage.fileBox", children: [
302
+ super();
303
+ __publicField$4(this, "type");
304
+ __publicField$4(this, "fileUrl");
305
+ __publicField$4(this, "fileName");
306
+ __publicField$4(this, "extension");
307
+ __publicField$4(this, "__file");
308
+ __publicField$4(this, "__error");
309
+ __publicField$4(this, "inferContent", () => {
310
+ return `You must collect information contained in this ${this.type} as help to build your tool choice.`;
311
+ });
312
+ __publicField$4(this, "inferExtension", (extension) => {
313
+ switch (extension) {
314
+ case AIFileContentAllowedExtensions.jpg:
315
+ case AIFileContentAllowedExtensions.jpeg:
316
+ case AIFileContentAllowedExtensions.png:
317
+ case AIFileContentAllowedExtensions.svg:
318
+ return FileType.IMAGE;
319
+ case AIFileContentAllowedExtensions.txt:
320
+ case AIFileContentAllowedExtensions.doc:
321
+ case AIFileContentAllowedExtensions.pdf:
322
+ case AIFileContentAllowedExtensions.docx:
323
+ return FileType.DOCUMENT;
324
+ case AIFileContentAllowedExtensions.csv:
325
+ case AIFileContentAllowedExtensions.xlsx:
326
+ case AIFileContentAllowedExtensions.xls:
327
+ return FileType.SHEET;
328
+ case AIFileContentAllowedExtensions.mp3:
329
+ case AIFileContentAllowedExtensions.wav:
330
+ return FileType.AUDIO;
331
+ default:
332
+ this.__throwError(
333
+ new Error(_AIFileContent.__getExtensionErrorMessage(extension)),
334
+ this.__error?.fileExtension
335
+ );
336
+ }
337
+ });
338
+ // COMPONENT METHODS
339
+ __publicField$4(this, "Component", () => /* @__PURE__ */ jsxs(Box, { variant: "layout.common.components.aiMessage.fileBox", children: [
308
340
  FileType.IMAGE === this.type ? /* @__PURE__ */ jsx("img", { src: URL.createObjectURL(this.file), alt: this.fileName }) : /* @__PURE__ */ jsx(FileIcon, { iconSize: "lg", docName: this.fileName }),
309
341
  /* @__PURE__ */ jsx(
310
342
  Box,
@@ -316,12 +348,20 @@ const _AIFileContent = class _AIFileContent extends AIContent {
316
348
  }
317
349
  )
318
350
  ] }));
351
+ this.__error = error;
352
+ if (!_AIFileContent.isValidExtension(extension))
353
+ this.__throwError(
354
+ new Error(_AIFileContent.__getExtensionErrorMessage(extension)),
355
+ this.__error?.fileExtension
356
+ );
319
357
  this.fileUrl = fileUrl;
320
358
  this.extension = extension;
321
- this.type = _AIFileContent.inferExtension(extension);
359
+ this.type = this.inferExtension(this.extension);
322
360
  this.fileName = fileName;
323
361
  this.__file = f;
362
+ this.content = this.inferContent();
324
363
  }
364
+ // PUBLIC METHODS
325
365
  get file() {
326
366
  if (!this.__file)
327
367
  throw new Error("File is undefined");
@@ -330,12 +370,23 @@ const _AIFileContent = class _AIFileContent extends AIContent {
330
370
  static getExtensionFromFileName(fileName) {
331
371
  return fileName.split(".", 2).pop();
332
372
  }
333
- static getExtensionErrorMessage(extension) {
373
+ // PRIVATE METHODS
374
+ static __getExtensionErrorMessage(extension) {
334
375
  return `extension "${extension}" is not included into valid types:
335
376
  ${Object.keys(AIFileContentAllowedExtensions)}`;
336
377
  }
378
+ __throwError(e, callback) {
379
+ callback && callback();
380
+ throw e;
381
+ }
337
382
  };
338
- __publicField$3(_AIFileContent, "blobToBase64", async (blob) => {
383
+ // STATIC METHODS
384
+ __publicField$4(_AIFileContent, "isValidExtension", (extension) => {
385
+ return Object.values(
386
+ AIFileContentAllowedExtensions
387
+ ).includes(extension);
388
+ });
389
+ __publicField$4(_AIFileContent, "blobToBase64", async (blob) => {
339
390
  return await ((blob2) => new Promise((resolve, reject) => {
340
391
  const reader = new FileReader();
341
392
  reader.onloadend = () => {
@@ -346,58 +397,42 @@ __publicField$3(_AIFileContent, "blobToBase64", async (blob) => {
346
397
  reader.readAsDataURL(blob2);
347
398
  }))(blob);
348
399
  });
349
- __publicField$3(_AIFileContent, "fromFile", async (f, content) => {
400
+ __publicField$4(_AIFileContent, "fromFile", async (f, error) => {
350
401
  const fileUrl = await ((f2) => new Promise((resolve, reject) => {
351
402
  const reader = new FileReader();
352
403
  reader.readAsDataURL(f2);
353
404
  reader.onload = () => resolve(reader.result);
354
405
  reader.onerror = () => reject();
355
406
  }))(f);
356
- return new _AIFileContent(content, fileUrl, f.name, f);
357
- });
358
- __publicField$3(_AIFileContent, "inferExtension", (extension) => {
359
- switch (extension) {
360
- case AIFileContentAllowedExtensions.jpg:
361
- case AIFileContentAllowedExtensions.jpeg:
362
- case AIFileContentAllowedExtensions.png:
363
- case AIFileContentAllowedExtensions.svg:
364
- return FileType.IMAGE;
365
- case AIFileContentAllowedExtensions.txt:
366
- case AIFileContentAllowedExtensions.doc:
367
- case AIFileContentAllowedExtensions.pdf:
368
- case AIFileContentAllowedExtensions.docx:
369
- return FileType.DOCUMENT;
370
- case AIFileContentAllowedExtensions.csv:
371
- case AIFileContentAllowedExtensions.xlsx:
372
- case AIFileContentAllowedExtensions.xls:
373
- return FileType.SHEET;
374
- case AIFileContentAllowedExtensions.mp3:
375
- case AIFileContentAllowedExtensions.wav:
376
- return FileType.AUDIO;
377
- default:
378
- throw new Error(_AIFileContent.getExtensionErrorMessage(extension));
379
- }
380
- });
381
- __publicField$3(_AIFileContent, "isValidExtension", (extension) => {
382
- return Object.values(
383
- AIFileContentAllowedExtensions
384
- ).includes(extension);
407
+ return new _AIFileContent(fileUrl, f.name, f, error);
385
408
  });
386
409
  let AIFileContent = _AIFileContent;
387
410
 
388
- var __defProp$2 = Object.defineProperty;
389
- var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
390
- var __publicField$2 = (obj, key, value) => {
391
- __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
411
+ var __defProp$3 = Object.defineProperty;
412
+ var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
413
+ var __publicField$3 = (obj, key, value) => {
414
+ __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value);
392
415
  return value;
393
416
  };
394
417
  class AIMessageAttachments {
395
418
  constructor(role, content, close) {
396
419
  this.close = close;
397
- __publicField$2(this, "role");
398
- __publicField$2(this, "content");
399
- __publicField$2(this, "id", uniqueId());
400
- __publicField$2(this, "Component", (props) => /* @__PURE__ */ jsxs(Box, { ...getVariant("layout.common.components.aiMessage"), children: [
420
+ __publicField$3(this, "role");
421
+ __publicField$3(this, "content");
422
+ __publicField$3(this, "id", uniqueId());
423
+ __publicField$3(this, "addDescription", async () => {
424
+ const collector = new Collector();
425
+ const collected = await collector.add(
426
+ new collector.fields.textarea(
427
+ "addCommentTextArea",
428
+ "TODO The description will help the assistant to understand the file content"
429
+ )
430
+ ).show({ title: "TODO Add image Comment" }).catch((e) => {
431
+ throw e;
432
+ });
433
+ collected?.addCommentTextArea && (this.content.content = collected.addCommentTextArea);
434
+ });
435
+ __publicField$3(this, "Component", (props) => /* @__PURE__ */ jsxs(Box, { ...getVariant("layout.common.components.aiMessage"), children: [
401
436
  props.closeButton ? /* @__PURE__ */ jsx(
402
437
  IconButton,
403
438
  {
@@ -408,6 +443,15 @@ class AIMessageAttachments {
408
443
  title: getLabel("lblDeleteItem").title
409
444
  }
410
445
  ) : /* @__PURE__ */ jsx(Fragment, {}),
446
+ props?.canAddDescription ? /* @__PURE__ */ jsx(
447
+ IconButton,
448
+ {
449
+ className: "descriptionButton",
450
+ size: "Md",
451
+ icon: "Magic",
452
+ onClick: this.addDescription
453
+ }
454
+ ) : /* @__PURE__ */ jsx(Fragment, {}),
411
455
  /* @__PURE__ */ jsx(this.content.Component, {})
412
456
  ] }));
413
457
  this.role = role;
@@ -420,10 +464,18 @@ const handleFileUploadAsMessage = async (fileInputElement, chatController) => {
420
464
  [...fileInputElement.files].forEach(async (f) => {
421
465
  const m = new AIMessageAttachments(
422
466
  AIMessageRole.USER,
423
- await AIFileContent.fromFile(
424
- f,
425
- "you must collect information contained in this image as help to build your tool choice"
426
- ),
467
+ await AIFileContent.fromFile(f, {
468
+ fileExtension: () => chatController.messages.add(
469
+ new ChatMessage(
470
+ getLabel("msgAiIncorrectFileExtensionError", {
471
+ text: {
472
+ TOK1: `[${Object.keys(AIFileContentAllowedExtensions).join(", ")}]`
473
+ }
474
+ }).text,
475
+ "error"
476
+ )
477
+ )
478
+ }),
427
479
  () => chatController.attachments.drop(m)
428
480
  );
429
481
  chatController.attachments.add(m);
@@ -596,7 +648,7 @@ const makeTextarea = (chatController) => {
596
648
  icon: chatController.audioRecorder.state.recording ? "Stop" : "Microphone",
597
649
  id: "transcribeAudio",
598
650
  size: "Lg",
599
- title: "TODO: MAKE LABEL TRANSCRIBE AUDIO"
651
+ title: getLabel("lblAiRecordAudio").text
600
652
  }
601
653
  ),
602
654
  /* @__PURE__ */ jsx(
@@ -685,10 +737,10 @@ const makeTextarea = (chatController) => {
685
737
  return NewTextarea;
686
738
  };
687
739
 
688
- var __defProp$1 = Object.defineProperty;
689
- var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
690
- var __publicField$1 = (obj, key, value) => {
691
- __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
740
+ var __defProp$2 = Object.defineProperty;
741
+ var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
742
+ var __publicField$2 = (obj, key, value) => {
743
+ __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
692
744
  return value;
693
745
  };
694
746
  var __accessCheck = (obj, member, msg) => {
@@ -713,11 +765,11 @@ var _promptsHistory, _internalAudioRecorder;
713
765
  class ChatController {
714
766
  constructor(id, welcomeMessage) {
715
767
  this.id = id;
716
- __publicField$1(this, "state", {
768
+ __publicField$2(this, "state", {
717
769
  current: new ChatMessage(),
718
770
  messages: []
719
771
  });
720
- __publicField$1(this, "components", {
772
+ __publicField$2(this, "components", {
721
773
  MessageHistory: observer(() => {
722
774
  return /* @__PURE__ */ jsx(
723
775
  Box,
@@ -731,14 +783,13 @@ class ChatController {
731
783
  Textarea: makeTextarea(this)
732
784
  });
733
785
  __privateAdd(this, _promptsHistory, []);
734
- __publicField$1(this, "currentHistoryIndex", -1);
786
+ __publicField$2(this, "currentHistoryIndex", -1);
735
787
  __privateAdd(this, _internalAudioRecorder, new AudioRecorder());
736
- __publicField$1(this, "audioRecorder", {
788
+ __publicField$2(this, "audioRecorder", {
737
789
  start: () => __privateGet(this, _internalAudioRecorder).start().then(async (blob) => {
738
790
  const m = new AIMessageAttachments(
739
791
  AIMessageRole.USER,
740
792
  new AIFileContent(
741
- "this is a record from user's voice",
742
793
  await AIFileContent.blobToBase64(blob),
743
794
  `userRecord_${this.audioRecorder.record++}.wav`
744
795
  ),
@@ -752,7 +803,7 @@ class ChatController {
752
803
  record: 0,
753
804
  state: __privateGet(this, _internalAudioRecorder).state
754
805
  });
755
- __publicField$1(this, "history", {
806
+ __publicField$2(this, "history", {
756
807
  add: (message) => {
757
808
  this.currentHistoryIndex = -1;
758
809
  if (message === __privateGet(this, _promptsHistory)[__privateGet(this, _promptsHistory).length]) {
@@ -789,7 +840,7 @@ class ChatController {
789
840
  },
790
841
  size: () => this.state.messages.length
791
842
  });
792
- __publicField$1(this, "messages", {
843
+ __publicField$2(this, "messages", {
793
844
  add: (message, idx) => {
794
845
  if (idx !== void 0 && idx !== null) {
795
846
  this.state.messages.splice(idx, 0, message);
@@ -801,7 +852,7 @@ class ChatController {
801
852
  this.state.messages = [];
802
853
  }
803
854
  });
804
- __publicField$1(this, "attachments", {
855
+ __publicField$2(this, "attachments", {
805
856
  add: (...aiMessage) => {
806
857
  this.state.current.attachments.push(...aiMessage);
807
858
  },
@@ -813,7 +864,7 @@ class ChatController {
813
864
  if (!this.state.current.message && this.attachments.size() < 1)
814
865
  this.currentHistoryIndex = -1;
815
866
  },
816
- getComponents: () => this.state.current.attachments.map((x) => /* @__PURE__ */ jsx(x.Component, { closeButton: true }, x.id)),
867
+ getComponents: () => this.state.current.attachments.map((x) => /* @__PURE__ */ jsx(x.Component, { closeButton: true, canAddDescription: true }, x.id)),
817
868
  get: () => this.state.current.attachments,
818
869
  size: () => this.state.current.attachments.length
819
870
  });
@@ -854,21 +905,21 @@ class MultipleChoiceMessage extends ChatMessage {
854
905
  }
855
906
  }
856
907
 
857
- var __defProp = Object.defineProperty;
858
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
859
- var __publicField = (obj, key, value) => {
860
- __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
908
+ var __defProp$1 = Object.defineProperty;
909
+ var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
910
+ var __publicField$1 = (obj, key, value) => {
911
+ __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
861
912
  return value;
862
913
  };
863
914
  class ResponseStream extends EventEmitter {
864
915
  constructor() {
865
916
  super(...arguments);
866
- __publicField(this, "buffer", "");
867
- __publicField(this, "isRunning", false);
868
- __publicField(this, "locked", false);
869
- __publicField(this, "partSize", 2);
870
- __publicField(this, "stopped", false);
871
- __publicField(this, "waiting", []);
917
+ __publicField$1(this, "buffer", "");
918
+ __publicField$1(this, "isRunning", false);
919
+ __publicField$1(this, "locked", false);
920
+ __publicField$1(this, "partSize", 2);
921
+ __publicField$1(this, "stopped", false);
922
+ __publicField$1(this, "waiting", []);
872
923
  }
873
924
  close() {
874
925
  this.stopped = true;
@@ -911,5 +962,150 @@ class ResponseStream extends EventEmitter {
911
962
  }
912
963
  }
913
964
 
914
- export { AIMessageAttachments as AIMessage, AutoscrollContainer, ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream };
965
+ var __defProp = Object.defineProperty;
966
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
967
+ var __publicField = (obj, key, value) => {
968
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
969
+ return value;
970
+ };
971
+ function isPollProgress(payload) {
972
+ return payload?.progress !== void 0;
973
+ }
974
+ class RoutinesGeneration {
975
+ constructor() {
976
+ __publicField(this, "audioRecorder", new AudioRecorder());
977
+ __publicField(this, "routineId", "");
978
+ __publicField(this, "state", {
979
+ isLoading: false,
980
+ progress: 0
981
+ });
982
+ makeObservable(this, {
983
+ audioRecorder: action,
984
+ completion: action,
985
+ state: observable,
986
+ stop: action,
987
+ transcribeAudio: action
988
+ });
989
+ }
990
+ checkCanGenerate() {
991
+ if (this.state.isLoading) {
992
+ throw new Error("Cannot queue two simultaneous generations");
993
+ }
994
+ this.state.isLoading = true;
995
+ }
996
+ async pollRoutine(stream) {
997
+ while (this.state.isLoading) {
998
+ const pollResult = await this.poll(this.routineId);
999
+ if (isPollProgress(pollResult.payload)) {
1000
+ try {
1001
+ const res = JSON.parse(pollResult.payload.debug);
1002
+ if (res.length > 0) {
1003
+ res.forEach((c) => {
1004
+ console.log(JSON.parse(c));
1005
+ });
1006
+ }
1007
+ if (pollResult.payload.streamPart && stream) {
1008
+ stream.emit("part", pollResult.payload.streamPart);
1009
+ }
1010
+ this.state.progress = pollResult.payload.progress;
1011
+ } catch (e) {
1012
+ console.error(e);
1013
+ }
1014
+ } else if (pollResult.status === "FINISHED") {
1015
+ this.resetLoading();
1016
+ return pollResult.payload;
1017
+ } else {
1018
+ throw new Error("Wrong poll response");
1019
+ }
1020
+ }
1021
+ return null;
1022
+ }
1023
+ async executeRoutine(routineName, prompts, images, stream) {
1024
+ this.checkCanGenerate();
1025
+ try {
1026
+ const routineStartResult = await ApiaApi.post(
1027
+ makeApiaUrl({
1028
+ action: "routineStart",
1029
+ routine: routineName
1030
+ }),
1031
+ {
1032
+ postData: {
1033
+ images: JSON.stringify(images),
1034
+ ...prompts
1035
+ },
1036
+ stringifyOptions: {
1037
+ arrayFormat: "repeat"
1038
+ },
1039
+ postDataTreatement: "stringify"
1040
+ }
1041
+ );
1042
+ if (routineStartResult?.data?.orchestrator?.routineId !== void 0) {
1043
+ this.routineId = routineStartResult?.data?.orchestrator?.routineId;
1044
+ return this.pollRoutine(stream);
1045
+ } else {
1046
+ throw new Error("Cannot get routine id");
1047
+ }
1048
+ } catch (e) {
1049
+ this.resetLoading();
1050
+ throw e;
1051
+ }
1052
+ }
1053
+ async poll(routineId) {
1054
+ const result = await ApiaApi.post(
1055
+ makeApiaUrl({
1056
+ action: "routinePoll",
1057
+ routineId
1058
+ })
1059
+ );
1060
+ if (result?.data?.orchestrator) {
1061
+ return JSON.parse(result.data.orchestrator);
1062
+ } else {
1063
+ throw new Error("Poll failed");
1064
+ }
1065
+ }
1066
+ resetLoading() {
1067
+ this.state.isLoading = false;
1068
+ this.state.progress = 0;
1069
+ }
1070
+ async completion(params) {
1071
+ return this.executeRoutine(
1072
+ params.routineName,
1073
+ params.parameters ?? {},
1074
+ params.images ?? [],
1075
+ params.stream
1076
+ );
1077
+ }
1078
+ stop() {
1079
+ this.resetLoading();
1080
+ ApiaApi.get(
1081
+ makeApiaUrl({
1082
+ action: "routineStop",
1083
+ routineId: this.routineId
1084
+ })
1085
+ );
1086
+ }
1087
+ async transcribeAudio(audio) {
1088
+ const arrayBuffer = await audio.arrayBuffer();
1089
+ const url = makeApiaUrl({
1090
+ action: "routineStart",
1091
+ routine: "transcription/Transcribe"
1092
+ });
1093
+ const response = await axios.post(url, arrayBuffer, {
1094
+ headers: {
1095
+ "Content-Type": "application/octet-stream"
1096
+ }
1097
+ });
1098
+ if (response.data) {
1099
+ const result = await parseSuccessfulResponse(response, url);
1100
+ this.state.isLoading = true;
1101
+ if (result?.orchestrator?.routineId) {
1102
+ this.routineId = result?.orchestrator?.routineId;
1103
+ return await this.pollRoutine();
1104
+ }
1105
+ }
1106
+ throw new Error("Something went wrong while transcribing the audio");
1107
+ }
1108
+ }
1109
+
1110
+ export { AIMessageAttachments, AutoscrollContainer, ChatController, ChatMessage, MultipleChoiceMessage, ResponseStream, RoutinesGeneration };
915
1111
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/messages/ChatMessage.tsx","../src/components/chat/messages/aiMessage/AIContent.tsx","../src/components/chat/messages/aiMessage/types.ts","../src/components/chat/messages/aiMessage/AIFileContent.tsx","../src/components/chat/messages/aiMessage/AIMessage.tsx","../src/components/chat/files/handleFileUploadAsMessage.ts","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/stream/ResponseStream.ts"],"sourcesContent":["import { getVariant } from '@apia/theme';\r\nimport { ReactNode, useCallback, useRef } from 'react';\r\nimport { Box } from '@apia/theme';\r\n\r\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\r\n const observer = useRef<MutationObserver | null>(null);\r\n const unsuscribe = useRef<(() => void) | null>(null);\r\n const isFullScrolled = useRef(false);\r\n const hasInited = useRef(false);\r\n\r\n const ref = useCallback((el: HTMLElement) => {\r\n if (!el) return;\r\n\r\n if (!hasInited.current) {\r\n hasInited.current = true;\r\n el.scrollTo({\r\n top: el.getBoundingClientRect().height,\r\n behavior: 'auto',\r\n });\r\n isFullScrolled.current = true;\r\n }\r\n\r\n observer.current?.disconnect();\r\n unsuscribe.current?.();\r\n\r\n observer.current = new MutationObserver(([mutation]) => {\r\n if (\r\n mutation &&\r\n mutation.target instanceof HTMLElement &&\r\n mutation.target === el\r\n ) {\r\n if (\r\n isFullScrolled.current &&\r\n mutation.target.scrollTop !==\r\n mutation.target.scrollHeight - mutation.target.offsetHeight\r\n ) {\r\n // eslint-disable-next-line no-param-reassign\r\n mutation.target.scrollTo({\r\n top: mutation.target.scrollHeight,\r\n behavior: 'smooth',\r\n });\r\n }\r\n }\r\n });\r\n observer.current.observe(el, { childList: true, subtree: true });\r\n\r\n const handleScroll = (ev: Event) => {\r\n if (ev.target === el && el instanceof HTMLElement) {\r\n setTimeout(() => {\r\n isFullScrolled.current =\r\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\r\n }, 100);\r\n }\r\n };\r\n el.addEventListener('scroll', handleScroll);\r\n unsuscribe.current = () => {\r\n el.removeEventListener('scroll', handleScroll);\r\n };\r\n }, []);\r\n\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.autoscrollContainer')}\r\n className=\"autoscrollContainer\"\r\n ref={ref}\r\n >\r\n {children}\r\n </Box>\r\n );\r\n};\r\n","import { FileProcessor } from '../FileProcessor';\r\n\r\nexport function isImageFile(file: File) {\r\n const IMAGE_EXTENSIONS = [\r\n 'jpg',\r\n 'jpeg',\r\n 'png',\r\n 'gif',\r\n 'bmp',\r\n 'webp',\r\n 'tiff',\r\n 'svg',\r\n 'jfif',\r\n ];\r\n\r\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\r\n}\r\n\r\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\r\n return new (class ImageOcrMaker implements FileProcessor {\r\n async processFile(\r\n file: File,\r\n onProgress?: (progress: number) => unknown,\r\n ): Promise<string[]> {\r\n const tesseract = await import('tesseract.js');\r\n\r\n const worker = await tesseract.createWorker(lang, 1, {\r\n logger(arg) {\r\n onProgress?.(arg.progress * 100);\r\n },\r\n });\r\n\r\n const result = (await worker.recognize(file)).data.text;\r\n return [result];\r\n }\r\n\r\n willProcessFile(file: File) {\r\n return isImageFile(file);\r\n }\r\n })();\r\n}\r\n","import { FileProcessor } from '../FileProcessor';\r\n\r\nexport function isPdfFile(file: File) {\r\n const IMAGE_EXTENSIONS = ['pdf'];\r\n\r\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\r\n}\r\n\r\nexport default function getPdfReader() {\r\n return new (class PdfReader implements FileProcessor {\r\n async processFile(\r\n file: File,\r\n onProgress?: (progress: number) => void,\r\n ): Promise<string[]> {\r\n onProgress?.(0);\r\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\r\n\r\n async function getPdfTextFromArrayBuffer(\r\n buffer: ArrayBuffer,\r\n ): Promise<string[]> {\r\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.js';\r\n\r\n const pdf = await getDocument({ data: buffer }).promise;\r\n\r\n const pages: string[] = [];\r\n\r\n for (let i = 1; i <= pdf.numPages; i++) {\r\n const page = await pdf.getPage(i);\r\n const textContent = await page.getTextContent();\r\n\r\n // Concatenar texto de cada página\r\n pages.push(\r\n textContent.items\r\n .map((item) => (item as { str: string }).str)\r\n .join(' '),\r\n );\r\n }\r\n\r\n return pages;\r\n }\r\n\r\n return new Promise((resolve) => {\r\n const reader = new FileReader();\r\n\r\n reader.onload = async function (event: ProgressEvent<FileReader>) {\r\n if (!event.target?.result) {\r\n alert('Error al leer el archivo.');\r\n return;\r\n }\r\n\r\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\r\n const text = await getPdfTextFromArrayBuffer(buffer);\r\n\r\n onProgress?.(100);\r\n resolve(text);\r\n };\r\n\r\n reader.readAsArrayBuffer(file);\r\n });\r\n }\r\n\r\n willProcessFile(file: File) {\r\n return isPdfFile(file);\r\n }\r\n })();\r\n}\r\n","/* eslint-disable no-param-reassign */\r\nimport { ChangeEvent, useCallback, useState } from 'react';\r\nimport getImageOcrMaker, {\r\n isImageFile,\r\n} from '../../../files/ocr/getImageOcrMaker';\r\nimport getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader';\r\n\r\nexport class WrongFormatError extends Error {\r\n constructor(fileName: string) {\r\n super(`File format not supported: ${fileName}`);\r\n }\r\n}\r\n\r\nexport default function useHandleFileUpload({\r\n onContent,\r\n}: {\r\n onContent: (content: string[]) => unknown;\r\n}) {\r\n const [progress, setProgress] = useState(100);\r\n\r\n const handleFileUpload = useCallback(\r\n async (ev: ChangeEvent<HTMLInputElement>) => {\r\n setProgress(0);\r\n const imageProcessor = getImageOcrMaker('spa');\r\n const pdfProcessor = getPdfReader();\r\n\r\n await (async () => {\r\n const obtainedText: string[] = [];\r\n const files = ev.target.files;\r\n const filesLength = ev.target.files?.length ?? 0;\r\n if (files) {\r\n for (let i = 0; i < filesLength; i++) {\r\n const file = files[i];\r\n\r\n if (!isImageFile(file) && !isPdfFile(file)) {\r\n setProgress(100);\r\n throw new WrongFormatError(file.name);\r\n }\r\n\r\n const handleProgress = (progress: number) => {\r\n setProgress(\r\n (i / filesLength) * 100 +\r\n (1 / filesLength) * 100 * (progress / 100),\r\n );\r\n };\r\n\r\n let result = '';\r\n if (imageProcessor.willProcessFile(file)) {\r\n try {\r\n result = (\r\n await imageProcessor.processFile(file, handleProgress)\r\n )[0];\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n } else if (pdfProcessor.willProcessFile(file)) {\r\n result = (\r\n await pdfProcessor.processFile(file, handleProgress)\r\n ).join('\\n\\n');\r\n try {\r\n //\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n }\r\n\r\n if (result) {\r\n obtainedText.push(result);\r\n }\r\n\r\n setProgress(((i + 1) / filesLength) * 100);\r\n }\r\n }\r\n onContent(obtainedText);\r\n })();\r\n\r\n ev.target.value = '';\r\n },\r\n [onContent],\r\n );\r\n\r\n return { progress, handleFileUpload };\r\n}\r\n","import { ReactNode } from 'react';\r\nimport { TMessageType } from '../ChatController';\r\nimport { AIMessageAttachments } from './aiMessage/AIMessage';\r\nimport { Box } from '@apia/theme';\r\nimport { makeObservable, observable } from 'mobx';\r\n\r\nlet maxId = 0;\r\n\r\nexport class ChatMessage {\r\n id: number;\r\n\r\n parseMessage(message: string) {\r\n let result = message;\r\n\r\n result = result.replaceAll('[strong]', '<strong>');\r\n result = result.replaceAll('[/strong]', '</strong>');\r\n\r\n return result;\r\n }\r\n\r\n constructor(\r\n public message: ReactNode = '',\r\n public messageType: TMessageType = 'user',\r\n public attachments: AIMessageAttachments[] = [],\r\n ) {\r\n this.id = maxId++;\r\n if (messageType === 'response') this.messageType = 'system';\r\n if (typeof message === 'string') this.message = this.parseMessage(message);\r\n\r\n makeObservable(this, {\r\n attachments: observable,\r\n message: observable,\r\n messageType: observable,\r\n });\r\n }\r\n\r\n copy = () =>\r\n new ChatMessage(this.message, this.messageType, this.attachments);\r\n\r\n Component = () => {\r\n return (\r\n <Box\r\n as=\"pre\"\r\n className={`history__message ${this.messageType}`}\r\n key={this.id}\r\n >\r\n <Box\r\n className=\"text_wrapper\"\r\n {...(typeof this.message === 'string'\r\n ? { dangerouslySetInnerHTML: { __html: this.message } }\r\n : { children: this.message })}\r\n />\r\n <Box className=\"additionalContent_wrapper\">\r\n {this.attachments.map((x) => (\r\n <x.Component key={x.id} />\r\n ))}\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { Reactive } from './types';\r\nimport { ReactNode } from 'react';\r\n\r\nexport class AIContent implements Reactive {\r\n protected content: ReactNode;\r\n\r\n constructor(content: ReactNode) {\r\n this.content = content;\r\n }\r\n\r\n Component = () => {\r\n return (\r\n <Box variant={'layout.common.components.aiMessage.textBox'}>\r\n <Box variant={'layout.common.components.aiMessage.textSnippet'}>\r\n {this.content}\r\n </Box>\r\n </Box>\r\n );\r\n };\r\n}\r\n","import { FC } from 'react';\r\nexport const AIFileContentAllowedExtensions = {\r\n svg: 'svg',\r\n png: 'png',\r\n jpg: 'jpg',\r\n jpeg: 'jpeg',\r\n txt: 'txt',\r\n doc: 'doc',\r\n pdf: 'pdf',\r\n docx: 'docx',\r\n csv: 'csv',\r\n xlsx: 'xlsx',\r\n xls: 'xls',\r\n mp3: 'mp3',\r\n wav: 'wav',\r\n} as const;\r\n\r\nexport type AIFileContentAllowedExtension =\r\n keyof typeof AIFileContentAllowedExtensions;\r\n\r\nexport enum FileType {\r\n DOCUMENT = 'DOCUMENT',\r\n IMAGE = 'IMAGE',\r\n AUDIO = 'AUDIO',\r\n SHEET = 'SHEET',\r\n}\r\n\r\nexport enum AIMessageRole {\r\n USER = 'USER',\r\n SYSTEM = 'SYSTEM',\r\n}\r\n\r\nexport interface Reactive {\r\n Component: FC<any>;\r\n}\r\n","import { Box } from '@apia/theme';\r\nimport { AIContent } from './AIContent';\r\nimport {\r\n AIFileContentAllowedExtension,\r\n AIFileContentAllowedExtensions,\r\n FileType,\r\n Reactive,\r\n} from './types';\r\nimport { FileIcon } from '@apia/icons';\r\n\r\nexport class AIFileContent extends AIContent implements Reactive {\r\n type: FileType;\r\n fileUrl: string;\r\n fileName: string;\r\n extension: AIFileContentAllowedExtension;\r\n private __file: File | undefined;\r\n\r\n constructor(content: string, fileUrl: string, fileName: string, f?: File) {\r\n const extension = AIFileContent.getExtensionFromFileName(fileName);\r\n if (!AIFileContent.isValidExtension(extension))\r\n throw new Error(AIFileContent.getExtensionErrorMessage(extension));\r\n super(content);\r\n this.fileUrl = fileUrl;\r\n this.extension = extension;\r\n this.type = AIFileContent.inferExtension(extension);\r\n this.fileName = fileName;\r\n this.__file = f;\r\n }\r\n\r\n public get file() {\r\n if (!this.__file) throw new Error('File is undefined');\r\n return this.__file;\r\n }\r\n\r\n static blobToBase64 = async (blob: Blob) => {\r\n return await ((blob: Blob): Promise<string> =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n\r\n reader.onloadend = () => {\r\n const base64String = reader.result as string;\r\n resolve(base64String);\r\n };\r\n\r\n reader.onerror = reject;\r\n reader.readAsDataURL(blob);\r\n }))(blob);\r\n };\r\n\r\n static fromFile = async (\r\n f: File,\r\n content: string,\r\n ): Promise<AIFileContent> => {\r\n const fileUrl = await ((f: File) =>\r\n new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(f);\r\n reader.onload = () => resolve(reader.result as string);\r\n reader.onerror = () => reject();\r\n }))(f);\r\n return new AIFileContent(content, fileUrl, f.name, f);\r\n };\r\n\r\n static getExtensionFromFileName(fileName: string) {\r\n return fileName.split('.', 2).pop() as AIFileContentAllowedExtension;\r\n }\r\n\r\n static inferExtension = (extension: AIFileContentAllowedExtension) => {\r\n switch (extension) {\r\n case AIFileContentAllowedExtensions.jpg:\r\n case AIFileContentAllowedExtensions.jpeg:\r\n case AIFileContentAllowedExtensions.png:\r\n case AIFileContentAllowedExtensions.svg:\r\n return FileType.IMAGE;\r\n case AIFileContentAllowedExtensions.txt:\r\n case AIFileContentAllowedExtensions.doc:\r\n case AIFileContentAllowedExtensions.pdf:\r\n case AIFileContentAllowedExtensions.docx:\r\n return FileType.DOCUMENT;\r\n case AIFileContentAllowedExtensions.csv:\r\n case AIFileContentAllowedExtensions.xlsx:\r\n case AIFileContentAllowedExtensions.xls:\r\n return FileType.SHEET;\r\n case AIFileContentAllowedExtensions.mp3:\r\n case AIFileContentAllowedExtensions.wav:\r\n return FileType.AUDIO;\r\n default:\r\n throw new Error(AIFileContent.getExtensionErrorMessage(extension));\r\n }\r\n };\r\n\r\n static isValidExtension = (\r\n extension: string,\r\n ): extension is AIFileContentAllowedExtension => {\r\n return (\r\n Object.values(\r\n AIFileContentAllowedExtensions,\r\n ) as AIFileContentAllowedExtension[]\r\n ).includes(extension as AIFileContentAllowedExtension);\r\n };\r\n\r\n private static getExtensionErrorMessage(extension: string) {\r\n return `extension \"${extension}\" is not included into valid types:\\n${Object.keys(AIFileContentAllowedExtensions)}`;\r\n }\r\n\r\n Component = () => (\r\n <Box variant={'layout.common.components.aiMessage.fileBox'}>\r\n {FileType.IMAGE === this.type ? (\r\n <img src={URL.createObjectURL(this.file)} alt={this.fileName}></img>\r\n ) : (\r\n <FileIcon iconSize=\"lg\" docName={this.fileName} />\r\n )}\r\n <Box\r\n as={'p'}\r\n variant={'layout.common.components.aiMessage.fileName'}\r\n title={this.fileName}\r\n >\r\n {this.fileName}\r\n </Box>\r\n </Box>\r\n );\r\n}\r\n","import { AIMessageRole, Reactive } from './types';\r\nimport { AIContent } from './AIContent';\r\nimport { IconButton } from '@apia/components';\r\nimport { Box, getVariant } from '@apia/theme';\r\nimport { uniqueId } from '@apia/notifications';\r\nimport { getLabel } from '@apia/util';\r\n\r\nexport class AIMessageAttachments implements Reactive {\r\n role: AIMessageRole;\r\n content: AIContent;\r\n id = uniqueId();\r\n\r\n constructor(\r\n role: AIMessageRole,\r\n content: AIContent,\r\n private close?: () => void,\r\n ) {\r\n this.role = role;\r\n this.content = content;\r\n }\r\n\r\n Component = (props: { closeButton?: boolean }) => (\r\n <Box {...getVariant('layout.common.components.aiMessage')}>\r\n {props.closeButton ? (\r\n <IconButton\r\n className=\"closeButton\"\r\n size=\"Md\"\r\n icon=\"Close\"\r\n onClick={this.close}\r\n title={getLabel('lblDeleteItem').title}\r\n ></IconButton>\r\n ) : (\r\n <></>\r\n )}\r\n <this.content.Component />\r\n </Box>\r\n );\r\n}\r\n","import { ChatController } from '../ChatController';\r\nimport { AIFileContent } from '../messages/aiMessage/AIFileContent';\r\nimport { AIMessageAttachments } from '../messages/aiMessage/AIMessage';\r\nimport { AIMessageRole } from '../messages/aiMessage/types';\r\n\r\nexport const handleFileUploadAsMessage = async (\r\n fileInputElement: HTMLInputElement,\r\n chatController: ChatController,\r\n) => {\r\n if (fileInputElement.files) {\r\n [...fileInputElement.files].forEach(async (f) => {\r\n const m: AIMessageAttachments = new AIMessageAttachments(\r\n AIMessageRole.USER,\r\n await AIFileContent.fromFile(\r\n f,\r\n 'you must collect information contained in this image as help to build your tool choice',\r\n ),\r\n () => chatController.attachments.drop(m),\r\n );\r\n chatController.attachments.add(m);\r\n });\r\n }\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\r\nimport { ChatController } from './ChatController';\r\nimport { IconButton, SimpleButton } from '@apia/components';\r\nimport { Box, Textarea } from '@apia/theme';\r\nimport useHandleFileUpload, {\r\n WrongFormatError,\r\n} from './files/useHandleFileUpload';\r\nimport { getLabel, noNaN } from '@apia/util';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\nimport { handleFileUploadAsMessage } from './files/handleFileUploadAsMessage';\r\nimport { observer } from 'mobx-react-lite';\r\n\r\nexport const makeTextarea = (chatController: ChatController) => {\r\n const NewTextarea = observer(\r\n ({\r\n hideDeleteButton,\r\n isLoading: outIsLoading,\r\n onSubmit,\r\n preventAppendUserMessages,\r\n }: {\r\n hideDeleteButton?: boolean;\r\n isLoading?: boolean;\r\n onSubmit: (chatMessage: ChatMessage) => Promise<void>;\r\n preventAppendUserMessages?: boolean;\r\n }) => {\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const submit = useCallback(() => {\r\n if (preventAppendUserMessages !== true)\r\n chatController.messages.add(chatController.state.current);\r\n\r\n chatController.history.add(chatController.state.current);\r\n\r\n onSubmit(chatController.state.current).finally(() => {\r\n setIsLoading(false);\r\n\r\n chatController.state.current = new ChatMessage();\r\n });\r\n }, [onSubmit, preventAppendUserMessages]);\r\n\r\n const handleSubmit = useCallback(\r\n (ev: FormEvent<HTMLFormElement>) => {\r\n ev.preventDefault();\r\n if (\r\n chatController.state.current.message ||\r\n chatController.attachments.size() > 0\r\n ) {\r\n setIsLoading(true);\r\n submit();\r\n }\r\n const textarea = document.getElementById(\r\n `GPTMessage${chatController.id}`,\r\n ) as HTMLTextAreaElement;\r\n textarea.focus();\r\n },\r\n [submit],\r\n );\r\n\r\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\r\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\r\n\r\n if (ev.code === 'Enter' && !ev.shiftKey) {\r\n ev.preventDefault();\r\n (ev.target as HTMLElement)\r\n .closest('form')\r\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\r\n ?.click();\r\n }\r\n }, []);\r\n\r\n const { progress, handleFileUpload } = useHandleFileUpload({\r\n onContent(content) {\r\n (\r\n document.getElementById(\r\n `GPTMessage${chatController.id}`,\r\n ) as HTMLTextAreaElement\r\n ).value = content.join('\\n\\n');\r\n },\r\n });\r\n\r\n const actualIsLoading = isLoading || progress !== 100 || outIsLoading;\r\n\r\n const [dragging, setDragging] = useState(false);\r\n\r\n const handleDragLeave = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n setDragging(false);\r\n };\r\n\r\n const handleDrop = (ev: React.DragEvent<HTMLFormElement>) => {\r\n ev.preventDefault();\r\n setDragging(false);\r\n const fileElement = document.getElementById(\r\n `gptUploadFile__${chatController.id}`,\r\n ) as HTMLInputElement;\r\n fileElement.files = ev.dataTransfer.files;\r\n const event = new Event('change', { bubbles: true });\r\n fileElement.dispatchEvent(event);\r\n };\r\n\r\n const handleDragOver = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n };\r\n\r\n const handleDragEnter = (ev: React.DragEvent<HTMLElement>) => {\r\n ev.preventDefault();\r\n setDragging(true);\r\n };\r\n\r\n return (\r\n <Box sx={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\r\n <Box\r\n sx={{\r\n flexWrap: 'wrap',\r\n display: 'flex',\r\n maxHeight: '280px',\r\n overflowY: 'auto',\r\n paddingTop: '6px',\r\n paddingBottom: '6px',\r\n }}\r\n >\r\n {chatController.attachments.getComponents()}\r\n </Box>\r\n <form\r\n onDrop={handleDrop}\r\n onDragOver={handleDragOver}\r\n onDragEnter={handleDragEnter}\r\n onDragLeave={handleDragLeave}\r\n onSubmit={handleSubmit}\r\n className=\"gpt__form\"\r\n action=\"\"\r\n >\r\n {dragging ? (\r\n <Box\r\n sx={{\r\n height: '150px',\r\n border: '3px dashed #aaa',\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n >\r\n {getLabel('msgAiDragAndDrop').text}\r\n </Box>\r\n ) : (\r\n <Textarea\r\n onKeyDown={onKeyDown}\r\n id={`GPTMessage${chatController.id}`}\r\n readOnly={actualIsLoading}\r\n value={chatController.state.current.message as string}\r\n onChange={(ev) => {\r\n chatController.state.current.message = ev.target.value;\r\n if (\r\n !chatController.state.current.message &&\r\n chatController.attachments.size() < 1\r\n )\r\n chatController.currentHistoryIndex = -1;\r\n }}\r\n />\r\n )}\r\n\r\n <Box className=\"gpt__buttonsContainer\">\r\n <Box sx={{ display: 'none' }}>\r\n <input\r\n type=\"file\"\r\n className=\"gptUploadFile\"\r\n multiple\r\n id={`gptUploadFile__${chatController.id}`}\r\n onChange={(ev) => {\r\n if (1 == noNaN('a'))\r\n handleFileUpload(ev).catch((e) => {\r\n if (e instanceof WrongFormatError) {\r\n setIsLoading(false);\r\n chatController.messages.add(\r\n new ChatMessage(\r\n getLabel('msgAiFileExtensionError').text,\r\n 'error',\r\n ),\r\n );\r\n } else {\r\n throw e;\r\n }\r\n });\r\n else {\r\n handleFileUploadAsMessage(ev.target, chatController);\r\n }\r\n\r\n ev.target.value = '';\r\n }}\r\n />\r\n </Box>\r\n <IconButton\r\n variant=\"icon-outline\"\r\n onClick={() =>\r\n !chatController.audioRecorder.state.recording\r\n ? chatController.audioRecorder.start()\r\n : chatController.audioRecorder.stop()\r\n }\r\n disabled={\r\n actualIsLoading &&\r\n !chatController.audioRecorder.state.recording\r\n }\r\n sx={{\r\n color: chatController.audioRecorder.state.recording\r\n ? 'red'\r\n : undefined,\r\n }}\r\n icon={\r\n chatController.audioRecorder.state.recording\r\n ? 'Stop'\r\n : 'Microphone'\r\n }\r\n id=\"transcribeAudio\"\r\n size=\"Lg\"\r\n title=\"TODO: MAKE LABEL TRANSCRIBE AUDIO\"\r\n />\r\n <IconButton\r\n title={getLabel('btnUploadFile').text}\r\n icon=\"File\"\r\n variant=\"icon-outline\"\r\n disabled={actualIsLoading}\r\n onClick={() => {\r\n (\r\n document.getElementById(\r\n `gptUploadFile__${chatController.id}`,\r\n ) as HTMLElement\r\n ).click();\r\n }}\r\n size=\"Lg\"\r\n />\r\n <SimpleButton\r\n title={getLabel('btnAiPrevious').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={chatController.history.previous}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiPrevious').text}\r\n </SimpleButton>\r\n <SimpleButton\r\n title={getLabel('btnAiNext').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={chatController.history.next}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiNext').text}\r\n </SimpleButton>\r\n {!hideDeleteButton && (\r\n <>\r\n <SimpleButton\r\n title={getLabel('btnAiDelete').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => {\r\n chatController.state.current.message = '';\r\n chatController.attachments.dropAll();\r\n chatController.currentHistoryIndex = -1;\r\n }}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDelete').text}\r\n </SimpleButton>\r\n <SimpleButton\r\n title={getLabel('btnAiDeleteMessages').title}\r\n variant=\"outline\"\r\n type=\"button\"\r\n onClick={() => chatController.messages.clear()}\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiDeleteMessages').text}\r\n </SimpleButton>\r\n </>\r\n )}\r\n <SimpleButton\r\n title={getLabel('btnAiSend').title}\r\n isLoading={actualIsLoading}\r\n type=\"submit\"\r\n size=\"sm\"\r\n >\r\n {getLabel('btnAiSend').text}\r\n </SimpleButton>\r\n </Box>\r\n </form>\r\n </Box>\r\n );\r\n },\r\n );\r\n\r\n NewTextarea.displayName = '';\r\n\r\n return NewTextarea;\r\n};\r\n","/* eslint-disable no-param-reassign */\r\nimport { getVariant } from '@apia/theme';\r\nimport { Box } from '@apia/theme';\r\nimport { AutoscrollContainer } from './AutoscrollContainer';\r\nimport { makeTextarea } from './Textarea';\r\nimport { ChatMessage } from './messages/ChatMessage';\r\nimport { AIMessageAttachments } from './messages/aiMessage/AIMessage';\r\nimport { makeObservable, observable } from 'mobx';\r\nimport { observer } from 'mobx-react-lite';\r\nimport { AudioRecorder } from '@apia/util';\r\nimport { AIMessageRole } from './messages/aiMessage/types';\r\nimport { AIFileContent } from './messages/aiMessage/AIFileContent';\r\n\r\nexport type TMessageType =\r\n | 'user'\r\n | 'system'\r\n | 'warning'\r\n | 'error'\r\n | 'information'\r\n | 'response'\r\n | 'multipleChoice'\r\n | 'customMessage';\r\n\r\ntype ChatControllerState = {\r\n current: ChatMessage;\r\n messages: ChatMessage[];\r\n};\r\n\r\nexport class ChatController {\r\n state: ChatControllerState = {\r\n current: new ChatMessage(),\r\n messages: [],\r\n };\r\n\r\n constructor(\r\n public id: string,\r\n welcomeMessage?: string,\r\n ) {\r\n if (welcomeMessage) {\r\n this.state.messages.splice(\r\n 0,\r\n 0,\r\n new ChatMessage(welcomeMessage, 'system'),\r\n );\r\n }\r\n\r\n makeObservable(this, { state: observable });\r\n }\r\n\r\n components = {\r\n MessageHistory: observer(() => {\r\n return (\r\n <Box\r\n {...getVariant('layout.common.components.chat')}\r\n className=\"history\"\r\n >\r\n <AutoscrollContainer>\r\n {this.state.messages.map((current) => (\r\n <current.Component key={current.id} />\r\n ))}\r\n </AutoscrollContainer>\r\n </Box>\r\n );\r\n }),\r\n Textarea: makeTextarea(this),\r\n };\r\n\r\n #promptsHistory: ChatMessage[] = [];\r\n currentHistoryIndex = -1;\r\n\r\n #internalAudioRecorder = new AudioRecorder();\r\n\r\n audioRecorder = {\r\n start: () =>\r\n this.#internalAudioRecorder.start().then(async (blob: Blob) => {\r\n const m: AIMessageAttachments = new AIMessageAttachments(\r\n AIMessageRole.USER,\r\n new AIFileContent(\r\n \"this is a record from user's voice\",\r\n await AIFileContent.blobToBase64(blob),\r\n `userRecord_${this.audioRecorder.record++}.wav`,\r\n ),\r\n () => this.attachments.drop(m),\r\n );\r\n this.attachments.add(m);\r\n }),\r\n stop: async () => {\r\n this.#internalAudioRecorder.stop();\r\n },\r\n record: 0,\r\n state: this.#internalAudioRecorder.state,\r\n };\r\n\r\n history = {\r\n add: (message: ChatMessage) => {\r\n this.currentHistoryIndex = -1;\r\n\r\n if (message === this.#promptsHistory[this.#promptsHistory.length]) {\r\n return;\r\n }\r\n\r\n this.#promptsHistory = [\r\n message,\r\n ...this.#promptsHistory.slice(\r\n Math.max(0, this.#promptsHistory.length - 10),\r\n ),\r\n ];\r\n },\r\n next: () => {\r\n let message = new ChatMessage();\r\n if (this.#promptsHistory[this.currentHistoryIndex - 1])\r\n message = this.#promptsHistory[--this.currentHistoryIndex].copy();\r\n else {\r\n this.currentHistoryIndex = -1;\r\n }\r\n this.history.updateState(message);\r\n },\r\n previous: () => {\r\n if (this.#promptsHistory[this.currentHistoryIndex + 1]) {\r\n this.history.updateState(\r\n this.#promptsHistory[++this.currentHistoryIndex].copy(),\r\n );\r\n }\r\n },\r\n updateState: (message?: ChatMessage) => {\r\n if (message) this.state.current = message;\r\n else this.state.current = new ChatMessage();\r\n },\r\n size: () => this.state.messages.length,\r\n };\r\n\r\n messages = {\r\n add: (message: ChatMessage, idx?: number) => {\r\n if (idx !== undefined && idx !== null) {\r\n this.state.messages.splice(idx, 0, message);\r\n } else {\r\n this.state.messages.push(message);\r\n }\r\n },\r\n clear: () => {\r\n this.state.messages = [];\r\n },\r\n };\r\n\r\n attachments = {\r\n add: (...aiMessage: AIMessageAttachments[]) => {\r\n this.state.current.attachments.push(...aiMessage);\r\n },\r\n dropAll: () => void (this.state.current.attachments = []),\r\n drop: (el: AIMessageAttachments) => {\r\n this.state.current.attachments = this.state.current.attachments.filter(\r\n (c) => c !== el,\r\n );\r\n if (!this.state.current.message && this.attachments.size() < 1)\r\n this.currentHistoryIndex = -1;\r\n },\r\n getComponents: () =>\r\n this.state.current.attachments.map((x) => (\r\n <x.Component closeButton key={x.id} />\r\n )),\r\n get: () => this.state.current.attachments,\r\n size: () => this.state.current.attachments.length,\r\n };\r\n}\r\n","import { ApiaUtil, SimpleButton } from '@apia/components';\r\nimport { ChatMessage } from './ChatMessage';\r\nimport { Box, Paragraph } from '@apia/theme';\r\nimport { ReactElement } from 'react';\r\n\r\nexport type TMultipleChoiceMessageOption<OptionProps> = {\r\n label: string;\r\n url: string;\r\n additionalProps?: OptionProps;\r\n};\r\n\r\nexport class MultipleChoiceMessage<OptionProps> extends ChatMessage {\r\n constructor(\r\n question: string,\r\n options: TMultipleChoiceMessageOption<OptionProps>[],\r\n Renderer?: (props: {\r\n item: TMultipleChoiceMessageOption<OptionProps>;\r\n }) => ReactElement,\r\n ) {\r\n super(\r\n Renderer ? (\r\n <Box className=\"multipleChoiceMessage customRenderer\">\r\n <Paragraph>{question}</Paragraph>\r\n {options.map((item) => (\r\n <Renderer item={item} key={item.url} />\r\n ))}\r\n </Box>\r\n ) : (\r\n <Box className=\"multipleChoiceMessage\">\r\n <Paragraph>{question}</Paragraph>\r\n <Box as=\"ul\">\r\n {options.map((current) => (\r\n <li key={current.label}>\r\n <SimpleButton\r\n className=\"multipleChoice__option\"\r\n onClick={() => {\r\n ApiaUtil.instance.tabs.openTab(current.label, current.url);\r\n }}\r\n >\r\n {current.label}\r\n </SimpleButton>\r\n </li>\r\n ))}\r\n </Box>\r\n </Box>\r\n ),\r\n 'multipleChoice',\r\n );\r\n }\r\n}\r\n","import { EventEmitter } from '@apia/util';\r\n\r\nexport class ResponseStream extends EventEmitter<{ part: string }> {\r\n private buffer: string = '';\r\n private isRunning = false;\r\n private locked = false;\r\n private partSize = 2;\r\n private stopped = false;\r\n private waiting: string[] = [];\r\n\r\n public close() {\r\n this.stopped = true;\r\n }\r\n\r\n emit<K extends 'part'>(_: K, data: { part: string }[K]): void {\r\n if (this.locked) {\r\n this.waiting.push(data);\r\n } else {\r\n this.buffer += data;\r\n }\r\n this.run();\r\n }\r\n\r\n run() {\r\n if (!this.isRunning) {\r\n this.isRunning = true;\r\n const interval = setInterval(() => {\r\n if (this.stopped) {\r\n super.emit('part', this.buffer + this.waiting.join(''));\r\n clearInterval(interval);\r\n } else {\r\n this.locked = true;\r\n const part = this.buffer.slice(0, this.partSize);\r\n this.buffer = this.buffer.slice(this.partSize);\r\n while (this.waiting.length > 0) {\r\n const part = this.waiting.shift();\r\n if (part) {\r\n this.buffer += part;\r\n }\r\n }\r\n this.locked = false;\r\n if (part) {\r\n super.emit('part', part);\r\n } else {\r\n this.isRunning = false;\r\n clearInterval(interval);\r\n }\r\n }\r\n }, 5);\r\n }\r\n }\r\n}\r\n"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","part"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/chat/AutoscrollContainer.tsx","../src/files/ocr/getImageOcrMaker.ts","../src/files/pdf/getPdfReader.ts","../src/components/chat/files/useHandleFileUpload.ts","../src/components/chat/messages/ChatMessage.tsx","../src/components/chat/messages/aiMessage/AIContent.tsx","../src/components/chat/messages/aiMessage/types.ts","../src/components/chat/messages/aiMessage/AIFileContent.tsx","../src/components/chat/messages/aiMessage/AIMessageAttachments.tsx","../src/components/chat/files/handleFileUploadAsMessage.ts","../src/components/chat/Textarea.tsx","../src/components/chat/ChatController.tsx","../src/components/chat/messages/MultipleChoiceMessage.tsx","../src/stream/ResponseStream.ts","../src/routines/RoutinesGeneration.ts"],"sourcesContent":["import { getVariant } from '@apia/theme';\nimport { ReactNode, useCallback, useRef } from 'react';\nimport { Box } from '@apia/theme';\n\nexport const AutoscrollContainer = ({ children }: { children: ReactNode }) => {\n const observer = useRef<MutationObserver | null>(null);\n const unsuscribe = useRef<(() => void) | null>(null);\n const isFullScrolled = useRef(false);\n const hasInited = useRef(false);\n\n const ref = useCallback((el: HTMLElement) => {\n if (!el) return;\n\n if (!hasInited.current) {\n hasInited.current = true;\n el.scrollTo({\n top: el.getBoundingClientRect().height,\n behavior: 'auto',\n });\n isFullScrolled.current = true;\n }\n\n observer.current?.disconnect();\n unsuscribe.current?.();\n\n observer.current = new MutationObserver(([mutation]) => {\n if (\n mutation &&\n mutation.target instanceof HTMLElement &&\n mutation.target === el\n ) {\n if (\n isFullScrolled.current &&\n mutation.target.scrollTop !==\n mutation.target.scrollHeight - mutation.target.offsetHeight\n ) {\n // eslint-disable-next-line no-param-reassign\n mutation.target.scrollTo({\n top: mutation.target.scrollHeight,\n behavior: 'smooth',\n });\n }\n }\n });\n observer.current.observe(el, { childList: true, subtree: true });\n\n const handleScroll = (ev: Event) => {\n if (ev.target === el && el instanceof HTMLElement) {\n setTimeout(() => {\n isFullScrolled.current =\n Math.abs(el.scrollTop - (el.scrollHeight - el.offsetHeight)) < 150;\n }, 100);\n }\n };\n el.addEventListener('scroll', handleScroll);\n unsuscribe.current = () => {\n el.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n return (\n <Box\n {...getVariant('layout.common.components.autoscrollContainer')}\n className=\"autoscrollContainer\"\n ref={ref}\n >\n {children}\n </Box>\n );\n};\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isImageFile(file: File) {\n const IMAGE_EXTENSIONS = [\n 'jpg',\n 'jpeg',\n 'png',\n 'gif',\n 'bmp',\n 'webp',\n 'tiff',\n 'svg',\n 'jfif',\n ];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getImageOcrMaker(lang: 'eng' | 'spa') {\n return new (class ImageOcrMaker implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => unknown,\n ): Promise<string[]> {\n const tesseract = await import('tesseract.js');\n\n const worker = await tesseract.createWorker(lang, 1, {\n logger(arg) {\n onProgress?.(arg.progress * 100);\n },\n });\n\n const result = (await worker.recognize(file)).data.text;\n return [result];\n }\n\n willProcessFile(file: File) {\n return isImageFile(file);\n }\n })();\n}\n","import { FileProcessor } from '../FileProcessor';\n\nexport function isPdfFile(file: File) {\n const IMAGE_EXTENSIONS = ['pdf'];\n\n return IMAGE_EXTENSIONS.includes(file.name.split('.').pop() as string);\n}\n\nexport default function getPdfReader() {\n return new (class PdfReader implements FileProcessor {\n async processFile(\n file: File,\n onProgress?: (progress: number) => void,\n ): Promise<string[]> {\n onProgress?.(0);\n const { getDocument, GlobalWorkerOptions } = await import('pdfjs-dist');\n\n async function getPdfTextFromArrayBuffer(\n buffer: ArrayBuffer,\n ): Promise<string[]> {\n GlobalWorkerOptions.workerSrc = '../includes/pdf.worker.min.js';\n\n const pdf = await getDocument({ data: buffer }).promise;\n\n const pages: string[] = [];\n\n for (let i = 1; i <= pdf.numPages; i++) {\n const page = await pdf.getPage(i);\n const textContent = await page.getTextContent();\n\n // Concatenar texto de cada página\n pages.push(\n textContent.items\n .map((item) => (item as { str: string }).str)\n .join(' '),\n );\n }\n\n return pages;\n }\n\n return new Promise((resolve) => {\n const reader = new FileReader();\n\n reader.onload = async function (event: ProgressEvent<FileReader>) {\n if (!event.target?.result) {\n alert('Error al leer el archivo.');\n return;\n }\n\n const buffer: ArrayBuffer = event.target.result as ArrayBuffer;\n const text = await getPdfTextFromArrayBuffer(buffer);\n\n onProgress?.(100);\n resolve(text);\n };\n\n reader.readAsArrayBuffer(file);\n });\n }\n\n willProcessFile(file: File) {\n return isPdfFile(file);\n }\n })();\n}\n","/* eslint-disable no-param-reassign */\nimport { ChangeEvent, useCallback, useState } from 'react';\nimport getImageOcrMaker, {\n isImageFile,\n} from '../../../files/ocr/getImageOcrMaker';\nimport getPdfReader, { isPdfFile } from '../../../files/pdf/getPdfReader';\n\nexport class WrongFormatError extends Error {\n constructor(fileName: string) {\n super(`File format not supported: ${fileName}`);\n }\n}\n\nexport default function useHandleFileUpload({\n onContent,\n}: {\n onContent: (content: string[]) => unknown;\n}) {\n const [progress, setProgress] = useState(100);\n\n const handleFileUpload = useCallback(\n async (ev: ChangeEvent<HTMLInputElement>) => {\n setProgress(0);\n const imageProcessor = getImageOcrMaker('spa');\n const pdfProcessor = getPdfReader();\n\n await (async () => {\n const obtainedText: string[] = [];\n const files = ev.target.files;\n const filesLength = ev.target.files?.length ?? 0;\n if (files) {\n for (let i = 0; i < filesLength; i++) {\n const file = files[i];\n\n if (!isImageFile(file) && !isPdfFile(file)) {\n setProgress(100);\n throw new WrongFormatError(file.name);\n }\n\n const handleProgress = (progress: number) => {\n setProgress(\n (i / filesLength) * 100 +\n (1 / filesLength) * 100 * (progress / 100),\n );\n };\n\n let result = '';\n if (imageProcessor.willProcessFile(file)) {\n try {\n result = (\n await imageProcessor.processFile(file, handleProgress)\n )[0];\n } catch (e) {\n console.error(e);\n }\n } else if (pdfProcessor.willProcessFile(file)) {\n result = (\n await pdfProcessor.processFile(file, handleProgress)\n ).join('\\n\\n');\n try {\n //\n } catch (e) {\n console.error(e);\n }\n }\n\n if (result) {\n obtainedText.push(result);\n }\n\n setProgress(((i + 1) / filesLength) * 100);\n }\n }\n onContent(obtainedText);\n })();\n\n ev.target.value = '';\n },\n [onContent],\n );\n\n return { progress, handleFileUpload };\n}\n","import { ReactNode } from 'react';\nimport { TMessageType } from '../ChatController';\nimport { AIMessageAttachments } from './aiMessage/AIMessageAttachments';\nimport { Box } from '@apia/theme';\nimport { makeObservable, observable } from 'mobx';\n\nlet maxId = 0;\n\nexport class ChatMessage {\n id: number;\n\n parseMessage(message: string) {\n let result = message;\n\n result = result.replaceAll('[strong]', '<strong>');\n result = result.replaceAll('[/strong]', '</strong>');\n\n return result;\n }\n\n constructor(\n public message: ReactNode = '',\n public messageType: TMessageType = 'user',\n public attachments: AIMessageAttachments[] = [],\n ) {\n this.id = maxId++;\n if (messageType === 'response') this.messageType = 'system';\n if (typeof message === 'string') this.message = this.parseMessage(message);\n\n makeObservable(this, {\n attachments: observable,\n message: observable,\n messageType: observable,\n });\n }\n\n copy = () =>\n new ChatMessage(this.message, this.messageType, this.attachments);\n\n Component = () => {\n return (\n <Box\n as=\"pre\"\n className={`history__message ${this.messageType}`}\n key={this.id}\n >\n <Box\n className=\"text_wrapper\"\n {...(typeof this.message === 'string'\n ? { dangerouslySetInnerHTML: { __html: this.message } }\n : { children: this.message })}\n />\n <Box className=\"additionalContent_wrapper\">\n {this.attachments.map((x) => (\n <x.Component key={x.id} />\n ))}\n </Box>\n </Box>\n );\n };\n}\n","import { Box } from '@apia/theme';\nimport { Reactive } from './types';\nimport { ReactNode } from 'react';\n\nexport class AIContent implements Reactive {\n content: ReactNode;\n\n constructor(content?: ReactNode) {\n this.content = content;\n }\n\n Component = () => {\n return (\n <Box variant={'layout.common.components.aiMessage.textBox'}>\n <Box variant={'layout.common.components.aiMessage.textSnippet'}>\n {this.content}\n </Box>\n </Box>\n );\n };\n}\n","import { FC } from 'react';\n\n// CONSTANTS\nexport const AIFileContentAllowedExtensions = {\n svg: 'svg',\n png: 'png',\n jpg: 'jpg',\n jpeg: 'jpeg',\n txt: 'txt',\n doc: 'doc',\n pdf: 'pdf',\n docx: 'docx',\n csv: 'csv',\n xlsx: 'xlsx',\n xls: 'xls',\n mp3: 'mp3',\n wav: 'wav',\n} as const;\n\n// TYPES\nexport type AIFileContentAllowedExtension =\n keyof typeof AIFileContentAllowedExtensions;\n\nexport type TAttachmentErrorCallback = 'fileExtension' | 'blobGeneration';\n\n//ENUMS\nexport enum FileType {\n DOCUMENT = 'DOCUMENT',\n IMAGE = 'IMAGE',\n AUDIO = 'AUDIO',\n SHEET = 'SHEET',\n}\n\nexport enum AIMessageRole {\n USER = 'USER',\n SYSTEM = 'SYSTEM',\n}\n\n// INTERFACES\nexport interface Reactive {\n Component: FC<any>;\n}\n","import { Box } from '@apia/theme';\nimport { AIContent } from './AIContent';\nimport {\n AIFileContentAllowedExtension,\n AIFileContentAllowedExtensions,\n FileType,\n Reactive,\n TAttachmentErrorCallback,\n} from './types';\nimport { FileIcon } from '@apia/icons';\n\nexport class AIFileContent extends AIContent implements Reactive {\n type: FileType;\n fileUrl: string;\n fileName: string;\n extension: AIFileContentAllowedExtension;\n private __file: File | undefined;\n private __error?: Partial<Record<TAttachmentErrorCallback, () => void>>;\n\n constructor(\n fileUrl: string,\n fileName: string,\n f?: File,\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\n ) {\n const extension = AIFileContent.getExtensionFromFileName(fileName);\n super();\n this.__error = error;\n if (!AIFileContent.isValidExtension(extension))\n this.__throwError(\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\n this.__error?.fileExtension,\n );\n this.fileUrl = fileUrl;\n this.extension = extension;\n this.type = this.inferExtension(this.extension) as FileType;\n this.fileName = fileName;\n this.__file = f;\n this.content = this.inferContent();\n }\n\n // PUBLIC METHODS\n\n public get file() {\n if (!this.__file) throw new Error('File is undefined');\n return this.__file;\n }\n\n public inferContent = () => {\n return `You must collect information contained in this ${this.type} as help to build your tool choice.`;\n };\n\n public inferExtension = (extension: AIFileContentAllowedExtension) => {\n switch (extension) {\n case AIFileContentAllowedExtensions.jpg:\n case AIFileContentAllowedExtensions.jpeg:\n case AIFileContentAllowedExtensions.png:\n case AIFileContentAllowedExtensions.svg:\n return FileType.IMAGE;\n case AIFileContentAllowedExtensions.txt:\n case AIFileContentAllowedExtensions.doc:\n case AIFileContentAllowedExtensions.pdf:\n case AIFileContentAllowedExtensions.docx:\n return FileType.DOCUMENT;\n case AIFileContentAllowedExtensions.csv:\n case AIFileContentAllowedExtensions.xlsx:\n case AIFileContentAllowedExtensions.xls:\n return FileType.SHEET;\n case AIFileContentAllowedExtensions.mp3:\n case AIFileContentAllowedExtensions.wav:\n return FileType.AUDIO;\n default:\n this.__throwError(\n new Error(AIFileContent.__getExtensionErrorMessage(extension)),\n this.__error?.fileExtension,\n );\n }\n };\n\n // STATIC METHODS\n\n static isValidExtension = (\n extension: string,\n ): extension is AIFileContentAllowedExtension => {\n return (\n Object.values(\n AIFileContentAllowedExtensions,\n ) as AIFileContentAllowedExtension[]\n ).includes(extension as AIFileContentAllowedExtension);\n };\n\n static blobToBase64 = async (blob: Blob) => {\n return await ((blob: Blob): Promise<string> =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n\n reader.onloadend = () => {\n const base64String = reader.result as string;\n resolve(base64String);\n };\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n }))(blob);\n };\n\n static fromFile = async (\n f: File,\n error?: Partial<Record<TAttachmentErrorCallback, () => void>>,\n ): Promise<AIFileContent> => {\n const fileUrl = await ((f: File) =>\n new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(f);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = () => reject();\n }))(f);\n return new AIFileContent(fileUrl, f.name, f, error);\n };\n\n static getExtensionFromFileName(fileName: string) {\n return fileName.split('.', 2).pop() as AIFileContentAllowedExtension;\n }\n\n // PRIVATE METHODS\n\n private static __getExtensionErrorMessage(extension: string) {\n return `extension \"${extension}\" is not included into valid types:\\n${Object.keys(AIFileContentAllowedExtensions)}`;\n }\n\n private __throwError(e: Error, callback?: () => void) {\n callback && callback();\n throw e;\n }\n\n // COMPONENT METHODS\n\n Component = () => (\n <Box variant={'layout.common.components.aiMessage.fileBox'}>\n {FileType.IMAGE === this.type ? (\n <img src={URL.createObjectURL(this.file)} alt={this.fileName}></img>\n ) : (\n <FileIcon iconSize=\"lg\" docName={this.fileName} />\n )}\n <Box\n as={'p'}\n variant={'layout.common.components.aiMessage.fileName'}\n title={this.fileName}\n >\n {this.fileName}\n </Box>\n </Box>\n );\n}\n","import { AIMessageRole, Reactive } from './types';\nimport { AIContent } from './AIContent';\nimport { IconButton } from '@apia/components';\nimport { Box, getVariant } from '@apia/theme';\nimport { uniqueId } from '@apia/notifications';\nimport { getLabel } from '@apia/util';\nimport { Collector } from '@apia/validations';\n\nexport class AIMessageAttachments implements Reactive {\n role: AIMessageRole;\n content: AIContent;\n id = uniqueId();\n\n constructor(\n role: AIMessageRole,\n content: AIContent,\n private close?: () => void,\n ) {\n this.role = role;\n this.content = content;\n }\n\n addDescription = async () => {\n const collector = new Collector();\n const collected = await collector\n .add(\n new collector.fields.textarea(\n 'addCommentTextArea',\n 'TODO The description will help the assistant to understand the file content',\n ),\n )\n .show<{ addCommentTextArea: string }>({ title: 'TODO Add image Comment' })\n .catch((e) => {\n throw e;\n });\n collected?.addCommentTextArea &&\n (this.content.content = collected.addCommentTextArea);\n };\n\n Component = (props: {\n closeButton?: boolean;\n canAddDescription?: boolean;\n }) => (\n <Box {...getVariant('layout.common.components.aiMessage')}>\n {props.closeButton ? (\n <IconButton\n className=\"closeButton\"\n size=\"Md\"\n icon=\"Close\"\n onClick={this.close}\n title={getLabel('lblDeleteItem').title}\n ></IconButton>\n ) : (\n <></>\n )}\n {props?.canAddDescription ? (\n <IconButton\n className=\"descriptionButton\"\n size=\"Md\"\n icon=\"Magic\"\n onClick={this.addDescription}\n ></IconButton>\n ) : (\n <></>\n )}\n <this.content.Component />\n </Box>\n );\n}\n","import { getLabel } from '@apia/util';\nimport { ChatController } from '../ChatController';\nimport { ChatMessage } from '../messages/ChatMessage';\nimport { AIFileContent } from '../messages/aiMessage/AIFileContent';\nimport { AIMessageAttachments } from '../messages/aiMessage/AIMessageAttachments';\nimport {\n AIFileContentAllowedExtensions,\n AIMessageRole,\n} from '../messages/aiMessage/types';\n\nexport const handleFileUploadAsMessage = async (\n fileInputElement: HTMLInputElement,\n chatController: ChatController,\n) => {\n if (fileInputElement.files) {\n [...fileInputElement.files].forEach(async (f) => {\n const m: AIMessageAttachments = new AIMessageAttachments(\n AIMessageRole.USER,\n await AIFileContent.fromFile(f, {\n fileExtension: () =>\n chatController.messages.add(\n new ChatMessage(\n getLabel('msgAiIncorrectFileExtensionError', {\n text: {\n TOK1: `[${Object.keys(AIFileContentAllowedExtensions).join(', ')}]`,\n },\n }).text,\n 'error',\n ),\n ),\n }),\n () => chatController.attachments.drop(m),\n );\n chatController.attachments.add(m);\n });\n }\n};\n","/* eslint-disable no-param-reassign */\nimport { FormEvent, KeyboardEvent, useCallback, useState } from 'react';\nimport { ChatController } from './ChatController';\nimport { IconButton, SimpleButton } from '@apia/components';\nimport { Box, Textarea } from '@apia/theme';\nimport useHandleFileUpload, {\n WrongFormatError,\n} from './files/useHandleFileUpload';\nimport { getLabel, noNaN } from '@apia/util';\nimport { ChatMessage } from './messages/ChatMessage';\nimport { handleFileUploadAsMessage } from './files/handleFileUploadAsMessage';\nimport { observer } from 'mobx-react-lite';\n\nexport const makeTextarea = (chatController: ChatController) => {\n const NewTextarea = observer(\n ({\n hideDeleteButton,\n isLoading: outIsLoading,\n onSubmit,\n preventAppendUserMessages,\n }: {\n hideDeleteButton?: boolean;\n isLoading?: boolean;\n onSubmit: (chatMessage: ChatMessage) => Promise<void>;\n preventAppendUserMessages?: boolean;\n }) => {\n const [isLoading, setIsLoading] = useState(false);\n\n const submit = useCallback(() => {\n if (preventAppendUserMessages !== true)\n chatController.messages.add(chatController.state.current);\n\n chatController.history.add(chatController.state.current);\n\n onSubmit(chatController.state.current).finally(() => {\n setIsLoading(false);\n\n chatController.state.current = new ChatMessage();\n });\n }, [onSubmit, preventAppendUserMessages]);\n\n const handleSubmit = useCallback(\n (ev: FormEvent<HTMLFormElement>) => {\n ev.preventDefault();\n if (\n chatController.state.current.message ||\n chatController.attachments.size() > 0\n ) {\n setIsLoading(true);\n submit();\n }\n const textarea = document.getElementById(\n `GPTMessage${chatController.id}`,\n ) as HTMLTextAreaElement;\n textarea.focus();\n },\n [submit],\n );\n\n const onKeyDown = useCallback((ev: KeyboardEvent) => {\n if ((ev.target as HTMLTextAreaElement).readOnly) return;\n\n if (ev.code === 'Enter' && !ev.shiftKey) {\n ev.preventDefault();\n (ev.target as HTMLElement)\n .closest('form')\n ?.querySelector<HTMLButtonElement>('button[type=\"submit\"]')\n ?.click();\n }\n }, []);\n\n const { progress, handleFileUpload } = useHandleFileUpload({\n onContent(content) {\n (\n document.getElementById(\n `GPTMessage${chatController.id}`,\n ) as HTMLTextAreaElement\n ).value = content.join('\\n\\n');\n },\n });\n\n const actualIsLoading = isLoading || progress !== 100 || outIsLoading;\n\n const [dragging, setDragging] = useState(false);\n\n const handleDragLeave = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n setDragging(false);\n };\n\n const handleDrop = (ev: React.DragEvent<HTMLFormElement>) => {\n ev.preventDefault();\n setDragging(false);\n const fileElement = document.getElementById(\n `gptUploadFile__${chatController.id}`,\n ) as HTMLInputElement;\n fileElement.files = ev.dataTransfer.files;\n const event = new Event('change', { bubbles: true });\n fileElement.dispatchEvent(event);\n };\n\n const handleDragOver = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n };\n\n const handleDragEnter = (ev: React.DragEvent<HTMLElement>) => {\n ev.preventDefault();\n setDragging(true);\n };\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', width: '100%' }}>\n <Box\n sx={{\n flexWrap: 'wrap',\n display: 'flex',\n maxHeight: '280px',\n overflowY: 'auto',\n paddingTop: '6px',\n paddingBottom: '6px',\n }}\n >\n {chatController.attachments.getComponents()}\n </Box>\n <form\n onDrop={handleDrop}\n onDragOver={handleDragOver}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onSubmit={handleSubmit}\n className=\"gpt__form\"\n action=\"\"\n >\n {dragging ? (\n <Box\n sx={{\n height: '150px',\n border: '3px dashed #aaa',\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n {getLabel('msgAiDragAndDrop').text}\n </Box>\n ) : (\n <Textarea\n onKeyDown={onKeyDown}\n id={`GPTMessage${chatController.id}`}\n readOnly={actualIsLoading}\n value={chatController.state.current.message as string}\n onChange={(ev) => {\n chatController.state.current.message = ev.target.value;\n if (\n !chatController.state.current.message &&\n chatController.attachments.size() < 1\n )\n chatController.currentHistoryIndex = -1;\n }}\n />\n )}\n\n <Box className=\"gpt__buttonsContainer\">\n <Box sx={{ display: 'none' }}>\n <input\n type=\"file\"\n className=\"gptUploadFile\"\n multiple\n id={`gptUploadFile__${chatController.id}`}\n onChange={(ev) => {\n if (1 == noNaN('a'))\n handleFileUpload(ev).catch((e) => {\n if (e instanceof WrongFormatError) {\n setIsLoading(false);\n chatController.messages.add(\n new ChatMessage(\n getLabel('msgAiFileExtensionError').text,\n 'error',\n ),\n );\n } else {\n throw e;\n }\n });\n else {\n handleFileUploadAsMessage(ev.target, chatController);\n }\n\n ev.target.value = '';\n }}\n />\n </Box>\n <IconButton\n variant=\"icon-outline\"\n onClick={() =>\n !chatController.audioRecorder.state.recording\n ? chatController.audioRecorder.start()\n : chatController.audioRecorder.stop()\n }\n disabled={\n actualIsLoading &&\n !chatController.audioRecorder.state.recording\n }\n sx={{\n color: chatController.audioRecorder.state.recording\n ? 'red'\n : undefined,\n }}\n icon={\n chatController.audioRecorder.state.recording\n ? 'Stop'\n : 'Microphone'\n }\n id=\"transcribeAudio\"\n size=\"Lg\"\n title={getLabel('lblAiRecordAudio').text}\n />\n <IconButton\n title={getLabel('btnUploadFile').text}\n icon=\"File\"\n variant=\"icon-outline\"\n disabled={actualIsLoading}\n onClick={() => {\n (\n document.getElementById(\n `gptUploadFile__${chatController.id}`,\n ) as HTMLElement\n ).click();\n }}\n size=\"Lg\"\n />\n <SimpleButton\n title={getLabel('btnAiPrevious').title}\n variant=\"outline\"\n type=\"button\"\n onClick={chatController.history.previous}\n size=\"sm\"\n >\n {getLabel('btnAiPrevious').text}\n </SimpleButton>\n <SimpleButton\n title={getLabel('btnAiNext').title}\n variant=\"outline\"\n type=\"button\"\n onClick={chatController.history.next}\n size=\"sm\"\n >\n {getLabel('btnAiNext').text}\n </SimpleButton>\n {!hideDeleteButton && (\n <>\n <SimpleButton\n title={getLabel('btnAiDelete').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => {\n chatController.state.current.message = '';\n chatController.attachments.dropAll();\n chatController.currentHistoryIndex = -1;\n }}\n size=\"sm\"\n >\n {getLabel('btnAiDelete').text}\n </SimpleButton>\n <SimpleButton\n title={getLabel('btnAiDeleteMessages').title}\n variant=\"outline\"\n type=\"button\"\n onClick={() => chatController.messages.clear()}\n size=\"sm\"\n >\n {getLabel('btnAiDeleteMessages').text}\n </SimpleButton>\n </>\n )}\n <SimpleButton\n title={getLabel('btnAiSend').title}\n isLoading={actualIsLoading}\n type=\"submit\"\n size=\"sm\"\n >\n {getLabel('btnAiSend').text}\n </SimpleButton>\n </Box>\n </form>\n </Box>\n );\n },\n );\n\n NewTextarea.displayName = '';\n\n return NewTextarea;\n};\n","/* eslint-disable no-param-reassign */\nimport { getVariant } from '@apia/theme';\nimport { Box } from '@apia/theme';\nimport { AutoscrollContainer } from './AutoscrollContainer';\nimport { makeTextarea } from './Textarea';\nimport { ChatMessage } from './messages/ChatMessage';\nimport { AIMessageAttachments } from './messages/aiMessage/AIMessageAttachments';\nimport { makeObservable, observable } from 'mobx';\nimport { observer } from 'mobx-react-lite';\nimport { AudioRecorder } from '@apia/util';\nimport { AIMessageRole } from './messages/aiMessage/types';\nimport { AIFileContent } from './messages/aiMessage/AIFileContent';\n\nexport type TMessageType =\n | 'user'\n | 'system'\n | 'warning'\n | 'error'\n | 'information'\n | 'response'\n | 'multipleChoice'\n | 'customMessage';\n\ntype ChatControllerState = {\n current: ChatMessage;\n messages: ChatMessage[];\n};\n\nexport class ChatController {\n state: ChatControllerState = {\n current: new ChatMessage(),\n messages: [],\n };\n\n constructor(\n public id: string,\n welcomeMessage?: string,\n ) {\n if (welcomeMessage) {\n this.state.messages.splice(\n 0,\n 0,\n new ChatMessage(welcomeMessage, 'system'),\n );\n }\n\n makeObservable(this, { state: observable });\n }\n\n components = {\n MessageHistory: observer(() => {\n return (\n <Box\n {...getVariant('layout.common.components.chat')}\n className=\"history\"\n >\n <AutoscrollContainer>\n {this.state.messages.map((current) => (\n <current.Component key={current.id} />\n ))}\n </AutoscrollContainer>\n </Box>\n );\n }),\n Textarea: makeTextarea(this),\n };\n\n #promptsHistory: ChatMessage[] = [];\n currentHistoryIndex = -1;\n\n #internalAudioRecorder = new AudioRecorder();\n\n audioRecorder = {\n start: () =>\n this.#internalAudioRecorder.start().then(async (blob: Blob) => {\n const m: AIMessageAttachments = new AIMessageAttachments(\n AIMessageRole.USER,\n new AIFileContent(\n await AIFileContent.blobToBase64(blob),\n `userRecord_${this.audioRecorder.record++}.wav`,\n ),\n () => this.attachments.drop(m),\n );\n this.attachments.add(m);\n }),\n stop: async () => {\n this.#internalAudioRecorder.stop();\n },\n record: 0,\n state: this.#internalAudioRecorder.state,\n };\n\n history = {\n add: (message: ChatMessage) => {\n this.currentHistoryIndex = -1;\n\n if (message === this.#promptsHistory[this.#promptsHistory.length]) {\n return;\n }\n\n this.#promptsHistory = [\n message,\n ...this.#promptsHistory.slice(\n Math.max(0, this.#promptsHistory.length - 10),\n ),\n ];\n },\n next: () => {\n let message = new ChatMessage();\n if (this.#promptsHistory[this.currentHistoryIndex - 1])\n message = this.#promptsHistory[--this.currentHistoryIndex].copy();\n else {\n this.currentHistoryIndex = -1;\n }\n this.history.updateState(message);\n },\n previous: () => {\n if (this.#promptsHistory[this.currentHistoryIndex + 1]) {\n this.history.updateState(\n this.#promptsHistory[++this.currentHistoryIndex].copy(),\n );\n }\n },\n updateState: (message?: ChatMessage) => {\n if (message) this.state.current = message;\n else this.state.current = new ChatMessage();\n },\n size: () => this.state.messages.length,\n };\n\n messages = {\n add: (message: ChatMessage, idx?: number) => {\n if (idx !== undefined && idx !== null) {\n this.state.messages.splice(idx, 0, message);\n } else {\n this.state.messages.push(message);\n }\n },\n clear: () => {\n this.state.messages = [];\n },\n };\n\n attachments = {\n add: (...aiMessage: AIMessageAttachments[]) => {\n this.state.current.attachments.push(...aiMessage);\n },\n dropAll: () => void (this.state.current.attachments = []),\n drop: (el: AIMessageAttachments) => {\n this.state.current.attachments = this.state.current.attachments.filter(\n (c) => c !== el,\n );\n if (!this.state.current.message && this.attachments.size() < 1)\n this.currentHistoryIndex = -1;\n },\n getComponents: () =>\n this.state.current.attachments.map((x) => (\n <x.Component closeButton canAddDescription key={x.id} />\n )),\n get: () => this.state.current.attachments,\n size: () => this.state.current.attachments.length,\n };\n}\n","import { ApiaUtil, SimpleButton } from '@apia/components';\nimport { ChatMessage } from './ChatMessage';\nimport { Box, Paragraph } from '@apia/theme';\nimport { ReactElement } from 'react';\n\nexport type TMultipleChoiceMessageOption<OptionProps> = {\n label: string;\n url: string;\n additionalProps?: OptionProps;\n};\n\nexport class MultipleChoiceMessage<OptionProps> extends ChatMessage {\n constructor(\n question: string,\n options: TMultipleChoiceMessageOption<OptionProps>[],\n Renderer?: (props: {\n item: TMultipleChoiceMessageOption<OptionProps>;\n }) => ReactElement,\n ) {\n super(\n Renderer ? (\n <Box className=\"multipleChoiceMessage customRenderer\">\n <Paragraph>{question}</Paragraph>\n {options.map((item) => (\n <Renderer item={item} key={item.url} />\n ))}\n </Box>\n ) : (\n <Box className=\"multipleChoiceMessage\">\n <Paragraph>{question}</Paragraph>\n <Box as=\"ul\">\n {options.map((current) => (\n <li key={current.label}>\n <SimpleButton\n className=\"multipleChoice__option\"\n onClick={() => {\n ApiaUtil.instance.tabs.openTab(current.label, current.url);\n }}\n >\n {current.label}\n </SimpleButton>\n </li>\n ))}\n </Box>\n </Box>\n ),\n 'multipleChoice',\n );\n }\n}\n","import { EventEmitter } from '@apia/util';\n\nexport class ResponseStream extends EventEmitter<{ part: string }> {\n private buffer: string = '';\n private isRunning = false;\n private locked = false;\n private partSize = 2;\n private stopped = false;\n private waiting: string[] = [];\n\n public close() {\n this.stopped = true;\n }\n\n emit<K extends 'part'>(_: K, data: { part: string }[K]): void {\n if (this.locked) {\n this.waiting.push(data);\n } else {\n this.buffer += data;\n }\n this.run();\n }\n\n run() {\n if (!this.isRunning) {\n this.isRunning = true;\n const interval = setInterval(() => {\n if (this.stopped) {\n super.emit('part', this.buffer + this.waiting.join(''));\n clearInterval(interval);\n } else {\n this.locked = true;\n const part = this.buffer.slice(0, this.partSize);\n this.buffer = this.buffer.slice(this.partSize);\n while (this.waiting.length > 0) {\n const part = this.waiting.shift();\n if (part) {\n this.buffer += part;\n }\n }\n this.locked = false;\n if (part) {\n super.emit('part', part);\n } else {\n this.isRunning = false;\n clearInterval(interval);\n }\n }\n }, 5);\n }\n }\n}\n","import axios from 'axios';\nimport { AudioRecorder } from '@apia/util';\nimport { ApiaApi, makeApiaUrl, parseSuccessfulResponse } from '@apia/api';\nimport { ResponseStream } from '@apia/ai';\nimport { action, makeObservable, observable } from 'mobx';\n\ntype RoutinesGenerationState = {\n isLoading: boolean;\n progress: number;\n};\n\ntype TPollProgress = {\n message: string;\n progress: number;\n debug: string;\n streamPart?: string;\n};\n\ntype TPollRoutineResult = {\n status: string;\n payload: unknown | TPollProgress;\n};\n\nexport type TGenerateFromImage = {\n base64: string;\n description: string;\n};\n\nexport type TRoutineCompletion = Partial<{\n images: TGenerateFromImage[];\n parameters: Record<string, string>;\n stream: ResponseStream;\n}> & {\n routineName: string;\n};\n\nfunction isPollProgress(\n payload: unknown | TPollProgress,\n): payload is TPollProgress {\n return (payload as TPollProgress)?.progress !== undefined;\n}\n\nexport class RoutinesGeneration {\n public audioRecorder = new AudioRecorder();\n private routineId: string = '';\n public state: RoutinesGenerationState = {\n isLoading: false,\n progress: 0,\n };\n\n public constructor() {\n makeObservable(this, {\n audioRecorder: action,\n completion: action,\n state: observable,\n stop: action,\n transcribeAudio: action,\n });\n }\n\n private checkCanGenerate() {\n if (this.state.isLoading) {\n throw new Error('Cannot queue two simultaneous generations');\n }\n\n this.state.isLoading = true;\n }\n\n private async pollRoutine<T>(stream?: ResponseStream) {\n while (this.state.isLoading) {\n const pollResult = await this.poll(this.routineId);\n if (isPollProgress(pollResult.payload)) {\n try {\n const res = JSON.parse(pollResult.payload.debug) as string[];\n if (res.length > 0) {\n res.forEach((c) => {\n console.log(JSON.parse(c));\n });\n }\n\n if (pollResult.payload.streamPart && stream) {\n stream.emit('part', pollResult.payload.streamPart);\n }\n this.state.progress = pollResult.payload.progress;\n } catch (e) {\n console.error(e);\n }\n } else if (pollResult.status === 'FINISHED') {\n this.resetLoading();\n return pollResult.payload as T;\n } else {\n throw new Error('Wrong poll response');\n }\n }\n\n return null;\n }\n\n private async executeRoutine<T>(\n routineName: string,\n prompts: Record<string, string>,\n images: TGenerateFromImage[],\n stream?: ResponseStream,\n ): Promise<T | null> {\n this.checkCanGenerate();\n\n try {\n const routineStartResult = await ApiaApi.post<{\n orchestrator: { routineId: string };\n }>(\n makeApiaUrl({\n action: 'routineStart',\n routine: routineName,\n }),\n {\n postData: {\n images: JSON.stringify(images),\n ...prompts,\n },\n stringifyOptions: {\n arrayFormat: 'repeat',\n },\n postDataTreatement: 'stringify',\n },\n );\n\n if (routineStartResult?.data?.orchestrator?.routineId !== undefined) {\n this.routineId = routineStartResult?.data?.orchestrator?.routineId;\n\n return this.pollRoutine<T>(stream);\n } else {\n throw new Error('Cannot get routine id');\n }\n } catch (e) {\n this.resetLoading();\n throw e;\n }\n }\n\n private async poll(routineId: string): Promise<TPollRoutineResult> {\n const result = await ApiaApi.post<{ orchestrator: string }>(\n makeApiaUrl({\n action: 'routinePoll',\n routineId,\n }),\n );\n\n if (result?.data?.orchestrator) {\n return JSON.parse(result.data.orchestrator) as TPollRoutineResult;\n } else {\n throw new Error('Poll failed');\n }\n }\n\n private resetLoading() {\n this.state.isLoading = false;\n this.state.progress = 0;\n }\n\n public async completion<T>(params: TRoutineCompletion) {\n return this.executeRoutine<T>(\n params.routineName,\n params.parameters ?? {},\n params.images ?? [],\n params.stream,\n );\n }\n\n public stop() {\n this.resetLoading();\n ApiaApi.get<{\n orchestrator: { routineId: string };\n }>(\n makeApiaUrl({\n action: 'routineStop',\n routineId: this.routineId,\n }),\n );\n }\n\n public async transcribeAudio(audio: Blob) {\n const arrayBuffer = await audio.arrayBuffer();\n\n const url = makeApiaUrl({\n action: 'routineStart',\n routine: 'transcription/Transcribe',\n });\n\n const response = await axios.post(url, arrayBuffer, {\n headers: {\n 'Content-Type': 'application/octet-stream',\n },\n });\n\n if (response.data) {\n const result = await parseSuccessfulResponse<{\n orchestrator: { routineId: string };\n }>(response, url);\n\n this.state.isLoading = true;\n if (result?.orchestrator?.routineId) {\n this.routineId = result?.orchestrator?.routineId;\n return await this.pollRoutine<{\n transcription: string;\n }>();\n }\n }\n\n throw new Error('Something went wrong while transcribing the audio');\n }\n}\n"],"names":["progress","__publicField","FileType","AIMessageRole","blob","f","part"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apia/ai",
3
- "version": "3.0.13",
3
+ "version": "4.0.0",
4
4
  "sideEffects": false,
5
5
  "author": "Alexis Leite <alexisleite@live.com>",
6
6
  "main": "dist/index.js",
@@ -13,9 +13,10 @@
13
13
  "libWatch": "rollup --watch --config ../../config/rollup.common.mjs --environment MODE:development,ENTRY:index.ts,WATCH:true"
14
14
  },
15
15
  "dependencies": {
16
- "@apia/components": "^3.0.13",
17
- "@apia/theme": "^3.0.13",
18
- "@apia/util": "^3.0.13",
16
+ "@apia/api": "^4.0.0",
17
+ "@apia/components": "^4.0.0",
18
+ "@apia/theme": "^4.0.0",
19
+ "@apia/util": "^4.0.0",
19
20
  "mobx": "^6.13.1",
20
21
  "mobx-react-lite": "^4.0.7"
21
22
  },
@@ -36,5 +37,5 @@
36
37
  "access": "public",
37
38
  "registry": "https://registry.npmjs.org/"
38
39
  },
39
- "gitHead": "996630128520f5a7f2d325199045d21a923e45bd"
40
+ "gitHead": "544b2744388936eefbaf5a0a7fae7c417831fe26"
40
41
  }