a2a-memory 0.11.5 → 0.12.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.
Files changed (274) hide show
  1. package/LICENSE +7 -19
  2. package/README.md +1 -1
  3. package/dist/a2a/client.js +1 -252
  4. package/dist/a2a/discovery.js +1 -115
  5. package/dist/a2a/index.js +1 -8
  6. package/dist/a2a/types.js +1 -42
  7. package/dist/adapters/anthropic.js +1 -117
  8. package/dist/chunking/chunker.js +1 -163
  9. package/dist/claude/sync.d.ts +8 -2
  10. package/dist/claude/sync.js +1 -298
  11. package/dist/cli/commands/add.js +1 -80
  12. package/dist/cli/commands/claude-sync.d.ts +3 -3
  13. package/dist/cli/commands/claude-sync.js +1 -70
  14. package/dist/cli/commands/cleanup.js +1 -83
  15. package/dist/cli/commands/config.js +1 -79
  16. package/dist/cli/commands/edit.js +1 -69
  17. package/dist/cli/commands/embed.js +1 -92
  18. package/dist/cli/commands/extract.js +1 -103
  19. package/dist/cli/commands/health.js +1 -105
  20. package/dist/cli/commands/list.js +1 -46
  21. package/dist/cli/commands/migrate-chunks.js +1 -205
  22. package/dist/cli/commands/migrate-file-refs.js +1 -183
  23. package/dist/cli/commands/proficiency.js +1 -146
  24. package/dist/cli/commands/rm.js +1 -64
  25. package/dist/cli/commands/search.js +1 -90
  26. package/dist/cli/commands/setup-wizard.js +1 -387
  27. package/dist/cli/commands/setup.js +1 -170
  28. package/dist/cli/commands/skill.js +1 -151
  29. package/dist/cli/commands/status.js +1 -70
  30. package/dist/cli/commands/sync.js +1 -202
  31. package/dist/cli/commands/team.js +1 -142
  32. package/dist/cli/index.js +1 -87
  33. package/dist/config/manager.js +1 -372
  34. package/dist/db/database.d.ts +36 -0
  35. package/dist/db/database.js +1 -1400
  36. package/dist/embedding/e5-provider.js +1 -147
  37. package/dist/embedding/index.js +1 -34
  38. package/dist/embedding/local-provider.js +1 -157
  39. package/dist/embedding/openai-provider.js +1 -92
  40. package/dist/embedding/quantization.js +1 -89
  41. package/dist/extraction/dedup-manager.js +1 -161
  42. package/dist/extraction/emotion-filter.js +1 -33
  43. package/dist/extraction/extractor.d.ts +0 -3
  44. package/dist/extraction/extractor.js +1 -648
  45. package/dist/extraction/file-reference.js +1 -77
  46. package/dist/extraction/filter.js +1 -86
  47. package/dist/extraction/scorer.js +1 -142
  48. package/dist/extraction/similarity.js +1 -85
  49. package/dist/hooks/client-factory.js +1 -44
  50. package/dist/hooks/post-tool-use.js +1 -518
  51. package/dist/hooks/pre-compact.js +1 -209
  52. package/dist/hooks/session-end.js +1 -633
  53. package/dist/hooks/session-start.js +1 -549
  54. package/dist/hooks/shared.js +1 -110
  55. package/dist/hooks/stop.d.ts +21 -0
  56. package/dist/hooks/stop.js +1 -0
  57. package/dist/hooks/user-prompt-submit.js +1 -316
  58. package/dist/i18n/index.js +1 -2
  59. package/dist/i18n/messages.js +1 -150
  60. package/dist/index.d.ts +1 -1
  61. package/dist/index.js +1 -43
  62. package/dist/lifecycle/cleanup-scheduler.js +1 -137
  63. package/dist/lifecycle/cleanup.d.ts +1 -0
  64. package/dist/lifecycle/cleanup.js +1 -116
  65. package/dist/lifecycle/consolidation.d.ts +22 -0
  66. package/dist/lifecycle/consolidation.js +1 -0
  67. package/dist/lifecycle/index.d.ts +2 -0
  68. package/dist/lifecycle/index.js +1 -13
  69. package/dist/lifecycle/injection-flush.d.ts +24 -0
  70. package/dist/lifecycle/injection-flush.js +1 -0
  71. package/dist/lifecycle/quality-scorer.d.ts +5 -6
  72. package/dist/lifecycle/quality-scorer.js +1 -46
  73. package/dist/lifecycle/tiering.js +1 -246
  74. package/dist/llm/client.js +1 -226
  75. package/dist/llm/index.js +1 -5
  76. package/dist/proficiency/actr-engine.js +1 -106
  77. package/dist/proficiency/detection.js +1 -77
  78. package/dist/proficiency/index.js +1 -9
  79. package/dist/proficiency/tracker.js +1 -173
  80. package/dist/proficiency/types.js +1 -8
  81. package/dist/providers/adapters.js +1 -140
  82. package/dist/providers/detector.js +1 -57
  83. package/dist/search/adaptive-router.js +1 -93
  84. package/dist/search/index.js +1 -9
  85. package/dist/search/ranker.js +1 -171
  86. package/dist/search/reranker.js +1 -155
  87. package/dist/session/parser.js +1 -130
  88. package/dist/skill/evaluator.js +1 -509
  89. package/dist/skill/index.js +1 -7
  90. package/dist/skill/types.js +1 -7
  91. package/dist/sync/client.d.ts +7 -0
  92. package/dist/sync/client.js +1 -597
  93. package/dist/sync/encryption.js +1 -203
  94. package/dist/sync/index.js +1 -12
  95. package/dist/sync/queue.js +1 -214
  96. package/dist/sync/scheduler.js +1 -140
  97. package/dist/sync/synchronizer.js +1 -241
  98. package/dist/sync/team-synchronizer.js +1 -204
  99. package/dist/sync/vector-clock.js +1 -70
  100. package/dist/types/index.d.ts +13 -1
  101. package/dist/types/index.js +1 -132
  102. package/dist/utils/keychain.js +1 -170
  103. package/dist/utils/logger.js +1 -128
  104. package/package.json +15 -10
  105. package/dist/a2a/client.d.ts.map +0 -1
  106. package/dist/a2a/client.js.map +0 -1
  107. package/dist/a2a/discovery.d.ts.map +0 -1
  108. package/dist/a2a/discovery.js.map +0 -1
  109. package/dist/a2a/index.d.ts.map +0 -1
  110. package/dist/a2a/index.js.map +0 -1
  111. package/dist/a2a/types.d.ts.map +0 -1
  112. package/dist/a2a/types.js.map +0 -1
  113. package/dist/adapters/anthropic.d.ts.map +0 -1
  114. package/dist/adapters/anthropic.js.map +0 -1
  115. package/dist/chunking/chunker.d.ts.map +0 -1
  116. package/dist/chunking/chunker.js.map +0 -1
  117. package/dist/claude/sync.d.ts.map +0 -1
  118. package/dist/claude/sync.js.map +0 -1
  119. package/dist/cli/commands/add.d.ts.map +0 -1
  120. package/dist/cli/commands/add.js.map +0 -1
  121. package/dist/cli/commands/claude-sync.d.ts.map +0 -1
  122. package/dist/cli/commands/claude-sync.js.map +0 -1
  123. package/dist/cli/commands/cleanup.d.ts.map +0 -1
  124. package/dist/cli/commands/cleanup.js.map +0 -1
  125. package/dist/cli/commands/config.d.ts.map +0 -1
  126. package/dist/cli/commands/config.js.map +0 -1
  127. package/dist/cli/commands/edit.d.ts.map +0 -1
  128. package/dist/cli/commands/edit.js.map +0 -1
  129. package/dist/cli/commands/embed.d.ts.map +0 -1
  130. package/dist/cli/commands/embed.js.map +0 -1
  131. package/dist/cli/commands/extract.d.ts.map +0 -1
  132. package/dist/cli/commands/extract.js.map +0 -1
  133. package/dist/cli/commands/health.d.ts.map +0 -1
  134. package/dist/cli/commands/health.js.map +0 -1
  135. package/dist/cli/commands/list.d.ts.map +0 -1
  136. package/dist/cli/commands/list.js.map +0 -1
  137. package/dist/cli/commands/migrate-chunks.d.ts.map +0 -1
  138. package/dist/cli/commands/migrate-chunks.js.map +0 -1
  139. package/dist/cli/commands/migrate-file-refs.d.ts.map +0 -1
  140. package/dist/cli/commands/migrate-file-refs.js.map +0 -1
  141. package/dist/cli/commands/proficiency.d.ts.map +0 -1
  142. package/dist/cli/commands/proficiency.js.map +0 -1
  143. package/dist/cli/commands/rm.d.ts.map +0 -1
  144. package/dist/cli/commands/rm.js.map +0 -1
  145. package/dist/cli/commands/search.d.ts.map +0 -1
  146. package/dist/cli/commands/search.js.map +0 -1
  147. package/dist/cli/commands/setup-wizard.d.ts.map +0 -1
  148. package/dist/cli/commands/setup-wizard.js.map +0 -1
  149. package/dist/cli/commands/setup.d.ts.map +0 -1
  150. package/dist/cli/commands/setup.js.map +0 -1
  151. package/dist/cli/commands/skill.d.ts.map +0 -1
  152. package/dist/cli/commands/skill.js.map +0 -1
  153. package/dist/cli/commands/status.d.ts.map +0 -1
  154. package/dist/cli/commands/status.js.map +0 -1
  155. package/dist/cli/commands/sync.d.ts.map +0 -1
  156. package/dist/cli/commands/sync.js.map +0 -1
  157. package/dist/cli/commands/team.d.ts.map +0 -1
  158. package/dist/cli/commands/team.js.map +0 -1
  159. package/dist/cli/index.d.ts.map +0 -1
  160. package/dist/cli/index.js.map +0 -1
  161. package/dist/config/manager.d.ts.map +0 -1
  162. package/dist/config/manager.js.map +0 -1
  163. package/dist/db/database.d.ts.map +0 -1
  164. package/dist/db/database.js.map +0 -1
  165. package/dist/embedding/e5-provider.d.ts.map +0 -1
  166. package/dist/embedding/e5-provider.js.map +0 -1
  167. package/dist/embedding/index.d.ts.map +0 -1
  168. package/dist/embedding/index.js.map +0 -1
  169. package/dist/embedding/local-provider.d.ts.map +0 -1
  170. package/dist/embedding/local-provider.js.map +0 -1
  171. package/dist/embedding/openai-provider.d.ts.map +0 -1
  172. package/dist/embedding/openai-provider.js.map +0 -1
  173. package/dist/embedding/quantization.d.ts.map +0 -1
  174. package/dist/embedding/quantization.js.map +0 -1
  175. package/dist/extraction/dedup-manager.d.ts.map +0 -1
  176. package/dist/extraction/dedup-manager.js.map +0 -1
  177. package/dist/extraction/emotion-filter.d.ts.map +0 -1
  178. package/dist/extraction/emotion-filter.js.map +0 -1
  179. package/dist/extraction/extractor.d.ts.map +0 -1
  180. package/dist/extraction/extractor.js.map +0 -1
  181. package/dist/extraction/file-reference.d.ts.map +0 -1
  182. package/dist/extraction/file-reference.js.map +0 -1
  183. package/dist/extraction/filter.d.ts.map +0 -1
  184. package/dist/extraction/filter.js.map +0 -1
  185. package/dist/extraction/scorer.d.ts.map +0 -1
  186. package/dist/extraction/scorer.js.map +0 -1
  187. package/dist/extraction/similarity.d.ts.map +0 -1
  188. package/dist/extraction/similarity.js.map +0 -1
  189. package/dist/hooks/client-factory.d.ts.map +0 -1
  190. package/dist/hooks/client-factory.js.map +0 -1
  191. package/dist/hooks/post-tool-use.d.ts.map +0 -1
  192. package/dist/hooks/post-tool-use.js.map +0 -1
  193. package/dist/hooks/pre-compact.d.ts.map +0 -1
  194. package/dist/hooks/pre-compact.js.map +0 -1
  195. package/dist/hooks/session-end.d.ts.map +0 -1
  196. package/dist/hooks/session-end.js.map +0 -1
  197. package/dist/hooks/session-start.d.ts.map +0 -1
  198. package/dist/hooks/session-start.js.map +0 -1
  199. package/dist/hooks/shared.d.ts.map +0 -1
  200. package/dist/hooks/shared.js.map +0 -1
  201. package/dist/hooks/user-prompt-submit.d.ts.map +0 -1
  202. package/dist/hooks/user-prompt-submit.js.map +0 -1
  203. package/dist/i18n/index.d.ts.map +0 -1
  204. package/dist/i18n/index.js.map +0 -1
  205. package/dist/i18n/messages.d.ts.map +0 -1
  206. package/dist/i18n/messages.js.map +0 -1
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/lifecycle/cleanup-scheduler.d.ts.map +0 -1
  210. package/dist/lifecycle/cleanup-scheduler.js.map +0 -1
  211. package/dist/lifecycle/cleanup.d.ts.map +0 -1
  212. package/dist/lifecycle/cleanup.js.map +0 -1
  213. package/dist/lifecycle/index.d.ts.map +0 -1
  214. package/dist/lifecycle/index.js.map +0 -1
  215. package/dist/lifecycle/quality-scorer.d.ts.map +0 -1
  216. package/dist/lifecycle/quality-scorer.js.map +0 -1
  217. package/dist/lifecycle/tiering.d.ts.map +0 -1
  218. package/dist/lifecycle/tiering.js.map +0 -1
  219. package/dist/llm/client.d.ts.map +0 -1
  220. package/dist/llm/client.js.map +0 -1
  221. package/dist/llm/index.d.ts.map +0 -1
  222. package/dist/llm/index.js.map +0 -1
  223. package/dist/proficiency/actr-engine.d.ts.map +0 -1
  224. package/dist/proficiency/actr-engine.js.map +0 -1
  225. package/dist/proficiency/detection.d.ts.map +0 -1
  226. package/dist/proficiency/detection.js.map +0 -1
  227. package/dist/proficiency/index.d.ts.map +0 -1
  228. package/dist/proficiency/index.js.map +0 -1
  229. package/dist/proficiency/tracker.d.ts.map +0 -1
  230. package/dist/proficiency/tracker.js.map +0 -1
  231. package/dist/proficiency/types.d.ts.map +0 -1
  232. package/dist/proficiency/types.js.map +0 -1
  233. package/dist/providers/adapters.d.ts.map +0 -1
  234. package/dist/providers/adapters.js.map +0 -1
  235. package/dist/providers/detector.d.ts.map +0 -1
  236. package/dist/providers/detector.js.map +0 -1
  237. package/dist/search/adaptive-router.d.ts.map +0 -1
  238. package/dist/search/adaptive-router.js.map +0 -1
  239. package/dist/search/index.d.ts.map +0 -1
  240. package/dist/search/index.js.map +0 -1
  241. package/dist/search/ranker.d.ts.map +0 -1
  242. package/dist/search/ranker.js.map +0 -1
  243. package/dist/search/reranker.d.ts.map +0 -1
  244. package/dist/search/reranker.js.map +0 -1
  245. package/dist/session/parser.d.ts.map +0 -1
  246. package/dist/session/parser.js.map +0 -1
  247. package/dist/skill/evaluator.d.ts.map +0 -1
  248. package/dist/skill/evaluator.js.map +0 -1
  249. package/dist/skill/index.d.ts.map +0 -1
  250. package/dist/skill/index.js.map +0 -1
  251. package/dist/skill/types.d.ts.map +0 -1
  252. package/dist/skill/types.js.map +0 -1
  253. package/dist/sync/client.d.ts.map +0 -1
  254. package/dist/sync/client.js.map +0 -1
  255. package/dist/sync/encryption.d.ts.map +0 -1
  256. package/dist/sync/encryption.js.map +0 -1
  257. package/dist/sync/index.d.ts.map +0 -1
  258. package/dist/sync/index.js.map +0 -1
  259. package/dist/sync/queue.d.ts.map +0 -1
  260. package/dist/sync/queue.js.map +0 -1
  261. package/dist/sync/scheduler.d.ts.map +0 -1
  262. package/dist/sync/scheduler.js.map +0 -1
  263. package/dist/sync/synchronizer.d.ts.map +0 -1
  264. package/dist/sync/synchronizer.js.map +0 -1
  265. package/dist/sync/team-synchronizer.d.ts.map +0 -1
  266. package/dist/sync/team-synchronizer.js.map +0 -1
  267. package/dist/sync/vector-clock.d.ts.map +0 -1
  268. package/dist/sync/vector-clock.js.map +0 -1
  269. package/dist/types/index.d.ts.map +0 -1
  270. package/dist/types/index.js.map +0 -1
  271. package/dist/utils/keychain.d.ts.map +0 -1
  272. package/dist/utils/keychain.js.map +0 -1
  273. package/dist/utils/logger.d.ts.map +0 -1
  274. package/dist/utils/logger.js.map +0 -1
