@umituz/react-native-ai-groq-provider 1.0.27 → 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.
Files changed (83) hide show
  1. package/dist/application/use-cases/chat-generation.usecase.d.ts +11 -0
  2. package/dist/application/use-cases/chat-generation.usecase.d.ts.map +1 -0
  3. package/dist/application/use-cases/chat-generation.usecase.js +40 -0
  4. package/dist/application/use-cases/chat-generation.usecase.js.map +1 -0
  5. package/dist/application/use-cases/chat-session.usecase.d.ts +41 -0
  6. package/dist/application/use-cases/chat-session.usecase.d.ts.map +1 -0
  7. package/dist/application/use-cases/chat-session.usecase.js +138 -0
  8. package/dist/application/use-cases/chat-session.usecase.js.map +1 -0
  9. package/dist/application/use-cases/streaming.usecase.d.ts +17 -0
  10. package/dist/application/use-cases/streaming.usecase.d.ts.map +1 -0
  11. package/dist/application/use-cases/streaming.usecase.js +46 -0
  12. package/dist/application/use-cases/streaming.usecase.js.map +1 -0
  13. package/dist/application/use-cases/structured-generation.usecase.d.ts +14 -0
  14. package/dist/application/use-cases/structured-generation.usecase.d.ts.map +1 -0
  15. package/dist/application/use-cases/structured-generation.usecase.js +77 -0
  16. package/dist/application/use-cases/structured-generation.usecase.js.map +1 -0
  17. package/dist/application/use-cases/text-generation.usecase.d.ts +11 -0
  18. package/dist/application/use-cases/text-generation.usecase.d.ts.map +1 -0
  19. package/dist/application/use-cases/text-generation.usecase.js +36 -0
  20. package/dist/application/use-cases/text-generation.usecase.js.map +1 -0
  21. package/dist/domain/entities/error.types.d.ts +3 -1
  22. package/dist/domain/entities/error.types.d.ts.map +1 -1
  23. package/dist/domain/entities/error.types.js +12 -2
  24. package/dist/domain/entities/error.types.js.map +1 -1
  25. package/dist/index.d.ts +20 -16
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +61 -39
  28. package/dist/index.js.map +1 -1
  29. package/dist/infrastructure/http/groq-http-client.d.ts +22 -0
  30. package/dist/infrastructure/http/groq-http-client.d.ts.map +1 -0
  31. package/dist/infrastructure/http/groq-http-client.js +166 -0
  32. package/dist/infrastructure/http/groq-http-client.js.map +1 -0
  33. package/dist/infrastructure/http/streaming-client.d.ts +12 -0
  34. package/dist/infrastructure/http/streaming-client.d.ts.map +1 -0
  35. package/dist/infrastructure/http/streaming-client.js +148 -0
  36. package/dist/infrastructure/http/streaming-client.js.map +1 -0
  37. package/dist/infrastructure/telemetry/TelemetryHooks.d.ts +16 -4
  38. package/dist/infrastructure/telemetry/TelemetryHooks.d.ts.map +1 -1
  39. package/dist/infrastructure/telemetry/TelemetryHooks.js +44 -11
  40. package/dist/infrastructure/telemetry/TelemetryHooks.js.map +1 -1
  41. package/dist/infrastructure/utils/async/execute-state.util.d.ts +6 -2
  42. package/dist/infrastructure/utils/async/execute-state.util.d.ts.map +1 -1
  43. package/dist/infrastructure/utils/async/execute-state.util.js +29 -4
  44. package/dist/infrastructure/utils/async/execute-state.util.js.map +1 -1
  45. package/dist/infrastructure/utils/calculation.util.d.ts +61 -0
  46. package/dist/infrastructure/utils/calculation.util.d.ts.map +1 -0
  47. package/dist/infrastructure/utils/calculation.util.js +165 -0
  48. package/dist/infrastructure/utils/calculation.util.js.map +1 -0
  49. package/dist/infrastructure/utils/content-mapper.util.d.ts +5 -1
  50. package/dist/infrastructure/utils/content-mapper.util.d.ts.map +1 -1
  51. package/dist/infrastructure/utils/content-mapper.util.js +17 -0
  52. package/dist/infrastructure/utils/content-mapper.util.js.map +1 -1
  53. package/dist/presentation/hooks/use-groq.hook.d.ts +26 -0
  54. package/dist/presentation/hooks/use-groq.hook.d.ts.map +1 -0
  55. package/dist/presentation/hooks/use-groq.hook.js +151 -0
  56. package/dist/presentation/hooks/use-groq.hook.js.map +1 -0
  57. package/dist/providers/ConfigBuilder.d.ts +1 -57
  58. package/dist/providers/ConfigBuilder.d.ts.map +1 -1
  59. package/dist/providers/ConfigBuilder.js +2 -68
  60. package/dist/providers/ConfigBuilder.js.map +1 -1
  61. package/dist/providers/ProviderFactory.d.ts +4 -34
  62. package/dist/providers/ProviderFactory.d.ts.map +1 -1
  63. package/dist/providers/ProviderFactory.js +9 -50
  64. package/dist/providers/ProviderFactory.js.map +1 -1
  65. package/dist/shared/logger.d.ts +26 -0
  66. package/dist/shared/logger.d.ts.map +1 -0
  67. package/dist/shared/logger.js +52 -0
  68. package/dist/shared/logger.js.map +1 -0
  69. package/dist/shared/request-builder.d.ts +17 -0
  70. package/dist/shared/request-builder.d.ts.map +1 -0
  71. package/dist/shared/request-builder.js +54 -0
  72. package/dist/shared/request-builder.js.map +1 -0
  73. package/dist/shared/response-handler.d.ts +38 -0
  74. package/dist/shared/response-handler.d.ts.map +1 -0
  75. package/dist/shared/response-handler.js +69 -0
  76. package/dist/shared/response-handler.js.map +1 -0
  77. package/dist/shared/timer.d.ts +20 -0
  78. package/dist/shared/timer.d.ts.map +1 -0
  79. package/dist/shared/timer.js +32 -0
  80. package/dist/shared/timer.js.map +1 -0
  81. package/package.json +1 -1
  82. package/src/application/use-cases/chat-generation.usecase.ts +55 -0
  83. package/src/index.ts +1 -0
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Chat Generation Use Case
3
+ * Simple stateless chat completion for single-turn conversations
4
+ */
5
+ import type { GroqMessage, GroqGenerationConfig } from "../../domain/entities/groq.types";
6
+ export interface ChatGenerationOptions {
7
+ model?: string;
8
+ generationConfig?: GroqGenerationConfig;
9
+ }
10
+ export declare function chatGeneration(messages: GroqMessage[], options?: ChatGenerationOptions): Promise<string>;
11
+ //# sourceMappingURL=chat-generation.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-generation.usecase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/chat-generation.usecase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAQ1F,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,wBAAsB,cAAc,CAClC,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CAiCjB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * Chat Generation Use Case
4
+ * Simple stateless chat completion for single-turn conversations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.chatGeneration = chatGeneration;
8
+ const groq_types_1 = require("../../domain/entities/groq.types");
9
+ const groq_http_client_1 = require("../../infrastructure/http/groq-http-client");
10
+ const request_builder_1 = require("../../shared/request-builder");
11
+ const response_handler_1 = require("../../shared/response-handler");
12
+ const timer_1 = require("../../shared/timer");
13
+ const logger_1 = require("../../shared/logger");
14
+ async function chatGeneration(messages, options = {}) {
15
+ const timer = new timer_1.Timer();
16
+ logger_1.logger.debug("ChatGeneration", "Called", {
17
+ model: options.model,
18
+ messageCount: messages.length,
19
+ });
20
+ const request = request_builder_1.RequestBuilder.buildChatRequest(messages, {
21
+ model: options.model || groq_types_1.DEFAULT_MODELS.TEXT,
22
+ generationConfig: options.generationConfig,
23
+ });
24
+ logger_1.logger.debug("ChatGeneration", "Sending request", {
25
+ endpoint: "/v1/chat/completions",
26
+ model: request.model,
27
+ });
28
+ timer.startApiCall();
29
+ const response = await groq_http_client_1.groqHttpClient.chatCompletion(request);
30
+ timer.endApiCall();
31
+ const result = timer.getResult();
32
+ response_handler_1.ResponseHandler.logResponse(logger_1.logger, response, result.apiMs);
33
+ const handled = response_handler_1.ResponseHandler.handleResponse(response);
34
+ logger_1.logger.debug("ChatGeneration", "Complete", {
35
+ totalDuration: timer_1.Timer.format(result.totalMs),
36
+ responseLength: handled.content.length,
37
+ });
38
+ return handled.content;
39
+ }
40
+ //# sourceMappingURL=chat-generation.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-generation.usecase.js","sourceRoot":"","sources":["../../../src/application/use-cases/chat-generation.usecase.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAeH,wCAoCC;AAhDD,iEAAkE;AAClE,iFAA4E;AAC5E,kEAA8D;AAC9D,oEAAgE;AAChE,8CAA2C;AAC3C,gDAA6C;AAOtC,KAAK,UAAU,cAAc,CAClC,QAAuB,EACvB,UAAiC,EAAE;IAEnC,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAE1B,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,EAAE;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,QAAQ,CAAC,MAAM;KAC9B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,gCAAc,CAAC,gBAAgB,CAAC,QAAQ,EAAE;QACxD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,2BAAc,CAAC,IAAI;QAC3C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IAEH,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,EAAE;QAChD,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,KAAK,CAAC,YAAY,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,MAAM,iCAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9D,KAAK,CAAC,UAAU,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,kCAAe,CAAC,WAAW,CAAC,eAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,kCAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzD,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,EAAE;QACzC,aAAa,EAAE,aAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;KACvC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Chat Session Use Case
3
+ * Manages multi-turn chat conversations
4
+ */
5
+ import type { GroqMessage, GroqChatConfig } from "../../domain/entities/groq.types";
6
+ export interface ChatSession {
7
+ id: string;
8
+ model: string;
9
+ systemInstruction?: string;
10
+ messages: GroqMessage[];
11
+ createdAt: Date;
12
+ updatedAt: Date;
13
+ }
14
+ export interface ChatSendResult {
15
+ response: string;
16
+ usage: {
17
+ promptTokens: number;
18
+ completionTokens: number;
19
+ totalTokens: number;
20
+ };
21
+ finishReason: string;
22
+ }
23
+ declare class ChatSessionManager {
24
+ private sessions;
25
+ private readonly MAX_SESSIONS;
26
+ private readonly SESSION_TTL_MS;
27
+ private oldestSessionId;
28
+ private cleanupScheduled;
29
+ private readonly CLEANUP_INTERVAL_MS;
30
+ create(config?: GroqChatConfig): ChatSession;
31
+ get(sessionId: string): ChatSession | undefined;
32
+ delete(sessionId: string): boolean;
33
+ private scheduleCleanup;
34
+ private updateOldestSessionId;
35
+ private cleanupOldSessions;
36
+ send(sessionId: string, content: string): Promise<ChatSendResult>;
37
+ private buildMessages;
38
+ }
39
+ export declare const chatSessionManager: ChatSessionManager;
40
+ export {};
41
+ //# sourceMappingURL=chat-session.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-session.usecase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/chat-session.usecase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AASpF,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAO;IACpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IAErD,MAAM,CAAC,MAAM,GAAE,cAAmB,GAAG,WAAW;IAgChD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAI/C,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAQlC,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,kBAAkB;IAiBpB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA4CvE,OAAO,CAAC,aAAa;CAWtB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /**
3
+ * Chat Session Use Case
4
+ * Manages multi-turn chat conversations
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.chatSessionManager = void 0;
8
+ const groq_types_1 = require("../../domain/entities/groq.types");
9
+ const groq_http_client_1 = require("../../infrastructure/http/groq-http-client");
10
+ const request_builder_1 = require("../../shared/request-builder");
11
+ const response_handler_1 = require("../../shared/response-handler");
12
+ const logger_1 = require("../../shared/logger");
13
+ const error_types_1 = require("../../domain/entities/error.types");
14
+ const calculation_util_1 = require("../../infrastructure/utils/calculation.util");
15
+ class ChatSessionManager {
16
+ constructor() {
17
+ this.sessions = new Map();
18
+ this.MAX_SESSIONS = 100;
19
+ this.SESSION_TTL_MS = 24 * 60 * 60 * 1000;
20
+ this.oldestSessionId = null;
21
+ this.cleanupScheduled = false;
22
+ this.CLEANUP_INTERVAL_MS = 5 * 60 * 1000; // 5 minutes
23
+ }
24
+ create(config = {}) {
25
+ // Lazy cleanup - only check when needed, not every time
26
+ if (this.sessions.size >= this.MAX_SESSIONS || !this.cleanupScheduled) {
27
+ this.scheduleCleanup();
28
+ }
29
+ const session = {
30
+ id: (0, calculation_util_1.generateSessionId)("groq-chat"),
31
+ model: config.model || groq_types_1.DEFAULT_MODELS.TEXT,
32
+ systemInstruction: config.systemInstruction,
33
+ messages: config.history ? [...config.history] : [],
34
+ createdAt: new Date(),
35
+ updatedAt: new Date(),
36
+ };
37
+ this.sessions.set(session.id, session);
38
+ // Track oldest session for O(1) removal
39
+ if (!this.oldestSessionId ||
40
+ this.sessions.get(this.oldestSessionId).createdAt > session.createdAt) {
41
+ this.oldestSessionId = session.id;
42
+ }
43
+ // Fast path: if at limit, just remove oldest
44
+ if (this.sessions.size > this.MAX_SESSIONS && this.oldestSessionId) {
45
+ this.sessions.delete(this.oldestSessionId);
46
+ this.updateOldestSessionId();
47
+ }
48
+ return session;
49
+ }
50
+ get(sessionId) {
51
+ return this.sessions.get(sessionId);
52
+ }
53
+ delete(sessionId) {
54
+ const deleted = this.sessions.delete(sessionId);
55
+ if (deleted && sessionId === this.oldestSessionId) {
56
+ this.updateOldestSessionId();
57
+ }
58
+ return deleted;
59
+ }
60
+ scheduleCleanup() {
61
+ if (this.cleanupScheduled)
62
+ return;
63
+ this.cleanupScheduled = true;
64
+ // Schedule cleanup for next idle time
65
+ setTimeout(() => {
66
+ this.cleanupOldSessions();
67
+ this.cleanupScheduled = false;
68
+ }, this.CLEANUP_INTERVAL_MS);
69
+ }
70
+ updateOldestSessionId() {
71
+ let oldest = null;
72
+ let oldestId = null;
73
+ for (const [id, session] of this.sessions.entries()) {
74
+ if (!oldest || session.createdAt < oldest) {
75
+ oldest = session.createdAt;
76
+ oldestId = id;
77
+ }
78
+ }
79
+ this.oldestSessionId = oldestId;
80
+ }
81
+ cleanupOldSessions() {
82
+ const now = Date.now();
83
+ let removed = 0;
84
+ for (const [id, session] of this.sessions.entries()) {
85
+ const age = now - session.updatedAt.getTime();
86
+ if (age > this.SESSION_TTL_MS) {
87
+ this.sessions.delete(id);
88
+ removed++;
89
+ }
90
+ }
91
+ if (removed > 0) {
92
+ this.updateOldestSessionId();
93
+ }
94
+ }
95
+ async send(sessionId, content) {
96
+ const session = this.sessions.get(sessionId);
97
+ if (!session) {
98
+ throw new error_types_1.GroqError(error_types_1.GroqErrorType.MISSING_CONFIG, `Chat session ${sessionId} not found`);
99
+ }
100
+ const userMessage = { role: "user", content };
101
+ session.messages.push(userMessage);
102
+ // Prevent unbounded memory growth
103
+ if (session.messages.length > 100) {
104
+ session.messages = session.messages.slice(-50); // Keep last 50
105
+ }
106
+ const messages = this.buildMessages(session);
107
+ const request = request_builder_1.RequestBuilder.buildChatRequest(messages, {
108
+ model: session.model,
109
+ });
110
+ logger_1.logger.debug("ChatSession", "Sending message", {
111
+ sessionId,
112
+ messageCount: session.messages.length,
113
+ });
114
+ const response = await groq_http_client_1.groqHttpClient.chatCompletion(request);
115
+ const handled = response_handler_1.ResponseHandler.handleResponse(response);
116
+ const assistantMessage = {
117
+ role: "assistant",
118
+ content: handled.content,
119
+ };
120
+ session.messages.push(assistantMessage);
121
+ session.updatedAt = new Date();
122
+ return {
123
+ response: handled.content,
124
+ usage: handled.usage,
125
+ finishReason: handled.finishReason,
126
+ };
127
+ }
128
+ buildMessages(session) {
129
+ const messages = [];
130
+ if (session.systemInstruction) {
131
+ messages.push({ role: "system", content: session.systemInstruction });
132
+ }
133
+ messages.push(...session.messages);
134
+ return messages;
135
+ }
136
+ }
137
+ exports.chatSessionManager = new ChatSessionManager();
138
+ //# sourceMappingURL=chat-session.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-session.usecase.js","sourceRoot":"","sources":["../../../src/application/use-cases/chat-session.usecase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Streaming Use Case
3
+ * Handles streaming text generation
4
+ */
5
+ import type { GroqGenerationConfig } from "../../domain/entities/groq.types";
6
+ export interface StreamingCallbacks {
7
+ onChunk?: (chunk: string) => void;
8
+ onComplete?: (fullContent: string) => void;
9
+ onError?: (error: Error) => void;
10
+ }
11
+ export interface StreamingOptions {
12
+ model?: string;
13
+ generationConfig?: GroqGenerationConfig;
14
+ callbacks?: StreamingCallbacks;
15
+ }
16
+ export declare function streamText(prompt: string, options?: StreamingOptions): AsyncGenerator<string>;
17
+ //# sourceMappingURL=streaming.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.usecase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/streaming.usecase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAM7E,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,SAAS,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAED,wBAAuB,UAAU,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,gBAAqB,GAC7B,cAAc,CAAC,MAAM,CAAC,CAsCxB"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ /**
3
+ * Streaming Use Case
4
+ * Handles streaming text generation
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.streamText = streamText;
8
+ const streaming_client_1 = require("../../infrastructure/http/streaming-client");
9
+ const request_builder_1 = require("../../shared/request-builder");
10
+ const logger_1 = require("../../shared/logger");
11
+ const groq_http_client_1 = require("../../infrastructure/http/groq-http-client");
12
+ async function* streamText(prompt, options = {}) {
13
+ logger_1.logger.debug("Streaming", "Starting", {
14
+ model: options.model,
15
+ promptLength: prompt.length,
16
+ });
17
+ if (!groq_http_client_1.groqHttpClient.isInitialized()) {
18
+ throw new Error("Groq client not initialized. Call initializeProvider() first.");
19
+ }
20
+ const config = groq_http_client_1.groqHttpClient.getConfig();
21
+ const request = request_builder_1.RequestBuilder.buildPromptRequest(prompt, options);
22
+ let fullContent = "";
23
+ try {
24
+ for await (const chunk of (0, streaming_client_1.streamChatCompletion)(request, {
25
+ apiKey: config.apiKey,
26
+ baseUrl: config.baseUrl,
27
+ timeoutMs: config.timeoutMs,
28
+ })) {
29
+ const content = chunk.choices[0]?.delta?.content;
30
+ if (content) {
31
+ fullContent += content;
32
+ options.callbacks?.onChunk?.(content);
33
+ yield content;
34
+ }
35
+ }
36
+ options.callbacks?.onComplete?.(fullContent);
37
+ logger_1.logger.debug("Streaming", "Complete", {
38
+ totalLength: fullContent.length,
39
+ });
40
+ }
41
+ catch (error) {
42
+ options.callbacks?.onError?.(error);
43
+ throw error;
44
+ }
45
+ }
46
+ //# sourceMappingURL=streaming.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming.usecase.js","sourceRoot":"","sources":["../../../src/application/use-cases/streaming.usecase.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAoBH,gCAyCC;AA1DD,iFAAkF;AAClF,kEAA8D;AAC9D,gDAA6C;AAC7C,iFAA4E;AAcrE,KAAK,SAAS,CAAC,CAAC,UAAU,CAC/B,MAAc,EACd,UAA4B,EAAE;IAE9B,eAAM,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,MAAM,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAc,CAAC,aAAa,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,MAAM,GAAG,iCAAc,CAAC,SAAS,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,gCAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnE,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,CAAC;QACH,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAA,uCAAoB,EAAC,OAAO,EAAE;YACtD,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,EAAE,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC;YACjD,IAAI,OAAO,EAAE,CAAC;gBACZ,WAAW,IAAI,OAAO,CAAC;gBACvB,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;gBACtC,MAAM,OAAO,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC;QAE7C,eAAM,CAAC,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE;YACpC,WAAW,EAAE,WAAW,CAAC,MAAM;SAChC,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Structured Generation Use Case
3
+ * Generates structured JSON output from prompts
4
+ * Optimized for performance
5
+ */
6
+ import type { GroqGenerationConfig } from "../../domain/entities/groq.types";
7
+ export interface StructuredGenerationOptions<T> {
8
+ model?: string;
9
+ generationConfig?: GroqGenerationConfig;
10
+ schema?: Record<string, unknown>;
11
+ example?: T;
12
+ }
13
+ export declare function generateStructured<T = Record<string, unknown>>(prompt: string, options?: StructuredGenerationOptions<T>): Promise<T>;
14
+ //# sourceMappingURL=structured-generation.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-generation.usecase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/structured-generation.usecase.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAW7E,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,CAAC,CAAC;CACb;AAED,wBAAsB,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,2BAA2B,CAAC,CAAC,CAAM,GAC3C,OAAO,CAAC,CAAC,CAAC,CA2DZ"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Structured Generation Use Case
4
+ * Generates structured JSON output from prompts
5
+ * Optimized for performance
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.generateStructured = generateStructured;
9
+ const groq_http_client_1 = require("../../infrastructure/http/groq-http-client");
10
+ const request_builder_1 = require("../../shared/request-builder");
11
+ const timer_1 = require("../../shared/timer");
12
+ const logger_1 = require("../../shared/logger");
13
+ const response_handler_1 = require("../../shared/response-handler");
14
+ const error_types_1 = require("../../domain/entities/error.types");
15
+ const content_mapper_util_1 = require("../../infrastructure/utils/content-mapper.util");
16
+ const MAX_CONTENT_LENGTH_FOR_ERROR = 200;
17
+ async function generateStructured(prompt, options = {}) {
18
+ const timer = new timer_1.Timer();
19
+ logger_1.logger.debug("StructuredGeneration", "Called", {
20
+ model: options.model,
21
+ hasSchema: !!options.schema,
22
+ hasExample: !!options.example,
23
+ });
24
+ const systemPrompt = buildSystemPrompt(options.schema, options.example);
25
+ const request = request_builder_1.RequestBuilder.buildSystemPromptRequest(systemPrompt, prompt, {
26
+ ...options,
27
+ defaultTemperature: 0.3,
28
+ defaultMaxTokens: 2048,
29
+ });
30
+ timer.startApiCall();
31
+ const response = await groq_http_client_1.groqHttpClient.chatCompletion(request);
32
+ timer.endApiCall();
33
+ const result = timer.getResult();
34
+ logger_1.logger.debug("StructuredGeneration", "API response", {
35
+ apiDuration: timer_1.Timer.format(result.apiMs),
36
+ });
37
+ let content = response_handler_1.ResponseHandler.extractContent(response);
38
+ content = (0, content_mapper_util_1.cleanJsonResponse)(content);
39
+ logger_1.logger.debug("StructuredGeneration", "Parsing JSON");
40
+ try {
41
+ const parsed = JSON.parse(content);
42
+ if (typeof parsed !== 'object' || parsed === null) {
43
+ throw new Error("Response is not a valid object");
44
+ }
45
+ logger_1.logger.debug("StructuredGeneration", "Complete", {
46
+ totalDuration: timer_1.Timer.format(result.totalMs),
47
+ parsedKeys: Object.keys(parsed),
48
+ });
49
+ return parsed;
50
+ }
51
+ catch (error) {
52
+ logger_1.logger.error("StructuredGeneration", "JSON parse failed", {
53
+ error,
54
+ contentLength: content.length,
55
+ });
56
+ const truncatedContent = content.length > MAX_CONTENT_LENGTH_FOR_ERROR
57
+ ? content.substring(0, MAX_CONTENT_LENGTH_FOR_ERROR) + "..."
58
+ : content;
59
+ throw new error_types_1.GroqError(error_types_1.GroqErrorType.UNKNOWN_ERROR, `Failed to parse JSON response: ${truncatedContent}`, error);
60
+ }
61
+ }
62
+ function buildSystemPrompt(schema, example) {
63
+ let prompt = "You are a helpful assistant that generates valid JSON output.";
64
+ if (schema || example) {
65
+ prompt += "\n\nResponse requirements:";
66
+ if (schema) {
67
+ // Use compact JSON to reduce tokens and improve speed
68
+ prompt += `\nSchema: ${JSON.stringify(schema)}`;
69
+ }
70
+ if (example) {
71
+ prompt += `\nExample: ${JSON.stringify(example)}`;
72
+ }
73
+ }
74
+ prompt += "\n\nIMPORTANT: Respond ONLY with valid JSON. No markdown, no code blocks.";
75
+ return prompt;
76
+ }
77
+ //# sourceMappingURL=structured-generation.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structured-generation.usecase.js","sourceRoot":"","sources":["../../../src/application/use-cases/structured-generation.usecase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Text Generation Use Case
3
+ * Handles simple text generation from prompts
4
+ */
5
+ import type { GroqGenerationConfig } from "../../domain/entities/groq.types";
6
+ export interface TextGenerationOptions {
7
+ model?: string;
8
+ generationConfig?: GroqGenerationConfig;
9
+ }
10
+ export declare function generateText(prompt: string, options?: TextGenerationOptions): Promise<string>;
11
+ //# sourceMappingURL=text-generation.usecase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-generation.usecase.d.ts","sourceRoot":"","sources":["../../../src/application/use-cases/text-generation.usecase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAO7E,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ /**
3
+ * Text Generation Use Case
4
+ * Handles simple text generation from prompts
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateText = generateText;
8
+ const groq_http_client_1 = require("../../infrastructure/http/groq-http-client");
9
+ const request_builder_1 = require("../../shared/request-builder");
10
+ const response_handler_1 = require("../../shared/response-handler");
11
+ const timer_1 = require("../../shared/timer");
12
+ const logger_1 = require("../../shared/logger");
13
+ async function generateText(prompt, options = {}) {
14
+ const timer = new timer_1.Timer();
15
+ logger_1.logger.debug("TextGeneration", "Called", {
16
+ model: options.model,
17
+ promptLength: prompt.length,
18
+ });
19
+ const request = request_builder_1.RequestBuilder.buildPromptRequest(prompt, options);
20
+ logger_1.logger.debug("TextGeneration", "Sending request", {
21
+ endpoint: "/v1/chat/completions",
22
+ model: request.model,
23
+ });
24
+ timer.startApiCall();
25
+ const response = await groq_http_client_1.groqHttpClient.chatCompletion(request);
26
+ timer.endApiCall();
27
+ const result = timer.getResult();
28
+ response_handler_1.ResponseHandler.logResponse(logger_1.logger, response, result.apiMs);
29
+ const handled = response_handler_1.ResponseHandler.handleResponse(response);
30
+ logger_1.logger.debug("TextGeneration", "Complete", {
31
+ totalDuration: timer_1.Timer.format(result.totalMs),
32
+ responseLength: handled.content.length,
33
+ });
34
+ return handled.content;
35
+ }
36
+ //# sourceMappingURL=text-generation.usecase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-generation.usecase.js","sourceRoot":"","sources":["../../../src/application/use-cases/text-generation.usecase.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAcH,oCAiCC;AA5CD,iFAA4E;AAC5E,kEAA8D;AAC9D,oEAAgE;AAChE,8CAA2C;AAC3C,gDAA6C;AAOtC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,UAAiC,EAAE;IAEnC,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAE1B,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,EAAE;QACvC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,YAAY,EAAE,MAAM,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,gCAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnE,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,iBAAiB,EAAE;QAChD,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;IAEH,KAAK,CAAC,YAAY,EAAE,CAAC;IACrB,MAAM,QAAQ,GAAG,MAAM,iCAAc,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC9D,KAAK,CAAC,UAAU,EAAE,CAAC;IAEnB,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IACjC,kCAAe,CAAC,WAAW,CAAC,eAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,OAAO,GAAG,kCAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IAEzD,eAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,UAAU,EAAE;QACzC,aAAa,EAAE,aAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QAC3C,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM;KACvC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
@@ -16,7 +16,7 @@ export declare enum GroqErrorType {
16
16
  MISSING_CONFIG = "MISSING_CONFIG",
17
17
  /** Network error occurred */
18
18
  NETWORK_ERROR = "NETWORK_ERROR",
19
- /** Request was aborted */
19
+ /** Request was aborted or timed out */
20
20
  ABORT_ERROR = "ABORT_ERROR",
21
21
  /** Rate limit exceeded */
22
22
  RATE_LIMIT_ERROR = "RATE_LIMIT_ERROR",
@@ -24,6 +24,8 @@ export declare enum GroqErrorType {
24
24
  QUOTA_EXCEEDED = "QUOTA_EXCEEDED",
25
25
  /** Server error */
26
26
  SERVER_ERROR = "SERVER_ERROR",
27
+ /** Client error (invalid request) */
28
+ CLIENT_ERROR = "CLIENT_ERROR",
27
29
  /** Unknown error occurred */
28
30
  UNKNOWN_ERROR = "UNKNOWN_ERROR"
29
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error.types.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/error.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAEzB,IAAI,EAAE,aAAa;IAEnB,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,OAAO;CAKzB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,oCAAoC;IACpC,eAAe,oBAAoB;IACnC,0CAA0C;IAC1C,cAAc,mBAAmB;IACjC,6BAA6B;IAC7B,aAAa,kBAAkB;IAC/B,0BAA0B;IAC1B,WAAW,gBAAgB;IAC3B,0BAA0B;IAC1B,gBAAgB,qBAAqB;IACrC,yBAAyB;IACzB,cAAc,mBAAmB;IACjC,mBAAmB;IACnB,YAAY,iBAAiB;IAC7B,6BAA6B;IAC7B,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CActE"}
1
+ {"version":3,"file":"error.types.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/error.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAEzB,IAAI,EAAE,aAAa;IAEnB,KAAK,CAAC,EAAE,OAAO;gBAFf,IAAI,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EACR,KAAK,CAAC,EAAE,OAAO;CAKzB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,oCAAoC;IACpC,eAAe,oBAAoB;IACnC,0CAA0C;IAC1C,cAAc,mBAAmB;IACjC,6BAA6B;IAC7B,aAAa,kBAAkB;IAC/B,uCAAuC;IACvC,WAAW,gBAAgB;IAC3B,0BAA0B;IAC1B,gBAAgB,qBAAqB;IACrC,yBAAyB;IACzB,cAAc,mBAAmB;IACjC,mBAAmB;IACnB,YAAY,iBAAiB;IAC7B,qCAAqC;IACrC,YAAY,iBAAiB;IAC7B,6BAA6B;IAC7B,aAAa,kBAAkB;CAChC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,CA2BtE"}
@@ -25,7 +25,7 @@ var GroqErrorType;
25
25
  GroqErrorType["MISSING_CONFIG"] = "MISSING_CONFIG";
26
26
  /** Network error occurred */
27
27
  GroqErrorType["NETWORK_ERROR"] = "NETWORK_ERROR";
28
- /** Request was aborted */
28
+ /** Request was aborted or timed out */
29
29
  GroqErrorType["ABORT_ERROR"] = "ABORT_ERROR";
30
30
  /** Rate limit exceeded */
31
31
  GroqErrorType["RATE_LIMIT_ERROR"] = "RATE_LIMIT_ERROR";
@@ -33,6 +33,8 @@ var GroqErrorType;
33
33
  GroqErrorType["QUOTA_EXCEEDED"] = "QUOTA_EXCEEDED";
34
34
  /** Server error */
35
35
  GroqErrorType["SERVER_ERROR"] = "SERVER_ERROR";
36
+ /** Client error (invalid request) */
37
+ GroqErrorType["CLIENT_ERROR"] = "CLIENT_ERROR";
36
38
  /** Unknown error occurred */
37
39
  GroqErrorType["UNKNOWN_ERROR"] = "UNKNOWN_ERROR";
38
40
  })(GroqErrorType || (exports.GroqErrorType = GroqErrorType = {}));
