@umituz/react-native-ai-groq-provider 1.0.28 → 1.0.29
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/application/use-cases/chat-generation.usecase.d.ts +11 -0
- package/dist/application/use-cases/chat-generation.usecase.d.ts.map +1 -0
- package/dist/application/use-cases/chat-generation.usecase.js +40 -0
- package/dist/application/use-cases/chat-generation.usecase.js.map +1 -0
- package/dist/application/use-cases/chat-session.usecase.d.ts +41 -0
- package/dist/application/use-cases/chat-session.usecase.d.ts.map +1 -0
- package/dist/application/use-cases/chat-session.usecase.js +138 -0
- package/dist/application/use-cases/chat-session.usecase.js.map +1 -0
- package/dist/application/use-cases/streaming.usecase.d.ts +17 -0
- package/dist/application/use-cases/streaming.usecase.d.ts.map +1 -0
- package/dist/application/use-cases/streaming.usecase.js +46 -0
- package/dist/application/use-cases/streaming.usecase.js.map +1 -0
- package/dist/application/use-cases/structured-generation.usecase.d.ts +14 -0
- package/dist/application/use-cases/structured-generation.usecase.d.ts.map +1 -0
- package/dist/application/use-cases/structured-generation.usecase.js +77 -0
- package/dist/application/use-cases/structured-generation.usecase.js.map +1 -0
- package/dist/application/use-cases/text-generation.usecase.d.ts +11 -0
- package/dist/application/use-cases/text-generation.usecase.d.ts.map +1 -0
- package/dist/application/use-cases/text-generation.usecase.js +36 -0
- package/dist/application/use-cases/text-generation.usecase.js.map +1 -0
- package/dist/domain/entities/error.types.d.ts +3 -1
- package/dist/domain/entities/error.types.d.ts.map +1 -1
- package/dist/domain/entities/error.types.js +12 -2
- package/dist/domain/entities/error.types.js.map +1 -1
- package/dist/index.d.ts +20 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -39
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/http/groq-http-client.d.ts +22 -0
- package/dist/infrastructure/http/groq-http-client.d.ts.map +1 -0
- package/dist/infrastructure/http/groq-http-client.js +166 -0
- package/dist/infrastructure/http/groq-http-client.js.map +1 -0
- package/dist/infrastructure/http/streaming-client.d.ts +12 -0
- package/dist/infrastructure/http/streaming-client.d.ts.map +1 -0
- package/dist/infrastructure/http/streaming-client.js +148 -0
- package/dist/infrastructure/http/streaming-client.js.map +1 -0
- package/dist/infrastructure/telemetry/TelemetryHooks.d.ts +16 -4
- package/dist/infrastructure/telemetry/TelemetryHooks.d.ts.map +1 -1
- package/dist/infrastructure/telemetry/TelemetryHooks.js +44 -11
- package/dist/infrastructure/telemetry/TelemetryHooks.js.map +1 -1
- package/dist/infrastructure/utils/async/execute-state.util.d.ts +6 -2
- package/dist/infrastructure/utils/async/execute-state.util.d.ts.map +1 -1
- package/dist/infrastructure/utils/async/execute-state.util.js +29 -4
- package/dist/infrastructure/utils/async/execute-state.util.js.map +1 -1
- package/dist/infrastructure/utils/calculation.util.d.ts +61 -0
- package/dist/infrastructure/utils/calculation.util.d.ts.map +1 -0
- package/dist/infrastructure/utils/calculation.util.js +165 -0
- package/dist/infrastructure/utils/calculation.util.js.map +1 -0
- package/dist/infrastructure/utils/content-mapper.util.d.ts +5 -1
- package/dist/infrastructure/utils/content-mapper.util.d.ts.map +1 -1
- package/dist/infrastructure/utils/content-mapper.util.js +17 -0
- package/dist/infrastructure/utils/content-mapper.util.js.map +1 -1
- package/dist/presentation/hooks/use-groq.hook.d.ts +26 -0
- package/dist/presentation/hooks/use-groq.hook.d.ts.map +1 -0
- package/dist/presentation/hooks/use-groq.hook.js +151 -0
- package/dist/presentation/hooks/use-groq.hook.js.map +1 -0
- package/dist/providers/ConfigBuilder.d.ts +1 -57
- package/dist/providers/ConfigBuilder.d.ts.map +1 -1
- package/dist/providers/ConfigBuilder.js +2 -68
- package/dist/providers/ConfigBuilder.js.map +1 -1
- package/dist/providers/ProviderFactory.d.ts +4 -34
- package/dist/providers/ProviderFactory.d.ts.map +1 -1
- package/dist/providers/ProviderFactory.js +9 -50
- package/dist/providers/ProviderFactory.js.map +1 -1
- package/dist/shared/logger.d.ts +26 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +52 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/request-builder.d.ts +17 -0
- package/dist/shared/request-builder.d.ts.map +1 -0
- package/dist/shared/request-builder.js +54 -0
- package/dist/shared/request-builder.js.map +1 -0
- package/dist/shared/response-handler.d.ts +38 -0
- package/dist/shared/response-handler.d.ts.map +1 -0
- package/dist/shared/response-handler.js +69 -0
- package/dist/shared/response-handler.js.map +1 -0
- package/dist/shared/timer.d.ts +20 -0
- package/dist/shared/timer.d.ts.map +1 -0
- package/dist/shared/timer.js +32 -0
- package/dist/shared/timer.js.map +1 -0
- package/package.json +1 -1
- package/src/application/use-cases/chat-generation.usecase.ts +55 -0
- package/src/index.ts +1 -0
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,YAAY,EACV,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,cAAc,GACf,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EACL,SAAS,EACT,aAAa,EACb,wBAAwB,GACzB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EACL,cAAc,EACd,YAAY,EACZ,aAAa,EACb,KAAK,iBAAiB,EACtB,KAAK,SAAS,GACf,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAC3G,OAAO,EAAE,kBAAkB,EAAE,KAAK,2BAA2B,EAAE,MAAM,uDAAuD,CAAC;AAC7H,OAAO,EAAE,UAAU,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AACvH,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,iDAAiD,CAAC;AAC7G,OAAO,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAGzH,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAG9E,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAGtG,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGxF,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACnF,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAG5H,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,uBAAuB,EACvB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,WAAW,EACX,qBAAqB,GACtB,MAAM,0CAA0C,CAAC;AAElD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,iBAAiB,EACtB,KAAK,cAAc,GACpB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,KAAK,EACL,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,iBAAiB,EACjB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2CAA2C,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,10 +7,11 @@
|
|
|
7
7
|
* @license MIT
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
Object.defineProperty(exports, "
|
|
10
|
+
exports.calculateRetryDelayWithJitter = exports.isWithinSafeLimit = exports.estimateTokens = exports.calculateSafeBufferSize = exports.calculatePercentage = exports.clamp = exports.calculateExponentialBackoff = exports.calculateMaxMessages = exports.generateSessionId = exports.generateRandomId = exports.executeWithRetry = exports.executeWithState = exports.formatErrorForLogging = exports.isAuthError = exports.isRetryableError = exports.getUserFriendlyError = exports.cleanJsonResponse = exports.formatMessagesForDisplay = exports.extractTextFromMessages = exports.promptToMessages = exports.createTextMessage = exports.createSystemMessage = exports.createAssistantMessage = exports.createUserMessage = exports.isProviderInitialized = exports.resetProvider = exports.initializeProvider = exports.GenerationConfigBuilder = exports.ConfigBuilder = exports.ResponseHandler = exports.RequestBuilder = exports.Timer = exports.LogLevel = exports.logger = exports.useGroq = exports.streamChatCompletion = exports.groqHttpClient = exports.chatSessionManager = exports.chatGeneration = exports.streamText = exports.generateStructured = exports.generateText = exports.modelSupports = exports.getModelInfo = exports.MODEL_REGISTRY = exports.mapHttpStatusToErrorType = exports.GroqErrorType = exports.GroqError = exports.DEFAULT_MODELS = exports.GROQ_MODELS = void 0;
|
|
11
|
+
exports.useTelemetry = exports.telemetry = exports.calculateAverage = exports.calculateTransferRate = exports.calculateRequestTimeout = void 0;
|
|
12
|
+
var groq_types_1 = require("./domain/entities/groq.types");
|
|
13
|
+
Object.defineProperty(exports, "GROQ_MODELS", { enumerable: true, get: function () { return groq_types_1.GROQ_MODELS; } });
|
|
14
|
+
Object.defineProperty(exports, "DEFAULT_MODELS", { enumerable: true, get: function () { return groq_types_1.DEFAULT_MODELS; } });
|
|
14
15
|
var error_types_1 = require("./domain/entities/error.types");
|
|
15
16
|
Object.defineProperty(exports, "GroqError", { enumerable: true, get: function () { return error_types_1.GroqError; } });
|
|
16
17
|
Object.defineProperty(exports, "GroqErrorType", { enumerable: true, get: function () { return error_types_1.GroqErrorType; } });
|
|
@@ -19,38 +20,44 @@ var models_1 = require("./domain/entities/models");
|
|
|
19
20
|
Object.defineProperty(exports, "MODEL_REGISTRY", { enumerable: true, get: function () { return models_1.MODEL_REGISTRY; } });
|
|
20
21
|
Object.defineProperty(exports, "getModelInfo", { enumerable: true, get: function () { return models_1.getModelInfo; } });
|
|
21
22
|
Object.defineProperty(exports, "modelSupports", { enumerable: true, get: function () { return models_1.modelSupports; } });
|
|
22
|
-
//
|
|
23
|
-
var
|
|
24
|
-
Object.defineProperty(exports, "
|
|
25
|
-
var
|
|
26
|
-
Object.defineProperty(exports, "
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
Object.defineProperty(exports, "
|
|
31
|
-
var
|
|
32
|
-
Object.defineProperty(exports, "
|
|
33
|
-
|
|
34
|
-
var
|
|
35
|
-
Object.defineProperty(exports, "
|
|
36
|
-
|
|
37
|
-
Object.defineProperty(exports, "
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
Object.defineProperty(exports, "
|
|
45
|
-
|
|
23
|
+
// Application Layer - Direct exports
|
|
24
|
+
var text_generation_usecase_1 = require("./application/use-cases/text-generation.usecase");
|
|
25
|
+
Object.defineProperty(exports, "generateText", { enumerable: true, get: function () { return text_generation_usecase_1.generateText; } });
|
|
26
|
+
var structured_generation_usecase_1 = require("./application/use-cases/structured-generation.usecase");
|
|
27
|
+
Object.defineProperty(exports, "generateStructured", { enumerable: true, get: function () { return structured_generation_usecase_1.generateStructured; } });
|
|
28
|
+
var streaming_usecase_1 = require("./application/use-cases/streaming.usecase");
|
|
29
|
+
Object.defineProperty(exports, "streamText", { enumerable: true, get: function () { return streaming_usecase_1.streamText; } });
|
|
30
|
+
var chat_generation_usecase_1 = require("./application/use-cases/chat-generation.usecase");
|
|
31
|
+
Object.defineProperty(exports, "chatGeneration", { enumerable: true, get: function () { return chat_generation_usecase_1.chatGeneration; } });
|
|
32
|
+
var chat_session_usecase_1 = require("./application/use-cases/chat-session.usecase");
|
|
33
|
+
Object.defineProperty(exports, "chatSessionManager", { enumerable: true, get: function () { return chat_session_usecase_1.chatSessionManager; } });
|
|
34
|
+
// Infrastructure Layer - Direct exports
|
|
35
|
+
var groq_http_client_1 = require("./infrastructure/http/groq-http-client");
|
|
36
|
+
Object.defineProperty(exports, "groqHttpClient", { enumerable: true, get: function () { return groq_http_client_1.groqHttpClient; } });
|
|
37
|
+
var streaming_client_1 = require("./infrastructure/http/streaming-client");
|
|
38
|
+
Object.defineProperty(exports, "streamChatCompletion", { enumerable: true, get: function () { return streaming_client_1.streamChatCompletion; } });
|
|
39
|
+
// Presentation Layer - Direct exports
|
|
40
|
+
var use_groq_hook_1 = require("./presentation/hooks/use-groq.hook");
|
|
41
|
+
Object.defineProperty(exports, "useGroq", { enumerable: true, get: function () { return use_groq_hook_1.useGroq; } });
|
|
42
|
+
// Shared Layer - Direct exports
|
|
43
|
+
var logger_1 = require("./shared/logger");
|
|
44
|
+
Object.defineProperty(exports, "logger", { enumerable: true, get: function () { return logger_1.logger; } });
|
|
45
|
+
Object.defineProperty(exports, "LogLevel", { enumerable: true, get: function () { return logger_1.LogLevel; } });
|
|
46
|
+
var timer_1 = require("./shared/timer");
|
|
47
|
+
Object.defineProperty(exports, "Timer", { enumerable: true, get: function () { return timer_1.Timer; } });
|
|
48
|
+
var request_builder_1 = require("./shared/request-builder");
|
|
49
|
+
Object.defineProperty(exports, "RequestBuilder", { enumerable: true, get: function () { return request_builder_1.RequestBuilder; } });
|
|
50
|
+
var response_handler_1 = require("./shared/response-handler");
|
|
51
|
+
Object.defineProperty(exports, "ResponseHandler", { enumerable: true, get: function () { return response_handler_1.ResponseHandler; } });
|
|
52
|
+
// Provider Factory - Direct exports, no wrappers
|
|
53
|
+
var ConfigBuilder_1 = require("./providers/ConfigBuilder");
|
|
54
|
+
Object.defineProperty(exports, "ConfigBuilder", { enumerable: true, get: function () { return ConfigBuilder_1.ConfigBuilder; } });
|
|
55
|
+
Object.defineProperty(exports, "GenerationConfigBuilder", { enumerable: true, get: function () { return ConfigBuilder_1.GenerationConfigBuilder; } });
|
|
46
56
|
var ProviderFactory_1 = require("./providers/ProviderFactory");
|
|
47
|
-
Object.defineProperty(exports, "ConfigBuilder", { enumerable: true, get: function () { return ProviderFactory_1.ConfigBuilder; } });
|
|
48
|
-
Object.defineProperty(exports, "GenerationConfigBuilder", { enumerable: true, get: function () { return ProviderFactory_1.GenerationConfigBuilder; } });
|
|
49
|
-
Object.defineProperty(exports, "providerFactory", { enumerable: true, get: function () { return ProviderFactory_1.providerFactory; } });
|
|
50
57
|
Object.defineProperty(exports, "initializeProvider", { enumerable: true, get: function () { return ProviderFactory_1.initializeProvider; } });
|
|
51
|
-
Object.defineProperty(exports, "configureProvider", { enumerable: true, get: function () { return ProviderFactory_1.configureProvider; } });
|
|
52
58
|
Object.defineProperty(exports, "resetProvider", { enumerable: true, get: function () { return ProviderFactory_1.resetProvider; } });
|
|
53
|
-
|
|
59
|
+
Object.defineProperty(exports, "isProviderInitialized", { enumerable: true, get: function () { return ProviderFactory_1.isProviderInitialized; } });
|
|
60
|
+
// Utilities - Direct exports, no barrel re-exports
|
|
54
61
|
var content_mapper_util_1 = require("./infrastructure/utils/content-mapper.util");
|
|
55
62
|
Object.defineProperty(exports, "createUserMessage", { enumerable: true, get: function () { return content_mapper_util_1.createUserMessage; } });
|
|
56
63
|
Object.defineProperty(exports, "createAssistantMessage", { enumerable: true, get: function () { return content_mapper_util_1.createAssistantMessage; } });
|
|
@@ -59,15 +66,30 @@ Object.defineProperty(exports, "createTextMessage", { enumerable: true, get: fun
|
|
|
59
66
|
Object.defineProperty(exports, "promptToMessages", { enumerable: true, get: function () { return content_mapper_util_1.promptToMessages; } });
|
|
60
67
|
Object.defineProperty(exports, "extractTextFromMessages", { enumerable: true, get: function () { return content_mapper_util_1.extractTextFromMessages; } });
|
|
61
68
|
Object.defineProperty(exports, "formatMessagesForDisplay", { enumerable: true, get: function () { return content_mapper_util_1.formatMessagesForDisplay; } });
|
|
69
|
+
Object.defineProperty(exports, "cleanJsonResponse", { enumerable: true, get: function () { return content_mapper_util_1.cleanJsonResponse; } });
|
|
62
70
|
var error_mapper_util_1 = require("./infrastructure/utils/error-mapper.util");
|
|
63
71
|
Object.defineProperty(exports, "getUserFriendlyError", { enumerable: true, get: function () { return error_mapper_util_1.getUserFriendlyError; } });
|
|
64
72
|
Object.defineProperty(exports, "isRetryableError", { enumerable: true, get: function () { return error_mapper_util_1.isRetryableError; } });
|
|
65
73
|
Object.defineProperty(exports, "isAuthError", { enumerable: true, get: function () { return error_mapper_util_1.isAuthError; } });
|
|
66
74
|
Object.defineProperty(exports, "formatErrorForLogging", { enumerable: true, get: function () { return error_mapper_util_1.formatErrorForLogging; } });
|
|
67
|
-
var
|
|
68
|
-
Object.defineProperty(exports, "executeWithState", { enumerable: true, get: function () { return
|
|
69
|
-
Object.defineProperty(exports, "executeWithRetry", { enumerable: true, get: function () { return
|
|
70
|
-
var
|
|
71
|
-
Object.defineProperty(exports, "
|
|
72
|
-
Object.defineProperty(exports, "
|
|
75
|
+
var execute_state_util_1 = require("./infrastructure/utils/async/execute-state.util");
|
|
76
|
+
Object.defineProperty(exports, "executeWithState", { enumerable: true, get: function () { return execute_state_util_1.executeWithState; } });
|
|
77
|
+
Object.defineProperty(exports, "executeWithRetry", { enumerable: true, get: function () { return execute_state_util_1.executeWithRetry; } });
|
|
78
|
+
var calculation_util_1 = require("./infrastructure/utils/calculation.util");
|
|
79
|
+
Object.defineProperty(exports, "generateRandomId", { enumerable: true, get: function () { return calculation_util_1.generateRandomId; } });
|
|
80
|
+
Object.defineProperty(exports, "generateSessionId", { enumerable: true, get: function () { return calculation_util_1.generateSessionId; } });
|
|
81
|
+
Object.defineProperty(exports, "calculateMaxMessages", { enumerable: true, get: function () { return calculation_util_1.calculateMaxMessages; } });
|
|
82
|
+
Object.defineProperty(exports, "calculateExponentialBackoff", { enumerable: true, get: function () { return calculation_util_1.calculateExponentialBackoff; } });
|
|
83
|
+
Object.defineProperty(exports, "clamp", { enumerable: true, get: function () { return calculation_util_1.clamp; } });
|
|
84
|
+
Object.defineProperty(exports, "calculatePercentage", { enumerable: true, get: function () { return calculation_util_1.calculatePercentage; } });
|
|
85
|
+
Object.defineProperty(exports, "calculateSafeBufferSize", { enumerable: true, get: function () { return calculation_util_1.calculateSafeBufferSize; } });
|
|
86
|
+
Object.defineProperty(exports, "estimateTokens", { enumerable: true, get: function () { return calculation_util_1.estimateTokens; } });
|
|
87
|
+
Object.defineProperty(exports, "isWithinSafeLimit", { enumerable: true, get: function () { return calculation_util_1.isWithinSafeLimit; } });
|
|
88
|
+
Object.defineProperty(exports, "calculateRetryDelayWithJitter", { enumerable: true, get: function () { return calculation_util_1.calculateRetryDelayWithJitter; } });
|
|
89
|
+
Object.defineProperty(exports, "calculateRequestTimeout", { enumerable: true, get: function () { return calculation_util_1.calculateRequestTimeout; } });
|
|
90
|
+
Object.defineProperty(exports, "calculateTransferRate", { enumerable: true, get: function () { return calculation_util_1.calculateTransferRate; } });
|
|
91
|
+
Object.defineProperty(exports, "calculateAverage", { enumerable: true, get: function () { return calculation_util_1.calculateAverage; } });
|
|
92
|
+
var TelemetryHooks_1 = require("./infrastructure/telemetry/TelemetryHooks");
|
|
93
|
+
Object.defineProperty(exports, "telemetry", { enumerable: true, get: function () { return TelemetryHooks_1.telemetry; } });
|
|
94
|
+
Object.defineProperty(exports, "useTelemetry", { enumerable: true, get: function () { return TelemetryHooks_1.useTelemetry; } });
|
|
73
95
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;AAmBH,2DAA2E;AAAlE,yGAAA,WAAW,OAAA;AAAE,4GAAA,cAAc,OAAA;AAEpC,6DAIuC;AAHrC,wGAAA,SAAS,OAAA;AACT,4GAAA,aAAa,OAAA;AACb,uHAAA,wBAAwB,OAAA;AAG1B,mDAMkC;AALhC,wGAAA,cAAc,OAAA;AACd,sGAAA,YAAY,OAAA;AACZ,uGAAA,aAAa,OAAA;AAKf,qCAAqC;AACrC,2FAA2G;AAAlG,uHAAA,YAAY,OAAA;AACrB,uGAA6H;AAApH,mIAAA,kBAAkB,OAAA;AAC3B,+EAAuH;AAA9G,+GAAA,UAAU,OAAA;AACnB,2FAA6G;AAApG,yHAAA,cAAc,OAAA;AACvB,qFAAyH;AAAhH,0HAAA,kBAAkB,OAAA;AAE3B,wCAAwC;AACxC,2EAAwE;AAA/D,kHAAA,cAAc,OAAA;AACvB,2EAA8E;AAArE,wHAAA,oBAAoB,OAAA;AAE7B,sCAAsC;AACtC,oEAAsG;AAA7F,wGAAA,OAAO,OAAA;AAEhB,gCAAgC;AAChC,0CAAoE;AAA3D,gGAAA,MAAM,OAAA;AAAE,kGAAA,QAAQ,OAAA;AACzB,wCAAyD;AAAhD,8FAAA,KAAK,OAAA;AACd,4DAAsF;AAA7E,iHAAA,cAAc,OAAA;AACvB,8DAAwF;AAA/E,mHAAA,eAAe,OAAA;AAExB,iDAAiD;AACjD,2DAAmF;AAA1E,8GAAA,aAAa,OAAA;AAAE,wHAAA,uBAAuB,OAAA;AAC/C,+DAA4H;AAAnH,qHAAA,kBAAkB,OAAA;AAAE,gHAAA,aAAa,OAAA;AAAE,wHAAA,qBAAqB,OAAA;AAEjE,mDAAmD;AACnD,kFASoD;AARlD,wHAAA,iBAAiB,OAAA;AACjB,6HAAA,sBAAsB,OAAA;AACtB,0HAAA,mBAAmB,OAAA;AACnB,wHAAA,iBAAiB,OAAA;AACjB,uHAAA,gBAAgB,OAAA;AAChB,8HAAA,uBAAuB,OAAA;AACvB,+HAAA,wBAAwB,OAAA;AACxB,wHAAA,iBAAiB,OAAA;AAGnB,8EAKkD;AAJhD,yHAAA,oBAAoB,OAAA;AACpB,qHAAA,gBAAgB,OAAA;AAChB,gHAAA,WAAW,OAAA;AACX,0HAAA,qBAAqB,OAAA;AAGvB,sFAKyD;AAJvD,sHAAA,gBAAgB,OAAA;AAChB,sHAAA,gBAAgB,OAAA;AAKlB,4EAciD;AAb/C,oHAAA,gBAAgB,OAAA;AAChB,qHAAA,iBAAiB,OAAA;AACjB,wHAAA,oBAAoB,OAAA;AACpB,+HAAA,2BAA2B,OAAA;AAC3B,yGAAA,KAAK,OAAA;AACL,uHAAA,mBAAmB,OAAA;AACnB,2HAAA,uBAAuB,OAAA;AACvB,kHAAA,cAAc,OAAA;AACd,qHAAA,iBAAiB,OAAA;AACjB,iIAAA,6BAA6B,OAAA;AAC7B,2HAAA,uBAAuB,OAAA;AACvB,yHAAA,qBAAqB,OAAA;AACrB,oHAAA,gBAAgB,OAAA;AAGlB,4EAAoF;AAA3E,2GAAA,SAAS,OAAA;AAAE,8GAAA,YAAY,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Groq HTTP Client
|
|
3
|
+
* Core HTTP client for Groq API - simplified and focused
|
|
4
|
+
*/
|
|
5
|
+
import type { GroqConfig, GroqChatRequest, GroqChatResponse } from "../../domain/entities/groq.types";
|
|
6
|
+
declare class GroqHttpClient {
|
|
7
|
+
private config;
|
|
8
|
+
private initialized;
|
|
9
|
+
initialize(config: GroqConfig): void;
|
|
10
|
+
private normalizeBaseUrl;
|
|
11
|
+
private validateTimeout;
|
|
12
|
+
isInitialized(): boolean;
|
|
13
|
+
getConfig(): GroqConfig;
|
|
14
|
+
private request;
|
|
15
|
+
private handleErrorResponse;
|
|
16
|
+
private handleRequestError;
|
|
17
|
+
chatCompletion(request: GroqChatRequest): Promise<GroqChatResponse>;
|
|
18
|
+
reset(): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const groqHttpClient: GroqHttpClient;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=groq-http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq-http-client.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/groq-http-client.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,kCAAkC,CAAC;AAS1C,cAAM,cAAc;IAClB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,WAAW,CAAS;IAE5B,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA0CpC,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;IAevB,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,UAAU;YAUT,OAAO;YAmDP,mBAAmB;IAwBjC,OAAO,CAAC,kBAAkB;IAkBpB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAOzE,KAAK,IAAI,IAAI;CAId;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Groq HTTP Client
|
|
4
|
+
* Core HTTP client for Groq API - simplified and focused
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.groqHttpClient = void 0;
|
|
8
|
+
const error_types_1 = require("../../domain/entities/error.types");
|
|
9
|
+
const logger_1 = require("../../shared/logger");
|
|
10
|
+
const DEFAULT_BASE_URL = "https://api.groq.com/openai/v1";
|
|
11
|
+
const DEFAULT_TIMEOUT = 60000;
|
|
12
|
+
const MIN_API_KEY_LENGTH = 10;
|
|
13
|
+
const GROQ_KEY_PREFIX = "gsk_";
|
|
14
|
+
class GroqHttpClient {
|
|
15
|
+
constructor() {
|
|
16
|
+
this.config = null;
|
|
17
|
+
this.initialized = false;
|
|
18
|
+
}
|
|
19
|
+
initialize(config) {
|
|
20
|
+
const apiKey = config.apiKey?.trim();
|
|
21
|
+
logger_1.logger.debug("GroqClient", "Initializing", {
|
|
22
|
+
hasApiKey: !!apiKey,
|
|
23
|
+
keyLength: apiKey?.length,
|
|
24
|
+
baseUrl: config.baseUrl || DEFAULT_BASE_URL,
|
|
25
|
+
});
|
|
26
|
+
if (!apiKey) {
|
|
27
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.INVALID_API_KEY, "API key is required");
|
|
28
|
+
}
|
|
29
|
+
if (apiKey.length < MIN_API_KEY_LENGTH) {
|
|
30
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.INVALID_API_KEY, `API key must be at least ${MIN_API_KEY_LENGTH} characters`);
|
|
31
|
+
}
|
|
32
|
+
if (!apiKey.startsWith(GROQ_KEY_PREFIX)) {
|
|
33
|
+
logger_1.logger.warn("GroqClient", "API key does not start with expected prefix", {
|
|
34
|
+
prefix: GROQ_KEY_PREFIX,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
this.config = {
|
|
38
|
+
apiKey,
|
|
39
|
+
baseUrl: this.normalizeBaseUrl(config.baseUrl),
|
|
40
|
+
timeoutMs: this.validateTimeout(config.timeoutMs),
|
|
41
|
+
textModel: config.textModel,
|
|
42
|
+
};
|
|
43
|
+
this.initialized = true;
|
|
44
|
+
logger_1.logger.debug("GroqClient", "Initialization complete", {
|
|
45
|
+
initialized: this.initialized,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
normalizeBaseUrl(baseUrl) {
|
|
49
|
+
if (!baseUrl) {
|
|
50
|
+
return DEFAULT_BASE_URL;
|
|
51
|
+
}
|
|
52
|
+
return baseUrl.replace(/\/+$/, ""); // Remove trailing slashes
|
|
53
|
+
}
|
|
54
|
+
validateTimeout(timeout) {
|
|
55
|
+
const DEFAULT = DEFAULT_TIMEOUT;
|
|
56
|
+
if (timeout === undefined || timeout === null) {
|
|
57
|
+
return DEFAULT;
|
|
58
|
+
}
|
|
59
|
+
if (!Number.isFinite(timeout) || timeout <= 0) {
|
|
60
|
+
logger_1.logger.warn("GroqClient", "Invalid timeout, using default", {
|
|
61
|
+
provided: timeout,
|
|
62
|
+
default: DEFAULT,
|
|
63
|
+
});
|
|
64
|
+
return DEFAULT;
|
|
65
|
+
}
|
|
66
|
+
return Math.min(timeout, 300000); // Cap at 5 minutes
|
|
67
|
+
}
|
|
68
|
+
isInitialized() {
|
|
69
|
+
return this.initialized && this.config !== null;
|
|
70
|
+
}
|
|
71
|
+
getConfig() {
|
|
72
|
+
if (!this.config || !this.initialized) {
|
|
73
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.MISSING_CONFIG, "Client not initialized");
|
|
74
|
+
}
|
|
75
|
+
return this.config;
|
|
76
|
+
}
|
|
77
|
+
async request(endpoint, body) {
|
|
78
|
+
if (!this.config || !this.initialized) {
|
|
79
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.MISSING_CONFIG, "Client not initialized");
|
|
80
|
+
}
|
|
81
|
+
const url = `${this.config.baseUrl}${endpoint}`;
|
|
82
|
+
const timeout = this.config.timeoutMs || DEFAULT_TIMEOUT;
|
|
83
|
+
logger_1.logger.debug("GroqClient", "API Request", {
|
|
84
|
+
endpoint,
|
|
85
|
+
timeout: `${timeout}ms`,
|
|
86
|
+
});
|
|
87
|
+
const controller = new AbortController();
|
|
88
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
89
|
+
try {
|
|
90
|
+
const response = await fetch(url, {
|
|
91
|
+
method: "POST",
|
|
92
|
+
headers: {
|
|
93
|
+
"Content-Type": "application/json",
|
|
94
|
+
"Authorization": `Bearer ${this.config.apiKey}`,
|
|
95
|
+
},
|
|
96
|
+
body: JSON.stringify(body),
|
|
97
|
+
signal: controller.signal,
|
|
98
|
+
});
|
|
99
|
+
clearTimeout(timeoutId);
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
await this.handleErrorResponse(response);
|
|
102
|
+
}
|
|
103
|
+
const text = await response.text();
|
|
104
|
+
if (!text) {
|
|
105
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.SERVER_ERROR, "Empty response from server");
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
return JSON.parse(text);
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.SERVER_ERROR, `Invalid JSON response: ${text.substring(0, 200)}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
throw this.handleRequestError(error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async handleErrorResponse(response) {
|
|
119
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
120
|
+
const errorType = (0, error_types_1.mapHttpStatusToErrorType)(response.status);
|
|
121
|
+
try {
|
|
122
|
+
const text = await response.text();
|
|
123
|
+
if (text) {
|
|
124
|
+
try {
|
|
125
|
+
const errorData = JSON.parse(text);
|
|
126
|
+
if (errorData.error?.message) {
|
|
127
|
+
errorMessage = errorData.error.message;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Use text content if JSON parsing fails
|
|
132
|
+
errorMessage = text.substring(0, 500);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Use default message
|
|
138
|
+
}
|
|
139
|
+
throw new error_types_1.GroqError(errorType, errorMessage);
|
|
140
|
+
}
|
|
141
|
+
handleRequestError(error) {
|
|
142
|
+
if (error instanceof error_types_1.GroqError)
|
|
143
|
+
return error;
|
|
144
|
+
if (error instanceof Error) {
|
|
145
|
+
if (error.name === "AbortError") {
|
|
146
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.ABORT_ERROR, "Request timeout", error);
|
|
147
|
+
}
|
|
148
|
+
if (error.name === "TypeError" && error.message.includes("network")) {
|
|
149
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.NETWORK_ERROR, "Network error", error);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.UNKNOWN_ERROR, error instanceof Error ? error.message : "Unknown error");
|
|
153
|
+
}
|
|
154
|
+
async chatCompletion(request) {
|
|
155
|
+
return this.request("/chat/completions", {
|
|
156
|
+
...request,
|
|
157
|
+
stream: false,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
reset() {
|
|
161
|
+
this.config = null;
|
|
162
|
+
this.initialized = false;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.groqHttpClient = new GroqHttpClient();
|
|
166
|
+
//# sourceMappingURL=groq-http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"groq-http-client.js","sourceRoot":"","sources":["../../../src/infrastructure/http/groq-http-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Streaming Client
|
|
3
|
+
* Handles SSE streaming from Groq API
|
|
4
|
+
* Optimized for performance and memory efficiency
|
|
5
|
+
*/
|
|
6
|
+
import type { GroqChatRequest, GroqChatChunk } from "../../domain/entities/groq.types";
|
|
7
|
+
export declare function streamChatCompletion(request: GroqChatRequest, config: {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
baseUrl: string;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
}): AsyncGenerator<GroqChatChunk>;
|
|
12
|
+
//# sourceMappingURL=streaming-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-client.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/http/streaming-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAQvF,wBAAuB,oBAAoB,CACzC,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9D,cAAc,CAAC,aAAa,CAAC,CAG/B"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Streaming Client
|
|
4
|
+
* Handles SSE streaming from Groq API
|
|
5
|
+
* Optimized for performance and memory efficiency
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.streamChatCompletion = streamChatCompletion;
|
|
9
|
+
const error_types_1 = require("../../domain/entities/error.types");
|
|
10
|
+
const logger_1 = require("../../shared/logger");
|
|
11
|
+
const DEFAULT_TIMEOUT = 60000;
|
|
12
|
+
const MAX_BUFFER_SIZE = 1024 * 1024; // 1MB
|
|
13
|
+
const MAX_INCOMPLETE_CHUNKS = 10;
|
|
14
|
+
async function* streamChatCompletion(request, config) {
|
|
15
|
+
const client = new GroqStreamingClient();
|
|
16
|
+
yield* client.stream(request, config);
|
|
17
|
+
}
|
|
18
|
+
class GroqStreamingClient {
|
|
19
|
+
normalizeBaseUrl(baseUrl) {
|
|
20
|
+
return baseUrl.replace(/\/+$/, "");
|
|
21
|
+
}
|
|
22
|
+
validateTimeout(timeout) {
|
|
23
|
+
if (timeout === undefined || timeout === null || timeout <= 0) {
|
|
24
|
+
return DEFAULT_TIMEOUT;
|
|
25
|
+
}
|
|
26
|
+
return Math.min(timeout, 300000);
|
|
27
|
+
}
|
|
28
|
+
async *stream(request, config) {
|
|
29
|
+
const baseUrl = this.normalizeBaseUrl(config.baseUrl);
|
|
30
|
+
const url = `${baseUrl}/chat/completions`;
|
|
31
|
+
const timeout = this.validateTimeout(config.timeoutMs);
|
|
32
|
+
logger_1.logger.debug("StreamingClient", "Starting stream", { model: request.model });
|
|
33
|
+
const controller = new AbortController();
|
|
34
|
+
const timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
35
|
+
try {
|
|
36
|
+
const response = await fetch(url, {
|
|
37
|
+
method: "POST",
|
|
38
|
+
headers: {
|
|
39
|
+
"Content-Type": "application/json",
|
|
40
|
+
"Authorization": `Bearer ${config.apiKey}`,
|
|
41
|
+
},
|
|
42
|
+
body: JSON.stringify({ ...request, stream: true }),
|
|
43
|
+
signal: controller.signal,
|
|
44
|
+
});
|
|
45
|
+
clearTimeout(timeoutId);
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
await this.handleErrorResponse(response);
|
|
48
|
+
}
|
|
49
|
+
if (!response.body) {
|
|
50
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.NETWORK_ERROR, "Response body is empty");
|
|
51
|
+
}
|
|
52
|
+
yield* this.parseSSE(response.body);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw this.handleRequestError(error);
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
clearTimeout(timeoutId);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
async *parseSSE(body) {
|
|
62
|
+
const reader = body.getReader();
|
|
63
|
+
const decoder = new TextDecoder();
|
|
64
|
+
const chunks = []; // Array for efficient string building
|
|
65
|
+
let buffer = "";
|
|
66
|
+
let consecutiveErrors = 0;
|
|
67
|
+
try {
|
|
68
|
+
while (true) {
|
|
69
|
+
const { done, value } = await reader.read();
|
|
70
|
+
if (done)
|
|
71
|
+
break;
|
|
72
|
+
chunks.push(decoder.decode(value, { stream: true }));
|
|
73
|
+
// Join all chunks at once - more efficient than +=
|
|
74
|
+
buffer = chunks.join("");
|
|
75
|
+
chunks.length = 0; // Clear array
|
|
76
|
+
// Trim buffer if necessary
|
|
77
|
+
if (buffer.length > MAX_BUFFER_SIZE) {
|
|
78
|
+
buffer = buffer.slice(-Math.floor(MAX_BUFFER_SIZE / 2));
|
|
79
|
+
logger_1.logger.warn("StreamingClient", "Buffer trimmed");
|
|
80
|
+
}
|
|
81
|
+
const lines = buffer.split("\n");
|
|
82
|
+
buffer = lines.pop() || "";
|
|
83
|
+
for (const line of lines) {
|
|
84
|
+
const trimmed = line.trim();
|
|
85
|
+
if (!trimmed || trimmed === "data: [DONE]")
|
|
86
|
+
continue;
|
|
87
|
+
if (trimmed.startsWith("data: ")) {
|
|
88
|
+
try {
|
|
89
|
+
const jsonStr = trimmed.slice(6);
|
|
90
|
+
const chunk = JSON.parse(jsonStr);
|
|
91
|
+
consecutiveErrors = 0;
|
|
92
|
+
yield chunk;
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
consecutiveErrors++;
|
|
96
|
+
logger_1.logger.error("StreamingClient", "Parse error", {
|
|
97
|
+
error: error instanceof Error ? error.message : String(error),
|
|
98
|
+
consecutiveErrors,
|
|
99
|
+
});
|
|
100
|
+
if (consecutiveErrors >= MAX_INCOMPLETE_CHUNKS) {
|
|
101
|
+
throw new error_types_1.GroqError(error_types_1.GroqErrorType.SERVER_ERROR, `Stream corrupted: ${consecutiveErrors} parse failures`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
reader.releaseLock();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async handleErrorResponse(response) {
|
|
113
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
114
|
+
const errorType = (0, error_types_1.mapHttpStatusToErrorType)(response.status);
|
|
115
|
+
try {
|
|
116
|
+
const text = await response.text();
|
|
117
|
+
if (text) {
|
|
118
|
+
try {
|
|
119
|
+
const errorData = JSON.parse(text);
|
|
120
|
+
if (errorData.error?.message) {
|
|
121
|
+
errorMessage = errorData.error.message;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
errorMessage = text.substring(0, 500);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
// Use default message
|
|
131
|
+
}
|
|
132
|
+
throw new error_types_1.GroqError(errorType, errorMessage);
|
|
133
|
+
}
|
|
134
|
+
handleRequestError(error) {
|
|
135
|
+
if (error instanceof error_types_1.GroqError)
|
|
136
|
+
return error;
|
|
137
|
+
if (error instanceof Error) {
|
|
138
|
+
if (error.name === "AbortError") {
|
|
139
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.ABORT_ERROR, "Request timeout", error);
|
|
140
|
+
}
|
|
141
|
+
if (error.name === "TypeError" && error.message.includes("fetch")) {
|
|
142
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.NETWORK_ERROR, "Network error", error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return new error_types_1.GroqError(error_types_1.GroqErrorType.UNKNOWN_ERROR, error instanceof Error ? error.message : "Unknown error");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=streaming-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-client.js","sourceRoot":"","sources":["../../../src/infrastructure/http/streaming-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Telemetry Hooks
|
|
3
3
|
* Simple telemetry tracking for Groq operations
|
|
4
|
+
* Optimized with O(1) circular buffer
|
|
4
5
|
*/
|
|
5
6
|
type TelemetryEvent = {
|
|
6
7
|
name: string;
|
|
@@ -10,16 +11,21 @@ type TelemetryEvent = {
|
|
|
10
11
|
declare class Telemetry {
|
|
11
12
|
private events;
|
|
12
13
|
private enabled;
|
|
14
|
+
private readonly MAX_EVENTS;
|
|
15
|
+
private head;
|
|
16
|
+
private count;
|
|
17
|
+
constructor();
|
|
13
18
|
/**
|
|
14
|
-
* Log a telemetry event
|
|
19
|
+
* Log a telemetry event - O(1) operation
|
|
15
20
|
*/
|
|
16
21
|
log(name: string, data?: Record<string, unknown>): void;
|
|
17
22
|
/**
|
|
18
|
-
* Get all events
|
|
23
|
+
* Get all events in chronological order
|
|
24
|
+
* Returns frozen array to prevent external mutations
|
|
19
25
|
*/
|
|
20
|
-
getEvents(): TelemetryEvent
|
|
26
|
+
getEvents(): ReadonlyArray<TelemetryEvent>;
|
|
21
27
|
/**
|
|
22
|
-
* Clear all events
|
|
28
|
+
* Clear all events - O(1)
|
|
23
29
|
*/
|
|
24
30
|
clear(): void;
|
|
25
31
|
/**
|
|
@@ -30,6 +36,10 @@ declare class Telemetry {
|
|
|
30
36
|
* Check if telemetry is enabled
|
|
31
37
|
*/
|
|
32
38
|
isEnabled(): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Get event count - O(1)
|
|
41
|
+
*/
|
|
42
|
+
getEventCount(): number;
|
|
33
43
|
}
|
|
34
44
|
/**
|
|
35
45
|
* Singleton instance
|
|
@@ -37,12 +47,14 @@ declare class Telemetry {
|
|
|
37
47
|
export declare const telemetry: Telemetry;
|
|
38
48
|
/**
|
|
39
49
|
* Hook to use telemetry in components
|
|
50
|
+
* Memoized to prevent unnecessary re-renders
|
|
40
51
|
*/
|
|
41
52
|
export declare function useTelemetry(): {
|
|
42
53
|
log: any;
|
|
43
54
|
getEvents: any;
|
|
44
55
|
clear: any;
|
|
45
56
|
isEnabled: any;
|
|
57
|
+
getEventCount: any;
|
|
46
58
|
};
|
|
47
59
|
export {};
|
|
48
60
|
//# sourceMappingURL=TelemetryHooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TelemetryHooks.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/telemetry/TelemetryHooks.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"TelemetryHooks.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/telemetry/TelemetryHooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,KAAK,cAAc,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,cAAM,SAAS;IACb,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;;IAMlB;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAkBvD;;;OAGG;IACH,SAAS,IAAI,aAAa,CAAC,cAAc,CAAC;IAmB1C;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOlC;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,aAAa,IAAI,MAAM;CAGxB;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,WAAkB,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,YAAY;;;;;;EAW3B"}
|