@juspay/neurolink 9.64.0 → 9.65.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (324) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +18 -17
  3. package/dist/adapters/providerImageAdapter.js +29 -1
  4. package/dist/adapters/replicate/auth.d.ts +19 -0
  5. package/dist/adapters/replicate/auth.js +32 -0
  6. package/dist/adapters/replicate/predictionLifecycle.d.ts +46 -0
  7. package/dist/adapters/replicate/predictionLifecycle.js +283 -0
  8. package/dist/adapters/video/klingVideoHandler.d.ts +37 -0
  9. package/dist/adapters/video/klingVideoHandler.js +305 -0
  10. package/dist/adapters/video/replicateVideoHandler.d.ts +29 -0
  11. package/dist/adapters/video/replicateVideoHandler.js +157 -0
  12. package/dist/adapters/video/runwayVideoHandler.d.ts +32 -0
  13. package/dist/adapters/video/runwayVideoHandler.js +316 -0
  14. package/dist/adapters/video/vertexVideoHandler.d.ts +19 -1
  15. package/dist/adapters/video/vertexVideoHandler.js +33 -9
  16. package/dist/agent/directTools.js +11 -3
  17. package/dist/autoresearch/runner.js +8 -2
  18. package/dist/avatar/index.d.ts +13 -0
  19. package/dist/avatar/index.js +13 -0
  20. package/dist/avatar/providers/DIDAvatar.d.ts +49 -0
  21. package/dist/avatar/providers/DIDAvatar.js +501 -0
  22. package/dist/avatar/providers/HeyGenAvatar.d.ts +30 -0
  23. package/dist/avatar/providers/HeyGenAvatar.js +337 -0
  24. package/dist/avatar/providers/ReplicateAvatar.d.ts +36 -0
  25. package/dist/avatar/providers/ReplicateAvatar.js +267 -0
  26. package/dist/browser/neurolink.min.js +624 -601
  27. package/dist/cli/commands/mcp.js +29 -0
  28. package/dist/cli/commands/proxy.js +24 -5
  29. package/dist/cli/factories/commandFactory.d.ts +11 -1
  30. package/dist/cli/factories/commandFactory.js +291 -38
  31. package/dist/constants/contextWindows.js +101 -0
  32. package/dist/constants/enums.d.ts +273 -2
  33. package/dist/constants/enums.js +290 -1
  34. package/dist/constants/videoErrors.d.ts +4 -0
  35. package/dist/constants/videoErrors.js +4 -0
  36. package/dist/core/baseProvider.d.ts +22 -2
  37. package/dist/core/baseProvider.js +217 -11
  38. package/dist/core/constants.d.ts +12 -0
  39. package/dist/core/constants.js +72 -1
  40. package/dist/evaluation/index.d.ts +2 -0
  41. package/dist/evaluation/index.js +4 -0
  42. package/dist/factories/providerFactory.js +7 -1
  43. package/dist/factories/providerRegistry.js +202 -5
  44. package/dist/features/ppt/contentPlanner.js +42 -14
  45. package/dist/index.d.ts +9 -1
  46. package/dist/index.js +16 -1
  47. package/dist/lib/adapters/providerImageAdapter.js +29 -1
  48. package/dist/lib/adapters/replicate/auth.d.ts +19 -0
  49. package/dist/lib/adapters/replicate/auth.js +33 -0
  50. package/dist/lib/adapters/replicate/predictionLifecycle.d.ts +46 -0
  51. package/dist/lib/adapters/replicate/predictionLifecycle.js +284 -0
  52. package/dist/lib/adapters/video/klingVideoHandler.d.ts +37 -0
  53. package/dist/lib/adapters/video/klingVideoHandler.js +306 -0
  54. package/dist/lib/adapters/video/replicateVideoHandler.d.ts +29 -0
  55. package/dist/lib/adapters/video/replicateVideoHandler.js +158 -0
  56. package/dist/lib/adapters/video/runwayVideoHandler.d.ts +32 -0
  57. package/dist/lib/adapters/video/runwayVideoHandler.js +317 -0
  58. package/dist/lib/adapters/video/vertexVideoHandler.d.ts +19 -1
  59. package/dist/lib/adapters/video/vertexVideoHandler.js +33 -9
  60. package/dist/lib/agent/directTools.js +11 -3
  61. package/dist/lib/autoresearch/runner.js +8 -2
  62. package/dist/lib/avatar/index.d.ts +13 -0
  63. package/dist/lib/avatar/index.js +14 -0
  64. package/dist/lib/avatar/providers/DIDAvatar.d.ts +49 -0
  65. package/dist/lib/avatar/providers/DIDAvatar.js +502 -0
  66. package/dist/lib/avatar/providers/HeyGenAvatar.d.ts +30 -0
  67. package/dist/lib/avatar/providers/HeyGenAvatar.js +338 -0
  68. package/dist/lib/avatar/providers/ReplicateAvatar.d.ts +36 -0
  69. package/dist/lib/avatar/providers/ReplicateAvatar.js +268 -0
  70. package/dist/lib/constants/contextWindows.js +101 -0
  71. package/dist/lib/constants/enums.d.ts +273 -2
  72. package/dist/lib/constants/enums.js +290 -1
  73. package/dist/lib/constants/videoErrors.d.ts +4 -0
  74. package/dist/lib/constants/videoErrors.js +4 -0
  75. package/dist/lib/core/baseProvider.d.ts +22 -2
  76. package/dist/lib/core/baseProvider.js +217 -11
  77. package/dist/lib/core/constants.d.ts +12 -0
  78. package/dist/lib/core/constants.js +72 -1
  79. package/dist/lib/evaluation/index.d.ts +2 -0
  80. package/dist/lib/evaluation/index.js +4 -0
  81. package/dist/lib/factories/providerFactory.js +7 -1
  82. package/dist/lib/factories/providerRegistry.js +202 -5
  83. package/dist/lib/features/ppt/contentPlanner.js +42 -14
  84. package/dist/lib/index.d.ts +9 -1
  85. package/dist/lib/index.js +16 -1
  86. package/dist/lib/middleware/builtin/lifecycle.js +39 -9
  87. package/dist/lib/music/index.d.ts +13 -0
  88. package/dist/lib/music/index.js +14 -0
  89. package/dist/lib/music/providers/BeatovenMusic.d.ts +31 -0
  90. package/dist/lib/music/providers/BeatovenMusic.js +334 -0
  91. package/dist/lib/music/providers/ElevenLabsMusic.d.ts +30 -0
  92. package/dist/lib/music/providers/ElevenLabsMusic.js +169 -0
  93. package/dist/lib/music/providers/LyriaMusic.d.ts +29 -0
  94. package/dist/lib/music/providers/LyriaMusic.js +173 -0
  95. package/dist/lib/music/providers/ReplicateMusic.d.ts +31 -0
  96. package/dist/lib/music/providers/ReplicateMusic.js +262 -0
  97. package/dist/lib/neurolink.d.ts +30 -0
  98. package/dist/lib/neurolink.js +323 -77
  99. package/dist/lib/providers/amazonBedrock.d.ts +10 -0
  100. package/dist/lib/providers/amazonBedrock.js +94 -39
  101. package/dist/lib/providers/anthropic.js +55 -7
  102. package/dist/lib/providers/anthropicBaseProvider.js +1 -1
  103. package/dist/lib/providers/azureOpenai.js +66 -17
  104. package/dist/lib/providers/cloudflare.d.ts +35 -0
  105. package/dist/lib/providers/cloudflare.js +174 -0
  106. package/dist/lib/providers/cohere.d.ts +52 -0
  107. package/dist/lib/providers/cohere.js +253 -0
  108. package/dist/lib/providers/deepseek.js +72 -17
  109. package/dist/lib/providers/fireworks.d.ts +33 -0
  110. package/dist/lib/providers/fireworks.js +164 -0
  111. package/dist/lib/providers/googleAiStudio.js +126 -10
  112. package/dist/lib/providers/googleNativeGemini3.d.ts +26 -6
  113. package/dist/lib/providers/googleNativeGemini3.js +276 -29
  114. package/dist/lib/providers/googleVertex.js +639 -181
  115. package/dist/lib/providers/groq.d.ts +33 -0
  116. package/dist/lib/providers/groq.js +181 -0
  117. package/dist/lib/providers/huggingFace.js +9 -8
  118. package/dist/lib/providers/ideogram.d.ts +34 -0
  119. package/dist/lib/providers/ideogram.js +184 -0
  120. package/dist/lib/providers/index.d.ts +13 -0
  121. package/dist/lib/providers/index.js +13 -0
  122. package/dist/lib/providers/jina.d.ts +59 -0
  123. package/dist/lib/providers/jina.js +218 -0
  124. package/dist/lib/providers/llamaCpp.js +14 -46
  125. package/dist/lib/providers/lmStudio.js +14 -47
  126. package/dist/lib/providers/mistral.js +7 -7
  127. package/dist/lib/providers/nvidiaNim.js +160 -19
  128. package/dist/lib/providers/ollama.js +7 -7
  129. package/dist/lib/providers/openAI.d.ts +22 -1
  130. package/dist/lib/providers/openAI.js +181 -0
  131. package/dist/lib/providers/openRouter.js +35 -23
  132. package/dist/lib/providers/openaiCompatible.js +9 -8
  133. package/dist/lib/providers/perplexity.d.ts +33 -0
  134. package/dist/lib/providers/perplexity.js +179 -0
  135. package/dist/lib/providers/recraft.d.ts +34 -0
  136. package/dist/lib/providers/recraft.js +197 -0
  137. package/dist/lib/providers/replicate.d.ts +75 -0
  138. package/dist/lib/providers/replicate.js +403 -0
  139. package/dist/lib/providers/stability.d.ts +37 -0
  140. package/dist/lib/providers/stability.js +191 -0
  141. package/dist/lib/providers/togetherAi.d.ts +33 -0
  142. package/dist/lib/providers/togetherAi.js +176 -0
  143. package/dist/lib/providers/voyage.d.ts +47 -0
  144. package/dist/lib/providers/voyage.js +177 -0
  145. package/dist/lib/providers/xai.d.ts +33 -0
  146. package/dist/lib/providers/xai.js +172 -0
  147. package/dist/lib/telemetry/index.d.ts +1 -1
  148. package/dist/lib/telemetry/index.js +1 -1
  149. package/dist/lib/telemetry/tracers.d.ts +19 -0
  150. package/dist/lib/telemetry/tracers.js +19 -0
  151. package/dist/lib/telemetry/withSpan.d.ts +35 -0
  152. package/dist/lib/telemetry/withSpan.js +103 -0
  153. package/dist/lib/types/avatar.d.ts +143 -0
  154. package/dist/lib/types/avatar.js +20 -0
  155. package/dist/lib/types/cli.d.ts +6 -0
  156. package/dist/lib/types/conversation.d.ts +16 -0
  157. package/dist/lib/types/generate.d.ts +62 -5
  158. package/dist/lib/types/index.d.ts +5 -0
  159. package/dist/lib/types/index.js +7 -0
  160. package/dist/lib/types/middleware.d.ts +27 -0
  161. package/dist/lib/types/multimodal.d.ts +35 -2
  162. package/dist/lib/types/music.d.ts +165 -0
  163. package/dist/lib/types/music.js +21 -0
  164. package/dist/lib/types/providers.d.ts +144 -1
  165. package/dist/lib/types/replicate.d.ts +67 -0
  166. package/dist/lib/types/replicate.js +10 -0
  167. package/dist/lib/types/safeFetch.d.ts +15 -0
  168. package/dist/lib/types/safeFetch.js +7 -0
  169. package/dist/lib/types/stream.d.ts +2 -1
  170. package/dist/lib/types/tools.d.ts +13 -0
  171. package/dist/lib/types/video.d.ts +89 -0
  172. package/dist/lib/types/video.js +15 -0
  173. package/dist/lib/utils/avatarProcessor.d.ts +68 -0
  174. package/dist/lib/utils/avatarProcessor.js +172 -0
  175. package/dist/lib/utils/cloneOptions.d.ts +36 -0
  176. package/dist/lib/utils/cloneOptions.js +62 -0
  177. package/dist/lib/utils/lifecycleCallbacks.d.ts +51 -8
  178. package/dist/lib/utils/lifecycleCallbacks.js +82 -26
  179. package/dist/lib/utils/lifecycleTimeout.d.ts +25 -0
  180. package/dist/lib/utils/lifecycleTimeout.js +39 -0
  181. package/dist/lib/utils/logSanitize.d.ts +49 -0
  182. package/dist/lib/utils/logSanitize.js +170 -0
  183. package/dist/lib/utils/loggingFetch.d.ts +29 -0
  184. package/dist/lib/utils/loggingFetch.js +60 -0
  185. package/dist/lib/utils/messageBuilder.js +43 -25
  186. package/dist/lib/utils/modelChoices.js +236 -3
  187. package/dist/lib/utils/musicProcessor.d.ts +67 -0
  188. package/dist/lib/utils/musicProcessor.js +189 -0
  189. package/dist/lib/utils/optionsConversion.js +3 -2
  190. package/dist/lib/utils/parameterValidation.js +14 -4
  191. package/dist/lib/utils/pricing.js +193 -0
  192. package/dist/lib/utils/providerConfig.d.ts +55 -0
  193. package/dist/lib/utils/providerConfig.js +224 -0
  194. package/dist/lib/utils/safeFetch.d.ts +26 -0
  195. package/dist/lib/utils/safeFetch.js +83 -0
  196. package/dist/lib/utils/sizeGuard.d.ts +34 -0
  197. package/dist/lib/utils/sizeGuard.js +45 -0
  198. package/dist/lib/utils/ssrfGuard.d.ts +52 -0
  199. package/dist/lib/utils/ssrfGuard.js +411 -0
  200. package/dist/lib/utils/videoProcessor.d.ts +60 -0
  201. package/dist/lib/utils/videoProcessor.js +201 -0
  202. package/dist/lib/voice/providers/FishAudioTTS.d.ts +27 -0
  203. package/dist/lib/voice/providers/FishAudioTTS.js +183 -0
  204. package/dist/lib/workflow/core/ensembleExecutor.js +26 -9
  205. package/dist/middleware/builtin/lifecycle.js +39 -9
  206. package/dist/music/index.d.ts +13 -0
  207. package/dist/music/index.js +13 -0
  208. package/dist/music/providers/BeatovenMusic.d.ts +31 -0
  209. package/dist/music/providers/BeatovenMusic.js +333 -0
  210. package/dist/music/providers/ElevenLabsMusic.d.ts +30 -0
  211. package/dist/music/providers/ElevenLabsMusic.js +168 -0
  212. package/dist/music/providers/LyriaMusic.d.ts +29 -0
  213. package/dist/music/providers/LyriaMusic.js +172 -0
  214. package/dist/music/providers/ReplicateMusic.d.ts +31 -0
  215. package/dist/music/providers/ReplicateMusic.js +261 -0
  216. package/dist/neurolink.d.ts +30 -0
  217. package/dist/neurolink.js +323 -77
  218. package/dist/providers/amazonBedrock.d.ts +10 -0
  219. package/dist/providers/amazonBedrock.js +94 -39
  220. package/dist/providers/anthropic.js +55 -7
  221. package/dist/providers/anthropicBaseProvider.js +1 -1
  222. package/dist/providers/azureOpenai.js +66 -17
  223. package/dist/providers/cloudflare.d.ts +35 -0
  224. package/dist/providers/cloudflare.js +173 -0
  225. package/dist/providers/cohere.d.ts +52 -0
  226. package/dist/providers/cohere.js +252 -0
  227. package/dist/providers/deepseek.js +72 -17
  228. package/dist/providers/fireworks.d.ts +33 -0
  229. package/dist/providers/fireworks.js +163 -0
  230. package/dist/providers/googleAiStudio.js +126 -10
  231. package/dist/providers/googleNativeGemini3.d.ts +26 -6
  232. package/dist/providers/googleNativeGemini3.js +276 -29
  233. package/dist/providers/googleVertex.js +639 -181
  234. package/dist/providers/groq.d.ts +33 -0
  235. package/dist/providers/groq.js +180 -0
  236. package/dist/providers/huggingFace.js +9 -8
  237. package/dist/providers/ideogram.d.ts +34 -0
  238. package/dist/providers/ideogram.js +183 -0
  239. package/dist/providers/index.d.ts +13 -0
  240. package/dist/providers/index.js +13 -0
  241. package/dist/providers/jina.d.ts +59 -0
  242. package/dist/providers/jina.js +217 -0
  243. package/dist/providers/llamaCpp.js +14 -46
  244. package/dist/providers/lmStudio.js +14 -47
  245. package/dist/providers/mistral.js +7 -7
  246. package/dist/providers/nvidiaNim.js +160 -19
  247. package/dist/providers/ollama.js +7 -7
  248. package/dist/providers/openAI.d.ts +22 -1
  249. package/dist/providers/openAI.js +181 -0
  250. package/dist/providers/openRouter.js +35 -23
  251. package/dist/providers/openaiCompatible.js +9 -8
  252. package/dist/providers/perplexity.d.ts +33 -0
  253. package/dist/providers/perplexity.js +178 -0
  254. package/dist/providers/recraft.d.ts +34 -0
  255. package/dist/providers/recraft.js +196 -0
  256. package/dist/providers/replicate.d.ts +75 -0
  257. package/dist/providers/replicate.js +402 -0
  258. package/dist/providers/stability.d.ts +37 -0
  259. package/dist/providers/stability.js +190 -0
  260. package/dist/providers/togetherAi.d.ts +33 -0
  261. package/dist/providers/togetherAi.js +175 -0
  262. package/dist/providers/voyage.d.ts +47 -0
  263. package/dist/providers/voyage.js +176 -0
  264. package/dist/providers/xai.d.ts +33 -0
  265. package/dist/providers/xai.js +171 -0
  266. package/dist/telemetry/index.d.ts +1 -1
  267. package/dist/telemetry/index.js +1 -1
  268. package/dist/telemetry/tracers.d.ts +19 -0
  269. package/dist/telemetry/tracers.js +19 -0
  270. package/dist/telemetry/withSpan.d.ts +35 -0
  271. package/dist/telemetry/withSpan.js +103 -0
  272. package/dist/types/avatar.d.ts +143 -0
  273. package/dist/types/avatar.js +19 -0
  274. package/dist/types/cli.d.ts +6 -0
  275. package/dist/types/conversation.d.ts +16 -0
  276. package/dist/types/generate.d.ts +62 -5
  277. package/dist/types/index.d.ts +5 -0
  278. package/dist/types/index.js +7 -0
  279. package/dist/types/middleware.d.ts +27 -0
  280. package/dist/types/multimodal.d.ts +35 -2
  281. package/dist/types/music.d.ts +165 -0
  282. package/dist/types/music.js +20 -0
  283. package/dist/types/providers.d.ts +144 -1
  284. package/dist/types/replicate.d.ts +67 -0
  285. package/dist/types/replicate.js +9 -0
  286. package/dist/types/safeFetch.d.ts +15 -0
  287. package/dist/types/safeFetch.js +6 -0
  288. package/dist/types/stream.d.ts +2 -1
  289. package/dist/types/tools.d.ts +13 -0
  290. package/dist/types/video.d.ts +89 -0
  291. package/dist/types/video.js +14 -0
  292. package/dist/utils/avatarProcessor.d.ts +68 -0
  293. package/dist/utils/avatarProcessor.js +171 -0
  294. package/dist/utils/cloneOptions.d.ts +36 -0
  295. package/dist/utils/cloneOptions.js +61 -0
  296. package/dist/utils/lifecycleCallbacks.d.ts +51 -8
  297. package/dist/utils/lifecycleCallbacks.js +82 -26
  298. package/dist/utils/lifecycleTimeout.d.ts +25 -0
  299. package/dist/utils/lifecycleTimeout.js +38 -0
  300. package/dist/utils/logSanitize.d.ts +49 -0
  301. package/dist/utils/logSanitize.js +169 -0
  302. package/dist/utils/loggingFetch.d.ts +29 -0
  303. package/dist/utils/loggingFetch.js +59 -0
  304. package/dist/utils/messageBuilder.js +43 -25
  305. package/dist/utils/modelChoices.js +236 -3
  306. package/dist/utils/musicProcessor.d.ts +67 -0
  307. package/dist/utils/musicProcessor.js +188 -0
  308. package/dist/utils/optionsConversion.js +3 -2
  309. package/dist/utils/parameterValidation.js +14 -4
  310. package/dist/utils/pricing.js +193 -0
  311. package/dist/utils/providerConfig.d.ts +55 -0
  312. package/dist/utils/providerConfig.js +224 -0
  313. package/dist/utils/safeFetch.d.ts +26 -0
  314. package/dist/utils/safeFetch.js +82 -0
  315. package/dist/utils/sizeGuard.d.ts +34 -0
  316. package/dist/utils/sizeGuard.js +44 -0
  317. package/dist/utils/ssrfGuard.d.ts +52 -0
  318. package/dist/utils/ssrfGuard.js +410 -0
  319. package/dist/utils/videoProcessor.d.ts +60 -0
  320. package/dist/utils/videoProcessor.js +200 -0
  321. package/dist/voice/providers/FishAudioTTS.d.ts +27 -0
  322. package/dist/voice/providers/FishAudioTTS.js +182 -0
  323. package/dist/workflow/core/ensembleExecutor.js +26 -9
  324. package/package.json +32 -5
