@umituz/web-ai 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -132,6 +132,14 @@ var AIError = class _AIError extends Error {
132
132
  }
133
133
  };
134
134
 
135
+ // src/core/errors/groq-error.ts
136
+ var GroqError = class extends AIError {
137
+ constructor(type, message, cause, metadata = {}) {
138
+ super(type, message, cause, metadata);
139
+ this.name = "GroqError";
140
+ }
141
+ };
142
+
135
143
  // src/core/errors/error-classifier.ts
136
144
  var DEFAULT_RETRYABLE_TYPES = /* @__PURE__ */ new Set([
137
145
  "NETWORK_ERROR" /* NETWORK_ERROR */,
@@ -410,6 +418,8 @@ function calculateExponentialBackoff(params) {
410
418
  // src/core/constants/identifier.constants.ts
411
419
  var MESSAGE_ID_PREFIX = "msg-";
412
420
  var CHAT_MESSAGE_ID_SUFFIX_LENGTH = 9;
421
+ var CACHE_KEY_TYPE_COMPLETION = "completion";
422
+ var CACHE_KEY_TYPE_CHAT = "chat";
413
423
  var USER_ROLE = "user";
414
424
  var ASSISTANT_ROLE = "assistant";
415
425
  var QUEUE_PRIORITY_USER_REQUEST = 10;
@@ -1881,12 +1891,22 @@ var DEFAULT_GENERATION_CONFIG = {
1881
1891
  maxTokens: 1024,
1882
1892
  topP: 1
1883
1893
  };
1894
+ var DEFAULT_MODELS = {
1895
+ TEXT: GROQ_MODELS.LLAMA_3_1_8B_INSTANT,
1896
+ FAST: GROQ_MODELS.LLAMA_3_1_8B_INSTANT,
1897
+ EXPERIMENTAL: GROQ_MODELS.GPT_OSS_20B
1898
+ };
1884
1899
  var GROQ_BASE_URL = "https://api.groq.com/openai/v1";
1900
+ var DEFAULT_BASE_URL = GROQ_BASE_URL;
1885
1901
  var CHAT_COMPLETIONS_PATH = "/chat/completions";
1902
+ var API_ENDPOINTS = {
1903
+ CHAT: CHAT_COMPLETIONS_PATH
1904
+ };
1886
1905
  var GROQ_TIMEOUTS = {
1887
1906
  DEFAULT: 3e4,
1888
1907
  STREAMING: 6e4
1889
1908
  };
1909
+ var TIMEOUTS = GROQ_TIMEOUTS;
1890
1910
  var HTTP_HEADERS = {
1891
1911
  CONTENT_TYPE: "Content-Type",
1892
1912
  APPLICATION_JSON: "application/json",
@@ -1945,13 +1965,65 @@ var GroqChatRequestBuilder = class _GroqChatRequestBuilder {
1945
1965
  }
1946
1966
  };
1947
1967
 
1968
+ // src/providers/groq/groq-config-store.ts
1969
+ var GroqConfigStore = class {
1970
+ config = null;
1971
+ initialize(config) {
1972
+ const validation = validateApiKey(config.apiKey, { minLength: 1 });
1973
+ if (!validation.valid) {
1974
+ throw new GroqError("INVALID_API_KEY" /* INVALID_API_KEY */, validation.reason ?? "Invalid API key");
1975
+ }
1976
+ const normalized = {
1977
+ apiKey: config.apiKey.trim(),
1978
+ baseUrl: config.baseUrl ?? DEFAULT_BASE_URL,
1979
+ timeoutMs: config.timeoutMs ?? TIMEOUTS.DEFAULT,
1980
+ ...config.models !== void 0 ? { models: config.models } : {},
1981
+ ...config.textModel !== void 0 ? { textModel: config.textModel } : {}
1982
+ };
1983
+ this.config = normalized;
1984
+ return normalized;
1985
+ }
1986
+ get() {
1987
+ if (!this.config) {
1988
+ throw new GroqError(
1989
+ "MISSING_CONFIG" /* MISSING_CONFIG */,
1990
+ "Client not initialized. Call configureProvider first."
1991
+ );
1992
+ }
1993
+ return this.config;
1994
+ }
1995
+ getOrNull() {
1996
+ return this.config;
1997
+ }
1998
+ isInitialized() {
1999
+ return this.config !== null;
2000
+ }
2001
+ setApiKey(apiKey) {
2002
+ const current = this.get();
2003
+ const validation = validateApiKey(apiKey, { minLength: 1 });
2004
+ if (!validation.valid) {
2005
+ throw new GroqError("INVALID_API_KEY" /* INVALID_API_KEY */, validation.reason ?? "Invalid API key");
2006
+ }
2007
+ this.config = { ...current, apiKey: apiKey.trim() };
2008
+ }
2009
+ reset() {
2010
+ this.config = null;
2011
+ }
2012
+ };
2013
+
1948
2014
  // src/providers/groq/groq-http-transport.ts
1949
2015
  var GroqHttpTransport = class {
1950
- constructor(config) {
1951
- this.config = config;
2016
+ constructor(configSource) {
2017
+ this.configSource = configSource;
1952
2018
  }
1953
- config;
2019
+ configSource;
1954
2020
  pendingAbortControllers = /* @__PURE__ */ new Set();
2021
+ getConfig() {
2022
+ if ("get" in this.configSource && typeof this.configSource.get === "function") {
2023
+ return this.configSource.get();
2024
+ }
2025
+ return this.configSource;
2026
+ }
1955
2027
  cancelPendingRequests() {
1956
2028
  for (const controller of this.pendingAbortControllers) {
1957
2029
  controller.abort();
@@ -1966,7 +2038,7 @@ var GroqHttpTransport = class {
1966
2038
  }
1967
2039
  async streamChatCompletion(request, options = {}) {
1968
2040
  const url = `${this.baseUrl()}${CHAT_COMPLETIONS_PATH}`;
1969
- const timeout = this.config.timeoutMs ?? GROQ_TIMEOUTS.STREAMING;
2041
+ const timeout = this.getConfig().timeoutMs ?? GROQ_TIMEOUTS.STREAMING;
1970
2042
  const controller = new AbortController();
1971
2043
  const timeoutId = setTimeout(() => controller.abort(), timeout);
1972
2044
  const onExternalAbort = () => controller.abort();
@@ -1993,11 +2065,11 @@ var GroqHttpTransport = class {
1993
2065
  }
1994
2066
  }
1995
2067
  baseUrl() {
1996
- return this.config.baseUrl ?? GROQ_BASE_URL;
2068
+ return this.getConfig().baseUrl ?? GROQ_BASE_URL;
1997
2069
  }
1998
2070
  async request(endpoint, body) {
1999
2071
  const url = `${this.baseUrl()}${endpoint}`;
2000
- const timeout = this.config.timeoutMs ?? GROQ_TIMEOUTS.DEFAULT;
2072
+ const timeout = this.getConfig().timeoutMs ?? GROQ_TIMEOUTS.DEFAULT;
2001
2073
  const controller = new AbortController();
2002
2074
  const timeoutId = setTimeout(() => controller.abort(), timeout);
2003
2075
  this.pendingAbortControllers.add(controller);
@@ -2020,7 +2092,7 @@ var GroqHttpTransport = class {
2020
2092
  buildHeaders() {
2021
2093
  return {
2022
2094
  [HTTP_HEADERS.CONTENT_TYPE]: HTTP_HEADERS.APPLICATION_JSON,
2023
- [HTTP_HEADERS.AUTHORIZATION]: `${HTTP_HEADERS.BEARER_PREFIX}${this.config.apiKey}`
2095
+ [HTTP_HEADERS.AUTHORIZATION]: `${HTTP_HEADERS.BEARER_PREFIX}${this.getConfig().apiKey}`
2024
2096
  };
2025
2097
  }
2026
2098
  async throwFromErrorResponse(response) {
@@ -2064,21 +2136,40 @@ var GroqHttpTransport = class {
2064
2136
 
2065
2137
  // src/providers/groq/groq-http-client.ts
2066
2138
  var GroqHttpClient = class {
2139
+ configStore;
2067
2140
  transport;
2068
2141
  executor;
2069
- constructor(config, deps = {}) {
2070
- this.transport = deps.transport ?? new GroqHttpTransport(config);
2142
+ constructor(configOrDeps, maybeDeps = {}) {
2143
+ const isConfig = typeof configOrDeps === "object" && configOrDeps !== null && "apiKey" in configOrDeps && typeof configOrDeps.apiKey === "string";
2144
+ const deps = isConfig ? maybeDeps : configOrDeps ?? {};
2145
+ this.configStore = deps.configStore ?? new GroqConfigStore();
2146
+ if (isConfig) {
2147
+ this.configStore.initialize(configOrDeps);
2148
+ }
2149
+ this.transport = deps.transport ?? new GroqHttpTransport(this.configStore);
2071
2150
  const retryManager2 = deps.retryManager ?? new RetryManager();
2072
2151
  const queue = deps.queue ?? new RequestQueue();
2073
2152
  const deduplicator = deps.deduplicator ?? new RequestDeduplicator();
2074
2153
  this.executor = new CompositeExecutor([
2075
2154
  new DedupeExecutor(deduplicator, {
2076
- generateKey: (request) => deduplicatorKey(request, config.apiKey)
2155
+ generateKey: (request) => deduplicatorKey(request, this.configStore.isInitialized() ? this.configStore.get().apiKey : "")
2077
2156
  }),
2078
2157
  new RetryExecutor(retryManager2),
2079
2158
  new QueueExecutor(queue, QUEUE_PRIORITY_USER_REQUEST)
2080
2159
  ]);
2081
2160
  }
2161
+ initialize(config) {
2162
+ this.configStore.initialize(config);
2163
+ }
2164
+ isInitialized() {
2165
+ return this.configStore.isInitialized();
2166
+ }
2167
+ getApiKey() {
2168
+ return this.configStore.get().apiKey;
2169
+ }
2170
+ setApiKey(apiKey) {
2171
+ this.configStore.setApiKey(apiKey);
2172
+ }
2082
2173
  cancelPendingRequests() {
2083
2174
  this.transport.cancelPendingRequests();
2084
2175
  }
@@ -2091,6 +2182,10 @@ var GroqHttpClient = class {
2091
2182
  streamChatCompletion(request, options) {
2092
2183
  return this.transport.streamChatCompletion(request, options);
2093
2184
  }
2185
+ reset() {
2186
+ this.transport.cancelPendingRequests();
2187
+ this.configStore.reset();
2188
+ }
2094
2189
  };
2095
2190
  function deduplicatorKey(request, apiKey) {
2096
2191
  const { model, messages, stream: _stream, ...rest } = request;
@@ -2967,6 +3062,278 @@ function createAI(config = {}) {
2967
3062
  return factory;
2968
3063
  }
2969
3064
 
3065
+ // src/providers/groq/groq-messages.ts
3066
+ var createUserMessage = (content) => ({
3067
+ role: "user",
3068
+ content
3069
+ });
3070
+ var createAssistantMessage = (content) => ({
3071
+ role: "assistant",
3072
+ content
3073
+ });
3074
+ var createSystemMessage = (content) => ({
3075
+ role: "system",
3076
+ content
3077
+ });
3078
+ var createMessage = (role, content) => ({
3079
+ role,
3080
+ content
3081
+ });
3082
+ var promptToMessages = (prompt) => [
3083
+ createUserMessage(prompt)
3084
+ ];
3085
+ var extractTextFromMessages = (messages) => messages.map((m) => m.content).join("\n\n");
3086
+ var formatMessagesForDisplay = (messages) => messages.map((m) => `[${m.role.toUpperCase()}]: ${m.content}`).join("\n\n---\n\n");
3087
+
3088
+ // src/providers/groq/groq-structured-json.ts
3089
+ async function requestStructuredJson(client, request) {
3090
+ const chatRequest = {
3091
+ model: request.model,
3092
+ messages: [createUserMessage(request.instructions)],
3093
+ temperature: request.temperature,
3094
+ max_tokens: request.maxTokens,
3095
+ response_format: { type: "json_object" },
3096
+ ...request.reasoningEffort !== void 0 ? { reasoning_effort: request.reasoningEffort } : {}
3097
+ };
3098
+ const response = await client.postChatCompletion(chatRequest);
3099
+ const content = response.choices[0]?.message?.content ?? "";
3100
+ const candidate = extractJsonCandidate(content);
3101
+ try {
3102
+ return JSON.parse(candidate);
3103
+ } catch (err) {
3104
+ throw new GroqError(
3105
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
3106
+ "model response contained no parsable json object",
3107
+ err instanceof Error ? err : void 0
3108
+ );
3109
+ }
3110
+ }
3111
+
3112
+ // src/providers/groq/text-generation.service.ts
3113
+ var STRUCTURED_OUTPUT_TEMPERATURE = 0.1;
3114
+ var TextGenerationService = class {
3115
+ constructor(httpClient, cache = new CacheManager(), defaultModel = DEFAULT_MODELS.TEXT) {
3116
+ this.httpClient = httpClient;
3117
+ this.cache = cache;
3118
+ this.defaultModel = defaultModel;
3119
+ }
3120
+ httpClient;
3121
+ cache;
3122
+ defaultModel;
3123
+ id = "groq-text-generation";
3124
+ name = "Groq Text Generation";
3125
+ capabilities = ["text"];
3126
+ jsonParser = new JsonResponseParser();
3127
+ generateCompletion(prompt, options = {}) {
3128
+ const model = options.model ?? this.defaultModel;
3129
+ return this.executeWithCache(
3130
+ {
3131
+ type: CACHE_KEY_TYPE_COMPLETION,
3132
+ model,
3133
+ prompt,
3134
+ config: options.generationConfig
3135
+ },
3136
+ async () => {
3137
+ const request = GroqChatRequestBuilder.for(model).withMessages([createUserMessage(prompt)]).withConfig(options.generationConfig).build();
3138
+ const response = await this.httpClient.postChatCompletion(request);
3139
+ return this.extractContent(response.choices[0]?.message?.content);
3140
+ }
3141
+ );
3142
+ }
3143
+ generateChatCompletion(messages, options = {}) {
3144
+ const model = options.model ?? this.defaultModel;
3145
+ return this.executeWithCache(
3146
+ {
3147
+ type: CACHE_KEY_TYPE_CHAT,
3148
+ model,
3149
+ messages: [...messages],
3150
+ config: options.generationConfig
3151
+ },
3152
+ async () => {
3153
+ const request = GroqChatRequestBuilder.for(model).withMessages(messages).withConfig(options.generationConfig).build();
3154
+ const response = await this.httpClient.postChatCompletion(request);
3155
+ return this.extractContent(response.choices[0]?.message?.content);
3156
+ }
3157
+ );
3158
+ }
3159
+ generateStructured(promptOrRequest, options) {
3160
+ if (typeof promptOrRequest === "string") {
3161
+ const model2 = options?.model ?? this.defaultModel;
3162
+ const jsonPrompt = StructuredPromptBuilder.for(promptOrRequest).withSchema(options?.schema).build();
3163
+ const request = GroqChatRequestBuilder.for(model2).withMessages([createUserMessage(jsonPrompt)]).withConfig({
3164
+ ...options?.generationConfig,
3165
+ temperature: STRUCTURED_OUTPUT_TEMPERATURE
3166
+ }).build();
3167
+ return this.httpClient.postChatCompletion(request).then((response) => {
3168
+ const content = this.extractContent(response.choices[0]?.message?.content);
3169
+ return this.jsonParser.parse(content);
3170
+ });
3171
+ }
3172
+ const req = promptOrRequest;
3173
+ const model = req.model ?? (req.tier ? this.resolveModel(req.tier) : this.defaultModel);
3174
+ const schemaObj = req.schema;
3175
+ const messages = [];
3176
+ if (req.systemPrompt) {
3177
+ messages.push({ role: "system", content: req.systemPrompt });
3178
+ }
3179
+ for (const m of req.messages) {
3180
+ messages.push({ role: m.role, content: m.content });
3181
+ }
3182
+ const lastMsg = messages[messages.length - 1];
3183
+ if (lastMsg) {
3184
+ const structuredPrompt = StructuredPromptBuilder.for(lastMsg.content).withSchema(schemaObj).build();
3185
+ messages[messages.length - 1] = { ...lastMsg, content: structuredPrompt };
3186
+ }
3187
+ const groqReq = GroqChatRequestBuilder.for(model).withMessages(messages).withConfig({
3188
+ temperature: req.temperature ?? STRUCTURED_OUTPUT_TEMPERATURE,
3189
+ maxTokens: req.maxTokens
3190
+ }).build();
3191
+ return this.httpClient.postChatCompletion(groqReq).then((response) => {
3192
+ const content = this.extractContent(response.choices[0]?.message?.content);
3193
+ const parsed = this.jsonParser.parse(content);
3194
+ const genResult = {
3195
+ text: content,
3196
+ model: response.model,
3197
+ providerId: this.id,
3198
+ finishReason: response.choices[0]?.finish_reason ?? "stop",
3199
+ usage: response.usage ? {
3200
+ inputTokens: response.usage.prompt_tokens,
3201
+ outputTokens: response.usage.completion_tokens,
3202
+ totalTokens: response.usage.total_tokens
3203
+ } : void 0
3204
+ };
3205
+ return { value: parsed, result: genResult };
3206
+ });
3207
+ }
3208
+ streamCompletion(prompt, callbacks, options = {}) {
3209
+ return this.streamChatCompletion([createUserMessage(prompt)], callbacks, options);
3210
+ }
3211
+ async streamChatCompletion(messages, callbacks, options = {}) {
3212
+ const model = options.model ?? this.defaultModel;
3213
+ const request = GroqChatRequestBuilder.for(model).withMessages(messages).withConfig(options.generationConfig).withStream(true).build();
3214
+ const parser = new StreamingResponseParser(
3215
+ {
3216
+ onChunk: (chunk) => callbacks.onChunk?.(chunk)
3217
+ },
3218
+ extractContentFromSsePayload
3219
+ );
3220
+ try {
3221
+ const stream = await this.httpClient.streamChatCompletion(request, {
3222
+ signal: options.signal
3223
+ });
3224
+ const fullText = await parser.parse(stream);
3225
+ callbacks.onComplete?.(fullText);
3226
+ return fullText;
3227
+ } catch (error) {
3228
+ const err = error instanceof Error ? error : new Error(String(error));
3229
+ callbacks.onError?.(err);
3230
+ throw err;
3231
+ }
3232
+ }
3233
+ clearCache() {
3234
+ this.cache.clear();
3235
+ }
3236
+ // --- ITextProvider implementation ---
3237
+ resolveModel(tier) {
3238
+ return GROQ_TIERS[tier] ?? this.defaultModel;
3239
+ }
3240
+ async generate(request) {
3241
+ const messages = [];
3242
+ if (request.systemPrompt) {
3243
+ messages.push({ role: "system", content: request.systemPrompt });
3244
+ }
3245
+ for (const m of request.messages) {
3246
+ messages.push({ role: m.role, content: m.content });
3247
+ }
3248
+ const model = request.model ?? (request.tier ? this.resolveModel(request.tier) : this.defaultModel);
3249
+ const groqReq = GroqChatRequestBuilder.for(model).withMessages(messages).withConfig({
3250
+ temperature: request.temperature,
3251
+ maxTokens: request.maxTokens
3252
+ }).build();
3253
+ const resp = await this.httpClient.postChatCompletion(groqReq);
3254
+ const content = resp.choices[0]?.message?.content ?? "";
3255
+ return {
3256
+ text: content,
3257
+ finishReason: resp.choices[0]?.finish_reason ?? "stop",
3258
+ model: resp.model,
3259
+ providerId: this.id,
3260
+ usage: resp.usage ? {
3261
+ inputTokens: resp.usage.prompt_tokens,
3262
+ outputTokens: resp.usage.completion_tokens,
3263
+ totalTokens: resp.usage.total_tokens
3264
+ } : void 0
3265
+ };
3266
+ }
3267
+ async stream(request, callbacks) {
3268
+ const messages = [];
3269
+ if (request.systemPrompt) {
3270
+ messages.push({ role: "system", content: request.systemPrompt });
3271
+ }
3272
+ for (const m of request.messages) {
3273
+ messages.push({ role: m.role, content: m.content });
3274
+ }
3275
+ const model = request.model ?? (request.tier ? this.resolveModel(request.tier) : this.defaultModel);
3276
+ const text = await this.streamChatCompletion(
3277
+ messages,
3278
+ {
3279
+ onChunk: callbacks.onChunk,
3280
+ onError: callbacks.onError
3281
+ },
3282
+ {
3283
+ model,
3284
+ signal: request.signal,
3285
+ generationConfig: {
3286
+ temperature: request.temperature,
3287
+ maxTokens: request.maxTokens
3288
+ }
3289
+ }
3290
+ );
3291
+ const result = {
3292
+ text,
3293
+ finishReason: "stop",
3294
+ model,
3295
+ providerId: this.id
3296
+ };
3297
+ callbacks.onComplete?.(result);
3298
+ return result;
3299
+ }
3300
+ async countTokens(text) {
3301
+ return Math.max(1, Math.ceil(text.length / 4));
3302
+ }
3303
+ async estimateCost(_request) {
3304
+ return 0;
3305
+ }
3306
+ async healthCheck() {
3307
+ try {
3308
+ await this.generateCompletion("ping", {
3309
+ generationConfig: { maxTokens: 1 }
3310
+ });
3311
+ return "healthy";
3312
+ } catch {
3313
+ return "unavailable";
3314
+ }
3315
+ }
3316
+ async executeWithCache(params, factory) {
3317
+ const key = this.cache.generateKey(params);
3318
+ const cached = this.cache.get(key);
3319
+ if (cached !== null) {
3320
+ return cached;
3321
+ }
3322
+ const result = await factory();
3323
+ this.cache.set(key, result);
3324
+ return result;
3325
+ }
3326
+ extractContent(content) {
3327
+ if (!content) {
3328
+ throw new GroqError(
3329
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
3330
+ "No content generated from Groq API"
3331
+ );
3332
+ }
3333
+ return content;
3334
+ }
3335
+ };
3336
+
2970
3337
  // src/core/calculations/random-base36-suffix.ts
2971
3338
  var BASE_36_RADIX = 36;
2972
3339
  var DECIMAL_OFFSET = 2;
@@ -3194,12 +3561,37 @@ function readNumber(source, keys) {
3194
3561
  return null;
3195
3562
  }
3196
3563
 
3564
+ // src/providers/groq/groq-container.ts
3565
+ var container = null;
3566
+ function configureProvider(config) {
3567
+ const configStore = new GroqConfigStore();
3568
+ const transport = new GroqHttpTransport(configStore);
3569
+ const httpClient = new GroqHttpClient({ configStore, transport });
3570
+ httpClient.initialize(config);
3571
+ const textGeneration = new TextGenerationService(
3572
+ httpClient,
3573
+ new CacheManager(),
3574
+ config.textModel
3575
+ );
3576
+ const chat = new ChatService(textGeneration);
3577
+ container = { groqHttpClient: httpClient, textGeneration, chat };
3578
+ return container;
3579
+ }
3580
+ function getProvider() {
3581
+ return container;
3582
+ }
3583
+ function resetProvider() {
3584
+ container?.groqHttpClient.reset();
3585
+ container = null;
3586
+ }
3587
+
3197
3588
  exports.AIError = AIError;
3198
3589
  exports.AIErrorType = AIErrorType;
3199
3590
  exports.ANTHROPIC_API_VERSION = ANTHROPIC_API_VERSION;
3200
3591
  exports.ANTHROPIC_DEFAULT_MAX_TOKENS = ANTHROPIC_DEFAULT_MAX_TOKENS;
3201
3592
  exports.ANTHROPIC_MODELS = ANTHROPIC_MODELS;
3202
3593
  exports.ANTHROPIC_TIERS = ANTHROPIC_TIERS;
3594
+ exports.API_ENDPOINTS = API_ENDPOINTS;
3203
3595
  exports.AnthropicHttpTransport = AnthropicHttpTransport;
3204
3596
  exports.AnthropicProvider = AnthropicProvider;
3205
3597
  exports.AnthropicRequestBuilder = AnthropicRequestBuilder;
@@ -3209,8 +3601,11 @@ exports.ChatIdGenerator = ChatIdGenerator;
3209
3601
  exports.ChatService = ChatService;
3210
3602
  exports.CompositeExecutor = CompositeExecutor;
3211
3603
  exports.DEFAULT_API_KEY_RULE = DEFAULT_API_KEY_RULE;
3604
+ exports.DEFAULT_BASE_URL = DEFAULT_BASE_URL;
3212
3605
  exports.DEFAULT_ERROR_CLASSIFICATION_RULE = DEFAULT_ERROR_CLASSIFICATION_RULE;
3606
+ exports.DEFAULT_GENERATION_CONFIG = DEFAULT_GENERATION_CONFIG;
3213
3607
  exports.DEFAULT_HTTP_STATUS_RULE = DEFAULT_HTTP_STATUS_RULE;
3608
+ exports.DEFAULT_MODELS = DEFAULT_MODELS;
3214
3609
  exports.DEFAULT_PROMPT_STRATEGY = DEFAULT_PROMPT_STRATEGY;
3215
3610
  exports.DEFAULT_RETRY_BACKOFF_MULTIPLIER = DEFAULT_RETRY_BACKOFF_MULTIPLIER;
3216
3611
  exports.DEFAULT_RETRY_INITIAL_DELAY_MS = DEFAULT_RETRY_INITIAL_DELAY_MS;
@@ -3225,6 +3620,9 @@ exports.GROQ_MODELS = GROQ_MODELS;
3225
3620
  exports.GROQ_TIERS = GROQ_TIERS;
3226
3621
  exports.GeminiProvider = GeminiProvider;
3227
3622
  exports.GroqChatRequestBuilder = GroqChatRequestBuilder;
3623
+ exports.GroqConfigStore = GroqConfigStore;
3624
+ exports.GroqError = GroqError;
3625
+ exports.GroqErrorType = AIErrorType;
3228
3626
  exports.GroqHttpClient = GroqHttpClient;
3229
3627
  exports.GroqHttpTransport = GroqHttpTransport;
3230
3628
  exports.GroqProvider = GroqProvider;
@@ -3245,6 +3643,8 @@ exports.SSE_PREFIX = SSE_PREFIX;
3245
3643
  exports.StreamingResponseParser = StreamingResponseParser;
3246
3644
  exports.StructuredPromptBuilder = StructuredPromptBuilder;
3247
3645
  exports.TEXT_TIERS = TEXT_TIERS;
3646
+ exports.TIMEOUTS = TIMEOUTS;
3647
+ exports.TextGenerationService = TextGenerationService;
3248
3648
  exports.ThrottleManager = ThrottleManager;
3249
3649
  exports.USER_FRIENDLY_ERROR_MESSAGES = USER_FRIENDLY_ERROR_MESSAGES;
3250
3650
  exports.asObjectArray = asObjectArray;
@@ -3257,13 +3657,18 @@ exports.cacheManager = cacheManager;
3257
3657
  exports.chatIdGenerator = chatIdGenerator;
3258
3658
  exports.clampScore = clampScore;
3259
3659
  exports.classifyHttpStatus = classifyHttpStatus;
3660
+ exports.configureProvider = configureProvider;
3260
3661
  exports.consumeAnthropicStream = consumeAnthropicStream;
3261
3662
  exports.consumeGroqStream = consumeGroqStream;
3262
3663
  exports.createAI = createAI;
3664
+ exports.createAssistantMessage = createAssistantMessage;
3263
3665
  exports.createFalProvider = createFalProvider;
3264
3666
  exports.createGeminiProvider = createGeminiProvider;
3667
+ exports.createMessage = createMessage;
3265
3668
  exports.createPrunaProvider = createPrunaProvider;
3266
3669
  exports.createSseResponse = createSseResponse;
3670
+ exports.createSystemMessage = createSystemMessage;
3671
+ exports.createUserMessage = createUserMessage;
3267
3672
  exports.debounce = debounce;
3268
3673
  exports.debounceManager = debounceManager;
3269
3674
  exports.defaultEffortForModel = defaultEffortForModel;
@@ -3276,9 +3681,12 @@ exports.extractJsonCandidate = extractJsonCandidate;
3276
3681
  exports.extractJsonFromCodeFence = extractJsonFromCodeFence;
3277
3682
  exports.extractJsonObject = extractJsonObject;
3278
3683
  exports.extractSseDataPayload = extractSseDataPayload;
3684
+ exports.extractTextFromMessages = extractTextFromMessages;
3279
3685
  exports.extractTokenUsage = extractTokenUsage;
3280
3686
  exports.formatErrorForLogging = formatErrorForLogging;
3687
+ exports.formatMessagesForDisplay = formatMessagesForDisplay;
3281
3688
  exports.generateWithPruna = generateWithPruna;
3689
+ exports.getProvider = getProvider;
3282
3690
  exports.isAuthErrorType = isAuthErrorType;
3283
3691
  exports.isMediaProvider = isMediaProvider;
3284
3692
  exports.isRetryableErrorType = isRetryableErrorType;
@@ -3292,9 +3700,12 @@ exports.mergeTierOverrides = mergeTierOverrides;
3292
3700
  exports.messageFormatter = messageFormatter;
3293
3701
  exports.normalizeSseChunk = normalizeSseChunk;
3294
3702
  exports.oneOfCatalog = oneOfCatalog;
3703
+ exports.promptToMessages = promptToMessages;
3295
3704
  exports.repairCommonJsonDefects = repairCommonJsonDefects;
3296
3705
  exports.requestDeduplicator = requestDeduplicator;
3297
3706
  exports.requestQueue = requestQueue;
3707
+ exports.requestStructuredJson = requestStructuredJson;
3708
+ exports.resetProvider = resetProvider;
3298
3709
  exports.resolveModel = resolveModel;
3299
3710
  exports.resolveUserFriendlyErrorMessage = resolveUserFriendlyErrorMessage;
3300
3711
  exports.resolveUserFriendlyMessage = resolveUserFriendlyMessage;