@smart-cloud/ai-kit-ui 1.1.30 → 1.1.32

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smart-cloud/ai-kit-ui",
3
- "version": "1.1.30",
3
+ "version": "1.1.32",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  "@emotion/cache": "^11.14.0",
21
21
  "@emotion/react": "^11.14.0",
22
22
  "@mantine/colors-generator": "^8.3.14",
23
- "@smart-cloud/ai-kit-core": "^1.1.14",
23
+ "@smart-cloud/ai-kit-core": "^1.1.17",
24
24
  "@smart-cloud/wpsuite-core": "^2.1.2",
25
25
  "@tabler/icons-react": "^3.36.1",
26
26
  "chroma-js": "^3.2.0",
@@ -69,6 +69,7 @@ export const DEFAULT_CHATBOT_LABELS: Required<AiChatbotLabels> = {
69
69
 
70
70
  userLabel: "User",
71
71
  assistantLabel: "Assistant",
72
+ assistantThinkingLabel: "Assistant is thinking...",
72
73
 
73
74
  askMeLabel: "Ask me",
74
75
 
@@ -179,7 +180,10 @@ const isAbortLike = (e: Error & { code?: string }) => {
179
180
  );
180
181
  };
181
182
 
182
- const formatStatusEvent = (event?: AiKitStatusEvent | null): string | null => {
183
+ const formatStatusEvent = (
184
+ event: AiKitStatusEvent | null,
185
+ labels: AiChatbotLabels,
186
+ ): string | null => {
183
187
  if (!event) return null;
184
188
 
185
189
  const step = event.step;
@@ -201,11 +205,12 @@ const formatStatusEvent = (event?: AiKitStatusEvent | null): string | null => {
201
205
  case "on-device:run":
202
206
  return msg || I18n.get("Running on-device...");
203
207
  case "backend:request":
204
- return msg || I18n.get("Sending request to server...");
205
208
  case "backend:waiting":
206
- return msg || I18n.get("Waiting for response...");
207
209
  case "backend:response":
208
- return msg || I18n.get("Receiving response...");
210
+ return I18n.get(
211
+ labels.assistantThinkingLabel ??
212
+ DEFAULT_CHATBOT_LABELS.assistantThinkingLabel,
213
+ );
209
214
  case "done":
210
215
  return msg || I18n.get("Done.");
211
216
  case "error":
@@ -525,8 +530,8 @@ const AiChatbotBase: FC<AiChatbotProps & AiKitShellInjectedProps> = (props) => {
525
530
 
526
531
  const statusText = useMemo(() => {
527
532
  if (!ai.busy) return null;
528
- return formatStatusEvent(ai.statusEvent) || I18n.get("Working…");
529
- }, [ai.busy, ai.statusEvent, language]);
533
+ return formatStatusEvent(ai.statusEvent, labels) || I18n.get("Working…");
534
+ }, [ai.busy, ai.statusEvent, language, labels]);
530
535
 
531
536
  const lastCanceledUserMessageId = useMemo(() => {
532
537
  for (let i = messages.length - 1; i >= 0; i--) {
@@ -333,6 +333,7 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
333
333
  );
334
334
  }, [allowOverride]);
335
335
 
336
+ const [state, setState] = useState<string>();
336
337
  const [featureOpen, setFeatureOpen] = useState<boolean>(!showOpenButton);
337
338
  const [optionsOpen, setOptionsOpen] = useState<boolean>(false);
338
339
  const [backendConfigured, setBackendConfigured] = useState(false);
@@ -396,7 +397,7 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
396
397
 
397
398
  const formatAiKitStatus = useCallback(
398
399
  (e: AiKitStatusEvent | null): string | null => {
399
- if (!e) return null;
400
+ if (!e || e.silent) return null;
400
401
 
401
402
  const step = e.step;
402
403
  const msg = I18n.get((e.message ?? "").trim());
@@ -420,11 +421,23 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
420
421
  case "on-device:run":
421
422
  return msg || I18n.get("Generating...");
422
423
  case "backend:request":
423
- return msg || I18n.get("Sending request to backend...");
424
424
  case "backend:waiting":
425
- return msg || I18n.get("Waiting for backend response...");
426
425
  case "backend:response":
427
- return msg || I18n.get("Received backend response.");
426
+ switch (mode) {
427
+ case "translate":
428
+ return I18n.get("Translating text");
429
+ case "rewrite":
430
+ return I18n.get("Rewriting text");
431
+ case "summarize":
432
+ return I18n.get("Summarizing");
433
+ case "proofread":
434
+ return I18n.get("Proofreading");
435
+ case "write":
436
+ case "generatePostMetadata":
437
+ case "generateImageMetadata":
438
+ default:
439
+ return I18n.get("Generating text");
440
+ }
428
441
  case "done":
429
442
  return msg || I18n.get("Done.");
430
443
  case "error":
@@ -433,7 +446,7 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
433
446
  return msg || I18n.get("Working...");
434
447
  }
435
448
  },
436
- [language],
449
+ [language, mode],
437
450
  );
438
451
 
439
452
  const inputText = useMemo(() => {
@@ -463,7 +476,8 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
463
476
  }, [inputText, mode, image, inputLanguage, outputLanguage]);
464
477
 
465
478
  const ai = useAiRun();
466
- const statusText = formatAiKitStatus(ai.statusEvent);
479
+ const statusText =
480
+ formatAiKitStatus(ai.statusEvent) ?? (state ? I18n.get(state) : null);
467
481
 
468
482
  const runGenerate = useCallback(
469
483
  async (modeOverride?: AiModePreference) => {
@@ -516,6 +530,7 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
516
530
  context,
517
531
  modeOverride,
518
532
  onDeviceTimeoutOverride: onDeviceTimeout,
533
+ silent: true,
519
534
  },
520
535
  );
521
536
  const langCodes = res.result?.candidates
@@ -545,11 +560,13 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
545
560
  const res = await ai.run(async ({ signal, onStatus }) => {
546
561
  let inputLang = inputLanguage ?? "auto";
547
562
  if (inputLang === "auto") {
563
+ setState("Detecting input language...");
548
564
  inputLang = await detectTopLanguage(text!.trim(), {
549
565
  signal,
550
566
  context,
551
567
  modeOverride,
552
568
  onDeviceTimeoutOverride: onDeviceTimeout,
569
+ silent: true,
553
570
  });
554
571
  setInputLanguage(inputLang);
555
572
  }
@@ -589,11 +606,13 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
589
606
  ? outputLanguage
590
607
  : null) || readDefaultOutputLanguage();
591
608
  if (outputLanguage === "auto") {
609
+ setState("Detecting input language...");
592
610
  outLang = await detectTopLanguage(text!.trim(), {
593
611
  signal,
594
612
  context,
595
613
  modeOverride,
596
614
  onDeviceTimeoutOverride: onDeviceTimeout,
615
+ silent: true,
597
616
  });
598
617
  setOutputLanguage(outLang);
599
618
  }
@@ -637,12 +656,15 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
637
656
  context,
638
657
  modeOverride,
639
658
  onDeviceTimeoutOverride: onDeviceTimeout,
659
+ silent: true,
640
660
  };
661
+ setState("Detecting input language...");
641
662
  const inLang = await detectTopLanguage(
642
663
  text!.trim() + "\n" + (instructions?.trim() || ""),
643
664
  langFeatureOptions,
644
665
  );
645
666
  if (inLang !== outLang && inLang !== "en") {
667
+ setState("Translating instructions...");
646
668
  args.prompt = (
647
669
  await translate(
648
670
  {
@@ -727,6 +749,7 @@ Follow these additional instructions: ${instructions}`
727
749
  ? outputLanguage
728
750
  : null) || readDefaultOutputLanguage();
729
751
  try {
752
+ setState("Translating result...");
730
753
  const parsed = (await ai.run(async ({ signal }) => {
731
754
  return await parsePostMetadataFromPromptResult(
732
755
  cleaned,
@@ -736,6 +759,7 @@ Follow these additional instructions: ${instructions}`
736
759
  context,
737
760
  modeOverride,
738
761
  onDeviceTimeoutOverride: onDeviceTimeout,
762
+ silent: true,
739
763
  },
740
764
  );
741
765
  })) as string | null;
