@molroo-io/sdk 0.5.2

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 (293) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +251 -0
  3. package/dist/cjs/api-client.d.ts +23 -0
  4. package/dist/cjs/api-client.d.ts.map +1 -0
  5. package/dist/cjs/api-client.js +55 -0
  6. package/dist/cjs/defaults/index.d.ts +8 -0
  7. package/dist/cjs/defaults/index.d.ts.map +1 -0
  8. package/dist/cjs/defaults/index.js +30 -0
  9. package/dist/cjs/defaults/persona.json +17 -0
  10. package/dist/cjs/embedding/cloudflare.d.ts +15 -0
  11. package/dist/cjs/embedding/cloudflare.d.ts.map +1 -0
  12. package/dist/cjs/embedding/cloudflare.js +16 -0
  13. package/dist/cjs/embedding/cohere.d.ts +8 -0
  14. package/dist/cjs/embedding/cohere.d.ts.map +1 -0
  15. package/dist/cjs/embedding/cohere.js +31 -0
  16. package/dist/cjs/embedding/index.d.ts +9 -0
  17. package/dist/cjs/embedding/index.d.ts.map +1 -0
  18. package/dist/cjs/embedding/index.js +11 -0
  19. package/dist/cjs/embedding/local.d.ts +6 -0
  20. package/dist/cjs/embedding/local.d.ts.map +1 -0
  21. package/dist/cjs/embedding/local.js +28 -0
  22. package/dist/cjs/embedding/openai.d.ts +9 -0
  23. package/dist/cjs/embedding/openai.d.ts.map +1 -0
  24. package/dist/cjs/embedding/openai.js +26 -0
  25. package/dist/cjs/errors.d.ts +17 -0
  26. package/dist/cjs/errors.d.ts.map +1 -0
  27. package/dist/cjs/errors.js +21 -0
  28. package/dist/cjs/events/console.d.ts +25 -0
  29. package/dist/cjs/events/console.d.ts.map +1 -0
  30. package/dist/cjs/events/console.js +41 -0
  31. package/dist/cjs/events/types.d.ts +28 -0
  32. package/dist/cjs/events/types.d.ts.map +1 -0
  33. package/dist/cjs/events/types.js +13 -0
  34. package/dist/cjs/events/webhook.d.ts +30 -0
  35. package/dist/cjs/events/webhook.d.ts.map +1 -0
  36. package/dist/cjs/events/webhook.js +79 -0
  37. package/dist/cjs/generate/persona.d.ts +16 -0
  38. package/dist/cjs/generate/persona.d.ts.map +1 -0
  39. package/dist/cjs/generate/persona.js +42 -0
  40. package/dist/cjs/generate/prompt.d.ts +7 -0
  41. package/dist/cjs/generate/prompt.d.ts.map +1 -0
  42. package/dist/cjs/generate/prompt.js +41 -0
  43. package/dist/cjs/generate/schema.d.ts +32 -0
  44. package/dist/cjs/generate/schema.d.ts.map +1 -0
  45. package/dist/cjs/generate/schema.js +54 -0
  46. package/dist/cjs/generated/index.d.ts +2 -0
  47. package/dist/cjs/generated/index.d.ts.map +1 -0
  48. package/dist/cjs/generated/index.js +2 -0
  49. package/dist/cjs/index.d.ts +66 -0
  50. package/dist/cjs/index.d.ts.map +1 -0
  51. package/dist/cjs/index.js +69 -0
  52. package/dist/cjs/llm/adapter.d.ts +61 -0
  53. package/dist/cjs/llm/adapter.d.ts.map +1 -0
  54. package/dist/cjs/llm/adapter.js +2 -0
  55. package/dist/cjs/llm/resolve.d.ts +28 -0
  56. package/dist/cjs/llm/resolve.d.ts.map +1 -0
  57. package/dist/cjs/llm/resolve.js +20 -0
  58. package/dist/cjs/llm/schema.d.ts +60 -0
  59. package/dist/cjs/llm/schema.d.ts.map +1 -0
  60. package/dist/cjs/llm/schema.js +72 -0
  61. package/dist/cjs/llm/types.d.ts +24 -0
  62. package/dist/cjs/llm/types.d.ts.map +1 -0
  63. package/dist/cjs/llm/types.js +2 -0
  64. package/dist/cjs/llm/vercel-ai/adapter.d.ts +29 -0
  65. package/dist/cjs/llm/vercel-ai/adapter.d.ts.map +1 -0
  66. package/dist/cjs/llm/vercel-ai/adapter.js +234 -0
  67. package/dist/cjs/llm/vercel-ai/config.d.ts +9 -0
  68. package/dist/cjs/llm/vercel-ai/config.d.ts.map +1 -0
  69. package/dist/cjs/llm/vercel-ai/config.js +2 -0
  70. package/dist/cjs/llm/vercel-ai/index.d.ts +9 -0
  71. package/dist/cjs/llm/vercel-ai/index.d.ts.map +1 -0
  72. package/dist/cjs/llm/vercel-ai/index.js +13 -0
  73. package/dist/cjs/memory/cloudflare/index.d.ts +3 -0
  74. package/dist/cjs/memory/cloudflare/index.d.ts.map +1 -0
  75. package/dist/cjs/memory/cloudflare/index.js +5 -0
  76. package/dist/cjs/memory/cloudflare/vectorize.d.ts +62 -0
  77. package/dist/cjs/memory/cloudflare/vectorize.d.ts.map +1 -0
  78. package/dist/cjs/memory/cloudflare/vectorize.js +55 -0
  79. package/dist/cjs/memory/in-memory-semantic.d.ts +16 -0
  80. package/dist/cjs/memory/in-memory-semantic.d.ts.map +1 -0
  81. package/dist/cjs/memory/in-memory-semantic.js +57 -0
  82. package/dist/cjs/memory/in-memory.d.ts +46 -0
  83. package/dist/cjs/memory/in-memory.d.ts.map +1 -0
  84. package/dist/cjs/memory/in-memory.js +115 -0
  85. package/dist/cjs/memory/pinecone/index.d.ts +7 -0
  86. package/dist/cjs/memory/pinecone/index.d.ts.map +1 -0
  87. package/dist/cjs/memory/pinecone/index.js +8 -0
  88. package/dist/cjs/memory/pinecone/memory-adapter.d.ts +62 -0
  89. package/dist/cjs/memory/pinecone/memory-adapter.d.ts.map +1 -0
  90. package/dist/cjs/memory/pinecone/memory-adapter.js +220 -0
  91. package/dist/cjs/memory/pinecone/semantic.d.ts +44 -0
  92. package/dist/cjs/memory/pinecone/semantic.d.ts.map +1 -0
  93. package/dist/cjs/memory/pinecone/semantic.js +90 -0
  94. package/dist/cjs/memory/recall.d.ts +58 -0
  95. package/dist/cjs/memory/recall.d.ts.map +1 -0
  96. package/dist/cjs/memory/recall.js +220 -0
  97. package/dist/cjs/memory/semantic.d.ts +24 -0
  98. package/dist/cjs/memory/semantic.d.ts.map +1 -0
  99. package/dist/cjs/memory/semantic.js +2 -0
  100. package/dist/cjs/memory/sqlite/index.d.ts +3 -0
  101. package/dist/cjs/memory/sqlite/index.d.ts.map +1 -0
  102. package/dist/cjs/memory/sqlite/index.js +5 -0
  103. package/dist/cjs/memory/sqlite/memory-adapter.d.ts +58 -0
  104. package/dist/cjs/memory/sqlite/memory-adapter.d.ts.map +1 -0
  105. package/dist/cjs/memory/sqlite/memory-adapter.js +336 -0
  106. package/dist/cjs/memory/sqlite/schema.d.ts +4 -0
  107. package/dist/cjs/memory/sqlite/schema.d.ts.map +1 -0
  108. package/dist/cjs/memory/sqlite/schema.js +91 -0
  109. package/dist/cjs/memory/supabase/index.d.ts +7 -0
  110. package/dist/cjs/memory/supabase/index.d.ts.map +1 -0
  111. package/dist/cjs/memory/supabase/index.js +8 -0
  112. package/dist/cjs/memory/supabase/memory-adapter.d.ts +67 -0
  113. package/dist/cjs/memory/supabase/memory-adapter.d.ts.map +1 -0
  114. package/dist/cjs/memory/supabase/memory-adapter.js +335 -0
  115. package/dist/cjs/memory/supabase/semantic.d.ts +44 -0
  116. package/dist/cjs/memory/supabase/semantic.d.ts.map +1 -0
  117. package/dist/cjs/memory/supabase/semantic.js +72 -0
  118. package/dist/cjs/memory/types.d.ts +231 -0
  119. package/dist/cjs/memory/types.d.ts.map +1 -0
  120. package/dist/cjs/memory/types.js +12 -0
  121. package/dist/cjs/persona.d.ts +326 -0
  122. package/dist/cjs/persona.d.ts.map +1 -0
  123. package/dist/cjs/persona.js +824 -0
  124. package/dist/cjs/types.d.ts +263 -0
  125. package/dist/cjs/types.d.ts.map +1 -0
  126. package/dist/cjs/types.js +15 -0
  127. package/dist/cjs/world/client.d.ts +36 -0
  128. package/dist/cjs/world/client.d.ts.map +1 -0
  129. package/dist/cjs/world/client.js +59 -0
  130. package/dist/cjs/world/errors.d.ts +9 -0
  131. package/dist/cjs/world/errors.d.ts.map +1 -0
  132. package/dist/cjs/world/errors.js +15 -0
  133. package/dist/cjs/world/index.d.ts +10 -0
  134. package/dist/cjs/world/index.d.ts.map +1 -0
  135. package/dist/cjs/world/index.js +16 -0
  136. package/dist/cjs/world/types.d.ts +101 -0
  137. package/dist/cjs/world/types.d.ts.map +1 -0
  138. package/dist/cjs/world/types.js +8 -0
  139. package/dist/cjs/world/village.d.ts +75 -0
  140. package/dist/cjs/world/village.d.ts.map +1 -0
  141. package/dist/cjs/world/village.js +278 -0
  142. package/dist/cjs/world/world-persona.d.ts +182 -0
  143. package/dist/cjs/world/world-persona.d.ts.map +1 -0
  144. package/dist/cjs/world/world-persona.js +192 -0
  145. package/dist/cjs/world/world.d.ts +41 -0
  146. package/dist/cjs/world/world.d.ts.map +1 -0
  147. package/dist/cjs/world/world.js +91 -0
  148. package/dist/esm/api-client.d.ts +23 -0
  149. package/dist/esm/api-client.d.ts.map +1 -0
  150. package/dist/esm/api-client.js +48 -0
  151. package/dist/esm/defaults/index.d.ts +8 -0
  152. package/dist/esm/defaults/index.d.ts.map +1 -0
  153. package/dist/esm/defaults/index.js +23 -0
  154. package/dist/esm/defaults/persona.json +17 -0
  155. package/dist/esm/embedding/cloudflare.d.ts +15 -0
  156. package/dist/esm/embedding/cloudflare.d.ts.map +1 -0
  157. package/dist/esm/embedding/cloudflare.js +13 -0
  158. package/dist/esm/embedding/cohere.d.ts +8 -0
  159. package/dist/esm/embedding/cohere.d.ts.map +1 -0
  160. package/dist/esm/embedding/cohere.js +28 -0
  161. package/dist/esm/embedding/index.d.ts +9 -0
  162. package/dist/esm/embedding/index.d.ts.map +1 -0
  163. package/dist/esm/embedding/index.js +4 -0
  164. package/dist/esm/embedding/local.d.ts +6 -0
  165. package/dist/esm/embedding/local.d.ts.map +1 -0
  166. package/dist/esm/embedding/local.js +25 -0
  167. package/dist/esm/embedding/openai.d.ts +9 -0
  168. package/dist/esm/embedding/openai.d.ts.map +1 -0
  169. package/dist/esm/embedding/openai.js +23 -0
  170. package/dist/esm/errors.d.ts +17 -0
  171. package/dist/esm/errors.d.ts.map +1 -0
  172. package/dist/esm/errors.js +17 -0
  173. package/dist/esm/events/console.d.ts +25 -0
  174. package/dist/esm/events/console.d.ts.map +1 -0
  175. package/dist/esm/events/console.js +37 -0
  176. package/dist/esm/events/types.d.ts +28 -0
  177. package/dist/esm/events/types.d.ts.map +1 -0
  178. package/dist/esm/events/types.js +12 -0
  179. package/dist/esm/events/webhook.d.ts +30 -0
  180. package/dist/esm/events/webhook.d.ts.map +1 -0
  181. package/dist/esm/events/webhook.js +75 -0
  182. package/dist/esm/generate/persona.d.ts +16 -0
  183. package/dist/esm/generate/persona.d.ts.map +1 -0
  184. package/dist/esm/generate/persona.js +39 -0
  185. package/dist/esm/generate/prompt.d.ts +7 -0
  186. package/dist/esm/generate/prompt.d.ts.map +1 -0
  187. package/dist/esm/generate/prompt.js +38 -0
  188. package/dist/esm/generate/schema.d.ts +32 -0
  189. package/dist/esm/generate/schema.d.ts.map +1 -0
  190. package/dist/esm/generate/schema.js +51 -0
  191. package/dist/esm/generated/index.d.ts +2 -0
  192. package/dist/esm/generated/index.d.ts.map +1 -0
  193. package/dist/esm/generated/index.js +1 -0
  194. package/dist/esm/index.d.ts +66 -0
  195. package/dist/esm/index.d.ts.map +1 -0
  196. package/dist/esm/index.js +49 -0
  197. package/dist/esm/llm/adapter.d.ts +61 -0
  198. package/dist/esm/llm/adapter.d.ts.map +1 -0
  199. package/dist/esm/llm/adapter.js +1 -0
  200. package/dist/esm/llm/resolve.d.ts +28 -0
  201. package/dist/esm/llm/resolve.d.ts.map +1 -0
  202. package/dist/esm/llm/resolve.js +17 -0
  203. package/dist/esm/llm/schema.d.ts +60 -0
  204. package/dist/esm/llm/schema.d.ts.map +1 -0
  205. package/dist/esm/llm/schema.js +69 -0
  206. package/dist/esm/llm/types.d.ts +24 -0
  207. package/dist/esm/llm/types.d.ts.map +1 -0
  208. package/dist/esm/llm/types.js +1 -0
  209. package/dist/esm/llm/vercel-ai/adapter.d.ts +29 -0
  210. package/dist/esm/llm/vercel-ai/adapter.d.ts.map +1 -0
  211. package/dist/esm/llm/vercel-ai/adapter.js +196 -0
  212. package/dist/esm/llm/vercel-ai/config.d.ts +9 -0
  213. package/dist/esm/llm/vercel-ai/config.d.ts.map +1 -0
  214. package/dist/esm/llm/vercel-ai/config.js +1 -0
  215. package/dist/esm/llm/vercel-ai/index.d.ts +9 -0
  216. package/dist/esm/llm/vercel-ai/index.d.ts.map +1 -0
  217. package/dist/esm/llm/vercel-ai/index.js +8 -0
  218. package/dist/esm/memory/cloudflare/index.d.ts +3 -0
  219. package/dist/esm/memory/cloudflare/index.d.ts.map +1 -0
  220. package/dist/esm/memory/cloudflare/index.js +1 -0
  221. package/dist/esm/memory/cloudflare/vectorize.d.ts +62 -0
  222. package/dist/esm/memory/cloudflare/vectorize.d.ts.map +1 -0
  223. package/dist/esm/memory/cloudflare/vectorize.js +51 -0
  224. package/dist/esm/memory/in-memory-semantic.d.ts +16 -0
  225. package/dist/esm/memory/in-memory-semantic.d.ts.map +1 -0
  226. package/dist/esm/memory/in-memory-semantic.js +53 -0
  227. package/dist/esm/memory/in-memory.d.ts +46 -0
  228. package/dist/esm/memory/in-memory.d.ts.map +1 -0
  229. package/dist/esm/memory/in-memory.js +111 -0
  230. package/dist/esm/memory/pinecone/index.d.ts +7 -0
  231. package/dist/esm/memory/pinecone/index.d.ts.map +1 -0
  232. package/dist/esm/memory/pinecone/index.js +3 -0
  233. package/dist/esm/memory/pinecone/memory-adapter.d.ts +62 -0
  234. package/dist/esm/memory/pinecone/memory-adapter.d.ts.map +1 -0
  235. package/dist/esm/memory/pinecone/memory-adapter.js +216 -0
  236. package/dist/esm/memory/pinecone/semantic.d.ts +44 -0
  237. package/dist/esm/memory/pinecone/semantic.d.ts.map +1 -0
  238. package/dist/esm/memory/pinecone/semantic.js +86 -0
  239. package/dist/esm/memory/recall.d.ts +58 -0
  240. package/dist/esm/memory/recall.d.ts.map +1 -0
  241. package/dist/esm/memory/recall.js +215 -0
  242. package/dist/esm/memory/semantic.d.ts +24 -0
  243. package/dist/esm/memory/semantic.d.ts.map +1 -0
  244. package/dist/esm/memory/semantic.js +1 -0
  245. package/dist/esm/memory/sqlite/index.d.ts +3 -0
  246. package/dist/esm/memory/sqlite/index.d.ts.map +1 -0
  247. package/dist/esm/memory/sqlite/index.js +1 -0
  248. package/dist/esm/memory/sqlite/memory-adapter.d.ts +58 -0
  249. package/dist/esm/memory/sqlite/memory-adapter.d.ts.map +1 -0
  250. package/dist/esm/memory/sqlite/memory-adapter.js +296 -0
  251. package/dist/esm/memory/sqlite/schema.d.ts +4 -0
  252. package/dist/esm/memory/sqlite/schema.d.ts.map +1 -0
  253. package/dist/esm/memory/sqlite/schema.js +86 -0
  254. package/dist/esm/memory/supabase/index.d.ts +7 -0
  255. package/dist/esm/memory/supabase/index.d.ts.map +1 -0
  256. package/dist/esm/memory/supabase/index.js +3 -0
  257. package/dist/esm/memory/supabase/memory-adapter.d.ts +67 -0
  258. package/dist/esm/memory/supabase/memory-adapter.d.ts.map +1 -0
  259. package/dist/esm/memory/supabase/memory-adapter.js +331 -0
  260. package/dist/esm/memory/supabase/semantic.d.ts +44 -0
  261. package/dist/esm/memory/supabase/semantic.d.ts.map +1 -0
  262. package/dist/esm/memory/supabase/semantic.js +68 -0
  263. package/dist/esm/memory/types.d.ts +231 -0
  264. package/dist/esm/memory/types.d.ts.map +1 -0
  265. package/dist/esm/memory/types.js +9 -0
  266. package/dist/esm/persona.d.ts +326 -0
  267. package/dist/esm/persona.d.ts.map +1 -0
  268. package/dist/esm/persona.js +787 -0
  269. package/dist/esm/types.d.ts +263 -0
  270. package/dist/esm/types.d.ts.map +1 -0
  271. package/dist/esm/types.js +11 -0
  272. package/dist/esm/world/client.d.ts +36 -0
  273. package/dist/esm/world/client.d.ts.map +1 -0
  274. package/dist/esm/world/client.js +52 -0
  275. package/dist/esm/world/errors.d.ts +9 -0
  276. package/dist/esm/world/errors.d.ts.map +1 -0
  277. package/dist/esm/world/errors.js +11 -0
  278. package/dist/esm/world/index.d.ts +10 -0
  279. package/dist/esm/world/index.d.ts.map +1 -0
  280. package/dist/esm/world/index.js +8 -0
  281. package/dist/esm/world/types.d.ts +101 -0
  282. package/dist/esm/world/types.d.ts.map +1 -0
  283. package/dist/esm/world/types.js +7 -0
  284. package/dist/esm/world/village.d.ts +75 -0
  285. package/dist/esm/world/village.d.ts.map +1 -0
  286. package/dist/esm/world/village.js +274 -0
  287. package/dist/esm/world/world-persona.d.ts +182 -0
  288. package/dist/esm/world/world-persona.d.ts.map +1 -0
  289. package/dist/esm/world/world-persona.js +188 -0
  290. package/dist/esm/world/world.d.ts +41 -0
  291. package/dist/esm/world/world.d.ts.map +1 -0
  292. package/dist/esm/world/world.js +87 -0
  293. package/package.json +207 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025-present molroo-io
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,251 @@
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/molroo-io/sdk/main/assets/logo-dark.png">
4
+ <source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/molroo-io/sdk/main/assets/logo-light.png">
5
+ <img alt="molroo" src="https://raw.githubusercontent.com/molroo-io/sdk/main/assets/logo-light.png" width="180" />
6
+ </picture>
7
+ </p>
8
+
9
+ # @molroo-io/sdk
10
+
11
+ [![version](https://img.shields.io/badge/version-0.4.0-e94560)](package.json)
12
+ [![license](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
13
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6)](tsconfig.json)
14
+ [![tests](https://img.shields.io/badge/tests-148-brightgreen)](src/__tests__)
15
+
16
+ Thin client SDK for the [molroo](https://molroo.io) emotion engine API. Handles prompt assembly, LLM orchestration, and memory recall — so your app just calls `chat()`.
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ npm install @molroo-io/sdk
22
+ ```
23
+
24
+ ## Quick Start
25
+
26
+ ```ts
27
+ import { MolrooPersona } from '@molroo-io/sdk';
28
+ import { createVercelAIAdapter } from '@molroo-io/sdk';
29
+
30
+ const llm = createVercelAIAdapter({
31
+ provider: 'openai',
32
+ apiKey: process.env.OPENAI_API_KEY!,
33
+ });
34
+
35
+ const persona = await MolrooPersona.create({
36
+ baseUrl: 'https://api.molroo.io',
37
+ apiKey: 'mol_sk_your_api_key',
38
+ llm,
39
+ }, {
40
+ identity: { name: 'Sera', coreValues: ['honesty', 'warmth'] },
41
+ personality: { O: 0.7, C: 0.6, E: 0.8, A: 0.5, N: 0.3, H: 0.6 },
42
+ });
43
+
44
+ const result = await persona.chat('Hello!');
45
+ console.log(result.text); // "Hey! It's great to meet you..."
46
+ console.log(result.response.emotion); // { V: 0.4, A: 0.5, D: 0.2 }
47
+ ```
48
+
49
+ ## How It Works
50
+
51
+ ```
52
+ Your App SDK API (PersonaDO)
53
+ | | |
54
+ | persona.chat(msg) | |
55
+ |------------------------>| |
56
+ | | POST /personas/:id/prompt-context
57
+ | |------------------------------>|
58
+ | | { systemPrompt, tools } |
59
+ | |<------------------------------|
60
+ | | |
61
+ | | LLM call (your API key) |
62
+ | | system: systemPrompt |
63
+ | | -> { response, appraisal } |
64
+ | | |
65
+ | | POST /personas/:id/perceive |
66
+ | | { appraisal } |
67
+ | |------------------------------>|
68
+ | | { emotion, state } |
69
+ | |<------------------------------|
70
+ | | |
71
+ | { text, response } | |
72
+ |<------------------------| |
73
+ ```
74
+
75
+ 1. **Get prompt context** — API builds system prompt from live emotional state (identity + personality + mood + somatic + narrative + memory)
76
+ 2. **LLM call** — SDK calls your LLM with assembled prompt. Returns response text + appraisal vector.
77
+ 3. **Perceive** — SDK sends appraisal to API. Engine processes emotion pipeline -> new VAD state.
78
+ 4. **Post-chat** — Episode saved, reflection triggered if needed, events emitted.
79
+
80
+ The API does all emotion computation. The SDK just connects it to your LLM.
81
+
82
+ ## Two LLM Modes
83
+
84
+ ### Combined Mode (default)
85
+
86
+ Single LLM call returns both response text and appraisal in one `generateObject()` call:
87
+
88
+ ```ts
89
+ const persona = await MolrooPersona.create({
90
+ baseUrl, apiKey,
91
+ llm, // one LLM handles everything
92
+ }, personaConfig);
93
+ ```
94
+
95
+ ### Split Mode
96
+
97
+ Separate LLM for appraisal (cheap/fast model) and response (quality model). Appraisal runs first -> engine updates emotion -> response generated with updated emotional state:
98
+
99
+ ```ts
100
+ const persona = await MolrooPersona.create({
101
+ baseUrl, apiKey,
102
+ llm: responseModel, // quality model for response text
103
+ engineLlm: appraisalModel, // cheap model for appraisal vector
104
+ }, personaConfig);
105
+ ```
106
+
107
+ ## MolrooPersona API
108
+
109
+ ### Static Methods
110
+
111
+ | Method | Description |
112
+ |--------|-------------|
113
+ | `MolrooPersona.create(config, personaConfig)` | Create a new persona |
114
+ | `MolrooPersona.connect(config, personaId)` | Connect to an existing persona |
115
+ | `MolrooPersona.listPersonas(config)` | List all personas |
116
+
117
+ ### Instance Methods
118
+
119
+ | Method | Description |
120
+ |--------|-------------|
121
+ | `chat(message, options?)` | Full LLM orchestration: prompt -> LLM -> perceive -> result |
122
+ | `perceive(message, options?)` | Send event to emotion engine (no LLM call) |
123
+ | `tick(seconds)` | Advance time (mood decay, body recovery) |
124
+ | `getState()` | Get current emotional state |
125
+ | `setEmotion(vad)` | Direct VAD override |
126
+ | `getPromptContext(suffix?, source?)` | Get server-assembled system prompt |
127
+ | `searchMemory(query, options?)` | Search episodic memory |
128
+ | `getSnapshot()` | Get full persona snapshot |
129
+ | `putSnapshot(snapshot)` | Load persona snapshot |
130
+ | `patch(config)` | Update persona config |
131
+ | `destroy()` | Soft-delete the persona |
132
+ | `restore()` | Restore a soft-deleted persona |
133
+
134
+ ### Config
135
+
136
+ ```ts
137
+ interface MolrooPersonaConfig {
138
+ baseUrl: string; // API URL (e.g. 'https://api.molroo.io')
139
+ apiKey: string; // API key
140
+ llm?: LLMAdapter; // LLM for chat (optional - emotion-only without)
141
+ engineLlm?: LLMAdapter; // Separate LLM for appraisal (split mode)
142
+ memory?: MemoryAdapter | MemoryConfig; // Single adapter or split config (optional)
143
+ recall?: RecallLimits; // Recall limits for single adapter mode
144
+ events?: EventAdapter; // Event emission (optional)
145
+ }
146
+ ```
147
+
148
+ ## Adapters
149
+
150
+ ### LLM Adapter
151
+
152
+ Required for `chat()`. Built into `@molroo-io/sdk`:
153
+
154
+ ```ts
155
+ import { createVercelAIAdapter } from '@molroo-io/sdk';
156
+
157
+ const llm = createVercelAIAdapter({
158
+ provider: 'openai', // or 'anthropic', 'google'
159
+ apiKey: process.env.OPENAI_API_KEY!,
160
+ model: 'gpt-4o-mini', // optional
161
+ });
162
+ ```
163
+
164
+ ### Memory
165
+
166
+ Client-side memory for episodic recall and semantic search. Optional — when not provided, memory recall is skipped.
167
+
168
+ **Single adapter (recommended)** — pass one `MemoryAdapter` that handles everything:
169
+
170
+ ```ts
171
+ import { SqliteMemoryAdapter } from '@molroo-io/sdk/memory/sqlite';
172
+
173
+ const persona = await MolrooPersona.create({
174
+ baseUrl, apiKey, llm,
175
+ memory: new SqliteMemoryAdapter({ dbPath: './memory.db' }),
176
+ recall: { episodicLimit: 5, semanticLimit: 3 }, // optional limits
177
+ }, personaConfig);
178
+ ```
179
+
180
+ Built-in `InMemoryEpisodeAdapter` also works as a single adapter (for demos/testing):
181
+
182
+ ```ts
183
+ import { InMemoryEpisodeAdapter } from '@molroo-io/sdk';
184
+
185
+ const persona = await MolrooPersona.create({
186
+ baseUrl, apiKey, llm,
187
+ memory: new InMemoryEpisodeAdapter(),
188
+ }, personaConfig);
189
+ ```
190
+
191
+ **Split adapters (advanced)** — assemble episode store + vector search separately:
192
+
193
+ ```ts
194
+ const persona = await MolrooPersona.create({
195
+ baseUrl, apiKey, llm,
196
+ memory: {
197
+ episodes: episodeStore,
198
+ semantic: vectorStore,
199
+ embedding: embeddingProvider,
200
+ recall: { episodicLimit: 5, semanticLimit: 3 },
201
+ },
202
+ }, personaConfig);
203
+ ```
204
+
205
+ ### Events
206
+
207
+ Optional event emission for logging, webhooks, or custom integrations:
208
+
209
+ ```ts
210
+ import { ConsoleEventAdapter, WebhookEventAdapter } from '@molroo-io/sdk';
211
+
212
+ // Console logging
213
+ const events = new ConsoleEventAdapter();
214
+
215
+ // Webhook
216
+ const events = new WebhookEventAdapter({ url: 'https://...', secret: '...' });
217
+ ```
218
+
219
+ ## Persona Generation
220
+
221
+ Generate a complete persona config from a description using LLM:
222
+
223
+ ```ts
224
+ import { generatePersona } from '@molroo-io/sdk';
225
+
226
+ const result = await generatePersona(llm, {
227
+ name: 'Sera',
228
+ description: 'A cheerful companion who loves music',
229
+ });
230
+ // result.config -> full PersonaConfigData
231
+ ```
232
+
233
+ ## Build & Test
234
+
235
+ ```bash
236
+ npm run build # tsc -> dist/cjs + dist/esm
237
+ npm run test # Vitest (148 tests)
238
+ npm run lint # ESLint
239
+ npm run gen:types # openapi-typescript -> src/generated/api.d.ts
240
+ npm run docs # TypeDoc -> SDK API reference
241
+ ```
242
+
243
+ ## Links
244
+
245
+ - [Documentation](https://docs.molroo.io)
246
+ - [Dashboard](https://molroo.io/dashboard)
247
+ - [API Reference](https://api.molroo.io/docs)
248
+
249
+ ## License
250
+
251
+ MIT
@@ -0,0 +1,23 @@
1
+ import type { paths } from './generated/api';
2
+ /**
3
+ * Create a typed openapi-fetch client for the molroo API.
4
+ *
5
+ * @param baseUrl - API base URL (e.g., 'https://api.molroo.io').
6
+ * @param apiKey - API key for authentication.
7
+ * @returns A fully-typed openapi-fetch client instance.
8
+ */
9
+ export declare function createApiClient(baseUrl: string, apiKey: string): import("openapi-fetch").Client<paths, `${string}/${string}`>;
10
+ export type ApiClient = ReturnType<typeof createApiClient>;
11
+ /**
12
+ * Unwrap the `{ result: T }` envelope from API responses.
13
+ *
14
+ * Many API endpoints return `ResultWrapper` (typed as `{ result?: unknown }`)
15
+ * in the OpenAPI spec. This helper extracts the `result` field and casts it
16
+ * to the expected type.
17
+ *
18
+ * For endpoints with properly-typed response schemas, use `data.result` directly.
19
+ */
20
+ export declare function unwrap<T>(data: {
21
+ result?: unknown;
22
+ } | undefined): T;
23
+ //# sourceMappingURL=api-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../src/api-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAwB7C;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gEAU9D;AAED,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;AAE3D;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,CAAC,CAEnE"}
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.createApiClient = createApiClient;
7
+ exports.unwrap = unwrap;
8
+ const openapi_fetch_1 = __importDefault(require("openapi-fetch"));
9
+ const errors_1 = require("./errors");
10
+ /**
11
+ * Middleware: throw MolrooApiError on non-OK responses.
12
+ *
13
+ * Reads the error body `{ error: { code, message } }` and converts it
14
+ * into a typed MolrooApiError before openapi-fetch processes the response.
15
+ */
16
+ const errorMiddleware = {
17
+ async onResponse({ response }) {
18
+ if (!response.ok) {
19
+ const body = await response.clone().json().catch(() => ({}));
20
+ const err = body;
21
+ throw new errors_1.MolrooApiError(err.error?.message ?? `API error ${response.status}`, err.error?.code ?? 'UNKNOWN', response.status);
22
+ }
23
+ // Return undefined to let openapi-fetch handle the response unchanged
24
+ },
25
+ };
26
+ /**
27
+ * Create a typed openapi-fetch client for the molroo API.
28
+ *
29
+ * @param baseUrl - API base URL (e.g., 'https://api.molroo.io').
30
+ * @param apiKey - API key for authentication.
31
+ * @returns A fully-typed openapi-fetch client instance.
32
+ */
33
+ function createApiClient(baseUrl, apiKey) {
34
+ const client = (0, openapi_fetch_1.default)({
35
+ baseUrl: baseUrl.replace(/\/$/, ''),
36
+ headers: {
37
+ 'Content-Type': 'application/json',
38
+ 'X-API-Key': apiKey,
39
+ },
40
+ });
41
+ client.use(errorMiddleware);
42
+ return client;
43
+ }
44
+ /**
45
+ * Unwrap the `{ result: T }` envelope from API responses.
46
+ *
47
+ * Many API endpoints return `ResultWrapper` (typed as `{ result?: unknown }`)
48
+ * in the OpenAPI spec. This helper extracts the `result` field and casts it
49
+ * to the expected type.
50
+ *
51
+ * For endpoints with properly-typed response schemas, use `data.result` directly.
52
+ */
53
+ function unwrap(data) {
54
+ return (data?.result ?? {});
55
+ }
@@ -0,0 +1,8 @@
1
+ import type { PersonaConfigData } from '../types.js';
2
+ export declare const DEFAULT_PERSONA: PersonaConfigData;
3
+ /**
4
+ * Merge user-provided persona config with defaults.
5
+ * User values take precedence; defaults fill missing fields.
6
+ */
7
+ export declare function withDefaults(config?: Partial<PersonaConfigData>): PersonaConfigData;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/defaults/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,eAAO,MAAM,eAAe,EAAE,iBAAkC,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAenF"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DEFAULT_PERSONA = void 0;
7
+ exports.withDefaults = withDefaults;
8
+ const persona_json_1 = __importDefault(require("./persona.json"));
9
+ exports.DEFAULT_PERSONA = persona_json_1.default;
10
+ /**
11
+ * Merge user-provided persona config with defaults.
12
+ * User values take precedence; defaults fill missing fields.
13
+ */
14
+ function withDefaults(config) {
15
+ if (!config)
16
+ return { ...exports.DEFAULT_PERSONA };
17
+ return {
18
+ ...exports.DEFAULT_PERSONA,
19
+ ...config,
20
+ personality: {
21
+ ...exports.DEFAULT_PERSONA.personality,
22
+ ...config.personality,
23
+ },
24
+ identity: {
25
+ ...exports.DEFAULT_PERSONA.identity,
26
+ ...config.identity,
27
+ },
28
+ goals: config.goals ?? exports.DEFAULT_PERSONA.goals,
29
+ };
30
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "personality": {
3
+ "O": 0.5,
4
+ "C": 0.5,
5
+ "E": 0.5,
6
+ "A": 0.5,
7
+ "N": 0.5,
8
+ "H": 0.5
9
+ },
10
+ "identity": {
11
+ "name": "Persona",
12
+ "role": "A person with a neutral, balanced personality.",
13
+ "speakingStyle": "Natural, conversational tone.",
14
+ "coreValues": ["honesty", "kindness"]
15
+ },
16
+ "goals": []
17
+ }
@@ -0,0 +1,15 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface AiBinding {
3
+ run(model: string, input: {
4
+ text: string[];
5
+ }): Promise<{
6
+ data: number[][];
7
+ }>;
8
+ }
9
+ export interface CloudflareAIEmbeddingOptions {
10
+ ai: AiBinding;
11
+ model?: string;
12
+ dimension?: number;
13
+ }
14
+ export declare function cloudflareAIEmbedding(options: CloudflareAIEmbeddingOptions): EmbeddingAdapter;
15
+ //# sourceMappingURL=cloudflare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../../src/embedding/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,GAAG,CACD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;KAAE,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAKD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,gBAAgB,CAWlB"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloudflareAIEmbedding = cloudflareAIEmbedding;
4
+ const DEFAULT_MODEL = '@cf/baai/bge-base-en-v1.5';
5
+ const DEFAULT_DIMENSION = 768;
6
+ function cloudflareAIEmbedding(options) {
7
+ const model = options.model ?? DEFAULT_MODEL;
8
+ const dimension = options.dimension ?? DEFAULT_DIMENSION;
9
+ return {
10
+ dimension,
11
+ async embed(text) {
12
+ const result = await options.ai.run(model, { text: [text] });
13
+ return result.data[0];
14
+ },
15
+ };
16
+ }
@@ -0,0 +1,8 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface CohereEmbeddingOptions {
3
+ apiKey: string;
4
+ model?: string;
5
+ inputType?: 'search_document' | 'search_query';
6
+ }
7
+ export declare function cohereEmbedding(options: CohereEmbeddingOptions): EmbeddingAdapter;
8
+ //# sourceMappingURL=cohere.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cohere.d.ts","sourceRoot":"","sources":["../../../src/embedding/cohere.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC;CAChD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CA4BjF"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cohereEmbedding = cohereEmbedding;
4
+ function cohereEmbedding(options) {
5
+ const model = options.model ?? 'embed-english-v3.0';
6
+ const inputType = options.inputType ?? 'search_document';
7
+ const dimension = model.includes('v3') ? 1024 : 768;
8
+ return {
9
+ dimension,
10
+ embed: async (text) => {
11
+ const res = await fetch('https://api.cohere.com/v2/embed', {
12
+ method: 'POST',
13
+ headers: {
14
+ 'Authorization': `Bearer ${options.apiKey}`,
15
+ 'Content-Type': 'application/json',
16
+ },
17
+ body: JSON.stringify({
18
+ model,
19
+ texts: [text],
20
+ input_type: inputType,
21
+ embedding_types: ['float'],
22
+ }),
23
+ });
24
+ if (!res.ok) {
25
+ throw new Error(`Cohere embedding failed: ${res.status} ${res.statusText}`);
26
+ }
27
+ const json = await res.json();
28
+ return json.embeddings.float[0];
29
+ },
30
+ };
31
+ }
@@ -0,0 +1,9 @@
1
+ export { openaiEmbedding } from './openai';
2
+ export { cohereEmbedding } from './cohere';
3
+ export { createLocalEmbedder } from './local';
4
+ export { cloudflareAIEmbedding } from './cloudflare';
5
+ export type { OpenAIEmbeddingOptions } from './openai';
6
+ export type { CohereEmbeddingOptions } from './cohere';
7
+ export type { LocalEmbedderOptions } from './local';
8
+ export type { CloudflareAIEmbeddingOptions, AiBinding } from './cloudflare';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/embedding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AACpD,YAAY,EAAE,4BAA4B,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cloudflareAIEmbedding = exports.createLocalEmbedder = exports.cohereEmbedding = exports.openaiEmbedding = void 0;
4
+ var openai_1 = require("./openai");
5
+ Object.defineProperty(exports, "openaiEmbedding", { enumerable: true, get: function () { return openai_1.openaiEmbedding; } });
6
+ var cohere_1 = require("./cohere");
7
+ Object.defineProperty(exports, "cohereEmbedding", { enumerable: true, get: function () { return cohere_1.cohereEmbedding; } });
8
+ var local_1 = require("./local");
9
+ Object.defineProperty(exports, "createLocalEmbedder", { enumerable: true, get: function () { return local_1.createLocalEmbedder; } });
10
+ var cloudflare_1 = require("./cloudflare");
11
+ Object.defineProperty(exports, "cloudflareAIEmbedding", { enumerable: true, get: function () { return cloudflare_1.cloudflareAIEmbedding; } });
@@ -0,0 +1,6 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface LocalEmbedderOptions {
3
+ model?: string;
4
+ }
5
+ export declare function createLocalEmbedder(options?: LocalEmbedderOptions): Promise<EmbeddingAdapter>;
6
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/embedding/local.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,gBAAgB,CAAC,CA4B3B"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLocalEmbedder = createLocalEmbedder;
4
+ async function createLocalEmbedder(options) {
5
+ const modelId = options?.model ?? 'Xenova/all-MiniLM-L6-v2';
6
+ let pipeline;
7
+ try {
8
+ const transformers = await Function('return import("@huggingface/transformers")')();
9
+ pipeline = transformers.pipeline;
10
+ }
11
+ catch {
12
+ throw new Error('@huggingface/transformers is required for local embeddings. ' +
13
+ 'Install it: npm install @huggingface/transformers');
14
+ }
15
+ const extractor = await pipeline('feature-extraction', modelId);
16
+ const probe = await extractor('test', { pooling: 'mean', normalize: true });
17
+ const dimension = probe.data.length;
18
+ return {
19
+ dimension,
20
+ embed: async (text) => {
21
+ const output = await extractor(text, {
22
+ pooling: 'mean',
23
+ normalize: true,
24
+ });
25
+ return Array.from(output.data);
26
+ },
27
+ };
28
+ }
@@ -0,0 +1,9 @@
1
+ import type { EmbeddingAdapter } from '../memory/types';
2
+ export interface OpenAIEmbeddingOptions {
3
+ apiKey: string;
4
+ model?: string;
5
+ dimension?: number;
6
+ baseUrl?: string;
7
+ }
8
+ export declare function openaiEmbedding(options: OpenAIEmbeddingOptions): EmbeddingAdapter;
9
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/embedding/openai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CAuBjF"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openaiEmbedding = openaiEmbedding;
4
+ function openaiEmbedding(options) {
5
+ const model = options.model ?? 'text-embedding-3-small';
6
+ const dimension = options.dimension ?? 1536;
7
+ const baseUrl = options.baseUrl ?? 'https://api.openai.com';
8
+ return {
9
+ dimension,
10
+ embed: async (text) => {
11
+ const res = await fetch(`${baseUrl}/v1/embeddings`, {
12
+ method: 'POST',
13
+ headers: {
14
+ 'Authorization': `Bearer ${options.apiKey}`,
15
+ 'Content-Type': 'application/json',
16
+ },
17
+ body: JSON.stringify({ model, input: text, dimensions: dimension }),
18
+ });
19
+ if (!res.ok) {
20
+ throw new Error(`OpenAI embedding failed: ${res.status} ${res.statusText}`);
21
+ }
22
+ const json = await res.json();
23
+ return json.data[0].embedding;
24
+ },
25
+ };
26
+ }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Error thrown when the molroo API returns a non-OK response.
3
+ *
4
+ * Contains the API error code and HTTP status for programmatic handling.
5
+ */
6
+ export declare class MolrooApiError extends Error {
7
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
8
+ code: string;
9
+ /** HTTP status code. */
10
+ status: number;
11
+ constructor(message: string,
12
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
13
+ code: string,
14
+ /** HTTP status code. */
15
+ status: number);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,KAAK;IAGrC,8EAA8E;IACvE,IAAI,EAAE,MAAM;IACnB,wBAAwB;IACjB,MAAM,EAAE,MAAM;gBAJrB,OAAO,EAAE,MAAM;IACf,8EAA8E;IACvE,IAAI,EAAE,MAAM;IACnB,wBAAwB;IACjB,MAAM,EAAE,MAAM;CAKxB"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MolrooApiError = void 0;
4
+ /**
5
+ * Error thrown when the molroo API returns a non-OK response.
6
+ *
7
+ * Contains the API error code and HTTP status for programmatic handling.
8
+ */
9
+ class MolrooApiError extends Error {
10
+ constructor(message,
11
+ /** Machine-readable error code (e.g., 'ENTITY_NOT_FOUND', 'UNAUTHORIZED'). */
12
+ code,
13
+ /** HTTP status code. */
14
+ status) {
15
+ super(message);
16
+ this.code = code;
17
+ this.status = status;
18
+ this.name = 'MolrooApiError';
19
+ }
20
+ }
21
+ exports.MolrooApiError = MolrooApiError;