@@ -40,17 +42,25 @@ var GroqErrorType;
40
42
  * Map HTTP status codes to error types
41
43
  */
42
44
  function mapHttpStatusToErrorType(status) {
45
+ // Authentication errors
43
46
  if (status === 401 || status === 403) {
44
47
  return GroqErrorType.INVALID_API_KEY;
45
48
  }
49
+ // Rate limiting
46
50
  if (status === 429) {
47
51
  return GroqErrorType.RATE_LIMIT_ERROR;
48
52
  }
53
+ // Quota exceeded
54
+ if (status === 402) {
55
+ return GroqErrorType.QUOTA_EXCEEDED;
56
+ }
57
+ // Server errors
49
58
  if (status >= 500 && status < 600) {
50
59
  return GroqErrorType.SERVER_ERROR;
51
60
  }
61
+ // Client errors (4xx except specific cases above)
52
62
  if (status >= 400 && status < 500) {
53
- return GroqErrorType.INVALID_API_KEY;
63
+ return GroqErrorType.CLIENT_ERROR;
54
64
  }
55
65
  return GroqErrorType.UNKNOWN_ERROR;
56
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"error.types.js","sourceRoot":"","sources":["../../../src/domain/entities/error.types.ts"],"names":[],"mappings":";;;AAuCA,4DAcC;AArDD;;GAEG;AACH,MAAa,SAAU,SAAQ,KAAK;IAClC,YACS,IAAmB,EAC1B,OAAe,EACR,KAAe;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAe;QAEnB,UAAK,GAAL,KAAK,CAAU;QAGtB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AATD,8BASC;AAED;;GAEG;AACH,IAAY,aAiBX;AAjBD,WAAY,aAAa;IACvB,oCAAoC;IACpC,oDAAmC,CAAA;IACnC,0CAA0C;IAC1C,kDAAiC,CAAA;IACjC,6BAA6B;IAC7B,gDAA+B,CAAA;IAC/B,0BAA0B;IAC1B,4CAA2B,CAAA;IAC3B,0BAA0B;IAC1B,sDAAqC,CAAA;IACrC,yBAAyB;IACzB,kDAAiC,CAAA;IACjC,mBAAmB;IACnB,8CAA6B,CAAA;IAC7B,6BAA6B;IAC7B,gDAA+B,CAAA;AACjC,CAAC,EAjBW,aAAa,6BAAb,aAAa,QAiBxB;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,MAAc;IACrD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,aAAa,CAAC,eAAe,CAAC;IACvC,CAAC;IACD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC,gBAAgB,CAAC;IACxC,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,YAAY,CAAC;IACpC,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,eAAe,CAAC;IACvC,CAAC;IACD,OAAO,aAAa,CAAC,aAAa,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"error.types.js","sourceRoot":"","sources":["../../../src/domain/entities/error.types.ts"],"names":[],"mappings":";;;AAyCA,4DA2BC;AApED;;GAEG;AACH,MAAa,SAAU,SAAQ,KAAK;IAClC,YACS,IAAmB,EAC1B,OAAe,EACR,KAAe;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAe;QAEnB,UAAK,GAAL,KAAK,CAAU;QAGtB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AATD,8BASC;AAED;;GAEG;AACH,IAAY,aAmBX;AAnBD,WAAY,aAAa;IACvB,oCAAoC;IACpC,oDAAmC,CAAA;IACnC,0CAA0C;IAC1C,kDAAiC,CAAA;IACjC,6BAA6B;IAC7B,gDAA+B,CAAA;IAC/B,uCAAuC;IACvC,4CAA2B,CAAA;IAC3B,0BAA0B;IAC1B,sDAAqC,CAAA;IACrC,yBAAyB;IACzB,kDAAiC,CAAA;IACjC,mBAAmB;IACnB,8CAA6B,CAAA;IAC7B,qCAAqC;IACrC,8CAA6B,CAAA;IAC7B,6BAA6B;IAC7B,gDAA+B,CAAA;AACjC,CAAC,EAnBW,aAAa,6BAAb,aAAa,QAmBxB;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,MAAc;IACrD,wBAAwB;IACxB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACrC,OAAO,aAAa,CAAC,eAAe,CAAC;IACvC,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC,gBAAgB,CAAC;IACxC,CAAC;IAED,iBAAiB;IACjB,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;QACnB,OAAO,aAAa,CAAC,cAAc,CAAC;IACtC,CAAC;IAED,gBAAgB;IAChB,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;QAClC,OAAO,aAAa,CAAC,YAAY,CAAC;IACpC,CAAC;IAED,OAAO,aAAa,CAAC,aAAa,CAAC;AACrC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -5,23 +5,27 @@
5
5
  * @author umituz
6
6
  * @license MIT
7
7
  */
8
- export type { GroqConfig, GroqGenerationConfig, GroqMessageRole, GroqMessage, GroqChatRequest, GroqChatResponse, GroqChoice, GroqFinishReason, GroqUsage, GroqChatChunk, GroqChunkChoice, GroqErrorResponse, GroqChatConfig, } from "./domain/entities";
9
- export { GROQ_MODELS, DEFAULT_MODELS, } from "./domain/entities";
8
+ export type { GroqConfig, GroqGenerationConfig, GroqMessageRole, GroqMessage, GroqChatRequest, GroqChatResponse, GroqChoice, GroqFinishReason, GroqUsage, GroqChatChunk, GroqChunkChoice, GroqErrorResponse, GroqChatConfig, } from "./domain/entities/groq.types";
9
+ export { GROQ_MODELS, DEFAULT_MODELS } from "./domain/entities/groq.types";
10
10
  export { GroqError, GroqErrorType, mapHttpStatusToErrorType, } from "./domain/entities/error.types";
11
11
  export { MODEL_REGISTRY, getModelInfo, modelSupports, type ModelCapabilities, type ModelInfo, } from "./domain/entities/models";
12
- export { groqHttpClient } from "./infrastructure/services/GroqClient";
13
- export { textGeneration, chatGeneration } from "./infrastructure/services/TextGeneration";
14
- export { structuredText, structuredChat } from "./infrastructure/services/StructuredText";
15
- export { streaming, streamingChat } from "./infrastructure/services/Streaming";
16
- export { chatSessionService, createChatSession, sendChatMessage, buildChatHistory, trimChatHistory, type ChatSession, type SendChatMessageOptions, type ChatSendResult, type ChatHistoryMessage, } from "./infrastructure/services";
17
- export type { StreamingCallbacks, StreamingOptions } from "./infrastructure/services/Streaming";
18
- export { useGroq } from "./presentation/hooks/useGroq";
19
- export type { UseGroqOptions, UseGroqReturn } from "./presentation/hooks/useGroq";
20
- export { useOperationManager } from "./presentation/hooks/useOperationManager";
21
- export { ConfigBuilder, GenerationConfigBuilder, providerFactory, initializeProvider, configureProvider, resetProvider, } from "./providers/ProviderFactory";
22
- export type { ProviderConfig, ProviderFactoryOptions, } from "./providers/ProviderFactory";
23
- export { createUserMessage, createAssistantMessage, createSystemMessage, createTextMessage, promptToMessages, extractTextFromMessages, formatMessagesForDisplay, } from "./infrastructure/utils/content-mapper.util";
12
+ export { generateText, type TextGenerationOptions } from "./application/use-cases/text-generation.usecase";
13
+ export { generateStructured, type StructuredGenerationOptions } from "./application/use-cases/structured-generation.usecase";
14
+ export { streamText, type StreamingCallbacks, type StreamingOptions } from "./application/use-cases/streaming.usecase";
15
+ export { chatGeneration, type ChatGenerationOptions } from "./application/use-cases/chat-generation.usecase";
16
+ export { chatSessionManager, type ChatSession, type ChatSendResult } from "./application/use-cases/chat-session.usecase";
17
+ export { groqHttpClient } from "./infrastructure/http/groq-http-client";
18
+ export { streamChatCompletion } from "./infrastructure/http/streaming-client";
19
+ export { useGroq, type UseGroqOptions, type UseGroqReturn } from "./presentation/hooks/use-groq.hook";
20
+ export { logger, LogLevel, type LogContext } from "./shared/logger";
21
+ export { Timer, type TimerResult } from "./shared/timer";
22
+ export { RequestBuilder, type RequestBuilderOptions } from "./shared/request-builder";
23
+ export { ResponseHandler, type ResponseHandlerResult } from "./shared/response-handler";
24
+ export { ConfigBuilder, GenerationConfigBuilder } from "./providers/ConfigBuilder";
25
+ export { initializeProvider, resetProvider, isProviderInitialized, type ProviderConfig } from "./providers/ProviderFactory";
26
+ export { createUserMessage, createAssistantMessage, createSystemMessage, createTextMessage, promptToMessages, extractTextFromMessages, formatMessagesForDisplay, cleanJsonResponse, } from "./infrastructure/utils/content-mapper.util";
24
27
  export { getUserFriendlyError, isRetryableError, isAuthError, formatErrorForLogging, } from "./infrastructure/utils/error-mapper.util";
25
- export { executeWithState, executeWithRetry, type AsyncStateSetters, type AsyncCallbacks, } from "./infrastructure/utils/async";
26
- export { telemetry, useTelemetry, } from "./infrastructure/telemetry";
28
+ export { executeWithState, executeWithRetry, type AsyncStateSetters, type AsyncCallbacks, } from "./infrastructure/utils/async/execute-state.util";
29
+ export { generateRandomId, generateSessionId, calculateMaxMessages, calculateExponentialBackoff, clamp, calculatePercentage, calculateSafeBufferSize, estimateTokens, isWithinSafeLimit, calculateRetryDelayWithJitter, calculateRequestTimeout, calculateTransferRate, calculateAverage, } from "./infrastructure/utils/calculation.util";
30
+ export { telemetry, useTelemetry } from "./infrastructure/telemetry/TelemetryHooks";
27
31
  //# sourceMappingURL=index.d.ts.map