tjbot-ce 3.0.1

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.
Files changed (224) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +382 -0
  3. package/dist/camera/camera.d.ts +62 -0
  4. package/dist/camera/camera.d.ts.map +1 -0
  5. package/dist/camera/camera.js +155 -0
  6. package/dist/camera/camera.js.map +1 -0
  7. package/dist/camera/index.d.ts +18 -0
  8. package/dist/camera/index.d.ts.map +1 -0
  9. package/dist/camera/index.js +18 -0
  10. package/dist/camera/index.js.map +1 -0
  11. package/dist/config/config-types.d.ts +75 -0
  12. package/dist/config/config-types.d.ts.map +1 -0
  13. package/dist/config/config-types.generated.d.ts +495 -0
  14. package/dist/config/config-types.generated.d.ts.map +1 -0
  15. package/dist/config/config-types.generated.js +2 -0
  16. package/dist/config/config-types.generated.js.map +1 -0
  17. package/dist/config/config-types.js +175 -0
  18. package/dist/config/config-types.js.map +1 -0
  19. package/dist/config/index.d.ts +20 -0
  20. package/dist/config/index.d.ts.map +1 -0
  21. package/dist/config/index.js +19 -0
  22. package/dist/config/index.js.map +1 -0
  23. package/dist/config/tjbot-config.d.ts +98 -0
  24. package/dist/config/tjbot-config.d.ts.map +1 -0
  25. package/dist/config/tjbot-config.js +309 -0
  26. package/dist/config/tjbot-config.js.map +1 -0
  27. package/dist/config/vendor/colors.yaml +61 -0
  28. package/dist/config/vendor/model-registry.yaml +275 -0
  29. package/dist/config/vendor/tjbot-config.schema.yaml +792 -0
  30. package/dist/config/vendor/tjbot.default.toml +452 -0
  31. package/dist/led/index.d.ts +20 -0
  32. package/dist/led/index.d.ts.map +1 -0
  33. package/dist/led/index.js +20 -0
  34. package/dist/led/index.js.map +1 -0
  35. package/dist/led/led-common-anode.d.ts +38 -0
  36. package/dist/led/led-common-anode.d.ts.map +1 -0
  37. package/dist/led/led-common-anode.js +79 -0
  38. package/dist/led/led-common-anode.js.map +1 -0
  39. package/dist/led/led-neopixel-spi.d.ts +60 -0
  40. package/dist/led/led-neopixel-spi.d.ts.map +1 -0
  41. package/dist/led/led-neopixel-spi.js +216 -0
  42. package/dist/led/led-neopixel-spi.js.map +1 -0
  43. package/dist/led/led-neopixel-ws281x.js +186 -0
  44. package/dist/led/led-neopixel.d.ts +57 -0
  45. package/dist/led/led-neopixel.d.ts.map +1 -0
  46. package/dist/led/led-neopixel.js +235 -0
  47. package/dist/led/led-neopixel.js.map +1 -0
  48. package/dist/microphone/index.d.ts +18 -0
  49. package/dist/microphone/index.d.ts.map +1 -0
  50. package/dist/microphone/index.js +18 -0
  51. package/dist/microphone/index.js.map +1 -0
  52. package/dist/microphone/microphone.d.ts +65 -0
  53. package/dist/microphone/microphone.d.ts.map +1 -0
  54. package/dist/microphone/microphone.js +179 -0
  55. package/dist/microphone/microphone.js.map +1 -0
  56. package/dist/rpi-drivers/index.d.ts +22 -0
  57. package/dist/rpi-drivers/index.d.ts.map +1 -0
  58. package/dist/rpi-drivers/index.js +22 -0
  59. package/dist/rpi-drivers/index.js.map +1 -0
  60. package/dist/rpi-drivers/rpi-detect.d.ts +24 -0
  61. package/dist/rpi-drivers/rpi-detect.d.ts.map +1 -0
  62. package/dist/rpi-drivers/rpi-detect.js +49 -0
  63. package/dist/rpi-drivers/rpi-detect.js.map +1 -0
  64. package/dist/rpi-drivers/rpi-driver.d.ts +116 -0
  65. package/dist/rpi-drivers/rpi-driver.d.ts.map +1 -0
  66. package/dist/rpi-drivers/rpi-driver.js +261 -0
  67. package/dist/rpi-drivers/rpi-driver.js.map +1 -0
  68. package/dist/rpi-drivers/rpi3-driver.d.ts +47 -0
  69. package/dist/rpi-drivers/rpi3-driver.d.ts.map +1 -0
  70. package/dist/rpi-drivers/rpi3-driver.js +145 -0
  71. package/dist/rpi-drivers/rpi3-driver.js.map +1 -0
  72. package/dist/rpi-drivers/rpi4-driver.d.ts +35 -0
  73. package/dist/rpi-drivers/rpi4-driver.d.ts.map +1 -0
  74. package/dist/rpi-drivers/rpi4-driver.js +101 -0
  75. package/dist/rpi-drivers/rpi4-driver.js.map +1 -0
  76. package/dist/rpi-drivers/rpi5-driver.d.ts +33 -0
  77. package/dist/rpi-drivers/rpi5-driver.d.ts.map +1 -0
  78. package/dist/rpi-drivers/rpi5-driver.js +78 -0
  79. package/dist/rpi-drivers/rpi5-driver.js.map +1 -0
  80. package/dist/servo/index.d.ts +19 -0
  81. package/dist/servo/index.d.ts.map +1 -0
  82. package/dist/servo/index.js +19 -0
  83. package/dist/servo/index.js.map +1 -0
  84. package/dist/servo/servo-constants.d.ts +33 -0
  85. package/dist/servo/servo-constants.d.ts.map +1 -0
  86. package/dist/servo/servo-constants.js +34 -0
  87. package/dist/servo/servo-constants.js.map +1 -0
  88. package/dist/servo/servo-lgpio.d.ts +82 -0
  89. package/dist/servo/servo-lgpio.d.ts.map +1 -0
  90. package/dist/servo/servo-lgpio.js +178 -0
  91. package/dist/servo/servo-lgpio.js.map +1 -0
  92. package/dist/speaker/audio-player.d.ts +30 -0
  93. package/dist/speaker/audio-player.d.ts.map +1 -0
  94. package/dist/speaker/audio-player.js +68 -0
  95. package/dist/speaker/audio-player.js.map +1 -0
  96. package/dist/speaker/index.d.ts +18 -0
  97. package/dist/speaker/index.d.ts.map +1 -0
  98. package/dist/speaker/index.js +18 -0
  99. package/dist/speaker/index.js.map +1 -0
  100. package/dist/speaker/speaker.d.ts +53 -0
  101. package/dist/speaker/speaker.d.ts.map +1 -0
  102. package/dist/speaker/speaker.js +125 -0
  103. package/dist/speaker/speaker.js.map +1 -0
  104. package/dist/stt/backends/azure-stt.d.ts +32 -0
  105. package/dist/stt/backends/azure-stt.d.ts.map +1 -0
  106. package/dist/stt/backends/azure-stt.js +227 -0
  107. package/dist/stt/backends/azure-stt.js.map +1 -0
  108. package/dist/stt/backends/google-cloud-stt.d.ts +31 -0
  109. package/dist/stt/backends/google-cloud-stt.d.ts.map +1 -0
  110. package/dist/stt/backends/google-cloud-stt.js +371 -0
  111. package/dist/stt/backends/google-cloud-stt.js.map +1 -0
  112. package/dist/stt/backends/ibm-watson-stt.d.ts +32 -0
  113. package/dist/stt/backends/ibm-watson-stt.d.ts.map +1 -0
  114. package/dist/stt/backends/ibm-watson-stt.js +190 -0
  115. package/dist/stt/backends/ibm-watson-stt.js.map +1 -0
  116. package/dist/stt/backends/sherpa-onnx-stt.d.ts +117 -0
  117. package/dist/stt/backends/sherpa-onnx-stt.d.ts.map +1 -0
  118. package/dist/stt/backends/sherpa-onnx-stt.js +694 -0
  119. package/dist/stt/backends/sherpa-onnx-stt.js.map +1 -0
  120. package/dist/stt/index.d.ts +20 -0
  121. package/dist/stt/index.d.ts.map +1 -0
  122. package/dist/stt/index.js +21 -0
  123. package/dist/stt/index.js.map +1 -0
  124. package/dist/stt/stt-engine.d.ts +68 -0
  125. package/dist/stt/stt-engine.d.ts.map +1 -0
  126. package/dist/stt/stt-engine.js +99 -0
  127. package/dist/stt/stt-engine.js.map +1 -0
  128. package/dist/stt/stt-utils.d.ts +36 -0
  129. package/dist/stt/stt-utils.d.ts.map +1 -0
  130. package/dist/stt/stt-utils.js +112 -0
  131. package/dist/stt/stt-utils.js.map +1 -0
  132. package/dist/stt/stt.d.ts +52 -0
  133. package/dist/stt/stt.d.ts.map +1 -0
  134. package/dist/stt/stt.js +100 -0
  135. package/dist/stt/stt.js.map +1 -0
  136. package/dist/tjbot.d.ts +317 -0
  137. package/dist/tjbot.d.ts.map +1 -0
  138. package/dist/tjbot.js +736 -0
  139. package/dist/tjbot.js.map +1 -0
  140. package/dist/tts/backends/azure-tts.d.ts +30 -0
  141. package/dist/tts/backends/azure-tts.d.ts.map +1 -0
  142. package/dist/tts/backends/azure-tts.js +92 -0
  143. package/dist/tts/backends/azure-tts.js.map +1 -0
  144. package/dist/tts/backends/google-cloud-tts.d.ts +38 -0
  145. package/dist/tts/backends/google-cloud-tts.d.ts.map +1 -0
  146. package/dist/tts/backends/google-cloud-tts.js +116 -0
  147. package/dist/tts/backends/google-cloud-tts.js.map +1 -0
  148. package/dist/tts/backends/ibm-watson-tts.d.ts +42 -0
  149. package/dist/tts/backends/ibm-watson-tts.d.ts.map +1 -0
  150. package/dist/tts/backends/ibm-watson-tts.js +99 -0
  151. package/dist/tts/backends/ibm-watson-tts.js.map +1 -0
  152. package/dist/tts/backends/sherpa-onnx-tts.d.ts +80 -0
  153. package/dist/tts/backends/sherpa-onnx-tts.d.ts.map +1 -0
  154. package/dist/tts/backends/sherpa-onnx-tts.js +237 -0
  155. package/dist/tts/backends/sherpa-onnx-tts.js.map +1 -0
  156. package/dist/tts/index.d.ts +19 -0
  157. package/dist/tts/index.d.ts.map +1 -0
  158. package/dist/tts/index.js +20 -0
  159. package/dist/tts/index.js.map +1 -0
  160. package/dist/tts/tts-engine.d.ts +67 -0
  161. package/dist/tts/tts-engine.d.ts.map +1 -0
  162. package/dist/tts/tts-engine.js +109 -0
  163. package/dist/tts/tts-engine.js.map +1 -0
  164. package/dist/tts/tts.d.ts +47 -0
  165. package/dist/tts/tts.d.ts.map +1 -0
  166. package/dist/tts/tts.js +101 -0
  167. package/dist/tts/tts.js.map +1 -0
  168. package/dist/utils/colors.d.ts +39 -0
  169. package/dist/utils/colors.d.ts.map +1 -0
  170. package/dist/utils/colors.js +155 -0
  171. package/dist/utils/colors.js.map +1 -0
  172. package/dist/utils/constants.d.ts +41 -0
  173. package/dist/utils/constants.d.ts.map +1 -0
  174. package/dist/utils/constants.js +43 -0
  175. package/dist/utils/constants.js.map +1 -0
  176. package/dist/utils/credentials.d.ts +43 -0
  177. package/dist/utils/credentials.d.ts.map +1 -0
  178. package/dist/utils/credentials.js +121 -0
  179. package/dist/utils/credentials.js.map +1 -0
  180. package/dist/utils/errors.d.ts +26 -0
  181. package/dist/utils/errors.d.ts.map +1 -0
  182. package/dist/utils/errors.js +32 -0
  183. package/dist/utils/errors.js.map +1 -0
  184. package/dist/utils/index.d.ts +25 -0
  185. package/dist/utils/index.d.ts.map +1 -0
  186. package/dist/utils/index.js +23 -0
  187. package/dist/utils/index.js.map +1 -0
  188. package/dist/utils/logging.d.ts +44 -0
  189. package/dist/utils/logging.d.ts.map +1 -0
  190. package/dist/utils/logging.js +113 -0
  191. package/dist/utils/logging.js.map +1 -0
  192. package/dist/utils/model-registry.d.ts +142 -0
  193. package/dist/utils/model-registry.d.ts.map +1 -0
  194. package/dist/utils/model-registry.js +391 -0
  195. package/dist/utils/model-registry.js.map +1 -0
  196. package/dist/utils/utils.d.ts +33 -0
  197. package/dist/utils/utils.d.ts.map +1 -0
  198. package/dist/utils/utils.js +50 -0
  199. package/dist/utils/utils.js.map +1 -0
  200. package/dist/vision/backends/azure-vision.d.ts +33 -0
  201. package/dist/vision/backends/azure-vision.d.ts.map +1 -0
  202. package/dist/vision/backends/azure-vision.js +151 -0
  203. package/dist/vision/backends/azure-vision.js.map +1 -0
  204. package/dist/vision/backends/google-cloud-vision.d.ts +32 -0
  205. package/dist/vision/backends/google-cloud-vision.d.ts.map +1 -0
  206. package/dist/vision/backends/google-cloud-vision.js +193 -0
  207. package/dist/vision/backends/google-cloud-vision.js.map +1 -0
  208. package/dist/vision/backends/onnx.d.ts +116 -0
  209. package/dist/vision/backends/onnx.d.ts.map +1 -0
  210. package/dist/vision/backends/onnx.js +781 -0
  211. package/dist/vision/backends/onnx.js.map +1 -0
  212. package/dist/vision/index.d.ts +19 -0
  213. package/dist/vision/index.d.ts.map +1 -0
  214. package/dist/vision/index.js +20 -0
  215. package/dist/vision/index.js.map +1 -0
  216. package/dist/vision/vision-engine.d.ts +131 -0
  217. package/dist/vision/vision-engine.d.ts.map +1 -0
  218. package/dist/vision/vision-engine.js +97 -0
  219. package/dist/vision/vision-engine.js.map +1 -0
  220. package/dist/vision/vision.d.ts +48 -0
  221. package/dist/vision/vision.d.ts.map +1 -0
  222. package/dist/vision/vision.js +83 -0
  223. package/dist/vision/vision.js.map +1 -0
  224. package/package.json +124 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-registry.js","sourceRoot":"","sources":["../../src/utils/model-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright 2025 IBM Corp. All Rights Reserved.
