@multiplayer-app/ai-agent-node 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +45 -0
- package/README.md +611 -0
- package/config.example.json +73 -0
- package/dist/config.d.ts +35 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/helpers/AIHelper.d.ts +23 -0
- package/dist/helpers/AIHelper.d.ts.map +1 -0
- package/dist/helpers/AIHelper.js +326 -0
- package/dist/helpers/AIHelper.js.map +1 -0
- package/dist/helpers/AIHelper.test.d.ts +2 -0
- package/dist/helpers/AIHelper.test.d.ts.map +1 -0
- package/dist/helpers/AIHelper.test.js +332 -0
- package/dist/helpers/AIHelper.test.js.map +1 -0
- package/dist/helpers/ConfigHelper.d.ts +20 -0
- package/dist/helpers/ConfigHelper.d.ts.map +1 -0
- package/dist/helpers/ConfigHelper.js +118 -0
- package/dist/helpers/ConfigHelper.js.map +1 -0
- package/dist/helpers/ContextLimiter.d.ts +82 -0
- package/dist/helpers/ContextLimiter.d.ts.map +1 -0
- package/dist/helpers/ContextLimiter.js +165 -0
- package/dist/helpers/ContextLimiter.js.map +1 -0
- package/dist/helpers/FileHelper.d.ts +31 -0
- package/dist/helpers/FileHelper.d.ts.map +1 -0
- package/dist/helpers/FileHelper.js +175 -0
- package/dist/helpers/FileHelper.js.map +1 -0
- package/dist/helpers/SetupHelper.d.ts +5 -0
- package/dist/helpers/SetupHelper.d.ts.map +1 -0
- package/dist/helpers/SetupHelper.js +32 -0
- package/dist/helpers/SetupHelper.js.map +1 -0
- package/dist/helpers/index.d.ts +6 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +6 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/libs/index.d.ts +4 -0
- package/dist/libs/index.d.ts.map +1 -0
- package/dist/libs/index.js +4 -0
- package/dist/libs/index.js.map +1 -0
- package/dist/libs/kafka/config.d.ts +5 -0
- package/dist/libs/kafka/config.d.ts.map +1 -0
- package/dist/libs/kafka/config.js +5 -0
- package/dist/libs/kafka/config.js.map +1 -0
- package/dist/libs/kafka/consumer.d.ts +16 -0
- package/dist/libs/kafka/consumer.d.ts.map +1 -0
- package/dist/libs/kafka/consumer.js +126 -0
- package/dist/libs/kafka/consumer.js.map +1 -0
- package/dist/libs/kafka/index.d.ts +3 -0
- package/dist/libs/kafka/index.d.ts.map +1 -0
- package/dist/libs/kafka/index.js +3 -0
- package/dist/libs/kafka/index.js.map +1 -0
- package/dist/libs/kafka/kafka.d.ts +3 -0
- package/dist/libs/kafka/kafka.d.ts.map +1 -0
- package/dist/libs/kafka/kafka.js +24 -0
- package/dist/libs/kafka/kafka.js.map +1 -0
- package/dist/libs/kafka/producer.d.ts +11 -0
- package/dist/libs/kafka/producer.d.ts.map +1 -0
- package/dist/libs/kafka/producer.js +44 -0
- package/dist/libs/kafka/producer.js.map +1 -0
- package/dist/libs/logger/config.d.ts +5 -0
- package/dist/libs/logger/config.d.ts.map +1 -0
- package/dist/libs/logger/config.js +6 -0
- package/dist/libs/logger/config.js.map +1 -0
- package/dist/libs/logger/index.d.ts +10 -0
- package/dist/libs/logger/index.d.ts.map +1 -0
- package/dist/libs/logger/index.js +20 -0
- package/dist/libs/logger/index.js.map +1 -0
- package/dist/libs/logger/kafkajs-logger-creator.d.ts +12 -0
- package/dist/libs/logger/kafkajs-logger-creator.d.ts.map +1 -0
- package/dist/libs/logger/kafkajs-logger-creator.js +29 -0
- package/dist/libs/logger/kafkajs-logger-creator.js.map +1 -0
- package/dist/libs/logger/logger.d.ts +42 -0
- package/dist/libs/logger/logger.d.ts.map +1 -0
- package/dist/libs/logger/logger.js +44 -0
- package/dist/libs/logger/logger.js.map +1 -0
- package/dist/libs/s3/config.d.ts +7 -0
- package/dist/libs/s3/config.d.ts.map +1 -0
- package/dist/libs/s3/config.js +7 -0
- package/dist/libs/s3/config.js.map +1 -0
- package/dist/libs/s3/index.d.ts +4 -0
- package/dist/libs/s3/index.d.ts.map +1 -0
- package/dist/libs/s3/index.js +4 -0
- package/dist/libs/s3/index.js.map +1 -0
- package/dist/libs/s3/s3.lib.d.ts +25 -0
- package/dist/libs/s3/s3.lib.d.ts.map +1 -0
- package/dist/libs/s3/s3.lib.js +202 -0
- package/dist/libs/s3/s3.lib.js.map +1 -0
- package/dist/processors/ChatProcessor.d.ts +66 -0
- package/dist/processors/ChatProcessor.d.ts.map +1 -0
- package/dist/processors/ChatProcessor.js +610 -0
- package/dist/processors/ChatProcessor.js.map +1 -0
- package/dist/processors/ModelsProcessor.d.ts +11 -0
- package/dist/processors/ModelsProcessor.d.ts.map +1 -0
- package/dist/processors/ModelsProcessor.js +30 -0
- package/dist/processors/ModelsProcessor.js.map +1 -0
- package/dist/processors/index.d.ts +3 -0
- package/dist/processors/index.d.ts.map +1 -0
- package/dist/processors/index.js +3 -0
- package/dist/processors/index.js.map +1 -0
- package/dist/services/AIService.d.ts +48 -0
- package/dist/services/AIService.d.ts.map +1 -0
- package/dist/services/AIService.js +196 -0
- package/dist/services/AIService.js.map +1 -0
- package/dist/services/InternalEventsHandler.d.ts +21 -0
- package/dist/services/InternalEventsHandler.d.ts.map +1 -0
- package/dist/services/InternalEventsHandler.js +56 -0
- package/dist/services/InternalEventsHandler.js.map +1 -0
- package/dist/services/KafkaService.d.ts +35 -0
- package/dist/services/KafkaService.d.ts.map +1 -0
- package/dist/services/KafkaService.js +120 -0
- package/dist/services/KafkaService.js.map +1 -0
- package/dist/services/ModelFetcher.d.ts +54 -0
- package/dist/services/ModelFetcher.d.ts.map +1 -0
- package/dist/services/ModelFetcher.js +247 -0
- package/dist/services/ModelFetcher.js.map +1 -0
- package/dist/services/RedisService.d.ts +90 -0
- package/dist/services/RedisService.d.ts.map +1 -0
- package/dist/services/RedisService.js +236 -0
- package/dist/services/RedisService.js.map +1 -0
- package/dist/services/SocketService.d.ts +39 -0
- package/dist/services/SocketService.d.ts.map +1 -0
- package/dist/services/SocketService.js +128 -0
- package/dist/services/SocketService.js.map +1 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +7 -0
- package/dist/services/index.js.map +1 -0
- package/dist/store/AgentStore.d.ts +48 -0
- package/dist/store/AgentStore.d.ts.map +1 -0
- package/dist/store/AgentStore.js +98 -0
- package/dist/store/AgentStore.js.map +1 -0
- package/dist/store/ArtifactStore.d.ts +13 -0
- package/dist/store/ArtifactStore.d.ts.map +1 -0
- package/dist/store/ArtifactStore.js +27 -0
- package/dist/store/ArtifactStore.js.map +1 -0
- package/dist/store/ConfigStore.d.ts +89 -0
- package/dist/store/ConfigStore.d.ts.map +1 -0
- package/dist/store/ConfigStore.js +214 -0
- package/dist/store/ConfigStore.js.map +1 -0
- package/dist/store/ConfigStore.test.d.ts +2 -0
- package/dist/store/ConfigStore.test.d.ts.map +1 -0
- package/dist/store/ConfigStore.test.js +259 -0
- package/dist/store/ConfigStore.test.js.map +1 -0
- package/dist/store/ModelStore.d.ts +44 -0
- package/dist/store/ModelStore.d.ts.map +1 -0
- package/dist/store/ModelStore.js +81 -0
- package/dist/store/ModelStore.js.map +1 -0
- package/dist/store/ModelStore.test.d.ts +2 -0
- package/dist/store/ModelStore.test.d.ts.map +1 -0
- package/dist/store/ModelStore.test.js +390 -0
- package/dist/store/ModelStore.test.js.map +1 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -0
- package/dist/store/index.js.map +1 -0
- package/dist/tools/generateChartTool.d.ts +24 -0
- package/dist/tools/generateChartTool.d.ts.map +1 -0
- package/dist/tools/generateChartTool.js +124 -0
- package/dist/tools/generateChartTool.js.map +1 -0
- package/dist/tools/proposeFormValuesTool.d.ts +35 -0
- package/dist/tools/proposeFormValuesTool.d.ts.map +1 -0
- package/dist/tools/proposeFormValuesTool.js +56 -0
- package/dist/tools/proposeFormValuesTool.js.map +1 -0
- package/package.json +71 -0
- package/src/config.ts +46 -0
- package/src/helpers/AIHelper.test.ts +375 -0
- package/src/helpers/AIHelper.ts +353 -0
- package/src/helpers/ConfigHelper.ts +130 -0
- package/src/helpers/ContextLimiter.ts +228 -0
- package/src/helpers/FileHelper.ts +197 -0
- package/src/helpers/SetupHelper.ts +35 -0
- package/src/helpers/index.ts +5 -0
- package/src/index.ts +18 -0
- package/src/libs/index.ts +3 -0
- package/src/libs/kafka/config.ts +4 -0
- package/src/libs/kafka/consumer.ts +161 -0
- package/src/libs/kafka/index.ts +2 -0
- package/src/libs/kafka/kafka.ts +27 -0
- package/src/libs/kafka/producer.ts +48 -0
- package/src/libs/logger/config.ts +4 -0
- package/src/libs/logger/index.ts +21 -0
- package/src/libs/logger/kafkajs-logger-creator.ts +28 -0
- package/src/libs/logger/logger.ts +60 -0
- package/src/libs/s3/config.ts +7 -0
- package/src/libs/s3/index.ts +3 -0
- package/src/libs/s3/s3.lib.ts +284 -0
- package/src/processors/ChatProcessor.ts +713 -0
- package/src/processors/ModelsProcessor.ts +34 -0
- package/src/processors/index.ts +2 -0
- package/src/services/AIService.ts +241 -0
- package/src/services/InternalEventsHandler.ts +61 -0
- package/src/services/KafkaService.ts +142 -0
- package/src/services/ModelFetcher.ts +286 -0
- package/src/services/RedisService.ts +285 -0
- package/src/services/SocketService.ts +153 -0
- package/src/services/index.ts +6 -0
- package/src/store/AgentStore.ts +138 -0
- package/src/store/ArtifactStore.ts +29 -0
- package/src/store/ConfigStore.test.ts +314 -0
- package/src/store/ConfigStore.ts +239 -0
- package/src/store/ModelStore.test.ts +473 -0
- package/src/store/ModelStore.ts +93 -0
- package/src/store/index.ts +4 -0
- package/src/tools/generateChartTool.ts +131 -0
- package/src/tools/proposeFormValuesTool.ts +67 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import { config as appConfig } from '../config';
|
|
2
|
+
import { logger } from '../libs/logger';
|
|
3
|
+
export class ModelFetcher {
|
|
4
|
+
constructor(config = {}) {
|
|
5
|
+
this.config = {
|
|
6
|
+
openaiApiKey: config.openaiApiKey || appConfig.ai.openaiApiKey,
|
|
7
|
+
anthropicApiKey: config.anthropicApiKey || appConfig.ai.anthropicApiKey,
|
|
8
|
+
googleApiKey: config.googleApiKey || appConfig.ai.googleApiKey,
|
|
9
|
+
openrouterApiKey: config.openrouterApiKey || appConfig.ai.openrouterApiKey
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Analyze environment and fetch models for all available providers
|
|
14
|
+
*/
|
|
15
|
+
async fetchAllModels() {
|
|
16
|
+
logger.info('Fetching available AI models...');
|
|
17
|
+
const allModels = [];
|
|
18
|
+
const providers = this.detectAvailableProviders();
|
|
19
|
+
for (const provider of providers) {
|
|
20
|
+
try {
|
|
21
|
+
const models = await this.fetchModelsForProvider(provider);
|
|
22
|
+
allModels.push(...models);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
logger.warn(`Failed to fetch models for provider ${provider}:`, error instanceof Error ? error.message : 'Unknown error');
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return allModels;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Detect which providers are available based on API keys
|
|
32
|
+
*/
|
|
33
|
+
detectAvailableProviders() {
|
|
34
|
+
const providers = [];
|
|
35
|
+
if (this.config.openrouterApiKey) {
|
|
36
|
+
providers.push('openrouter');
|
|
37
|
+
return providers;
|
|
38
|
+
}
|
|
39
|
+
if (this.config.openaiApiKey) {
|
|
40
|
+
providers.push('openai');
|
|
41
|
+
}
|
|
42
|
+
if (this.config.anthropicApiKey) {
|
|
43
|
+
providers.push('anthropic');
|
|
44
|
+
}
|
|
45
|
+
if (this.config.googleApiKey) {
|
|
46
|
+
providers.push('google');
|
|
47
|
+
}
|
|
48
|
+
return providers;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Fetch models for a specific provider
|
|
52
|
+
*/
|
|
53
|
+
async fetchModelsForProvider(provider) {
|
|
54
|
+
switch (provider) {
|
|
55
|
+
case 'openai':
|
|
56
|
+
return this.fetchOpenAIModels();
|
|
57
|
+
case 'anthropic':
|
|
58
|
+
return this.fetchAnthropicModels();
|
|
59
|
+
case 'google':
|
|
60
|
+
return this.fetchGoogleModels();
|
|
61
|
+
case 'openrouter':
|
|
62
|
+
return this.fetchOpenRouterModels();
|
|
63
|
+
default:
|
|
64
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Fetch models from OpenAI
|
|
69
|
+
*/
|
|
70
|
+
async fetchOpenAIModels() {
|
|
71
|
+
if (!this.config.openaiApiKey) {
|
|
72
|
+
return [];
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const response = await fetch('https://api.openai.com/v1/models', {
|
|
76
|
+
headers: {
|
|
77
|
+
'Authorization': `Bearer ${this.config.openaiApiKey}`,
|
|
78
|
+
'Content-Type': 'application/json'
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
if (!response.ok) {
|
|
82
|
+
throw new Error(`OpenAI API returned ${response.status}: ${response.statusText}`);
|
|
83
|
+
}
|
|
84
|
+
const data = await response.json();
|
|
85
|
+
const models = (data.data || [])
|
|
86
|
+
.filter((model) => model.id.startsWith('gpt-') || model.id.startsWith('o1'))
|
|
87
|
+
.map((model) => ({
|
|
88
|
+
id: model.id,
|
|
89
|
+
provider: 'openai',
|
|
90
|
+
label: this.formatModelLabel(model.id),
|
|
91
|
+
description: this.getModelDescription(model.id, 'openai')
|
|
92
|
+
}));
|
|
93
|
+
return models;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
logger.error('Failed to fetch OpenAI models:', error);
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Fetch models from Anthropic
|
|
102
|
+
*/
|
|
103
|
+
async fetchAnthropicModels() {
|
|
104
|
+
if (!this.config.anthropicApiKey) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
const response = await fetch('https://api.anthropic.com/v1/models', {
|
|
109
|
+
headers: {
|
|
110
|
+
'x-api-key': this.config.anthropicApiKey,
|
|
111
|
+
'anthropic-version': '2023-06-01',
|
|
112
|
+
'Content-Type': 'application/json'
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error(`Anthropic API returned ${response.status}: ${response.statusText}`);
|
|
117
|
+
}
|
|
118
|
+
const data = await response.json();
|
|
119
|
+
const models = (data.data || [])
|
|
120
|
+
.filter((model) => model.id && model.id.startsWith('claude-'))
|
|
121
|
+
.map((model) => ({
|
|
122
|
+
id: model.id,
|
|
123
|
+
provider: 'anthropic',
|
|
124
|
+
label: this.formatModelLabel(model.id),
|
|
125
|
+
description: this.getModelDescription(model.id, 'anthropic')
|
|
126
|
+
}));
|
|
127
|
+
return models;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
logger.error('Failed to fetch Anthropic models:', error);
|
|
131
|
+
return [];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Fetch models from Google
|
|
136
|
+
*/
|
|
137
|
+
async fetchGoogleModels() {
|
|
138
|
+
if (!this.config.googleApiKey) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
try {
|
|
142
|
+
// Google SDK doesn't have a models.list() endpoint
|
|
143
|
+
// Return known Google models
|
|
144
|
+
return [
|
|
145
|
+
{
|
|
146
|
+
id: 'gemini-2.0-flash-exp',
|
|
147
|
+
provider: 'google',
|
|
148
|
+
label: 'Gemini 2.0 Flash',
|
|
149
|
+
description: 'Google\'s latest fast and efficient model'
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: 'gemini-1.5-pro',
|
|
153
|
+
provider: 'google',
|
|
154
|
+
label: 'Gemini 1.5 Pro',
|
|
155
|
+
description: 'Google\'s advanced multimodal model'
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
id: 'gemini-1.5-flash',
|
|
159
|
+
provider: 'google',
|
|
160
|
+
label: 'Gemini 1.5 Flash',
|
|
161
|
+
description: 'Fast and efficient Gemini model'
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
id: 'gemini-pro',
|
|
165
|
+
provider: 'google',
|
|
166
|
+
label: 'Gemini Pro',
|
|
167
|
+
description: 'Google Gemini Pro model'
|
|
168
|
+
}
|
|
169
|
+
];
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
logger.error('Failed to fetch Google models:', error);
|
|
173
|
+
return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Fetch models from OpenRouter
|
|
178
|
+
*/
|
|
179
|
+
async fetchOpenRouterModels() {
|
|
180
|
+
if (!this.config.openrouterApiKey) {
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const response = await fetch('https://openrouter.ai/api/v1/models?supported_parameters=tools', {
|
|
185
|
+
headers: {
|
|
186
|
+
'Authorization': `Bearer ${this.config.openrouterApiKey}`,
|
|
187
|
+
'Content-Type': 'application/json'
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
if (!response.ok) {
|
|
191
|
+
throw new Error(`OpenRouter API returned ${response.status}: ${response.statusText}`);
|
|
192
|
+
}
|
|
193
|
+
const data = await response.json();
|
|
194
|
+
const models = (data.data || []).map((model) => ({
|
|
195
|
+
id: model.id,
|
|
196
|
+
provider: model.id.split('/')[0],
|
|
197
|
+
label: model.name || this.formatModelLabel(model.id),
|
|
198
|
+
description: model.description || `OpenRouter model: ${model.id}`
|
|
199
|
+
}))
|
|
200
|
+
.filter((model) => model.provider === 'openai' ||
|
|
201
|
+
model.provider === 'anthropic' ||
|
|
202
|
+
model.provider === 'google')
|
|
203
|
+
.map((model) => ({
|
|
204
|
+
...model,
|
|
205
|
+
provider: 'openrouter'
|
|
206
|
+
}));
|
|
207
|
+
return models;
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
logger.error('Failed to fetch OpenRouter models:', error);
|
|
211
|
+
return [];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Format model ID into a readable label
|
|
216
|
+
*/
|
|
217
|
+
formatModelLabel(modelId) {
|
|
218
|
+
// Convert "gpt-4o" to "GPT-4o"
|
|
219
|
+
return modelId
|
|
220
|
+
.split('-')
|
|
221
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
222
|
+
.join(' ');
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Get description for known models
|
|
226
|
+
*/
|
|
227
|
+
getModelDescription(modelId, provider) {
|
|
228
|
+
const descriptions = {
|
|
229
|
+
// OpenAI models
|
|
230
|
+
'gpt-4o': 'OpenAI\'s most advanced multimodal model',
|
|
231
|
+
'gpt-4o-mini': 'Faster and more affordable GPT-4o variant',
|
|
232
|
+
'gpt-4-turbo': 'High-performance GPT-4 variant',
|
|
233
|
+
'gpt-4': 'OpenAI GPT-4 model',
|
|
234
|
+
'gpt-3.5-turbo': 'Fast and efficient GPT-3.5 model',
|
|
235
|
+
'o1-preview': 'OpenAI O1 reasoning model',
|
|
236
|
+
'o1-mini': 'OpenAI O1 Mini reasoning model',
|
|
237
|
+
// Anthropic models
|
|
238
|
+
'claude-3-5-sonnet-20241022': 'Anthropic\'s latest and most capable model',
|
|
239
|
+
'claude-3.5-sonnet-20241022': 'Anthropic\'s latest and most capable model',
|
|
240
|
+
'claude-3-opus-20240229': 'Anthropic\'s most powerful model',
|
|
241
|
+
'claude-3-sonnet-20240229': 'Balanced performance and speed',
|
|
242
|
+
'claude-3-haiku-20240307': 'Fastest and most affordable Claude model'
|
|
243
|
+
};
|
|
244
|
+
return descriptions[modelId] || `${provider} model: ${modelId}`;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=ModelFetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelFetcher.js","sourceRoot":"","sources":["../../src/services/ModelFetcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { createClient, RedisClientType } from 'redis';
|
|
2
|
+
export interface RedisConfig {
|
|
3
|
+
url?: string;
|
|
4
|
+
host?: string;
|
|
5
|
+
port?: number;
|
|
6
|
+
password?: string;
|
|
7
|
+
database?: number;
|
|
8
|
+
}
|
|
9
|
+
type RedisPubSubClient = ReturnType<typeof createClient>;
|
|
10
|
+
type RedisPubSubPair = {
|
|
11
|
+
pubClient: RedisPubSubClient;
|
|
12
|
+
subClient: RedisPubSubClient;
|
|
13
|
+
};
|
|
14
|
+
export declare class RedisService {
|
|
15
|
+
private client;
|
|
16
|
+
private pubSubClients;
|
|
17
|
+
private isConnected;
|
|
18
|
+
/**
|
|
19
|
+
* Initialize Redis client connection
|
|
20
|
+
*/
|
|
21
|
+
initialize(redisConfigOverride?: RedisConfig): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Get a value by key
|
|
24
|
+
*/
|
|
25
|
+
get(key: string): Promise<string | null>;
|
|
26
|
+
/**
|
|
27
|
+
* Set a key-value pair
|
|
28
|
+
*/
|
|
29
|
+
set(key: string, value: string, options?: {
|
|
30
|
+
EX?: number;
|
|
31
|
+
PX?: number;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Delete a key
|
|
35
|
+
*/
|
|
36
|
+
del(key: string): Promise<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Check if a key exists
|
|
39
|
+
*/
|
|
40
|
+
exists(key: string): Promise<number>;
|
|
41
|
+
/**
|
|
42
|
+
* Set expiration on a key
|
|
43
|
+
* @returns true if the timeout was set, false if the key doesn't exist
|
|
44
|
+
*/
|
|
45
|
+
expire(key: string, seconds: number): Promise<boolean>;
|
|
46
|
+
/**
|
|
47
|
+
* Get TTL (time to live) of a key
|
|
48
|
+
*/
|
|
49
|
+
ttl(key: string): Promise<number>;
|
|
50
|
+
/**
|
|
51
|
+
* Increment a key's value
|
|
52
|
+
*/
|
|
53
|
+
incr(key: string): Promise<number>;
|
|
54
|
+
/**
|
|
55
|
+
* Decrement a key's value
|
|
56
|
+
*/
|
|
57
|
+
decr(key: string): Promise<number>;
|
|
58
|
+
/**
|
|
59
|
+
* Get multiple keys
|
|
60
|
+
*/
|
|
61
|
+
mGet(keys: string[]): Promise<(string | null)[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Set multiple key-value pairs
|
|
64
|
+
*/
|
|
65
|
+
mSet(keyValuePairs: Record<string, string>): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Get all keys matching a pattern
|
|
68
|
+
*/
|
|
69
|
+
keys(pattern: string): Promise<string[]>;
|
|
70
|
+
/**
|
|
71
|
+
* Get the Redis client instance
|
|
72
|
+
*/
|
|
73
|
+
getClient(): RedisClientType | null;
|
|
74
|
+
/**
|
|
75
|
+
* Get or create pub/sub clients for Socket.IO adapter
|
|
76
|
+
* These are separate clients needed for the Redis adapter
|
|
77
|
+
*/
|
|
78
|
+
getPubSubClients(name?: string): Promise<RedisPubSubPair>;
|
|
79
|
+
/**
|
|
80
|
+
* Check if the client is connected
|
|
81
|
+
*/
|
|
82
|
+
isClientConnected(): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Disconnect from Redis
|
|
85
|
+
*/
|
|
86
|
+
disconnect(): Promise<void>;
|
|
87
|
+
}
|
|
88
|
+
export declare const redisService: RedisService;
|
|
89
|
+
export {};
|
|
90
|
+
//# sourceMappingURL=RedisService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisService.d.ts","sourceRoot":"","sources":["../../src/services/RedisService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAItD,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,iBAAiB,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACzD,KAAK,eAAe,GAAG;IAAE,SAAS,EAAE,iBAAiB,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEtF,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,aAAa,CAA2C;IAChE,OAAO,CAAC,WAAW,CAAkB;IAErC;;OAEG;IACG,UAAU,CAAC,mBAAmB,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAwDlE;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAO9C;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5F;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvC;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO1C;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAO5D;;OAEG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvC;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOxC;;OAEG;IACG,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOxC;;OAEG;IACG,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAOtD;;OAEG;IACG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhE;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO9C;;OAEG;IACH,SAAS,IAAI,eAAe,GAAG,IAAI;IAInC;;;OAGG;IACG,gBAAgB,CAAC,IAAI,GAAE,MAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;IA+C1E;;OAEG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAuBlC;AAED,eAAO,MAAM,YAAY,cAAqB,CAAC"}
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
import { createClient } from 'redis';
|
|
2
|
+
import { config, getRedisUrl } from '../config';
|
|
3
|
+
import { logger } from '../libs/logger';
|
|
4
|
+
export class RedisService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.client = null;
|
|
7
|
+
this.pubSubClients = new Map();
|
|
8
|
+
this.isConnected = false;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Initialize Redis client connection
|
|
12
|
+
*/
|
|
13
|
+
async initialize(redisConfigOverride) {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
if (this.client && this.isConnected) {
|
|
16
|
+
logger.info('Redis client already initialized');
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const redisUrl = (redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.url) ||
|
|
20
|
+
config.redis.url ||
|
|
21
|
+
`redis://${(redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.host) || config.redis.host}:${(redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.port) || config.redis.port}`;
|
|
22
|
+
const redisConfig = {
|
|
23
|
+
url: redisUrl
|
|
24
|
+
};
|
|
25
|
+
if ((redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.password) || config.redis.password) {
|
|
26
|
+
redisConfig.password = (redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.password) || config.redis.password;
|
|
27
|
+
}
|
|
28
|
+
if ((redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.database) !== undefined || config.redis.database !== undefined) {
|
|
29
|
+
redisConfig.database = (_b = (_a = redisConfigOverride === null || redisConfigOverride === void 0 ? void 0 : redisConfigOverride.database) !== null && _a !== void 0 ? _a : config.redis.database) !== null && _b !== void 0 ? _b : 0;
|
|
30
|
+
}
|
|
31
|
+
this.client = createClient(redisConfig);
|
|
32
|
+
this.client.on('error', (err) => {
|
|
33
|
+
logger.error('Redis Client Error:', err);
|
|
34
|
+
this.isConnected = false;
|
|
35
|
+
});
|
|
36
|
+
this.client.on('connect', () => {
|
|
37
|
+
logger.info('Redis Client connecting...');
|
|
38
|
+
});
|
|
39
|
+
this.client.on('ready', () => {
|
|
40
|
+
logger.info('Redis Client ready');
|
|
41
|
+
this.isConnected = true;
|
|
42
|
+
});
|
|
43
|
+
this.client.on('reconnecting', () => {
|
|
44
|
+
logger.info('Redis Client reconnecting...');
|
|
45
|
+
});
|
|
46
|
+
this.client.on('end', () => {
|
|
47
|
+
logger.info('Redis Client connection ended');
|
|
48
|
+
this.isConnected = false;
|
|
49
|
+
});
|
|
50
|
+
try {
|
|
51
|
+
await this.client.connect();
|
|
52
|
+
logger.info('Redis client connected successfully');
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
logger.error('Failed to connect to Redis:', error);
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get a value by key
|
|
61
|
+
*/
|
|
62
|
+
async get(key) {
|
|
63
|
+
if (!this.client || !this.isConnected) {
|
|
64
|
+
throw new Error('Redis client not initialized or not connected');
|
|
65
|
+
}
|
|
66
|
+
return await this.client.get(key);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Set a key-value pair
|
|
70
|
+
*/
|
|
71
|
+
async set(key, value, options) {
|
|
72
|
+
if (!this.client || !this.isConnected) {
|
|
73
|
+
throw new Error('Redis client not initialized or not connected');
|
|
74
|
+
}
|
|
75
|
+
await this.client.set(key, value, options);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Delete a key
|
|
79
|
+
*/
|
|
80
|
+
async del(key) {
|
|
81
|
+
if (!this.client || !this.isConnected) {
|
|
82
|
+
throw new Error('Redis client not initialized or not connected');
|
|
83
|
+
}
|
|
84
|
+
return await this.client.del(key);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if a key exists
|
|
88
|
+
*/
|
|
89
|
+
async exists(key) {
|
|
90
|
+
if (!this.client || !this.isConnected) {
|
|
91
|
+
throw new Error('Redis client not initialized or not connected');
|
|
92
|
+
}
|
|
93
|
+
return await this.client.exists(key);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Set expiration on a key
|
|
97
|
+
* @returns true if the timeout was set, false if the key doesn't exist
|
|
98
|
+
*/
|
|
99
|
+
async expire(key, seconds) {
|
|
100
|
+
if (!this.client || !this.isConnected) {
|
|
101
|
+
throw new Error('Redis client not initialized or not connected');
|
|
102
|
+
}
|
|
103
|
+
return (await this.client.expire(key, seconds)) === 1;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get TTL (time to live) of a key
|
|
107
|
+
*/
|
|
108
|
+
async ttl(key) {
|
|
109
|
+
if (!this.client || !this.isConnected) {
|
|
110
|
+
throw new Error('Redis client not initialized or not connected');
|
|
111
|
+
}
|
|
112
|
+
return await this.client.ttl(key);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Increment a key's value
|
|
116
|
+
*/
|
|
117
|
+
async incr(key) {
|
|
118
|
+
if (!this.client || !this.isConnected) {
|
|
119
|
+
throw new Error('Redis client not initialized or not connected');
|
|
120
|
+
}
|
|
121
|
+
return await this.client.incr(key);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Decrement a key's value
|
|
125
|
+
*/
|
|
126
|
+
async decr(key) {
|
|
127
|
+
if (!this.client || !this.isConnected) {
|
|
128
|
+
throw new Error('Redis client not initialized or not connected');
|
|
129
|
+
}
|
|
130
|
+
return await this.client.decr(key);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get multiple keys
|
|
134
|
+
*/
|
|
135
|
+
async mGet(keys) {
|
|
136
|
+
if (!this.client || !this.isConnected) {
|
|
137
|
+
throw new Error('Redis client not initialized or not connected');
|
|
138
|
+
}
|
|
139
|
+
return await this.client.mGet(keys);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Set multiple key-value pairs
|
|
143
|
+
*/
|
|
144
|
+
async mSet(keyValuePairs) {
|
|
145
|
+
if (!this.client || !this.isConnected) {
|
|
146
|
+
throw new Error('Redis client not initialized or not connected');
|
|
147
|
+
}
|
|
148
|
+
await this.client.mSet(keyValuePairs);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get all keys matching a pattern
|
|
152
|
+
*/
|
|
153
|
+
async keys(pattern) {
|
|
154
|
+
if (!this.client || !this.isConnected) {
|
|
155
|
+
throw new Error('Redis client not initialized or not connected');
|
|
156
|
+
}
|
|
157
|
+
return await this.client.keys(pattern);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Get the Redis client instance
|
|
161
|
+
*/
|
|
162
|
+
getClient() {
|
|
163
|
+
return this.client;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Get or create pub/sub clients for Socket.IO adapter
|
|
167
|
+
* These are separate clients needed for the Redis adapter
|
|
168
|
+
*/
|
|
169
|
+
async getPubSubClients(name = 'default') {
|
|
170
|
+
const existingPair = this.pubSubClients.get(name);
|
|
171
|
+
if (existingPair) {
|
|
172
|
+
return existingPair;
|
|
173
|
+
}
|
|
174
|
+
const redisUrl = getRedisUrl();
|
|
175
|
+
const redisConfig = {
|
|
176
|
+
url: redisUrl
|
|
177
|
+
};
|
|
178
|
+
if (config.redis.password) {
|
|
179
|
+
redisConfig.password = config.redis.password;
|
|
180
|
+
}
|
|
181
|
+
if (config.redis.database !== undefined) {
|
|
182
|
+
redisConfig.database = config.redis.database;
|
|
183
|
+
}
|
|
184
|
+
// Create pub client
|
|
185
|
+
const pubClient = createClient(redisConfig);
|
|
186
|
+
// Create sub client as duplicate of pub client
|
|
187
|
+
const subClient = pubClient.duplicate();
|
|
188
|
+
// Set up error handlers
|
|
189
|
+
pubClient.on('error', (err) => {
|
|
190
|
+
logger.error('Redis Pub Client Error:', err);
|
|
191
|
+
});
|
|
192
|
+
subClient.on('error', (err) => {
|
|
193
|
+
logger.error('Redis Sub Client Error:', err);
|
|
194
|
+
});
|
|
195
|
+
// Connect both clients
|
|
196
|
+
try {
|
|
197
|
+
await Promise.all([pubClient.connect(), subClient.connect()]);
|
|
198
|
+
logger.info(`Redis pub/sub clients connected successfully for ${name}`);
|
|
199
|
+
const pair = { pubClient, subClient };
|
|
200
|
+
this.pubSubClients.set(name, pair);
|
|
201
|
+
return pair;
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
logger.error(`Failed to connect Redis pub/sub clients for ${name}:`, error);
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if the client is connected
|
|
210
|
+
*/
|
|
211
|
+
isClientConnected() {
|
|
212
|
+
return this.isConnected;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Disconnect from Redis
|
|
216
|
+
*/
|
|
217
|
+
async disconnect() {
|
|
218
|
+
const disconnectPromises = [];
|
|
219
|
+
if (this.client) {
|
|
220
|
+
disconnectPromises.push(this.client.quit().then(() => {
|
|
221
|
+
this.client = null;
|
|
222
|
+
}));
|
|
223
|
+
}
|
|
224
|
+
this.pubSubClients.forEach(({ pubClient, subClient }) => {
|
|
225
|
+
disconnectPromises.push(pubClient.quit().then(() => undefined).catch(() => undefined));
|
|
226
|
+
disconnectPromises.push(subClient.quit().then(() => undefined).catch(() => undefined));
|
|
227
|
+
});
|
|
228
|
+
this.pubSubClients.clear();
|
|
229
|
+
await Promise.all(disconnectPromises);
|
|
230
|
+
this.isConnected = false;
|
|
231
|
+
logger.info('Redis clients disconnected');
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Singleton instance
|
|
235
|
+
export const redisService = new RedisService();
|
|
236
|
+
//# sourceMappingURL=RedisService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RedisService.js","sourceRoot":"","sources":["../../src/services/RedisService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Server as SocketIOServer } from 'socket.io';
|
|
2
|
+
import type { Server as HTTPServer } from 'http';
|
|
3
|
+
import type { AgentChatResponse, AgentMessage } from '@multiplayer-app/ai-agent-types';
|
|
4
|
+
export interface SocketError extends Error {
|
|
5
|
+
message: string;
|
|
6
|
+
data?: {
|
|
7
|
+
code: number;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export declare class SocketIOError extends Error implements SocketError {
|
|
11
|
+
data: {
|
|
12
|
+
code: number;
|
|
13
|
+
};
|
|
14
|
+
constructor(message: string, code: number);
|
|
15
|
+
}
|
|
16
|
+
type Middleware = <REQUEST = any, RESPONSE = any>(request: REQUEST, response: RESPONSE, next?: (error?: SocketError) => void) => void | Promise<void>;
|
|
17
|
+
export declare class SocketService {
|
|
18
|
+
private io;
|
|
19
|
+
initialize(httpServer: HTTPServer, authorizationMiddleware?: Middleware): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Emit a new chat event to a specific user
|
|
22
|
+
*/
|
|
23
|
+
emitNewChat(userId: string, chat: AgentChatResponse): void;
|
|
24
|
+
/**
|
|
25
|
+
* Emit a new message event to a specific user
|
|
26
|
+
*/
|
|
27
|
+
emitMessageUpdate(userId: string | undefined, message: AgentMessage, excludeSocketId?: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Emit a chat update event to a specific user
|
|
30
|
+
*/
|
|
31
|
+
emitChatUpdate(userId: string, chat: AgentChatResponse, excludeSocketId?: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Get the Socket.IO server instance
|
|
34
|
+
*/
|
|
35
|
+
getIO(): SocketIOServer | null;
|
|
36
|
+
}
|
|
37
|
+
export declare const socketService: SocketService;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=SocketService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SocketService.d.ts","sourceRoot":"","sources":["../../src/services/SocketService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,MAAM,CAAC;AAEjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIvF,MAAM,WAAW,WAAY,SAAQ,KAAK;IACxC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED,qBAAa,aAAc,SAAQ,KAAM,YAAW,WAAW;IACtD,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAI1C;AAED,KAAK,UAAU,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,KAAK,IAAI,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAmCtJ,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAA+B;IAEnC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,uBAAuB,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C7F;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,IAAI;IAO1D;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAWpG;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI;IAUvF;;OAEG;IACH,KAAK,IAAI,cAAc,GAAG,IAAI;CAG/B;AAGD,eAAO,MAAM,aAAa,eAAsB,CAAC"}
|