@juspay/neurolink 9.64.0 → 9.65.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.
- package/CHANGELOG.md +6 -0
- package/README.md +18 -17
- package/dist/adapters/providerImageAdapter.js +29 -1
- package/dist/adapters/replicate/auth.d.ts +19 -0
- package/dist/adapters/replicate/auth.js +32 -0
- package/dist/adapters/replicate/predictionLifecycle.d.ts +46 -0
- package/dist/adapters/replicate/predictionLifecycle.js +283 -0
- package/dist/adapters/video/klingVideoHandler.d.ts +37 -0
- package/dist/adapters/video/klingVideoHandler.js +305 -0
- package/dist/adapters/video/replicateVideoHandler.d.ts +29 -0
- package/dist/adapters/video/replicateVideoHandler.js +157 -0
- package/dist/adapters/video/runwayVideoHandler.d.ts +32 -0
- package/dist/adapters/video/runwayVideoHandler.js +316 -0
- package/dist/adapters/video/vertexVideoHandler.d.ts +19 -1
- package/dist/adapters/video/vertexVideoHandler.js +33 -9
- package/dist/autoresearch/runner.js +8 -2
- package/dist/avatar/index.d.ts +13 -0
- package/dist/avatar/index.js +13 -0
- package/dist/avatar/providers/DIDAvatar.d.ts +49 -0
- package/dist/avatar/providers/DIDAvatar.js +501 -0
- package/dist/avatar/providers/HeyGenAvatar.d.ts +30 -0
- package/dist/avatar/providers/HeyGenAvatar.js +337 -0
- package/dist/avatar/providers/ReplicateAvatar.d.ts +36 -0
- package/dist/avatar/providers/ReplicateAvatar.js +267 -0
- package/dist/browser/neurolink.min.js +633 -610
- package/dist/cli/commands/mcp.js +29 -0
- package/dist/cli/commands/proxy.js +24 -5
- package/dist/cli/factories/commandFactory.d.ts +11 -1
- package/dist/cli/factories/commandFactory.js +291 -38
- package/dist/constants/contextWindows.js +101 -0
- package/dist/constants/enums.d.ts +273 -2
- package/dist/constants/enums.js +290 -1
- package/dist/constants/videoErrors.d.ts +4 -0
- package/dist/constants/videoErrors.js +4 -0
- package/dist/core/baseProvider.d.ts +22 -2
- package/dist/core/baseProvider.js +217 -11
- package/dist/core/constants.d.ts +11 -0
- package/dist/core/constants.js +69 -1
- package/dist/core/redisConversationMemoryManager.js +6 -0
- package/dist/evaluation/index.d.ts +2 -0
- package/dist/evaluation/index.js +4 -0
- package/dist/factories/providerFactory.js +7 -1
- package/dist/factories/providerRegistry.js +202 -5
- package/dist/features/ppt/contentPlanner.js +42 -14
- package/dist/index.d.ts +9 -1
- package/dist/index.js +16 -1
- package/dist/lib/adapters/providerImageAdapter.js +29 -1
- package/dist/lib/adapters/replicate/auth.d.ts +19 -0
- package/dist/lib/adapters/replicate/auth.js +33 -0
- package/dist/lib/adapters/replicate/predictionLifecycle.d.ts +46 -0
- package/dist/lib/adapters/replicate/predictionLifecycle.js +284 -0
- package/dist/lib/adapters/video/klingVideoHandler.d.ts +37 -0
- package/dist/lib/adapters/video/klingVideoHandler.js +306 -0
- package/dist/lib/adapters/video/replicateVideoHandler.d.ts +29 -0
- package/dist/lib/adapters/video/replicateVideoHandler.js +158 -0
- package/dist/lib/adapters/video/runwayVideoHandler.d.ts +32 -0
- package/dist/lib/adapters/video/runwayVideoHandler.js +317 -0
- package/dist/lib/adapters/video/vertexVideoHandler.d.ts +19 -1
- package/dist/lib/adapters/video/vertexVideoHandler.js +33 -9
- package/dist/lib/autoresearch/runner.js +8 -2
- package/dist/lib/avatar/index.d.ts +13 -0
- package/dist/lib/avatar/index.js +14 -0
- package/dist/lib/avatar/providers/DIDAvatar.d.ts +49 -0
- package/dist/lib/avatar/providers/DIDAvatar.js +502 -0
- package/dist/lib/avatar/providers/HeyGenAvatar.d.ts +30 -0
- package/dist/lib/avatar/providers/HeyGenAvatar.js +338 -0
- package/dist/lib/avatar/providers/ReplicateAvatar.d.ts +36 -0
- package/dist/lib/avatar/providers/ReplicateAvatar.js +268 -0
- package/dist/lib/constants/contextWindows.js +101 -0
- package/dist/lib/constants/enums.d.ts +273 -2
- package/dist/lib/constants/enums.js +290 -1
- package/dist/lib/constants/videoErrors.d.ts +4 -0
- package/dist/lib/constants/videoErrors.js +4 -0
- package/dist/lib/core/baseProvider.d.ts +22 -2
- package/dist/lib/core/baseProvider.js +217 -11
- package/dist/lib/core/constants.d.ts +11 -0
- package/dist/lib/core/constants.js +69 -1
- package/dist/lib/core/redisConversationMemoryManager.js +6 -0
- package/dist/lib/evaluation/index.d.ts +2 -0
- package/dist/lib/evaluation/index.js +4 -0
- package/dist/lib/factories/providerFactory.js +7 -1
- package/dist/lib/factories/providerRegistry.js +202 -5
- package/dist/lib/features/ppt/contentPlanner.js +42 -14
- package/dist/lib/index.d.ts +9 -1
- package/dist/lib/index.js +16 -1
- package/dist/lib/middleware/builtin/lifecycle.js +39 -9
- package/dist/lib/music/index.d.ts +13 -0
- package/dist/lib/music/index.js +14 -0
- package/dist/lib/music/providers/BeatovenMusic.d.ts +31 -0
- package/dist/lib/music/providers/BeatovenMusic.js +334 -0
- package/dist/lib/music/providers/ElevenLabsMusic.d.ts +30 -0
- package/dist/lib/music/providers/ElevenLabsMusic.js +169 -0
- package/dist/lib/music/providers/LyriaMusic.d.ts +29 -0
- package/dist/lib/music/providers/LyriaMusic.js +173 -0
- package/dist/lib/music/providers/ReplicateMusic.d.ts +31 -0
- package/dist/lib/music/providers/ReplicateMusic.js +262 -0
- package/dist/lib/neurolink.d.ts +30 -0
- package/dist/lib/neurolink.js +323 -77
- package/dist/lib/providers/amazonBedrock.d.ts +10 -0
- package/dist/lib/providers/amazonBedrock.js +94 -39
- package/dist/lib/providers/anthropic.js +55 -7
- package/dist/lib/providers/anthropicBaseProvider.js +1 -1
- package/dist/lib/providers/azureOpenai.js +66 -17
- package/dist/lib/providers/cloudflare.d.ts +35 -0
- package/dist/lib/providers/cloudflare.js +174 -0
- package/dist/lib/providers/cohere.d.ts +52 -0
- package/dist/lib/providers/cohere.js +253 -0
- package/dist/lib/providers/deepseek.js +72 -17
- package/dist/lib/providers/fireworks.d.ts +33 -0
- package/dist/lib/providers/fireworks.js +164 -0
- package/dist/lib/providers/googleAiStudio.js +45 -6
- package/dist/lib/providers/googleNativeGemini3.d.ts +24 -1
- package/dist/lib/providers/googleNativeGemini3.js +173 -21
- package/dist/lib/providers/googleVertex.js +173 -17
- package/dist/lib/providers/groq.d.ts +33 -0
- package/dist/lib/providers/groq.js +181 -0
- package/dist/lib/providers/huggingFace.js +9 -8
- package/dist/lib/providers/ideogram.d.ts +34 -0
- package/dist/lib/providers/ideogram.js +184 -0
- package/dist/lib/providers/index.d.ts +13 -0
- package/dist/lib/providers/index.js +13 -0
- package/dist/lib/providers/jina.d.ts +59 -0
- package/dist/lib/providers/jina.js +218 -0
- package/dist/lib/providers/llamaCpp.js +14 -46
- package/dist/lib/providers/lmStudio.js +14 -47
- package/dist/lib/providers/mistral.js +7 -7
- package/dist/lib/providers/nvidiaNim.js +160 -19
- package/dist/lib/providers/ollama.js +7 -7
- package/dist/lib/providers/openAI.d.ts +22 -1
- package/dist/lib/providers/openAI.js +181 -0
- package/dist/lib/providers/openRouter.js +35 -23
- package/dist/lib/providers/openaiCompatible.js +9 -8
- package/dist/lib/providers/perplexity.d.ts +33 -0
- package/dist/lib/providers/perplexity.js +179 -0
- package/dist/lib/providers/recraft.d.ts +34 -0
- package/dist/lib/providers/recraft.js +197 -0
- package/dist/lib/providers/replicate.d.ts +75 -0
- package/dist/lib/providers/replicate.js +403 -0
- package/dist/lib/providers/stability.d.ts +37 -0
- package/dist/lib/providers/stability.js +191 -0
- package/dist/lib/providers/togetherAi.d.ts +33 -0
- package/dist/lib/providers/togetherAi.js +176 -0
- package/dist/lib/providers/voyage.d.ts +47 -0
- package/dist/lib/providers/voyage.js +177 -0
- package/dist/lib/providers/xai.d.ts +33 -0
- package/dist/lib/providers/xai.js +172 -0
- package/dist/lib/telemetry/index.d.ts +1 -1
- package/dist/lib/telemetry/index.js +1 -1
- package/dist/lib/telemetry/tracers.d.ts +19 -0
- package/dist/lib/telemetry/tracers.js +19 -0
- package/dist/lib/telemetry/withSpan.d.ts +35 -0
- package/dist/lib/telemetry/withSpan.js +103 -0
- package/dist/lib/types/avatar.d.ts +143 -0
- package/dist/lib/types/avatar.js +20 -0
- package/dist/lib/types/cli.d.ts +6 -0
- package/dist/lib/types/generate.d.ts +62 -5
- package/dist/lib/types/index.d.ts +5 -0
- package/dist/lib/types/index.js +7 -0
- package/dist/lib/types/middleware.d.ts +27 -0
- package/dist/lib/types/multimodal.d.ts +35 -2
- package/dist/lib/types/music.d.ts +165 -0
- package/dist/lib/types/music.js +21 -0
- package/dist/lib/types/providers.d.ts +144 -1
- package/dist/lib/types/replicate.d.ts +67 -0
- package/dist/lib/types/replicate.js +10 -0
- package/dist/lib/types/safeFetch.d.ts +15 -0
- package/dist/lib/types/safeFetch.js +7 -0
- package/dist/lib/types/stream.d.ts +2 -1
- package/dist/lib/types/tools.d.ts +13 -0
- package/dist/lib/types/video.d.ts +89 -0
- package/dist/lib/types/video.js +15 -0
- package/dist/lib/utils/avatarProcessor.d.ts +68 -0
- package/dist/lib/utils/avatarProcessor.js +172 -0
- package/dist/lib/utils/cloneOptions.d.ts +36 -0
- package/dist/lib/utils/cloneOptions.js +62 -0
- package/dist/lib/utils/lifecycleCallbacks.d.ts +51 -8
- package/dist/lib/utils/lifecycleCallbacks.js +82 -26
- package/dist/lib/utils/lifecycleTimeout.d.ts +25 -0
- package/dist/lib/utils/lifecycleTimeout.js +39 -0
- package/dist/lib/utils/logSanitize.d.ts +49 -0
- package/dist/lib/utils/logSanitize.js +170 -0
- package/dist/lib/utils/loggingFetch.d.ts +29 -0
- package/dist/lib/utils/loggingFetch.js +60 -0
- package/dist/lib/utils/messageBuilder.js +43 -25
- package/dist/lib/utils/modelChoices.js +236 -3
- package/dist/lib/utils/musicProcessor.d.ts +67 -0
- package/dist/lib/utils/musicProcessor.js +189 -0
- package/dist/lib/utils/optionsConversion.js +3 -2
- package/dist/lib/utils/parameterValidation.js +14 -4
- package/dist/lib/utils/pricing.js +193 -0
- package/dist/lib/utils/providerConfig.d.ts +55 -0
- package/dist/lib/utils/providerConfig.js +224 -0
- package/dist/lib/utils/safeFetch.d.ts +26 -0
- package/dist/lib/utils/safeFetch.js +83 -0
- package/dist/lib/utils/sizeGuard.d.ts +34 -0
- package/dist/lib/utils/sizeGuard.js +45 -0
- package/dist/lib/utils/ssrfGuard.d.ts +52 -0
- package/dist/lib/utils/ssrfGuard.js +411 -0
- package/dist/lib/utils/videoProcessor.d.ts +60 -0
- package/dist/lib/utils/videoProcessor.js +201 -0
- package/dist/lib/voice/providers/FishAudioTTS.d.ts +27 -0
- package/dist/lib/voice/providers/FishAudioTTS.js +183 -0
- package/dist/lib/workflow/core/ensembleExecutor.js +26 -9
- package/dist/middleware/builtin/lifecycle.js +39 -9
- package/dist/music/index.d.ts +13 -0
- package/dist/music/index.js +13 -0
- package/dist/music/providers/BeatovenMusic.d.ts +31 -0
- package/dist/music/providers/BeatovenMusic.js +333 -0
- package/dist/music/providers/ElevenLabsMusic.d.ts +30 -0
- package/dist/music/providers/ElevenLabsMusic.js +168 -0
- package/dist/music/providers/LyriaMusic.d.ts +29 -0
- package/dist/music/providers/LyriaMusic.js +172 -0
- package/dist/music/providers/ReplicateMusic.d.ts +31 -0
- package/dist/music/providers/ReplicateMusic.js +261 -0
- package/dist/neurolink.d.ts +30 -0
- package/dist/neurolink.js +323 -77
- package/dist/providers/amazonBedrock.d.ts +10 -0
- package/dist/providers/amazonBedrock.js +94 -39
- package/dist/providers/anthropic.js +55 -7
- package/dist/providers/anthropicBaseProvider.js +1 -1
- package/dist/providers/azureOpenai.js +66 -17
- package/dist/providers/cloudflare.d.ts +35 -0
- package/dist/providers/cloudflare.js +173 -0
- package/dist/providers/cohere.d.ts +52 -0
- package/dist/providers/cohere.js +252 -0
- package/dist/providers/deepseek.js +72 -17
- package/dist/providers/fireworks.d.ts +33 -0
- package/dist/providers/fireworks.js +163 -0
- package/dist/providers/googleAiStudio.js +45 -6
- package/dist/providers/googleNativeGemini3.d.ts +24 -1
- package/dist/providers/googleNativeGemini3.js +173 -21
- package/dist/providers/googleVertex.js +173 -17
- package/dist/providers/groq.d.ts +33 -0
- package/dist/providers/groq.js +180 -0
- package/dist/providers/huggingFace.js +9 -8
- package/dist/providers/ideogram.d.ts +34 -0
- package/dist/providers/ideogram.js +183 -0
- package/dist/providers/index.d.ts +13 -0
- package/dist/providers/index.js +13 -0
- package/dist/providers/jina.d.ts +59 -0
- package/dist/providers/jina.js +217 -0
- package/dist/providers/llamaCpp.js +14 -46
- package/dist/providers/lmStudio.js +14 -47
- package/dist/providers/mistral.js +7 -7
- package/dist/providers/nvidiaNim.js +160 -19
- package/dist/providers/ollama.js +7 -7
- package/dist/providers/openAI.d.ts +22 -1
- package/dist/providers/openAI.js +181 -0
- package/dist/providers/openRouter.js +35 -23
- package/dist/providers/openaiCompatible.js +9 -8
- package/dist/providers/perplexity.d.ts +33 -0
- package/dist/providers/perplexity.js +178 -0
- package/dist/providers/recraft.d.ts +34 -0
- package/dist/providers/recraft.js +196 -0
- package/dist/providers/replicate.d.ts +75 -0
- package/dist/providers/replicate.js +402 -0
- package/dist/providers/stability.d.ts +37 -0
- package/dist/providers/stability.js +190 -0
- package/dist/providers/togetherAi.d.ts +33 -0
- package/dist/providers/togetherAi.js +175 -0
- package/dist/providers/voyage.d.ts +47 -0
- package/dist/providers/voyage.js +176 -0
- package/dist/providers/xai.d.ts +33 -0
- package/dist/providers/xai.js +171 -0
- package/dist/telemetry/index.d.ts +1 -1
- package/dist/telemetry/index.js +1 -1
- package/dist/telemetry/tracers.d.ts +19 -0
- package/dist/telemetry/tracers.js +19 -0
- package/dist/telemetry/withSpan.d.ts +35 -0
- package/dist/telemetry/withSpan.js +103 -0
- package/dist/types/avatar.d.ts +143 -0
- package/dist/types/avatar.js +19 -0
- package/dist/types/cli.d.ts +6 -0
- package/dist/types/generate.d.ts +62 -5
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +7 -0
- package/dist/types/middleware.d.ts +27 -0
- package/dist/types/multimodal.d.ts +35 -2
- package/dist/types/music.d.ts +165 -0
- package/dist/types/music.js +20 -0
- package/dist/types/providers.d.ts +144 -1
- package/dist/types/replicate.d.ts +67 -0
- package/dist/types/replicate.js +9 -0
- package/dist/types/safeFetch.d.ts +15 -0
- package/dist/types/safeFetch.js +6 -0
- package/dist/types/stream.d.ts +2 -1
- package/dist/types/tools.d.ts +13 -0
- package/dist/types/video.d.ts +89 -0
- package/dist/types/video.js +14 -0
- package/dist/utils/avatarProcessor.d.ts +68 -0
- package/dist/utils/avatarProcessor.js +171 -0
- package/dist/utils/cloneOptions.d.ts +36 -0
- package/dist/utils/cloneOptions.js +61 -0
- package/dist/utils/lifecycleCallbacks.d.ts +51 -8
- package/dist/utils/lifecycleCallbacks.js +82 -26
- package/dist/utils/lifecycleTimeout.d.ts +25 -0
- package/dist/utils/lifecycleTimeout.js +38 -0
- package/dist/utils/logSanitize.d.ts +49 -0
- package/dist/utils/logSanitize.js +169 -0
- package/dist/utils/loggingFetch.d.ts +29 -0
- package/dist/utils/loggingFetch.js +59 -0
- package/dist/utils/messageBuilder.js +43 -25
- package/dist/utils/modelChoices.js +236 -3
- package/dist/utils/musicProcessor.d.ts +67 -0
- package/dist/utils/musicProcessor.js +188 -0
- package/dist/utils/optionsConversion.js +3 -2
- package/dist/utils/parameterValidation.js +14 -4
- package/dist/utils/pricing.js +193 -0
- package/dist/utils/providerConfig.d.ts +55 -0
- package/dist/utils/providerConfig.js +224 -0
- package/dist/utils/safeFetch.d.ts +26 -0
- package/dist/utils/safeFetch.js +82 -0
- package/dist/utils/sizeGuard.d.ts +34 -0
- package/dist/utils/sizeGuard.js +44 -0
- package/dist/utils/ssrfGuard.d.ts +52 -0
- package/dist/utils/ssrfGuard.js +410 -0
- package/dist/utils/videoProcessor.d.ts +60 -0
- package/dist/utils/videoProcessor.js +200 -0
- package/dist/voice/providers/FishAudioTTS.d.ts +27 -0
- package/dist/voice/providers/FishAudioTTS.js +182 -0
- package/dist/workflow/core/ensembleExecutor.js +26 -9
- package/package.json +32 -5
|
@@ -0,0 +1,181 @@
|
|
|
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;
|
|
181
|
+
//# sourceMappingURL=groq.js.map
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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,184 @@
|
|
|
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;
|
|
184
|
+
//# sourceMappingURL=ideogram.js.map
|
|
@@ -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,4 +18,17 @@ 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";
|
|
21
34
|
//# sourceMappingURL=index.js.map
|
|
@@ -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;
|