@umituz/web-ai 1.0.0 → 1.0.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.
- package/dist/{ABTesting-DDqNhHtP.d.ts → AIErrors-B2ogd1PB.d.ts} +14 -1
- package/dist/{ABTesting-DWBtKTMQ.d.cts → AIErrors-C5EasV_c.d.cts} +14 -1
- package/dist/{ProviderConfig-a55tLhWT.d.cts → ProviderConfig-DIFa9nmG.d.cts} +10 -1
- package/dist/{ProviderConfig-a55tLhWT.d.ts → ProviderConfig-DIFa9nmG.d.ts} +10 -1
- package/dist/chat/index.cjs +114 -23
- package/dist/chat/index.cjs.map +1 -1
- package/dist/chat/index.d.cts +4 -4
- package/dist/chat/index.d.ts +4 -4
- package/dist/chat/index.js +114 -23
- package/dist/chat/index.js.map +1 -1
- package/dist/{chat.service-DBKq9I2c.d.cts → chat.service-CL1qtYxe.d.cts} +7 -7
- package/dist/{chat.service-RQn8UTXD.d.ts → chat.service-q05GnhEm.d.ts} +7 -7
- package/dist/content/index.cjs +393 -186
- package/dist/content/index.cjs.map +1 -1
- package/dist/content/index.d.cts +7 -8
- package/dist/content/index.d.ts +7 -8
- package/dist/content/index.js +393 -186
- package/dist/content/index.js.map +1 -1
- package/dist/core/index.cjs +112 -15
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.cts +5 -33
- package/dist/core/index.d.ts +5 -33
- package/dist/core/index.js +111 -16
- package/dist/core/index.js.map +1 -1
- package/dist/{create-ai-DGZFBOA1.d.cts → create-ai-DOI9jD3v.d.cts} +4 -21
- package/dist/{create-ai-BhNaz86i.d.ts → create-ai-DXEoke8-.d.ts} +4 -21
- package/dist/hooks/index.cjs +359 -169
- package/dist/hooks/index.cjs.map +1 -1
- package/dist/hooks/index.d.cts +6 -6
- package/dist/hooks/index.d.ts +6 -6
- package/dist/hooks/index.js +359 -169
- package/dist/hooks/index.js.map +1 -1
- package/dist/index-DIHz8_OJ.d.ts +48 -0
- package/dist/index-DKHNcMbl.d.cts +48 -0
- package/dist/index.cjs +245 -94
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -6
- package/dist/index.d.ts +6 -6
- package/dist/index.js +244 -95
- package/dist/index.js.map +1 -1
- package/dist/{provider.factory-COsnprLH.d.cts → provider.factory-BxsfK4WW.d.cts} +1 -1
- package/dist/{provider.factory-CpWFyjbw.d.ts → provider.factory-DfDfk0dK.d.ts} +1 -1
- package/dist/providers/index.cjs +281 -124
- package/dist/providers/index.cjs.map +1 -1
- package/dist/providers/index.d.cts +11 -12
- package/dist/providers/index.d.ts +11 -12
- package/dist/providers/index.js +281 -124
- package/dist/providers/index.js.map +1 -1
- package/dist/wizard/index.d.cts +1 -1
- package/dist/wizard/index.d.ts +1 -1
- package/package.json +4 -1
- package/dist/index-DjX9ZKuM.d.cts +0 -14
- package/dist/index-DxLvE588.d.ts +0 -14
package/dist/index.d.cts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { C as ChatMessage, F as FinishReason, G as GenerationResult, P as ProviderHealth, S as StreamCallbacks, a as StructuredGeneration, b as StructuredTextRequest, T as TextRequest, c as TextTier, d as TokenUsage } from './index-fXjxTR5W.cjs';
|
|
2
|
-
export { T as TEXT_TIERS,
|
|
3
|
-
export {
|
|
2
|
+
export { A as AIError, a as AIErrorMetadata, b as AIErrorType, T as TEXT_TIERS, c as TierModelMap, U as USER_FRIENDLY_ERROR_MESSAGES, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from './index-DKHNcMbl.cjs';
|
|
3
|
+
export { AIErrorBody, ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DebounceOptions, DedupeExecutor, DedupeExecutorOptions, ErrorClassificationRule, HttpStatusClassificationRule, IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, LoggedError, NormalizedSseChunk, QueueExecutor, RetryExecutor, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, SseDeltaExtractor, SseResponseOptions, StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, ThrottleOptions, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey } from './core/index.cjs';
|
|
4
4
|
export { C as CacheManager, a as CacheOptions, b as CacheStats, c as cacheManager } from './cache-manager-Df9LLYGA.cjs';
|
|
5
5
|
export { Q as QueueOptions, R as RequestDeduplicator, a as RequestQueue, b as RetryManager, c as RetryOptions, r as requestDeduplicator, d as requestQueue, e as retryManager, w as withRetry } from './request-deduplicator.util-NDo0_n1y.cjs';
|
|
6
|
-
export { A as AnyProvider, C as CostEstimateRequest, I as IMediaProvider, a as IProviderBase, b as ITextProvider, P as ProviderCapability, c as ProviderFactory, d as ProviderFactoryConfig, i as isMediaProvider, e as isTextProvider } from './provider.factory-
|
|
6
|
+
export { A as AnyProvider, C as CostEstimateRequest, I as IMediaProvider, a as IProviderBase, b as ITextProvider, P as ProviderCapability, c as ProviderFactory, d as ProviderFactoryConfig, i as isMediaProvider, e as isTextProvider } from './provider.factory-BxsfK4WW.cjs';
|
|
7
7
|
export { AnthropicHttpTransport, AnthropicProvider, AnthropicRequestBuilder, BaseProvider, BaseProviderConfig, FalProvider, GEMINI_TIERS, GROQ_MODELS, GROQ_TIERS, GeminiProvider, GroqChatRequestBuilder, GroqHttpClient, GroqHttpTransport, GroqProvider, ProviderError, PrunaProgressStage, PrunaProvider, PrunaRequest, consumeAnthropicStream, consumeGroqStream, createFalProvider, createGeminiProvider, createPrunaProvider, defaultEffortForModel, extractContentFromSsePayload, generateWithPruna, mapAnthropicStopReason, toGroqMessages } from './providers/index.cjs';
|
|
8
|
-
export { A as AIProviderConfig, a as ANTHROPIC_API_VERSION, b as ANTHROPIC_DEFAULT_MAX_TOKENS, c as ANTHROPIC_MODELS, d as ANTHROPIC_TIERS, e as AnthropicEffort, f as AnthropicMessagesRequest, g as AnthropicMessagesResponse, h as AnthropicProviderConfig, i as AnthropicStopReason, j as AnthropicStreamEvent, G as GroqChatChunk, k as GroqChatRequest, l as GroqChatResponse, m as GroqMessage, n as GroqProviderConfig, o as createAI } from './create-ai-
|
|
9
|
-
export { C as ChatConfig, a as ChatConversation, b as ChatMessageSender, c as ChatMessageType, d as ChatService, e as ChatTokenUsage, f as ConversationMessage, D as DEFAULT_PROMPT_STRATEGY, I as IChatService, g as IChatStorage, h as IMessageFormatter, S as SendMessageInput, i as SendMessageResult, j as SystemPromptStrategy, U as UseChatOptions, k as UseChatReturn, l as extractTokenUsage } from './chat.service-
|
|
8
|
+
export { A as AIProviderConfig, a as ANTHROPIC_API_VERSION, b as ANTHROPIC_DEFAULT_MAX_TOKENS, c as ANTHROPIC_MODELS, d as ANTHROPIC_TIERS, e as AnthropicEffort, f as AnthropicMessagesRequest, g as AnthropicMessagesResponse, h as AnthropicProviderConfig, i as AnthropicStopReason, j as AnthropicStreamEvent, G as GroqChatChunk, k as GroqChatRequest, l as GroqChatResponse, m as GroqMessage, n as GroqProviderConfig, o as createAI } from './create-ai-DOI9jD3v.cjs';
|
|
9
|
+
export { C as ChatConfig, a as ChatConversation, b as ChatMessageSender, c as ChatMessageType, d as ChatService, e as ChatTokenUsage, f as ConversationMessage, D as DEFAULT_PROMPT_STRATEGY, I as IChatService, g as IChatStorage, h as IMessageFormatter, S as SendMessageInput, i as SendMessageResult, j as SystemPromptStrategy, U as UseChatOptions, k as UseChatReturn, l as extractTokenUsage } from './chat.service-CL1qtYxe.cjs';
|
|
10
10
|
export { ChatIdGenerator, chatIdGenerator, messageFormatter } from './chat/index.cjs';
|
|
11
|
-
import './ProviderConfig-
|
|
11
|
+
import './ProviderConfig-DIFa9nmG.cjs';
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
export { C as ChatMessage, F as FinishReason, G as GenerationResult, P as ProviderHealth, S as StreamCallbacks, a as StructuredGeneration, b as StructuredTextRequest, T as TextRequest, c as TextTier, d as TokenUsage } from './index-fXjxTR5W.js';
|
|
2
|
-
export { T as TEXT_TIERS,
|
|
3
|
-
export {
|
|
2
|
+
export { A as AIError, a as AIErrorMetadata, b as AIErrorType, T as TEXT_TIERS, c as TierModelMap, U as USER_FRIENDLY_ERROR_MESSAGES, i as isTextTier, m as mergeTierOverrides, r as resolveModel } from './index-DIHz8_OJ.js';
|
|
3
|
+
export { AIErrorBody, ApiKeyValidationRule, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DebounceOptions, DedupeExecutor, DedupeExecutorOptions, ErrorClassificationRule, HttpStatusClassificationRule, IRequestExecutor, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, LoggedError, NormalizedSseChunk, QueueExecutor, RetryExecutor, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, SseDeltaExtractor, SseResponseOptions, StreamingParserCallbacks, StreamingResponseParser, StructuredPromptBuilder, ThrottleManager, ThrottleOptions, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, clampScore, classifyHttpStatus, createSseResponse, debounce, debounceManager, describeAIErrorType, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, formatErrorForLogging, isAuthErrorType, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isValidApiKey, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, splitSseLines, throttle, throttleManager, validateApiKey } from './core/index.js';
|
|
4
4
|
export { C as CacheManager, a as CacheOptions, b as CacheStats, c as cacheManager } from './cache-manager-Df9LLYGA.js';
|
|
5
5
|
export { Q as QueueOptions, R as RequestDeduplicator, a as RequestQueue, b as RetryManager, c as RetryOptions, r as requestDeduplicator, d as requestQueue, e as retryManager, w as withRetry } from './request-deduplicator.util-NDo0_n1y.js';
|
|
6
|
-
export { A as AnyProvider, C as CostEstimateRequest, I as IMediaProvider, a as IProviderBase, b as ITextProvider, P as ProviderCapability, c as ProviderFactory, d as ProviderFactoryConfig, i as isMediaProvider, e as isTextProvider } from './provider.factory-
|
|
6
|
+
export { A as AnyProvider, C as CostEstimateRequest, I as IMediaProvider, a as IProviderBase, b as ITextProvider, P as ProviderCapability, c as ProviderFactory, d as ProviderFactoryConfig, i as isMediaProvider, e as isTextProvider } from './provider.factory-DfDfk0dK.js';
|
|
7
7
|
export { AnthropicHttpTransport, AnthropicProvider, AnthropicRequestBuilder, BaseProvider, BaseProviderConfig, FalProvider, GEMINI_TIERS, GROQ_MODELS, GROQ_TIERS, GeminiProvider, GroqChatRequestBuilder, GroqHttpClient, GroqHttpTransport, GroqProvider, ProviderError, PrunaProgressStage, PrunaProvider, PrunaRequest, consumeAnthropicStream, consumeGroqStream, createFalProvider, createGeminiProvider, createPrunaProvider, defaultEffortForModel, extractContentFromSsePayload, generateWithPruna, mapAnthropicStopReason, toGroqMessages } from './providers/index.js';
|
|
8
|
-
export { A as AIProviderConfig, a as ANTHROPIC_API_VERSION, b as ANTHROPIC_DEFAULT_MAX_TOKENS, c as ANTHROPIC_MODELS, d as ANTHROPIC_TIERS, e as AnthropicEffort, f as AnthropicMessagesRequest, g as AnthropicMessagesResponse, h as AnthropicProviderConfig, i as AnthropicStopReason, j as AnthropicStreamEvent, G as GroqChatChunk, k as GroqChatRequest, l as GroqChatResponse, m as GroqMessage, n as GroqProviderConfig, o as createAI } from './create-ai-
|
|
9
|
-
export { C as ChatConfig, a as ChatConversation, b as ChatMessageSender, c as ChatMessageType, d as ChatService, e as ChatTokenUsage, f as ConversationMessage, D as DEFAULT_PROMPT_STRATEGY, I as IChatService, g as IChatStorage, h as IMessageFormatter, S as SendMessageInput, i as SendMessageResult, j as SystemPromptStrategy, U as UseChatOptions, k as UseChatReturn, l as extractTokenUsage } from './chat.service-
|
|
8
|
+
export { A as AIProviderConfig, a as ANTHROPIC_API_VERSION, b as ANTHROPIC_DEFAULT_MAX_TOKENS, c as ANTHROPIC_MODELS, d as ANTHROPIC_TIERS, e as AnthropicEffort, f as AnthropicMessagesRequest, g as AnthropicMessagesResponse, h as AnthropicProviderConfig, i as AnthropicStopReason, j as AnthropicStreamEvent, G as GroqChatChunk, k as GroqChatRequest, l as GroqChatResponse, m as GroqMessage, n as GroqProviderConfig, o as createAI } from './create-ai-DXEoke8-.js';
|
|
9
|
+
export { C as ChatConfig, a as ChatConversation, b as ChatMessageSender, c as ChatMessageType, d as ChatService, e as ChatTokenUsage, f as ConversationMessage, D as DEFAULT_PROMPT_STRATEGY, I as IChatService, g as IChatStorage, h as IMessageFormatter, S as SendMessageInput, i as SendMessageResult, j as SystemPromptStrategy, U as UseChatOptions, k as UseChatReturn, l as extractTokenUsage } from './chat.service-q05GnhEm.js';
|
|
10
10
|
export { ChatIdGenerator, chatIdGenerator, messageFormatter } from './chat/index.js';
|
|
11
|
-
import './ProviderConfig-
|
|
11
|
+
import './ProviderConfig-DIFa9nmG.js';
|
package/dist/index.js
CHANGED
|
@@ -41,17 +41,80 @@ var USER_FRIENDLY_ERROR_MESSAGES = {
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
// src/core/errors/ai-error.ts
|
|
44
|
-
var
|
|
44
|
+
var KNOWN_ERROR_TYPES = new Set(Object.values(AIErrorType));
|
|
45
|
+
function mapCodeToType(code) {
|
|
46
|
+
switch (code) {
|
|
47
|
+
case "VALIDATION_ERROR":
|
|
48
|
+
case "CLIENT_ERROR":
|
|
49
|
+
return "CLIENT_ERROR" /* CLIENT_ERROR */;
|
|
50
|
+
case "INVALID_API_KEY":
|
|
51
|
+
return "INVALID_API_KEY" /* INVALID_API_KEY */;
|
|
52
|
+
case "MISSING_CONFIG":
|
|
53
|
+
case "PROVIDER_UNAVAILABLE":
|
|
54
|
+
return "MISSING_CONFIG" /* MISSING_CONFIG */;
|
|
55
|
+
case "PROVIDER_QUOTA_EXHAUSTED":
|
|
56
|
+
case "RATE_LIMIT_ERROR":
|
|
57
|
+
return "RATE_LIMIT_ERROR" /* RATE_LIMIT_ERROR */;
|
|
58
|
+
case "NETWORK_ERROR":
|
|
59
|
+
case "TIMEOUT":
|
|
60
|
+
return "NETWORK_ERROR" /* NETWORK_ERROR */;
|
|
61
|
+
case "ABORT_ERROR":
|
|
62
|
+
case "ABORTED":
|
|
63
|
+
return "ABORT_ERROR" /* ABORT_ERROR */;
|
|
64
|
+
case "SERVER_ERROR":
|
|
65
|
+
case "PROVIDER_ERROR":
|
|
66
|
+
case "NO_RESULT":
|
|
67
|
+
return "SERVER_ERROR" /* SERVER_ERROR */;
|
|
68
|
+
default:
|
|
69
|
+
return "UNKNOWN_ERROR" /* UNKNOWN_ERROR */;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function mapMessageToCode(message, fallback = "UNKNOWN") {
|
|
73
|
+
const lower = message.toLowerCase();
|
|
74
|
+
if (lower.includes("validation")) return "VALIDATION_ERROR";
|
|
75
|
+
if (lower.includes("quota")) return "PROVIDER_QUOTA_EXHAUSTED";
|
|
76
|
+
if (lower.includes("unavailable")) return "PROVIDER_UNAVAILABLE";
|
|
77
|
+
if (lower.includes("timeout") || lower.includes("aborted")) {
|
|
78
|
+
return lower.includes("aborted") ? "ABORTED" : "TIMEOUT";
|
|
79
|
+
}
|
|
80
|
+
if (lower.includes("parse") || lower.includes("json")) return "PARSE_ERROR";
|
|
81
|
+
if (lower.includes("no result")) return "NO_RESULT";
|
|
82
|
+
if (lower.includes("network") || lower.includes("fetch")) return "NETWORK_ERROR";
|
|
83
|
+
return fallback;
|
|
84
|
+
}
|
|
85
|
+
var AIError = class _AIError extends Error {
|
|
45
86
|
type;
|
|
87
|
+
code;
|
|
46
88
|
cause;
|
|
47
89
|
metadata;
|
|
48
|
-
constructor(
|
|
49
|
-
|
|
90
|
+
constructor(typeOrMessage, messageOrCode, cause, metadata = {}) {
|
|
91
|
+
let effectiveType;
|
|
92
|
+
let effectiveMessage;
|
|
93
|
+
let effectiveCode;
|
|
94
|
+
if (KNOWN_ERROR_TYPES.has(typeOrMessage)) {
|
|
95
|
+
effectiveType = typeOrMessage;
|
|
96
|
+
effectiveMessage = messageOrCode ?? "";
|
|
97
|
+
effectiveCode = effectiveType;
|
|
98
|
+
} else {
|
|
99
|
+
effectiveMessage = typeOrMessage;
|
|
100
|
+
effectiveCode = messageOrCode ?? "UNKNOWN";
|
|
101
|
+
effectiveType = mapCodeToType(effectiveCode);
|
|
102
|
+
}
|
|
103
|
+
super(effectiveMessage);
|
|
50
104
|
this.name = "AIError";
|
|
51
|
-
this.type =
|
|
105
|
+
this.type = effectiveType;
|
|
106
|
+
this.code = effectiveCode;
|
|
52
107
|
this.cause = cause;
|
|
53
108
|
this.metadata = metadata;
|
|
54
109
|
}
|
|
110
|
+
static from(error, fallbackCode = "UNKNOWN") {
|
|
111
|
+
if (error instanceof _AIError) return error;
|
|
112
|
+
if (error instanceof Error) {
|
|
113
|
+
const code = mapMessageToCode(error.message, fallbackCode);
|
|
114
|
+
return new _AIError(error.message, code, error);
|
|
115
|
+
}
|
|
116
|
+
return new _AIError(String(error), fallbackCode, error);
|
|
117
|
+
}
|
|
55
118
|
toString() {
|
|
56
119
|
const statusPart = typeof this.metadata.status === "number" ? ` (HTTP ${this.metadata.status})` : "";
|
|
57
120
|
return `${this.name} [${this.type}]: ${this.message}${statusPart}`;
|
|
@@ -60,6 +123,7 @@ var AIError = class extends Error {
|
|
|
60
123
|
return {
|
|
61
124
|
name: this.name,
|
|
62
125
|
type: this.type,
|
|
126
|
+
code: this.code,
|
|
63
127
|
message: this.message,
|
|
64
128
|
metadata: this.metadata
|
|
65
129
|
};
|
|
@@ -748,15 +812,22 @@ function oneOfCatalog(catalog, value) {
|
|
|
748
812
|
// src/core/constants/protocol.constants.ts
|
|
749
813
|
var SSE_PREFIX = "data: ";
|
|
750
814
|
var SSE_DONE_MARKER = "[DONE]";
|
|
751
|
-
var JSON_CODE_BLOCK_PATTERN = /```json
|
|
815
|
+
var JSON_CODE_BLOCK_PATTERN = /```(?:json)?\s*\n?([\s\S]*?)\n?```/;
|
|
752
816
|
var JSON_OBJECT_PATTERN = /\{[\s\S]*\}/;
|
|
817
|
+
var JSON_ARRAY_PATTERN = /\[[\s\S]*\]/;
|
|
753
818
|
|
|
754
819
|
// src/core/parsers/sse-lines.ts
|
|
755
820
|
function isSseDataLine(line) {
|
|
756
|
-
return line.startsWith(SSE_PREFIX);
|
|
821
|
+
return line.startsWith(SSE_PREFIX) || line.startsWith("data:");
|
|
757
822
|
}
|
|
758
823
|
function extractSseDataPayload(line) {
|
|
759
|
-
|
|
824
|
+
if (line.startsWith(SSE_PREFIX)) {
|
|
825
|
+
return line.slice(SSE_PREFIX.length);
|
|
826
|
+
}
|
|
827
|
+
if (line.startsWith("data:")) {
|
|
828
|
+
return line.slice(5);
|
|
829
|
+
}
|
|
830
|
+
return line;
|
|
760
831
|
}
|
|
761
832
|
function isSseDoneMarker(payload) {
|
|
762
833
|
return payload === SSE_DONE_MARKER;
|
|
@@ -828,7 +899,7 @@ var StreamingResponseParser = class {
|
|
|
828
899
|
// src/core/parsers/json-content-extractor.ts
|
|
829
900
|
function extractJsonFromCodeFence(content) {
|
|
830
901
|
const match = content.match(JSON_CODE_BLOCK_PATTERN);
|
|
831
|
-
if (match && match[1]) return match[1];
|
|
902
|
+
if (match && match[1]) return match[1].trim();
|
|
832
903
|
return null;
|
|
833
904
|
}
|
|
834
905
|
function extractJsonObject(content) {
|
|
@@ -836,8 +907,27 @@ function extractJsonObject(content) {
|
|
|
836
907
|
if (match && match[0]) return match[0];
|
|
837
908
|
return null;
|
|
838
909
|
}
|
|
910
|
+
function extractJsonArray(content) {
|
|
911
|
+
const match = content.match(JSON_ARRAY_PATTERN);
|
|
912
|
+
if (match && match[0]) return match[0];
|
|
913
|
+
return null;
|
|
914
|
+
}
|
|
915
|
+
function repairCommonJsonDefects(text) {
|
|
916
|
+
return text.replace(/(:\s*-?\d+(?:\.\d+)?)\s*"/g, "$1").replace(/(:\s*"[^"]*")"/g, "$1");
|
|
917
|
+
}
|
|
839
918
|
function extractJsonCandidate(content) {
|
|
840
|
-
|
|
919
|
+
const fromFence = extractJsonFromCodeFence(content);
|
|
920
|
+
if (fromFence) return fromFence;
|
|
921
|
+
const objectIndex = content.indexOf("{");
|
|
922
|
+
const arrayIndex = content.indexOf("[");
|
|
923
|
+
if (objectIndex !== -1 && (arrayIndex === -1 || objectIndex < arrayIndex)) {
|
|
924
|
+
const obj = extractJsonObject(content);
|
|
925
|
+
if (obj) return obj;
|
|
926
|
+
} else if (arrayIndex !== -1) {
|
|
927
|
+
const arr = extractJsonArray(content);
|
|
928
|
+
if (arr) return arr;
|
|
929
|
+
}
|
|
930
|
+
return content.trim();
|
|
841
931
|
}
|
|
842
932
|
|
|
843
933
|
// src/core/parsers/json-response.parser.ts
|
|
@@ -846,12 +936,17 @@ var JsonResponseParser = class {
|
|
|
846
936
|
const candidate = extractJsonCandidate(rawContent);
|
|
847
937
|
try {
|
|
848
938
|
return JSON.parse(candidate);
|
|
849
|
-
} catch
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
939
|
+
} catch {
|
|
940
|
+
try {
|
|
941
|
+
return JSON.parse(repairCommonJsonDefects(candidate));
|
|
942
|
+
} catch (error) {
|
|
943
|
+
throw new AIError(
|
|
944
|
+
"UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
|
|
945
|
+
"Failed to parse structured response as JSON",
|
|
946
|
+
error instanceof Error ? error : void 0,
|
|
947
|
+
{ rawContent }
|
|
948
|
+
);
|
|
949
|
+
}
|
|
855
950
|
}
|
|
856
951
|
}
|
|
857
952
|
};
|
|
@@ -977,38 +1072,6 @@ function isMediaProvider(provider) {
|
|
|
977
1072
|
return provider.capabilities.includes("image") || provider.capabilities.includes("video");
|
|
978
1073
|
}
|
|
979
1074
|
|
|
980
|
-
// src/content/domain/errors/AIErrors.ts
|
|
981
|
-
var AIError2 = class _AIError extends Error {
|
|
982
|
-
code;
|
|
983
|
-
cause;
|
|
984
|
-
constructor(message, code, cause) {
|
|
985
|
-
super(message);
|
|
986
|
-
this.name = "AIError";
|
|
987
|
-
this.code = code;
|
|
988
|
-
this.cause = cause;
|
|
989
|
-
}
|
|
990
|
-
static from(error, fallbackCode = "UNKNOWN") {
|
|
991
|
-
if (error instanceof _AIError) return error;
|
|
992
|
-
if (error instanceof Error) {
|
|
993
|
-
return new _AIError(error.message, mapMessageToCode(error.message, fallbackCode), error);
|
|
994
|
-
}
|
|
995
|
-
return new _AIError(String(error), fallbackCode, error);
|
|
996
|
-
}
|
|
997
|
-
};
|
|
998
|
-
function mapMessageToCode(message, fallback) {
|
|
999
|
-
const lower = message.toLowerCase();
|
|
1000
|
-
if (lower.includes("validation")) return "VALIDATION_ERROR";
|
|
1001
|
-
if (lower.includes("quota")) return "PROVIDER_QUOTA_EXHAUSTED";
|
|
1002
|
-
if (lower.includes("unavailable")) return "PROVIDER_UNAVAILABLE";
|
|
1003
|
-
if (lower.includes("timeout") || lower.includes("aborted")) {
|
|
1004
|
-
return lower.includes("aborted") ? "ABORTED" : "TIMEOUT";
|
|
1005
|
-
}
|
|
1006
|
-
if (lower.includes("parse") || lower.includes("json")) return "PARSE_ERROR";
|
|
1007
|
-
if (lower.includes("no result")) return "NO_RESULT";
|
|
1008
|
-
if (lower.includes("network") || lower.includes("fetch")) return "NETWORK_ERROR";
|
|
1009
|
-
return fallback;
|
|
1010
|
-
}
|
|
1011
|
-
|
|
1012
1075
|
// src/content/domain/limits/ProviderTimingConfig.ts
|
|
1013
1076
|
var ProviderTimingConfig = {
|
|
1014
1077
|
DEFAULT_TIMEOUT_MS: 3e4,
|
|
@@ -1073,7 +1136,7 @@ var BaseProvider = class {
|
|
|
1073
1136
|
throw lastError || new Error("Retry attempts exhausted");
|
|
1074
1137
|
}
|
|
1075
1138
|
};
|
|
1076
|
-
var ProviderError = class extends
|
|
1139
|
+
var ProviderError = class extends AIError {
|
|
1077
1140
|
constructor(message, providerId, originalError) {
|
|
1078
1141
|
super(message, "PROVIDER_ERROR", originalError);
|
|
1079
1142
|
this.providerId = providerId;
|
|
@@ -1167,12 +1230,16 @@ var ProviderFactory = class {
|
|
|
1167
1230
|
let wake = null;
|
|
1168
1231
|
let finished = false;
|
|
1169
1232
|
let failure;
|
|
1233
|
+
const controller = new AbortController();
|
|
1234
|
+
const onAbort = () => controller.abort();
|
|
1235
|
+
request.signal?.addEventListener("abort", onAbort);
|
|
1236
|
+
const effectiveRequest = { ...request, signal: controller.signal };
|
|
1170
1237
|
const notify = () => {
|
|
1171
1238
|
const resolve = wake;
|
|
1172
1239
|
wake = null;
|
|
1173
1240
|
resolve?.();
|
|
1174
1241
|
};
|
|
1175
|
-
const completion = this.chatStream(
|
|
1242
|
+
const completion = this.chatStream(effectiveRequest, {
|
|
1176
1243
|
onChunk: (chunk) => {
|
|
1177
1244
|
queue.push(chunk);
|
|
1178
1245
|
notify();
|
|
@@ -1188,18 +1255,23 @@ var ProviderFactory = class {
|
|
|
1188
1255
|
notify();
|
|
1189
1256
|
}
|
|
1190
1257
|
);
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1258
|
+
try {
|
|
1259
|
+
while (!finished || queue.length > 0) {
|
|
1260
|
+
if (queue.length === 0 && !finished) {
|
|
1261
|
+
await new Promise((resolve) => {
|
|
1262
|
+
wake = resolve;
|
|
1263
|
+
});
|
|
1264
|
+
}
|
|
1265
|
+
while (queue.length > 0) {
|
|
1266
|
+
yield queue.shift();
|
|
1267
|
+
}
|
|
1268
|
+
if (failure) throw failure;
|
|
1199
1269
|
}
|
|
1200
|
-
|
|
1270
|
+
await completion;
|
|
1271
|
+
} finally {
|
|
1272
|
+
controller.abort();
|
|
1273
|
+
request.signal?.removeEventListener("abort", onAbort);
|
|
1201
1274
|
}
|
|
1202
|
-
await completion;
|
|
1203
1275
|
}
|
|
1204
1276
|
async generateJson(request) {
|
|
1205
1277
|
const effective = request.model || request.tier ? request : { ...request, tier: this.defaultTier };
|
|
@@ -1608,11 +1680,14 @@ async function consumeAnthropicStream(stream, callbacks) {
|
|
|
1608
1680
|
break;
|
|
1609
1681
|
case "message_stop":
|
|
1610
1682
|
break;
|
|
1611
|
-
case "error":
|
|
1683
|
+
case "error": {
|
|
1684
|
+
const errType = event.error.type;
|
|
1685
|
+
const mappedType = errType === "rate_limit_error" ? "RATE_LIMIT_ERROR" /* RATE_LIMIT_ERROR */ : errType === "authentication_error" ? "INVALID_API_KEY" /* INVALID_API_KEY */ : errType === "invalid_request_error" ? "CLIENT_ERROR" /* CLIENT_ERROR */ : "SERVER_ERROR" /* SERVER_ERROR */;
|
|
1612
1686
|
throw new AIError(
|
|
1613
|
-
|
|
1687
|
+
mappedType,
|
|
1614
1688
|
event.error.message || "Anthropic stream failed mid-flight"
|
|
1615
1689
|
);
|
|
1690
|
+
}
|
|
1616
1691
|
}
|
|
1617
1692
|
};
|
|
1618
1693
|
try {
|
|
@@ -2070,6 +2145,13 @@ async function consumeGroqStream(stream, callbacks) {
|
|
|
2070
2145
|
} catch {
|
|
2071
2146
|
return;
|
|
2072
2147
|
}
|
|
2148
|
+
const errorBody = chunk.error;
|
|
2149
|
+
if (errorBody) {
|
|
2150
|
+
throw new AIError(
|
|
2151
|
+
errorBody.message?.toLowerCase().includes("rate limit") ? "RATE_LIMIT_ERROR" /* RATE_LIMIT_ERROR */ : "SERVER_ERROR" /* SERVER_ERROR */,
|
|
2152
|
+
errorBody.message || "Groq stream failed mid-flight"
|
|
2153
|
+
);
|
|
2154
|
+
}
|
|
2073
2155
|
if (chunk.model) model = chunk.model;
|
|
2074
2156
|
const choice = chunk.choices?.[0];
|
|
2075
2157
|
const delta = choice?.delta?.content;
|
|
@@ -2084,13 +2166,6 @@ async function consumeGroqStream(stream, callbacks) {
|
|
|
2084
2166
|
if (tailUsage) {
|
|
2085
2167
|
usage = mapGroqUsage(tailUsage);
|
|
2086
2168
|
}
|
|
2087
|
-
const errorBody = chunk.error;
|
|
2088
|
-
if (errorBody) {
|
|
2089
|
-
throw new AIError(
|
|
2090
|
-
"SERVER_ERROR" /* SERVER_ERROR */,
|
|
2091
|
-
errorBody.message || "Groq stream failed mid-flight"
|
|
2092
|
-
);
|
|
2093
|
-
}
|
|
2094
2169
|
};
|
|
2095
2170
|
try {
|
|
2096
2171
|
while (true) {
|
|
@@ -2357,7 +2432,9 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
2357
2432
|
headers: this.authHeaders()
|
|
2358
2433
|
}
|
|
2359
2434
|
);
|
|
2360
|
-
|
|
2435
|
+
if (response.ok) return "healthy";
|
|
2436
|
+
if (response.status === 401 || response.status === 403) return "unavailable";
|
|
2437
|
+
return "degraded";
|
|
2361
2438
|
} catch {
|
|
2362
2439
|
return "unavailable";
|
|
2363
2440
|
}
|
|
@@ -2368,6 +2445,8 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
2368
2445
|
async generate(request) {
|
|
2369
2446
|
try {
|
|
2370
2447
|
const model = request.model ?? this.resolveModel(request.tier ?? "balanced");
|
|
2448
|
+
const systemMessages = request.messages.filter((m) => m.role === "system");
|
|
2449
|
+
const systemPrompt = request.systemPrompt && request.systemPrompt.length > 0 ? request.systemPrompt : systemMessages.length > 0 ? systemMessages.map((m) => m.content).join("\n") : void 0;
|
|
2371
2450
|
const response = await this.withRetry(async () => {
|
|
2372
2451
|
return await this.fetchWithTimeout(
|
|
2373
2452
|
`${this.config.baseUrl}/models/${model}:generateContent`,
|
|
@@ -2375,22 +2454,28 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
2375
2454
|
method: "POST",
|
|
2376
2455
|
headers: this.authHeaders(),
|
|
2377
2456
|
body: JSON.stringify({
|
|
2378
|
-
systemInstruction:
|
|
2457
|
+
systemInstruction: systemPrompt && systemPrompt.length > 0 ? { parts: [{ text: systemPrompt }] } : void 0,
|
|
2379
2458
|
contents: toGeminiContents(request.messages),
|
|
2380
2459
|
generationConfig: {
|
|
2381
|
-
temperature: request.temperature
|
|
2382
|
-
maxOutputTokens: request.maxTokens
|
|
2383
|
-
topP: request.topP
|
|
2460
|
+
temperature: request.temperature ?? 0.7,
|
|
2461
|
+
maxOutputTokens: request.maxTokens ?? 2048,
|
|
2462
|
+
topP: request.topP ?? 0.9
|
|
2384
2463
|
}
|
|
2385
2464
|
})
|
|
2386
2465
|
}
|
|
2387
2466
|
);
|
|
2388
2467
|
});
|
|
2389
2468
|
if (!response.ok) {
|
|
2390
|
-
|
|
2469
|
+
const message = await extractErrorMessageFromResponse(response);
|
|
2470
|
+
throw new AIError(
|
|
2471
|
+
classifyHttpStatus(response.status),
|
|
2472
|
+
`Gemini API error (${response.status}): ${message}`,
|
|
2473
|
+
void 0,
|
|
2474
|
+
{ status: response.status, model }
|
|
2475
|
+
);
|
|
2391
2476
|
}
|
|
2392
2477
|
const data = await response.json();
|
|
2393
|
-
const text = data.candidates[0]?.content?.parts?.map((part) => part.text ?? "").join("") ?? "";
|
|
2478
|
+
const text = data.candidates?.[0]?.content?.parts?.map((part) => part.text ?? "").join("") ?? "";
|
|
2394
2479
|
if (text.length === 0) {
|
|
2395
2480
|
throw new AIError("SERVER_ERROR" /* SERVER_ERROR */, "No content generated from Gemini API", void 0, { model });
|
|
2396
2481
|
}
|
|
@@ -2403,7 +2488,7 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
2403
2488
|
} : void 0,
|
|
2404
2489
|
model,
|
|
2405
2490
|
providerId: this.id,
|
|
2406
|
-
finishReason: mapGeminiFinishReason(data.candidates[0]?.finishReason)
|
|
2491
|
+
finishReason: mapGeminiFinishReason(data.candidates?.[0]?.finishReason)
|
|
2407
2492
|
};
|
|
2408
2493
|
} catch (error) {
|
|
2409
2494
|
if (error instanceof AIError) throw error;
|
|
@@ -2455,12 +2540,18 @@ var GeminiProvider = class extends BaseProvider {
|
|
|
2455
2540
|
);
|
|
2456
2541
|
});
|
|
2457
2542
|
if (!response.ok) {
|
|
2458
|
-
|
|
2543
|
+
const message = await extractErrorMessageFromResponse(response);
|
|
2544
|
+
throw new AIError(
|
|
2545
|
+
classifyHttpStatus(response.status),
|
|
2546
|
+
`Gemini image generation error (${response.status}): ${message}`,
|
|
2547
|
+
void 0,
|
|
2548
|
+
{ status: response.status }
|
|
2549
|
+
);
|
|
2459
2550
|
}
|
|
2460
2551
|
const data = await response.json();
|
|
2461
|
-
const imageData = data.candidates[0]?.content?.parts[0]?.inlineData;
|
|
2552
|
+
const imageData = data.candidates?.[0]?.content?.parts?.[0]?.inlineData;
|
|
2462
2553
|
if (!imageData) {
|
|
2463
|
-
throw new
|
|
2554
|
+
throw new AIError("SERVER_ERROR" /* SERVER_ERROR */, "No image data in Gemini response");
|
|
2464
2555
|
}
|
|
2465
2556
|
const url = `data:${imageData.mimeType};base64,${imageData.data}`;
|
|
2466
2557
|
return {
|
|
@@ -2779,17 +2870,70 @@ var PrunaProvider = class {
|
|
|
2779
2870
|
async estimateCost(_request) {
|
|
2780
2871
|
return 1;
|
|
2781
2872
|
}
|
|
2782
|
-
async generateImage(
|
|
2783
|
-
|
|
2873
|
+
async generateImage(request) {
|
|
2874
|
+
let finalUrl;
|
|
2875
|
+
const model = this.config.models?.textToImage;
|
|
2876
|
+
for await (const stage of generateWithPruna(
|
|
2877
|
+
{ prompt: request.prompt, model, quality: request.quality },
|
|
2878
|
+
this.config.apiKey
|
|
2879
|
+
)) {
|
|
2880
|
+
if (stage.error) throw stage.error;
|
|
2881
|
+
if (stage.result?.url) finalUrl = stage.result.url;
|
|
2882
|
+
}
|
|
2883
|
+
if (!finalUrl) {
|
|
2884
|
+
throw new AIError("SERVER_ERROR" /* SERVER_ERROR */, "No image generated by Pruna AI");
|
|
2885
|
+
}
|
|
2886
|
+
return {
|
|
2887
|
+
id: Date.now().toString(),
|
|
2888
|
+
type: "image",
|
|
2889
|
+
url: finalUrl,
|
|
2890
|
+
metadata: { provider: this.id, model: model ?? "p-image" },
|
|
2891
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2892
|
+
};
|
|
2784
2893
|
}
|
|
2785
|
-
async generateVideo(
|
|
2786
|
-
|
|
2894
|
+
async generateVideo(request) {
|
|
2895
|
+
let finalUrl;
|
|
2896
|
+
const model = this.config.models?.textToVideo;
|
|
2897
|
+
for await (const stage of generateWithPruna(
|
|
2898
|
+
{ prompt: request.prompt, model, duration: request.duration, aspectRatio: request.aspectRatio },
|
|
2899
|
+
this.config.apiKey
|
|
2900
|
+
)) {
|
|
2901
|
+
if (stage.error) throw stage.error;
|
|
2902
|
+
if (stage.result?.url) finalUrl = stage.result.url;
|
|
2903
|
+
}
|
|
2904
|
+
if (!finalUrl) {
|
|
2905
|
+
throw new AIError("SERVER_ERROR" /* SERVER_ERROR */, "No video generated by Pruna AI");
|
|
2906
|
+
}
|
|
2907
|
+
return {
|
|
2908
|
+
id: Date.now().toString(),
|
|
2909
|
+
type: "video",
|
|
2910
|
+
url: finalUrl,
|
|
2911
|
+
metadata: { provider: this.id, model: model ?? "p-video" },
|
|
2912
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2913
|
+
};
|
|
2787
2914
|
}
|
|
2788
|
-
async imageToVideo(
|
|
2789
|
-
|
|
2915
|
+
async imageToVideo(request) {
|
|
2916
|
+
let finalUrl;
|
|
2917
|
+
for await (const stage of generateWithPruna(
|
|
2918
|
+
{ image: request.imageUrl, prompt: request.prompt, duration: request.duration, motion: request.motion },
|
|
2919
|
+
this.config.apiKey
|
|
2920
|
+
)) {
|
|
2921
|
+
if (stage.error) throw stage.error;
|
|
2922
|
+
if (stage.result?.url) finalUrl = stage.result.url;
|
|
2923
|
+
}
|
|
2924
|
+
if (!finalUrl) {
|
|
2925
|
+
throw new AIError("SERVER_ERROR" /* SERVER_ERROR */, "No video generated from image by Pruna AI");
|
|
2926
|
+
}
|
|
2927
|
+
return {
|
|
2928
|
+
id: Date.now().toString(),
|
|
2929
|
+
type: "video",
|
|
2930
|
+
url: finalUrl,
|
|
2931
|
+
metadata: { provider: this.id, model: "p-image-to-video" },
|
|
2932
|
+
createdAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
2933
|
+
};
|
|
2790
2934
|
}
|
|
2791
2935
|
async videoToVideo(_request) {
|
|
2792
|
-
throw new AIError("
|
|
2936
|
+
throw new AIError("CLIENT_ERROR" /* CLIENT_ERROR */, "Pruna AI provider does not support video-to-video conversion");
|
|
2793
2937
|
}
|
|
2794
2938
|
};
|
|
2795
2939
|
function createPrunaProvider(config) {
|
|
@@ -2941,9 +3085,12 @@ var ChatService = class {
|
|
|
2941
3085
|
};
|
|
2942
3086
|
}
|
|
2943
3087
|
async getConversations() {
|
|
3088
|
+
if (this.storage && "getConversations" in this.storage && typeof this.storage.getConversations === "function") {
|
|
3089
|
+
return this.storage.getConversations();
|
|
3090
|
+
}
|
|
2944
3091
|
return [];
|
|
2945
3092
|
}
|
|
2946
|
-
async sendMessage(input) {
|
|
3093
|
+
async sendMessage(input, signal) {
|
|
2947
3094
|
const userMessage = {
|
|
2948
3095
|
...messageFormatter.toChatMessage(input.text, "user"),
|
|
2949
3096
|
type: input.type ?? "text",
|
|
@@ -2952,13 +3099,14 @@ var ChatService = class {
|
|
|
2952
3099
|
const aiResponse = await this.generateAIResponse(
|
|
2953
3100
|
input.companionId,
|
|
2954
3101
|
input.text,
|
|
2955
|
-
[]
|
|
3102
|
+
[],
|
|
3103
|
+
signal
|
|
2956
3104
|
);
|
|
2957
3105
|
return { userMessage, aiResponse };
|
|
2958
3106
|
}
|
|
2959
|
-
async generateAIResponse(companionId, userMessage, context = []) {
|
|
3107
|
+
async generateAIResponse(companionId, userMessage, context = [], signal) {
|
|
2960
3108
|
const result = await this.run({
|
|
2961
|
-
...this.buildRequest(userMessage, context)
|
|
3109
|
+
...this.buildRequest(userMessage, context, signal)
|
|
2962
3110
|
});
|
|
2963
3111
|
return {
|
|
2964
3112
|
...messageFormatter.toChatMessage(result.text, "assistant"),
|
|
@@ -2974,12 +3122,12 @@ var ChatService = class {
|
|
|
2974
3122
|
}
|
|
2975
3123
|
};
|
|
2976
3124
|
}
|
|
2977
|
-
async generateStreamingResponse(userMessage, context, onChunk) {
|
|
2978
|
-
const request = this.buildRequest(userMessage, context);
|
|
3125
|
+
async generateStreamingResponse(userMessage, context, onChunk, signal) {
|
|
3126
|
+
const request = this.buildRequest(userMessage, context, signal);
|
|
2979
3127
|
const result = await this.runStream(request, { onChunk });
|
|
2980
3128
|
return result.text;
|
|
2981
3129
|
}
|
|
2982
|
-
buildRequest(userMessage, context) {
|
|
3130
|
+
buildRequest(userMessage, context, signal) {
|
|
2983
3131
|
const messages = messageFormatter.toCoreMessages(context);
|
|
2984
3132
|
messages.push({ role: "user", content: userMessage });
|
|
2985
3133
|
return {
|
|
@@ -2988,7 +3136,8 @@ var ChatService = class {
|
|
|
2988
3136
|
model: this.config.model,
|
|
2989
3137
|
tier: this.config.tier,
|
|
2990
3138
|
temperature: this.config.temperature,
|
|
2991
|
-
maxTokens: this.config.maxTokens
|
|
3139
|
+
maxTokens: this.config.maxTokens,
|
|
3140
|
+
...signal !== void 0 ? { signal } : {}
|
|
2992
3141
|
};
|
|
2993
3142
|
}
|
|
2994
3143
|
resolveSystemPrompt() {
|
|
@@ -3043,6 +3192,6 @@ function readNumber(source, keys) {
|
|
|
3043
3192
|
return null;
|
|
3044
3193
|
}
|
|
3045
3194
|
|
|
3046
|
-
export { AIError, AIErrorType, ANTHROPIC_API_VERSION, ANTHROPIC_DEFAULT_MAX_TOKENS, ANTHROPIC_MODELS, ANTHROPIC_TIERS, AnthropicHttpTransport, AnthropicProvider, AnthropicRequestBuilder, BaseProvider, CacheManager, ChatIdGenerator, ChatService, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_PROMPT_STRATEGY, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DedupeExecutor, FalProvider, GEMINI_TIERS, GROQ_MODELS, GROQ_TIERS, GeminiProvider, GroqChatRequestBuilder, GroqHttpClient, GroqHttpTransport, GroqProvider, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, ProviderError, ProviderFactory, PrunaProvider, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, StreamingResponseParser, StructuredPromptBuilder, TEXT_TIERS, ThrottleManager, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, cacheManager, chatIdGenerator, clampScore, classifyHttpStatus, consumeAnthropicStream, consumeGroqStream, createAI, createFalProvider, createGeminiProvider, createPrunaProvider, createSseResponse, debounce, debounceManager, defaultEffortForModel, describeAIErrorType, extractContentFromSsePayload, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, extractTokenUsage, formatErrorForLogging, generateWithPruna, isAuthErrorType, isMediaProvider, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isTextProvider, isTextTier, isValidApiKey, mapAnthropicStopReason, mergeTierOverrides, messageFormatter, normalizeSseChunk, oneOfCatalog, requestDeduplicator, requestQueue, resolveModel, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, retryManager, splitSseLines, throttle, throttleManager, toGroqMessages, validateApiKey, withRetry };
|
|
3195
|
+
export { AIError, AIErrorType, ANTHROPIC_API_VERSION, ANTHROPIC_DEFAULT_MAX_TOKENS, ANTHROPIC_MODELS, ANTHROPIC_TIERS, AnthropicHttpTransport, AnthropicProvider, AnthropicRequestBuilder, BaseProvider, CacheManager, ChatIdGenerator, ChatService, CompositeExecutor, DEFAULT_API_KEY_RULE, DEFAULT_ERROR_CLASSIFICATION_RULE, DEFAULT_HTTP_STATUS_RULE, DEFAULT_PROMPT_STRATEGY, DEFAULT_RETRY_BACKOFF_MULTIPLIER, DEFAULT_RETRY_INITIAL_DELAY_MS, DEFAULT_RETRY_JITTER_FACTOR, DEFAULT_RETRY_MAX_ATTEMPTS, DEFAULT_RETRY_MAX_DELAY_MS, DebounceManager, DedupeExecutor, FalProvider, GEMINI_TIERS, GROQ_MODELS, GROQ_TIERS, GeminiProvider, GroqChatRequestBuilder, GroqHttpClient, GroqHttpTransport, GroqProvider, JSON_CODE_BLOCK_PATTERN, JSON_OBJECT_PATTERN, JsonResponseParser, ProviderError, ProviderFactory, PrunaProvider, QueueExecutor, RequestDeduplicator, RequestQueue, RetryExecutor, RetryManager, SSE_BRIDGE_EVENTS, SSE_DONE_MARKER, SSE_PREFIX, StreamingResponseParser, StructuredPromptBuilder, TEXT_TIERS, ThrottleManager, USER_FRIENDLY_ERROR_MESSAGES, asObjectArray, asRecord, asStringArray, asTrimmedOptionalString, buildCacheKey, buildHttpStatusFallback, cacheManager, chatIdGenerator, clampScore, classifyHttpStatus, consumeAnthropicStream, consumeGroqStream, createAI, createFalProvider, createGeminiProvider, createPrunaProvider, createSseResponse, debounce, debounceManager, defaultEffortForModel, describeAIErrorType, extractContentFromSsePayload, extractErrorMessageFromJsonBody, extractErrorMessageFromResponse, extractJsonArray, extractJsonCandidate, extractJsonFromCodeFence, extractJsonObject, extractSseDataPayload, extractTokenUsage, formatErrorForLogging, generateWithPruna, isAuthErrorType, isMediaProvider, isRetryableErrorType, isSseDataLine, isSseDoneMarker, isTextProvider, isTextTier, isValidApiKey, mapAnthropicStopReason, mergeTierOverrides, messageFormatter, normalizeSseChunk, oneOfCatalog, repairCommonJsonDefects, requestDeduplicator, requestQueue, resolveModel, resolveUserFriendlyErrorMessage, resolveUserFriendlyMessage, retryManager, splitSseLines, throttle, throttleManager, toGroqMessages, validateApiKey, withRetry };
|
|
3047
3196
|
//# sourceMappingURL=index.js.map
|
|
3048
3197
|
//# sourceMappingURL=index.js.map
|