3
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * Put TJBot to sleep.
19
+ * @param {number} sec Number of seconds to sleep for.
20
+ */
21
+ export declare function sleepSync(sec: number): void;
22
+ /**
23
+ * Put TJBot to sleep asynchronously.
24
+ * @param {number} sec Number of seconds to sleep for.
25
+ */
26
+ export declare function sleep(sec: number): Promise<void>;
27
+ /**
28
+ * Check if a command-line tool is available in PATH
29
+ * @param {string} command - The command to check for
30
+ * @returns {boolean} - True if command is available, false otherwise
31
+ */
32
+ export declare function isCommandAvailable(command: string): boolean;
33
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO3D"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Copyright 2025 IBM Corp. All Rights Reserved.
3
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import { execSync } from 'child_process';
18
+ /**
19
+ * Put TJBot to sleep.
20
+ * @param {number} sec Number of seconds to sleep for.
21
+ */
22
+ export function sleepSync(sec) {
23
+ const msec = sec * 1000;
24
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, msec);
25
+ }
26
+ /**
27
+ * Put TJBot to sleep asynchronously.
28
+ * @param {number} sec Number of seconds to sleep for.
29
+ */
30
+ export function sleep(sec) {
31
+ const msec = sec * 1000;
32
+ return new Promise((resolve) => {
33
+ setTimeout(resolve, msec);
34
+ });
35
+ }
36
+ /**
37
+ * Check if a command-line tool is available in PATH
38
+ * @param {string} command - The command to check for
39
+ * @returns {boolean} - True if command is available, false otherwise
40
+ */
41
+ export function isCommandAvailable(command) {
42
+ try {
43
+ execSync(`command -v ${command}`, { stdio: 'ignore' });
44
+ return true;
45
+ }
46
+ catch {
47
+ return false;
48
+ }
49
+ }
50
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC7B,MAAM,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC;IACxB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAe;IAC9C,IAAI,CAAC;QACD,QAAQ,CAAC,cAAc,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { VisionEngine, type FaceDetectionMetadata, type ImageClassificationResult, type ImageDescriptionResult, type ObjectDetectionResult } from '../vision-engine.js';
17
+ export declare class AzureVisionEngine extends VisionEngine {
18
+ private visionKey?;
19
+ private visionEndpoint?;
20
+ private client?;
21
+ initialize(): Promise<void>;
22
+ private readImageBuffer;
23
+ private getObjectDetectionConfidenceThreshold;
24
+ private getImageClassificationConfidenceThreshold;
25
+ detectObjects(image: Buffer | string): Promise<ObjectDetectionResult[]>;
26
+ classifyImage(image: Buffer | string): Promise<ImageClassificationResult[]>;
27
+ detectFaces(image: Buffer | string): Promise<{
28
+ isFaceDetected: boolean;
29
+ metadata: FaceDetectionMetadata[];
30
+ }>;
31
+ describeImage(image: Buffer | string): Promise<ImageDescriptionResult>;
32
+ }
33
+ //# sourceMappingURL=azure-vision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-vision.d.ts","sourceRoot":"","sources":["../../../src/vision/backends/azure-vision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AASH,OAAO,EACH,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC7B,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,iBAAkB,SAAQ,YAAY;IAC/C,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,MAAM,CAAC,CAAuB;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBjC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qCAAqC;IAQ7C,OAAO,CAAC,yCAAyC;IAQ3C,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAiDvE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAkC3E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;KAAE,CAAC;IAQ5G,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAwC/E"}
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ComputerVisionClient } from '@azure/cognitiveservices-computervision';
17
+ import { ApiKeyCredentials } from '@azure/ms-rest-js';
18
+ import fs from 'fs';
19
+ import { loadAzureCredentials } from '../../utils/credentials.js';
20
+ import { TJBotError } from '../../utils/index.js';
21
+ import { getLogger } from '../../utils/logging.js';
22
+ import { VisionEngine, } from '../vision-engine.js';
23
+ const logger = getLogger(import.meta.url);
24
+ export class AzureVisionEngine extends VisionEngine {
25
+ visionKey;
26
+ visionEndpoint;
27
+ client;
28
+ async initialize() {
29
+ const config = this.config;
30
+ const credentials = loadAzureCredentials(config?.credentialsPath);
31
+ this.visionKey = credentials.visionKey;
32
+ this.visionEndpoint = credentials.visionEndpoint;
33
+ if (!this.visionKey || !this.visionEndpoint) {
34
+ throw new TJBotError('Azure Vision visionKey and visionEndpoint are required');
35
+ }
36
+ const apiKeyCredentials = new ApiKeyCredentials({ inHeader: { 'Ocp-Apim-Subscription-Key': this.visionKey } });
37
+ this.client = new ComputerVisionClient(apiKeyCredentials, this.visionEndpoint);
38
+ logger.info('Azure Vision engine initialized');
39
+ logger.debug(`Initialized AzureVisionEngine with config:
40
+ visionKey: ${this.visionKey ? '***' : 'not set'},
41
+ visionEndpoint: ${this.visionEndpoint ? this.visionEndpoint : 'not set'}`);
42
+ }
43
+ readImageBuffer(image) {
44
+ if (typeof image === 'string') {
45
+ return fs.readFileSync(image);
46
+ }
47
+ return image;
48
+ }
49
+ getObjectDetectionConfidenceThreshold() {
50
+ const config = this.config;
51
+ if (config.objectDetectionConfidence === undefined) {
52
+ throw new TJBotError('Object detection confidence threshold is not configured for Azure Vision engine');
53
+ }
54
+ return config.objectDetectionConfidence;
55
+ }
56
+ getImageClassificationConfidenceThreshold() {
57
+ const config = this.config;
58
+ if (config.imageClassificationConfidence === undefined) {
59
+ throw new TJBotError('Image classification confidence threshold is not configured for Azure Vision engine');
60
+ }
61
+ return config.imageClassificationConfidence;
62
+ }
63
+ async detectObjects(image) {
64
+ if (!this.client) {
65
+ throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
66
+ }
67
+ const resolvedConfidenceThreshold = this.getObjectDetectionConfidenceThreshold();
68
+ logger.verbose('Running object detection using Azure Computer Vision API');
69
+ const imageBuffer = this.readImageBuffer(image);
70
+ try {
71
+ const result = await this.client.analyzeImageInStream(imageBuffer, {
72
+ visualFeatures: ['Objects'],
73
+ });
74
+ const objects = result.objects ?? [];
75
+ return objects
76
+ .map((obj) => ({
77
+ label: obj.object ?? 'unknown',
78
+ confidence: obj.confidence ?? 0,
79
+ bbox: [
80
+ obj.rectangle?.x ?? 0,
81
+ obj.rectangle?.y ?? 0,
82
+ obj.rectangle?.w ?? 0,
83
+ obj.rectangle?.h ?? 0,
84
+ ],
85
+ }))
86
+ .filter((obj) => obj.confidence >= resolvedConfidenceThreshold)
87
+ .sort((a, b) => b.confidence - a.confidence);
88
+ }
89
+ catch (error) {
90
+ throw new TJBotError(`Azure Vision API error during object detection: ${error instanceof Error ? error.message : String(error)}`);
91
+ }
92
+ }
93
+ async classifyImage(image) {
94
+ if (!this.client) {
95
+ throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
96
+ }
97
+ const resolvedConfidenceThreshold = this.getImageClassificationConfidenceThreshold();
98
+ logger.verbose('Classifying image with Azure Computer Vision API');
99
+ const imageBuffer = this.readImageBuffer(image);
100
+ try {
101
+ const result = await this.client.analyzeImageInStream(imageBuffer, {
102
+ visualFeatures: ['Tags'],
103
+ });
104
+ const tags = result.tags ?? [];
105
+ return tags
106
+ .filter((tag) => tag.confidence && tag.confidence >= resolvedConfidenceThreshold)
107
+ .map((tag) => ({
108
+ label: tag.name ?? 'unknown',
109
+ confidence: tag.confidence ?? 0,
110
+ }))
111
+ .sort((a, b) => b.confidence - a.confidence);
112
+ }
113
+ catch (error) {
114
+ throw new TJBotError(`Azure Vision API error during classification: ${error instanceof Error ? error.message : String(error)}`);
115
+ }
116
+ }
117
+ async detectFaces(image) {
118
+ void image;
119
+ throw new TJBotError('Face detection is not supported by the Azure Computer Vision service. Please use another backend for face detection.');
120
+ }
121
+ async describeImage(image) {
122
+ if (!this.client) {
123
+ throw new TJBotError('Azure Vision client not initialized. Call initialize() first.');
124
+ }
125
+ logger.verbose('Describing image with Azure Computer Vision API');
126
+ const imageBuffer = this.readImageBuffer(image);
127
+ try {
128
+ const result = await this.client.analyzeImageInStream(imageBuffer, {
129
+ visualFeatures: ['Description'],
130
+ });
131
+ // Handle description array - take first caption if available
132
+ const descriptions = result
133
+ .description?.captions ?? [];
134
+ const firstCaption = descriptions[0];
135
+ if (firstCaption && firstCaption.text) {
136
+ return {
137
+ description: firstCaption.text,
138
+ confidence: firstCaption.confidence ?? 0,
139
+ };
140
+ }
141
+ return {
142
+ description: '',
143
+ confidence: 0,
144
+ };
145
+ }
146
+ catch (error) {
147
+ throw new TJBotError(`Azure Vision API error during description: ${error instanceof Error ? error.message : String(error)}`);
148
+ }
149
+ }
150
+ }
151
+ //# sourceMappingURL=azure-vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure-vision.js","sourceRoot":"","sources":["../../../src/vision/backends/azure-vision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { VisionEngine, type FaceDetectionMetadata, type ImageClassificationResult, type ImageDescriptionResult, type ObjectDetectionResult } from '../vision-engine.js';
17
+ export declare class GoogleCloudVisionEngine extends VisionEngine {
18
+ private client?;
19
+ initialize(): Promise<void>;
20
+ private readImageBuffer;
21
+ private getObjectDetectionConfidenceThreshold;
22
+ private getImageClassificationConfidenceThreshold;
23
+ private getFaceDetectionConfidenceThreshold;
24
+ detectObjects(image: Buffer | string): Promise<ObjectDetectionResult[]>;
25
+ classifyImage(image: Buffer | string): Promise<ImageClassificationResult[]>;
26
+ detectFaces(image: Buffer | string): Promise<{
27
+ isFaceDetected: boolean;
28
+ metadata: FaceDetectionMetadata[];
29
+ }>;
30
+ describeImage(_image: Buffer | string): Promise<ImageDescriptionResult>;
31
+ }
32
+ //# sourceMappingURL=google-cloud-vision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-cloud-vision.d.ts","sourceRoot":"","sources":["../../../src/vision/backends/google-cloud-vision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EACH,YAAY,EACZ,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAE3B,KAAK,qBAAqB,EAC7B,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,uBAAwB,SAAQ,YAAY;IACrD,OAAO,CAAC,MAAM,CAAC,CAAuB;IAEhC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,qCAAqC;IAU7C,OAAO,CAAC,yCAAyC;IAUjD,OAAO,CAAC,mCAAmC;IAUrC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAgDvE,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAiC3E,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAAE,cAAc,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,qBAAqB,EAAE,CAAA;KAAE,CAAC;IAiF5G,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;CAKhF"}
@@ -0,0 +1,193 @@
1
+ /**
2
+ * Copyright 2026-present TJBot Contributors. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ import { ImageAnnotatorClient } from '@google-cloud/vision';
17
+ import fs from 'fs';
18
+ import { loadGoogleCloudCredentials } from '../../utils/credentials.js';
19
+ import { TJBotError } from '../../utils/errors.js';
20
+ import { getLogger } from '../../utils/logging.js';
21
+ import { VisionEngine, } from '../vision-engine.js';
22
+ const logger = getLogger(import.meta.url);
23
+ export class GoogleCloudVisionEngine extends VisionEngine {
24
+ client;
25
+ async initialize() {
26
+ const config = this.config;
27
+ loadGoogleCloudCredentials(config?.credentialsPath);
28
+ // Create client using Application Default Credentials (ADC)
29
+ // which reads GOOGLE_APPLICATION_CREDENTIALS environment variable
30
+ this.client = new ImageAnnotatorClient();
31
+ logger.info('Google Cloud Vision engine initialized');
32
+ logger.debug(`Initialized GoogleCloudVisionEngine with config:
33
+ credentialsPath: ${config.credentialsPath}`);
34
+ }
35
+ readImageBuffer(image) {
36
+ if (typeof image === 'string') {
37
+ return fs.readFileSync(image);
38
+ }
39
+ return image;
40
+ }
41
+ getObjectDetectionConfidenceThreshold() {
42
+ const config = this.config;
43
+ if (config.objectDetectionConfidence === undefined) {
44
+ throw new TJBotError('Object detection confidence threshold is not configured for Google Cloud Vision engine');
45
+ }
46
+ return config.objectDetectionConfidence;
47
+ }
48
+ getImageClassificationConfidenceThreshold() {
49
+ const config = this.config;
50
+ if (config.imageClassificationConfidence === undefined) {
51
+ throw new TJBotError('Image classification confidence threshold is not configured for Google Cloud Vision engine');
52
+ }
53
+ return config.imageClassificationConfidence;
54
+ }
55
+ getFaceDetectionConfidenceThreshold() {
56
+ const config = this.config;
57
+ if (config.faceDetectionConfidence === undefined) {
58
+ throw new TJBotError('Face detection confidence threshold is not configured for Google Cloud Vision engine');
59
+ }
60
+ return config.faceDetectionConfidence;
61
+ }
62
+ async detectObjects(image) {
63
+ if (!this.client) {
64
+ throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
65
+ }
66
+ const resolvedConfidenceThreshold = this.getObjectDetectionConfidenceThreshold();
67
+ logger.verbose('Running object detection using Google Cloud Vision API');
68
+ const imageBuffer = this.readImageBuffer(image);
69
+ try {
70
+ const request = {
71
+ image: { content: imageBuffer },
72
+ features: [{ type: 'OBJECT_LOCALIZATION' }],
73
+ };
74
+ const [result] = await this.client.annotateImage(request);
75
+ const objects = result.localizedObjectAnnotations ?? [];
76
+ return objects
77
+ .map((obj) => {
78
+ // Convert normalized vertices to bounding box [x, y, width, height]
79
+ const vertices = obj.boundingPoly?.normalizedVertices ?? [];
80
+ if (vertices.length < 2) {
81
+ return null;
82
+ }
83
+ const x = vertices[0]?.x ?? 0;
84
+ const y = vertices[0]?.y ?? 0;
85
+ const w = (vertices[2]?.x ?? 0) - x;
86
+ const h = (vertices[2]?.y ?? 0) - y;
87
+ return {
88
+ label: obj.name ?? 'unknown',
89
+ confidence: obj.score ?? 0,
90
+ bbox: [x, y, w, h],
91
+ };
92
+ })
93
+ .filter((obj) => obj !== null)
94
+ .filter((obj) => obj.confidence >= resolvedConfidenceThreshold)
95
+ .sort((a, b) => b.confidence - a.confidence);
96
+ }
97
+ catch (error) {
98
+ throw new TJBotError(`Google Cloud Vision API error during object detection: ${error instanceof Error ? error.message : String(error)}`);
99
+ }
100
+ }
101
+ async classifyImage(image) {
102
+ if (!this.client) {
103
+ throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
104
+ }
105
+ const resolvedConfidenceThreshold = this.getImageClassificationConfidenceThreshold();
106
+ logger.verbose('Classifying image with Google Cloud Vision API');
107
+ const imageBuffer = this.readImageBuffer(image);
108
+ try {
109
+ const request = {
110
+ image: { content: imageBuffer },
111
+ features: [{ type: 'LABEL_DETECTION' }],
112
+ };
113
+ const [result] = await this.client.annotateImage(request);
114
+ const labels = result.labelAnnotations ?? [];
115
+ return labels
116
+ .filter((label) => (label.score ?? 0) >= resolvedConfidenceThreshold)
117
+ .map((label) => ({
118
+ label: label.description ?? 'unknown',
119
+ confidence: label.score ?? 0,
120
+ }))
121
+ .sort((a, b) => b.confidence - a.confidence);
122
+ }
123
+ catch (error) {
124
+ throw new TJBotError(`Google Cloud Vision API error during classification: ${error instanceof Error ? error.message : String(error)}`);
125
+ }
126
+ }
127
+ async detectFaces(image) {
128
+ if (!this.client) {
129
+ throw new TJBotError('Google Cloud Vision client not initialized. Call initialize() first.');
130
+ }
131
+ const confidenceThreshold = this.getFaceDetectionConfidenceThreshold();
132
+ logger.verbose('Detecting faces in image with Google Cloud Vision API');
133
+ const imageBuffer = this.readImageBuffer(image);
134
+ try {
135
+ const request = {
136
+ image: { content: imageBuffer },
137
+ features: [{ type: 'FACE_DETECTION' }],
138
+ };
139
+ const [result] = await this.client.annotateImage(request);
140
+ const faces = result.faceAnnotations ?? [];
141
+ const metadata = faces
142
+ .map((face) => {
143
+ // Extract bounding box from vertices
144
+ const vertices = face.boundingPoly?.vertices ?? [];
145
+ if (vertices.length === 0) {
146
+ return null;
147
+ }
148
+ let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
149
+ for (const vertex of vertices) {
150
+ minX = Math.min(minX, vertex.x ?? 0);
151
+ minY = Math.min(minY, vertex.y ?? 0);
152
+ maxX = Math.max(maxX, vertex.x ?? 0);
153
+ maxY = Math.max(maxY, vertex.y ?? 0);
154
+ }
155
+ const w = maxX - minX;
156
+ const h = maxY - minY;
157
+ // Extract landmarks
158
+ const landmarks = (face.landmarks ?? []).map((landmark) => ({
159
+ x: landmark.position?.x ?? 0,
160
+ y: landmark.position?.y ?? 0,
161
+ type: String(landmark.type ?? '') || undefined,
162
+ }));
163
+ // Map head pose angles (cast to any to access extended properties)
164
+ const faceWithHeadPose = face;
165
+ const ryp = {
166
+ roll: faceWithHeadPose?.headPose?.rollAngle ?? 0,
167
+ yaw: faceWithHeadPose?.headPose?.panAngle ?? 0,
168
+ pitch: faceWithHeadPose?.headPose?.tiltAngle ?? 0,
169
+ };
170
+ const headPose = faceWithHeadPose.headPose ? ryp : undefined;
171
+ return {
172
+ boundingBox: [minX, minY, w, h],
173
+ confidence: face.detectionConfidence ?? 0,
174
+ landmarks,
175
+ headPose,
176
+ };
177
+ })
178
+ .filter((meta) => meta !== null)
179
+ .filter((meta) => meta.confidence >= confidenceThreshold);
180
+ return {
181
+ isFaceDetected: metadata.length > 0,
182
+ metadata,
183
+ };
184
+ }
185
+ catch (error) {
186
+ throw new TJBotError(`Google Cloud Vision API error during face detection: ${error instanceof Error ? error.message : String(error)}`);
187
+ }
188
+ }
189
+ async describeImage(_image) {
190
+ throw new TJBotError('Image description is only available with Azure Vision backend. Configure see.backend.type to "azure-vision".');
191
+ }
192
+ }
193
+ //# sourceMappingURL=google-cloud-vision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-cloud-vision.js","sourceRoot":"","sources":["../../../src/vision/backends/google-cloud-vision.ts"],"names":[],"mappings":"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"}