@sogni-ai/sogni-intelligence-client 3.0.0-alpha.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 (659) hide show
  1. package/.env.example +33 -0
  2. package/LICENSE +22 -0
  3. package/README.md +823 -0
  4. package/contracts/index.d.ts +1 -0
  5. package/contracts/index.js +2 -0
  6. package/dist/client/SogniClientWrapper.d.ts +86 -0
  7. package/dist/client/SogniClientWrapper.d.ts.map +1 -0
  8. package/dist/client/SogniClientWrapper.js +914 -0
  9. package/dist/client/SogniClientWrapper.js.map +1 -0
  10. package/dist/contracts/backboneDurableWorkflow.d.ts +82 -0
  11. package/dist/contracts/backboneDurableWorkflow.d.ts.map +1 -0
  12. package/dist/contracts/backboneDurableWorkflow.js +96 -0
  13. package/dist/contracts/backboneDurableWorkflow.js.map +1 -0
  14. package/dist/contracts/backboneToolCatalog.d.ts +7 -0
  15. package/dist/contracts/backboneToolCatalog.d.ts.map +1 -0
  16. package/dist/contracts/backboneToolCatalog.js +62 -0
  17. package/dist/contracts/backboneToolCatalog.js.map +1 -0
  18. package/dist/contracts/composeWorkflowTypes.d.ts +6 -0
  19. package/dist/contracts/composeWorkflowTypes.d.ts.map +1 -0
  20. package/dist/contracts/composeWorkflowTypes.js +3 -0
  21. package/dist/contracts/composeWorkflowTypes.js.map +1 -0
  22. package/dist/contracts/data/costEstimation.d.ts +5 -0
  23. package/dist/contracts/data/costEstimation.d.ts.map +1 -0
  24. package/dist/contracts/data/costEstimation.js +22 -0
  25. package/dist/contracts/data/costEstimation.js.map +1 -0
  26. package/dist/contracts/data/gatingPolicies.d.ts +6 -0
  27. package/dist/contracts/data/gatingPolicies.d.ts.map +1 -0
  28. package/dist/contracts/data/gatingPolicies.js +218 -0
  29. package/dist/contracts/data/gatingPolicies.js.map +1 -0
  30. package/dist/contracts/data/gatingPoliciesToolSurface.d.ts +7 -0
  31. package/dist/contracts/data/gatingPoliciesToolSurface.d.ts.map +1 -0
  32. package/dist/contracts/data/gatingPoliciesToolSurface.js +61 -0
  33. package/dist/contracts/data/gatingPoliciesToolSurface.js.map +1 -0
  34. package/dist/contracts/data/index.d.ts +14 -0
  35. package/dist/contracts/data/index.d.ts.map +1 -0
  36. package/dist/contracts/data/index.js +57 -0
  37. package/dist/contracts/data/index.js.map +1 -0
  38. package/dist/contracts/data/promptContracts.d.ts +5 -0
  39. package/dist/contracts/data/promptContracts.d.ts.map +1 -0
  40. package/dist/contracts/data/promptContracts.js +1173 -0
  41. package/dist/contracts/data/promptContracts.js.map +1 -0
  42. package/dist/contracts/data/repairRecipes.d.ts +5 -0
  43. package/dist/contracts/data/repairRecipes.d.ts.map +1 -0
  44. package/dist/contracts/data/repairRecipes.js +197 -0
  45. package/dist/contracts/data/repairRecipes.js.map +1 -0
  46. package/dist/contracts/data/toolCatalog.d.ts +31 -0
  47. package/dist/contracts/data/toolCatalog.d.ts.map +1 -0
  48. package/dist/contracts/data/toolCatalog.js +129 -0
  49. package/dist/contracts/data/toolCatalog.js.map +1 -0
  50. package/dist/contracts/data/toolCostMetadata.d.ts +16 -0
  51. package/dist/contracts/data/toolCostMetadata.d.ts.map +1 -0
  52. package/dist/contracts/data/toolCostMetadata.js +284 -0
  53. package/dist/contracts/data/toolCostMetadata.js.map +1 -0
  54. package/dist/contracts/data/toolPermissions.d.ts +27 -0
  55. package/dist/contracts/data/toolPermissions.d.ts.map +1 -0
  56. package/dist/contracts/data/toolPermissions.js +78 -0
  57. package/dist/contracts/data/toolPermissions.js.map +1 -0
  58. package/dist/contracts/evaluators.d.ts +94 -0
  59. package/dist/contracts/evaluators.d.ts.map +1 -0
  60. package/dist/contracts/evaluators.js +468 -0
  61. package/dist/contracts/evaluators.js.map +1 -0
  62. package/dist/contracts/hostedComposition.d.ts +85 -0
  63. package/dist/contracts/hostedComposition.d.ts.map +1 -0
  64. package/dist/contracts/hostedComposition.js +139 -0
  65. package/dist/contracts/hostedComposition.js.map +1 -0
  66. package/dist/contracts/hostedToolValidation.d.ts +47 -0
  67. package/dist/contracts/hostedToolValidation.d.ts.map +1 -0
  68. package/dist/contracts/hostedToolValidation.js +301 -0
  69. package/dist/contracts/hostedToolValidation.js.map +1 -0
  70. package/dist/contracts/idLoraPrompt.d.ts +13 -0
  71. package/dist/contracts/idLoraPrompt.d.ts.map +1 -0
  72. package/dist/contracts/idLoraPrompt.js +78 -0
  73. package/dist/contracts/idLoraPrompt.js.map +1 -0
  74. package/dist/contracts/imagePrompt.d.ts +16 -0
  75. package/dist/contracts/imagePrompt.d.ts.map +1 -0
  76. package/dist/contracts/imagePrompt.js +148 -0
  77. package/dist/contracts/imagePrompt.js.map +1 -0
  78. package/dist/contracts/index.d.ts +48 -0
  79. package/dist/contracts/index.d.ts.map +1 -0
  80. package/dist/contracts/index.js +156 -0
  81. package/dist/contracts/index.js.map +1 -0
  82. package/dist/contracts/index.mjs +102 -0
  83. package/dist/contracts/musicComposition.d.ts +17 -0
  84. package/dist/contracts/musicComposition.d.ts.map +1 -0
  85. package/dist/contracts/musicComposition.js +188 -0
  86. package/dist/contracts/musicComposition.js.map +1 -0
  87. package/dist/contracts/promptContract.d.ts +11 -0
  88. package/dist/contracts/promptContract.d.ts.map +1 -0
  89. package/dist/contracts/promptContract.js +37 -0
  90. package/dist/contracts/promptContract.js.map +1 -0
  91. package/dist/contracts/promptOverrideMarker.d.ts +2 -0
  92. package/dist/contracts/promptOverrideMarker.d.ts.map +1 -0
  93. package/dist/contracts/promptOverrideMarker.js +5 -0
  94. package/dist/contracts/promptOverrideMarker.js.map +1 -0
  95. package/dist/contracts/randomThemes.d.ts +5 -0
  96. package/dist/contracts/randomThemes.d.ts.map +1 -0
  97. package/dist/contracts/randomThemes.js +159 -0
  98. package/dist/contracts/randomThemes.js.map +1 -0
  99. package/dist/contracts/registry.d.ts +29 -0
  100. package/dist/contracts/registry.d.ts.map +1 -0
  101. package/dist/contracts/registry.js +104 -0
  102. package/dist/contracts/registry.js.map +1 -0
  103. package/dist/contracts/repairRecipe.d.ts +14 -0
  104. package/dist/contracts/repairRecipe.d.ts.map +1 -0
  105. package/dist/contracts/repairRecipe.js +38 -0
  106. package/dist/contracts/repairRecipe.js.map +1 -0
  107. package/dist/contracts/storyboard.d.ts +112 -0
  108. package/dist/contracts/storyboard.d.ts.map +1 -0
  109. package/dist/contracts/storyboard.js +7 -0
  110. package/dist/contracts/storyboard.js.map +1 -0
  111. package/dist/contracts/telemetry.d.ts +57 -0
  112. package/dist/contracts/telemetry.d.ts.map +1 -0
  113. package/dist/contracts/telemetry.js +37 -0
  114. package/dist/contracts/telemetry.js.map +1 -0
  115. package/dist/contracts/toolGatingPolicy.d.ts +19 -0
  116. package/dist/contracts/toolGatingPolicy.d.ts.map +1 -0
  117. package/dist/contracts/toolGatingPolicy.js +63 -0
  118. package/dist/contracts/toolGatingPolicy.js.map +1 -0
  119. package/dist/contracts/toolPromptMarkers.d.ts +9 -0
  120. package/dist/contracts/toolPromptMarkers.d.ts.map +1 -0
  121. package/dist/contracts/toolPromptMarkers.js +13 -0
  122. package/dist/contracts/toolPromptMarkers.js.map +1 -0
  123. package/dist/contracts/toolSurface.d.ts +46 -0
  124. package/dist/contracts/toolSurface.d.ts.map +1 -0
  125. package/dist/contracts/toolSurface.js +119 -0
  126. package/dist/contracts/toolSurface.js.map +1 -0
  127. package/dist/contracts/turnPolicy.d.ts +22 -0
  128. package/dist/contracts/turnPolicy.d.ts.map +1 -0
  129. package/dist/contracts/turnPolicy.js +16 -0
  130. package/dist/contracts/turnPolicy.js.map +1 -0
  131. package/dist/contracts/videoComposition.d.ts +35 -0
  132. package/dist/contracts/videoComposition.d.ts.map +1 -0
  133. package/dist/contracts/videoComposition.js +224 -0
  134. package/dist/contracts/videoComposition.js.map +1 -0
  135. package/dist/index.d.ts +8 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +46 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/media/aspectRatio.d.ts +15 -0
  140. package/dist/media/aspectRatio.d.ts.map +1 -0
  141. package/dist/media/aspectRatio.js +72 -0
  142. package/dist/media/aspectRatio.js.map +1 -0
  143. package/dist/media/audioReference.d.ts +57 -0
  144. package/dist/media/audioReference.d.ts.map +1 -0
  145. package/dist/media/audioReference.js +194 -0
  146. package/dist/media/audioReference.js.map +1 -0
  147. package/dist/media/cameraAngle.d.ts +170 -0
  148. package/dist/media/cameraAngle.d.ts.map +1 -0
  149. package/dist/media/cameraAngle.js +48 -0
  150. package/dist/media/cameraAngle.js.map +1 -0
  151. package/dist/media/characterSheet.d.ts +9 -0
  152. package/dist/media/characterSheet.d.ts.map +1 -0
  153. package/dist/media/characterSheet.js +54 -0
  154. package/dist/media/characterSheet.js.map +1 -0
  155. package/dist/media/danceMontage.d.ts +18 -0
  156. package/dist/media/danceMontage.d.ts.map +1 -0
  157. package/dist/media/danceMontage.js +34 -0
  158. package/dist/media/danceMontage.js.map +1 -0
  159. package/dist/media/enhancementProfiles.d.ts +158 -0
  160. package/dist/media/enhancementProfiles.d.ts.map +1 -0
  161. package/dist/media/enhancementProfiles.js +224 -0
  162. package/dist/media/enhancementProfiles.js.map +1 -0
  163. package/dist/media/generationJob.d.ts +81 -0
  164. package/dist/media/generationJob.d.ts.map +1 -0
  165. package/dist/media/generationJob.js +91 -0
  166. package/dist/media/generationJob.js.map +1 -0
  167. package/dist/media/gptImage.d.ts +21 -0
  168. package/dist/media/gptImage.d.ts.map +1 -0
  169. package/dist/media/gptImage.js +162 -0
  170. package/dist/media/gptImage.js.map +1 -0
  171. package/dist/media/imageDimensions.d.ts +24 -0
  172. package/dist/media/imageDimensions.d.ts.map +1 -0
  173. package/dist/media/imageDimensions.js +64 -0
  174. package/dist/media/imageDimensions.js.map +1 -0
  175. package/dist/media/index.d.ts +16 -0
  176. package/dist/media/index.d.ts.map +1 -0
  177. package/dist/media/index.js +32 -0
  178. package/dist/media/index.js.map +1 -0
  179. package/dist/media/index.mjs +116 -0
  180. package/dist/media/musicSettings.d.ts +86 -0
  181. package/dist/media/musicSettings.d.ts.map +1 -0
  182. package/dist/media/musicSettings.js +234 -0
  183. package/dist/media/musicSettings.js.map +1 -0
  184. package/dist/media/vendorModelPremium.d.ts +21 -0
  185. package/dist/media/vendorModelPremium.d.ts.map +1 -0
  186. package/dist/media/vendorModelPremium.js +89 -0
  187. package/dist/media/vendorModelPremium.js.map +1 -0
  188. package/dist/media/videoAppSettings.d.ts +41 -0
  189. package/dist/media/videoAppSettings.d.ts.map +1 -0
  190. package/dist/media/videoAppSettings.js +128 -0
  191. package/dist/media/videoAppSettings.js.map +1 -0
  192. package/dist/media/videoContentLimit.d.ts +15 -0
  193. package/dist/media/videoContentLimit.d.ts.map +1 -0
  194. package/dist/media/videoContentLimit.js +169 -0
  195. package/dist/media/videoContentLimit.js.map +1 -0
  196. package/dist/media/videoReference.d.ts +35 -0
  197. package/dist/media/videoReference.d.ts.map +1 -0
  198. package/dist/media/videoReference.js +77 -0
  199. package/dist/media/videoReference.js.map +1 -0
  200. package/dist/media/videoSettings.d.ts +50 -0
  201. package/dist/media/videoSettings.d.ts.map +1 -0
  202. package/dist/media/videoSettings.js +200 -0
  203. package/dist/media/videoSettings.js.map +1 -0
  204. package/dist/public-skill-runtime/index.d.ts +1220 -0
  205. package/dist/public-skill-runtime/index.d.ts.map +1 -0
  206. package/dist/public-skill-runtime/index.js +6396 -0
  207. package/dist/public-skill-runtime/index.js.map +1 -0
  208. package/dist/public-skill-runtime/index.mjs +141 -0
  209. package/dist/replay/index.d.ts +4 -0
  210. package/dist/replay/index.d.ts.map +1 -0
  211. package/dist/replay/index.js +12 -0
  212. package/dist/replay/index.js.map +1 -0
  213. package/dist/replay/index.mjs +12 -0
  214. package/dist/replay/redact.d.ts +7 -0
  215. package/dist/replay/redact.d.ts.map +1 -0
  216. package/dist/replay/redact.js +108 -0
  217. package/dist/replay/redact.js.map +1 -0
  218. package/dist/replay/types.d.ts +61 -0
  219. package/dist/replay/types.d.ts.map +1 -0
  220. package/dist/replay/types.js +24 -0
  221. package/dist/replay/types.js.map +1 -0
  222. package/dist/runtime/chatTypes.d.ts +47 -0
  223. package/dist/runtime/chatTypes.d.ts.map +1 -0
  224. package/dist/runtime/chatTypes.js +3 -0
  225. package/dist/runtime/chatTypes.js.map +1 -0
  226. package/dist/runtime/durableWorkflowClient.d.ts +80 -0
  227. package/dist/runtime/durableWorkflowClient.d.ts.map +1 -0
  228. package/dist/runtime/durableWorkflowClient.js +312 -0
  229. package/dist/runtime/durableWorkflowClient.js.map +1 -0
  230. package/dist/runtime/index.d.ts +3 -0
  231. package/dist/runtime/index.d.ts.map +1 -0
  232. package/dist/runtime/index.js +18 -0
  233. package/dist/runtime/index.js.map +1 -0
  234. package/dist/runtime/index.mjs +21 -0
  235. package/dist/skills/asset_reference_management/index.d.ts +6 -0
  236. package/dist/skills/asset_reference_management/index.d.ts.map +1 -0
  237. package/dist/skills/asset_reference_management/index.js +18 -0
  238. package/dist/skills/asset_reference_management/index.js.map +1 -0
  239. package/dist/skills/asset_reference_management/index.mjs +18 -0
  240. package/dist/skills/asset_reference_management/manifest.d.ts +42 -0
  241. package/dist/skills/asset_reference_management/manifest.d.ts.map +1 -0
  242. package/dist/skills/asset_reference_management/manifest.js +237 -0
  243. package/dist/skills/asset_reference_management/manifest.js.map +1 -0
  244. package/dist/skills/asset_reference_management/modelRefRegistry.d.ts +24 -0
  245. package/dist/skills/asset_reference_management/modelRefRegistry.d.ts.map +1 -0
  246. package/dist/skills/asset_reference_management/modelRefRegistry.js +136 -0
  247. package/dist/skills/asset_reference_management/modelRefRegistry.js.map +1 -0
  248. package/dist/skills/asset_reference_management/types.d.ts +31 -0
  249. package/dist/skills/asset_reference_management/types.d.ts.map +1 -0
  250. package/dist/skills/asset_reference_management/types.js +3 -0
  251. package/dist/skills/asset_reference_management/types.js.map +1 -0
  252. package/dist/tools/definitions/add-subtitles/definition.d.ts +4 -0
  253. package/dist/tools/definitions/add-subtitles/definition.d.ts.map +1 -0
  254. package/dist/tools/definitions/add-subtitles/definition.js +83 -0
  255. package/dist/tools/definitions/add-subtitles/definition.js.map +1 -0
  256. package/dist/tools/definitions/animate-photo/definition.d.ts +3 -0
  257. package/dist/tools/definitions/animate-photo/definition.d.ts.map +1 -0
  258. package/dist/tools/definitions/animate-photo/definition.js +124 -0
  259. package/dist/tools/definitions/animate-photo/definition.js.map +1 -0
  260. package/dist/tools/definitions/apply-style/definition.d.ts +3 -0
  261. package/dist/tools/definitions/apply-style/definition.d.ts.map +1 -0
  262. package/dist/tools/definitions/apply-style/definition.js +50 -0
  263. package/dist/tools/definitions/apply-style/definition.js.map +1 -0
  264. package/dist/tools/definitions/change-angle/definition.d.ts +3 -0
  265. package/dist/tools/definitions/change-angle/definition.d.ts.map +1 -0
  266. package/dist/tools/definitions/change-angle/definition.js +49 -0
  267. package/dist/tools/definitions/change-angle/definition.js.map +1 -0
  268. package/dist/tools/definitions/dance-montage/dances.d.ts +11 -0
  269. package/dist/tools/definitions/dance-montage/dances.d.ts.map +1 -0
  270. package/dist/tools/definitions/dance-montage/dances.js +90 -0
  271. package/dist/tools/definitions/dance-montage/dances.js.map +1 -0
  272. package/dist/tools/definitions/dance-montage/definition.d.ts +3 -0
  273. package/dist/tools/definitions/dance-montage/definition.d.ts.map +1 -0
  274. package/dist/tools/definitions/dance-montage/definition.js +45 -0
  275. package/dist/tools/definitions/dance-montage/definition.js.map +1 -0
  276. package/dist/tools/definitions/edit-image/definition.d.ts +3 -0
  277. package/dist/tools/definitions/edit-image/definition.d.ts.map +1 -0
  278. package/dist/tools/definitions/edit-image/definition.js +128 -0
  279. package/dist/tools/definitions/edit-image/definition.js.map +1 -0
  280. package/dist/tools/definitions/extend-video/definition.d.ts +3 -0
  281. package/dist/tools/definitions/extend-video/definition.d.ts.map +1 -0
  282. package/dist/tools/definitions/extend-video/definition.js +51 -0
  283. package/dist/tools/definitions/extend-video/definition.js.map +1 -0
  284. package/dist/tools/definitions/generate-image/definition.d.ts +3 -0
  285. package/dist/tools/definitions/generate-image/definition.d.ts.map +1 -0
  286. package/dist/tools/definitions/generate-image/definition.js +107 -0
  287. package/dist/tools/definitions/generate-image/definition.js.map +1 -0
  288. package/dist/tools/definitions/generate-music/definition.d.ts +3 -0
  289. package/dist/tools/definitions/generate-music/definition.d.ts.map +1 -0
  290. package/dist/tools/definitions/generate-music/definition.js +75 -0
  291. package/dist/tools/definitions/generate-music/definition.js.map +1 -0
  292. package/dist/tools/definitions/generate-video/definition.d.ts +3 -0
  293. package/dist/tools/definitions/generate-video/definition.d.ts.map +1 -0
  294. package/dist/tools/definitions/generate-video/definition.js +120 -0
  295. package/dist/tools/definitions/generate-video/definition.js.map +1 -0
  296. package/dist/tools/definitions/index.d.ts +25 -0
  297. package/dist/tools/definitions/index.d.ts.map +1 -0
  298. package/dist/tools/definitions/index.js +66 -0
  299. package/dist/tools/definitions/index.js.map +1 -0
  300. package/dist/tools/definitions/orbit-video/definition.d.ts +3 -0
  301. package/dist/tools/definitions/orbit-video/definition.d.ts.map +1 -0
  302. package/dist/tools/definitions/orbit-video/definition.js +103 -0
  303. package/dist/tools/definitions/orbit-video/definition.js.map +1 -0
  304. package/dist/tools/definitions/overlay-video/definition.d.ts +4 -0
  305. package/dist/tools/definitions/overlay-video/definition.d.ts.map +1 -0
  306. package/dist/tools/definitions/overlay-video/definition.js +142 -0
  307. package/dist/tools/definitions/overlay-video/definition.js.map +1 -0
  308. package/dist/tools/definitions/refine-result/definition.d.ts +3 -0
  309. package/dist/tools/definitions/refine-result/definition.d.ts.map +1 -0
  310. package/dist/tools/definitions/refine-result/definition.js +56 -0
  311. package/dist/tools/definitions/refine-result/definition.js.map +1 -0
  312. package/dist/tools/definitions/replace-video-segment/definition.d.ts +3 -0
  313. package/dist/tools/definitions/replace-video-segment/definition.d.ts.map +1 -0
  314. package/dist/tools/definitions/replace-video-segment/definition.js +65 -0
  315. package/dist/tools/definitions/replace-video-segment/definition.js.map +1 -0
  316. package/dist/tools/definitions/restore-photo/definition.d.ts +3 -0
  317. package/dist/tools/definitions/restore-photo/definition.d.ts.map +1 -0
  318. package/dist/tools/definitions/restore-photo/definition.js +58 -0
  319. package/dist/tools/definitions/restore-photo/definition.js.map +1 -0
  320. package/dist/tools/definitions/sound-to-video/definition.d.ts +3 -0
  321. package/dist/tools/definitions/sound-to-video/definition.d.ts.map +1 -0
  322. package/dist/tools/definitions/sound-to-video/definition.js +91 -0
  323. package/dist/tools/definitions/sound-to-video/definition.js.map +1 -0
  324. package/dist/tools/definitions/stitch-video/definition.d.ts +4 -0
  325. package/dist/tools/definitions/stitch-video/definition.d.ts.map +1 -0
  326. package/dist/tools/definitions/stitch-video/definition.js +89 -0
  327. package/dist/tools/definitions/stitch-video/definition.js.map +1 -0
  328. package/dist/tools/definitions/types.d.ts +15 -0
  329. package/dist/tools/definitions/types.d.ts.map +1 -0
  330. package/dist/tools/definitions/types.js +3 -0
  331. package/dist/tools/definitions/types.js.map +1 -0
  332. package/dist/tools/definitions/video-to-video/definition.d.ts +3 -0
  333. package/dist/tools/definitions/video-to-video/definition.d.ts.map +1 -0
  334. package/dist/tools/definitions/video-to-video/definition.js +101 -0
  335. package/dist/tools/definitions/video-to-video/definition.js.map +1 -0
  336. package/dist/tools/index.d.ts +19 -0
  337. package/dist/tools/index.d.ts.map +1 -0
  338. package/dist/tools/index.js +70 -0
  339. package/dist/tools/index.js.map +1 -0
  340. package/dist/tools/index.mjs +86 -0
  341. package/dist/tools/normalizeArgs.d.ts +2 -0
  342. package/dist/tools/normalizeArgs.d.ts.map +1 -0
  343. package/dist/tools/normalizeArgs.js +40 -0
  344. package/dist/tools/normalizeArgs.js.map +1 -0
  345. package/dist/tools/result.d.ts +47 -0
  346. package/dist/tools/result.d.ts.map +1 -0
  347. package/dist/tools/result.js +38 -0
  348. package/dist/tools/result.js.map +1 -0
  349. package/dist/tools/shared/downloadFilename.d.ts +18 -0
  350. package/dist/tools/shared/downloadFilename.d.ts.map +1 -0
  351. package/dist/tools/shared/downloadFilename.js +157 -0
  352. package/dist/tools/shared/downloadFilename.js.map +1 -0
  353. package/dist/tools/shared/errorClassification.d.ts +15 -0
  354. package/dist/tools/shared/errorClassification.d.ts.map +1 -0
  355. package/dist/tools/shared/errorClassification.js +78 -0
  356. package/dist/tools/shared/errorClassification.js.map +1 -0
  357. package/dist/tools/shared/imageEncoding.d.ts +2 -0
  358. package/dist/tools/shared/imageEncoding.d.ts.map +1 -0
  359. package/dist/tools/shared/imageEncoding.js +11 -0
  360. package/dist/tools/shared/imageEncoding.js.map +1 -0
  361. package/dist/tools/shared/llmHelpers.d.ts +14 -0
  362. package/dist/tools/shared/llmHelpers.d.ts.map +1 -0
  363. package/dist/tools/shared/llmHelpers.js +145 -0
  364. package/dist/tools/shared/llmHelpers.js.map +1 -0
  365. package/dist/tools/shared/modelRegistry.d.ts +10 -0
  366. package/dist/tools/shared/modelRegistry.d.ts.map +1 -0
  367. package/dist/tools/shared/modelRegistry.js +98 -0
  368. package/dist/tools/shared/modelRegistry.js.map +1 -0
  369. package/dist/tools/shared/policyChecks.d.ts +25 -0
  370. package/dist/tools/shared/policyChecks.d.ts.map +1 -0
  371. package/dist/tools/shared/policyChecks.js +79 -0
  372. package/dist/tools/shared/policyChecks.js.map +1 -0
  373. package/dist/tools/shared/promptRefinementCache.d.ts +10 -0
  374. package/dist/tools/shared/promptRefinementCache.d.ts.map +1 -0
  375. package/dist/tools/shared/promptRefinementCache.js +81 -0
  376. package/dist/tools/shared/promptRefinementCache.js.map +1 -0
  377. package/dist/tools/shared/promptSanitizer.d.ts +2 -0
  378. package/dist/tools/shared/promptSanitizer.d.ts.map +1 -0
  379. package/dist/tools/shared/promptSanitizer.js +73 -0
  380. package/dist/tools/shared/promptSanitizer.js.map +1 -0
  381. package/dist/tools/shared/seedancePolicyErrors.d.ts +33 -0
  382. package/dist/tools/shared/seedancePolicyErrors.d.ts.map +1 -0
  383. package/dist/tools/shared/seedancePolicyErrors.js +239 -0
  384. package/dist/tools/shared/seedancePolicyErrors.js.map +1 -0
  385. package/dist/tools/shared/slotFailureSummary.d.ts +7 -0
  386. package/dist/tools/shared/slotFailureSummary.d.ts.map +1 -0
  387. package/dist/tools/shared/slotFailureSummary.js +63 -0
  388. package/dist/tools/shared/slotFailureSummary.js.map +1 -0
  389. package/dist/tools/shared/visionDescriptionCache.d.ts +5 -0
  390. package/dist/tools/shared/visionDescriptionCache.d.ts.map +1 -0
  391. package/dist/tools/shared/visionDescriptionCache.js +35 -0
  392. package/dist/tools/shared/visionDescriptionCache.js.map +1 -0
  393. package/dist/types/index.d.ts +224 -0
  394. package/dist/types/index.d.ts.map +1 -0
  395. package/dist/types/index.js +34 -0
  396. package/dist/types/index.js.map +1 -0
  397. package/dist/utils/errors.d.ts +38 -0
  398. package/dist/utils/errors.d.ts.map +1 -0
  399. package/dist/utils/errors.js +99 -0
  400. package/dist/utils/errors.js.map +1 -0
  401. package/dist/utils/helpers.d.ts +36 -0
  402. package/dist/utils/helpers.d.ts.map +1 -0
  403. package/dist/utils/helpers.js +445 -0
  404. package/dist/utils/helpers.js.map +1 -0
  405. package/dist/workflows/bindings.d.ts +23 -0
  406. package/dist/workflows/bindings.d.ts.map +1 -0
  407. package/dist/workflows/bindings.js +190 -0
  408. package/dist/workflows/bindings.js.map +1 -0
  409. package/dist/workflows/executor-ports.d.ts +11 -0
  410. package/dist/workflows/executor-ports.d.ts.map +1 -0
  411. package/dist/workflows/executor-ports.js +3 -0
  412. package/dist/workflows/executor-ports.js.map +1 -0
  413. package/dist/workflows/executor.d.ts +17 -0
  414. package/dist/workflows/executor.d.ts.map +1 -0
  415. package/dist/workflows/executor.js +526 -0
  416. package/dist/workflows/executor.js.map +1 -0
  417. package/dist/workflows/index.d.ts +8 -0
  418. package/dist/workflows/index.d.ts.map +1 -0
  419. package/dist/workflows/index.js +25 -0
  420. package/dist/workflows/index.js.map +1 -0
  421. package/dist/workflows/index.mjs +22 -0
  422. package/dist/workflows/summarize.d.ts +7 -0
  423. package/dist/workflows/summarize.d.ts.map +1 -0
  424. package/dist/workflows/summarize.js +54 -0
  425. package/dist/workflows/summarize.js.map +1 -0
  426. package/dist/workflows/types.d.ts +302 -0
  427. package/dist/workflows/types.d.ts.map +1 -0
  428. package/dist/workflows/types.js +3 -0
  429. package/dist/workflows/types.js.map +1 -0
  430. package/dist/workflows/validation.d.ts +10 -0
  431. package/dist/workflows/validation.d.ts.map +1 -0
  432. package/dist/workflows/validation.js +340 -0
  433. package/dist/workflows/validation.js.map +1 -0
  434. package/dist-esm/client/SogniClientWrapper.js +877 -0
  435. package/dist-esm/client/SogniClientWrapper.js.map +1 -0
  436. package/dist-esm/contracts/backboneDurableWorkflow.js +90 -0
  437. package/dist-esm/contracts/backboneDurableWorkflow.js.map +1 -0
  438. package/dist-esm/contracts/backboneToolCatalog.js +59 -0
  439. package/dist-esm/contracts/backboneToolCatalog.js.map +1 -0
  440. package/dist-esm/contracts/composeWorkflowTypes.js +2 -0
  441. package/dist-esm/contracts/composeWorkflowTypes.js.map +1 -0
  442. package/dist-esm/contracts/data/costEstimation.js +18 -0
  443. package/dist-esm/contracts/data/costEstimation.js.map +1 -0
  444. package/dist-esm/contracts/data/gatingPolicies.js +214 -0
  445. package/dist-esm/contracts/data/gatingPolicies.js.map +1 -0
  446. package/dist-esm/contracts/data/gatingPoliciesToolSurface.js +57 -0
  447. package/dist-esm/contracts/data/gatingPoliciesToolSurface.js.map +1 -0
  448. package/dist-esm/contracts/data/index.js +23 -0
  449. package/dist-esm/contracts/data/index.js.map +1 -0
  450. package/dist-esm/contracts/data/promptContracts.js +1169 -0
  451. package/dist-esm/contracts/data/promptContracts.js.map +1 -0
  452. package/dist-esm/contracts/data/repairRecipes.js +193 -0
  453. package/dist-esm/contracts/data/repairRecipes.js.map +1 -0
  454. package/dist-esm/contracts/data/toolCatalog.js +122 -0
  455. package/dist-esm/contracts/data/toolCatalog.js.map +1 -0
  456. package/dist-esm/contracts/data/toolCostMetadata.js +277 -0
  457. package/dist-esm/contracts/data/toolCostMetadata.js.map +1 -0
  458. package/dist-esm/contracts/data/toolPermissions.js +70 -0
  459. package/dist-esm/contracts/data/toolPermissions.js.map +1 -0
  460. package/dist-esm/contracts/evaluators.js +463 -0
  461. package/dist-esm/contracts/evaluators.js.map +1 -0
  462. package/dist-esm/contracts/hostedComposition.js +128 -0
  463. package/dist-esm/contracts/hostedComposition.js.map +1 -0
  464. package/dist-esm/contracts/hostedToolValidation.js +296 -0
  465. package/dist-esm/contracts/hostedToolValidation.js.map +1 -0
  466. package/dist-esm/contracts/idLoraPrompt.js +72 -0
  467. package/dist-esm/contracts/idLoraPrompt.js.map +1 -0
  468. package/dist-esm/contracts/imagePrompt.js +143 -0
  469. package/dist-esm/contracts/imagePrompt.js.map +1 -0
  470. package/dist-esm/contracts/index.js +27 -0
  471. package/dist-esm/contracts/index.js.map +1 -0
  472. package/dist-esm/contracts/musicComposition.js +182 -0
  473. package/dist-esm/contracts/musicComposition.js.map +1 -0
  474. package/dist-esm/contracts/promptContract.js +34 -0
  475. package/dist-esm/contracts/promptContract.js.map +1 -0
  476. package/dist-esm/contracts/promptOverrideMarker.js +2 -0
  477. package/dist-esm/contracts/promptOverrideMarker.js.map +1 -0
  478. package/dist-esm/contracts/randomThemes.js +154 -0
  479. package/dist-esm/contracts/randomThemes.js.map +1 -0
  480. package/dist-esm/contracts/registry.js +100 -0
  481. package/dist-esm/contracts/registry.js.map +1 -0
  482. package/dist-esm/contracts/repairRecipe.js +35 -0
  483. package/dist-esm/contracts/repairRecipe.js.map +1 -0
  484. package/dist-esm/contracts/storyboard.js +4 -0
  485. package/dist-esm/contracts/storyboard.js.map +1 -0
  486. package/dist-esm/contracts/telemetry.js +33 -0
  487. package/dist-esm/contracts/telemetry.js.map +1 -0
  488. package/dist-esm/contracts/toolGatingPolicy.js +60 -0
  489. package/dist-esm/contracts/toolGatingPolicy.js.map +1 -0
  490. package/dist-esm/contracts/toolPromptMarkers.js +10 -0
  491. package/dist-esm/contracts/toolPromptMarkers.js.map +1 -0
  492. package/dist-esm/contracts/toolSurface.js +110 -0
  493. package/dist-esm/contracts/toolSurface.js.map +1 -0
  494. package/dist-esm/contracts/turnPolicy.js +13 -0
  495. package/dist-esm/contracts/turnPolicy.js.map +1 -0
  496. package/dist-esm/contracts/videoComposition.js +216 -0
  497. package/dist-esm/contracts/videoComposition.js.map +1 -0
  498. package/dist-esm/index.js +7 -0
  499. package/dist-esm/index.js.map +1 -0
  500. package/dist-esm/media/aspectRatio.js +65 -0
  501. package/dist-esm/media/aspectRatio.js.map +1 -0
  502. package/dist-esm/media/audioReference.js +186 -0
  503. package/dist-esm/media/audioReference.js.map +1 -0
  504. package/dist-esm/media/cameraAngle.js +41 -0
  505. package/dist-esm/media/cameraAngle.js.map +1 -0
  506. package/dist-esm/media/characterSheet.js +48 -0
  507. package/dist-esm/media/characterSheet.js.map +1 -0
  508. package/dist-esm/media/danceMontage.js +29 -0
  509. package/dist-esm/media/danceMontage.js.map +1 -0
  510. package/dist-esm/media/enhancementProfiles.js +219 -0
  511. package/dist-esm/media/enhancementProfiles.js.map +1 -0
  512. package/dist-esm/media/generationJob.js +87 -0
  513. package/dist-esm/media/generationJob.js.map +1 -0
  514. package/dist-esm/media/gptImage.js +150 -0
  515. package/dist-esm/media/gptImage.js.map +1 -0
  516. package/dist-esm/media/imageDimensions.js +59 -0
  517. package/dist-esm/media/imageDimensions.js.map +1 -0
  518. package/dist-esm/media/index.js +16 -0
  519. package/dist-esm/media/index.js.map +1 -0
  520. package/dist-esm/media/musicSettings.js +230 -0
  521. package/dist-esm/media/musicSettings.js.map +1 -0
  522. package/dist-esm/media/vendorModelPremium.js +81 -0
  523. package/dist-esm/media/vendorModelPremium.js.map +1 -0
  524. package/dist-esm/media/videoAppSettings.js +125 -0
  525. package/dist-esm/media/videoAppSettings.js.map +1 -0
  526. package/dist-esm/media/videoContentLimit.js +162 -0
  527. package/dist-esm/media/videoContentLimit.js.map +1 -0
  528. package/dist-esm/media/videoReference.js +72 -0
  529. package/dist-esm/media/videoReference.js.map +1 -0
  530. package/dist-esm/media/videoSettings.js +191 -0
  531. package/dist-esm/media/videoSettings.js.map +1 -0
  532. package/dist-esm/package.json +3 -0
  533. package/dist-esm/public-skill-runtime/index.js +6294 -0
  534. package/dist-esm/public-skill-runtime/index.js.map +1 -0
  535. package/dist-esm/replay/index.js +3 -0
  536. package/dist-esm/replay/index.js.map +1 -0
  537. package/dist-esm/replay/redact.js +102 -0
  538. package/dist-esm/replay/redact.js.map +1 -0
  539. package/dist-esm/replay/types.js +20 -0
  540. package/dist-esm/replay/types.js.map +1 -0
  541. package/dist-esm/runtime/chatTypes.js +2 -0
  542. package/dist-esm/runtime/chatTypes.js.map +1 -0
  543. package/dist-esm/runtime/durableWorkflowClient.js +295 -0
  544. package/dist-esm/runtime/durableWorkflowClient.js.map +1 -0
  545. package/dist-esm/runtime/index.js +2 -0
  546. package/dist-esm/runtime/index.js.map +1 -0
  547. package/dist-esm/skills/asset_reference_management/index.js +3 -0
  548. package/dist-esm/skills/asset_reference_management/index.js.map +1 -0
  549. package/dist-esm/skills/asset_reference_management/manifest.js +228 -0
  550. package/dist-esm/skills/asset_reference_management/manifest.js.map +1 -0
  551. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js +129 -0
  552. package/dist-esm/skills/asset_reference_management/modelRefRegistry.js.map +1 -0
  553. package/dist-esm/skills/asset_reference_management/types.js +2 -0
  554. package/dist-esm/skills/asset_reference_management/types.js.map +1 -0
  555. package/dist-esm/tools/definitions/add-subtitles/definition.js +80 -0
  556. package/dist-esm/tools/definitions/add-subtitles/definition.js.map +1 -0
  557. package/dist-esm/tools/definitions/animate-photo/definition.js +121 -0
  558. package/dist-esm/tools/definitions/animate-photo/definition.js.map +1 -0
  559. package/dist-esm/tools/definitions/apply-style/definition.js +47 -0
  560. package/dist-esm/tools/definitions/apply-style/definition.js.map +1 -0
  561. package/dist-esm/tools/definitions/change-angle/definition.js +46 -0
  562. package/dist-esm/tools/definitions/change-angle/definition.js.map +1 -0
  563. package/dist-esm/tools/definitions/dance-montage/dances.js +86 -0
  564. package/dist-esm/tools/definitions/dance-montage/dances.js.map +1 -0
  565. package/dist-esm/tools/definitions/dance-montage/definition.js +42 -0
  566. package/dist-esm/tools/definitions/dance-montage/definition.js.map +1 -0
  567. package/dist-esm/tools/definitions/edit-image/definition.js +125 -0
  568. package/dist-esm/tools/definitions/edit-image/definition.js.map +1 -0
  569. package/dist-esm/tools/definitions/extend-video/definition.js +48 -0
  570. package/dist-esm/tools/definitions/extend-video/definition.js.map +1 -0
  571. package/dist-esm/tools/definitions/generate-image/definition.js +104 -0
  572. package/dist-esm/tools/definitions/generate-image/definition.js.map +1 -0
  573. package/dist-esm/tools/definitions/generate-music/definition.js +72 -0
  574. package/dist-esm/tools/definitions/generate-music/definition.js.map +1 -0
  575. package/dist-esm/tools/definitions/generate-video/definition.js +117 -0
  576. package/dist-esm/tools/definitions/generate-video/definition.js.map +1 -0
  577. package/dist-esm/tools/definitions/index.js +41 -0
  578. package/dist-esm/tools/definitions/index.js.map +1 -0
  579. package/dist-esm/tools/definitions/orbit-video/definition.js +100 -0
  580. package/dist-esm/tools/definitions/orbit-video/definition.js.map +1 -0
  581. package/dist-esm/tools/definitions/overlay-video/definition.js +139 -0
  582. package/dist-esm/tools/definitions/overlay-video/definition.js.map +1 -0
  583. package/dist-esm/tools/definitions/refine-result/definition.js +53 -0
  584. package/dist-esm/tools/definitions/refine-result/definition.js.map +1 -0
  585. package/dist-esm/tools/definitions/replace-video-segment/definition.js +62 -0
  586. package/dist-esm/tools/definitions/replace-video-segment/definition.js.map +1 -0
  587. package/dist-esm/tools/definitions/restore-photo/definition.js +55 -0
  588. package/dist-esm/tools/definitions/restore-photo/definition.js.map +1 -0
  589. package/dist-esm/tools/definitions/sound-to-video/definition.js +88 -0
  590. package/dist-esm/tools/definitions/sound-to-video/definition.js.map +1 -0
  591. package/dist-esm/tools/definitions/stitch-video/definition.js +86 -0
  592. package/dist-esm/tools/definitions/stitch-video/definition.js.map +1 -0
  593. package/dist-esm/tools/definitions/types.js +2 -0
  594. package/dist-esm/tools/definitions/types.js.map +1 -0
  595. package/dist-esm/tools/definitions/video-to-video/definition.js +98 -0
  596. package/dist-esm/tools/definitions/video-to-video/definition.js.map +1 -0
  597. package/dist-esm/tools/index.js +15 -0
  598. package/dist-esm/tools/index.js.map +1 -0
  599. package/dist-esm/tools/normalizeArgs.js +37 -0
  600. package/dist-esm/tools/normalizeArgs.js.map +1 -0
  601. package/dist-esm/tools/result.js +31 -0
  602. package/dist-esm/tools/result.js.map +1 -0
  603. package/dist-esm/tools/shared/downloadFilename.js +147 -0
  604. package/dist-esm/tools/shared/downloadFilename.js.map +1 -0
  605. package/dist-esm/tools/shared/errorClassification.js +74 -0
  606. package/dist-esm/tools/shared/errorClassification.js.map +1 -0
  607. package/dist-esm/tools/shared/imageEncoding.js +8 -0
  608. package/dist-esm/tools/shared/imageEncoding.js.map +1 -0
  609. package/dist-esm/tools/shared/llmHelpers.js +137 -0
  610. package/dist-esm/tools/shared/llmHelpers.js.map +1 -0
  611. package/dist-esm/tools/shared/modelRegistry.js +91 -0
  612. package/dist-esm/tools/shared/modelRegistry.js.map +1 -0
  613. package/dist-esm/tools/shared/policyChecks.js +73 -0
  614. package/dist-esm/tools/shared/policyChecks.js.map +1 -0
  615. package/dist-esm/tools/shared/promptRefinementCache.js +70 -0
  616. package/dist-esm/tools/shared/promptRefinementCache.js.map +1 -0
  617. package/dist-esm/tools/shared/promptSanitizer.js +70 -0
  618. package/dist-esm/tools/shared/promptSanitizer.js.map +1 -0
  619. package/dist-esm/tools/shared/seedancePolicyErrors.js +232 -0
  620. package/dist-esm/tools/shared/seedancePolicyErrors.js.map +1 -0
  621. package/dist-esm/tools/shared/slotFailureSummary.js +60 -0
  622. package/dist-esm/tools/shared/slotFailureSummary.js.map +1 -0
  623. package/dist-esm/tools/shared/visionDescriptionCache.js +29 -0
  624. package/dist-esm/tools/shared/visionDescriptionCache.js.map +1 -0
  625. package/dist-esm/types/index.js +31 -0
  626. package/dist-esm/types/index.js.map +1 -0
  627. package/dist-esm/utils/errors.js +86 -0
  628. package/dist-esm/utils/errors.js.map +1 -0
  629. package/dist-esm/utils/helpers.js +419 -0
  630. package/dist-esm/utils/helpers.js.map +1 -0
  631. package/dist-esm/workflows/bindings.js +182 -0
  632. package/dist-esm/workflows/bindings.js.map +1 -0
  633. package/dist-esm/workflows/executor-ports.js +2 -0
  634. package/dist-esm/workflows/executor-ports.js.map +1 -0
  635. package/dist-esm/workflows/executor.js +522 -0
  636. package/dist-esm/workflows/executor.js.map +1 -0
  637. package/dist-esm/workflows/index.js +7 -0
  638. package/dist-esm/workflows/index.js.map +1 -0
  639. package/dist-esm/workflows/summarize.js +51 -0
  640. package/dist-esm/workflows/summarize.js.map +1 -0
  641. package/dist-esm/workflows/types.js +2 -0
  642. package/dist-esm/workflows/types.js.map +1 -0
  643. package/dist-esm/workflows/validation.js +330 -0
  644. package/dist-esm/workflows/validation.js.map +1 -0
  645. package/media/index.d.ts +1 -0
  646. package/media/index.js +2 -0
  647. package/package.json +134 -0
  648. package/public-skill-runtime/index.d.ts +1 -0
  649. package/public-skill-runtime/index.js +2 -0
  650. package/replay/index.d.ts +1 -0
  651. package/replay/index.js +2 -0
  652. package/runtime/index.d.ts +1 -0
  653. package/runtime/index.js +2 -0
  654. package/skills/asset_reference_management/index.d.ts +1 -0
  655. package/skills/asset_reference_management/index.js +2 -0
  656. package/tools/index.d.ts +1 -0
  657. package/tools/index.js +2 -0
  658. package/workflows/index.d.ts +1 -0
  659. package/workflows/index.js +2 -0
