chat-flow-ardymalihi 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +266 -0
  3. package/dist/adapters/db/InMemorySessionRepository.js +15 -0
  4. package/dist/adapters/db/RedisSessionRepository.js +41 -0
  5. package/dist/adapters/intent/IntentMatcher.d.ts +25 -0
  6. package/dist/adapters/intent/IntentMatcher.d.ts.map +1 -0
  7. package/dist/adapters/intent/IntentMatcher.js +89 -0
  8. package/dist/adapters/intent/IntentMatcher.js.map +1 -0
  9. package/dist/adapters/intent/IntentService.d.ts +27 -0
  10. package/dist/adapters/intent/IntentService.d.ts.map +1 -0
  11. package/dist/adapters/intent/IntentService.js +59 -0
  12. package/dist/adapters/intent/IntentService.js.map +1 -0
  13. package/dist/adapters/intent/MockIntentAdapter.js +29 -0
  14. package/dist/adapters/llm/GeminiLLMAdapter.d.ts +10 -0
  15. package/dist/adapters/llm/GeminiLLMAdapter.d.ts.map +1 -0
  16. package/dist/adapters/llm/GeminiLLMAdapter.js +102 -0
  17. package/dist/adapters/llm/GeminiLLMAdapter.js.map +1 -0
  18. package/dist/adapters/llm/MockLLMAdapter.d.ts +5 -0
  19. package/dist/adapters/llm/MockLLMAdapter.d.ts.map +1 -0
  20. package/dist/adapters/llm/MockLLMAdapter.js +31 -0
  21. package/dist/adapters/llm/MockLLMAdapter.js.map +1 -0
  22. package/dist/adapters/memory/InMemorySessionRepository.js +15 -0
  23. package/dist/adapters/redis/RedisSessionRepository.js +41 -0
  24. package/dist/adapters/repository/InMemoryRepository.d.ts +15 -0
  25. package/dist/adapters/repository/InMemoryRepository.d.ts.map +1 -0
  26. package/dist/adapters/repository/InMemoryRepository.js +41 -0
  27. package/dist/adapters/repository/InMemoryRepository.js.map +1 -0
  28. package/dist/adapters/repository/IntentRepository.d.ts +15 -0
  29. package/dist/adapters/repository/IntentRepository.d.ts.map +1 -0
  30. package/dist/adapters/repository/IntentRepository.js +28 -0
  31. package/dist/adapters/repository/IntentRepository.js.map +1 -0
  32. package/dist/adapters/repository/RedisRepository.d.ts +16 -0
  33. package/dist/adapters/repository/RedisRepository.d.ts.map +1 -0
  34. package/dist/adapters/repository/RedisRepository.js +87 -0
  35. package/dist/adapters/repository/RedisRepository.js.map +1 -0
  36. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts +5 -0
  37. package/dist/adapters/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  38. package/dist/adapters/workflow/MockWorkflowAdapter.js +162 -0
  39. package/dist/adapters/workflow/MockWorkflowAdapter.js.map +1 -0
  40. package/dist/application/ConversationSession.d.ts +23 -0
  41. package/dist/application/ConversationSession.d.ts.map +1 -0
  42. package/dist/application/ConversationSession.js +83 -0
  43. package/dist/application/ConversationSession.js.map +1 -0
  44. package/dist/application/Message.d.ts +11 -0
  45. package/dist/application/Message.d.ts.map +1 -0
  46. package/dist/application/Message.js +30 -0
  47. package/dist/application/Message.js.map +1 -0
  48. package/dist/application/Orchestrator.d.ts +18 -0
  49. package/dist/application/Orchestrator.d.ts.map +1 -0
  50. package/dist/application/Orchestrator.js +80 -0
  51. package/dist/application/Orchestrator.js.map +1 -0
  52. package/dist/application/SessionState.js +2 -0
  53. package/dist/application/usecases/CreateSession.js +20 -0
  54. package/dist/application/usecases/HandleUserMessage.js +69 -0
  55. package/dist/config/ChatFlowConfig.d.ts +59 -0
  56. package/dist/config/ChatFlowConfig.d.ts.map +1 -0
  57. package/dist/config/ChatFlowConfig.js +49 -0
  58. package/dist/config/ChatFlowConfig.js.map +1 -0
  59. package/dist/config/index.d.ts +2 -0
  60. package/dist/config/index.d.ts.map +1 -0
  61. package/dist/config/index.js +7 -0
  62. package/dist/config/index.js.map +1 -0
  63. package/dist/core/entities/ConversationSession.d.ts +23 -0
  64. package/dist/core/entities/ConversationSession.d.ts.map +1 -0
  65. package/dist/core/entities/ConversationSession.js +83 -0
  66. package/dist/core/entities/ConversationSession.js.map +1 -0
  67. package/dist/core/entities/Message.d.ts +11 -0
  68. package/dist/core/entities/Message.d.ts.map +1 -0
  69. package/dist/core/entities/Message.js +30 -0
  70. package/dist/core/entities/Message.js.map +1 -0
  71. package/dist/core/errors/ChatFlowError.d.ts +71 -0
  72. package/dist/core/errors/ChatFlowError.d.ts.map +1 -0
  73. package/dist/core/errors/ChatFlowError.js +108 -0
  74. package/dist/core/errors/ChatFlowError.js.map +1 -0
  75. package/dist/core/errors/index.d.ts +2 -0
  76. package/dist/core/errors/index.d.ts.map +1 -0
  77. package/dist/core/errors/index.js +15 -0
  78. package/dist/core/errors/index.js.map +1 -0
  79. package/dist/db/InMemoryRepository.d.ts +15 -0
  80. package/dist/db/InMemoryRepository.d.ts.map +1 -0
  81. package/dist/db/InMemoryRepository.js +41 -0
  82. package/dist/db/InMemoryRepository.js.map +1 -0
  83. package/dist/db/RedisRepository.d.ts +16 -0
  84. package/dist/db/RedisRepository.d.ts.map +1 -0
  85. package/dist/db/RedisRepository.js +87 -0
  86. package/dist/db/RedisRepository.js.map +1 -0
  87. package/dist/demo/cli-demo.d.ts +2 -0
  88. package/dist/demo/cli-demo.d.ts.map +1 -0
  89. package/dist/demo/cli-demo.js +142 -0
  90. package/dist/demo/cli-demo.js.map +1 -0
  91. package/dist/demo/console-chat.d.ts +2 -0
  92. package/dist/demo/console-chat.d.ts.map +1 -0
  93. package/dist/demo/console-chat.js +144 -0
  94. package/dist/demo/console-chat.js.map +1 -0
  95. package/dist/domain/conversation/ConversationSession.js +82 -0
  96. package/dist/domain/conversation/Message.js +33 -0
  97. package/dist/domain/conversation/SessionState.js +10 -0
  98. package/dist/index.d.ts +22 -0
  99. package/dist/index.d.ts.map +1 -0
  100. package/dist/index.js +61 -0
  101. package/dist/index.js.map +1 -0
  102. package/dist/intent/IntentService.d.ts +17 -0
  103. package/dist/intent/IntentService.d.ts.map +1 -0
  104. package/dist/intent/IntentService.js +51 -0
  105. package/dist/intent/IntentService.js.map +1 -0
  106. package/dist/intent/MockIntentService.d.ts +6 -0
  107. package/dist/intent/MockIntentService.d.ts.map +1 -0
  108. package/dist/intent/MockIntentService.js +30 -0
  109. package/dist/intent/MockIntentService.js.map +1 -0
  110. package/dist/interfaces.d.ts +108 -0
  111. package/dist/interfaces.d.ts.map +1 -0
  112. package/dist/interfaces.js +18 -0
  113. package/dist/interfaces.js.map +1 -0
  114. package/dist/llm/GeminiLLMAdapter.d.ts +10 -0
  115. package/dist/llm/GeminiLLMAdapter.d.ts.map +1 -0
  116. package/dist/llm/GeminiLLMAdapter.js +102 -0
  117. package/dist/llm/GeminiLLMAdapter.js.map +1 -0
  118. package/dist/llm/MockLLMAdapter.d.ts +5 -0
  119. package/dist/llm/MockLLMAdapter.d.ts.map +1 -0
  120. package/dist/llm/MockLLMAdapter.js +31 -0
  121. package/dist/llm/MockLLMAdapter.js.map +1 -0
  122. package/dist/orchestrator/Orchestrator.d.ts +18 -0
  123. package/dist/orchestrator/Orchestrator.d.ts.map +1 -0
  124. package/dist/orchestrator/Orchestrator.js +80 -0
  125. package/dist/orchestrator/Orchestrator.js.map +1 -0
  126. package/dist/ports/IIntentRepository.d.ts +27 -0
  127. package/dist/ports/IIntentRepository.d.ts.map +1 -0
  128. package/dist/ports/IIntentRepository.js +3 -0
  129. package/dist/ports/IIntentRepository.js.map +1 -0
  130. package/dist/ports/IntentPort.js +2 -0
  131. package/dist/ports/LLMPort.js +2 -0
  132. package/dist/ports/SessionRepository.js +2 -0
  133. package/dist/ports/WorkflowPort.js +2 -0
  134. package/dist/scripts/debug-redis.d.ts +2 -0
  135. package/dist/scripts/debug-redis.d.ts.map +1 -0
  136. package/dist/scripts/debug-redis.js +55 -0
  137. package/dist/scripts/debug-redis.js.map +1 -0
  138. package/dist/scripts/verify_memory_intents.d.ts +2 -0
  139. package/dist/scripts/verify_memory_intents.d.ts.map +1 -0
  140. package/dist/scripts/verify_memory_intents.js +45 -0
  141. package/dist/scripts/verify_memory_intents.js.map +1 -0
  142. package/dist/scripts/verify_redis_intents.d.ts +2 -0
  143. package/dist/scripts/verify_redis_intents.d.ts.map +1 -0
  144. package/dist/scripts/verify_redis_intents.js +50 -0
  145. package/dist/scripts/verify_redis_intents.js.map +1 -0
  146. package/dist/verify_memory_intents.js +44 -0
  147. package/dist/verify_redis_intents.js +49 -0
  148. package/dist/workflow/MockWorkflowAdapter.d.ts +5 -0
  149. package/dist/workflow/MockWorkflowAdapter.d.ts.map +1 -0
  150. package/dist/workflow/MockWorkflowAdapter.js +162 -0
  151. package/dist/workflow/MockWorkflowAdapter.js.map +1 -0
  152. package/package.json +78 -0
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ require("dotenv/config");
37
+ const readline = __importStar(require("readline"));
38
+ const Orchestrator_1 = require("../orchestrator/Orchestrator");
39
+ const InMemoryRepository_1 = require("../adapters/repository/InMemoryRepository");
40
+ const RedisRepository_1 = require("../adapters/repository/RedisRepository");
41
+ const GeminiLLMAdapter_1 = require("../adapters/llm/GeminiLLMAdapter");
42
+ const MockLLMAdapter_1 = require("../adapters/llm/MockLLMAdapter");
43
+ const IntentService_1 = require("../intent/IntentService");
44
+ const MockIntentService_1 = require("../intent/MockIntentService");
45
+ const MockWorkflowAdapter_1 = require("../adapters/workflow/MockWorkflowAdapter");
46
+ const interfaces_1 = require("../interfaces");
47
+ const uuid_1 = require("uuid");
48
+ const AIR_TRAVEL_PROMPT = `
49
+ You are 'SkyBot', a professional and friendly AI travel agent for 'AirConnect'.
50
+ Your goal is to help users book flights, check status, and manage reservations.
51
+ Always be polite, concise, and helpful.
52
+
53
+ IMPORTANT:
54
+ - If the system provides 'Workflow Results' (like available flights or booking confirmation), YOU MUST use that specific information to answer the user.
55
+ - Do not make up flight data. Only use what is provided by the system context.
56
+ - If you need more information (destination, dates), ask the user.
57
+ `.trim();
58
+ async function startChat() {
59
+ console.log('--- Chat-Flow Console (Library Mode) ---');
60
+ // 1. Initialize Adapters (Same as cli-demo)
61
+ const redisUrl = process.env.REDIS_URL;
62
+ const apiKey = process.env.GOOGLE_AI_API_KEY;
63
+ let llm;
64
+ if (apiKey) {
65
+ console.log(`[Init] Using Gemini Generative AI Adapter`);
66
+ llm = new GeminiLLMAdapter_1.GeminiLLMAdapter(apiKey);
67
+ }
68
+ else {
69
+ console.log(`[Init] Using Mock LLM Adapter`);
70
+ llm = new MockLLMAdapter_1.MockLLMAdapter();
71
+ }
72
+ let sessionRepo;
73
+ let intentAdapter;
74
+ if (redisUrl) {
75
+ console.log(`[Init] Using Redis Repository at ${redisUrl}`);
76
+ sessionRepo = new RedisRepository_1.RedisRepository(redisUrl);
77
+ }
78
+ else {
79
+ console.log(`[Init] Using In-Memory Repository`);
80
+ sessionRepo = new InMemoryRepository_1.InMemoryRepository();
81
+ }
82
+ if (sessionRepo instanceof RedisRepository_1.RedisRepository && llm instanceof GeminiLLMAdapter_1.GeminiLLMAdapter) {
83
+ console.log(`[Init] Using Real Intent Detection`);
84
+ intentAdapter = new IntentService_1.IntentService(llm, sessionRepo);
85
+ }
86
+ else {
87
+ console.log(`[Init] Using Mock Intent Adapter`);
88
+ intentAdapter = new MockIntentService_1.MockIntentService();
89
+ }
90
+ const workflow = new MockWorkflowAdapter_1.MockWorkflowAdapter();
91
+ const orchestrator = new Orchestrator_1.Orchestrator(sessionRepo, llm, intentAdapter, workflow);
92
+ // 2. Create Session
93
+ const sessionId = (0, uuid_1.v4)();
94
+ const session = await orchestrator.createSession(sessionId, 'TEXT', AIR_TRAVEL_PROMPT);
95
+ console.log(`\n[Session Started] ID: ${sessionId}`);
96
+ console.log('Type "bye" or "exit" to quit.\n');
97
+ // 3. Chat Loop
98
+ const rl = readline.createInterface({
99
+ input: process.stdin,
100
+ output: process.stdout,
101
+ prompt: '> '
102
+ });
103
+ rl.prompt();
104
+ rl.on('line', async (line) => {
105
+ const input = line.trim();
106
+ if (input.toLowerCase() === 'bye' || input.toLowerCase() === 'exit') {
107
+ console.log('Goodbye!');
108
+ if (sessionRepo instanceof RedisRepository_1.RedisRepository) {
109
+ await sessionRepo.disconnect();
110
+ }
111
+ rl.close();
112
+ return;
113
+ }
114
+ if (input) {
115
+ try {
116
+ const { messages, metadata } = await orchestrator.handleMessage(session.sessionId, input);
117
+ // Show Metadata
118
+ if (metadata?.intent) {
119
+ console.log(`[Meta] Intent Detected: ${metadata.intent} (Conf: ${metadata.confidence})`);
120
+ }
121
+ if (metadata?.workflowExecuted) {
122
+ console.log(`[Meta] Workflow Executed: ${metadata.workflowExecuted}`);
123
+ }
124
+ messages.forEach(msg => {
125
+ if (msg.role === interfaces_1.Role.ASSISTANT) {
126
+ console.log(`[Bot]: ${msg.content}`);
127
+ }
128
+ else if (msg.role === interfaces_1.Role.USER && msg.content.includes("System Info")) {
129
+ console.log(`[System]: ${msg.content}`);
130
+ }
131
+ });
132
+ }
133
+ catch (err) {
134
+ console.error('[Error]', err);
135
+ }
136
+ }
137
+ console.log('');
138
+ rl.prompt();
139
+ }).on('close', () => {
140
+ process.exit(0);
141
+ });
142
+ }
143
+ startChat().catch(err => console.error(err));
144
+ //# sourceMappingURL=console-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"console-chat.js","sourceRoot":"","sources":["../../src/demo/console-chat.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConversationSession = void 0;
4
+ const Message_1 = require("./Message");
5
+ const SessionState_1 = require("./SessionState");
6
+ class ConversationSession {
7
+ constructor(props) {
8
+ this.sessionId = props.sessionId;
9
+ this.mode = props.mode;
10
+ this.agentPrompt = props.agentPrompt;
11
+ this._messages = [];
12
+ this._status = SessionState_1.SessionStatus.ACTIVE;
13
+ this._metadata = {};
14
+ this.createdAt = new Date();
15
+ this.updatedAt = new Date();
16
+ }
17
+ // Helper to restore from persistence
18
+ static reconstitute(data) {
19
+ // We create a "shell" session via private constructor or just forcing it.
20
+ // For simplicity in this demo, we'll instantiate normally and override.
21
+ const session = new ConversationSession({
22
+ sessionId: data.sessionId,
23
+ mode: data.mode,
24
+ agentPrompt: data.agentPrompt
25
+ });
26
+ // Restore state
27
+ // Assuming messages are stored as plain objects, we need to map them back to Message instances
28
+ session._messages = (data.messages || []).map((m) => new Message_1.Message({
29
+ role: m.role,
30
+ content: m.content,
31
+ timestamp: new Date(m.timestamp),
32
+ metadata: m.metadata
33
+ }));
34
+ session._status = data.status;
35
+ session._metadata = data.metadata || {};
36
+ // @ts-ignore - writing to readonly for hydration
37
+ session.createdAt = new Date(data.createdAt);
38
+ session.updatedAt = new Date(data.updatedAt);
39
+ return session;
40
+ }
41
+ // Helper to snapshot for persistence
42
+ toSnapshot() {
43
+ return {
44
+ sessionId: this.sessionId,
45
+ mode: this.mode,
46
+ agentPrompt: this.agentPrompt,
47
+ messages: this._messages,
48
+ status: this._status,
49
+ metadata: this._metadata,
50
+ createdAt: this.createdAt,
51
+ updatedAt: this.updatedAt
52
+ };
53
+ }
54
+ get messages() {
55
+ return [...this._messages];
56
+ }
57
+ get status() {
58
+ return this._status;
59
+ }
60
+ addMessage(message) {
61
+ this._messages.push(message);
62
+ this.updatedAt = new Date();
63
+ }
64
+ updateStatus(status) {
65
+ this._status = status;
66
+ this.updatedAt = new Date();
67
+ }
68
+ setMetadata(key, value) {
69
+ this._metadata[key] = value;
70
+ this.updatedAt = new Date();
71
+ }
72
+ getMetadata(key) {
73
+ return this._metadata[key];
74
+ }
75
+ // Helper to get conversation history for LLM Context
76
+ // Can prepend system instructions here if needed by specific LLM adapters,
77
+ // but usually handled in the Adapter layer.
78
+ getHistory() {
79
+ return this._messages;
80
+ }
81
+ }
82
+ exports.ConversationSession = ConversationSession;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Message = exports.Role = void 0;
4
+ var Role;
5
+ (function (Role) {
6
+ Role["USER"] = "user";
7
+ Role["ASSISTANT"] = "assistant";
8
+ })(Role || (exports.Role = Role = {}));
9
+ class Message {
10
+ constructor(props) {
11
+ this.role = props.role;
12
+ this.content = props.content;
13
+ this.timestamp = props.timestamp;
14
+ this.metadata = props.metadata || {};
15
+ }
16
+ static user(content, metadata) {
17
+ return new Message({
18
+ role: Role.USER,
19
+ content,
20
+ timestamp: new Date(),
21
+ metadata
22
+ });
23
+ }
24
+ static assistant(content, metadata) {
25
+ return new Message({
26
+ role: Role.ASSISTANT,
27
+ content,
28
+ timestamp: new Date(),
29
+ metadata
30
+ });
31
+ }
32
+ }
33
+ exports.Message = Message;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionStatus = void 0;
4
+ var SessionStatus;
5
+ (function (SessionStatus) {
6
+ SessionStatus["ACTIVE"] = "ACTIVE";
7
+ SessionStatus["WAITING_FOR_WORKFLOW"] = "WAITING_FOR_WORKFLOW";
8
+ SessionStatus["COMPLETED"] = "COMPLETED";
9
+ SessionStatus["FAILED"] = "FAILED";
10
+ })(SessionStatus || (exports.SessionStatus = SessionStatus = {}));
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Chat-Flow - Production-ready conversation orchestration library
3
+ * @packageDocumentation
4
+ */
5
+ export * from './interfaces';
6
+ export { Orchestrator } from './orchestrator/Orchestrator';
7
+ export { ConversationSession } from './core/entities/ConversationSession';
8
+ export { Message } from './core/entities/Message';
9
+ export * from './core/errors';
10
+ export { ChatFlowConfig, DEFAULT_CONFIG, mergeConfig } from './config';
11
+ export { IIntentRepository } from './ports/IIntentRepository';
12
+ export { InMemoryRepository } from './adapters/repository/InMemoryRepository';
13
+ export { RedisRepository } from './adapters/repository/RedisRepository';
14
+ export { IntentRepository } from './adapters/repository/IntentRepository';
15
+ export { IntentService } from './intent/IntentService';
16
+ export { MockIntentService } from './intent/MockIntentService';
17
+ export { IntentService as RefactoredIntentService } from './adapters/intent/IntentService';
18
+ export { IntentMatcher } from './adapters/intent/IntentMatcher';
19
+ export { GeminiLLMAdapter } from './adapters/llm/GeminiLLMAdapter';
20
+ export { MockLLMAdapter } from './adapters/llm/MockLLMAdapter';
21
+ export { MockWorkflowAdapter } from './adapters/workflow/MockWorkflowAdapter';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,cAAc,CAAC;AAG7B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAGlD,cAAc,eAAe,CAAC;AAG9B,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAG1E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,aAAa,IAAI,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ /**
3
+ * Chat-Flow - Production-ready conversation orchestration library
4
+ * @packageDocumentation
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.MockWorkflowAdapter = exports.MockLLMAdapter = exports.GeminiLLMAdapter = exports.IntentMatcher = exports.RefactoredIntentService = exports.MockIntentService = exports.IntentService = exports.IntentRepository = exports.RedisRepository = exports.InMemoryRepository = exports.mergeConfig = exports.DEFAULT_CONFIG = exports.Message = exports.ConversationSession = exports.Orchestrator = void 0;
22
+ // Export Core Interfaces
23
+ __exportStar(require("./interfaces"), exports);
24
+ // Export Core Entities
25
+ var Orchestrator_1 = require("./orchestrator/Orchestrator");
26
+ Object.defineProperty(exports, "Orchestrator", { enumerable: true, get: function () { return Orchestrator_1.Orchestrator; } });
27
+ var ConversationSession_1 = require("./core/entities/ConversationSession");
28
+ Object.defineProperty(exports, "ConversationSession", { enumerable: true, get: function () { return ConversationSession_1.ConversationSession; } });
29
+ var Message_1 = require("./core/entities/Message");
30
+ Object.defineProperty(exports, "Message", { enumerable: true, get: function () { return Message_1.Message; } });
31
+ // Export Errors
32
+ __exportStar(require("./core/errors"), exports);
33
+ // Export Configuration
34
+ var config_1 = require("./config");
35
+ Object.defineProperty(exports, "DEFAULT_CONFIG", { enumerable: true, get: function () { return config_1.DEFAULT_CONFIG; } });
36
+ Object.defineProperty(exports, "mergeConfig", { enumerable: true, get: function () { return config_1.mergeConfig; } });
37
+ // Export Repositories
38
+ var InMemoryRepository_1 = require("./adapters/repository/InMemoryRepository");
39
+ Object.defineProperty(exports, "InMemoryRepository", { enumerable: true, get: function () { return InMemoryRepository_1.InMemoryRepository; } });
40
+ var RedisRepository_1 = require("./adapters/repository/RedisRepository");
41
+ Object.defineProperty(exports, "RedisRepository", { enumerable: true, get: function () { return RedisRepository_1.RedisRepository; } });
42
+ var IntentRepository_1 = require("./adapters/repository/IntentRepository");
43
+ Object.defineProperty(exports, "IntentRepository", { enumerable: true, get: function () { return IntentRepository_1.IntentRepository; } });
44
+ // Export Intent Services
45
+ var IntentService_1 = require("./intent/IntentService");
46
+ Object.defineProperty(exports, "IntentService", { enumerable: true, get: function () { return IntentService_1.IntentService; } });
47
+ var MockIntentService_1 = require("./intent/MockIntentService");
48
+ Object.defineProperty(exports, "MockIntentService", { enumerable: true, get: function () { return MockIntentService_1.MockIntentService; } });
49
+ var IntentService_2 = require("./adapters/intent/IntentService");
50
+ Object.defineProperty(exports, "RefactoredIntentService", { enumerable: true, get: function () { return IntentService_2.IntentService; } });
51
+ var IntentMatcher_1 = require("./adapters/intent/IntentMatcher");
52
+ Object.defineProperty(exports, "IntentMatcher", { enumerable: true, get: function () { return IntentMatcher_1.IntentMatcher; } });
53
+ // Export LLM Adapters
54
+ var GeminiLLMAdapter_1 = require("./adapters/llm/GeminiLLMAdapter");
55
+ Object.defineProperty(exports, "GeminiLLMAdapter", { enumerable: true, get: function () { return GeminiLLMAdapter_1.GeminiLLMAdapter; } });
56
+ var MockLLMAdapter_1 = require("./adapters/llm/MockLLMAdapter");
57
+ Object.defineProperty(exports, "MockLLMAdapter", { enumerable: true, get: function () { return MockLLMAdapter_1.MockLLMAdapter; } });
58
+ // Export Workflow Adapters
59
+ var MockWorkflowAdapter_1 = require("./adapters/workflow/MockWorkflowAdapter");
60
+ Object.defineProperty(exports, "MockWorkflowAdapter", { enumerable: true, get: function () { return MockWorkflowAdapter_1.MockWorkflowAdapter; } });
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,yBAAyB;AACzB,+CAA6B;AAE7B,uBAAuB;AACvB,4DAA2D;AAAlD,4GAAA,YAAY,OAAA;AACrB,2EAA0E;AAAjE,0HAAA,mBAAmB,OAAA;AAC5B,mDAAkD;AAAzC,kGAAA,OAAO,OAAA;AAEhB,gBAAgB;AAChB,gDAA8B;AAE9B,uBAAuB;AACvB,mCAAuE;AAA9C,wGAAA,cAAc,OAAA;AAAE,qGAAA,WAAW,OAAA;AAKpD,sBAAsB;AACtB,+EAA8E;AAArE,wHAAA,kBAAkB,OAAA;AAC3B,yEAAwE;AAA/D,kHAAA,eAAe,OAAA;AACxB,2EAA0E;AAAjE,oHAAA,gBAAgB,OAAA;AAEzB,yBAAyB;AACzB,wDAAuD;AAA9C,8GAAA,aAAa,OAAA;AACtB,gEAA+D;AAAtD,sHAAA,iBAAiB,OAAA;AAC1B,iEAA2F;AAAlF,wHAAA,aAAa,OAA2B;AACjD,iEAAgE;AAAvD,8GAAA,aAAa,OAAA;AAEtB,sBAAsB;AACtB,oEAAmE;AAA1D,oHAAA,gBAAgB,OAAA;AACzB,gEAA+D;AAAtD,gHAAA,cAAc,OAAA;AAEvB,2BAA2B;AAC3B,+EAA8E;AAArE,0HAAA,mBAAmB,OAAA"}
@@ -0,0 +1,17 @@
1
+ import { IIntentService, IntentResult, Message, Intent, MatchedIntent } from "../interfaces";
2
+ import { RedisRepository } from "../adapters/repository/RedisRepository";
3
+ import { GeminiLLMAdapter } from "../adapters/llm/GeminiLLMAdapter";
4
+ /**
5
+ * Legacy IntentService for backward compatibility
6
+ * @deprecated Use the new IntentService from adapters/intent instead
7
+ */
8
+ export declare class IntentService implements IIntentService {
9
+ private repository;
10
+ private matcher;
11
+ private confidenceThreshold;
12
+ constructor(genAI: GeminiLLMAdapter, redisRepo: RedisRepository, confidenceThreshold?: number);
13
+ upsertIntents(intents: Intent[]): Promise<void>;
14
+ matchIntents(context: string | object, confidenceThreshold?: number): Promise<MatchedIntent[]>;
15
+ detectIntent(history: Message[], systemPrompt: string): Promise<IntentResult>;
16
+ }
17
+ //# sourceMappingURL=IntentService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntentService.d.ts","sourceRoot":"","sources":["../../src/intent/IntentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAI7F,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE;;;GAGG;AACH,qBAAa,aAAc,YAAW,cAAc;IAChD,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,mBAAmB,CAAS;gBAExB,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,mBAAmB,GAAE,MAAW;IAM3F,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,YAAY,CACd,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,mBAAmB,GAAE,MAAiC,GACvD,OAAO,CAAC,aAAa,EAAE,CAAC;IAKrB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CAkCtF"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntentService = void 0;
4
+ const IntentMatcher_1 = require("../adapters/intent/IntentMatcher");
5
+ const IntentRepository_1 = require("../adapters/repository/IntentRepository");
6
+ /**
7
+ * Legacy IntentService for backward compatibility
8
+ * @deprecated Use the new IntentService from adapters/intent instead
9
+ */
10
+ class IntentService {
11
+ constructor(genAI, redisRepo, confidenceThreshold = 70) {
12
+ this.repository = new IntentRepository_1.IntentRepository(redisRepo);
13
+ this.matcher = new IntentMatcher_1.IntentMatcher(genAI);
14
+ this.confidenceThreshold = confidenceThreshold;
15
+ }
16
+ async upsertIntents(intents) {
17
+ return this.repository.upsertIntents(intents);
18
+ }
19
+ async matchIntents(context, confidenceThreshold = this.confidenceThreshold) {
20
+ const allIntents = await this.repository.getAllIntents();
21
+ return this.matcher.matchIntents(context, allIntents, confidenceThreshold);
22
+ }
23
+ async detectIntent(history, systemPrompt) {
24
+ const allIntents = await this.repository.getAllIntents();
25
+ if (allIntents.length === 0) {
26
+ return {
27
+ intentName: null,
28
+ confidence: 0,
29
+ payload: {}
30
+ };
31
+ }
32
+ const match = await this.matcher.detectFromHistory(history, allIntents, this.confidenceThreshold);
33
+ if (match) {
34
+ return {
35
+ intentName: match.intent.name,
36
+ confidence: match.confidence / 100,
37
+ payload: {
38
+ ...match.required_values,
39
+ ...match.optional_values
40
+ }
41
+ };
42
+ }
43
+ return {
44
+ intentName: null,
45
+ confidence: 0,
46
+ payload: {}
47
+ };
48
+ }
49
+ }
50
+ exports.IntentService = IntentService;
51
+ //# sourceMappingURL=IntentService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntentService.js","sourceRoot":"","sources":["../../src/intent/IntentService.ts"],"names":[],"mappings":";;;AAEA,oEAAiE;AACjE,8EAA2E;AAI3E;;;GAGG;AACH,MAAa,aAAa;IAKtB,YAAY,KAAuB,EAAE,SAA0B,EAAE,sBAA8B,EAAE;QAC7F,IAAI,CAAC,UAAU,GAAG,IAAI,mCAAgB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO,GAAG,IAAI,6BAAa,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiB;QACjC,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,YAAY,CACd,OAAwB,EACxB,sBAA8B,IAAI,CAAC,mBAAmB;QAEtD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QACzD,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAkB,EAAE,YAAoB;QACvD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAEzD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACH,UAAU,EAAE,IAAI;gBAChB,UAAU,EAAE,CAAC;gBACb,OAAO,EAAE,EAAE;aACd,CAAC;QACN,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAC9C,OAAO,EACP,UAAU,EACV,IAAI,CAAC,mBAAmB,CAC3B,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACR,OAAO;gBACH,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI;gBAC7B,UAAU,EAAE,KAAK,CAAC,UAAU,GAAG,GAAG;gBAClC,OAAO,EAAE;oBACL,GAAG,KAAK,CAAC,eAAe;oBACxB,GAAG,KAAK,CAAC,eAAe;iBAC3B;aACJ,CAAC;QACN,CAAC;QAED,OAAO;YACH,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;CACJ;AAzDD,sCAyDC"}
@@ -0,0 +1,6 @@
1
+ import { IIntentService, IntentResult } from '../interfaces';
2
+ import { Message } from '../interfaces';
3
+ export declare class MockIntentService implements IIntentService {
4
+ detectIntent(history: Message[], systemPrompt: string): Promise<IntentResult>;
5
+ }
6
+ //# sourceMappingURL=MockIntentService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockIntentService.d.ts","sourceRoot":"","sources":["../../src/intent/MockIntentService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,qBAAa,iBAAkB,YAAW,cAAc;IAC9C,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;CA0BtF"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockIntentService = void 0;
4
+ class MockIntentService {
5
+ async detectIntent(history, systemPrompt) {
6
+ const lastMsg = history[history.length - 1].content.toLowerCase();
7
+ // Simple keyword detection for demo
8
+ if (lastMsg.includes('book') || lastMsg.includes('flight') || lastMsg.includes('paris')) {
9
+ return {
10
+ intentName: 'USER_WANTS_FLIGHT',
11
+ confidence: 0.95,
12
+ payload: { destination: 'Paris' }
13
+ };
14
+ }
15
+ if (lastMsg.includes('morning') || lastMsg.includes('10 am')) {
16
+ return {
17
+ intentName: 'USER_SELECT_FLIGHT',
18
+ confidence: 0.9,
19
+ payload: { chosen_flight: 'AC123 (10:00 AM)' }
20
+ };
21
+ }
22
+ return {
23
+ intentName: null,
24
+ confidence: 0,
25
+ payload: {}
26
+ };
27
+ }
28
+ }
29
+ exports.MockIntentService = MockIntentService;
30
+ //# sourceMappingURL=MockIntentService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MockIntentService.js","sourceRoot":"","sources":["../../src/intent/MockIntentService.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAC1B,KAAK,CAAC,YAAY,CAAC,OAAkB,EAAE,YAAoB;QACvD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAElE,oCAAoC;QACpC,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtF,OAAO;gBACH,UAAU,EAAE,mBAAmB;gBAC/B,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;aACpC,CAAC;QACN,CAAC;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,OAAO;gBACH,UAAU,EAAE,oBAAoB;gBAChC,UAAU,EAAE,GAAG;gBACf,OAAO,EAAE,EAAE,aAAa,EAAE,kBAAkB,EAAE;aACjD,CAAC;QACN,CAAC;QAED,OAAO;YACH,UAAU,EAAE,IAAI;YAChB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,EAAE;SACd,CAAC;IACN,CAAC;CACJ;AA3BD,8CA2BC"}
@@ -0,0 +1,108 @@
1
+ export declare enum Role {
2
+ USER = "user",
3
+ ASSISTANT = "assistant",
4
+ SYSTEM = "system"
5
+ }
6
+ export declare enum SessionStatus {
7
+ ACTIVE = "ACTIVE",
8
+ WAITING_FOR_WORKFLOW = "WAITING_FOR_WORKFLOW",
9
+ COMPLETED = "COMPLETED",
10
+ FAILED = "FAILED"
11
+ }
12
+ export interface Message {
13
+ role: Role;
14
+ content: string;
15
+ timestamp: Date;
16
+ metadata?: Record<string, any>;
17
+ }
18
+ export interface Field {
19
+ name: string;
20
+ type: string;
21
+ default_value?: any;
22
+ }
23
+ export interface Intent {
24
+ id?: number;
25
+ name: string;
26
+ description: string;
27
+ required_fields: Field[];
28
+ optional_fields?: Field[];
29
+ }
30
+ export interface MatchedIntent {
31
+ intent: Intent;
32
+ confidence: number;
33
+ required_values: Record<string, any>;
34
+ optional_values: Record<string, any>;
35
+ }
36
+ export interface IntentResult {
37
+ intentName: string | null;
38
+ confidence: number;
39
+ payload?: Record<string, any>;
40
+ rawResponse?: any;
41
+ }
42
+ export interface IIntentService {
43
+ /**
44
+ * Analyzes the conversation history and latest message to detect user intent.
45
+ * @param history Full conversation history or relevant window.
46
+ * @param systemPrompt Context for the intent detector.
47
+ */
48
+ detectIntent(history: Message[], systemPrompt: string): Promise<IntentResult>;
49
+ }
50
+ import { ConversationSession } from './core/entities/ConversationSession';
51
+ export interface IRepository {
52
+ saveSession(session: ConversationSession): Promise<void>;
53
+ findSessionById(sessionId: string): Promise<ConversationSession | null>;
54
+ saveIntent(intent: Intent): Promise<void>;
55
+ upsertIntents(intents: Intent[]): Promise<void>;
56
+ findIntentByName(name: string): Promise<Intent | null>;
57
+ getAllIntents(): Promise<Intent[]>;
58
+ deleteIntent(name: string): Promise<void>;
59
+ }
60
+ export interface LLMResponse {
61
+ content: string;
62
+ usage?: {
63
+ promptTokens: number;
64
+ completionTokens: number;
65
+ };
66
+ }
67
+ export interface ILLMAdapter {
68
+ generateResponse(prompt: string, history: Message[]): Promise<LLMResponse>;
69
+ generateContent?(prompt: string): Promise<string>;
70
+ }
71
+ export interface WorkflowResult {
72
+ success: boolean;
73
+ data?: any;
74
+ userMessage?: string;
75
+ error?: string;
76
+ }
77
+ export interface IOrchestrator {
78
+ createSession(sessionId: string, mode: 'TEXT' | 'VOICE', agentPrompt: string): Promise<ConversationSession>;
79
+ handleMessage(sessionId: string, content: string): Promise<{
80
+ messages: Message[];
81
+ metadata?: any;
82
+ }>;
83
+ }
84
+ export interface IWorkflowAdapter {
85
+ executeWorkflow(workflowId: string, context: any): Promise<WorkflowResult>;
86
+ }
87
+ export interface ConversationSessionProps {
88
+ sessionId: string;
89
+ mode: 'TEXT' | 'VOICE';
90
+ agentPrompt: string;
91
+ messages: any[];
92
+ status: SessionStatus;
93
+ createdAt: Date;
94
+ updatedAt: Date;
95
+ metadata?: Record<string, any>;
96
+ }
97
+ export interface MessageProps {
98
+ role: Role;
99
+ content: string;
100
+ timestamp: Date;
101
+ metadata?: Record<string, any>;
102
+ }
103
+ export interface CreateSessionProps {
104
+ sessionId: string;
105
+ mode: 'TEXT' | 'VOICE';
106
+ agentPrompt: string;
107
+ }
108
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ // --- Enums & Common Types ---
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.SessionStatus = exports.Role = void 0;
5
+ var Role;
6
+ (function (Role) {
7
+ Role["USER"] = "user";
8
+ Role["ASSISTANT"] = "assistant";
9
+ Role["SYSTEM"] = "system";
10
+ })(Role || (exports.Role = Role = {}));
11
+ var SessionStatus;
12
+ (function (SessionStatus) {
13
+ SessionStatus["ACTIVE"] = "ACTIVE";
14
+ SessionStatus["WAITING_FOR_WORKFLOW"] = "WAITING_FOR_WORKFLOW";
15
+ SessionStatus["COMPLETED"] = "COMPLETED";
16
+ SessionStatus["FAILED"] = "FAILED";
17
+ })(SessionStatus || (exports.SessionStatus = SessionStatus = {}));
18
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA,+BAA+B;;;AAE/B,IAAY,IAIX;AAJD,WAAY,IAAI;IACZ,qBAAa,CAAA;IACb,+BAAuB,CAAA;IACvB,yBAAiB,CAAA;AACrB,CAAC,EAJW,IAAI,oBAAJ,IAAI,QAIf;AAED,IAAY,aAKX;AALD,WAAY,aAAa;IACrB,kCAAiB,CAAA;IACjB,8DAA6C,CAAA;IAC7C,wCAAuB,CAAA;IACvB,kCAAiB,CAAA;AACrB,CAAC,EALW,aAAa,6BAAb,aAAa,QAKxB"}
@@ -0,0 +1,10 @@
1
+ import { ILLMAdapter, LLMResponse, Message } from '../interfaces';
2
+ export declare class GeminiLLMAdapter implements ILLMAdapter {
3
+ private genAI;
4
+ private model;
5
+ private embeddingModel;
6
+ constructor(apiKey: string);
7
+ generateResponse(systemPrompt: string, history: Message[]): Promise<LLMResponse>;
8
+ generateContent(prompt: string): Promise<string>;
9
+ }
10
+ //# sourceMappingURL=GeminiLLMAdapter.d.ts.map