assistant-robot 0.0.1 → 0.0.2-beta

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.
@@ -0,0 +1,22 @@
1
+ import { AssistantModel } from "./AssistantModel";
2
+ import { UserDetector } from "./UserDetector";
3
+ import { OperationManager } from "./OperationManager";
4
+ import { EUserDetectorStatus } from "./constants";
5
+ import { EventListener } from "./utils";
6
+ import type { LanguageModel } from "./LanguageModel";
7
+ import type { IAssistantRobotConfig, IActionConfig } from "./type";
8
+ export declare class Assistant<T extends LanguageModel> extends EventListener {
9
+ assistantModel: AssistantModel;
10
+ userDetector: UserDetector;
11
+ questionManager: OperationManager | undefined;
12
+ languageModel: T;
13
+ options: IAssistantRobotConfig<T>;
14
+ constructor(el: Element, options: IAssistantRobotConfig<T>);
15
+ handleLanguageModelLoad: () => void;
16
+ handleUserDetectorStatusChange: (status: EUserDetectorStatus) => void;
17
+ onMenuClick: (key: string) => void;
18
+ ask: (question: string) => Promise<void>;
19
+ assistantSay(text: string): void;
20
+ assistantPlay(name: string, config?: IActionConfig): void;
21
+ lookAtUser(): Promise<void>;
22
+ }
@@ -1,5 +1,5 @@
1
1
  import { PerspectiveCamera, Scene, WebGL1Renderer, Object3D, AnimationMixer, AnimationClip, AnimationAction, Clock } from "three";