package/README.md ADDED
@@ -0,0 +1,823 @@
1
+ # Sogni Client Wrapper
2
+
3
+ [![NPM version](https://img.shields.io/npm/v/@sogni-ai/sogni-intelligence-client.svg)](https://www.npmjs.com/package/@sogni-ai/sogni-intelligence-client) [![License](https://img.shields.io/npm/l/@sogni-ai/sogni-intelligence-client.svg)](https://www.npmjs.com/package/@sogni-ai/sogni-intelligence-client)
4
+
5
+ An enhanced Node.js wrapper for the [`@sogni-ai/sogni-client`](https://sdk-docs.sogni.ai/) library, designed for robustness, ease of use, and seamless integration with platforms like [n8n](https://n8n.io/).
6
+
7
+ This library simplifies interaction with the Sogni AI Supernet by providing a promise-based API, automatic connection management, enhanced error handling, and a more developer-friendly interface.
8
+
9
+ ## Features
10
+
11
+ - **Promise-Based API**: Modern `async/await` support for all core operations.
12
+ - **Connection Management**: Automatic connection and reconnection handling.
13
+ - **Video Rendering Support**: Generate videos using WAN and LTX-2 models (t2v, i2v, s2v, ia2v, a2v, v2v, animate workflows).
14
+ - **Audio Generation Support**: Generate music/audio tracks with audio models and estimate audio costs.
15
+ - **Image Editing Support**: Edit images using Qwen models with context images for multi-reference editing.
16
+ - **LLM Chat + Tool Calling Support**: Use chat completions through Sogni's LLM worker network, including streaming and function/tool calling.
17
+ - **Vision Chat + Thinking Controls**: Send OpenAI-style multimodal `image_url` messages and toggle reasoning with `think`.
18
+ - **Chat Tool Execution Helpers**: Execute Sogni platform tool calls manually from the wrapper, including streaming follow-up loops.
19
+ - **Flexible Authentication**: Token, cookies, or API key authentication.
20
+ - **Wallet + Tracking Utilities**: Query Base/Etherlink wallet balances and inspect SDK-tracked projects/current account state.
21
+ - **Simplified Configuration**: Sensible defaults and clear configuration options.
22
+ - **Enhanced Error Handling**: Custom error classes for better error diagnosis.
23
+ - **Type-Safe**: Written entirely in TypeScript with full type definitions.
24
+ - **n8n-Ready**: Built with n8n integration in mind, managing connection lifecycles effectively.
25
+ - **Utility Helpers**: Includes helpers for validation, retries, and formatting.
26
+
27
+ ## Installation
28
+
29
+ ```bash
30
+ npm install @sogni-ai/sogni-intelligence-client
31
+ ```
32
+
33
+ Or with Yarn:
34
+
35
+ ```bash
36
+ yarn add @sogni-ai/sogni-intelligence-client
37
+ ```
38
+
39
+ ## Quick Start
40
+
41
+ ### 1. Setup Environment Variables
42
+
43
+ First, create a `.env` file in your project root to securely store your credentials:
44
+
45
+ ```bash
46
+ # Copy the example file
47
+ cp node_modules/@sogni-ai/sogni-intelligence-client/.env.example .env
48
+ ```
49
+
50
+ ### 2. Install Dependencies
51
+
52
+ ```bash
53
+ npm install dotenv
54
+ ```
55
+
56
+ ### 3. Create Your Script
57
+
58
+ ```typescript
59
+ import { config } from 'dotenv';
60
+ import { SogniClientWrapper } from '@sogni-ai/sogni-intelligence-client';
61
+
62
+ // Load environment variables from .env file
63
+ config();
64
+
65
+ async function main() {
66
+ // 1. Create and connect the client with credentials from .env
67
+ const client = new SogniClientWrapper({
68
+ username: process.env.SOGNI_USERNAME!,
69
+ password: process.env.SOGNI_PASSWORD!,
70
+ });
71
+
72
+ try {
73
+ // The client connects automatically on the first operation
74
+ console.log('Client connected!');
75
+
76
+ // 2. Find the most popular model
77
+ const model = await client.getMostPopularModel();
78
+ console.log(`Using model: ${model.id} (${model.workerCount} workers)`);
79
+
80
+ // 3. Generate an image
81
+ console.log('Generating image...');
82
+ const result = await client.createProject({
83
+ type: 'image',
84
+ modelId: model.id,
85
+ positivePrompt: 'A photorealistic portrait of a majestic lion in the savanna at sunset',
86
+ negativePrompt: 'blurry, cartoon, low quality',
87
+ stylePrompt: 'cinematic',
88
+ numberOfMedia: 1,
89
+ steps: 30,
90
+ guidance: 8,
91
+ });
92
+
93
+ if (result.completed && result.imageUrls) {
94
+ console.log('Image generation successful!');
95
+ console.log('Image URLs:', result.imageUrls);
96
+ } else {
97
+ console.error('Image generation did not complete.');
98
+ }
99
+
100
+ } catch (error) {
101
+ console.error('An error occurred:', error);
102
+ } finally {
103
+ // 4. Disconnect the client
104
+ await client.disconnect();
105
+ console.log('Client disconnected.');
106
+ }
107
+ }
108
+
109
+ main();
110
+ ```
111
+
112
+ ### 4. Run the Script
113
+
114
+ ```bash
115
+ # If using TypeScript
116
+ npx tsx your-script.ts
117
+
118
+ # If using compiled JavaScript
119
+ node your-script.js
120
+ ```
121
+
122
+ ## Video Rendering Support
123
+
124
+ The wrapper supports video generation with Sogni WAN and LTX-2 models. Generate videos from text prompts, images, audio, or other videos.
125
+
126
+ ### Video Generation Example
127
+
128
+ ```typescript
129
+ // Text-to-Video (t2v) using speed variant for reliability
130
+ const videoResult = await client.createVideoProject({
131
+ modelId: 'wan_v2.2-14b-fp8_t2v_lightx2v', // Speed variant (4 steps)
132
+ positivePrompt: 'A serene waterfall flowing through a lush green forest',
133
+ numberOfMedia: 1,
134
+ frames: 81, // Generate 81 frames (5 seconds at 16fps)
135
+ fps: 16, // 16 frames per second
136
+ width: 640, // 640x640 resolution
137
+ height: 640,
138
+ steps: 4, // Optimized for speed variant
139
+ outputFormat: 'mp4',
140
+ waitForCompletion: true,
141
+ timeout: 300000, // 5 minute timeout for video generation
142
+ });
143
+
144
+ console.log('Video URLs:', videoResult.videoUrls);
145
+ ```
146
+
147
+ ### Video Cost Estimate
148
+
149
+ ```typescript
150
+ const estimate = await client.estimateVideoCost({
151
+ modelId: 'wan_v2.2-14b-fp8_i2v_lightx2v',
152
+ width: 512,
153
+ height: 512,
154
+ frames: 81,
155
+ fps: 16,
156
+ steps: 4,
157
+ tokenType: 'spark',
158
+ });
159
+
160
+ console.log('Estimated USD cost:', estimate.usd);
161
+ ```
162
+
163
+ ### Video Workflows
164
+
165
+ The wrapper supports multiple video generation workflows:
166
+
167
+ 1. **Text-to-Video (t2v)**: Generate videos from text prompts
168
+ 2. **Image-to-Video (i2v)**: Animate static images or interpolate between two images
169
+ 3. **Sound-to-Video (s2v / ia2v / a2v)**: Drive generation with audio references
170
+ 4. **Video-to-Video (v2v)**: Control motion/style from a reference video
171
+ 5. **Animate Workflows**: Create character animations or motion transfers
172
+
173
+ ### Advanced Video Examples
174
+
175
+ ```typescript
176
+ // Image-to-Video with interpolation
177
+ const i2vResult = await client.createVideoProject({
178
+ modelId: 'wan_v2.2-14b-fp8_i2v_lightx2v',
179
+ positivePrompt: 'Smooth camera movement',
180
+ referenceImage: startImageBuffer, // Starting image
181
+ referenceImageEnd: endImageBuffer, // Optional: end image for interpolation
182
+ width: 512,
183
+ height: 512,
184
+ frames: 81,
185
+ fps: 16,
186
+ steps: 4,
187
+ autoResizeVideoAssets: true, // Auto-resize reference images (default: true)
188
+ });
189
+
190
+ // Animate with motion transfer
191
+ const animateResult = await client.createVideoProject({
192
+ modelId: 'wan_v2.2-14b-fp8_animate',
193
+ positivePrompt: 'Character animation',
194
+ referenceImage: characterImage, // Character to animate
195
+ referenceVideo: motionVideo, // Video with motion to transfer
196
+ frames: 90,
197
+ fps: 30,
198
+ });
199
+
200
+ // LTX image+audio-to-video (ia2v)
201
+ const ia2vResult = await client.createVideoProject({
202
+ modelId: 'ltx2-13b-fp8_ia2v_distilled',
203
+ positivePrompt: 'A cinematic portrait delivering the spoken line naturally',
204
+ referenceImage: portraitBuffer,
205
+ referenceAudio: speechBuffer,
206
+ audioStart: 0,
207
+ audioDuration: 5,
208
+ fps: 24,
209
+ duration: 5,
210
+ numberOfMedia: 1,
211
+ });
212
+
213
+ // LTX audio-to-video (a2v)
214
+ const a2vResult = await client.createVideoProject({
215
+ modelId: 'ltx23-22b-fp8_a2v_distilled',
216
+ positivePrompt: 'Abstract visuals that pulse with the soundtrack',
217
+ referenceAudio: soundtrackBuffer,
218
+ audioStart: 2,
219
+ audioDuration: 6,
220
+ fps: 24,
221
+ duration: 6,
222
+ numberOfMedia: 1,
223
+ });
224
+ ```
225
+
226
+ ### Convenience Methods
227
+
228
+ For cleaner code, use the dedicated convenience methods:
229
+
230
+ ```typescript
231
+ // For images
232
+ const imageResult = await client.createImageProject({
233
+ modelId: 'flux1-schnell-fp8',
234
+ positivePrompt: 'A beautiful sunset',
235
+ numberOfMedia: 1,
236
+ });
237
+
238
+ // For videos
239
+ const videoResult = await client.createVideoProject({
240
+ modelId: 'wan_v2.2-14b-fp8_t2v',
241
+ positivePrompt: 'Ocean waves crashing on a beach',
242
+ numberOfMedia: 1,
243
+ frames: 60,
244
+ fps: 30,
245
+ });
246
+
247
+ // For audio
248
+ const audioResult = await client.createAudioProject({
249
+ modelId: 'ace-step-v1',
250
+ positivePrompt: 'An uplifting cinematic ambient track',
251
+ numberOfMedia: 1,
252
+ duration: 30,
253
+ steps: 20,
254
+ outputFormat: 'mp3',
255
+ });
256
+ ```
257
+
258
+ ## Audio Generation
259
+
260
+ ```typescript
261
+ const audioEstimate = await client.estimateAudioCost({
262
+ modelId: 'ace-step-v1',
263
+ duration: 30,
264
+ steps: 20,
265
+ numberOfMedia: 1,
266
+ tokenType: 'spark',
267
+ });
268
+
269
+ console.log('Estimated audio cost (USD):', audioEstimate.usd);
270
+ ```
271
+
272
+ ## Chat Completions
273
+
274
+ ```typescript
275
+ // Non-streaming
276
+ const completion = await client.createChatCompletion({
277
+ model: 'qwen3-30b-a3b-gptq-int4',
278
+ messages: [{ role: 'user', content: 'Write a haiku about sunsets.' }],
279
+ });
280
+ console.log(completion.content);
281
+
282
+ // Streaming
283
+ const stream = await client.createChatCompletion({
284
+ model: 'qwen3-30b-a3b-gptq-int4',
285
+ messages: [{ role: 'user', content: 'Explain diffusion models simply.' }],
286
+ stream: true,
287
+ });
288
+ for await (const chunk of stream) {
289
+ process.stdout.write(chunk.content);
290
+ }
291
+ ```
292
+
293
+ ### Tool Calling (Function Calling)
294
+
295
+ `createChatCompletion()` accepts OpenAI-style `tools` and `tool_choice` parameters.
296
+
297
+ ```typescript
298
+ import type { ChatMessage, ToolCall, ToolDefinition } from '@sogni-ai/sogni-intelligence-client';
299
+
300
+ const tools: ToolDefinition[] = [
301
+ {
302
+ type: 'function',
303
+ function: {
304
+ name: 'add_numbers',
305
+ description: 'Add two numbers',
306
+ parameters: {
307
+ type: 'object',
308
+ properties: {
309
+ a: { type: 'number' },
310
+ b: { type: 'number' },
311
+ },
312
+ required: ['a', 'b'],
313
+ },
314
+ },
315
+ },
316
+ ];
317
+
318
+ const messages: ChatMessage[] = [
319
+ { role: 'user', content: 'Please add 17 and 25.' },
320
+ ];
321
+
322
+ for (let turn = 0; turn < 4; turn++) {
323
+ const result = await client.createChatCompletion({
324
+ model: 'qwen3-30b-a3b-gptq-int4',
325
+ messages,
326
+ tools,
327
+ tool_choice: 'auto',
328
+ tokenType: 'spark',
329
+ });
330
+
331
+ const toolCalls = result.tool_calls || [];
332
+ if (toolCalls.length === 0) {
333
+ console.log('Final answer:', result.content);
334
+ break;
335
+ }
336
+
337
+ messages.push({
338
+ role: 'assistant',
339
+ content: result.content || null,
340
+ tool_calls: toolCalls,
341
+ });
342
+
343
+ for (const toolCall of toolCalls) {
344
+ const args = JSON.parse(toolCall.function.arguments || '{}');
345
+ let output = { error: `Unknown tool: ${toolCall.function.name}` };
346
+
347
+ if (toolCall.function.name === 'add_numbers') {
348
+ const a = Number(args.a || 0);
349
+ const b = Number(args.b || 0);
350
+ output = { a, b, sum: a + b };
351
+ }
352
+
353
+ messages.push({
354
+ role: 'tool',
355
+ tool_call_id: toolCall.id,
356
+ name: toolCall.function.name,
357
+ content: JSON.stringify(output),
358
+ });
359
+ }
360
+ }
361
+ ```
362
+
363
+ ### Sogni Platform Tools (Image/Video/Audio via Chat)
364
+
365
+ The wrapper re-exports the SDK helpers for Sogni platform tool calling:
366
+
367
+ - `SogniTools` — the canonical 24-tool surface (use `SogniTools.all` for the full list)
368
+ - `isSogniToolCall()`
369
+ - `parseToolCallArguments()`
370
+
371
+ ```typescript
372
+ import { SogniTools } from '@sogni-ai/sogni-intelligence-client';
373
+
374
+ const result = await client.createChatCompletion({
375
+ model: 'qwen3-30b-a3b-gptq-int4',
376
+ messages: [{ role: 'user', content: 'Create a dramatic sunset image' }],
377
+ tools: SogniTools.all,
378
+ tool_choice: 'auto',
379
+ tokenType: 'spark',
380
+ });
381
+ ```
382
+
383
+ ### Vision Chat and Thinking Mode
384
+
385
+ ```typescript
386
+ const result = await client.createChatCompletion({
387
+ model: 'qwen3.5-35b-a3b-gguf-q4km',
388
+ messages: [
389
+ {
390
+ role: 'user',
391
+ content: [
392
+ { type: 'text', text: 'Describe the scene and read any visible text.' },
393
+ {
394
+ type: 'image_url',
395
+ image_url: {
396
+ url: 'https://example.com/photo.jpg',
397
+ detail: 'high',
398
+ },
399
+ },
400
+ ],
401
+ },
402
+ ],
403
+ think: false,
404
+ max_tokens: 300,
405
+ tokenType: 'spark',
406
+ });
407
+
408
+ console.log(result.content);
409
+ ```
410
+
411
+ ### Manual Chat Tool Execution
412
+
413
+ Useful for streaming or custom multi-round tool loops where you want the wrapper to execute returned Sogni tool calls directly.
414
+
415
+ ```typescript
416
+ const result = await client.createChatCompletion({
417
+ model: 'qwen3-30b-a3b-gptq-int4',
418
+ messages: [{ role: 'user', content: 'Generate a neon cyberpunk city image.' }],
419
+ tools: SogniTools.all,
420
+ tool_choice: 'auto',
421
+ tokenType: 'spark',
422
+ });
423
+
424
+ if (result.tool_calls?.length) {
425
+ const toolResults = await client.executeChatTools(result.tool_calls, {
426
+ tokenType: 'spark',
427
+ onToolProgress: (toolCall, progress) => {
428
+ console.log(toolCall.function.name, progress.status, progress.percent);
429
+ },
430
+ });
431
+
432
+ console.log(toolResults);
433
+ }
434
+ ```
435
+
436
+ ### Full LLM Examples
437
+
438
+ Run these scripts with `npx tsx`:
439
+
440
+ - `examples/llm-chat-basic.ts`
441
+ - `examples/llm-chat-streaming.ts`
442
+ - `examples/llm-chat-vision.ts --image ./photo.jpg`
443
+ - `examples/llm-tool-calling-custom.ts`
444
+ - `examples/llm-tool-calling-sogni-tools.ts` (supports `--dry-run`)
445
+
446
+ ## Image Editing with Context Images
447
+
448
+ The wrapper supports image editing using Qwen models that accept context images for multi-reference editing. This allows you to transform, combine, or edit images based on reference inputs.
449
+
450
+ ### Supported Models
451
+
452
+ | Model ID | Type | Recommended Steps | Max Context Images |
453
+ |----------|------|-------------------|-------------------|
454
+ | `qwen_image_edit_2511_fp8` | Standard | 20 | 3 |
455
+ | `qwen_image_edit_2511_fp8_lightning` | Fast | 4 | 3 |
456
+
457
+ ### Image Edit Example
458
+
459
+ ```typescript
460
+ import { readFileSync } from 'fs';
461
+
462
+ // Load your reference image(s)
463
+ const referenceImage = readFileSync('./my-image.png');
464
+
465
+ // Create an image edit project
466
+ const result = await client.createImageEditProject({
467
+ modelId: 'qwen_image_edit_2511_fp8',
468
+ positivePrompt: 'Transform the cat into a majestic lion',
469
+ contextImages: [referenceImage],
470
+ numberOfMedia: 1,
471
+ steps: 20,
472
+ guidance: 4.0,
473
+ });
474
+
475
+ console.log('Edited image URLs:', result.imageUrls);
476
+ ```
477
+
478
+ ### Using Multiple Context Images
479
+
480
+ Qwen models support up to 3 context images for complex editing operations:
481
+
482
+ ```typescript
483
+ const image1 = readFileSync('./subject.png');
484
+ const image2 = readFileSync('./style-reference.png');
485
+ const image3 = readFileSync('./background.png');
486
+
487
+ const result = await client.createImageEditProject({
488
+ modelId: 'qwen_image_edit_2511_fp8_lightning', // Fast variant
489
+ positivePrompt: 'Combine the subject with the style and background',
490
+ contextImages: [image1, image2, image3],
491
+ numberOfMedia: 1,
492
+ steps: 4, // Optimized for lightning variant
493
+ guidance: 1.0,
494
+ });
495
+ ```
496
+
497
+ ### Multiple Angles LoRA (Qwen Image Edit)
498
+
499
+ ```typescript
500
+ import { readFileSync } from 'fs';
501
+
502
+ const referenceImage = readFileSync('./subject.png');
503
+
504
+ const result = await client.createImageEditProject({
505
+ modelId: 'qwen_image_edit_2511_fp8_lightning',
506
+ positivePrompt: '<sks> front view eye-level shot medium shot',
507
+ contextImages: [referenceImage],
508
+ numberOfMedia: 1,
509
+ steps: 4,
510
+ guidance: 1.0,
511
+ sampler: 'euler',
512
+ scheduler: 'simple',
513
+ outputFormat: 'jpg',
514
+ loras: ['multiple_angles'],
515
+ loraStrengths: [0.9],
516
+ });
517
+
518
+ console.log('Generated images:', result.imageUrls);
519
+ ```
520
+
521
+ ### Context Image Types
522
+
523
+ The `contextImages` parameter accepts an array of `InputMedia` types:
524
+
525
+ - `Buffer` - Node.js Buffer containing image data
526
+ - `Blob` - Browser Blob object
527
+ - `File` - Browser File object
528
+ - `true` - Boolean indicating a pre-uploaded image
529
+
530
+ ### Helper Functions
531
+
532
+ The wrapper provides helper functions for working with context images:
533
+
534
+ ```typescript
535
+ import { getMaxContextImages, supportsContextImages } from '@sogni-ai/sogni-intelligence-client';
536
+
537
+ // Check if a model supports context images
538
+ if (supportsContextImages('qwen_image_edit_2511_fp8')) {
539
+ console.log('Model supports context images!');
540
+ }
541
+
542
+ // Get the maximum number of context images for a model
543
+ const maxImages = getMaxContextImages('qwen_image_edit_2511_fp8'); // Returns 3
544
+
545
+ // Other models have different limits:
546
+ getMaxContextImages('flux-1-schnell'); // Returns 6
547
+ getMaxContextImages('kontext-model'); // Returns 2
548
+ getMaxContextImages('sd-xl-base'); // Returns 0 (not supported)
549
+ ```
550
+
551
+ ## API Reference
552
+
553
+ ### `new SogniClientWrapper(config)`
554
+
555
+ Creates a new client instance.
556
+
557
+ **Configuration (`SogniClientConfig`)**
558
+
559
+ | Parameter | Type | Default | Description |
560
+ |---|---|---|---|
561
+ | `authType` | `'token' \| 'cookies' \| 'apiKey'` | `'token'` | Authentication mode. |
562
+ | `username` | `string` | Conditionally required | Required for `token` auth; optional for `cookies`/`apiKey`. |
563
+ | `password` | `string` | Conditionally required | Required for `token` auth; optional for `cookies`/`apiKey`. |
564
+ | `apiKey` | `string` | Conditionally required | Required for `apiKey` auth. |
565
+ | `appId` | `string` | Auto-generated UUID | Unique ID for your application. |
566
+ | `network` | `'fast' \| 'relaxed'` | `'fast'` | The Sogni network to use. |
567
+ | `testnet` | `boolean` | `false` | Connect to the testnet network. |
568
+ | `socketEndpoint` | `string` | `undefined` | Override the default WebSocket API endpoint. |
569
+ | `restEndpoint` | `string` | `undefined` | Override the default REST API endpoint. |
570
+ | `disableSocket` | `boolean` | `false` | Disable WebSocket connection (advanced/testing). |
571
+ | `allowInsecureTLS` | `boolean` | `false` | Allow insecure TLS (useful for testnet with self-signed certs). |
572
+ | `autoConnect` | `boolean` | `true` | Connect automatically on the first operation. |
573
+ | `reconnect` | `boolean` | `true` | Attempt to reconnect if the connection is lost. |
574
+ | `reconnectInterval` | `number` | `5000` | Time in ms between reconnect attempts. |
575
+ | `timeout` | `number` | `300000` | Default timeout in ms for operations. |
576
+ | `debug` | `boolean` | `false` | Enable detailed console logging. |
577
+
578
+ #### API Key Authentication Example
579
+
580
+ ```typescript
581
+ const client = new SogniClientWrapper({
582
+ authType: 'apiKey',
583
+ apiKey: process.env.SOGNI_API_KEY!,
584
+ network: 'fast',
585
+ });
586
+ ```
587
+
588
+ ### Core Methods
589
+
590
+ - `connect(): Promise<void>`: Manually initiates the connection to Sogni.
591
+ - `disconnect(): Promise<void>`: Disconnects the client.
592
+ - `isConnected(): boolean`: Checks if the client is currently connected.
593
+ - `getConnectionState(): ConnectionState`: Returns the current connection status.
594
+
595
+ ### Main Operations
596
+
597
+ - `createProject(config: ProjectConfig): Promise<ProjectResult>`: Creates a new image, video, or audio generation project.
598
+ - `waitForCompletion` (default: `true`): If true, the promise resolves only when the media is ready.
599
+ - For images: returns `imageUrls` in result
600
+ - For videos: returns `videoUrls` in result
601
+ - For audio: returns `audioUrls` in result
602
+ - `createImageProject(config)`: Convenience method for image generation (automatically sets `type: 'image'`).
603
+ - `createVideoProject(config)`: Convenience method for video generation (automatically sets `type: 'video'`).
604
+ - `createAudioProject(config)`: Convenience method for audio generation (automatically sets `type: 'audio'`).
605
+ - `createImageEditProject(config: QwenImageEditConfig)`: Convenience method for image editing with context images (validates model-specific limits).
606
+ - `getAvailableModels(options?: GetModelsOptions): Promise<ModelInfo[]>`: Retrieves a list of available models.
607
+ - `getModel(modelId: string): Promise<ModelInfo>`: Retrieves details for a specific model.
608
+ - `getMostPopularModel(): Promise<ModelInfo>`: A helper to get the model with the most active workers.
609
+ - `getBalance(): Promise<BalanceInfo>`: Fetches your current SOGNI and Spark token balances using the `account.refreshBalance()` method.
610
+ - `getWalletBalance(walletAddress?, provider?): Promise<WalletBalanceInfo>`: Fetches Base or Etherlink wallet balances. When `walletAddress` is omitted, the wrapper uses the connected account wallet.
611
+ - `getCurrentAccount(): CurrentAccount | null`: Returns the SDK's current account snapshot if the client has connected.
612
+ - `getTrackedProjects(): Project[]`: Returns the projects currently tracked by the underlying SDK instance.
613
+ - `getSizePresets(network: 'fast' \| 'relaxed', modelId: string): Promise<SizePreset[]>`: Gets available output size presets for a model.
614
+ - `estimateVideoCost(params: VideoCostEstimateParams): Promise<CostEstimate>`: Estimates video generation costs (frames/duration, fps, steps, size).
615
+ - `estimateAudioCost(params: AudioCostEstimateParams): Promise<CostEstimate>`: Estimates audio generation costs (duration, steps, count).
616
+ - `createChatCompletion(params)`: Creates chat completions (streaming or non-streaming, including `tools` / `tool_choice` function calling).
617
+ - `executeChatTool(toolCall, options?)`: Executes a single Sogni platform tool call returned by chat.
618
+ - `executeChatTools(toolCalls, options?)`: Executes multiple tool calls, including mixed Sogni/custom tool flows.
619
+ - `estimateChatCost(params)`: Estimates chat completion cost.
620
+ - `getAvailableChatModels()`: Returns available chat/LLM models.
621
+ - `waitForChatModels(timeout?)`: Waits until chat/LLM models are available.
622
+ - SDK helper exports: `ChatStream`, `ChatToolsApi`, `CurrentAccount`, `SogniTools`, `isSogniToolCall`, `parseToolCallArguments`.
623
+
624
+ ### Event Handling
625
+
626
+ The wrapper is an `EventEmitter` and provides type-safe events.
627
+
628
+ ```typescript
629
+ import { ClientEvent } from '@sogni-ai/sogni-intelligence-client';
630
+
631
+ client.on(ClientEvent.CONNECTED, () => {
632
+ console.log('Client is connected!');
633
+ });
634
+
635
+ client.on(ClientEvent.PROJECT_PROGRESS, (progress) => {
636
+ console.log(`Project ${progress.projectId} is ${progress.percentage}% complete.`);
637
+ if (progress.estimatedTimeRemaining) {
638
+ console.log(`ETA: ${Math.round(progress.estimatedTimeRemaining / 1000)}s`);
639
+ }
640
+ });
641
+
642
+ client.on(ClientEvent.ERROR, (error) => {
643
+ console.error('A client error occurred:', error.message);
644
+ });
645
+
646
+ // Per-media events - Display outputs as soon as they're ready!
647
+ client.on(ClientEvent.JOB_COMPLETED, (data) => {
648
+ console.log(`Job ${data.jobIndex + 1}/${data.totalJobs} completed!`);
649
+ console.log(`URL: ${data.imageUrl || data.videoUrl || data.audioUrl}`);
650
+ // You can now handle this individual output without waiting for the entire batch
651
+ });
652
+
653
+ client.on(ClientEvent.JOB_FAILED, (data) => {
654
+ console.log(`Job ${data.jobIndex + 1}/${data.totalJobs} failed:`, data.error);
655
+ });
656
+ ```
657
+
658
+ #### Available Events
659
+
660
+ | Event | Payload | Description |
661
+ |---|---|---|
662
+ | `connected` | `void` | Fired when the client successfully connects. |
663
+ | `disconnected` | `void` | Fired when the client disconnects. |
664
+ | `reconnecting` | `number` | Fired when a reconnection attempt starts. Payload is the attempt number. |
665
+ | `error` | `ErrorData` | Fired when a client or connection error occurs. |
666
+ | `projectProgress` | `ProjectProgress` | Fired with real-time progress updates for a project. |
667
+ | `projectCompleted` | `ProjectResult` | Fired when a project successfully completes. |
668
+ | `projectFailed` | `ErrorData` | Fired when a project fails. |
669
+ | **`jobCompleted`** | **`JobCompletedData`** | **Fired when an individual job finishes (image/video/audio).** |
670
+ | **`jobFailed`** | **`JobFailedData`** | **Fired when an individual job fails.** |
671
+ | `projectEvent` | `ProjectEvent` | Raw project events from the SDK (`queued`, `completed`, `error`). |
672
+ | `jobEvent` | `JobEvent` | Raw job events from the SDK (includes `jobETA`, `started`, `progress`, etc). |
673
+ | `chatToken` | `ChatCompletionChunk` | Fired for each streaming chat token chunk. |
674
+ | `chatCompleted` | `ChatCompletionResult` | Fired when a chat completion finishes. |
675
+ | `chatError` | `ChatErrorData` | Fired when a chat completion fails. |
676
+ | `chatJobState` | `ChatJobStateEvent` | Fired on chat job state transitions. |
677
+ | `chatModelsUpdated` | `Record<string, LLMModelInfo>` | Fired when available chat models are updated. |
678
+
679
+ #### Per-Job Event Example
680
+
681
+ Perfect for displaying batch outputs immediately as they complete:
682
+
683
+ ```typescript
684
+ const client = new SogniClientWrapper({
685
+ username: process.env.SOGNI_USERNAME!,
686
+ password: process.env.SOGNI_PASSWORD!,
687
+ });
688
+
689
+ // Listen for individual image completions
690
+ client.on(ClientEvent.JOB_COMPLETED, (data) => {
691
+ console.log(`✓ Image ${data.jobIndex + 1} of ${data.totalJobs} ready!`);
692
+ console.log(` URL: ${data.imageUrl}`);
693
+ // Display the image in your UI immediately
694
+ displayImage(data.imageUrl);
695
+ });
696
+
697
+ // Generate a batch of images
698
+ const result = await client.createProject({
699
+ type: 'image',
700
+ modelId: 'flux1-schnell-fp8',
701
+ positivePrompt: 'A beautiful landscape',
702
+ numberOfMedia: 4, // Generate 4 images
703
+ steps: 4,
704
+ guidance: 3.5,
705
+ });
706
+
707
+ // All 4 images will be displayed as they complete, not all at once!
708
+ ```
709
+
710
+ ## Error Handling
711
+
712
+ The library throws custom errors that extend `SogniError`. This allows you to catch specific types of errors.
713
+
714
+ - `SogniConnectionError`: Issues with connecting to the WebSocket server.
715
+ - `SogniAuthenticationError`: Invalid credentials (username/password, cookie session, or API key).
716
+ - `SogniProjectError`: The image generation project failed.
717
+ - `SogniTimeoutError`: An operation took longer than the configured timeout.
718
+ - `SogniValidationError`: Invalid configuration or parameters.
719
+ - `SogniBalanceError`: Insufficient token balance.
720
+
721
+ ```typescript
722
+ import { SogniAuthenticationError, SogniProjectError } from '@sogni-ai/sogni-intelligence-client';
723
+
724
+ try {
725
+ // ... your code
726
+ } catch (error) {
727
+ if (error instanceof SogniAuthenticationError) {
728
+ console.error('Please check your credentials.');
729
+ } else if (error instanceof SogniProjectError) {
730
+ console.error('The image generation failed. Please try a different prompt or model.');
731
+ } else {
732
+ console.error('An unknown error occurred:', error);
733
+ }
734
+ }
735
+ ```
736
+
737
+ ## Testing
738
+
739
+ The library includes basic unit tests, example type-checking, and end-to-end tests.
740
+
741
+ ### Running Tests
742
+
743
+ ```bash
744
+ # Run basic unit tests (no credentials required)
745
+ npm test
746
+
747
+ # Type-check all example scripts (including LLM/tool-calling examples)
748
+ npm run test:examples
749
+
750
+ # Run end-to-end tests (requires Sogni API credentials)
751
+ npm run test:e2e
752
+
753
+ # Run only LLM/tool-calling e2e tests
754
+ npm run test:e2e:llm
755
+
756
+ # Run all tests
757
+ npm run test:all
758
+ ```
759
+
760
+ ### Setting Up End-to-End Tests
761
+
762
+ To run the end-to-end tests, you need to provide your Sogni API credentials via environment variables:
763
+
764
+ 1. Copy the example environment file:
765
+ ```bash
766
+ cp .env.example .env
767
+ ```
768
+
769
+ 2. Edit `.env` and add your Sogni credentials:
770
+ ```env
771
+ SOGNI_USERNAME=your_sogni_username
772
+ SOGNI_PASSWORD=your_sogni_password
773
+ # Optional: force a specific chat/LLM model for e2e tests
774
+ # SOGNI_LLM_MODEL=qwen3-30b-a3b-gptq-int4
775
+ # Optional: fail suite if LLM tests cannot run (default: skip LLM tests if unavailable)
776
+ # SOGNI_REQUIRE_LLM_E2E=true
777
+ # Optional: fail suite if tool-calling tests cannot get tool_calls
778
+ # SOGNI_REQUIRE_TOOL_CALL_E2E=true
779
+ # Optional: run only LLM/tool-calling e2e tests
780
+ # SOGNI_E2E_SCOPE=llm
781
+ ```
782
+
783
+ 3. Run the e2e tests:
784
+ ```bash
785
+ npm run test:e2e
786
+ ```
787
+
788
+ **Note:** The e2e tests make real API calls and may consume tokens from your Sogni account. They include image/video generation and live LLM chat calls.
789
+
790
+ ## TypeScript
791
+
792
+ This library is written in TypeScript and exports all necessary types for a fully-typed experience.
793
+
794
+ - `SogniClientConfig`: Configuration for the client constructor.
795
+ - `ProjectConfig`: Parameters for creating a project (union of `ImageProjectConfig`, `VideoProjectConfig`, and `AudioProjectConfig`).
796
+ - `ImageProjectConfig`: Parameters specific to image generation.
797
+ - `VideoProjectConfig`: Parameters specific to video generation.
798
+ - `AudioProjectConfig`: Parameters specific to audio generation.
799
+ - `QwenImageEditConfig`: Parameters for image editing with context images.
800
+ - `InputMedia`: Type for media inputs (`File | Buffer | Blob | boolean`).
801
+ - `ProjectResult`: The return type for a completed project.
802
+ - `VideoCostEstimateParams`: Parameters for estimating video cost.
803
+ - `AudioCostEstimateParams`: Parameters for estimating audio cost.
804
+ - `CostEstimate`: Cost estimate response shape.
805
+ - `ModelInfo`: Detailed information about an available model.
806
+ - `BalanceInfo`: Your token balance.
807
+ - `ErrorData`: The structure of error objects.
808
+ - `VideoWorkflowType`: Video generation workflow types (`t2v`, `i2v`, `s2v`, `ia2v`, `a2v`, `v2v`, `animate-move`, `animate-replace`).
809
+ - `JobCompletedData`: Data emitted when an individual job completes.
810
+ - `JobFailedData`: Data emitted when an individual job fails.
811
+ - `ChatCompletionParams` / `ChatCompletionResult` / `ChatCompletionChunk`: Types for chat completions.
812
+ - `ContentPart` / `ImageUrlContentPart`: Types for multimodal chat content.
813
+ - `ToolDefinition` / `ToolChoice` / `ToolCall` / `ToolCallDelta`: Types for LLM tool/function calling.
814
+ - `ToolExecutionOptions` / `ToolExecutionProgress` / `ToolExecutionResult` / `ToolHistoryEntry`: Types for manual or automatic chat tool execution.
815
+ - `LLMModelInfo` / `LLMCostEstimation`: Types for chat model metadata and cost estimates.
816
+ - `WalletBalanceInfo`: Wallet balance response shape for Base/Etherlink lookups.
817
+ - `SogniTools` / `isSogniToolCall` / `parseToolCallArguments`: Helper exports for platform tool calling workflows.
818
+ - `ProjectEvent`: Raw project events from the SDK.
819
+ - `JobEvent`: Raw job events from the SDK (includes ETA updates).
820
+
821
+ ## License
822
+
823
+ [MIT](LICENSE)