@@ -811,6 +835,7 @@ Follow these additional instructions: ${instructions}`
811
835
 
812
836
  const cleaned = stripCodeFence(res).trim();
813
837
  try {
838
+ setState("Translating result...");
814
839
  const parsed = (await ai.run(async ({ signal }) => {
815
840
  return await parseImageMetadataFromPromptResult(
816
841
  cleaned,
@@ -820,6 +845,7 @@ Follow these additional instructions: ${instructions}`
820
845
  context,
821
846
  modeOverride,
822
847
  onDeviceTimeoutOverride: onDeviceTimeout,
848
+ silent: true,
823
849
  },
824
850
  );
825
851
  })) as string | null;
@@ -840,6 +866,7 @@ Follow these additional instructions: ${instructions}`
840
866
  : I18n.get("An unknown error occurred."),
841
867
  );
842
868
  }
869
+ setState(undefined);
843
870
  },
844
871
  [
845
872
  language,
package/src/i18n/ar.ts CHANGED
@@ -13,6 +13,7 @@ export const arDict: Record<string, string> = {
13
13
  "Ask anything…": "اسأل أي شيء…",
14
14
  "Ask me": "اسألني",
15
15
  Assistant: "المساعد",
16
+ "Assistant is thinking...": "المساعد يفكر...",
16
17
  "Auto-detect": "الكشف التلقائي",
17
18
  Cancel: "يلغي",
18
19
  Caption: "التسمية التوضيحية",
package/src/i18n/de.ts CHANGED
@@ -13,6 +13,7 @@ export const deDict: Record<string, string> = {
13
13
  "Ask anything…": "Frag mich alles…",
14
14
  "Ask me": "Frag mich",
15
15
  Assistant: "Assistent",
16
+ "Assistant is thinking...": "Der Assistent denkt nach...",
16
17
  "Auto-detect": "Automatisch erkennen",
17
18
  Cancel: "Abbrechen",
18
19
  Caption: "Bildunterschrift",
package/src/i18n/en.ts CHANGED
@@ -13,6 +13,7 @@ export const enDict: Record<string, string> = {
13
13
  "Ask anything…": "Ask anything…",
14
14
  "Ask me": "Ask me",
15
15
  Assistant: "Assistant",
16
+ "Assistant is thinking...": "Assistant is thinking...",
16
17
  "Auto-detect": "Auto-detect",
17
18
  Cancel: "Cancel",
18
19
  Caption: "Caption",
package/src/i18n/es.ts CHANGED
@@ -13,6 +13,7 @@ export const esDict: Record<string, string> = {
13
13
  "Ask anything…": "Pregunta lo que sea…",
14
14
  "Ask me": "Pregúntame",
15
15
  Assistant: "Asistente",
16
+ "Assistant is thinking...": "El asistente está pensando...",
16
17
  "Auto-detect": "Detección automática",
17
18
  Cancel: "Cancelar",
18
19
  Caption: "Subtítulo",
package/src/i18n/fr.ts CHANGED
@@ -13,6 +13,7 @@ export const frDict: Record<string, string> = {
13
13
  "Ask anything…": "Demandez n’importe quoi…",
14
14
  "Ask me": "Demandez-moi",
15
15
  Assistant: "Assistant",
16
+ "Assistant is thinking...": "L'assistant réfléchit...",
16
17
  "Auto-detect": "Détection automatique",
17
18
  Cancel: "Annuler",
18
19
  Caption: "Légende",
package/src/i18n/he.ts CHANGED
@@ -13,6 +13,7 @@ export const heDict: Record<string, string> = {
13
13
  "Ask anything…": "שאל כל דבר…",
14
14
  "Ask me": "שאל אותי",
15
15
  Assistant: "עוזר",
16
+ "Assistant is thinking...": "העוזר חושב...",
16
17
  "Auto-detect": "זיהוי אוטומטי",
17
18
  Cancel: "לְבַטֵל",
18
19
  Caption: "כּוֹתֶרֶת",
package/src/i18n/hi.ts CHANGED
@@ -13,6 +13,7 @@ export const hiDict: Record<string, string> = {
13
13
  "Ask anything…": "कुछ भी पूछें…",
14
14
  "Ask me": "मुझसे पूछें",
15
15
  Assistant: "सहायक",
16
+ "Assistant is thinking...": "सहायक सोच रहा है...",
16
17
  "Auto-detect": "ऑटो का पता लगाने",
17
18
  Cancel: "रद्द करना",
18
19
  Caption: "कैप्शन",
package/src/i18n/id.ts CHANGED
@@ -13,6 +13,7 @@ export const idDict: Record<string, string> = {
13
13
  "Ask anything…": "Tanyakan apa saja…",
14
14
  "Ask me": "Tanya saya",
15
15
  Assistant: "Asisten",
16
+ "Assistant is thinking...": "Asisten sedang berpikir...",
16
17
  "Auto-detect": "Deteksi otomatis",
17
18
  Cancel: "Membatalkan",
18
19
  Caption: "Keterangan",
package/src/i18n/it.ts CHANGED
@@ -13,6 +13,7 @@ export const itDict: Record<string, string> = {
13
13
  "Ask anything…": "Chiedi qualsiasi cosa…",
14
14
  "Ask me": "Chiedimi",
15
15
  Assistant: "Assistente",
16
+ "Assistant is thinking...": "L'assistente sta pensando...",
16
17
  "Auto-detect": "Rilevamento automatico",
17
18
  Cancel: "Cancellare",
18
19
  Caption: "Didascalia",
package/src/i18n/ja.ts CHANGED
@@ -13,6 +13,7 @@ export const jaDict: Record<string, string> = {
13
13
  "Ask anything…": "何でも聞いて…",
14
14
  "Ask me": "質問する",
15
15
  Assistant: "アシスタント",
16
+ "Assistant is thinking...": "アシスタントは考えています...",
16
17
  "Auto-detect": "自動検出",
17
18
  Cancel: "キャンセル",
18
19
  Caption: "キャプション",
package/src/i18n/ko.ts CHANGED
@@ -13,6 +13,7 @@ export const koDict: Record<string, string> = {
13
13
  "Ask anything…": "무엇이든 물어보세요…",
14
14
  "Ask me": "질문하기",
15
15
  Assistant: "어시스턴트",
16
+ "Assistant is thinking...": "비서가 생각 중입니다...",
16
17
  "Auto-detect": "자동 감지",
17
18
  Cancel: "취소",
18
19
  Caption: "표제",
package/src/i18n/nl.ts CHANGED
@@ -13,6 +13,7 @@ export const nlDict: Record<string, string> = {
13
13
  "Ask anything…": "Vraag maar raak…",
14
14
  "Ask me": "Vraag me",
15
15
  Assistant: "Assistent",
16
+ "Assistant is thinking...": "De assistent denkt na...",
16
17
  "Auto-detect": "Automatische detectie",
17
18
  Cancel: "Annuleren",
18
19
  Caption: "Ondertiteling",
package/src/i18n/pl.ts CHANGED
@@ -13,6 +13,7 @@ export const plDict: Record<string, string> = {
13
13
  "Ask anything…": "Zapytaj o cokolwiek…",
14
14
  "Ask me": "Zapytaj mnie",
15
15
  Assistant: "Asystent",
16
+ "Assistant is thinking...": "Asystent myśli...",
16
17
  "Auto-detect": "Automatyczne wykrywanie",
17
18
  Cancel: "Anulować",
18
19
  Caption: "Podpis",
package/src/i18n/pt.ts CHANGED
@@ -13,6 +13,7 @@ export const ptDict: Record<string, string> = {
13
13
  "Ask anything…": "Pergunte qualquer coisa…",
14
14
  "Ask me": "Pergunte-me",
15
15
  Assistant: "Assistente",
16
+ "Assistant is thinking...": "O assistente está pensando...",
16
17
  "Auto-detect": "Detecção automática",
17
18
  Cancel: "Cancelar",
18
19
  Caption: "Rubrica",
package/src/i18n/ru.ts CHANGED
@@ -13,6 +13,7 @@ export const ruDict: Record<string, string> = {
13
13
  "Ask anything…": "Спросите что угодно…",
14
14
  "Ask me": "Спросите меня",
15
15
  Assistant: "Ассистент",
16
+ "Assistant is thinking...": "Ассистент размышляет...",
16
17
  "Auto-detect": "Автоматическое определение",
17
18
  Cancel: "Отмена",
18
19
  Caption: "Подпись",
package/src/i18n/sv.ts CHANGED
@@ -13,6 +13,7 @@ export const svDict: Record<string, string> = {
13
13
  "Ask anything…": "Fråga vad som helst…",
14
14
  "Ask me": "Fråga mig",
15
15
  Assistant: "Assistent",
16
+ "Assistant is thinking...": "Assistenten funderar...",
16
17
  "Auto-detect": "Automatisk identifiering",
17
18
  Cancel: "Avboka",
18
19
  Caption: "Rubrik",
package/src/i18n/th.ts CHANGED
@@ -13,6 +13,7 @@ export const thDict: Record<string, string> = {
13
13
  "Ask anything…": "ถามอะไรก็ได้…",
14
14
  "Ask me": "ถามฉัน",
15
15
  Assistant: "ผู้ช่วย",
16
+ "Assistant is thinking...": "ผู้ช่วยกำลังคิด...",
16
17
  "Auto-detect": "ตรวจจับอัตโนมัติ",
17
18
  Cancel: "ยกเลิก",
18
19
  Caption: "คำบรรยายภาพ",
package/src/i18n/tr.ts CHANGED
@@ -13,6 +13,7 @@ export const trDict: Record<string, string> = {
13
13
  "Ask anything…": "Her şeyi sor…",
14
14
  "Ask me": "Bana sor",
15
15
  Assistant: "Asistan",
16
+ "Assistant is thinking...": "Asistan düşünüyor...",
16
17
  "Auto-detect": "Otomatik algılama",
17
18
  Cancel: "İptal etmek",
18
19
  Caption: "Altyazı",
package/src/i18n/ua.ts CHANGED
@@ -13,6 +13,7 @@ export const uaDict: Record<string, string> = {
13
13
  "Ask anything…": "Запитайте будь-що…",
14
14
  "Ask me": "Запитайте мене",
15
15
  Assistant: "Асистент",
16
+ "Assistant is thinking...": "Асистент думає...",
16
17
  "Auto-detect": "Автоматичне визначення",
17
18
  Cancel: "Скасувати",
18
19
  Caption: "Підпис",
package/src/i18n/zh.ts CHANGED
@@ -12,6 +12,7 @@ export const zhDict: Record<string, string> = {
12
12
  "Ask anything…": "随便问…",
13
13
  "Ask me": "问我",
14
14
  Assistant: "助手",
15
+ "Assistant is thinking...": "助手正在思考……",
15
16
  "Auto-detect": "自动检测",
16
17
  Cancel: "取消",
17
18
  Caption: "标题",