@@ -0,0 +1,33 @@
1
+ import { type LanguageModel } from "ai";
2
+ import type { AIProviderName } from "../constants/enums.js";
3
+ import { BaseProvider } from "../core/baseProvider.js";
4
+ import type { NeurolinkCredentials, StreamOptions, StreamResult, ValidationSchema } from "../types/index.js";
5
+ /**
6
+ * Groq Provider
7
+ *
8
+ * Sub-100ms inference of Llama / Mistral / Gemma at api.groq.com/openai/v1
9
+ * (OpenAI-compatible). Best for low-latency tier; trade-off vs other open
10
+ * model hosts is throughput latency, not quality.
11
+ *
12
+ * @see https://console.groq.com/docs/quickstart
13
+ */
14
+ export declare class GroqProvider extends BaseProvider {
15
+ private model;
16
+ private apiKey;
17
+ private baseURL;
18
+ constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["groq"]);
19
+ protected executeStream(options: StreamOptions, _analysisSchema?: ValidationSchema): Promise<StreamResult>;
20
+ private executeStreamInner;
21
+ protected getProviderName(): AIProviderName;
22
+ protected getDefaultModel(): string;
23
+ protected getAISDKModel(): LanguageModel;
24
+ protected formatProviderError(error: unknown): Error;
25
+ validateConfiguration(): Promise<boolean>;
26
+ getConfiguration(): {
27
+ provider: AIProviderName;
28
+ model: string;
29
+ defaultModel: string;
30
+ baseURL: string;
31
+ };
32
+ }
33
+ export default GroqProvider;
@@ -0,0 +1,180 @@
1
+ import { createOpenAI } from "@ai-sdk/openai";
2
+ import { stepCountIs, streamText } from "ai";
3
+ import { GroqModels } from "../constants/enums.js";
4
+ import { BaseProvider } from "../core/baseProvider.js";
5
+ import { DEFAULT_MAX_STEPS } from "../core/constants.js";
6
+ import { streamAnalyticsCollector } from "../core/streamAnalytics.js";
7
+ import { isNeuroLink } from "../neurolink.js";
8
+ import { createLoggingFetch } from "../utils/loggingFetch.js";
9
+ import { tracers, ATTR, withClientStreamSpan } from "../telemetry/index.js";
10
+ import { AuthenticationError, InvalidModelError, ProviderError, RateLimitError, } from "../types/index.js";
11
+ import { logger } from "../utils/logger.js";
12
+ import { createGroqConfig, getProviderModel, validateApiKey, } from "../utils/providerConfig.js";
13
+ import { composeAbortSignals, createTimeoutController, TimeoutError, } from "../utils/timeout.js";
14
+ import { emitToolEndFromStepFinish } from "../utils/toolEndEmitter.js";
15
+ import { resolveToolChoice } from "../utils/toolChoice.js";
16
+ import { toAnalyticsStreamResult } from "./providerTypeUtils.js";
17
+ const GROQ_DEFAULT_BASE_URL = "https://api.groq.com/openai/v1";
18
+ const getGroqApiKey = () => validateApiKey(createGroqConfig());
19
+ const getDefaultGroqModel = () => getProviderModel("GROQ_MODEL", GroqModels.LLAMA_3_3_70B_VERSATILE);
20
+ /**
21
+ * Groq Provider
22
+ *
23
+ * Sub-100ms inference of Llama / Mistral / Gemma at api.groq.com/openai/v1
24
+ * (OpenAI-compatible). Best for low-latency tier; trade-off vs other open
25
+ * model hosts is throughput latency, not quality.
26
+ *
27
+ * @see https://console.groq.com/docs/quickstart
28
+ */
29
+ export class GroqProvider extends BaseProvider {
30
+ model;
31
+ apiKey;
32
+ baseURL;
33
+ constructor(modelName, sdk, _region, credentials) {
34
+ const validatedNeurolink = isNeuroLink(sdk) ? sdk : undefined;
35
+ super(modelName, "groq", validatedNeurolink);
36
+ const overrideApiKey = credentials?.apiKey?.trim();
37
+ this.apiKey =
38
+ overrideApiKey && overrideApiKey.length > 0
39
+ ? overrideApiKey
40
+ : getGroqApiKey();
41
+ this.baseURL =
42
+ credentials?.baseURL ??
43
+ process.env.GROQ_BASE_URL ??
44
+ GROQ_DEFAULT_BASE_URL;
45
+ const groq = createOpenAI({
46
+ apiKey: this.apiKey,
47
+ baseURL: this.baseURL,
48
+ fetch: createLoggingFetch("groq"),
49
+ });
50
+ this.model = groq.chat(this.modelName);
51
+ logger.debug("Groq Provider initialized", {
52
+ modelName: this.modelName,
53
+ providerName: this.providerName,
54
+ baseURL: this.baseURL,
55
+ });
56
+ }
57
+ async executeStream(options, _analysisSchema) {
58
+ return withClientStreamSpan({
59
+ name: "neurolink.provider.stream",
60
+ tracer: tracers.provider,
61
+ attributes: {
62
+ [ATTR.GEN_AI_SYSTEM]: "groq",
63
+ [ATTR.GEN_AI_MODEL]: this.modelName,
64
+ [ATTR.GEN_AI_OPERATION]: "stream",
65
+ [ATTR.NL_STREAM_MODE]: true,
66
+ },
67
+ }, async () => this.executeStreamInner(options), (r) => r.stream, (r, wrapped) => ({ ...r, stream: wrapped }));
68
+ }
69
+ async executeStreamInner(options) {
70
+ this.validateStreamOptions(options);
71
+ // Resolve per-call credentials first, then fall back to instance-level.
72
+ const perCallCreds = options.credentials?.groq;
73
+ const effectiveApiKey = perCallCreds?.apiKey?.trim() || this.apiKey;
74
+ const effectiveBaseURL = perCallCreds?.baseURL || this.baseURL;
75
+ const startTime = Date.now();
76
+ const timeout = this.getTimeout(options);
77
+ const timeoutController = createTimeoutController(timeout, this.providerName, "stream");
78
+ try {
79
+ // Use the canonical BaseProvider helper: merges base tools (MCP/built-in)
80
+ // with user-provided tools (RAG, etc.) and applies per-call filtering.
81
+ const shouldUseTools = !options.disableTools && this.supportsTools();
82
+ const tools = await this.getToolsForStream(options);
83
+ const messages = await this.buildMessagesForStream(options);
84
+ // When per-call credentials differ from instance, build a fresh client.
85
+ const hasDifferentCreds = effectiveApiKey !== this.apiKey || effectiveBaseURL !== this.baseURL;
86
+ const model = hasDifferentCreds
87
+ ? createOpenAI({
88
+ apiKey: effectiveApiKey,
89
+ baseURL: effectiveBaseURL,
90
+ fetch: createLoggingFetch("groq"),
91
+ }).chat(this.modelName)
92
+ : await this.getAISDKModelWithMiddleware(options);
93
+ const result = await streamText({
94
+ model,
95
+ messages,
96
+ temperature: options.temperature,
97
+ maxOutputTokens: options.maxTokens,
98
+ tools,
99
+ stopWhen: stepCountIs(options.maxSteps || DEFAULT_MAX_STEPS),
100
+ toolChoice: resolveToolChoice(options, tools, shouldUseTools),
101
+ abortSignal: composeAbortSignals(options.abortSignal, timeoutController?.controller.signal),
102
+ experimental_telemetry: this.telemetryHandler.getTelemetryConfig(options),
103
+ experimental_repairToolCall: this.getToolCallRepairFn(options),
104
+ onStepFinish: ({ toolCalls, toolResults }) => {
105
+ emitToolEndFromStepFinish(this.neurolink?.getEventEmitter(), toolResults);
106
+ this.handleToolExecutionStorage(toolCalls, toolResults, options, new Date()).catch((error) => {
107
+ logger.warn("[GroqProvider] Failed to store tool executions", {
108
+ provider: this.providerName,
109
+ error: error instanceof Error ? error.message : String(error),
110
+ });
111
+ });
112
+ },
113
+ });
114
+ timeoutController?.cleanup();
115
+ const transformedStream = this.createTextStream(result);
116
+ const analyticsPromise = streamAnalyticsCollector.createAnalytics(this.providerName, this.modelName, toAnalyticsStreamResult(result), Date.now() - startTime, {
117
+ requestId: `groq-stream-${Date.now()}`,
118
+ streamingMode: true,
119
+ });
120
+ return {
121
+ stream: transformedStream,
122
+ provider: this.providerName,
123
+ model: this.modelName,
124
+ analytics: analyticsPromise,
125
+ metadata: { startTime, streamId: `groq-${Date.now()}` },
126
+ };
127
+ }
128
+ catch (error) {
129
+ timeoutController?.cleanup();
130
+ throw this.handleProviderError(error);
131
+ }
132
+ }
133
+ getProviderName() {
134
+ return this.providerName;
135
+ }
136
+ getDefaultModel() {
137
+ return getDefaultGroqModel();
138
+ }
139
+ getAISDKModel() {
140
+ return this.model;
141
+ }
142
+ formatProviderError(error) {
143
+ if (error instanceof TimeoutError) {
144
+ return new ProviderError(`Groq request timed out: ${error.message}`, "groq");
145
+ }
146
+ const errorRecord = error;
147
+ const message = typeof errorRecord?.message === "string"
148
+ ? errorRecord.message
149
+ : "Unknown error";
150
+ if (message.includes("Invalid API key") ||
151
+ message.includes("Authentication") ||
152
+ message.includes("401") ||
153
+ message.includes("invalid_api_key")) {
154
+ return new AuthenticationError("Invalid Groq API key. Check GROQ_API_KEY. Get one at https://console.groq.com/keys", "groq");
155
+ }
156
+ if (message.includes("rate limit") || message.includes("429")) {
157
+ return new RateLimitError("Groq rate limit exceeded. Free tier limits are tight; consider upgrading or backing off.", "groq");
158
+ }
159
+ if (message.includes("model_not_found") ||
160
+ message.includes("404") ||
161
+ message.includes("model_decommissioned")) {
162
+ return new InvalidModelError(message.includes("model_decommissioned")
163
+ ? `Groq model '${this.modelName}' was decommissioned. Pick a current model from https://console.groq.com/docs/models.`
164
+ : `Groq model '${this.modelName}' not found. See https://console.groq.com/docs/models for the current catalog.`, "groq");
165
+ }
166
+ return new ProviderError(`Groq error: ${message}`, "groq");
167
+ }
168
+ async validateConfiguration() {
169
+ return typeof this.apiKey === "string" && this.apiKey.trim().length > 0;
170
+ }
171
+ getConfiguration() {
172
+ return {
173
+ provider: this.providerName,
174
+ model: this.modelName,
175
+ defaultModel: getDefaultGroqModel(),
176
+ baseURL: this.baseURL,
177
+ };
178
+ }
179
+ }
180
+ export default GroqProvider;
@@ -3,6 +3,7 @@ import { NoOutputGeneratedError, stepCountIs, streamText, } from "ai";
3
3
  import { BaseProvider } from "../core/baseProvider.js";