2
- import type { TRobotModelConfig, IModelConfig } from "./type";
2
+ import type { TRobotModelConfig, IModelConfig, IActionConfig } from "./type";
3
3
  export declare class AssistantModel {
4
4
  clock: Clock;
5
5
  container: Element;
@@ -19,11 +19,7 @@ export declare class AssistantModel {
19
19
  startIdleAction(): void;
20
20
  haltIdleAction(durationInSeconds: number): void;
21
21
  hello(): void;
22
- play(name: string, { loop, weight, timeScale, }?: {
23
- loop?: boolean;
24
- weight?: number;
25
- timeScale?: number;
26
- }): void;
22
+ play(name: string, { loop, weight, timeScale, repetitions, }?: IActionConfig): void;
27
23
  hideTip(): void;
28
24
  say(text: string): void;
29
25
  animate(): void;
@@ -1 +1 @@
1
- "use strict";var l=Object.defineProperty;var d=(s,t,e)=>t in s?l(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var a=(s,t,e)=>(d(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@tensorflow-models/qna");require("@tensorflow/tfjs-core");require("@tensorflow/tfjs-backend-cpu");require("@tensorflow/tfjs-backend-webgl");const r=require("./utils-ePOYkfFK.js");function c(s){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const e in s)if(e!=="default"){const o=Object.getOwnPropertyDescriptor(s,e);Object.defineProperty(t,e,o.get?o:{enumerable:!0,get:()=>s[e]})}}return t.default=s,Object.freeze(t)}const g=c(u);class i{constructor(){a(this,"status",r.ELanguageModelStatus.loading);a(this,"onLoadList",[])}loaded(){this.status=r.ELanguageModelStatus.ready,this.onLoadList.forEach(t=>t())}onLoad(t){this.onLoadList.push(t)}removeLoadCb(t){this.onLoadList=this.onLoadList.filter(e=>e!=t)}}class h extends i{constructor({passage:e,modelUrl:o}){super();a(this,"passage");a(this,"modelUrl");a(this,"model");this.passage=e,this.modelUrl=o,this.init()}async init(){this.status=r.ELanguageModelStatus.loading;try{const e=this.modelUrl?{modelUrl:this.modelUrl}:void 0;this.model=await g.load(e),this.loaded()}catch(e){console.warn(e),this.status=r.ELanguageModelStatus.error}}async findAnswers(e){if(this.model){const o=await this.model.findAnswers(e,this.passage),n=r.findHighestScoreItem(o);return n?n.text:""}return""}}exports.LanguageModel=i;exports.MobileBertModel=h;
1
+ "use strict";var l=Object.defineProperty;var d=(s,t,e)=>t in s?l(s,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):s[t]=e;var a=(s,t,e)=>(d(s,typeof t!="symbol"?t+"":t,e),e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@tensorflow-models/qna");require("@tensorflow/tfjs-core");require("@tensorflow/tfjs-backend-cpu");require("@tensorflow/tfjs-backend-webgl");const r=require("./utils-N0deqkZQ.js");function c(s){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(s){for(const e in s)if(e!=="default"){const o=Object.getOwnPropertyDescriptor(s,e);Object.defineProperty(t,e,o.get?o:{enumerable:!0,get:()=>s[e]})}}return t.default=s,Object.freeze(t)}const g=c(u);class i{constructor(){a(this,"status",r.ELanguageModelStatus.loading);a(this,"onLoadList",[])}loaded(){this.status=r.ELanguageModelStatus.ready,this.onLoadList.forEach(t=>t())}onLoad(t){this.onLoadList.push(t)}removeLoadCb(t){this.onLoadList=this.onLoadList.filter(e=>e!=t)}}class h extends i{constructor({passage:e,modelUrl:o}){super();a(this,"passage");a(this,"modelUrl");a(this,"model");this.passage=e,this.modelUrl=o,this.init()}async init(){this.status=r.ELanguageModelStatus.loading;try{const e=this.modelUrl?{modelUrl:this.modelUrl}:void 0;this.model=await g.load(e),this.loaded()}catch(e){console.warn(e),this.status=r.ELanguageModelStatus.error}}async findAnswers(e){if(this.model){const o=await this.model.findAnswers(e,this.passage),n=r.findHighestScoreItem(o);return n?n.text:""}return""}}exports.LanguageModel=i;exports.MobileBertModel=h;
@@ -5,7 +5,7 @@ import * as l from "@tensorflow-models/qna";
5
5
  import "@tensorflow/tfjs-core";
6
6
  import "@tensorflow/tfjs-backend-cpu";
7
7
  import "@tensorflow/tfjs-backend-webgl";
8
- import { E as i, h } from "./utils-vFpckT4x.mjs";
8
+ import { o as i, q as h } from "./utils-RQ7tdPHo.mjs";
9
9
  class m {
10
10
  constructor() {
11
11
  a(this, "status", i.loading);
@@ -0,0 +1,12 @@
1
+ import { IOperationBoxBoxConfig } from "./type";
2
+ export declare class OperationManager {
3
+ btnDom: HTMLButtonElement | undefined;
4
+ inputDom: HTMLInputElement | undefined;
5
+ menuBtnDom: HTMLElement | undefined;
6
+ menuDom: HTMLElement | undefined;
7
+ onAsk: (question: string) => void;
8
+ onMenuClick: (key: string) => void;
9
+ constructor(container: Element, onAsk: (question: string) => void, onMenuClick: (key: string) => void, options?: IOperationBoxBoxConfig);
10
+ initChatBox(container: Element, options?: IOperationBoxBoxConfig): void;
11
+ addEventListener(): void;
12
+ }
@@ -1,18 +1,21 @@
1
1
  import * as faceDetection from "@tensorflow-models/face-detection";
2
2
  import type { FaceDetector } from "@tensorflow-models/face-detection";
3
+ import { EUserDetectorStatus } from "./constants";
4
+ import { EventListener } from "./utils";
3
5
  import { IUserDetectorConfig } from "./type";
4
- export declare class UserDetector {
6
+ export declare class UserDetector extends EventListener {
5
7
  video: HTMLVideoElement;
6
8
  detector: FaceDetector | undefined;
7
9
  videoWidth: number;
8
10
  videoHeight: number;
9
11
  options: IUserDetectorConfig;
12
+ status: EUserDetectorStatus;
10
13
  constructor(options?: IUserDetectorConfig);
11
- init(): void;
12
14
  initVideo(): Promise<void>;
13
15
  createDetector(): Promise<void>;
14
16
  getFaces(): Promise<faceDetection.Face[]>;
15
17
  getFace(): Promise<faceDetection.Face>;
16
18
  getFacePostion(): Promise<number[]>;
17
19
  getFaceAngle(): Promise<number[]>;
20
+ setStatus(v: EUserDetectorStatus): void;
18
21
  }
@@ -15,11 +15,23 @@ export declare const VIDEO_SIZE: {
15
15
  export declare const ASSISTANT_MODEL_CONTAINER_CLASS = "assistant-robot-model-container";
16
16
  export declare const ASSISTANT_TIP_CONTAINER = "assistant_tip_container";
17
17
  export declare const CONTAINER_HEAD = "<div class=\"assistant-robot-container ";
18
- export declare const CONTAINER_BODY = "\">\n <style>\n .assistant-robot-container{\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .assistant-robot-model-container{\n flex: 1;\n position:relative;\n width:100%;\n }\n .assistant_tip_container{\n position: absolute;\n top: 2px;\n left: 50%;\n min-width: 100px;\n border: 1px solid #aaaaaa;\n border-radius: 6px;\n background: #fff;\n transform: translate(-50%);\n padding: 12px 20px;\n text-align: center;\n }\n .assistant_tip_container::after{\n content: '';\n display: block;\n position: absolute;\n bottom: -6px;\n left: 50%;\n width: 8px;\n height: 8px;\n transform: rotate(45deg);\n border-bottom: 1px solid #aaaaaa;\n border-right: 1px solid #aaaaaa;\n background: #fff;\n }\n </style>\n <div class=\"assistant-robot-model-container\">\n <div class=\"assistant_tip_container\">HI!</div>\n\n </div>\n<div>\n";
19
- export declare const ROBOT_CHAT_INPUT_CLASS = "assistant-robot-input";
20
- export declare const ROBOT_CHAT_BTN_CLASS = "assistant-robot-btn";
21
- export declare const ROBOT_CHAT_BOX_HEAD = "<div class=\"assistant-robot-chartbox";
22
- export declare const ROBOT_CHAT_BOX_BODY = "\">\n<style>\n .assistant-robot-chartbox{\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n }\n .assistant-robot-input{\n flex: 1;\n min-width: 200px;\n background: rgba(0,0,0,0);\n border: 1px solid #aaaaaa;\n }\n .assistant-robot-btn{\n flex: 0 0 auto;\n }\n</style>\n<input class=\"assistant-robot-input\" type=\"text\" />\n<button class=\"assistant-robot-btn\">ask</button>\n</div>";
18
+ export declare const CONTAINER_BODY = "\">\n <style>\n .assistant-robot-container{\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .assistant-robot-model-container{\n flex: 1;\n position:relative;\n width:100%;\n }\n .assistant_tip_container{\n position: absolute;\n top: 2px;\n left: 50%;\n min-width: 100px;\n border: 1px solid #aaaaaa;\n border-radius: 6px;\n background: #fff;\n transform: translate(-50%);\n padding: 12px 20px;\n text-align: center;\n animation: fadeInOut 0.4s ease-in-out;\n }\n @keyframes fadeInOut {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n }\n .assistant_tip_container::after{\n content: '';\n display: block;\n position: absolute;\n bottom: -6px;\n left: 50%;\n width: 8px;\n height: 8px;\n transform: rotate(45deg);\n border-bottom: 1px solid #aaaaaa;\n border-right: 1px solid #aaaaaa;\n background: #fff;\n }\n </style>\n <div class=\"assistant-robot-model-container\">\n <div class=\"assistant_tip_container\">HI!</div>\n\n </div>\n<div>\n";
19
+ export declare const tips: {
20
+ openCamera: string;
21
+ alreadyOpenCamera: string;
22
+ };
23
+ export declare enum EMenuKey {
24
+ openCamera = "openCamera",
25
+ hello = "hello"
26
+ }
27
+ export declare const ROBOT_OPERATION_INPUT_CLASS = "assistant-robot-input";
28
+ export declare const ROBOT_OPERATION_BTN_CLASS = "assistant-robot-btn";
29
+ export declare const OPERATION_CONTAINER_CLASS = "operation_container";
30
+ export declare const MENU_BTN_CLASS = "menu_btn";
31
+ export declare const MENU_LIST_CLASS = "menu_list";
32
+ export declare const ROBOT_OPERATION_BOX_HEAD = "<div class=\"assistant-robot-chartbox";
33
+ export declare const ROBOT_OPERATION_BOX_BODY = "\">\n<style>\n .assistant-robot-chartbox{\n width: 100%;\n height: 32px;\n display: flex;\n flex: 0 0 auto;\n flex-wrap: wrap;\n align-items: center;\n border-radius: 54px;\n box-shadow: 0 1px 2px -2px rgba(0, 0, 0, 0.16),\n 0 3px 6px 0 rgba(0, 0, 0, 0.12),\n 0 5px 12px 4px rgba(0, 0, 0, 0.09);\n padding: 10px 12px;\n }\n .assistant-robot-input{\n flex: 1;\n min-width: 200px;\n background: rgba(0,0,0,0);\n border: 1px solid #dedede;\n height: 28px;\n margin-right: 6px;\n outline:none;\n color: #666666;\n }\n .assistant-robot-btn{\n flex: 0 0 auto;\n height: 24px;\n }\n\n .operation_container{\n position: relative;\n height: 24px;\n }\n .menu_btn{\n color: #dedede;\n width:24px;\n height: 24px;\n cursor: pointer;\n }\n\n .menu_list {\n display: none;\n position: absolute;\n top: 30px;\n left: 0px;\n background-color: #fff;\n border: 1px solid #ccc;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n padding: 10px;\n border-radius: 5px;\n animation: fadeInOut 0.4s ease-in-out;\n list-style: none;\n }\n\n .menu_list li{\n line-height: 32px;\n text-wrap: nowrap;\n border-bottom: 1px solid #dedede;\n cursor: pointer;\n }\n\n .menu_list li:last-child{\n border-bottom: none;\n }\n\n @keyframes fadeInOut {\n 0% { opacity: 0; }\n 100% { opacity: 1; }\n }\n</style>\n<span class=\"operation_container\">\n <svg\n t=\"1702017878997\"\n class=\"menu_btn\"\n viewBox=\"0 0 1024 1024\"\n version=\"1.1\"\n p-id=\"1322\"\n width=\"32\"\n height=\"32\"\n >\n <path\n d=\"M512 512m-116.949333 0a116.949333 116.949333 0 1 0 233.898666 0 116.949333 116.949333 0 1 0-233.898666 0Z\"\n fill=\"currentColor\"\n p-id=\"1323\"\n ></path>\n <path\n d=\"M512 159.616m-116.949333 0a116.949333 116.949333 0 1 0 233.898666 0 116.949333 116.949333 0 1 0-233.898666 0Z\"\n fill=\"currentColor\"\n p-id=\"1324\"\n ></path>\n <path\n d=\"M512 864.384m-116.949333 0a116.949333 116.949333 0 1 0 233.898666 0 116.949333 116.949333 0 1 0-233.898666 0Z\"\n fill=\"currentColor\"\n p-id=\"1325\"\n ></path>\n </svg>\n <ul class=\"menu_list\">\n <li data-id=\"openCamera\">Open the Camera</li>\n";
34
+ export declare const ROBOT_OPERATION_BOX_TAIL = "</ul>\n</span>\n<input class=\"assistant-robot-input\" type=\"text\" />\n<button class=\"assistant-robot-btn\">ask</button>\n</div>";
23
35
  export declare enum ELanguageModelStatus {
24
36
  loading = 1,
25
37
  ready = 2,
@@ -27,3 +39,19 @@ export declare enum ELanguageModelStatus {
27
39
  }
28
40
  export declare const ONE_LETTER_READ_TIME = 50;
29
41
  export declare const READ_WAIT_TIME = 2000;
42
+ export declare enum EUserDetectorStatus {
43
+ init = "init",
44
+ ready = "ready",
45
+ openCameraRejected = "openCameraRejected",
46
+ userMediaUnavailable = "userMediaUnavailable",
47
+ faceDetectorCreateError = "faceDetectorCreateError",
48
+ error = "error"
49
+ }
50
+ export declare const USER_DETECTOR_STATUS_CHANGE_EVENT = "userDetectorStatusChange";
51
+ export declare enum EAssistantEvent {
52
+ languageModelLoaded = "languageModelLoaded",
53
+ userDetectorStatusChange = "userDetectorStatusChange",
54
+ menuClick = "menuClick",
55
+ ask = "ask",
56
+ say = "say"
57
+ }
package/dist/index.d.ts CHANGED
@@ -1,16 +1,3 @@
1
- import { AssistantModel } from "./AssistantModel";
2
- import { UserDetector } from "./UserDetector";
3
- import { QuestionManager } from "./QuestionManager";
4
- import type { LanguageModel } from "./LanguageModel";
5
- import type { IAssistantRobotConfig } from "./type";
6
- export declare class Assistant<T extends LanguageModel> {
7
- assistantModel: AssistantModel;
8
- userDetector: UserDetector;
9
- questionManager: QuestionManager | undefined;
10
- languageModel: T;
11
- options: IAssistantRobotConfig<T>;
12
- constructor(el: Element, options: IAssistantRobotConfig<T>);
13
- handleLanguageModelLoad: () => void;
14
- ask: (question: string) => Promise<void>;
15
- lookAtUser(): Promise<void>;
16
- }
1
+ export { Assistant } from "./Assistant";
2
+ export * from "./type";
3
+ export { ELanguageModelStatus, EUserDetectorStatus, EAssistantEvent, EMenuKey, MODEL_SCENE_CONFIG as DEFAULT_MODEL_SCENE_CONFIG, } from "./constants";