@ninebix/nmt-system 1.0.4 → 2.0.0
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/README.md +30 -22
- package/dashboard-lite/index.html +458 -0
- package/dist/bin/nmt.js +225 -6
- package/dist/bin/nmt.js.map +1 -1
- package/dist/src/api/cli-server.d.ts.map +1 -1
- package/dist/src/api/cli-server.js +327 -30
- package/dist/src/api/cli-server.js.map +1 -1
- package/dist/src/cli/commands/db.d.ts +33 -0
- package/dist/src/cli/commands/db.d.ts.map +1 -0
- package/dist/src/cli/commands/db.js +197 -0
- package/dist/src/cli/commands/db.js.map +1 -0
- package/dist/src/cli/commands/infer.d.ts.map +1 -1
- package/dist/src/cli/commands/infer.js +8 -2
- package/dist/src/cli/commands/infer.js.map +1 -1
- package/dist/src/cli/commands/learn.d.ts.map +1 -1
- package/dist/src/cli/commands/learn.js +25 -1
- package/dist/src/cli/commands/learn.js.map +1 -1
- package/dist/src/cli/commands/sync.d.ts +14 -0
- package/dist/src/cli/commands/sync.d.ts.map +1 -1
- package/dist/src/cli/commands/sync.js +12 -7
- package/dist/src/cli/commands/sync.js.map +1 -1
- package/dist/src/connectors/index.d.ts +11 -0
- package/dist/src/connectors/index.d.ts.map +1 -0
- package/dist/src/connectors/index.js +24 -0
- package/dist/src/connectors/index.js.map +1 -0
- package/dist/src/connectors/mongodb-connector.d.ts +29 -0
- package/dist/src/connectors/mongodb-connector.d.ts.map +1 -0
- package/dist/src/connectors/mongodb-connector.js +286 -0
- package/dist/src/connectors/mongodb-connector.js.map +1 -0
- package/dist/src/connectors/mysql-connector.d.ts +29 -0
- package/dist/src/connectors/mysql-connector.d.ts.map +1 -0
- package/dist/src/connectors/mysql-connector.js +357 -0
- package/dist/src/connectors/mysql-connector.js.map +1 -0
- package/dist/src/connectors/types.d.ts +174 -0
- package/dist/src/connectors/types.d.ts.map +1 -0
- package/dist/src/connectors/types.js +6 -0
- package/dist/src/connectors/types.js.map +1 -0
- package/dist/src/core/attractor-model.d.ts +6 -2
- package/dist/src/core/attractor-model.d.ts.map +1 -1
- package/dist/src/core/attractor-model.js +260 -16
- package/dist/src/core/attractor-model.js.map +1 -1
- package/dist/src/core/hnsw-index.d.ts.map +1 -1
- package/dist/src/core/hnsw-index.js +16 -9
- package/dist/src/core/hnsw-index.js.map +1 -1
- package/dist/src/core/neuron-graph.d.ts +130 -1
- package/dist/src/core/neuron-graph.d.ts.map +1 -1
- package/dist/src/core/neuron-graph.js +299 -1
- package/dist/src/core/neuron-graph.js.map +1 -1
- package/dist/src/core/probabilistic-neuron.d.ts.map +1 -1
- package/dist/src/core/probabilistic-neuron.js +24 -4
- package/dist/src/core/probabilistic-neuron.js.map +1 -1
- package/dist/src/core/probabilistic-orchestrator.d.ts.map +1 -1
- package/dist/src/core/probabilistic-orchestrator.js +17 -13
- package/dist/src/core/probabilistic-orchestrator.js.map +1 -1
- package/dist/src/extensions/clustering/index.d.ts +0 -7
- package/dist/src/extensions/clustering/index.d.ts.map +1 -1
- package/dist/src/extensions/clustering/index.js.map +1 -1
- package/dist/src/mcp/server.js +4 -0
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/services/db-bridge.d.ts +46 -0
- package/dist/src/services/db-bridge.d.ts.map +1 -0
- package/dist/src/services/db-bridge.js +524 -0
- package/dist/src/services/db-bridge.js.map +1 -0
- package/dist/src/services/embedding-provider.d.ts +11 -1
- package/dist/src/services/embedding-provider.d.ts.map +1 -1
- package/dist/src/services/embedding-provider.js +78 -21
- package/dist/src/services/embedding-provider.js.map +1 -1
- package/dist/src/services/four-stage-learning.d.ts.map +1 -1
- package/dist/src/services/four-stage-learning.js +20 -9
- package/dist/src/services/four-stage-learning.js.map +1 -1
- package/dist/src/services/ingestion.d.ts +20 -1
- package/dist/src/services/ingestion.d.ts.map +1 -1
- package/dist/src/services/ingestion.js +92 -62
- package/dist/src/services/ingestion.js.map +1 -1
- package/dist/src/services/query.d.ts +57 -3
- package/dist/src/services/query.d.ts.map +1 -1
- package/dist/src/services/query.js +264 -42
- package/dist/src/services/query.js.map +1 -1
- package/dist/src/services/text-embedding.d.ts +1 -1
- package/dist/src/services/text-embedding.d.ts.map +1 -1
- package/dist/src/services/text-embedding.js +62 -3
- package/dist/src/services/text-embedding.js.map +1 -1
- package/dist/src/storage/neuron-store.d.ts +12 -1
- package/dist/src/storage/neuron-store.d.ts.map +1 -1
- package/dist/src/storage/neuron-store.js +12 -1
- package/dist/src/storage/neuron-store.js.map +1 -1
- package/dist/src/sync/change-journal.d.ts.map +1 -1
- package/dist/src/sync/change-journal.js +63 -37
- package/dist/src/sync/change-journal.js.map +1 -1
- package/dist/src/sync/state-sync.d.ts +5 -0
- package/dist/src/sync/state-sync.d.ts.map +1 -1
- package/dist/src/sync/state-sync.js +9 -2
- package/dist/src/sync/state-sync.js.map +1 -1
- package/dist/src/types/index.d.ts +73 -3
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/index.js +7 -0
- package/dist/src/types/index.js.map +1 -1
- package/dist/src/utils/hash.d.ts.map +1 -1
- package/dist/src/utils/hash.js +3 -3
- package/dist/src/utils/hash.js.map +1 -1
- package/package.json +5 -1
|
@@ -5,38 +5,7 @@
|
|
|
5
5
|
import { ChunkEngine } from '../core/chunk-engine.js';
|
|
6
6
|
import { generateUUID } from '../utils/uuid.js';
|
|
7
7
|
import { now } from '../utils/index.js';
|
|
8
|
-
|
|
9
|
-
* Default embedding provider (placeholder - returns random embeddings)
|
|
10
|
-
*/
|
|
11
|
-
class DefaultEmbeddingProvider {
|
|
12
|
-
async embed(text) {
|
|
13
|
-
// Generate deterministic pseudo-random embedding from text
|
|
14
|
-
const embedding = new Float32Array(384);
|
|
15
|
-
let hash = 0;
|
|
16
|
-
for (let i = 0; i < text.length; i++) {
|
|
17
|
-
hash = ((hash << 5) - hash) + text.charCodeAt(i);
|
|
18
|
-
hash |= 0;
|
|
19
|
-
}
|
|
20
|
-
for (let i = 0; i < 384; i++) {
|
|
21
|
-
hash = ((hash << 5) - hash) + i;
|
|
22
|
-
hash |= 0;
|
|
23
|
-
embedding[i] = (hash % 1000) / 1000 - 0.5;
|
|
24
|
-
}
|
|
25
|
-
// Normalize
|
|
26
|
-
let norm = 0;
|
|
27
|
-
for (let i = 0; i < 384; i++) {
|
|
28
|
-
norm += embedding[i] * embedding[i];
|
|
29
|
-
}
|
|
30
|
-
norm = Math.sqrt(norm);
|
|
31
|
-
for (let i = 0; i < 384; i++) {
|
|
32
|
-
embedding[i] /= norm;
|
|
33
|
-
}
|
|
34
|
-
return embedding;
|
|
35
|
-
}
|
|
36
|
-
async embedBatch(texts) {
|
|
37
|
-
return Promise.all(texts.map(t => this.embed(t)));
|
|
38
|
-
}
|
|
39
|
-
}
|
|
8
|
+
import { DeterministicEmbeddingProvider } from './embedding-provider.js';
|
|
40
9
|
/**
|
|
41
10
|
* Ingestion Service
|
|
42
11
|
*/
|
|
@@ -52,7 +21,7 @@ export class IngestionService {
|
|
|
52
21
|
this.merkleEngine = merkleEngine;
|
|
53
22
|
this.graphManager = graphManager;
|
|
54
23
|
this.chunkStore = chunkStore;
|
|
55
|
-
this.embeddingProvider = embeddingProvider ?? new
|
|
24
|
+
this.embeddingProvider = embeddingProvider ?? new DeterministicEmbeddingProvider();
|
|
56
25
|
this.jobs = new Map();
|
|
57
26
|
}
|
|
58
27
|
/**
|
|
@@ -79,32 +48,54 @@ export class IngestionService {
|
|
|
79
48
|
this.jobs.set(jobId, job);
|
|
80
49
|
try {
|
|
81
50
|
job.status = 'RUNNING';
|
|
82
|
-
//
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
51
|
+
// ── Step 1: Generate embedding first (required for dedup check) ──────
|
|
52
|
+
const text = data.toString('utf-8');
|
|
53
|
+
const embedding = await this.embeddingProvider.embed(text);
|
|
54
|
+
job.progress = 30;
|
|
55
|
+
// ── Step 2: Semantic deduplication check ─────────────────────────────
|
|
56
|
+
// Default threshold: 0.95 (near-exact semantic duplicates only).
|
|
57
|
+
// Set deduplicationThreshold: 0 in options to skip.
|
|
58
|
+
const dedupThreshold = options.deduplicationThreshold ?? 0.95;
|
|
59
|
+
if (dedupThreshold > 0) {
|
|
60
|
+
const duplicate = await this.graphManager.findDuplicate(embedding, dedupThreshold);
|
|
61
|
+
if (duplicate) {
|
|
62
|
+
// Merge any new tags into the existing neuron
|
|
63
|
+
if (options.tags?.length) {
|
|
64
|
+
await this.graphManager.mergeTags(duplicate.id, options.tags);
|
|
65
|
+
}
|
|
66
|
+
job.neuronId = duplicate.id;
|
|
67
|
+
job.status = 'COMPLETED';
|
|
68
|
+
job.progress = 100;
|
|
69
|
+
job.completedAt = now();
|
|
70
|
+
return duplicate;
|
|
71
|
+
}
|
|
88
72
|
}
|
|
89
|
-
//
|
|
90
|
-
|
|
73
|
+
// ── Step 3: No duplicate — chunk and store ───────────────────────────
|
|
74
|
+
// CDC auto-detection: enable for files ≥ 32 KB.
|
|
75
|
+
// Content-defined boundaries produce stable chunk hashes across
|
|
76
|
+
// document versions, enabling cross-document byte dedup in ChunkStore.
|
|
77
|
+
// Fixed chunking is retained for small files (lower overhead, typically
|
|
78
|
+
// produces a single chunk anyway).
|
|
79
|
+
const CDC_AUTO_THRESHOLD = 32 * 1024; // 32 KB
|
|
80
|
+
const useCDC = options.useCDC ?? (data.length >= CDC_AUTO_THRESHOLD);
|
|
81
|
+
// Create a per-call engine so concurrent ingests don't race on this.chunkEngine
|
|
82
|
+
const chunkEngine = new ChunkEngine({
|
|
83
|
+
useCDC,
|
|
84
|
+
chunkSize: options.chunkSize
|
|
85
|
+
});
|
|
86
|
+
const chunks = chunkEngine.chunk(data);
|
|
91
87
|
job.totalChunks = chunks.length;
|
|
92
|
-
// Store chunks
|
|
93
88
|
for (const chunk of chunks) {
|
|
94
89
|
await this.chunkStore.put(chunk);
|
|
95
90
|
job.processedChunks++;
|
|
96
|
-
job.progress = (job.processedChunks / job.totalChunks) *
|
|
91
|
+
job.progress = 30 + (job.processedChunks / job.totalChunks) * 40;
|
|
97
92
|
}
|
|
98
|
-
// Build Merkle tree
|
|
93
|
+
// ── Step 4: Build Merkle tree ─────────────────────────────────────────
|
|
99
94
|
const chunkHashes = chunks.map(c => c.hash);
|
|
100
95
|
const merkleTree = this.merkleEngine.buildTree(chunkHashes);
|
|
101
96
|
job.merkleRoot = merkleTree.root;
|
|
102
|
-
job.progress = 60;
|
|
103
|
-
// Generate embedding from text content
|
|
104
|
-
const text = data.toString('utf-8');
|
|
105
|
-
const embedding = await this.embeddingProvider.embed(text);
|
|
106
97
|
job.progress = 80;
|
|
107
|
-
// Create neuron
|
|
98
|
+
// ── Step 5: Create neuron ─────────────────────────────────────────────
|
|
108
99
|
const neuron = await this.graphManager.createNeuron({
|
|
109
100
|
embedding,
|
|
110
101
|
chunkHashes,
|
|
@@ -112,7 +103,18 @@ export class IngestionService {
|
|
|
112
103
|
sourceType: options.sourceType ?? 'text',
|
|
113
104
|
tags: options.tags,
|
|
114
105
|
autoConnect: options.autoConnect,
|
|
115
|
-
connectionThreshold: options.connectionThreshold
|
|
106
|
+
connectionThreshold: options.connectionThreshold,
|
|
107
|
+
sourceRow: options.sourceRow,
|
|
108
|
+
sourceColumns: options.sourceColumns,
|
|
109
|
+
sourceForeignKeys: options.sourceForeignKeys,
|
|
110
|
+
sourceIndexes: options.sourceIndexes,
|
|
111
|
+
sourceChecks: options.sourceChecks,
|
|
112
|
+
sourceTriggers: options.sourceTriggers,
|
|
113
|
+
sourceTable: options.sourceTable,
|
|
114
|
+
sourceEngine: options.sourceEngine,
|
|
115
|
+
sourceCharset: options.sourceCharset,
|
|
116
|
+
sourcePath: options.sourcePath,
|
|
117
|
+
sourceName: options.sourceName,
|
|
116
118
|
});
|
|
117
119
|
job.neuronId = neuron.id;
|
|
118
120
|
job.status = 'COMPLETED';
|
|
@@ -170,7 +172,7 @@ export class IngestionService {
|
|
|
170
172
|
if (!job || job.status !== 'RUNNING') {
|
|
171
173
|
return false;
|
|
172
174
|
}
|
|
173
|
-
job.status = '
|
|
175
|
+
job.status = 'CANCELLED';
|
|
174
176
|
job.error = 'Cancelled by user';
|
|
175
177
|
job.completedAt = now();
|
|
176
178
|
return true;
|
|
@@ -208,27 +210,44 @@ export class IngestionService {
|
|
|
208
210
|
const job = this.jobs.get(jobId);
|
|
209
211
|
try {
|
|
210
212
|
job.status = 'RUNNING';
|
|
211
|
-
//
|
|
212
|
-
const
|
|
213
|
+
// ── Step 1: Embedding first ───────────────────────────────────────────
|
|
214
|
+
const text = data.toString('utf-8');
|
|
215
|
+
const embedding = await this.embeddingProvider.embed(text);
|
|
216
|
+
job.progress = 30;
|
|
217
|
+
// ── Step 2: Semantic deduplication check ─────────────────────────────
|
|
218
|
+
const dedupThreshold = options.deduplicationThreshold ?? 0.95;
|
|
219
|
+
if (dedupThreshold > 0) {
|
|
220
|
+
const duplicate = await this.graphManager.findDuplicate(embedding, dedupThreshold);
|
|
221
|
+
if (duplicate) {
|
|
222
|
+
if (options.tags?.length) {
|
|
223
|
+
await this.graphManager.mergeTags(duplicate.id, options.tags);
|
|
224
|
+
}
|
|
225
|
+
job.neuronId = duplicate.id;
|
|
226
|
+
job.status = 'COMPLETED';
|
|
227
|
+
job.progress = 100;
|
|
228
|
+
job.completedAt = now();
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
// ── Step 3: Chunk and store ───────────────────────────────────────────
|
|
233
|
+
const CDC_AUTO_THRESHOLD = 32 * 1024;
|
|
234
|
+
const useCDC = options.useCDC ?? (data.length >= CDC_AUTO_THRESHOLD);
|
|
235
|
+
const chunkEngine = new ChunkEngine({ useCDC, chunkSize: options.chunkSize });
|
|
236
|
+
const chunks = chunkEngine.chunk(data);
|
|
213
237
|
job.totalChunks = chunks.length;
|
|
214
|
-
// Store chunks
|
|
215
238
|
for (const chunk of chunks) {
|
|
216
239
|
if (job.status !== 'RUNNING')
|
|
217
240
|
return; // Check for cancellation
|
|
218
241
|
await this.chunkStore.put(chunk);
|
|
219
242
|
job.processedChunks++;
|
|
220
|
-
job.progress = (job.processedChunks / job.totalChunks) *
|
|
243
|
+
job.progress = 30 + (job.processedChunks / job.totalChunks) * 40;
|
|
221
244
|
}
|
|
222
|
-
//
|
|
245
|
+
// ── Step 4: Merkle tree ───────────────────────────────────────────────
|
|
223
246
|
const chunkHashes = chunks.map(c => c.hash);
|
|
224
247
|
const merkleTree = this.merkleEngine.buildTree(chunkHashes);
|
|
225
248
|
job.merkleRoot = merkleTree.root;
|
|
226
|
-
job.progress = 60;
|
|
227
|
-
// Generate embedding
|
|
228
|
-
const text = data.toString('utf-8');
|
|
229
|
-
const embedding = await this.embeddingProvider.embed(text);
|
|
230
249
|
job.progress = 80;
|
|
231
|
-
// Create neuron
|
|
250
|
+
// ── Step 5: Create neuron ─────────────────────────────────────────────
|
|
232
251
|
const neuron = await this.graphManager.createNeuron({
|
|
233
252
|
embedding,
|
|
234
253
|
chunkHashes,
|
|
@@ -236,7 +255,18 @@ export class IngestionService {
|
|
|
236
255
|
sourceType: options.sourceType ?? 'text',
|
|
237
256
|
tags: options.tags,
|
|
238
257
|
autoConnect: options.autoConnect,
|
|
239
|
-
connectionThreshold: options.connectionThreshold
|
|
258
|
+
connectionThreshold: options.connectionThreshold,
|
|
259
|
+
sourceRow: options.sourceRow,
|
|
260
|
+
sourceColumns: options.sourceColumns,
|
|
261
|
+
sourceForeignKeys: options.sourceForeignKeys,
|
|
262
|
+
sourceIndexes: options.sourceIndexes,
|
|
263
|
+
sourceChecks: options.sourceChecks,
|
|
264
|
+
sourceTriggers: options.sourceTriggers,
|
|
265
|
+
sourceTable: options.sourceTable,
|
|
266
|
+
sourceEngine: options.sourceEngine,
|
|
267
|
+
sourceCharset: options.sourceCharset,
|
|
268
|
+
sourcePath: options.sourcePath,
|
|
269
|
+
sourceName: options.sourceName,
|
|
240
270
|
});
|
|
241
271
|
job.neuronId = neuron.id;
|
|
242
272
|
job.status = 'COMPLETED';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../../src/services/ingestion.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../../src/services/ingestion.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,15 +41,47 @@ export declare class QueryService {
|
|
|
41
41
|
private chunkStore;
|
|
42
42
|
private neuronStore;
|
|
43
43
|
private embeddingProvider;
|
|
44
|
+
private workingMemory;
|
|
45
|
+
private episodeBuffer;
|
|
46
|
+
private readonly MAX_EPISODES;
|
|
47
|
+
private dopamineLevel;
|
|
48
|
+
private readonly DOPAMINE_DECAY;
|
|
49
|
+
private readonly DOPAMINE_RISE;
|
|
50
|
+
private readonly DOPAMINE_DROP;
|
|
44
51
|
constructor(graphManager: NeuronGraphManager, merkleEngine: MerkleEngine, chunkStore: IChunkStore, neuronStore: INeuronStore, embeddingProvider?: QueryEmbeddingProvider);
|
|
52
|
+
/** Current working memory contents (newest last) */
|
|
53
|
+
getWorkingMemory(): UUID[];
|
|
54
|
+
/** Clear working memory (e.g., on topic change) */
|
|
55
|
+
clearWorkingMemory(): void;
|
|
56
|
+
/** Current dopamine level (0–1) */
|
|
57
|
+
getDopamineLevel(): number;
|
|
58
|
+
/** Update working memory with newly accessed neurons (LRU eviction) */
|
|
59
|
+
private updateWorkingMemory;
|
|
60
|
+
/** Compute max synapse weight from working memory to a candidate neuron */
|
|
61
|
+
private workingMemoryBoost;
|
|
45
62
|
/**
|
|
46
|
-
*
|
|
63
|
+
* Compute a simple TF-normalized keyword overlap score between query and content.
|
|
64
|
+
* Returns a value in [0, 1] where 1 means all query terms appear frequently.
|
|
65
|
+
*/
|
|
66
|
+
private computeKeywordScore;
|
|
67
|
+
/**
|
|
68
|
+
* Search by text query with optional hybrid keyword reranking
|
|
47
69
|
*/
|
|
48
70
|
search(query: string, options?: SearchOptions): Promise<QueryResult[]>;
|
|
49
71
|
/**
|
|
50
|
-
* Search by embedding vector
|
|
72
|
+
* Search by embedding vector with optional hybrid reranking.
|
|
73
|
+
*
|
|
74
|
+
* Pipeline:
|
|
75
|
+
* 1. Pattern completion (Hopfield refinement) — if index has >1 node
|
|
76
|
+
* 2. HNSW semantic search
|
|
77
|
+
* 3. BM25 keyword hybrid reranking
|
|
78
|
+
* 4. Synapse-weight boost (Hebbian signal)
|
|
79
|
+
* 5. Inhibitory penalty
|
|
80
|
+
* 6. Working memory context boost
|
|
81
|
+
* 7. Fire-and-forget: Hebbian reinforce + inhibit + episode encode
|
|
82
|
+
* 8. Update working memory + decay dopamine
|
|
51
83
|
*/
|
|
52
|
-
searchByEmbedding(embedding: Embedding384, options?: SearchOptions): Promise<QueryResult[]>;
|
|
84
|
+
searchByEmbedding(embedding: Embedding384, options?: SearchOptions, queryText?: string): Promise<QueryResult[]>;
|
|
53
85
|
/**
|
|
54
86
|
* Search by neuron ID (find similar)
|
|
55
87
|
*/
|
|
@@ -94,6 +126,28 @@ export declare class QueryService {
|
|
|
94
126
|
* Set embedding provider
|
|
95
127
|
*/
|
|
96
128
|
setEmbeddingProvider(provider: QueryEmbeddingProvider): void;
|
|
129
|
+
/**
|
|
130
|
+
* Online embedding learning — adjust a neuron's embedding vector based on
|
|
131
|
+
* user relevance feedback.
|
|
132
|
+
*
|
|
133
|
+
* Biological analogy: Long-Term Potentiation (LTP) / Long-Term Depression (LTD).
|
|
134
|
+
* Positive feedback moves the neuron toward the query, negative moves it away.
|
|
135
|
+
*
|
|
136
|
+
* Formula: new_emb = L2_normalize(emb + α * direction * (query_emb - emb))
|
|
137
|
+
* direction = +1 for relevant, -1 for irrelevant
|
|
138
|
+
* α (learning rate) = 0.01 (small step — prevents catastrophic forgetting)
|
|
139
|
+
*
|
|
140
|
+
* @param neuronId Target neuron to adjust
|
|
141
|
+
* @param query The query text that elicited the feedback
|
|
142
|
+
* @param relevant true → neuron should rank higher for this query
|
|
143
|
+
* false → neuron should rank lower
|
|
144
|
+
*/
|
|
145
|
+
recordFeedback(neuronId: UUID, query: string, relevant: boolean): Promise<{
|
|
146
|
+
neuronId: UUID;
|
|
147
|
+
embeddingDrift: number;
|
|
148
|
+
feedbackCount: number;
|
|
149
|
+
dopamineLevel: number;
|
|
150
|
+
}>;
|
|
97
151
|
}
|
|
98
152
|
/**
|
|
99
153
|
* Create a QueryService instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/services/query.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,UAAU,EAGV,WAAW,EACX,WAAW,EACX,YAAY,EACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../src/services/query.ts"],"names":[],"mappings":"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"}
|