4
4
  import { DEFAULT_MAX_STEPS } from "../core/constants.js";
5
5
  import { createProxyFetch } from "../proxy/proxyFetch.js";
6
+ import { AuthenticationError, InvalidModelError, NetworkError, ProviderError, RateLimitError, } from "../types/index.js";
6
7
  import { emitToolEndFromStepFinish } from "../utils/toolEndEmitter.js";
7
8
  import { logger } from "../utils/logger.js";
8
9
  import { buildNoOutputSentinel, detectPostStreamNoOutput, stampNoOutputSpan, } from "../utils/noOutputSentinel.js";
@@ -215,7 +216,7 @@ export class HuggingFaceProvider extends BaseProvider {
215
216
  // If model doesn't support tools, disable them completely
216
217
  if (!modelSupportsTools) {
217
218
  return {
218
- prompt: options.input.text,
219
+ prompt: options.input.text ?? "",
219
220
  system: options.systemPrompt,
220
221
  tools: undefined,
221
222
  toolChoice: undefined,
@@ -228,7 +229,7 @@ export class HuggingFaceProvider extends BaseProvider {
228
229
  ? this.formatToolsForHuggingFace(options.tools)
229
230
  : undefined;
230
231
  return {
231
- prompt: options.input.text,
232
+ prompt: options.input.text ?? "",
232
233
  system: enhancedSystemPrompt,
233
234
  tools: formattedTools,
234
235
  toolChoice: formattedTools ? (options.toolChoice ?? "auto") : undefined,
@@ -305,7 +306,7 @@ Available tools will be provided in the function calling format. Use them when t
305
306
  */
306
307
  formatProviderError(error) {
307
308
  if (error instanceof TimeoutError) {
308
- return new Error(`HuggingFace request timed out: ${error.message}`);
309
+ return new NetworkError(`Request timed out: ${error.message}`, "huggingface");
309
310
  }
310
311
  const errorObj = error;
311
312
  const message = errorObj?.message && typeof errorObj.message === "string"
@@ -314,18 +315,18 @@ Available tools will be provided in the function calling format. Use them when t
314
315
  // Enhanced error messages with tool calling context
315
316
  if (message.includes("API_TOKEN_INVALID") ||
316
317
  message.includes("Invalid token")) {
317
- return new Error("Invalid HuggingFace API token. Please check your HUGGINGFACE_API_KEY environment variable.");
318
+ return new AuthenticationError("Invalid HuggingFace API token. Please check your HUGGINGFACE_API_KEY environment variable.", "huggingface");
318
319
  }
319
320
  if (message.includes("rate limit")) {
320
- return new Error("HuggingFace rate limit exceeded. Consider using a paid plan or try again later.");
321
+ return new RateLimitError("HuggingFace rate limit exceeded. Consider using a paid plan or try again later.", "huggingface");
321
322
  }
322
323
  if (message.includes("model") && message.includes("not found")) {
323
- return new Error(`❌ HuggingFace model '${this.modelName}' not found.\n\nSuggestions:\n1. Check model name spelling\n2. Ensure model exists on HuggingFace Hub\n3. For tool calling, use: Llama-3.1-8B-Instruct, Hermes-3-Llama-3.2-3B, or CodeLlama-34b-Instruct-hf`);
324
+ return new InvalidModelError(`HuggingFace model '${this.modelName}' not found.\n\nSuggestions:\n1. Check model name spelling\n2. Ensure model exists on HuggingFace Hub\n3. For tool calling, use: Llama-3.1-8B-Instruct, Hermes-3-Llama-3.2-3B, or CodeLlama-34b-Instruct-hf`, "huggingface");
324
325
  }
325
326
  if (message.includes("function") || message.includes("tool")) {
326
- return new Error(`❌ HuggingFace tool calling error: ${message}\n\nNotes:\n1. Ensure you're using a tool-capable model (Llama-3.1+, Hermes-3+, CodeLlama)\n2. Check that your model supports function calling\n3. Verify tool schema format is correct`);
327
+ return new ProviderError(`HuggingFace tool calling error: ${message}\n\nNotes:\n1. Ensure you're using a tool-capable model (Llama-3.1+, Hermes-3+, CodeLlama)\n2. Check that your model supports function calling\n3. Verify tool schema format is correct`, "huggingface");
327
328
  }
328
- return new Error(`❌ HuggingFace Provider Error: ${message}`);
329
+ return new ProviderError(`HuggingFace Provider Error: ${message}`, "huggingface");
329
330
  }
330
331
  getProviderName() {
331
332
  return "huggingface";
@@ -0,0 +1,34 @@
1
+ import type { LanguageModel } from "ai";
2
+ import type { AIProviderName } from "../constants/enums.js";
3
+ import { BaseProvider } from "../core/baseProvider.js";
4
+ import type { EnhancedGenerateResult, NeurolinkCredentials, StreamOptions, StreamResult, TextGenerationOptions, ValidationSchema } from "../types/index.js";
5
+ /**
6
+ * Ideogram Provider — direct image generation with strong typography.
7
+ *
8
+ * Hits api.ideogram.ai/api/v1/ideogram-v3/generate. Returns image URLs;
9
+ * we download and surface as base64 to keep the imageOutput contract
10
+ * uniform across image-gen providers.
11
+ *
12
+ * @see https://developer.ideogram.ai/api-reference/api-reference/post-v-1-ideogram-v-3-generate
13
+ */
14
+ export declare class IdeogramProvider extends BaseProvider {
15
+ private readonly apiKey;
16
+ private readonly baseURL;
17
+ private readonly proxyFetch;
18
+ constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["ideogram"]);
19
+ protected getProviderName(): AIProviderName;
20
+ protected getDefaultModel(): string;
21
+ supportsTools(): boolean;
22
+ protected getAISDKModel(): LanguageModel;
23
+ protected executeStream(_options: StreamOptions, _analysisSchema?: ValidationSchema): Promise<StreamResult>;
24
+ protected formatProviderError(error: unknown): Error;
25
+ protected executeImageGeneration(options: TextGenerationOptions): Promise<EnhancedGenerateResult>;
26
+ validateConfiguration(): Promise<boolean>;
27
+ getConfiguration(): {
28
+ provider: AIProviderName;
29
+ model: string;
30
+ defaultModel: string;
31
+ baseURL: string;
32
+ };
33
+ }
34
+ export default IdeogramProvider;
@@ -0,0 +1,183 @@
1
+ import { IdeogramModels } from "../constants/enums.js";
2
+ import { BaseProvider } from "../core/baseProvider.js";
3
+ import { isNeuroLink } from "../neurolink.js";
4
+ import { createProxyFetch } from "../proxy/proxyFetch.js";
5
+ import { AuthenticationError, ProviderError, RateLimitError, } from "../types/index.js";
6
+ import { logger } from "../utils/logger.js";
7
+ import { createIdeogramConfig, getProviderModel, validateApiKey, } from "../utils/providerConfig.js";
8
+ const IDEOGRAM_DEFAULT_BASE_URL = "https://api.ideogram.ai";
9
+ const REQUEST_TIMEOUT_MS = 120_000;
10
+ const getIdeogramApiKey = () => validateApiKey(createIdeogramConfig());
11
+ const getDefaultIdeogramModel = () => getProviderModel("IDEOGRAM_MODEL", IdeogramModels.IDEOGRAM_V3);
12
+ /**
13
+ * Ideogram Provider — direct image generation with strong typography.
14
+ *
15
+ * Hits api.ideogram.ai/api/v1/ideogram-v3/generate. Returns image URLs;
16
+ * we download and surface as base64 to keep the imageOutput contract
17
+ * uniform across image-gen providers.
18
+ *
19
+ * @see https://developer.ideogram.ai/api-reference/api-reference/post-v-1-ideogram-v-3-generate
20
+ */
21
+ export class IdeogramProvider extends BaseProvider {
22
+ apiKey;
23
+ baseURL;
24
+ proxyFetch;
25
+ constructor(modelName, sdk, _region, credentials) {
26
+ const validatedNeurolink = isNeuroLink(sdk) ? sdk : undefined;
27
+ super(modelName, "ideogram", validatedNeurolink);
28
+ const overrideKey = credentials?.apiKey?.trim();
29
+ this.apiKey =
30
+ overrideKey && overrideKey.length > 0 ? overrideKey : getIdeogramApiKey();
31
+ this.baseURL =
32
+ credentials?.baseURL ??
33
+ process.env.IDEOGRAM_BASE_URL ??
34
+ IDEOGRAM_DEFAULT_BASE_URL;
35
+ this.proxyFetch = createProxyFetch();
36
+ logger.debug("Ideogram Provider initialized (image-gen only)", {
37
+ modelName: this.modelName,
38
+ baseURL: this.baseURL,
39
+ });
40
+ }
41
+ getProviderName() {
42
+ return this.providerName;
43
+ }
44
+ getDefaultModel() {
45
+ return getDefaultIdeogramModel();
46
+ }
47
+ supportsTools() {
48
+ return false;
49
+ }
50
+ getAISDKModel() {
51
+ throw new Error("Ideogram is an image-generation-only provider; chat completions are not available.");
52
+ }
53
+ async executeStream(_options, _analysisSchema) {
54
+ throw new Error("Ideogram is an image-generation-only provider; streaming chat is not available.");
55
+ }
56
+ formatProviderError(error) {
57
+ const message = error instanceof Error
58
+ ? error.message
59
+ : typeof error === "string"
60
+ ? error
61
+ : "Unknown error";
62
+ if (message.includes("401") ||
63
+ message.toLowerCase().includes("unauthorized")) {
64
+ return new AuthenticationError("Invalid Ideogram API key. Get one at https://developer.ideogram.ai/", "ideogram");
65
+ }
66
+ if (message.includes("429") ||
67
+ message.toLowerCase().includes("rate limit")) {
68
+ return new RateLimitError("Ideogram rate limit exceeded. Back off and retry.", "ideogram");
69
+ }
70
+ if (message.includes("safety") || message.includes("is_image_safe")) {
71
+ return new ProviderError("Ideogram declined the request due to safety filters. Adjust the prompt and retry.", "ideogram");
72
+ }
73
+ return new ProviderError(`Ideogram error: ${message}`, "ideogram");
74
+ }
75
+ async executeImageGeneration(options) {
76
+ const startTime = Date.now();
77
+ // Resolve per-call credentials first, then fall back to instance-level.
78
+ const perCallCreds = options.credentials?.ideogram;
79
+ const effectiveApiKey = perCallCreds?.apiKey?.trim() || this.apiKey;
80
+ const effectiveBaseURL = perCallCreds?.baseURL || this.baseURL;
81
+ const prompt = options.prompt ?? options.input?.text ?? "";
82
+ if (!prompt.trim()) {
83
+ throw new Error("Ideogram image generation requires a prompt (input.text or prompt)");
84
+ }
85
+ const extras = options;
86
+ const body = {
87
+ prompt,
88
+ model: this.modelName,
89
+ magic_prompt: extras.magicPrompt ?? "AUTO",
90
+ };
91
+ if (extras.aspectRatio) {
92
+ body.aspect_ratio = extras.aspectRatio;
93
+ }
94
+ if (extras.negativePrompt) {
95
+ body.negative_prompt = extras.negativePrompt;
96
+ }
97
+ if (extras.seed !== undefined) {
98
+ body.seed = extras.seed;
99
+ }
100
+ if (extras.style) {
101
+ body.style_type = extras.style;
102
+ }
103
+ const controller = new AbortController();
104
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
105
+ let response;
106
+ try {
107
+ response = await this.proxyFetch(`${effectiveBaseURL}/v1/ideogram-v3/generate`, {
108
+ method: "POST",
109
+ headers: {
110
+ "Api-Key": effectiveApiKey,
111
+ "Content-Type": "application/json",
112
+ },
113
+ body: JSON.stringify(body),
114
+ signal: controller.signal,
115
+ });
116
+ }
117
+ catch (err) {
118
+ if (err instanceof Error && err.name === "AbortError") {
119
+ throw this.formatProviderError(new Error(`Ideogram image-gen request timed out after ${REQUEST_TIMEOUT_MS / 1000}s`));
120
+ }
121
+ throw this.formatProviderError(err);
122
+ }
123
+ finally {
124
+ clearTimeout(timeoutId);
125
+ }
126
+ if (!response.ok) {
127
+ const text = await response.text();
128
+ throw this.formatProviderError(new Error(`Ideogram image-gen failed: ${response.status} — ${text}`));
129
+ }
130
+ const data = (await response.json());
131
+ const url = data.data?.[0]?.url;
132
+ if (!url) {
133
+ throw new Error("Ideogram returned no image URL");
134
+ }
135
+ // Download the image and convert to base64 to match the imageOutput
136
+ // contract used by other image-gen providers. Apply a 60s timeout so the
137
+ // download cannot hang indefinitely.
138
+ const dlController = new AbortController();
139
+ const dlTimeoutId = setTimeout(() => dlController.abort(), 60_000);
140
+ let dl;
141
+ try {
142
+ dl = await this.proxyFetch(url, { signal: dlController.signal });
143
+ }
144
+ catch (err) {
145
+ if (err instanceof Error && err.name === "AbortError") {
146
+ throw new Error("Ideogram image download timed out after 60s", {
147
+ cause: err,
148
+ });
149
+ }
150
+ throw err;
151
+ }
152
+ finally {
153
+ clearTimeout(dlTimeoutId);
154
+ }
155
+ if (!dl.ok) {
156
+ throw new Error(`Failed to download Ideogram image: ${dl.status}`);
157
+ }
158
+ const buffer = Buffer.from(await dl.arrayBuffer());
159
+ const base64 = buffer.toString("base64");
160
+ const generationTimeMs = Date.now() - startTime;
161
+ logger.info(`[IdeogramProvider] Generated image (${buffer.length} bytes) in ${generationTimeMs}ms — model ${this.modelName}`);
162
+ return {
163
+ content: prompt,
164
+ provider: this.providerName,
165
+ model: this.modelName,
166
+ // output: 1000 = sentinel for per-image pricing (see pricing.ts)
167
+ usage: { input: 0, output: 1000, total: 1000 },
168
+ imageOutput: { base64 },
169
+ };
170
+ }
171
+ async validateConfiguration() {
172
+ return typeof this.apiKey === "string" && this.apiKey.trim().length > 0;
173
+ }
174
+ getConfiguration() {
175
+ return {
176
+ provider: this.providerName,
177
+ model: this.modelName,
178
+ defaultModel: getDefaultIdeogramModel(),
179
+ baseURL: this.baseURL,
180
+ };
181
+ }
182
+ }
183
+ export default IdeogramProvider;
@@ -18,3 +18,16 @@ export { DeepSeekProvider as DeepSeek } from "./deepseek.js";
18
18
  export { NvidiaNimProvider as NvidiaNim } from "./nvidiaNim.js";
19
19
  export { LMStudioProvider as LMStudio } from "./lmStudio.js";
20
20
  export { LlamaCppProvider as LlamaCpp } from "./llamaCpp.js";
21
+ export { XaiProvider as Xai } from "./xai.js";
22
+ export { GroqProvider as Groq } from "./groq.js";
23
+ export { CohereProvider as Cohere } from "./cohere.js";
24
+ export { TogetherAIProvider as TogetherAI } from "./togetherAi.js";
25
+ export { FireworksProvider as Fireworks } from "./fireworks.js";
26
+ export { PerplexityProvider as Perplexity } from "./perplexity.js";
27
+ export { CloudflareProvider as Cloudflare } from "./cloudflare.js";
28
+ export { VoyageProvider as Voyage } from "./voyage.js";
29
+ export { JinaProvider as Jina } from "./jina.js";
30
+ export { StabilityProvider as Stability } from "./stability.js";
31
+ export { IdeogramProvider as Ideogram } from "./ideogram.js";
32
+ export { RecraftProvider as Recraft } from "./recraft.js";
33
+ export { ReplicateProvider as Replicate } from "./replicate.js";
@@ -18,3 +18,16 @@ export { DeepSeekProvider as DeepSeek } from "./deepseek.js";
18
18
  export { NvidiaNimProvider as NvidiaNim } from "./nvidiaNim.js";
19
19
  export { LMStudioProvider as LMStudio } from "./lmStudio.js";
20
20
  export { LlamaCppProvider as LlamaCpp } from "./llamaCpp.js";
21
+ export { XaiProvider as Xai } from "./xai.js";
22
+ export { GroqProvider as Groq } from "./groq.js";
23
+ export { CohereProvider as Cohere } from "./cohere.js";
24
+ export { TogetherAIProvider as TogetherAI } from "./togetherAi.js";
25
+ export { FireworksProvider as Fireworks } from "./fireworks.js";
26
+ export { PerplexityProvider as Perplexity } from "./perplexity.js";
27
+ export { CloudflareProvider as Cloudflare } from "./cloudflare.js";
28
+ export { VoyageProvider as Voyage } from "./voyage.js";
29
+ export { JinaProvider as Jina } from "./jina.js";
30
+ export { StabilityProvider as Stability } from "./stability.js";
31
+ export { IdeogramProvider as Ideogram } from "./ideogram.js";
32
+ export { RecraftProvider as Recraft } from "./recraft.js";
33
+ export { ReplicateProvider as Replicate } from "./replicate.js";
@@ -0,0 +1,59 @@
1
+ import type { LanguageModel } from "ai";
2
+ import type { AIProviderName } from "../constants/enums.js";
3
+ import { BaseProvider } from "../core/baseProvider.js";
4
+ import type { NeurolinkCredentials, StreamOptions, StreamResult, ValidationSchema } from "../types/index.js";
5
+ /**
6
+ * Jina AI Provider — embeddings + reranking.
7
+ *
8
+ * Native API at api.jina.ai/v1. Chat / streaming / tool calling are not
9
+ * supported. Use `embed()` / `embedMany()` for embeddings, or call
10
+ * `rerank()` directly for retrieval reranking (Jina's strength).
11
+ *
12
+ * @see https://jina.ai/embeddings/
13
+ */
14
+ export declare class JinaProvider extends BaseProvider {
15
+ private readonly apiKey;
16
+ private readonly baseURL;
17
+ private readonly proxyFetch;
18
+ constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["jina"]);
19
+ protected getProviderName(): AIProviderName;
20
+ protected getDefaultModel(): string;
21
+ supportsTools(): boolean;
22
+ protected getDefaultEmbeddingModel(): string | undefined;
23
+ protected getAISDKModel(): LanguageModel;
24
+ protected executeStream(_options: StreamOptions, _analysisSchema?: ValidationSchema): Promise<StreamResult>;
25
+ protected formatProviderError(error: unknown): Error;
26
+ embed(text: string, modelName?: string): Promise<number[]>;
27
+ embedMany(texts: string[], modelName?: string): Promise<number[][]>;
28
+ /**
29
+ * Rerank a list of documents against a query.
30
+ *
31
+ * Returns the documents sorted by relevance (highest first), with
32
+ * score and original index preserved so callers can map back.
33
+ *
34
+ * Note: not exposed on `BaseProvider` — accessed by casting to
35
+ * `JinaProvider` or via the dedicated rerank route on the public API
36
+ * (`POST /api/agent/rerank` in the server module, when added).
37
+ *
38
+ * Per-call credentials can be supplied via `options.credentials?.jina`,
39
+ * overriding the instance-level credentials for this request only.
40
+ */
41
+ rerank(query: string, documents: string[], options?: {
42
+ model?: string;
43
+ topN?: number;
44
+ credentials?: NeurolinkCredentials["jina"];
45
+ }): Promise<{
46
+ index: number;
47
+ score: number;
48
+ document: string;
49
+ }[]>;
50
+ private callEmbeddings;
51
+ validateConfiguration(): Promise<boolean>;
52
+ getConfiguration(): {
53
+ provider: AIProviderName;
54
+ model: string;
55
+ defaultModel: string;
56
+ baseURL: string;
57
+ };
58
+ }
59
+ export default JinaProvider;