@@ -1,147 +1 @@
1
- /**
2
- * E5 Embedding Provider (e5-small-v2, 384d)
3
- *
4
- * @huggingface/transformers 기반 로컬 임베딩.
5
- * TF-IDF 64차원 대비 의미 검색 정확도 비약적 향상.
6
- *
7
- * 특징:
8
- * - 384차원 dense vector
9
- * - ONNX Runtime 기반 (~16ms/query CPU)
10
- * - 모델 자동 다운로드 + 캐싱 (~66MB)
11
- * - 싱글톤 세션 관리
12
- *
13
- * 설치: npm install @huggingface/transformers (optional dependency)
14
- */
15
- const MODEL_NAME = 'Xenova/e5-small-v2';
16
- const DIMENSIONS = 384;
17
- // 싱글톤 파이프라인
18
- let _pipeline = null;
19
- let _loading = null;
20
- /**
21
- * transformers 파이프라인을 지연 로드 (최초 1회, ~500ms)
22
- */
23
- async function getPipeline() {
24
- if (_pipeline)
25
- return _pipeline;
26
- if (_loading)
27
- return _loading;
28
- _loading = (async () => {
29
- try {
30
- // 동적 import로 optional dependency 처리
31
- // Dynamic import for optional dependency
32
- const mod = await Function('return import("@huggingface/transformers")')();
33
- _pipeline = await mod.pipeline('feature-extraction', MODEL_NAME, {
34
- quantized: true, // 양자화 모델 사용 (더 작고 빠름)
35
- });
36
- return _pipeline;
37
- }
38
- catch (err) {
39
- _loading = null;
40
- throw new Error(`E5 embedding provider requires @huggingface/transformers. ` +
41
- `Install: npm install @huggingface/transformers\n` +
42
- `Original error: ${err instanceof Error ? err.message : String(err)}`);
43
- }
44
- })();
45
- return _loading;
46
- }
47
- /**
48
- * L2 정규화
49
- */
50
- function normalize(vector) {
51
- const norm = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
52
- if (norm === 0)
53
- return vector;
54
- return vector.map(val => val / norm);
55
- }
56
- /**
57
- * Mean pooling: 모든 토큰의 임베딩을 평균
58
- */
59
- function meanPool(output) {
60
- // output shape: [1, seq_len, hidden_size]
61
- const data = output.data || output;
62
- if (Array.isArray(data) || ArrayBuffer.isView(data)) {
63
- // Flat array → reshape + pool
64
- const arr = Array.from(data);
65
- const seqLen = arr.length / DIMENSIONS;
66
- if (seqLen === 0)
67
- return new Array(DIMENSIONS).fill(0);
68
- const result = new Array(DIMENSIONS).fill(0);
69
- for (let i = 0; i < seqLen; i++) {
70
- for (let j = 0; j < DIMENSIONS; j++) {
71
- result[j] += arr[i * DIMENSIONS + j];
72
- }
73
- }
74
- for (let j = 0; j < DIMENSIONS; j++) {
75
- result[j] /= seqLen;
76
- }
77
- return result;
78
- }
79
- // 이미 올바른 shape이면 그대로 반환
80
- return Array.from(data).slice(0, DIMENSIONS);
81
- }
82
- export class E5EmbeddingProvider {
83
- dimensions;
84
- constructor(dimensions) {
85
- this.dimensions = dimensions || DIMENSIONS;
86
- }
87
- /**
88
- * 단일 텍스트 임베딩 생성
89
- * e5 모델은 "query: " 또는 "passage: " prefix가 필요
90
- */
91
- async embed(text) {
92
- const pipe = await getPipeline();
93
- // e5 모델은 query prefix 추가 시 검색 성능 향상
94
- const prefixedText = text.startsWith('query:') || text.startsWith('passage:')
95
- ? text
96
- : `query: ${text}`;
97
- const output = await pipe(prefixedText, {
98
- pooling: 'mean',
99
- normalize: true,
100
- });
101
- // transformers.js는 pooling+normalize 결과를 직접 반환
102
- const vector = Array.from(output.data || output);
103
- // 차원 맞추기
104
- if (vector.length >= this.dimensions) {
105
- return vector.slice(0, this.dimensions);
106
- }
107
- // mean pooling fallback
108
- const pooled = meanPool(output);
109
- return normalize(pooled);
110
- }
111
- /**
112
- * 배치 임베딩 생성
113
- */
114
- async embedBatch(texts) {
115
- const results = [];
116
- for (const text of texts) {
117
- results.push(await this.embed(text));
118
- }
119
- return results;
120
- }
121
- /**
122
- * 프로바이더 사용 가능 여부 확인
123
- */
124
- static async isAvailable() {
125
- try {
126
- await Function('return import("@huggingface/transformers")')();
127
- return true;
128
- }
129
- catch {
130
- return false;
131
- }
132
- }
133
- /**
134
- * 차원 수 반환
135
- */
136
- getDimensions() {
137
- return this.dimensions;
138
- }
139
- }
140
- /**
141
- * 싱글톤 파이프라인 리셋 (테스트용)
142
- */
143
- export function resetE5Pipeline() {
144
- _pipeline = null;
145
- _loading = null;
146
- }
147
- //# sourceMappingURL=e5-provider.js.map
1
+ (function(_0x311210,_0x400782){function _0x5ab37a(_0x34308e,_0xa05ebf){return _0x2558(_0x34308e-0x303,_0xa05ebf);}function _0x3fe0c1(_0x5d93ff,_0x3d74e2){return _0x2558(_0x5d93ff-0x92,_0x3d74e2);}const _0x2d725b=_0x311210();while(!![]){try{const _0x80b714=-parseInt(_0x5ab37a(0x38b,0x3a3))/0x1+parseInt(_0x3fe0c1(0x127,0x142))/0x2*(parseInt(_0x5ab37a(0x3a4,0x3ae))/0x3)+parseInt(_0x3fe0c1(0x12a,0x111))/0x4*(-parseInt(_0x3fe0c1(0x12b,0x110))/0x5)+-parseInt(_0x3fe0c1(0x13d,0x142))/0x6*(parseInt(_0x5ab37a(0x3ad,0x3ac))/0x7)+-parseInt(_0x5ab37a(0x391,0x384))/0x8+parseInt(_0x3fe0c1(0x14a,0x12e))/0x9+-parseInt(_0x5ab37a(0x3ab,0x39f))/0xa*(-parseInt(_0x5ab37a(0x395,0x388))/0xb);if(_0x80b714===_0x400782)break;else _0x2d725b['push'](_0x2d725b['shift']());}catch(_0xd6ea8a){_0x2d725b['push'](_0x2d725b['shift']());}}}(_0x2d92,0x6a21f));const MODEL_NAME='Xenova/e5-'+'small-v2',DIMENSIONS=0x180;function _0x22a8d5(_0x2ac2e1,_0x52fa49){return _0x2558(_0x2ac2e1- -0x1ae,_0x52fa49);}function _0x31173f(_0x3207ae,_0x13992d){return _0x2558(_0x3207ae- -0x25c,_0x13992d);}let _pipeline=null,_loading=null;async function getPipeline(){function _0xce28c9(_0x20749a,_0x2ec51d){return _0x2558(_0x20749a-0x2a9,_0x2ec51d);}const _0x5c75ba={'KvSjy':_0xce28c9(0x33c,0x347),'GXbyl':'feature-ex'+'traction','BtaCG':function(_0x5b15a9,_0x27cff2){return _0x5b15a9+_0x27cff2;}};if(_pipeline)return _pipeline;if(_loading)return _loading;return _loading=((async()=>{function _0xdd0e2e(_0x1317e7,_0x4e1d30){return _0xce28c9(_0x1317e7- -0x1d,_0x4e1d30);}function _0xe6e258(_0x2c522d,_0x13b0b6){return _0xce28c9(_0x2c522d- -0x556,_0x13b0b6);}try{if(_0xdd0e2e(0x31f,0x32c)===_0x5c75ba[_0xdd0e2e(0x32e,0x348)]){const _0x7b8f35=await Function(_0xe6e258(-0x226,-0x222)+_0xdd0e2e(0x32f,0x31e)+_0xe6e258(-0x21e,-0x231)+_0xdd0e2e(0x318,0x31b)+'\x22)')();return _pipeline=await _0x7b8f35[_0xe6e258(-0x227,-0x224)](_0x5c75ba[_0xdd0e2e(0x320,0x30f)],MODEL_NAME,{'quantized':!![]}),_pipeline;}else return this[_0xdd0e2e(0x32a,0x340)];}catch(_0xdd0047){_loading=null;throw new Error(_0x5c75ba[_0xdd0e2e(0x32c,0x33c)]('E5\x20embeddi'+_0xdd0e2e(0x323,0x30e)+_0xe6e258(-0x1f6,-0x210)+_0xe6e258(-0x20e,-0x212)+_0xdd0e2e(0x316,0x32c)+_0xdd0e2e(0x326,0x31d)+('Install:\x20n'+_0xe6e258(-0x1fa,-0x1f8)+'\x20@huggingf'+_0xe6e258(-0x223,-0x231)+_0xdd0e2e(0x322,0x309)),'Original\x20e'+_0xe6e258(-0x1f7,-0x1e6)+(_0xdd0047 instanceof Error?_0xdd0047['message']:String(_0xdd0047))));}})()),_loading;}function normalize(_0x4e1448){function _0x1ed44a(_0x3d4e93,_0x38c112){return _0x2558(_0x3d4e93- -0x1b4,_0x38c112);}const _0x49cd61=Math[_0x1ed44a(-0xfb,-0x10d)](_0x4e1448[_0x1ed44a(-0xfa,-0xe9)]((_0x534e77,_0x430a7c)=>_0x534e77+_0x430a7c*_0x430a7c,0x0));if(_0x49cd61===0x0)return _0x4e1448;function _0x27dbc1(_0x4ebe7f,_0x38981c){return _0x2558(_0x38981c- -0x1a,_0x4ebe7f);}return _0x4e1448[_0x27dbc1(0x8b,0x94)](_0x2aa4b8=>_0x2aa4b8/_0x49cd61);}function _0x2558(_0x35179e,_0x49f7f7){_0x35179e=_0x35179e-0x85;const _0x2d92d7=_0x2d92();let _0x2558df=_0x2d92d7[_0x35179e];if(_0x2558['gHBuJv']===undefined){var _0x507906=function(_0x4338b4){const _0x28d14a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1ad500='',_0x177daa='';for(let _0x44ba2f=0x0,_0x423a94,_0x3ef9b5,_0x49d4cf=0x0;_0x3ef9b5=_0x4338b4['charAt'](_0x49d4cf++);~_0x3ef9b5&&(_0x423a94=_0x44ba2f%0x4?_0x423a94*0x40+_0x3ef9b5:_0x3ef9b5,_0x44ba2f++%0x4)?_0x1ad500+=String['fromCharCode'](0xff&_0x423a94>>(-0x2*_0x44ba2f&0x6)):0x0){_0x3ef9b5=_0x28d14a['indexOf'](_0x3ef9b5);}for(let _0x44e3f0=0x0,_0x4b4e5a=_0x1ad500['length'];_0x44e3f0<_0x4b4e5a;_0x44e3f0++){_0x177daa+='%'+('00'+_0x1ad500['charCodeAt'](_0x44e3f0)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x177daa);};_0x2558['PVlNuK']=_0x507906,_0x2558['XQKYpF']={},_0x2558['gHBuJv']=!![];}const _0x29a72c=_0x2d92d7[0x0],_0x32413c=_0x35179e+_0x29a72c,_0x2932fd=_0x2558['XQKYpF'][_0x32413c];return!_0x2932fd?(_0x2558df=_0x2558['PVlNuK'](_0x2558df),_0x2558['XQKYpF'][_0x32413c]=_0x2558df):_0x2558df=_0x2932fd,_0x2558df;}function _0x2d92(){const _0x4cc150=['zNfxvxa','BwvHBG','Cg0GAw5ZDgfSBa','ChvZAa','zNjVBq','CNjVCJOG','CIbYzxf1AxjLCW','mtyXnZC4nMDhtuvxqW','C3fYDa','CMvKDwnL','CwrHzwC','C3rHCNrZv2L0Aa','r2fuA1q','CgLWzwXPBMu','CMv0DxjUigLTCa','ntyZnZvwrvvWCxO','zw1Izwq','ywnLl3rYyw5ZzG','zw1IzwrcyxrJAa','yw5ZzM9YBwvYCW','txP0Cue','mJK0nJK2ExD4CKL0','Aw5NzMfJzs90CG','BgvUz3rO','z3jbyvC','mte5mta5odDPBxLuz0i','whLWAgq','r1HIEwW','mZGWmMrWtxLbuW','B3jTzxjZcG','BMCGChjVDMLKzq','nJaWA1npvvLP','mJC4ndvgqNj0yNm','B3jTzxjZlIa','AxnwAwv3','v2PMs2y','C2XPy2u','zgLTzw5ZAw9UCW','iebODwDNAw5NzG','qNrHq0C','ndKYuvjcCLDn','s3ztANK','B3j0kcjaAhvNzW','zgf0yq','te9vAei','ywrfq3C','AxnbDMfPBgfIBa','mtb2r3jYDLq','B25Z','n2D3whPVCW','mti2nJmYngrWCgLtvW','CxvLCNK6','AxnbCNjHEq','BwfW','zMLSBa','rgDbEeW'];_0x2d92=function(){return _0x4cc150;};return _0x2d92();}function meanPool(_0x438d09){function _0x27212d(_0x1cc6c2,_0x80d6d6){return _0x2558(_0x80d6d6- -0x1f4,_0x1cc6c2);}const _0x31a2b5={'SMlDA':function(_0xb022b6,_0x523b49){return _0xb022b6===_0x523b49;},'EaCPa':function(_0x5d4849,_0x43d4cf){return _0x5d4849!==_0x43d4cf;},'PoSDO':_0x3c5281(0x47,0x61),'cNqoP':function(_0x3cf974,_0x3ac1c6){return _0x3cf974/_0x3ac1c6;},'fqWUp':function(_0x14adfa,_0x1fefeb){return _0x14adfa===_0x1fefeb;},'WjfKf':function(_0x542840,_0x343a71){return _0x542840<_0x343a71;},'Ougng':function(_0x3e1b20,_0x58dd27){return _0x3e1b20<_0x58dd27;},'DgAxL':function(_0x2715b3,_0xbf2c82){return _0x2715b3<_0xbf2c82;}},_0x4bd485=_0x438d09[_0x3c5281(0x5a,0x47)]||_0x438d09;function _0x3c5281(_0x960141,_0x19c575){return _0x2558(_0x960141- -0x4a,_0x19c575);}if(Array[_0x27212d(-0x130,-0x147)](_0x4bd485)||ArrayBuffer[_0x3c5281(0x51,0x43)](_0x4bd485)){if(_0x31a2b5['EaCPa'](_0x31a2b5['PoSDO'],_0x3c5281(0x43,0x2d))){const _0x528f5d=Array[_0x3c5281(0x6b,0x6b)](_0x4bd485),_0x5ecb1a=_0x31a2b5['cNqoP'](_0x528f5d[_0x27212d(-0x148,-0x164)],DIMENSIONS);if(_0x31a2b5[_0x3c5281(0x67,0x66)](_0x5ecb1a,0x0))return new Array(DIMENSIONS)[_0x27212d(-0x12f,-0x145)](0x0);const _0x13a27c=new Array(DIMENSIONS)[_0x3c5281(0x65,0x49)](0x0);for(let _0x14d755=0x0;_0x31a2b5[_0x3c5281(0x52,0x5c)](_0x14d755,_0x5ecb1a);_0x14d755++){for(let _0x4c5397=0x0;_0x31a2b5['Ougng'](_0x4c5397,DIMENSIONS);_0x4c5397++){_0x13a27c[_0x4c5397]+=_0x528f5d[_0x14d755*DIMENSIONS+_0x4c5397];}}for(let _0xbfccdc=0x0;_0x31a2b5[_0x27212d(-0x140,-0x144)](_0xbfccdc,DIMENSIONS);_0xbfccdc++){_0x13a27c[_0xbfccdc]/=_0x5ecb1a;}return _0x13a27c;}else{const _0x12b71a=_0x456e11[_0x27212d(-0x157,-0x13b)](_0xcc3634[_0x3c5281(0x70,0x59)]((_0x41cd5d,_0x532dd6)=>_0x41cd5d+_0x532dd6*_0x532dd6,0x0));if(twPTjf['SMlDA'](_0x12b71a,0x0))return _0x1a1627;return _0x590cae[_0x27212d(-0x132,-0x146)](_0x57bd4d=>_0x57bd4d/_0x12b71a);}}return Array['from'](_0x4bd485)[_0x27212d(-0x149,-0x157)](0x0,DIMENSIONS);}export class E5EmbeddingProvider{[_0x22a8d5(-0x110,-0x127)];constructor(_0x13e098){function _0x1d71d0(_0x509a92,_0x297e96){return _0x22a8d5(_0x297e96- -0x168,_0x509a92);}const _0x5217cd={'LOUhB':function(_0x2c3d4f,_0x276e09){return _0x2c3d4f||_0x276e09;}};function _0x285669(_0x47bca9,_0x6d5ca5){return _0x22a8d5(_0x47bca9-0x1bd,_0x6d5ca5);}this[_0x285669(0xad,0x93)]=_0x5217cd[_0x1d71d0(-0x281,-0x271)](_0x13e098,DIMENSIONS);}async['embed'](_0x1cccf0){function _0x241996(_0x100d7f,_0x3a189b){return _0x22a8d5(_0x100d7f-0x84,_0x3a189b);}function _0x40a3f3(_0x2bc884,_0xc12b2){return _0x22a8d5(_0x2bc884- -0x19a,_0xc12b2);}const _0x2dc9e7={'GaTkT':function(_0x176f47,_0x1e57b0,_0x399d9d){return _0x176f47(_0x1e57b0,_0x399d9d);},'adECw':_0x241996(-0x78,-0x94)},_0x56445b=await getPipeline(),_0x3b648a=_0x1cccf0[_0x241996(-0x6e,-0x5a)](_0x241996(-0x7e,-0x6c))||_0x1cccf0['startsWith']('passage:')?_0x1cccf0:'query:\x20'+_0x1cccf0,_0x3dcd26=await _0x2dc9e7[_0x40a3f3(-0x2c3,-0x2a9)](_0x56445b,_0x3b648a,{'pooling':_0x2dc9e7[_0x241996(-0x84,-0x77)],'normalize':!![]}),_0x5bbd0e=Array['from'](_0x3dcd26['data']||_0x3dcd26);if(_0x5bbd0e[_0x40a3f3(-0x2b8,-0x29d)]>=this[_0x40a3f3(-0x2aa,-0x290)])return _0x5bbd0e[_0x241996(-0x8d,-0x90)](0x0,this[_0x241996(-0x8c,-0x92)]);const _0x49d75b=meanPool(_0x3dcd26);return normalize(_0x49d75b);}async[_0x22a8d5(-0x123,-0x116)](_0x5aec96){function _0x4e1ab3(_0x11ca5b,_0x1a8966){return _0x22a8d5(_0x1a8966-0x445,_0x11ca5b);}function _0x3844ff(_0x3d8204,_0x2569d6){return _0x22a8d5(_0x3d8204-0x50f,_0x2569d6);}const _0x4d75f8=[];for(const _0x2f4d42 of _0x5aec96){_0x4d75f8[_0x3844ff(0x415,0x411)](await this[_0x4e1ab3(0x321,0x320)](_0x2f4d42));}return _0x4d75f8;}static async[_0x31173f(-0x1b5,-0x1aa)+'e'](){function _0x4ef995(_0x1718d2,_0x56ae43){return _0x31173f(_0x1718d2- -0xa,_0x56ae43);}function _0x3eb19c(_0x34f03d,_0x3a800a){return _0x31173f(_0x3a800a- -0x185,_0x34f03d);}const _0x16f27f={'qdaeg':_0x4ef995(-0x1df,-0x1e4)+_0x4ef995(-0x1c3,-0x1af)+_0x3eb19c(-0x36e,-0x352)+_0x3eb19c(-0x33a,-0x355)+'\x22)'};try{return await Function(_0x16f27f[_0x3eb19c(-0x32e,-0x326)])(),!![];}catch{return![];}}['getDimensi'+_0x31173f(-0x1b3,-0x1a7)](){function _0x2a1e1f(_0x3f84a3,_0x1c1ba4){return _0x31173f(_0x3f84a3- -0x83,_0x1c1ba4);}return this[_0x2a1e1f(-0x241,-0x23b)];}}export function resetE5Pipeline(){_pipeline=null,_loading=null;}
@@ -1,34 +1 @@
1
- /**
2
- * Embedding Module
3
- *
4
- * 로컬/OpenAI 임베딩 프로바이더 팩토리.
5
- */
6
- import { LocalEmbeddingProvider } from './local-provider.js';
7
- import { OpenAIEmbeddingProvider } from './openai-provider.js';
8
- import { E5EmbeddingProvider } from './e5-provider.js';
9
- /**
10
- * 임베딩 프로바이더 생성 팩토리
11
- */
12
- export function createEmbeddingProvider(config, llmConfig) {
13
- if (config.provider === 'local') {
14
- return new LocalEmbeddingProvider(config.dimensions);
15
- }
16
- if (config.provider === 'e5') {
17
- return new E5EmbeddingProvider(config.dimensions || 384);
18
- }
19
- if (config.provider === 'openai') {
20
- // OpenAI는 llmConfig에서 apiKey 가져옴
21
- if (!llmConfig?.apiKey) {
22
- throw new Error('OpenAI 임베딩에는 LLM API Key가 필요합니다');
23
- }
24
- return new OpenAIEmbeddingProvider({
25
- apiKey: llmConfig.apiKey,
26
- });
27
- }
28
- throw new Error(`Unsupported embedding provider: ${config.provider}`);
29
- }
30
- export { LocalEmbeddingProvider } from './local-provider.js';
31
- export { OpenAIEmbeddingProvider } from './openai-provider.js';
32
- export { E5EmbeddingProvider, resetE5Pipeline } from './e5-provider.js';
33
- export { quantizeToFloat32, dequantizeFromFloat32, quantizeToInt8, dequantizeFromInt8, } from './quantization.js';
34
- //# sourceMappingURL=index.js.map
1
+ function _0x182e(){var _0x486dfd=['mty1nJCZnLjrB2rosq','odq4mdyYnhDqAKPrAq','mZu3mJG1nZjODLb4EMW','mJmYDKrlCNnV','n3zXsMTrsa','Bg9JywW','mtu2mJm1otvev1PqDgm','mtbZwKLTuNK','mti4mtyXourqwwfzwa','zcbLBwjLzgrPBG','ndy5mZa5oe5dr0Hkva','zYbWCM92AwrLCG','mJiZntzODM9lq3K','ChjVDMLKzxi','nwjeC0Hgvq','vw5ZDxbWB3j0zq','yxbPs2v5','7jEq64QuieXmtsbbueK','zgLTzw5ZAw9UCW','uKr4Ave'];_0x182e=function(){return _0x486dfd;};return _0x182e();}(function(_0x2e2169,_0x59937f){var _0x4157c1=_0x2e2169();function _0xe22a40(_0x9ad366,_0x3d23b2){return _0x1b72(_0x3d23b2-0xa6,_0x9ad366);}function _0x1c2aa8(_0x5e3bf3,_0x43bc70){return _0x1b72(_0x43bc70-0x20e,_0x5e3bf3);}while(!![]){try{var _0x8c0780=-parseInt(_0x1c2aa8(0x35e,0x35c))/0x1+parseInt(_0xe22a40(0x1e5,0x1ef))/0x2*(parseInt(_0xe22a40(0x1f0,0x1f8))/0x3)+-parseInt(_0xe22a40(0x1e4,0x1ec))/0x4*(parseInt(_0x1c2aa8(0x348,0x34e))/0x5)+-parseInt(_0xe22a40(0x1fc,0x1f6))/0x6*(parseInt(_0x1c2aa8(0x34e,0x358))/0x7)+parseInt(_0xe22a40(0x1ec,0x1ed))/0x8+-parseInt(_0x1c2aa8(0x363,0x35a))/0x9*(parseInt(_0xe22a40(0x1fd,0x1f3))/0xa)+parseInt(_0xe22a40(0x1ea,0x1ee))/0xb;if(_0x8c0780===_0x59937f)break;else _0x4157c1['push'](_0x4157c1['shift']());}catch(_0x4efa1e){_0x4157c1['push'](_0x4157c1['shift']());}}}(_0x182e,0xea09d));import{LocalEmbeddingProvider}from'./local-provider.js';import{OpenAIEmbeddingProvider}from'./openai-provider.js';import{E5EmbeddingProvider}from'./e5-provider.js';export function createEmbeddingProvider(_0x4cfe7e,_0x5151b8){var _0x1581c9={'RDxiQ':function(_0xd35777,_0x25922c){return _0xd35777===_0x25922c;}};function _0x180ceb(_0x253451,_0x45e767){return _0x1b72(_0x45e767-0xef,_0x253451);}if(_0x1581c9[_0x37152f(0x1c7,0x1c6)](_0x4cfe7e[_0x37152f(0x1c5,0x1c0)],_0x180ceb(0x23a,0x23a)))return new LocalEmbeddingProvider(_0x4cfe7e[_0x37152f(0x1c3,0x1c5)]);function _0x37152f(_0x29043e,_0xaf4e67){return _0x1b72(_0xaf4e67-0x81,_0x29043e);}if(_0x4cfe7e[_0x180ceb(0x230,0x22e)]==='e5')return new E5EmbeddingProvider(_0x4cfe7e['dimensions']||0x180);if(_0x4cfe7e[_0x180ceb(0x237,0x22e)]==='openai'){if(!_0x5151b8?.[_0x180ceb(0x22a,0x231)])throw new Error('OpenAI\x20임베딩'+_0x180ceb(0x23c,0x232)+'\x20Key가\x20필요합니'+'다');return new OpenAIEmbeddingProvider({'apiKey':_0x5151b8[_0x180ceb(0x239,0x231)]});}throw new Error(_0x180ceb(0x233,0x230)+_0x37152f(0x1c6,0x1d0)+_0x37152f(0x1d5,0x1d2)+':\x20'+_0x4cfe7e[_0x37152f(0x1c9,0x1c0)]);}export{LocalEmbeddingProvider}from'./local-provider.js';export{OpenAIEmbeddingProvider}from'./openai-provider.js';function _0x1b72(_0x3df8ee,_0x4ecdcf){_0x3df8ee=_0x3df8ee-0x13f;var _0x182e50=_0x182e();var _0x1b7208=_0x182e50[_0x3df8ee];if(_0x1b72['tCHobj']===undefined){var _0x27a6ea=function(_0x4000cb){var _0x187206='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';var _0x1bb8c0='',_0x349a58='';for(var _0x4ed7ab=0x0,_0x20bb9c,_0x3da9ea,_0x4eb253=0x0;_0x3da9ea=_0x4000cb['charAt'](_0x4eb253++);~_0x3da9ea&&(_0x20bb9c=_0x4ed7ab%0x4?_0x20bb9c*0x40+_0x3da9ea:_0x3da9ea,_0x4ed7ab++%0x4)?_0x1bb8c0+=String['fromCharCode'](0xff&_0x20bb9c>>(-0x2*_0x4ed7ab&0x6)):0x0){_0x3da9ea=_0x187206['indexOf'](_0x3da9ea);}for(var _0x5ebd46=0x0,_0x3e4841=_0x1bb8c0['length'];_0x5ebd46<_0x3e4841;_0x5ebd46++){_0x349a58+='%'+('00'+_0x1bb8c0['charCodeAt'](_0x5ebd46)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x349a58);};_0x1b72['IVzxrx']=_0x27a6ea,_0x1b72['LyRxGU']={},_0x1b72['tCHobj']=!![];}var _0x337fe5=_0x182e50[0x0],_0x3820f5=_0x3df8ee+_0x337fe5,_0xd32d50=_0x1b72['LyRxGU'][_0x3820f5];return!_0xd32d50?(_0x1b7208=_0x1b72['IVzxrx'](_0x1b7208),_0x1b72['LyRxGU'][_0x3820f5]=_0x1b7208):_0x1b7208=_0xd32d50,_0x1b7208;}export{E5EmbeddingProvider,resetE5Pipeline}from'./e5-provider.js';export{quantizeToFloat32,dequantizeFromFloat32,quantizeToInt8,dequantizeFromInt8}from'./quantization.js';
@@ -1,157 +1 @@
1
- /**
2
- * Local Embedding Provider (TF-IDF 기반)
3
- *
4
- * 64차원 경량 로컬 임베딩 생성기.
5
- * 외부 의존성 없이 순수 TypeScript로 구현.
6
- */
7
- /**
8
- * 간단한 해시 함수 (murmurhash 스타일)
9
- */
10
- function hashString(str, seed = 0) {
11
- let h = seed;
12
- for (let i = 0; i < str.length; i++) {
13
- h = Math.imul(h ^ str.charCodeAt(i), 2654435761);
14
- }
15
- return ((h ^ (h >>> 16)) >>> 0) % 0x7fffffff;
16
- }
17
- const _hashCache = new Map();
18
- function cachedHashString(str, seed = 0) {
19
- const key = `${str}:${seed}`;
20
- let val = _hashCache.get(key);
21
- if (val === undefined) {
22
- val = hashString(str, seed);
23
- _hashCache.set(key, val);
24
- }
25
- return val;
26
- }
27
- /**
28
- * 한국어/영어 기본 불용어
29
- */
30
- const STOPWORDS = new Set([
31
- // 영어
32
- 'the', 'a', 'an', 'and', 'or', 'but', 'in', 'on', 'at', 'to', 'for',
33
- 'of', 'with', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
34
- 'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'should',
35
- 'can', 'could', 'may', 'might', 'must', 'shall',
36
- // 한국어
37
- '이', '그', '저', '것', '수', '등', '및', '또는', '하다',
38
- '있다', '없다', '되다', '이다', '아니다', '의', '가', '을', '를',
39
- '에', '에서', '로', '으로', '와', '과', '도', '만', '까지',
40
- ]);
41
- /**
42
- * 텍스트를 토큰으로 분리 (공백/구두점 기준)
43
- */
44
- function tokenize(text) {
45
- return text
46
- .toLowerCase()
47
- .split(/[\s\p{P}]+/u)
48
- .filter((token) => token.length > 1 && !STOPWORDS.has(token));
49
- }
50
- /**
51
- * Term Frequency 계산
52
- */
53
- function computeTF(tokens) {
54
- const tf = new Map();
55
- for (const token of tokens) {
56
- tf.set(token, (tf.get(token) ?? 0) + 1);
57
- }
58
- // 정규화 (전체 토큰 수로 나눔)
59
- const total = tokens.length;
60
- if (total > 0) {
61
- for (const [token, count] of tf.entries()) {
62
- tf.set(token, count / total);
63
- }
64
- }
65
- return tf;
66
- }
67
- /**
68
- * Local Embedding Provider (TF-IDF)
69
- */
70
- export class LocalEmbeddingProvider {
71
- idfMap = new Map();
72
- dimensions;
73
- corpusSize = 0;
74
- tokenCache = new Map();
75
- tokenCacheOrder = [];
76
- TOKEN_CACHE_MAX = 500;
77
- constructor(dimensions = 64) {
78
- this.dimensions = dimensions;
79
- }
80
- cachedTokenize(text) {
81
- const cached = this.tokenCache.get(text);
82
- if (cached)
83
- return cached;
84
- const tokens = tokenize(text);
85
- this.tokenCache.set(text, tokens);
86
- this.tokenCacheOrder.push(text);
87
- if (this.tokenCacheOrder.length > this.TOKEN_CACHE_MAX) {
88
- const oldest = this.tokenCacheOrder.shift();
89
- this.tokenCache.delete(oldest);
90
- }
91
- return tokens;
92
- }
93
- /**
94
- * Corpus 업데이트 (IDF 계산)
95
- */
96
- updateCorpus(documents) {
97
- this.corpusSize = documents.length;
98
- if (documents.length === 0)
99
- return;
100
- // 각 토큰이 몇 개 문서에 등장하는지 카운트
101
- const df = new Map();
102
- for (const doc of documents) {
103
- const tokens = new Set(tokenize(doc));
104
- for (const token of tokens) {
105
- df.set(token, (df.get(token) ?? 0) + 1);
106
- }
107
- }
108
- // IDF 계산: log(N / df)
109
- this.idfMap.clear();
110
- for (const [token, docFreq] of df.entries()) {
111
- this.idfMap.set(token, Math.log(this.corpusSize / docFreq));
112
- }
113
- }
114
- /**
115
- * 단일 텍스트 임베딩 생성
116
- */
117
- embed(text) {
118
- const tokens = this.cachedTokenize(text);
119
- if (tokens.length === 0) {
120
- return new Array(this.dimensions).fill(0);
121
- }
122
- const tf = computeTF(tokens);
123
- const vector = new Array(this.dimensions).fill(0);
124
- for (const [token, tfValue] of tf.entries()) {
125
- const idf = this.idfMap.get(token) ?? 1;
126
- const tfidf = tfValue * idf;
127
- const index = cachedHashString(token) % this.dimensions;
128
- vector[index] += tfidf;
129
- }
130
- return this.normalize(vector);
131
- }
132
- /**
133
- * Corpus와 함께 임베딩 생성
134
- */
135
- embedWithCorpus(text, corpusTexts) {
136
- if (corpusTexts && corpusTexts.length > 0) {
137
- this.updateCorpus(corpusTexts);
138
- }
139
- return this.embed(text);
140
- }
141
- /**
142
- * 배치 임베딩 생성
143
- */
144
- embedBatch(texts) {
145
- return texts.map((text) => this.embed(text));
146
- }
147
- /**
148
- * L2 정규화
149
- */
150
- normalize(vector) {
151
- const norm = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
152
- if (norm === 0)
153
- return vector;
154
- return vector.map((val) => val / norm);
155
- }
156
- }
157
- //# sourceMappingURL=local-provider.js.map
1
+ function _0x43ad(_0x125e5a,_0x2bcea2){_0x125e5a=_0x125e5a-0x1cf;const _0x4feed8=_0x4fee();let _0x43ad8f=_0x4feed8[_0x125e5a];if(_0x43ad['pkwdJA']===undefined){var _0xc820c3=function(_0x50c22b){const _0x417a97='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x2f6c10='',_0x5e5f59='';for(let _0x14b41f=0x0,_0x37fa31,_0x385471,_0x57a6db=0x0;_0x385471=_0x50c22b['charAt'](_0x57a6db++);~_0x385471&&(_0x37fa31=_0x14b41f%0x4?_0x37fa31*0x40+_0x385471:_0x385471,_0x14b41f++%0x4)?_0x2f6c10+=String['fromCharCode'](0xff&_0x37fa31>>(-0x2*_0x14b41f&0x6)):0x0){_0x385471=_0x417a97['indexOf'](_0x385471);}for(let _0x39e00b=0x0,_0x506ac4=_0x2f6c10['length'];_0x39e00b<_0x506ac4;_0x39e00b++){_0x5e5f59+='%'+('00'+_0x2f6c10['charCodeAt'](_0x39e00b)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5e5f59);};_0x43ad['JDuUIN']=_0xc820c3,_0x43ad['xuOdmw']={},_0x43ad['pkwdJA']=!![];}const _0x3815ec=_0x4feed8[0x0],_0x428d08=_0x125e5a+_0x3815ec,_0xc26eb3=_0x43ad['xuOdmw'][_0x428d08];return!_0xc26eb3?(_0x43ad8f=_0x43ad['JDuUIN'](_0x43ad8f),_0x43ad['xuOdmw'][_0x428d08]=_0x43ad8f):_0x43ad8f=_0xc26eb3,_0x43ad8f;}(function(_0xb629f0,_0x20e3b7){const _0x4bb75a=_0xb629f0();function _0x452a5c(_0x1b0abf,_0x47e8ca){return _0x43ad(_0x1b0abf- -0x2be,_0x47e8ca);}function _0x2444a6(_0x306057,_0x49c8b3){return _0x43ad(_0x306057-0xf4,_0x49c8b3);}while(!![]){try{const _0x2b01ac=parseInt(_0x452a5c(-0xe9,-0xfb))/0x1*(-parseInt(_0x2444a6(0x2ff,0x319))/0x2)+-parseInt(_0x452a5c(-0xdb,-0xd8))/0x3+-parseInt(_0x452a5c(-0xd2,-0xc1))/0x4*(-parseInt(_0x452a5c(-0xe8,-0x107))/0x5)+parseInt(_0x2444a6(0x2f2,0x2dc))/0x6+-parseInt(_0x2444a6(0x2df,0x2e3))/0x7+-parseInt(_0x2444a6(0x2e7,0x2f5))/0x8+-parseInt(_0x2444a6(0x2e9,0x2fd))/0x9*(-parseInt(_0x452a5c(-0xc2,-0xd1))/0xa);if(_0x2b01ac===_0x20e3b7)break;else _0x4bb75a['push'](_0x4bb75a['shift']());}catch(_0xbd05d1){_0x4bb75a['push'](_0x4bb75a['shift']());}}}(_0x4fee,0x2ea28));function _0x4f02bc(_0x5e8813,_0x162724){return _0x43ad(_0x162724-0x22f,_0x5e8813);}function hashString(_0x53effb,_0x1ec337=0x0){const _0xa6eddb={'RnWoM':function(_0x2310c4,_0x92feb8){return _0x2310c4^_0x92feb8;}};let _0x213f09=_0x1ec337;function _0x2e1c83(_0x3b8a28,_0x4aa762){return _0x43ad(_0x4aa762-0x2c5,_0x3b8a28);}for(let _0x13d8f8=0x0;_0x13d8f8<_0x53effb[_0x266697(-0x4b,-0x2c)];_0x13d8f8++){_0x213f09=Math[_0x266697(-0x3e,-0x5f)](_0x213f09^_0x53effb[_0x2e1c83(0x4ca,0x4ca)](_0x13d8f8),0x9e3779b1);}function _0x266697(_0xc63d6f,_0x3472e1){return _0x43ad(_0xc63d6f- -0x223,_0x3472e1);}return(_0xa6eddb[_0x266697(-0x46,-0x47)](_0x213f09,_0x213f09>>>0x10)>>>0x0)%0x7fffffff;}const _hashCache=new Map();function _0x4fee(){const _0x51120b=['C2HHBgW','AgfK','nenTEvbrrq','mZvUAKHxr0W','rv9nqvG','BgvUz3rO','zw50CMLLCW','D2vYzq','Agf2zq','AwrMtwfW','uM5xB00','zw1IzwrcyxrJAa','zw1Izwq','DxbKyxrLq29YCa','z3LIzLu','C2HVDwXK','mJq2mdKZvNjpwMrh','C3fYDa','Aw11Ba','BM9YBwfSAxPL','y2fJAgvKvg9Rzq','zM9Y','yMvPBMC','yMvLBG','mJuYmJi4oxjvt1vHAq','mtq3mZi0vMvpB0Hn','yxjL','CMvKDwnL','C3bSAxq','EhnYsvy','C2v0','zg9LCW','mJK4oti4ogTvquL6ra','AgfZ','ntqZotK2owvMr2H6EG','z2v0','Bwf5','BwfW','Dg9Rzw5dywnOzq','D2LSBa','Bg9N','mtbLq0LTsLu','re9QCNy','mtaWmty5nfflEgPlDG','t3jKzxi','DgHL','BML6zq','zMLSBa','BxvZDa','B3jWDxm','y2HHCKnVzgvbDa','CNjVDLq','ve9lru5Fq0fdsa','rw9Uzvm','ru9mvwO','zvjHAe8','mteWodzZtxH5D3a','BwLNAhq','zgvSzxrL','D291Bgq','zMLSDgvY','y29YChvZu2L6zq','Ahzut2W','D2L0Aa','ChvZAa','zgLTzw5ZAw9UCW'];_0x4fee=function(){return _0x51120b;};return _0x4fee();}function cachedHashString(_0x17c407,_0x32d840=0x0){const _0x3000a3={'EOLUj':function(_0x515a4b,_0xd67173){return _0x515a4b!==_0xd67173;},'aSMYR':function(_0x2e6bda,_0x1150cd,_0x3e28a6){return _0x2e6bda(_0x1150cd,_0x3e28a6);}};function _0x175fbb(_0x201b82,_0x38c752){return _0x43ad(_0x201b82-0x36a,_0x38c752);}const _0x532a9b=_0x17c407+':'+_0x32d840;let _0x28ccee=_hashCache[_0x175fbb(0x560,0x574)](_0x532a9b);function _0x31cfb1(_0x284de7,_0x2378d7){return _0x43ad(_0x284de7- -0x3b6,_0x2378d7);}if(_0x28ccee===undefined){if(_0x3000a3[_0x31cfb1(-0x1ad,-0x1ac)]('eRahO',_0x31cfb1(-0x1ac,-0x1cc)))return new _0x687be1(this['dimensions'])[_0x175fbb(0x56c,0x564)](0x0);else _0x28ccee=_0x3000a3['aSMYR'](hashString,_0x17c407,_0x32d840),_hashCache[_0x175fbb(0x55b,0x547)](_0x532a9b,_0x28ccee);}return _0x28ccee;}function _0x59e5b3(_0xfb23dd,_0x22cd2b){return _0x43ad(_0x22cd2b-0x3d6,_0xfb23dd);}const STOPWORDS=new Set([_0x4f02bc(0x430,0x42f),'a','an','and','or','but','in','on','at','to',_0x4f02bc(0x42d,0x417),'of',_0x4f02bc(0x416,0x3ff),'is',_0x59e5b3(0x5d4,0x5c3),'was',_0x59e5b3(0x5c7,0x5b0),'be',_0x59e5b3(0x5dc,0x5c0),_0x59e5b3(0x5bb,0x5bf),_0x4f02bc(0x429,0x40a),_0x59e5b3(0x5bd,0x5ca),_0x4f02bc(0x410,0x403),'do',_0x4f02bc(0x42b,0x421),'did',_0x59e5b3(0x5c3,0x5d0),_0x4f02bc(0x45b,0x43d),_0x4f02bc(0x425,0x411),'can','could',_0x59e5b3(0x5ed,0x5cd),_0x59e5b3(0x5e6,0x5e2),_0x59e5b3(0x5ba,0x5d9),_0x4f02bc(0x41d,0x402),'이','그','저','것','수','등','및','또는','하다','있다','없다','되다','이다','아니다','의','가','을','를','에','에서','로','으로','와','과','도','만','까지']);function tokenize(_0x53d160){function _0xdc5fed(_0x1ac87b,_0x864e4e){return _0x59e5b3(_0x864e4e,_0x1ac87b-0x11);}function _0x5b596d(_0x37a413,_0x59423a){return _0x59e5b3(_0x37a413,_0x59423a- -0x5a5);}return _0x53d160['toLowerCas'+'e']()[_0xdc5fed(0x5d6,0x5c8)](/[\s\p{P}]+/u)[_0x5b596d(0x2c,0x40)](_0x3fd9b9=>_0x3fd9b9[_0x5b596d(0xe,0x9)]>0x1&&!STOPWORDS[_0x5b596d(0x3b,0x25)](_0x3fd9b9));}function computeTF(_0x4eb488){const _0x43186c=new Map();function _0x364061(_0x36365d,_0x1235d7){return _0x4f02bc(_0x1235d7,_0x36365d- -0x221);}for(const _0x44f6ec of _0x4eb488){_0x43186c[_0x364061(0x1ff,0x21d)](_0x44f6ec,(_0x43186c[_0x5b3d24(0x2cc,0x2e0)](_0x44f6ec)??0x0)+0x1);}function _0x5b3d24(_0x4c526c,_0x2b8284){return _0x4f02bc(_0x4c526c,_0x2b8284- -0x145);}const _0x4def7d=_0x4eb488[_0x364061(0x1e6,0x1fe)];if(_0x4def7d>0x0)for(const [_0x32e161,_0x2e5475]of _0x43186c['entries']()){_0x43186c[_0x5b3d24(0x2c9,0x2db)](_0x32e161,_0x2e5475/_0x4def7d);}return _0x43186c;}export class LocalEmbeddingProvider{[_0x59e5b3(0x592,0x5b2)]=new Map();['dimensions'];[_0x4f02bc(0x454,0x43f)]=0x0;[_0x4f02bc(0x413,0x428)]=new Map();['tokenCache'+'Order']=[];['TOKEN_CACH'+_0x4f02bc(0x41e,0x406)]=0x1f4;constructor(_0x2c62e0=0x40){function _0x6fb51b(_0x1bc81c,_0x36908f){return _0x59e5b3(_0x36908f,_0x1bc81c- -0x7a8);}this[_0x6fb51b(-0x200,-0x1f9)]=_0x2c62e0;}[_0x59e5b3(0x5b2,0x5bd)+'nize'](_0x5299e2){const _0x5d1137={'EoneS':function(_0x168ee0,_0x380bc7){return _0x168ee0(_0x380bc7);},'hvTOl':function(_0x24acc1,_0x1d09a8){return _0x24acc1>_0x1d09a8;}},_0x2231df=this[_0x54e811(0x28a,0x26a)][_0x54e811(0x287,0x280)](_0x5299e2);function _0x54e811(_0x398bc5,_0x255220){return _0x59e5b3(_0x255220,_0x398bc5- -0x345);}if(_0x2231df)return _0x2231df;function _0x3d5e50(_0x49fc85,_0x114448){return _0x59e5b3(_0x49fc85,_0x114448- -0xf8);}const _0x4c5de6=_0x5d1137[_0x54e811(0x299,0x284)](tokenize,_0x5299e2);this[_0x54e811(0x28a,0x2a7)][_0x54e811(0x282,0x280)](_0x5299e2,_0x4c5de6),this[_0x54e811(0x28a,0x2a5)+_0x3d5e50(0x4db,0x4dd)][_0x3d5e50(0x4b9,0x4af)](_0x5299e2);if(_0x5d1137[_0x54e811(0x260,0x25d)](this[_0x54e811(0x28a,0x299)+_0x3d5e50(0x4e2,0x4dd)][_0x3d5e50(0x4c1,0x4b6)],this[_0x54e811(0x298,0x2ad)+_0x54e811(0x268,0x262)])){const _0x1f2aac=this[_0x3d5e50(0x4cd,0x4d7)+'Order']['shift']();this[_0x54e811(0x28a,0x26f)][_0x54e811(0x29e,0x298)](_0x1f2aac);}return _0x4c5de6;}[_0x59e5b3(0x5bc,0x5b6)+'us'](_0x525866){function _0xc81800(_0x30c4aa,_0x6ddf82){return _0x59e5b3(_0x30c4aa,_0x6ddf82- -0x5d7);}const _0x343e3a={'TuAnq':function(_0x3d310e,_0x8bb13b){return _0x3d310e===_0x8bb13b;}};this[_0xc81800(0x2b,0xf)]=_0x525866[_0xc81800(-0x3c,-0x29)];if(_0x343e3a['TuAnq'](_0x525866['length'],0x0))return;function _0x4a75ad(_0x50a171,_0x10f917){return _0x59e5b3(_0x50a171,_0x10f917- -0x3f2);}const _0x4ba924=new Map();for(const _0x828385 of _0x525866){const _0x1e939b=new Set(tokenize(_0x828385));for(const _0x5c216e of _0x1e939b){if(_0x4a75ad(0x1f3,0x1ea)!==_0x4a75ad(0x1fc,0x1ea)){const _0x2bb455=_0x314b09+':'+_0x2c7b1d;let _0x5032f6=_0x233141[_0xc81800(-0x1f,-0xb)](_0x2bb455);return _0x5032f6===_0x861057&&(_0x5032f6=_0x4f7a02(_0x2b510b,_0x4988ba),_0x3e1a8d[_0x4a75ad(0x1f3,0x1d5)](_0x2bb455,_0x5032f6)),_0x5032f6;}else _0x4ba924[_0x4a75ad(0x1bb,0x1d5)](_0x5c216e,(_0x4ba924[_0xc81800(0x7,-0xb)](_0x5c216e)??0x0)+0x1);}}this[_0xc81800(-0x40,-0x25)]['clear']();for(const [_0x28036d,_0x584e12]of _0x4ba924[_0x4a75ad(0x1c3,0x1bd)]()){this[_0x4a75ad(0x1ab,0x1c0)][_0x4a75ad(0x1da,0x1d5)](_0x28036d,Math[_0xc81800(0x13,-0x6)](this[_0x4a75ad(0x20f,0x1f4)]/_0x584e12));}}[_0x59e5b3(0x5b6,0x5b5)](_0x5e28bd){const _0x27b753={'gybfU':function(_0x1fdc44,_0x4cfaf3){return _0x1fdc44===_0x4cfaf3;},'xsrIV':function(_0x5be3f1,_0x24a483){return _0x5be3f1(_0x24a483);},'yeLVV':function(_0x570cac,_0x474c72){return _0x570cac*_0x474c72;},'DOjrv':function(_0x20352b,_0x5174d2){return _0x20352b%_0x5174d2;}},_0x388dff=this[_0x3e4a30(0x5b4,0x597)+_0x3e4a30(0x5b5,0x5b1)](_0x5e28bd);if(_0x27b753[_0x105793(0x1fa,0x205)](_0x388dff[_0x3e4a30(0x58b,0x588)],0x0))return new Array(this['dimensions'])[_0x3e4a30(0x5cd,0x5b2)](0x0);function _0x105793(_0x28a5f0,_0x49f06f){return _0x4f02bc(_0x49f06f,_0x28a5f0- -0x216);}const _0x5b766f=_0x27b753[_0x3e4a30(0x5c1,0x5a0)](computeTF,_0x388dff),_0x50d0f4=new Array(this[_0x105793(0x1eb,0x1d9)])[_0x105793(0x21b,0x213)](0x0);for(const [_0x111311,_0x2a776a]of _0x5b766f[_0x3e4a30(0x584,0x589)]()){const _0x41847a=this[_0x105793(0x1f5,0x206)][_0x3e4a30(0x59b,0x5a6)](_0x111311)??0x1,_0x591943=_0x27b753['yeLVV'](_0x2a776a,_0x41847a),_0x5a0a68=_0x27b753[_0x3e4a30(0x5c5,0x5ad)](_0x27b753[_0x3e4a30(0x5a7,0x5a0)](cachedHashString,_0x111311),this[_0x3e4a30(0x583,0x582)]);_0x50d0f4[_0x5a0a68]+=_0x591943;}function _0x3e4a30(_0xf00c4a,_0x5ef12b){return _0x4f02bc(_0xf00c4a,_0x5ef12b-0x181);}return this[_0x3e4a30(0x591,0x596)](_0x50d0f4);}['embedWithC'+_0x4f02bc(0x43c,0x433)](_0x3bc517,_0x3575e7){return _0x3575e7&&_0x3575e7['length']>0x0&&this['updateCorp'+'us'](_0x3575e7),this['embed'](_0x3bc517);}[_0x59e5b3(0x598,0x5b4)](_0x5b0670){function _0x342f0b(_0x52eb6d,_0x5968f0){return _0x4f02bc(_0x52eb6d,_0x5968f0-0x43);}return _0x5b0670[_0x342f0b(0x477,0x46a)](_0x4cefc7=>this['embed'](_0x4cefc7));}['normalize'](_0x276d8a){const _0x9dfe75=Math[_0x3abad8(0x3c,0x20)](_0x276d8a[_0x5de103(0x3d1,0x3e9)]((_0x45c6b0,_0x120f80)=>_0x45c6b0+_0x120f80*_0x120f80,0x0));function _0x5de103(_0x4913f9,_0x3b2ef5){return _0x59e5b3(_0x4913f9,_0x3b2ef5- -0x1db);}if(_0x9dfe75===0x0)return _0x276d8a;function _0x3abad8(_0x39d88f,_0x389978){return _0x59e5b3(_0x389978,_0x39d88f- -0x57e);}return _0x276d8a[_0x3abad8(0x50,0x41)](_0x1b792f=>_0x1b792f/_0x9dfe75);}}
@@ -1,92 +1 @@
1
- /**
2
- * OpenAI Embedding Provider
3
- *
4
- * text-embedding-3-small (1536차원) 사용.
5
- * Native fetch 사용, 외부 의존성 없음.
6
- */
7
- export class OpenAIEmbeddingProvider {
8
- apiKey;
9
- model;
10
- timeout;
11
- baseUrl = 'https://api.openai.com/v1';
12
- constructor(options) {
13
- this.apiKey = options.apiKey;
14
- this.model = options.model ?? 'text-embedding-3-small';
15
- this.timeout = options.timeout ?? 30000;
16
- }
17
- /**
18
- * 단일 텍스트 임베딩 생성
19
- */
20
- async embed(text) {
21
- const result = await this.embedBatch([text]);
22
- return result[0];
23
- }
24
- /**
25
- * 배치 임베딩 생성 (최대 2048개)
26
- */
27
- async embedBatch(texts) {
28
- if (texts.length === 0) {
29
- return [];
30
- }
31
- const controller = new AbortController();
32
- const timeoutId = setTimeout(() => controller.abort(), this.timeout);
33
- try {
34
- const response = await fetch(`${this.baseUrl}/embeddings`, {
35
- method: 'POST',
36
- headers: {
37
- 'Content-Type': 'application/json',
38
- 'Authorization': `Bearer ${this.apiKey}`,
39
- },
40
- body: JSON.stringify({
41
- input: texts,
42
- model: this.model,
43
- }),
44
- signal: controller.signal,
45
- });
46
- clearTimeout(timeoutId);
47
- if (!response.ok) {
48
- await this.handleErrorResponse(response);
49
- }
50
- const data = await response.json();
51
- // 응답 순서대로 임베딩 추출
52
- const embeddings = data.data
53
- .sort((a, b) => a.index - b.index)
54
- .map((item) => item.embedding);
55
- return embeddings;
56
- }
57
- catch (error) {
58
- clearTimeout(timeoutId);
59
- if (error instanceof Error) {
60
- if (error.name === 'AbortError') {
61
- throw new Error(`OpenAI 요청 시간 초과: ${this.timeout}ms`);
62
- }
63
- throw new Error(`OpenAI API 오류: ${error.message}`);
64
- }
65
- throw error;
66
- }
67
- }
68
- /**
69
- * 에러 응답 처리
70
- */
71
- async handleErrorResponse(response) {
72
- const status = response.status;
73
- if (status === 401) {
74
- throw new Error('OpenAI 인증 실패: API Key를 확인하세요');
75
- }
76
- if (status === 429) {
77
- throw new Error('OpenAI Rate Limit: 잠시 후 다시 시도하세요');
78
- }
79
- let message = `OpenAI HTTP ${status}`;
80
- try {
81
- const errorBody = await response.json();
82
- if (errorBody.error?.message) {
83
- message += `: ${errorBody.error.message}`;
84
- }
85
- }
86
- catch {
87
- // JSON 파싱 실패 시 기본 메시지 사용
88
- }
89
- throw new Error(message);
90
- }
91
- }
92
- //# sourceMappingURL=openai-provider.js.map
1
+ (function(_0x4b7dc2,_0x1f75c4){function _0x182824(_0x423477,_0x3ddfbb){return _0x11b1(_0x423477-0x8b,_0x3ddfbb);}const _0x581375=_0x4b7dc2();function _0x5842d7(_0x4d1583,_0xa4fb06){return _0x11b1(_0xa4fb06- -0x7d,_0x4d1583);}while(!![]){try{const _0x1e076f=-parseInt(_0x182824(0x1b6,0x1b8))/0x1+-parseInt(_0x5842d7(0xa3,0xb9))/0x2+parseInt(_0x5842d7(0xcb,0xba))/0x3+parseInt(_0x5842d7(0xab,0xb7))/0x4*(-parseInt(_0x182824(0x1ad,0x19b))/0x5)+-parseInt(_0x5842d7(0xd3,0xcd))/0x6+-parseInt(_0x182824(0x1c4,0x1af))/0x7*(-parseInt(_0x5842d7(0xe9,0xd6))/0x8)+parseInt(_0x5842d7(0xa1,0xac))/0x9;if(_0x1e076f===_0x1f75c4)break;else _0x581375['push'](_0x581375['shift']());}catch(_0x4ee19d){_0x581375['push'](_0x581375['shift']());}}}(_0x10ce,0x90ca5));function _0x174cf7(_0x4f84be,_0x469a30){return _0x11b1(_0x4f84be- -0x39a,_0x469a30);}function _0x10ce(){const _0x492d89=['ndeXodfjtNnXDKy','Bw9KzwW','uKTYtee','l2vTyMvKzgLUzW','qwLgAwm','BMfTzq','qMvHCMvYia','t3bLBKfjiefqsq','7iUC6RceioY0IoQZVdOG','ANnVBG','zw1Izwq','EfHry2m','u05fEfu','Dgv4Dc1LBwjLza','C3rHDhvZ','EEULVcdTMzxSNBJTLzJSHlJSMPq','D2PwCfK','mJi0oti1mgXABwvSAa','ywjVCNq','EgHtvwy','t3bLBKfjifjHDa','zw1IzwrKAw5N','zgLUzY0ZlxnTyq','ue9tva','yMfZzvvYBa','se9PAwy','ndCYqKDmsuXu','t3bLBKfjioYDUoYMNsa','zxjYB3i','uK9hru8','BwvZC2fNzq','Ahr0Chm6lY9HCa','7iUK7yYOoIbbueKGs2u','BgvUz3rO','mtu1odmYmfjsCwTqsq','qwjVCNrfCNjVCG','zsbmAw1PDdOG7j6G','ioYyPoULMdOG','BwfW','DgLTzw91Da','yxbWBgLJyxrPBW','mJa4mdK1ndHrrwv4u3e','BI9QC29U','nZa5nZu0EuPnyK9S','yxbPs2v5','C3rYAw5NAwz5','zgf0yq','Aw5KzxG','t3bLBKfjioYALoYYRsa','CLjLC3bVBNnL','wMPnsNK','C29YDa','nfr3yNDxsG','zw1IzwrcyxrJAa','mJi5ntm3ofLprNbMuG','mtqZmZmYmKvPuuz0uG','uwndDLO'];_0x10ce=function(){return _0x492d89;};return _0x10ce();}function _0x11b1(_0x112eda,_0x7cc5d5){_0x112eda=_0x112eda-0x122;const _0x10ce8a=_0x10ce();let _0x11b115=_0x10ce8a[_0x112eda];if(_0x11b1['YVelMu']===undefined){var _0x59e92b=function(_0x49ed2d){const _0x1abe58='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x1e78ee='',_0x5408a4='';for(let _0x57ae59=0x0,_0x2af9c7,_0x39328f,_0x3c8044=0x0;_0x39328f=_0x49ed2d['charAt'](_0x3c8044++);~_0x39328f&&(_0x2af9c7=_0x57ae59%0x4?_0x2af9c7*0x40+_0x39328f:_0x39328f,_0x57ae59++%0x4)?_0x1e78ee+=String['fromCharCode'](0xff&_0x2af9c7>>(-0x2*_0x57ae59&0x6)):0x0){_0x39328f=_0x1abe58['indexOf'](_0x39328f);}for(let _0x316421=0x0,_0x20a82a=_0x1e78ee['length'];_0x316421<_0x20a82a;_0x316421++){_0x5408a4+='%'+('00'+_0x1e78ee['charCodeAt'](_0x316421)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5408a4);};_0x11b1['HVLNUr']=_0x59e92b,_0x11b1['EhkAry']={},_0x11b1['YVelMu']=!![];}const _0x2daa1e=_0x10ce8a[0x0],_0x2921c5=_0x112eda+_0x2daa1e,_0xe63205=_0x11b1['EhkAry'][_0x2921c5];return!_0xe63205?(_0x11b115=_0x11b1['HVLNUr'](_0x11b115),_0x11b1['EhkAry'][_0x2921c5]=_0x11b115):_0x11b115=_0xe63205,_0x11b115;}function _0x31d84e(_0x1ad623,_0x4a0ff5){return _0x11b1(_0x4a0ff5- -0x34,_0x1ad623);}export class OpenAIEmbeddingProvider{[_0x174cf7(-0x26e,-0x26b)];['model'];['timeout'];['baseUrl']=_0x31d84e(0x130,0x124)+'i.openai.c'+'om/v1';constructor(_0x34d996){const _0x141767={'QcCvZ':_0xb29b1f(0x29,0x38)+_0xb29b1f(0x32,0x3b)+'ll'};this[_0xb29b1f(0xf,-0x7)]=_0x34d996[_0xb29b1f(0xf,0x28)],this['model']=_0x34d996[_0xb29b1f(0x1d,0x2e)]??_0x141767[_0x20cdfc(0x39d,0x3a8)];function _0x20cdfc(_0x221388,_0x4f5faf){return _0x31d84e(_0x4f5faf,_0x221388-0x299);}function _0xb29b1f(_0x2cddea,_0x187b20){return _0x31d84e(_0x187b20,_0x2cddea- -0xe9);}this[_0xb29b1f(0xa,0xc)]=_0x34d996[_0xb29b1f(0xa,0x9)]??0x7530;}async[_0x31d84e(0x11a,0x10f)](_0x293499){function _0x2287ee(_0x306177,_0x40ce2c){return _0x174cf7(_0x306177-0x6e8,_0x40ce2c);}const _0x4d7170=await this[_0x2287ee(0x483,0x498)]([_0x293499]);return _0x4d7170[0x0];}async['embedBatch'](_0x293661){const _0x4d81b8={'fYbjP':'text-embed'+_0x1ec898(-0x11a,-0x11d)+'ll','ROGEO':function(_0xcc1f6e,_0xbf8707,_0x5ee4fc){return _0xcc1f6e(_0xbf8707,_0x5ee4fc);},'xXjWD':_0x1ec898(-0x119,-0x11a),'TosXb':function(_0x3960df,_0x1e828d){return _0x3960df!==_0x1e828d;},'ZjMJy':'lHiZZ','xhSUf':_0x48d123(0x35c,0x34b),'xXQcc':function(_0x20ef24,_0x2326c8){return _0x20ef24 instanceof _0x2326c8;},'HOiif':function(_0x4507f2,_0x1d0689){return _0x4507f2===_0x1d0689;}};function _0x48d123(_0xc99710,_0x550d07){return _0x31d84e(_0x550d07,_0xc99710-0x255);}function _0x1ec898(_0x5735d6,_0x12bedc){return _0x31d84e(_0x12bedc,_0x5735d6- -0x235);}if(_0x293661[_0x48d123(0x37b,0x372)]===0x0)return[];const _0x312c1f=new AbortController(),_0x6fc5f5=_0x4d81b8['ROGEO'](setTimeout,()=>_0x312c1f[_0x1ec898(-0x11e,-0x110)](),this[_0x48d123(0x348,0x335)]);try{const _0x34637f=await _0x4d81b8[_0x1ec898(-0x113,-0x117)](fetch,this[_0x1ec898(-0x118,-0x10b)]+(_0x48d123(0x35d,0x34a)+'s'),{'method':_0x4d81b8['xXjWD'],'headers':{'Content-Type':_0x1ec898(-0x141,-0x148)+_0x1ec898(-0x13f,-0x131),'Authorization':_0x48d123(0x360,0x37d)+this[_0x1ec898(-0x13d,-0x133)]},'body':JSON[_0x1ec898(-0x13c,-0x155)]({'input':_0x293661,'model':this['model']}),'signal':_0x312c1f['signal']});clearTimeout(_0x6fc5f5);!_0x34637f['ok']&&(_0x4d81b8['TosXb'](_0x4d81b8[_0x1ec898(-0x137,-0x149)],_0x4d81b8[_0x48d123(0x36d,0x357)])?await this['handleErro'+_0x1ec898(-0x138,-0x12d)](_0x34637f):(this[_0x48d123(0x34d,0x360)]=_0x2af9c7[_0x48d123(0x34d,0x35f)],this[_0x48d123(0x35b,0x35e)]=_0x39328f[_0x48d123(0x35b,0x341)]??dXtTdV['fYbjP'],this[_0x48d123(0x348,0x359)]=_0x3c8044[_0x48d123(0x348,0x362)]??0x7530));const _0x23a713=await _0x34637f[_0x1ec898(-0x127,-0x13d)](),_0x3bfe31=_0x23a713[_0x48d123(0x34f,0x334)][_0x48d123(0x354,0x359)]((_0x485e5c,_0x32356f)=>_0x485e5c[_0x1ec898(-0x13a,-0x134)]-_0x32356f[_0x48d123(0x350,0x343)])[_0x1ec898(-0x143,-0x12c)](_0x1299f3=>_0x1299f3[_0x48d123(0x36f,0x388)]);return _0x3bfe31;}catch(_0x56f9a0){clearTimeout(_0x6fc5f5);if(_0x4d81b8[_0x1ec898(-0x125,-0x10e)](_0x56f9a0,Error)){if(_0x4d81b8[_0x48d123(0x373,0x384)](_0x56f9a0[_0x1ec898(-0x12b,-0x113)],_0x48d123(0x344,0x34e)))throw new Error('OpenAI\x20요청\x20'+_0x1ec898(-0x128,-0x10d)+this[_0x48d123(0x348,0x345)]+'ms');throw new Error(_0x48d123(0x361,0x37d)+_0x1ec898(-0x144,-0x13e)+_0x56f9a0[_0x1ec898(-0x112,-0xfe)]);}throw _0x56f9a0;}}async['handleErro'+_0x31d84e(0x112,0xfd)](_0x216610){const _0x1229a2={'AiFic':function(_0x17894e,_0x4e27fa){return _0x17894e===_0x4e27fa;},'wjVpY':_0x42c16b(0x3e,0x59)+_0x39f40f(-0x1,0xd)+_0x42c16b(0x3a,0x4d)},_0x5e6c94=_0x216610[_0x39f40f(-0x13,0x3)];function _0x42c16b(_0x4b0a7e,_0x4d013b){return _0x174cf7(_0x4d013b-0x29f,_0x4b0a7e);}if(_0x1229a2[_0x42c16b(0x33,0x42)](_0x5e6c94,0x191))throw new Error(_0x1229a2[_0x42c16b(0x46,0x4e)]);if(_0x5e6c94===0x1ad){if('VGbff'==='CYjub')throw new _0x17988c(_0x42c16b(0x43,0x35)+'시간\x20초과:\x20'+this[_0x39f40f(-0x33,-0x30)]+'ms');else throw new Error(_0x39f40f(-0xd,-0xa)+_0x39f40f(-0x36,-0x4e)+'시\x20후\x20다시\x20시도하'+'세요');}let _0x298d23='OpenAI\x20HTT'+'P\x20'+_0x5e6c94;function _0x39f40f(_0x34eda6,_0x342302){return _0x174cf7(_0x34eda6-0x240,_0x342302);}try{if(_0x1229a2[_0x39f40f(-0x1d,-0x1f)](_0x39f40f(-0x15,-0x25),_0x42c16b(0x30,0x4a))){const _0x2c4d8a=await _0x216610[_0x42c16b(0x38,0x47)]();_0x2c4d8a['error']?.[_0x42c16b(0x68,0x5c)]&&(_0x298d23+=':\x20'+_0x2c4d8a[_0x42c16b(0x4f,0x5a)][_0x42c16b(0x71,0x5c)]);}else return[];}catch{}throw new Error(_0x298d23);}}
@@ -1,89 +1 @@
1
- /**
2
- * Vector Quantization Module
3
- *
4
- * Scalar Quantization으로 임베딩 저장 공간 절감.
5
- * - Float32: 50% 절감 (float64 → float32)
6
- * - Int8: 87.5% 절감 (float64 → int8)
7
- */
8
- /**
9
- * Float32 양자화 (float64 → float32, 50% 저장 공간 절감)
10
- */
11
- export function quantizeToFloat32(embedding) {
12
- const float32Array = new Float32Array(embedding);
13
- return Buffer.from(float32Array.buffer, float32Array.byteOffset, float32Array.byteLength);
14
- }
15
- /**
16
- * Float32 역양자화 (buffer → number[])
17
- */
18
- export function dequantizeFromFloat32(buffer) {
19
- const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
20
- const float32Array = new Float32Array(arrayBuffer);
21
- return Array.from(float32Array);
22
- }
23
- /**
24
- * Int8 양자화 (float64 → int8, 87.5% 저장 공간 절감)
25
- * Min-Max Scaling: value → round((value - min) / (max - min) * 255) - 128
26
- */
27
- export function quantizeToInt8(embedding, stats) {
28
- if (embedding.length === 0) {
29
- return {
30
- buffer: Buffer.alloc(0),
31
- stats: { min: 0, max: 0, dimensions: 0 },
32
- };
33
- }
34
- // Stats 계산 (제공되지 않은 경우)
35
- let min, max;
36
- if (stats) {
37
- min = stats.min;
38
- max = stats.max;
39
- }
40
- else {
41
- min = Math.min(...embedding);
42
- max = Math.max(...embedding);
43
- }
44
- const range = max - min;
45
- const int8Array = new Int8Array(embedding.length);
46
- // 모든 값이 같은 경우 (range = 0)
47
- if (range === 0) {
48
- int8Array.fill(0);
49
- }
50
- else {
51
- for (let i = 0; i < embedding.length; i++) {
52
- const normalized = (embedding[i] - min) / range; // 0~1 범위로 정규화
53
- const scaled = Math.round(normalized * 255) - 128; // -128~127 범위로 변환
54
- int8Array[i] = Math.max(-128, Math.min(127, scaled)); // clamp
55
- }
56
- }
57
- return {
58
- buffer: Buffer.from(int8Array.buffer, int8Array.byteOffset, int8Array.byteLength),
59
- stats: {
60
- min,
61
- max,
62
- dimensions: embedding.length,
63
- },
64
- };
65
- }
66
- /**
67
- * Int8 역양자화 (buffer + stats → number[])
68
- */
69
- export function dequantizeFromInt8(buffer, stats) {
70
- if (buffer.length === 0 || stats.dimensions === 0) {
71
- return [];
72
- }
73
- const arrayBuffer = buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
74
- const int8Array = new Int8Array(arrayBuffer);
75
- const range = stats.max - stats.min;
76
- const result = new Array(stats.dimensions);
77
- // 모든 값이 같았던 경우 (range = 0)
78
- if (range === 0) {
79
- result.fill(stats.min);
80
- }
81
- else {
82
- for (let i = 0; i < stats.dimensions; i++) {
83
- const scaled = (int8Array[i] + 128) / 255; // 0~1 범위로 복원
84
- result[i] = scaled * range + stats.min; // 원래 범위로 복원
85
- }
86
- }
87
- return result;
88
- }
89
- //# sourceMappingURL=quantization.js.map
1
+ (function(_0x30b85c,_0x5307d0){const _0x462ae0=_0x30b85c();function _0x231886(_0x258a33,_0x12e0b5){return _0x2d3e(_0x12e0b5-0x320,_0x258a33);}function _0x4f6ab3(_0x405c29,_0x1bab6b){return _0x2d3e(_0x405c29- -0x3e1,_0x1bab6b);}while(!![]){try{const _0xa6e8cf=-parseInt(_0x231886(0x48b,0x488))/0x1*(parseInt(_0x231886(0x47b,0x479))/0x2)+parseInt(_0x4f6ab3(-0x273,-0x26d))/0x3*(parseInt(_0x231886(0x47d,0x475))/0x4)+-parseInt(_0x231886(0x488,0x48b))/0x5+-parseInt(_0x4f6ab3(-0x277,-0x27d))/0x6+-parseInt(_0x4f6ab3(-0x274,-0x279))/0x7+parseInt(_0x231886(0x479,0x47a))/0x8*(-parseInt(_0x4f6ab3(-0x284,-0x27d))/0x9)+parseInt(_0x231886(0x483,0x478))/0xa;if(_0xa6e8cf===_0x5307d0)break;else _0x462ae0['push'](_0x462ae0['shift']());}catch(_0x4f5079){_0x462ae0['push'](_0x462ae0['shift']());}}}(_0x3db8,0x35098));export function quantizeToFloat32(_0x4bb9d6){function _0x2de372(_0x16db28,_0x43fc2f){return _0x2d3e(_0x16db28-0x2a,_0x43fc2f);}function _0x8421c3(_0x217ad3,_0x1f926b){return _0x2d3e(_0x217ad3-0x1e4,_0x1f926b);}const _0x29dc1c=new Float32Array(_0x4bb9d6);return Buffer[_0x2de372(0x191,0x19a)](_0x29dc1c[_0x2de372(0x18e,0x198)],_0x29dc1c['byteOffset'],_0x29dc1c[_0x8421c3(0x353,0x360)]);}function _0x2d3e(_0x1d01ee,_0x2c0ae9){_0x1d01ee=_0x1d01ee-0x155;const _0x3db85e=_0x3db8();let _0x2d3e3e=_0x3db85e[_0x1d01ee];if(_0x2d3e['wJeLnZ']===undefined){var _0x36580a=function(_0x4efda4){const _0x5137a3='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x303ca7='',_0x1f5875='';for(let _0x4addb3=0x0,_0x2e8e02,_0x2ffb39,_0x2e44f8=0x0;_0x2ffb39=_0x4efda4['charAt'](_0x2e44f8++);~_0x2ffb39&&(_0x2e8e02=_0x4addb3%0x4?_0x2e8e02*0x40+_0x2ffb39:_0x2ffb39,_0x4addb3++%0x4)?_0x303ca7+=String['fromCharCode'](0xff&_0x2e8e02>>(-0x2*_0x4addb3&0x6)):0x0){_0x2ffb39=_0x5137a3['indexOf'](_0x2ffb39);}for(let _0x2e5d15=0x0,_0x367376=_0x303ca7['length'];_0x2e5d15<_0x367376;_0x2e5d15++){_0x1f5875+='%'+('00'+_0x303ca7['charCodeAt'](_0x2e5d15)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x1f5875);};_0x2d3e['lQQGYu']=_0x36580a,_0x2d3e['ieLrdt']={},_0x2d3e['wJeLnZ']=!![];}const _0x3b57e3=_0x3db85e[0x0],_0x52e05a=_0x1d01ee+_0x3b57e3,_0x1a8ee7=_0x2d3e['ieLrdt'][_0x52e05a];return!_0x1a8ee7?(_0x2d3e3e=_0x2d3e['lQQGYu'](_0x2d3e3e),_0x2d3e['ieLrdt'][_0x52e05a]=_0x2d3e3e):_0x2d3e3e=_0x1a8ee7,_0x2d3e3e;}export function dequantizeFromFloat32(_0x47ec06){const _0x327d27=_0x47ec06['buffer'][_0x33beb3(0x379,0x384)](_0x47ec06[_0x33beb3(0x366,0x366)],_0x47ec06[_0x20efd2(-0x191,-0x187)]+_0x47ec06[_0x33beb3(0x37f,0x37c)]);function _0x20efd2(_0x34adc4,_0x28e3f6){return _0x2d3e(_0x34adc4- -0x2e7,_0x28e3f6);}const _0x2e10ea=new Float32Array(_0x327d27);function _0x33beb3(_0x414e2b,_0x4856d0){return _0x2d3e(_0x414e2b-0x210,_0x4856d0);}return Array[_0x33beb3(0x377,0x373)](_0x2e10ea);}export function quantizeToInt8(_0x16f729,_0x3ba8ec){const _0x4b7ca5={'iNLvW':function(_0x142405,_0x20f828){return _0x142405===_0x20f828;},'IWQke':function(_0x4d0e2e,_0x5a95ca){return _0x4d0e2e<_0x5a95ca;},'gKyaN':function(_0x69f45f,_0x3fc6cd){return _0x69f45f-_0x3fc6cd;}};function _0x4ad557(_0x4ebe8c,_0xa48b06){return _0x2d3e(_0x4ebe8c-0x3ac,_0xa48b06);}if(_0x4b7ca5[_0x4ad557(0x508,0x510)](_0x16f729[_0x4ad557(0x50f,0x506)],0x0))return{'buffer':Buffer[_0x35ef41(0xc8,0xd1)](0x0),'stats':{'min':0x0,'max':0x0,'dimensions':0x0}};let _0x4f0e2f,_0x4a3e23;_0x3ba8ec?(_0x4f0e2f=_0x3ba8ec['min'],_0x4a3e23=_0x3ba8ec[_0x35ef41(0xd5,0xd2)]):(_0x4f0e2f=Math[_0x35ef41(0xd5,0xc7)](..._0x16f729),_0x4a3e23=Math[_0x35ef41(0xd7,0xd2)](..._0x16f729));const _0x4c442a=_0x4a3e23-_0x4f0e2f,_0x5d88fa=new Int8Array(_0x16f729[_0x35ef41(0xcc,0xd3)]);function _0x35ef41(_0x651128,_0x348d95){return _0x2d3e(_0x348d95- -0x90,_0x651128);}if(_0x4c442a===0x0)_0x5d88fa[_0x4ad557(0x51c,0x519)](0x0);else for(let _0x44d9cd=0x0;_0x4b7ca5['IWQke'](_0x44d9cd,_0x16f729['length']);_0x44d9cd++){const _0x2837bd=(_0x16f729[_0x44d9cd]-_0x4f0e2f)/_0x4c442a,_0x2842f2=_0x4b7ca5['gKyaN'](Math['round'](_0x2837bd*0xff),0x80);_0x5d88fa[_0x44d9cd]=Math[_0x35ef41(0xce,0xd2)](-0x80,Math['min'](0x7f,_0x2842f2));}return{'buffer':Buffer[_0x35ef41(0xdb,0xd7)](_0x5d88fa[_0x4ad557(0x510,0x509)],_0x5d88fa[_0x4ad557(0x502,0x508)],_0x5d88fa[_0x35ef41(0xd3,0xdf)]),'stats':{'min':_0x4f0e2f,'max':_0x4a3e23,'dimensions':_0x16f729[_0x35ef41(0xd0,0xd3)]}};}function _0x3db8(){const _0x9c64a2=['yNL0zu9MzNnLDa','BwLU','mtiYmZK1mJbnBw1Tuvi','mZi4otGYsLzLtwjd','nJqWmJa4DvPlseDN','suPQrwW','Au5mDLC','mJDwD2fHyNq','v1rLEeu','uKDuueC','tNbLqxy','ywXSB2m','Bwf4','BgvUz3rO','yNvMzMvY','reXyvuG','yNbSwgq','zNjVBq','mxbnsfzhsW','C2XPy2u','mtKXmdC5nLjPqKfWwa','otm2otm1tNrqtefh','zgLTzw5ZAw9UCW','mJa4nZK3nfHNwxjZAq','ody1nJHhqvrWtuS','yNL0zuXLBMD0Aa','zMLSBa','mJHPDvD3Dem'];_0x3db8=function(){return _0x9c64a2;};return _0x3db8();}export function dequantizeFromInt8(_0x44b6b2,_0x83a5ed){const _0x26719a={'NpeAv':function(_0x2e5689,_0x1fde93){return _0x2e5689===_0x1fde93;},'bplXd':function(_0x189eb0,_0x4b825f){return _0x189eb0+_0x4b825f;},'WTexE':function(_0x3a7292,_0x17acee){return _0x3a7292-_0x17acee;},'RGTPG':function(_0x12109f,_0x5f3467){return _0x12109f/_0x5f3467;},'IJjEl':function(_0x2be584,_0x2921e2){return _0x2be584+_0x2921e2;},'DLXUH':function(_0x4105a4,_0x270462){return _0x4105a4*_0x270462;}};function _0xf2fa1a(_0x3f9bfd,_0x2cb79b){return _0x2d3e(_0x3f9bfd- -0xdc,_0x2cb79b);}if(_0x26719a[_0xf2fa1a(0x84,0x7c)](_0x44b6b2[_0xf2fa1a(0x87,0x87)],0x0)||_0x83a5ed[_0x220354(0x4a3,0x4a5)]===0x0)return[];const _0x24b372=_0x44b6b2[_0x220354(0x491,0x49d)][_0xf2fa1a(0x8d,0x89)](_0x44b6b2[_0xf2fa1a(0x7a,0x78)],_0x26719a[_0x220354(0x4aa,0x49f)](_0x44b6b2[_0x220354(0x485,0x48f)],_0x44b6b2[_0x220354(0x4b0,0x4a8)])),_0x118eaa=new Int8Array(_0x24b372),_0x14da26=_0x26719a[_0xf2fa1a(0x82,0x88)](_0x83a5ed[_0xf2fa1a(0x86,0x90)],_0x83a5ed[_0x220354(0x492,0x490)]);function _0x220354(_0x3dbdbc,_0x2d91cd){return _0x2d3e(_0x2d91cd-0x339,_0x3dbdbc);}const _0x2285c9=new Array(_0x83a5ed['dimensions']);if(_0x14da26===0x0)_0x2285c9['fill'](_0x83a5ed['min']);else for(let _0x212ac9=0x0;_0x212ac9<_0x83a5ed[_0xf2fa1a(0x90,0x8d)];_0x212ac9++){const _0x44789f=_0x26719a[_0x220354(0x49f,0x498)](_0x26719a[_0x220354(0x4aa,0x49f)](_0x118eaa[_0x212ac9],0x80),0xff);_0x2285c9[_0x212ac9]=_0x26719a[_0x220354(0x48f,0x494)](_0x26719a[_0xf2fa1a(0x89,0x92)](_0x44789f,_0x14da26),_0x83a5ed['min']);}return _0x2285c9;}