@cmdoss/memwal-sdk 0.6.0 → 0.6.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/ARCHITECTURE.md +86 -2
- package/BENCHMARKS.md +2 -2
- package/README.md +43 -4
- package/dist/ai-sdk/types.d.ts +2 -2
- package/dist/ai-sdk/types.d.ts.map +1 -1
- package/dist/browser.d.ts +9 -9
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +16 -11
- package/dist/browser.js.map +1 -1
- package/dist/client/PersonalDataWallet.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.d.ts.map +1 -1
- package/dist/client/SimplePDWClient.js +4 -4
- package/dist/client/SimplePDWClient.js.map +1 -1
- package/dist/client/namespaces/BatchNamespace.js +2 -2
- package/dist/client/namespaces/BatchNamespace.js.map +1 -1
- package/dist/client/namespaces/MemoryNamespace.js +3 -3
- package/dist/client/namespaces/MemoryNamespace.js.map +1 -1
- package/dist/client/namespaces/StorageNamespace.js +4 -4
- package/dist/client/namespaces/StorageNamespace.js.map +1 -1
- package/dist/client/namespaces/consolidated/StorageNamespace.js +2 -2
- package/dist/client/namespaces/consolidated/StorageNamespace.js.map +1 -1
- package/dist/client/signers/DappKitSigner.d.ts +136 -0
- package/dist/client/signers/DappKitSigner.d.ts.map +1 -0
- package/dist/client/signers/DappKitSigner.js +128 -0
- package/dist/client/signers/DappKitSigner.js.map +1 -0
- package/dist/client/signers/KeypairSigner.d.ts +4 -0
- package/dist/client/signers/KeypairSigner.d.ts.map +1 -1
- package/dist/client/signers/KeypairSigner.js +6 -0
- package/dist/client/signers/KeypairSigner.js.map +1 -1
- package/dist/client/signers/UnifiedSigner.d.ts +10 -0
- package/dist/client/signers/UnifiedSigner.d.ts.map +1 -1
- package/dist/client/signers/WalletAdapterSigner.d.ts +7 -0
- package/dist/client/signers/WalletAdapterSigner.d.ts.map +1 -1
- package/dist/client/signers/WalletAdapterSigner.js +9 -0
- package/dist/client/signers/WalletAdapterSigner.js.map +1 -1
- package/dist/client/signers/index.d.ts +3 -0
- package/dist/client/signers/index.d.ts.map +1 -1
- package/dist/client/signers/index.js +2 -0
- package/dist/client/signers/index.js.map +1 -1
- package/dist/generated/utils/index.js +1 -1
- package/dist/generated/utils/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/services/CapabilityService.js +1 -1
- package/dist/services/CapabilityService.js.map +1 -1
- package/dist/services/EncryptionService.js +1 -1
- package/dist/services/EncryptionService.js.map +1 -1
- package/dist/services/StorageService.d.ts +8 -8
- package/dist/services/StorageService.d.ts.map +1 -1
- package/dist/services/StorageService.js.map +1 -1
- package/dist/services/VectorService.js +2 -2
- package/dist/services/VectorService.js.map +1 -1
- package/dist/services/storage/BlobAttributesManager.d.ts +4 -4
- package/dist/services/storage/BlobAttributesManager.d.ts.map +1 -1
- package/dist/services/storage/BlobAttributesManager.js +6 -15
- package/dist/services/storage/BlobAttributesManager.js.map +1 -1
- package/dist/services/storage/QuiltBatchManager.d.ts +23 -5
- package/dist/services/storage/QuiltBatchManager.d.ts.map +1 -1
- package/dist/services/storage/QuiltBatchManager.js +118 -35
- package/dist/services/storage/QuiltBatchManager.js.map +1 -1
- package/dist/services/storage/WalrusMetadataManager.d.ts +2 -2
- package/dist/services/storage/WalrusMetadataManager.d.ts.map +1 -1
- package/dist/services/storage/WalrusMetadataManager.js +2 -5
- package/dist/services/storage/WalrusMetadataManager.js.map +1 -1
- package/dist/services/storage/WalrusStorageManager.d.ts +2 -2
- package/dist/services/storage/WalrusStorageManager.d.ts.map +1 -1
- package/dist/services/storage/WalrusStorageManager.js +7 -11
- package/dist/services/storage/WalrusStorageManager.js.map +1 -1
- package/dist/wallet/MainWalletService.js +1 -1
- package/dist/wallet/MainWalletService.js.map +1 -1
- package/package.json +10 -3
- package/src/ai-sdk/types.ts +2 -2
- package/src/browser.ts +19 -20
- package/src/client/SimplePDWClient.ts +18 -14
- package/src/client/namespaces/BatchNamespace.ts +2 -2
- package/src/client/namespaces/MemoryNamespace.ts +3 -3
- package/src/client/namespaces/StorageNamespace.ts +4 -4
- package/src/client/namespaces/consolidated/StorageNamespace.ts +2 -2
- package/src/client/signers/DappKitSigner.ts +207 -0
- package/src/client/signers/KeypairSigner.ts +7 -0
- package/src/client/signers/UnifiedSigner.ts +11 -0
- package/src/client/signers/WalletAdapterSigner.ts +10 -0
- package/src/client/signers/index.ts +7 -0
- package/src/generated/pdw/deps/sui/object.ts +12 -12
- package/src/generated/pdw/deps/sui/vec_map.ts +32 -32
- package/src/generated/pdw/memory.ts +1087 -1087
- package/src/generated/pdw/wallet.ts +123 -123
- package/src/generated/utils/index.ts +159 -159
- package/src/index.ts +16 -0
- package/src/services/CapabilityService.ts +1 -1
- package/src/services/EncryptionService.ts +1 -1
- package/src/services/StorageService.ts +8 -8
- package/src/services/VectorService.ts +2 -2
- package/src/services/storage/BlobAttributesManager.ts +10 -19
- package/src/services/storage/QuiltBatchManager.ts +139 -37
- package/src/services/storage/WalrusMetadataManager.ts +4 -7
- package/src/services/storage/WalrusStorageManager.ts +10 -13
- package/src/wallet/MainWalletService.ts +1 -1
- package/dist/api/client.d.ts +0 -43
- package/dist/api/client.d.ts.map +0 -1
- package/dist/api/client.js +0 -136
- package/dist/api/client.js.map +0 -1
- package/dist/chat/index.d.ts +0 -13
- package/dist/chat/index.d.ts.map +0 -1
- package/dist/chat/index.js +0 -14
- package/dist/chat/index.js.map +0 -1
- package/dist/client/namespaces/ChatNamespace.d.ts +0 -110
- package/dist/client/namespaces/ChatNamespace.d.ts.map +0 -1
- package/dist/client/namespaces/ChatNamespace.js +0 -123
- package/dist/client/namespaces/ChatNamespace.js.map +0 -1
- package/dist/encryption/index.d.ts +0 -14
- package/dist/encryption/index.d.ts.map +0 -1
- package/dist/encryption/index.js +0 -14
- package/dist/encryption/index.js.map +0 -1
- package/dist/graph/BrowserKnowledgeGraphManager.d.ts +0 -101
- package/dist/graph/BrowserKnowledgeGraphManager.d.ts.map +0 -1
- package/dist/graph/BrowserKnowledgeGraphManager.js +0 -411
- package/dist/graph/BrowserKnowledgeGraphManager.js.map +0 -1
- package/dist/hooks.wip/index.d.ts +0 -55
- package/dist/hooks.wip/index.d.ts.map +0 -1
- package/dist/hooks.wip/index.js +0 -58
- package/dist/hooks.wip/index.js.map +0 -1
- package/dist/hooks.wip/useCreateMemory.d.ts +0 -111
- package/dist/hooks.wip/useCreateMemory.d.ts.map +0 -1
- package/dist/hooks.wip/useCreateMemory.js +0 -149
- package/dist/hooks.wip/useCreateMemory.js.map +0 -1
- package/dist/hooks.wip/useCreateMemoryBatch.d.ts +0 -122
- package/dist/hooks.wip/useCreateMemoryBatch.d.ts.map +0 -1
- package/dist/hooks.wip/useCreateMemoryBatch.js +0 -221
- package/dist/hooks.wip/useCreateMemoryBatch.js.map +0 -1
- package/dist/hooks.wip/useKnowledgeGraph.d.ts +0 -66
- package/dist/hooks.wip/useKnowledgeGraph.d.ts.map +0 -1
- package/dist/hooks.wip/useKnowledgeGraph.js +0 -229
- package/dist/hooks.wip/useKnowledgeGraph.js.map +0 -1
- package/dist/hooks.wip/useMemoryChat.d.ts +0 -106
- package/dist/hooks.wip/useMemoryChat.d.ts.map +0 -1
- package/dist/hooks.wip/useMemoryChat.js +0 -284
- package/dist/hooks.wip/useMemoryChat.js.map +0 -1
- package/dist/hooks.wip/useMemoryIndex.d.ts +0 -90
- package/dist/hooks.wip/useMemoryIndex.d.ts.map +0 -1
- package/dist/hooks.wip/useMemoryIndex.js +0 -218
- package/dist/hooks.wip/useMemoryIndex.js.map +0 -1
- package/dist/hooks.wip/useMemoryManager.d.ts +0 -35
- package/dist/hooks.wip/useMemoryManager.d.ts.map +0 -1
- package/dist/hooks.wip/useMemoryManager.js +0 -86
- package/dist/hooks.wip/useMemoryManager.js.map +0 -1
- package/dist/hooks.wip/useMemorySearch.d.ts +0 -100
- package/dist/hooks.wip/useMemorySearch.d.ts.map +0 -1
- package/dist/hooks.wip/useMemorySearch.js +0 -278
- package/dist/hooks.wip/useMemorySearch.js.map +0 -1
- package/dist/hooks.wip/useMemoryServices.d.ts +0 -80
- package/dist/hooks.wip/useMemoryServices.d.ts.map +0 -1
- package/dist/hooks.wip/useMemoryServices.js +0 -264
- package/dist/hooks.wip/useMemoryServices.js.map +0 -1
- package/dist/hooks.wip/usePDWRAG.d.ts +0 -112
- package/dist/hooks.wip/usePDWRAG.d.ts.map +0 -1
- package/dist/hooks.wip/usePDWRAG.js +0 -121
- package/dist/hooks.wip/usePDWRAG.js.map +0 -1
- package/dist/hooks.wip/usePDWVectorStore.d.ts +0 -68
- package/dist/hooks.wip/usePDWVectorStore.d.ts.map +0 -1
- package/dist/hooks.wip/usePDWVectorStore.js +0 -102
- package/dist/hooks.wip/usePDWVectorStore.js.map +0 -1
- package/dist/hooks.wip/useRetrieveEmbedding.d.ts +0 -138
- package/dist/hooks.wip/useRetrieveEmbedding.d.ts.map +0 -1
- package/dist/hooks.wip/useRetrieveEmbedding.js +0 -121
- package/dist/hooks.wip/useRetrieveEmbedding.js.map +0 -1
- package/dist/hooks.wip/useSearchMemories.d.ts +0 -103
- package/dist/hooks.wip/useSearchMemories.d.ts.map +0 -1
- package/dist/hooks.wip/useSearchMemories.js +0 -146
- package/dist/hooks.wip/useSearchMemories.js.map +0 -1
- package/dist/hooks.wip/useStoreEmbedding.d.ts +0 -174
- package/dist/hooks.wip/useStoreEmbedding.d.ts.map +0 -1
- package/dist/hooks.wip/useStoreEmbedding.js +0 -167
- package/dist/hooks.wip/useStoreEmbedding.js.map +0 -1
- package/dist/hooks.wip/useWalletMemories.d.ts +0 -119
- package/dist/hooks.wip/useWalletMemories.d.ts.map +0 -1
- package/dist/hooks.wip/useWalletMemories.js +0 -166
- package/dist/hooks.wip/useWalletMemories.js.map +0 -1
- package/dist/hooks.wip/utils/cache.d.ts +0 -25
- package/dist/hooks.wip/utils/cache.d.ts.map +0 -1
- package/dist/hooks.wip/utils/cache.js +0 -38
- package/dist/hooks.wip/utils/cache.js.map +0 -1
- package/dist/hooks.wip/utils/types.d.ts +0 -138
- package/dist/hooks.wip/utils/types.d.ts.map +0 -1
- package/dist/hooks.wip/utils/types.js +0 -5
- package/dist/hooks.wip/utils/types.js.map +0 -1
- package/dist/infrastructure/ai/EmbeddingService.d.ts +0 -101
- package/dist/infrastructure/ai/EmbeddingService.d.ts.map +0 -1
- package/dist/infrastructure/ai/EmbeddingService.js +0 -242
- package/dist/infrastructure/ai/EmbeddingService.js.map +0 -1
- package/dist/infrastructure/ai/GeminiAIService.d.ts +0 -84
- package/dist/infrastructure/ai/GeminiAIService.d.ts.map +0 -1
- package/dist/infrastructure/ai/GeminiAIService.js +0 -300
- package/dist/infrastructure/ai/GeminiAIService.js.map +0 -1
- package/dist/infrastructure/ai/index.d.ts +0 -8
- package/dist/infrastructure/ai/index.d.ts.map +0 -1
- package/dist/infrastructure/ai/index.js +0 -8
- package/dist/infrastructure/ai/index.js.map +0 -1
- package/dist/memory/index.d.ts +0 -13
- package/dist/memory/index.d.ts.map +0 -1
- package/dist/memory/index.js +0 -14
- package/dist/memory/index.js.map +0 -1
- package/dist/services/ChatService.d.ts +0 -89
- package/dist/services/ChatService.d.ts.map +0 -1
- package/dist/services/ChatService.js +0 -319
- package/dist/services/ChatService.js.map +0 -1
- package/dist/transactions/index.d.ts +0 -13
- package/dist/transactions/index.d.ts.map +0 -1
- package/dist/transactions/index.js +0 -14
- package/dist/transactions/index.js.map +0 -1
- package/dist/types/wallet.d.ts +0 -12
- package/dist/types/wallet.d.ts.map +0 -1
- package/dist/types/wallet.js +0 -13
- package/dist/types/wallet.js.map +0 -1
- package/dist/view/ViewService.d.ts +0 -136
- package/dist/view/ViewService.d.ts.map +0 -1
- package/dist/view/ViewService.js +0 -325
- package/dist/view/ViewService.js.map +0 -1
- package/dist/view/index.d.ts +0 -7
- package/dist/view/index.d.ts.map +0 -1
- package/dist/view/index.js +0 -7
- package/dist/view/index.js.map +0 -1
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* EmbeddingService - Local AI Embedding Generation
|
|
3
|
-
*
|
|
4
|
-
* Provides local embedding generation using Google Gemini API,
|
|
5
|
-
* eliminating the need for backend API calls for vector operations.
|
|
6
|
-
*/
|
|
7
|
-
import { GoogleGenAI } from '@google/genai';
|
|
8
|
-
/**
|
|
9
|
-
* Local embedding service using Google Gemini API
|
|
10
|
-
*/
|
|
11
|
-
export class EmbeddingService {
|
|
12
|
-
constructor(config = {}) {
|
|
13
|
-
this.requestCount = 0;
|
|
14
|
-
this.lastReset = Date.now();
|
|
15
|
-
// Try config first, then environment variables, then throw error
|
|
16
|
-
const apiKey = config.apiKey ||
|
|
17
|
-
process.env.GEMINI_API_KEY ||
|
|
18
|
-
process.env.GOOGLE_AI_API_KEY;
|
|
19
|
-
if (!apiKey) {
|
|
20
|
-
throw new Error('Gemini API key is required for embedding generation. ' +
|
|
21
|
-
'Provide it via:\n' +
|
|
22
|
-
'1. config.apiKey parameter\n' +
|
|
23
|
-
'2. GEMINI_API_KEY environment variable\n' +
|
|
24
|
-
'3. GOOGLE_AI_API_KEY environment variable\n' +
|
|
25
|
-
'Get your API key from: https://makersuite.google.com/app/apikey');
|
|
26
|
-
}
|
|
27
|
-
this.genAI = new GoogleGenAI({ apiKey });
|
|
28
|
-
this.model = config.model || 'text-embedding-004';
|
|
29
|
-
this.dimensions = config.dimensions || 3072;
|
|
30
|
-
this.maxRequestsPerMinute = config.requestsPerMinute || 1500; // Gemini rate limit
|
|
31
|
-
if (process.env.NODE_ENV === 'development') {
|
|
32
|
-
console.log(`✅ EmbeddingService initialized with model: ${this.model}`);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Generate embedding for a single text
|
|
37
|
-
*/
|
|
38
|
-
async embedText(options) {
|
|
39
|
-
const startTime = Date.now();
|
|
40
|
-
// Validate input
|
|
41
|
-
if (!options.text || typeof options.text !== 'string' || options.text.trim().length === 0) {
|
|
42
|
-
throw new Error('Invalid or empty text provided for embedding');
|
|
43
|
-
}
|
|
44
|
-
await this.checkRateLimit();
|
|
45
|
-
try {
|
|
46
|
-
const taskType = this.getTaskType(options.type);
|
|
47
|
-
const result = await this.genAI.models.embedContent({
|
|
48
|
-
model: this.model,
|
|
49
|
-
contents: options.text,
|
|
50
|
-
config: {
|
|
51
|
-
taskType,
|
|
52
|
-
outputDimensionality: this.dimensions
|
|
53
|
-
}
|
|
54
|
-
});
|
|
55
|
-
this.requestCount++;
|
|
56
|
-
const vector = result.embeddings?.[0]?.values;
|
|
57
|
-
if (!vector || vector.length === 0) {
|
|
58
|
-
throw new Error('Empty embedding vector received from Gemini API');
|
|
59
|
-
}
|
|
60
|
-
// Ensure vector has expected dimensions
|
|
61
|
-
if (vector.length !== this.dimensions && process.env.NODE_ENV === 'development') {
|
|
62
|
-
console.warn(`Expected ${this.dimensions} dimensions, got ${vector.length}`);
|
|
63
|
-
}
|
|
64
|
-
return {
|
|
65
|
-
vector: Array.from(vector), // Convert to regular array
|
|
66
|
-
dimension: vector.length,
|
|
67
|
-
model: this.model,
|
|
68
|
-
processingTime: Date.now() - startTime,
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
catch (error) {
|
|
72
|
-
throw new Error(`Embedding generation failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Generate embeddings for multiple texts (batched)
|
|
77
|
-
*/
|
|
78
|
-
async embedBatch(texts, options = {}) {
|
|
79
|
-
const startTime = Date.now();
|
|
80
|
-
const results = [];
|
|
81
|
-
let successCount = 0;
|
|
82
|
-
let failedCount = 0;
|
|
83
|
-
// Process in smaller batches to respect rate limits
|
|
84
|
-
const batchSize = 10;
|
|
85
|
-
const totalBatches = Math.ceil(texts.length / batchSize);
|
|
86
|
-
for (let i = 0; i < totalBatches; i++) {
|
|
87
|
-
const batch = texts.slice(i * batchSize, (i + 1) * batchSize);
|
|
88
|
-
const batchPromises = batch.map(async (text) => {
|
|
89
|
-
try {
|
|
90
|
-
const result = await this.embedText({ ...options, text });
|
|
91
|
-
successCount++;
|
|
92
|
-
return result.vector;
|
|
93
|
-
}
|
|
94
|
-
catch (error) {
|
|
95
|
-
failedCount++;
|
|
96
|
-
if (process.env.NODE_ENV === 'development') {
|
|
97
|
-
console.warn(`Failed to embed text: ${text.substring(0, 100)}...`);
|
|
98
|
-
}
|
|
99
|
-
// Return zero vector as fallback
|
|
100
|
-
return new Array(this.dimensions).fill(0);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
const batchResults = await Promise.all(batchPromises);
|
|
104
|
-
results.push(...batchResults);
|
|
105
|
-
// Add delay between batches to respect rate limits
|
|
106
|
-
if (i < totalBatches - 1) {
|
|
107
|
-
await this.delay(100); // 100ms delay between batches
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
const totalTime = Date.now() - startTime;
|
|
111
|
-
return {
|
|
112
|
-
vectors: results,
|
|
113
|
-
dimension: this.dimensions,
|
|
114
|
-
model: this.model,
|
|
115
|
-
totalProcessingTime: totalTime,
|
|
116
|
-
averageProcessingTime: totalTime / texts.length,
|
|
117
|
-
successCount,
|
|
118
|
-
failedCount,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Calculate cosine similarity between two vectors
|
|
123
|
-
*/
|
|
124
|
-
calculateCosineSimilarity(vectorA, vectorB) {
|
|
125
|
-
if (vectorA.length !== vectorB.length) {
|
|
126
|
-
throw new Error(`Vector dimension mismatch: ${vectorA.length} vs ${vectorB.length}`);
|
|
127
|
-
}
|
|
128
|
-
let dotProduct = 0;
|
|
129
|
-
let normA = 0;
|
|
130
|
-
let normB = 0;
|
|
131
|
-
for (let i = 0; i < vectorA.length; i++) {
|
|
132
|
-
dotProduct += vectorA[i] * vectorB[i];
|
|
133
|
-
normA += vectorA[i] * vectorA[i];
|
|
134
|
-
normB += vectorB[i] * vectorB[i];
|
|
135
|
-
}
|
|
136
|
-
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
137
|
-
if (magnitude === 0) {
|
|
138
|
-
return 0; // Handle zero vectors
|
|
139
|
-
}
|
|
140
|
-
return dotProduct / magnitude;
|
|
141
|
-
}
|
|
142
|
-
/**
|
|
143
|
-
* Calculate Euclidean distance between two vectors
|
|
144
|
-
*/
|
|
145
|
-
calculateEuclideanDistance(vectorA, vectorB) {
|
|
146
|
-
if (vectorA.length !== vectorB.length) {
|
|
147
|
-
throw new Error(`Vector dimension mismatch: ${vectorA.length} vs ${vectorB.length}`);
|
|
148
|
-
}
|
|
149
|
-
let sum = 0;
|
|
150
|
-
for (let i = 0; i < vectorA.length; i++) {
|
|
151
|
-
const diff = vectorA[i] - vectorB[i];
|
|
152
|
-
sum += diff * diff;
|
|
153
|
-
}
|
|
154
|
-
return Math.sqrt(sum);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* Normalize a vector to unit length
|
|
158
|
-
*/
|
|
159
|
-
normalizeVector(vector) {
|
|
160
|
-
const magnitude = Math.sqrt(vector.reduce((sum, val) => sum + val * val, 0));
|
|
161
|
-
if (magnitude === 0) {
|
|
162
|
-
return vector; // Return as-is if zero vector
|
|
163
|
-
}
|
|
164
|
-
return vector.map(val => val / magnitude);
|
|
165
|
-
}
|
|
166
|
-
/**
|
|
167
|
-
* Find the most similar vectors to a query vector
|
|
168
|
-
*/
|
|
169
|
-
findMostSimilar(queryVector, candidateVectors, k = 5) {
|
|
170
|
-
const similarities = candidateVectors.map((vector, index) => {
|
|
171
|
-
const similarity = this.calculateCosineSimilarity(queryVector, vector);
|
|
172
|
-
const distance = this.calculateEuclideanDistance(queryVector, vector);
|
|
173
|
-
return { index, similarity, distance };
|
|
174
|
-
});
|
|
175
|
-
// Sort by similarity (highest first)
|
|
176
|
-
similarities.sort((a, b) => b.similarity - a.similarity);
|
|
177
|
-
return similarities.slice(0, k);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Get embedding statistics
|
|
181
|
-
*/
|
|
182
|
-
getStats() {
|
|
183
|
-
const now = Date.now();
|
|
184
|
-
const requestsThisMinute = (now - this.lastReset) < 60000 ? this.requestCount : 0;
|
|
185
|
-
return {
|
|
186
|
-
totalRequests: this.requestCount,
|
|
187
|
-
requestsThisMinute,
|
|
188
|
-
model: this.model,
|
|
189
|
-
dimensions: this.dimensions,
|
|
190
|
-
rateLimit: this.maxRequestsPerMinute,
|
|
191
|
-
};
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Reset rate limiting counters (called automatically every minute)
|
|
195
|
-
*/
|
|
196
|
-
resetRateLimit() {
|
|
197
|
-
const now = Date.now();
|
|
198
|
-
if (now - this.lastReset >= 60000) {
|
|
199
|
-
this.requestCount = 0;
|
|
200
|
-
this.lastReset = now;
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Check rate limiting and wait if necessary
|
|
205
|
-
*/
|
|
206
|
-
async checkRateLimit() {
|
|
207
|
-
this.resetRateLimit();
|
|
208
|
-
if (this.requestCount >= this.maxRequestsPerMinute) {
|
|
209
|
-
const waitTime = 60000 - (Date.now() - this.lastReset);
|
|
210
|
-
if (waitTime > 0) {
|
|
211
|
-
if (process.env.NODE_ENV === 'development') {
|
|
212
|
-
console.warn(`Rate limit reached, waiting ${waitTime}ms`);
|
|
213
|
-
}
|
|
214
|
-
await this.delay(waitTime);
|
|
215
|
-
this.resetRateLimit();
|
|
216
|
-
}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Get appropriate task type for Gemini API
|
|
221
|
-
*/
|
|
222
|
-
getTaskType(type) {
|
|
223
|
-
switch (type) {
|
|
224
|
-
case 'query':
|
|
225
|
-
return 'RETRIEVAL_QUERY';
|
|
226
|
-
case 'content':
|
|
227
|
-
return 'RETRIEVAL_DOCUMENT';
|
|
228
|
-
case 'metadata':
|
|
229
|
-
return 'SEMANTIC_SIMILARITY';
|
|
230
|
-
default:
|
|
231
|
-
return 'RETRIEVAL_DOCUMENT';
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
/**
|
|
235
|
-
* Utility delay function
|
|
236
|
-
*/
|
|
237
|
-
delay(ms) {
|
|
238
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
export default EmbeddingService;
|
|
242
|
-
//# sourceMappingURL=EmbeddingService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../../src/infrastructure/ai/EmbeddingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,84 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GeminiAIService - AI Integration via OpenRouter
|
|
3
|
-
*
|
|
4
|
-
* Provides AI-powered text analysis capabilities using OpenRouter API
|
|
5
|
-
* for entity extraction, relationship identification, and content analysis.
|
|
6
|
-
*
|
|
7
|
-
* Supports any model available on OpenRouter (Google Gemini, OpenAI, Anthropic, etc.)
|
|
8
|
-
*/
|
|
9
|
-
export interface GeminiConfig {
|
|
10
|
-
apiKey: string;
|
|
11
|
-
model?: string;
|
|
12
|
-
temperature?: number;
|
|
13
|
-
maxTokens?: number;
|
|
14
|
-
timeout?: number;
|
|
15
|
-
}
|
|
16
|
-
export interface EntityExtractionRequest {
|
|
17
|
-
content: string;
|
|
18
|
-
context?: string;
|
|
19
|
-
confidenceThreshold?: number;
|
|
20
|
-
}
|
|
21
|
-
export interface EntityExtractionResponse {
|
|
22
|
-
entities: Array<{
|
|
23
|
-
id: string;
|
|
24
|
-
label: string;
|
|
25
|
-
type: string;
|
|
26
|
-
confidence: number;
|
|
27
|
-
properties?: Record<string, any>;
|
|
28
|
-
}>;
|
|
29
|
-
relationships: Array<{
|
|
30
|
-
source: string;
|
|
31
|
-
target: string;
|
|
32
|
-
label: string;
|
|
33
|
-
confidence: number;
|
|
34
|
-
type?: string;
|
|
35
|
-
}>;
|
|
36
|
-
processingTimeMs: number;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* AI service for advanced text analysis and knowledge extraction
|
|
40
|
-
* Uses OpenRouter API for maximum flexibility and model choice
|
|
41
|
-
*/
|
|
42
|
-
export declare class GeminiAIService {
|
|
43
|
-
private readonly apiKey;
|
|
44
|
-
private readonly config;
|
|
45
|
-
constructor(config: GeminiConfig);
|
|
46
|
-
/**
|
|
47
|
-
* Call OpenRouter Chat Completions API
|
|
48
|
-
*/
|
|
49
|
-
private callOpenRouter;
|
|
50
|
-
/**
|
|
51
|
-
* Extract entities and relationships from text using AI
|
|
52
|
-
*/
|
|
53
|
-
extractEntitiesAndRelationships(request: EntityExtractionRequest): Promise<EntityExtractionResponse>;
|
|
54
|
-
/**
|
|
55
|
-
* Extract entities and relationships from multiple texts in batch
|
|
56
|
-
*/
|
|
57
|
-
extractBatch(requests: EntityExtractionRequest[]): Promise<EntityExtractionResponse[]>;
|
|
58
|
-
/**
|
|
59
|
-
* Analyze text content for categorization and sentiment
|
|
60
|
-
*/
|
|
61
|
-
analyzeContent(content: string): Promise<{
|
|
62
|
-
categories: string[];
|
|
63
|
-
sentiment: 'positive' | 'negative' | 'neutral';
|
|
64
|
-
topics: string[];
|
|
65
|
-
confidence: number;
|
|
66
|
-
}>;
|
|
67
|
-
private buildExtractionPrompt;
|
|
68
|
-
private parseExtractionResponse;
|
|
69
|
-
private parseAnalysisResponse;
|
|
70
|
-
private sanitizeId;
|
|
71
|
-
private delay;
|
|
72
|
-
/**
|
|
73
|
-
* Check if the service is properly configured and can make API calls
|
|
74
|
-
*/
|
|
75
|
-
testConnection(): Promise<boolean>;
|
|
76
|
-
/**
|
|
77
|
-
* Get service configuration (without sensitive data)
|
|
78
|
-
*/
|
|
79
|
-
getConfig(): Omit<Required<GeminiConfig>, 'apiKey'> & {
|
|
80
|
-
apiKeyConfigured: boolean;
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
export default GeminiAIService;
|
|
84
|
-
//# sourceMappingURL=GeminiAIService.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiAIService.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ai/GeminiAIService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;KAClC,CAAC,CAAC;IACH,aAAa,EAAE,KAAK,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,MAAM,EAAE,YAAY;IAqBhC;;OAEG;YACW,cAAc;IA+C5B;;OAEG;IACG,+BAA+B,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAsC1G;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,uBAAuB,EAAE,GAAG,OAAO,CAAC,wBAAwB,EAAE,CAAC;IAoB5F;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;QAC7C,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAAC;QAC/C,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IA6BF,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,uBAAuB;IAyD/B,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,KAAK;IAIb;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IASxC;;OAEG;IACH,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,GAAG;QAAE,gBAAgB,EAAE,OAAO,CAAA;KAAE;CASpF;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1,300 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* GeminiAIService - AI Integration via OpenRouter
|
|
3
|
-
*
|
|
4
|
-
* Provides AI-powered text analysis capabilities using OpenRouter API
|
|
5
|
-
* for entity extraction, relationship identification, and content analysis.
|
|
6
|
-
*
|
|
7
|
-
* Supports any model available on OpenRouter (Google Gemini, OpenAI, Anthropic, etc.)
|
|
8
|
-
*/
|
|
9
|
-
/**
|
|
10
|
-
* AI service for advanced text analysis and knowledge extraction
|
|
11
|
-
* Uses OpenRouter API for maximum flexibility and model choice
|
|
12
|
-
*/
|
|
13
|
-
export class GeminiAIService {
|
|
14
|
-
constructor(config) {
|
|
15
|
-
// Resolve API key: prefer OPENROUTER_API_KEY, fallback to provided apiKey
|
|
16
|
-
this.apiKey = process.env.OPENROUTER_API_KEY || config.apiKey;
|
|
17
|
-
if (!this.apiKey) {
|
|
18
|
-
throw new Error('API key is required. Set OPENROUTER_API_KEY environment variable or provide apiKey in config.');
|
|
19
|
-
}
|
|
20
|
-
this.config = {
|
|
21
|
-
model: config.model || process.env.AI_CHAT_MODEL || 'google/gemini-2.5-flash',
|
|
22
|
-
temperature: config.temperature || 0.1,
|
|
23
|
-
maxTokens: config.maxTokens || 4096,
|
|
24
|
-
timeout: config.timeout || 30000,
|
|
25
|
-
apiKey: this.apiKey
|
|
26
|
-
};
|
|
27
|
-
console.log(`✅ GeminiAIService initialized with OpenRouter (${this.config.model})`);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Call OpenRouter Chat Completions API
|
|
31
|
-
*/
|
|
32
|
-
async callOpenRouter(prompt) {
|
|
33
|
-
const controller = new AbortController();
|
|
34
|
-
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
35
|
-
try {
|
|
36
|
-
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
|
|
37
|
-
method: 'POST',
|
|
38
|
-
headers: {
|
|
39
|
-
'Authorization': `Bearer ${this.apiKey}`,
|
|
40
|
-
'Content-Type': 'application/json',
|
|
41
|
-
'HTTP-Referer': 'https://github.com/personal-data-wallet',
|
|
42
|
-
'X-Title': 'Personal Data Wallet SDK'
|
|
43
|
-
},
|
|
44
|
-
body: JSON.stringify({
|
|
45
|
-
model: this.config.model,
|
|
46
|
-
messages: [
|
|
47
|
-
{ role: 'user', content: prompt }
|
|
48
|
-
],
|
|
49
|
-
temperature: this.config.temperature,
|
|
50
|
-
max_tokens: this.config.maxTokens
|
|
51
|
-
}),
|
|
52
|
-
signal: controller.signal
|
|
53
|
-
});
|
|
54
|
-
clearTimeout(timeoutId);
|
|
55
|
-
if (!response.ok) {
|
|
56
|
-
const errorData = await response.text();
|
|
57
|
-
throw new Error(`OpenRouter API error: ${response.status} - ${errorData}`);
|
|
58
|
-
}
|
|
59
|
-
const data = await response.json();
|
|
60
|
-
if (!data.choices || !data.choices[0] || !data.choices[0].message) {
|
|
61
|
-
throw new Error('Invalid response from OpenRouter API');
|
|
62
|
-
}
|
|
63
|
-
return data.choices[0].message.content || '';
|
|
64
|
-
}
|
|
65
|
-
catch (error) {
|
|
66
|
-
clearTimeout(timeoutId);
|
|
67
|
-
if (error instanceof Error && error.name === 'AbortError') {
|
|
68
|
-
throw new Error(`OpenRouter request timed out after ${this.config.timeout}ms`);
|
|
69
|
-
}
|
|
70
|
-
throw error;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Extract entities and relationships from text using AI
|
|
75
|
-
*/
|
|
76
|
-
async extractEntitiesAndRelationships(request) {
|
|
77
|
-
const startTime = Date.now();
|
|
78
|
-
try {
|
|
79
|
-
// Validate input: return empty result for empty/whitespace-only content
|
|
80
|
-
const trimmedContent = request.content?.trim();
|
|
81
|
-
if (!trimmedContent || trimmedContent.length === 0) {
|
|
82
|
-
return {
|
|
83
|
-
entities: [],
|
|
84
|
-
relationships: [],
|
|
85
|
-
processingTimeMs: Date.now() - startTime
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
const prompt = this.buildExtractionPrompt(request.content, request.context);
|
|
89
|
-
const text = await this.callOpenRouter(prompt);
|
|
90
|
-
const parsed = this.parseExtractionResponse(text);
|
|
91
|
-
const processingTimeMs = Date.now() - startTime;
|
|
92
|
-
return {
|
|
93
|
-
entities: parsed.entities,
|
|
94
|
-
relationships: parsed.relationships,
|
|
95
|
-
processingTimeMs
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
catch (error) {
|
|
99
|
-
console.error('AI extraction failed:', error);
|
|
100
|
-
// Return empty result with processing time on error
|
|
101
|
-
return {
|
|
102
|
-
entities: [],
|
|
103
|
-
relationships: [],
|
|
104
|
-
processingTimeMs: Date.now() - startTime
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Extract entities and relationships from multiple texts in batch
|
|
110
|
-
*/
|
|
111
|
-
async extractBatch(requests) {
|
|
112
|
-
const results = [];
|
|
113
|
-
// Process in batches to avoid rate limiting
|
|
114
|
-
const batchSize = 3;
|
|
115
|
-
for (let i = 0; i < requests.length; i += batchSize) {
|
|
116
|
-
const batch = requests.slice(i, i + batchSize);
|
|
117
|
-
const batchPromises = batch.map(request => this.extractEntitiesAndRelationships(request));
|
|
118
|
-
const batchResults = await Promise.all(batchPromises);
|
|
119
|
-
results.push(...batchResults);
|
|
120
|
-
// Small delay between batches to respect rate limits
|
|
121
|
-
if (i + batchSize < requests.length) {
|
|
122
|
-
await this.delay(500);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return results;
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Analyze text content for categorization and sentiment
|
|
129
|
-
*/
|
|
130
|
-
async analyzeContent(content) {
|
|
131
|
-
try {
|
|
132
|
-
const prompt = `
|
|
133
|
-
Analyze the following text and provide a JSON response with:
|
|
134
|
-
- "categories": array of relevant categories (max 3)
|
|
135
|
-
- "sentiment": "positive", "negative", or "neutral"
|
|
136
|
-
- "topics": array of main topics/themes (max 5)
|
|
137
|
-
- "confidence": overall analysis confidence (0.0-1.0)
|
|
138
|
-
|
|
139
|
-
TEXT: ${content}
|
|
140
|
-
|
|
141
|
-
JSON:`;
|
|
142
|
-
const text = await this.callOpenRouter(prompt);
|
|
143
|
-
return this.parseAnalysisResponse(text);
|
|
144
|
-
}
|
|
145
|
-
catch (error) {
|
|
146
|
-
console.error('Content analysis failed:', error);
|
|
147
|
-
return {
|
|
148
|
-
categories: [],
|
|
149
|
-
sentiment: 'neutral',
|
|
150
|
-
topics: [],
|
|
151
|
-
confidence: 0
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// ==================== PRIVATE METHODS ====================
|
|
156
|
-
buildExtractionPrompt(content, context) {
|
|
157
|
-
const contextSection = context ? `\nCONTEXT: ${context}\n` : '';
|
|
158
|
-
return `
|
|
159
|
-
Extract meaningful entities and relationships from the following text. Focus on:
|
|
160
|
-
- People (names, roles, professions)
|
|
161
|
-
- Organizations (companies, institutions, groups)
|
|
162
|
-
- Locations (cities, countries, places)
|
|
163
|
-
- Concepts (technologies, ideas, skills)
|
|
164
|
-
- Events (meetings, projects, activities)
|
|
165
|
-
- Objects (products, tools, resources)
|
|
166
|
-
|
|
167
|
-
Return a valid JSON response with "entities" and "relationships" arrays.
|
|
168
|
-
|
|
169
|
-
For entities:
|
|
170
|
-
- "id": unique identifier using snake_case (e.g., "john_doe", "machine_learning")
|
|
171
|
-
- "label": human-readable name (e.g., "John Doe", "Machine Learning")
|
|
172
|
-
- "type": entity category (person, organization, location, concept, event, object)
|
|
173
|
-
- "confidence": confidence score 0.0-1.0
|
|
174
|
-
- "properties": optional additional attributes
|
|
175
|
-
|
|
176
|
-
For relationships:
|
|
177
|
-
- "source": source entity id
|
|
178
|
-
- "target": target entity id
|
|
179
|
-
- "label": relationship description (e.g., "works_at", "located_in", "uses")
|
|
180
|
-
- "confidence": confidence score 0.0-1.0
|
|
181
|
-
- "type": optional relationship category
|
|
182
|
-
|
|
183
|
-
Only include entities with confidence >= 0.6 and clear, meaningful relationships.
|
|
184
|
-
${contextSection}
|
|
185
|
-
TEXT: ${content}
|
|
186
|
-
|
|
187
|
-
JSON:`;
|
|
188
|
-
}
|
|
189
|
-
parseExtractionResponse(response) {
|
|
190
|
-
try {
|
|
191
|
-
// Clean up the response text (remove markdown formatting if present)
|
|
192
|
-
let cleanResponse = response.trim();
|
|
193
|
-
if (cleanResponse.startsWith('```json')) {
|
|
194
|
-
cleanResponse = cleanResponse.replace(/```json\s*/, '').replace(/```\s*$/, '');
|
|
195
|
-
}
|
|
196
|
-
else if (cleanResponse.startsWith('```')) {
|
|
197
|
-
cleanResponse = cleanResponse.replace(/```\s*/, '').replace(/```\s*$/, '');
|
|
198
|
-
}
|
|
199
|
-
const parsed = JSON.parse(cleanResponse);
|
|
200
|
-
if (!parsed.entities || !Array.isArray(parsed.entities)) {
|
|
201
|
-
throw new Error('Invalid entities format');
|
|
202
|
-
}
|
|
203
|
-
if (!parsed.relationships || !Array.isArray(parsed.relationships)) {
|
|
204
|
-
throw new Error('Invalid relationships format');
|
|
205
|
-
}
|
|
206
|
-
// Validate and sanitize entities
|
|
207
|
-
const entities = parsed.entities
|
|
208
|
-
.filter((e) => e.id && e.label && e.type)
|
|
209
|
-
.map((e) => ({
|
|
210
|
-
id: this.sanitizeId(e.id),
|
|
211
|
-
label: e.label.trim(),
|
|
212
|
-
type: e.type.toLowerCase(),
|
|
213
|
-
confidence: Math.max(0, Math.min(1, e.confidence || 0.7)),
|
|
214
|
-
properties: e.properties || {}
|
|
215
|
-
}));
|
|
216
|
-
// Create entity ID map for relationship validation
|
|
217
|
-
const entityIds = new Set(entities.map((e) => e.id));
|
|
218
|
-
// Validate and sanitize relationships
|
|
219
|
-
const relationships = parsed.relationships
|
|
220
|
-
.filter((r) => r.source && r.target && r.label)
|
|
221
|
-
.filter((r) => entityIds.has(this.sanitizeId(r.source)) && entityIds.has(this.sanitizeId(r.target)))
|
|
222
|
-
.map((r) => ({
|
|
223
|
-
source: this.sanitizeId(r.source),
|
|
224
|
-
target: this.sanitizeId(r.target),
|
|
225
|
-
label: r.label.trim(),
|
|
226
|
-
confidence: Math.max(0, Math.min(1, r.confidence || 0.7)),
|
|
227
|
-
type: r.type || 'general'
|
|
228
|
-
}));
|
|
229
|
-
return { entities, relationships };
|
|
230
|
-
}
|
|
231
|
-
catch (error) {
|
|
232
|
-
// Only log detailed errors in development mode
|
|
233
|
-
if (process.env.NODE_ENV === 'development') {
|
|
234
|
-
console.error('Failed to parse AI response:', error);
|
|
235
|
-
console.error('Raw response:', response);
|
|
236
|
-
}
|
|
237
|
-
return { entities: [], relationships: [] };
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
parseAnalysisResponse(response) {
|
|
241
|
-
try {
|
|
242
|
-
let cleanResponse = response.trim();
|
|
243
|
-
if (cleanResponse.startsWith('```json')) {
|
|
244
|
-
cleanResponse = cleanResponse.replace(/```json\s*/, '').replace(/```\s*$/, '');
|
|
245
|
-
}
|
|
246
|
-
const parsed = JSON.parse(cleanResponse);
|
|
247
|
-
return {
|
|
248
|
-
categories: parsed.categories || [],
|
|
249
|
-
sentiment: parsed.sentiment || 'neutral',
|
|
250
|
-
topics: parsed.topics || [],
|
|
251
|
-
confidence: Math.max(0, Math.min(1, parsed.confidence || 0.5))
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
console.error('Failed to parse analysis response:', error);
|
|
256
|
-
return {
|
|
257
|
-
categories: [],
|
|
258
|
-
sentiment: 'neutral',
|
|
259
|
-
topics: [],
|
|
260
|
-
confidence: 0
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
sanitizeId(id) {
|
|
265
|
-
return id
|
|
266
|
-
.toLowerCase()
|
|
267
|
-
.replace(/[^a-z0-9_]/g, '_')
|
|
268
|
-
.replace(/_+/g, '_')
|
|
269
|
-
.replace(/^_|_$/g, '');
|
|
270
|
-
}
|
|
271
|
-
delay(ms) {
|
|
272
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Check if the service is properly configured and can make API calls
|
|
276
|
-
*/
|
|
277
|
-
async testConnection() {
|
|
278
|
-
try {
|
|
279
|
-
const text = await this.callOpenRouter('Test connection. Respond with only "OK".');
|
|
280
|
-
return text.includes('OK');
|
|
281
|
-
}
|
|
282
|
-
catch {
|
|
283
|
-
return false;
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Get service configuration (without sensitive data)
|
|
288
|
-
*/
|
|
289
|
-
getConfig() {
|
|
290
|
-
return {
|
|
291
|
-
model: this.config.model,
|
|
292
|
-
temperature: this.config.temperature,
|
|
293
|
-
maxTokens: this.config.maxTokens,
|
|
294
|
-
timeout: this.config.timeout,
|
|
295
|
-
apiKeyConfigured: !!this.apiKey
|
|
296
|
-
};
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
export default GeminiAIService;
|
|
300
|
-
//# sourceMappingURL=GeminiAIService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GeminiAIService.js","sourceRoot":"","sources":["../../../src/infrastructure/ai/GeminiAIService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAkCH;;;GAGG;AACH,MAAM,OAAO,eAAe;IAI1B,YAAY,MAAoB;QAC9B,0EAA0E;QAC1E,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,MAAM,CAAC,MAAM,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,GAAG;YACZ,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,yBAAyB;YAC7E,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG;YACtC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,IAAI;YACnC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACtF,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,cAAc,CAAC,MAAc;QACzC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,+CAA+C,EAAE;gBAC5E,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;oBACxC,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,yCAAyC;oBACzD,SAAS,EAAE,0BAA0B;iBACtC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;oBACxB,QAAQ,EAAE;wBACR,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE;qBAClC;oBACD,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;oBACpC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;iBAClC,CAAC;gBACF,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC;YAEH,YAAY,CAAC,SAAS,CAAC,CAAC;YAExB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC1D,MAAM,IAAI,KAAK,CAAC,sCAAsC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,+BAA+B,CAAC,OAAgC;QACpE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,wEAAwE;YACxE,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO;oBACL,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,EAAE;oBACjB,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBACzC,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAEhD,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,aAAa,EAAE,MAAM,CAAC,aAAa;gBACnC,gBAAgB;aACjB,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,CAAC;YAE9C,oDAAoD;YACpD,OAAO;gBACL,QAAQ,EAAE,EAAE;gBACZ,aAAa,EAAE,EAAE;gBACjB,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;aACzC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,QAAmC;QACpD,MAAM,OAAO,GAA+B,EAAE,CAAC;QAE/C,4CAA4C;QAC5C,MAAM,SAAS,GAAG,CAAC,CAAC;QACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACpD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1F,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACtD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAE9B,qDAAqD;YACrD,IAAI,CAAC,GAAG,SAAS,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAMlC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG;;;;;;;QAOb,OAAO;;MAET,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAE1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAED,4DAA4D;IAEpD,qBAAqB,CAAC,OAAe,EAAE,OAAgB;QAC7D,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,cAAc,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BT,cAAc;QACR,OAAO;;MAET,CAAC;IACL,CAAC;IAEO,uBAAuB,CAAC,QAAgB;QAC9C,IAAI,CAAC;YACH,qEAAqE;YACrE,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC3C,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC7E,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEzC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxD,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,iCAAiC;YACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ;iBAC7B,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,CAAC;iBAC7C,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChB,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;gBACrB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;gBACzD,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;aAC/B,CAAC,CAAC,CAAC;YAEN,mDAAmD;YACnD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAE1D,sCAAsC;YACtC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa;iBACvC,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC;iBACnD,MAAM,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBACxG,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;gBAChB,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBACjC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;gBACjC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE;gBACrB,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;gBACzD,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;aAC1B,CAAC,CAAC,CAAC;YAEN,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;QAErC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;gBAC3C,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;gBACrD,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YAC3C,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC;QAC7C,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAAgB;QAC5C,IAAI,CAAC;YACH,IAAI,aAAa,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,IAAI,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxC,aAAa,GAAG,aAAa,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACjF,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAEzC,OAAO;gBACL,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,EAAE;gBACnC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;gBACxC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;gBAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC;aAC/D,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;YAC3D,OAAO;gBACL,UAAU,EAAE,EAAE;gBACd,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,EAAU;QAC3B,OAAO,EAAE;aACN,WAAW,EAAE;aACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;aAC3B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;aACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IAEO,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,0CAA0C,CAAC,CAAC;YACnF,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAChC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,OAAO;YAC5B,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;SAChC,CAAC;IACJ,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/ai/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
|