@timmeck/brain-core 2.36.4 → 2.36.5
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/dist/curiosity/curiosity-engine.d.ts +5 -0
- package/dist/curiosity/curiosity-engine.js +29 -0
- package/dist/curiosity/curiosity-engine.js.map +1 -1
- package/dist/debate/debate-engine.d.ts +5 -0
- package/dist/debate/debate-engine.js +54 -3
- package/dist/debate/debate-engine.js.map +1 -1
- package/dist/hypothesis/engine.d.ts +11 -2
- package/dist/hypothesis/engine.js +69 -3
- package/dist/hypothesis/engine.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/llm/__tests__/llm-service.test.d.ts +1 -0
- package/dist/llm/__tests__/llm-service.test.js +366 -0
- package/dist/llm/__tests__/llm-service.test.js.map +1 -0
- package/dist/llm/index.d.ts +2 -0
- package/dist/llm/index.js +2 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm-service.d.ts +97 -0
- package/dist/llm/llm-service.js +323 -0
- package/dist/llm/llm-service.js.map +1 -0
- package/dist/narrative/narrative-engine.d.ts +13 -0
- package/dist/narrative/narrative-engine.js +127 -37
- package/dist/narrative/narrative-engine.js.map +1 -1
- package/dist/research/research-orchestrator.d.ts +6 -0
- package/dist/research/research-orchestrator.js +12 -0
- package/dist/research/research-orchestrator.js.map +1 -1
- package/dist/unified/unified-server.d.ts +4 -0
- package/dist/unified/unified-server.js +26 -0
- package/dist/unified/unified-server.js.map +1 -1
- package/package.json +1 -1
- package/unified-dashboard.html +120 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-service.test.js","sourceRoot":"","sources":["../../../src/llm/__tests__/llm-service.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llm/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface LLMServiceConfig {
|
|
3
|
+
/** Anthropic API key. Falls back to ANTHROPIC_API_KEY env var. */
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
/** Model to use. Default: claude-sonnet-4-20250514 */
|
|
6
|
+
model?: string;
|
|
7
|
+
/** Max tokens per request. Default: 2048 */
|
|
8
|
+
maxTokens?: number;
|
|
9
|
+
/** Max API calls per hour. Default: 30 */
|
|
10
|
+
maxCallsPerHour?: number;
|
|
11
|
+
/** Max tokens per hour budget. Default: 100_000 */
|
|
12
|
+
tokenBudgetPerHour?: number;
|
|
13
|
+
/** Max tokens per day budget. Default: 500_000 */
|
|
14
|
+
tokenBudgetPerDay?: number;
|
|
15
|
+
/** Cache TTL in ms. Default: 3_600_000 (1 hour) */
|
|
16
|
+
cacheTtlMs?: number;
|
|
17
|
+
/** Max cache entries. Default: 500 */
|
|
18
|
+
maxCacheEntries?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface LLMResponse {
|
|
21
|
+
text: string;
|
|
22
|
+
tokensUsed: number;
|
|
23
|
+
inputTokens: number;
|
|
24
|
+
outputTokens: number;
|
|
25
|
+
cached: boolean;
|
|
26
|
+
model: string;
|
|
27
|
+
durationMs: number;
|
|
28
|
+
}
|
|
29
|
+
export interface LLMUsageStats {
|
|
30
|
+
totalCalls: number;
|
|
31
|
+
totalTokens: number;
|
|
32
|
+
cacheHits: number;
|
|
33
|
+
cacheMisses: number;
|
|
34
|
+
cacheHitRate: number;
|
|
35
|
+
callsThisHour: number;
|
|
36
|
+
tokensThisHour: number;
|
|
37
|
+
tokensToday: number;
|
|
38
|
+
budgetRemainingHour: number;
|
|
39
|
+
budgetRemainingDay: number;
|
|
40
|
+
averageLatencyMs: number;
|
|
41
|
+
rateLimitHits: number;
|
|
42
|
+
errors: number;
|
|
43
|
+
lastCallAt: number | null;
|
|
44
|
+
model: string;
|
|
45
|
+
}
|
|
46
|
+
export type PromptTemplate = 'explain' | 'ask' | 'synthesize_debate' | 'creative_hypothesis' | 'research_question' | 'summarize' | 'analyze_contradiction' | 'custom';
|
|
47
|
+
export declare function runLLMServiceMigration(db: Database.Database): void;
|
|
48
|
+
export declare class LLMService {
|
|
49
|
+
private db;
|
|
50
|
+
private readonly apiKey;
|
|
51
|
+
private readonly model;
|
|
52
|
+
private readonly maxTokens;
|
|
53
|
+
private readonly maxCallsPerHour;
|
|
54
|
+
private readonly tokenBudgetPerHour;
|
|
55
|
+
private readonly tokenBudgetPerDay;
|
|
56
|
+
private readonly cacheTtlMs;
|
|
57
|
+
private readonly maxCacheEntries;
|
|
58
|
+
private readonly log;
|
|
59
|
+
private cache;
|
|
60
|
+
private callHistory;
|
|
61
|
+
private stats;
|
|
62
|
+
private stmtInsertUsage;
|
|
63
|
+
constructor(db: Database.Database, config?: LLMServiceConfig);
|
|
64
|
+
/** Check if LLM is available (API key set). */
|
|
65
|
+
isAvailable(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Main entry point: call Claude with a template + context.
|
|
68
|
+
* Returns null if budget exhausted or API key not set (caller should fallback to heuristic).
|
|
69
|
+
*/
|
|
70
|
+
call(template: PromptTemplate, userMessage: string, options?: {
|
|
71
|
+
maxTokens?: number;
|
|
72
|
+
temperature?: number;
|
|
73
|
+
}): Promise<LLMResponse | null>;
|
|
74
|
+
/** Get usage statistics. */
|
|
75
|
+
getStats(): LLMUsageStats;
|
|
76
|
+
/** Get usage history from DB (for dashboard). */
|
|
77
|
+
getUsageHistory(hours?: number): Array<{
|
|
78
|
+
hour: string;
|
|
79
|
+
calls: number;
|
|
80
|
+
tokens: number;
|
|
81
|
+
cached: number;
|
|
82
|
+
}>;
|
|
83
|
+
/** Get usage breakdown by template. */
|
|
84
|
+
getUsageByTemplate(): Array<{
|
|
85
|
+
template: string;
|
|
86
|
+
calls: number;
|
|
87
|
+
tokens: number;
|
|
88
|
+
avg_tokens: number;
|
|
89
|
+
}>;
|
|
90
|
+
private checkRateLimit;
|
|
91
|
+
private checkTokenBudget;
|
|
92
|
+
private getCacheKey;
|
|
93
|
+
private getFromCache;
|
|
94
|
+
private setCache;
|
|
95
|
+
private pruneCallHistory;
|
|
96
|
+
private recordUsage;
|
|
97
|
+
}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { getLogger } from '../utils/logger.js';
|
|
3
|
+
// ── Migration ───────────────────────────────────────────
|
|
4
|
+
export function runLLMServiceMigration(db) {
|
|
5
|
+
db.exec(`
|
|
6
|
+
CREATE TABLE IF NOT EXISTS llm_usage (
|
|
7
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
8
|
+
prompt_hash TEXT NOT NULL,
|
|
9
|
+
template TEXT NOT NULL,
|
|
10
|
+
model TEXT NOT NULL,
|
|
11
|
+
input_tokens INTEGER NOT NULL DEFAULT 0,
|
|
12
|
+
output_tokens INTEGER NOT NULL DEFAULT 0,
|
|
13
|
+
total_tokens INTEGER NOT NULL DEFAULT 0,
|
|
14
|
+
duration_ms INTEGER NOT NULL DEFAULT 0,
|
|
15
|
+
cached INTEGER NOT NULL DEFAULT 0,
|
|
16
|
+
created_at TEXT DEFAULT (datetime('now'))
|
|
17
|
+
);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS idx_llm_usage_created ON llm_usage(created_at);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS idx_llm_usage_template ON llm_usage(template);
|
|
20
|
+
`);
|
|
21
|
+
}
|
|
22
|
+
// ── Prompt Templates ────────────────────────────────────
|
|
23
|
+
const SYSTEM_PROMPTS = {
|
|
24
|
+
explain: `You are an analytical AI research assistant embedded in an autonomous Brain system.
|
|
25
|
+
Your task is to explain a topic based on the provided knowledge base (principles, hypotheses, experiments, journal entries).
|
|
26
|
+
Be concise, insightful, and synthesize across sources. Highlight confidence levels and knowledge gaps.
|
|
27
|
+
Output a coherent narrative explanation (2-4 paragraphs). Do not use markdown headers.`,
|
|
28
|
+
ask: `You are an analytical AI research assistant embedded in an autonomous Brain system.
|
|
29
|
+
Answer the user's question based ONLY on the provided knowledge context.
|
|
30
|
+
If the context doesn't contain enough information, say so honestly.
|
|
31
|
+
Be direct and precise. Cite which sources (principle, hypothesis, experiment, journal) support your answer.`,
|
|
32
|
+
synthesize_debate: `You are a debate synthesizer in an autonomous Brain system.
|
|
33
|
+
Multiple perspectives on a question have been gathered from different knowledge domains.
|
|
34
|
+
Your job is to:
|
|
35
|
+
1. Identify points of agreement across perspectives
|
|
36
|
+
2. Identify genuine conflicts and explain why they exist
|
|
37
|
+
3. Propose a nuanced synthesis that respects all evidence
|
|
38
|
+
4. Make clear recommendations based on the weight of evidence
|
|
39
|
+
Be balanced and analytical. Output a structured synthesis.`,
|
|
40
|
+
creative_hypothesis: `You are a creative research hypothesis generator in an autonomous Brain system.
|
|
41
|
+
Given the current knowledge base (confirmed principles, existing hypotheses, anomalies, patterns),
|
|
42
|
+
generate novel, testable hypotheses that push the boundaries of current understanding.
|
|
43
|
+
Each hypothesis should:
|
|
44
|
+
- Be specific and falsifiable
|
|
45
|
+
- Connect to existing evidence
|
|
46
|
+
- Explore non-obvious relationships
|
|
47
|
+
- Include what variables to track
|
|
48
|
+
Output exactly the requested number of hypotheses in JSON format.`,
|
|
49
|
+
research_question: `You are a research question generator in an autonomous Brain system.
|
|
50
|
+
Given knowledge gaps and topics of interest, generate precise, actionable research questions.
|
|
51
|
+
Questions should be specific enough to guide investigation and lead to measurable outcomes.
|
|
52
|
+
Consider what data or experiments could answer each question.`,
|
|
53
|
+
summarize: `You are a summarizer in an autonomous Brain system.
|
|
54
|
+
Condense the provided information into a clear, concise summary.
|
|
55
|
+
Preserve key insights, numbers, and conclusions. Remove redundancy.`,
|
|
56
|
+
analyze_contradiction: `You are a contradiction analyzer in an autonomous Brain system.
|
|
57
|
+
Two pieces of knowledge appear to conflict. Analyze:
|
|
58
|
+
1. Are they truly contradictory, or is the conflict apparent?
|
|
59
|
+
2. What context or conditions might make both true?
|
|
60
|
+
3. What evidence favors each side?
|
|
61
|
+
4. What experiment or data could resolve the contradiction?`,
|
|
62
|
+
custom: `You are an AI research assistant embedded in an autonomous Brain system.
|
|
63
|
+
Follow the user's instructions precisely.`,
|
|
64
|
+
};
|
|
65
|
+
// ── Service ─────────────────────────────────────────────
|
|
66
|
+
export class LLMService {
|
|
67
|
+
db;
|
|
68
|
+
apiKey;
|
|
69
|
+
model;
|
|
70
|
+
maxTokens;
|
|
71
|
+
maxCallsPerHour;
|
|
72
|
+
tokenBudgetPerHour;
|
|
73
|
+
tokenBudgetPerDay;
|
|
74
|
+
cacheTtlMs;
|
|
75
|
+
maxCacheEntries;
|
|
76
|
+
log = getLogger();
|
|
77
|
+
// In-memory state
|
|
78
|
+
cache = new Map();
|
|
79
|
+
callHistory = [];
|
|
80
|
+
stats = {
|
|
81
|
+
totalCalls: 0,
|
|
82
|
+
totalTokens: 0,
|
|
83
|
+
cacheHits: 0,
|
|
84
|
+
cacheMisses: 0,
|
|
85
|
+
rateLimitHits: 0,
|
|
86
|
+
errors: 0,
|
|
87
|
+
totalLatencyMs: 0,
|
|
88
|
+
lastCallAt: null,
|
|
89
|
+
};
|
|
90
|
+
// Prepared statements (lazy-initialized)
|
|
91
|
+
stmtInsertUsage = null;
|
|
92
|
+
constructor(db, config = {}) {
|
|
93
|
+
this.db = db;
|
|
94
|
+
this.apiKey = config.apiKey ?? process.env.ANTHROPIC_API_KEY ?? null;
|
|
95
|
+
this.model = config.model ?? 'claude-sonnet-4-20250514';
|
|
96
|
+
this.maxTokens = config.maxTokens ?? 2048;
|
|
97
|
+
this.maxCallsPerHour = config.maxCallsPerHour ?? 30;
|
|
98
|
+
this.tokenBudgetPerHour = config.tokenBudgetPerHour ?? 100_000;
|
|
99
|
+
this.tokenBudgetPerDay = config.tokenBudgetPerDay ?? 500_000;
|
|
100
|
+
this.cacheTtlMs = config.cacheTtlMs ?? 3_600_000;
|
|
101
|
+
this.maxCacheEntries = config.maxCacheEntries ?? 500;
|
|
102
|
+
runLLMServiceMigration(db);
|
|
103
|
+
this.stmtInsertUsage = db.prepare('INSERT INTO llm_usage (prompt_hash, template, model, input_tokens, output_tokens, total_tokens, duration_ms, cached) VALUES (?, ?, ?, ?, ?, ?, ?, ?)');
|
|
104
|
+
this.log.debug(`[LLMService] Initialized (model=${this.model}, apiKey=${this.apiKey ? 'set' : 'NOT SET'}, budget=${this.tokenBudgetPerHour}/h)`);
|
|
105
|
+
}
|
|
106
|
+
/** Check if LLM is available (API key set). */
|
|
107
|
+
isAvailable() {
|
|
108
|
+
return this.apiKey !== null && this.apiKey.length > 0;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Main entry point: call Claude with a template + context.
|
|
112
|
+
* Returns null if budget exhausted or API key not set (caller should fallback to heuristic).
|
|
113
|
+
*/
|
|
114
|
+
async call(template, userMessage, options) {
|
|
115
|
+
if (!this.isAvailable())
|
|
116
|
+
return null;
|
|
117
|
+
// Check rate limit
|
|
118
|
+
if (!this.checkRateLimit()) {
|
|
119
|
+
this.stats.rateLimitHits++;
|
|
120
|
+
this.log.debug('[LLMService] Rate limit reached, falling back to heuristic');
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
// Check token budget
|
|
124
|
+
if (!this.checkTokenBudget()) {
|
|
125
|
+
this.stats.rateLimitHits++;
|
|
126
|
+
this.log.debug('[LLMService] Token budget exhausted, falling back to heuristic');
|
|
127
|
+
return null;
|
|
128
|
+
}
|
|
129
|
+
// Check cache
|
|
130
|
+
const cacheKey = this.getCacheKey(template, userMessage);
|
|
131
|
+
const cached = this.getFromCache(cacheKey);
|
|
132
|
+
if (cached) {
|
|
133
|
+
this.stats.cacheHits++;
|
|
134
|
+
this.recordUsage(cacheKey, template, cached, true);
|
|
135
|
+
return { ...cached, cached: true };
|
|
136
|
+
}
|
|
137
|
+
this.stats.cacheMisses++;
|
|
138
|
+
// Make API call
|
|
139
|
+
const systemPrompt = SYSTEM_PROMPTS[template];
|
|
140
|
+
const start = Date.now();
|
|
141
|
+
try {
|
|
142
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
143
|
+
method: 'POST',
|
|
144
|
+
headers: {
|
|
145
|
+
'Content-Type': 'application/json',
|
|
146
|
+
'x-api-key': this.apiKey,
|
|
147
|
+
'anthropic-version': '2023-06-01',
|
|
148
|
+
},
|
|
149
|
+
body: JSON.stringify({
|
|
150
|
+
model: this.model,
|
|
151
|
+
max_tokens: options?.maxTokens ?? this.maxTokens,
|
|
152
|
+
...(options?.temperature !== undefined ? { temperature: options.temperature } : {}),
|
|
153
|
+
system: systemPrompt,
|
|
154
|
+
messages: [{ role: 'user', content: userMessage }],
|
|
155
|
+
}),
|
|
156
|
+
});
|
|
157
|
+
const durationMs = Date.now() - start;
|
|
158
|
+
if (!response.ok) {
|
|
159
|
+
const errText = await response.text();
|
|
160
|
+
this.stats.errors++;
|
|
161
|
+
this.log.warn(`[LLMService] API error (${response.status}): ${errText.substring(0, 200)}`);
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
const data = await response.json();
|
|
165
|
+
const text = data.content
|
|
166
|
+
?.filter(c => c.type === 'text')
|
|
167
|
+
.map(c => c.text ?? '')
|
|
168
|
+
.join('\n') ?? '';
|
|
169
|
+
const inputTokens = data.usage?.input_tokens ?? 0;
|
|
170
|
+
const outputTokens = data.usage?.output_tokens ?? 0;
|
|
171
|
+
const totalTokens = inputTokens + outputTokens;
|
|
172
|
+
const result = {
|
|
173
|
+
text,
|
|
174
|
+
tokensUsed: totalTokens,
|
|
175
|
+
inputTokens,
|
|
176
|
+
outputTokens,
|
|
177
|
+
cached: false,
|
|
178
|
+
model: this.model,
|
|
179
|
+
durationMs,
|
|
180
|
+
};
|
|
181
|
+
// Update stats
|
|
182
|
+
this.stats.totalCalls++;
|
|
183
|
+
this.stats.totalTokens += totalTokens;
|
|
184
|
+
this.stats.totalLatencyMs += durationMs;
|
|
185
|
+
this.stats.lastCallAt = Date.now();
|
|
186
|
+
this.callHistory.push({ timestamp: Date.now(), tokens: totalTokens });
|
|
187
|
+
// Cache the response
|
|
188
|
+
this.setCache(cacheKey, result);
|
|
189
|
+
// Record to DB
|
|
190
|
+
this.recordUsage(cacheKey, template, result, false);
|
|
191
|
+
this.log.debug(`[LLMService] ${template}: ${totalTokens} tokens, ${durationMs}ms`);
|
|
192
|
+
return result;
|
|
193
|
+
}
|
|
194
|
+
catch (err) {
|
|
195
|
+
this.stats.errors++;
|
|
196
|
+
this.log.warn(`[LLMService] Call failed: ${err.message}`);
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
/** Get usage statistics. */
|
|
201
|
+
getStats() {
|
|
202
|
+
const now = Date.now();
|
|
203
|
+
const oneHourAgo = now - 3_600_000;
|
|
204
|
+
const oneDayAgo = now - 86_400_000;
|
|
205
|
+
this.pruneCallHistory();
|
|
206
|
+
const callsThisHour = this.callHistory.filter(c => c.timestamp > oneHourAgo).length;
|
|
207
|
+
const tokensThisHour = this.callHistory.filter(c => c.timestamp > oneHourAgo).reduce((s, c) => s + c.tokens, 0);
|
|
208
|
+
const tokensToday = this.callHistory.filter(c => c.timestamp > oneDayAgo).reduce((s, c) => s + c.tokens, 0);
|
|
209
|
+
return {
|
|
210
|
+
totalCalls: this.stats.totalCalls,
|
|
211
|
+
totalTokens: this.stats.totalTokens,
|
|
212
|
+
cacheHits: this.stats.cacheHits,
|
|
213
|
+
cacheMisses: this.stats.cacheMisses,
|
|
214
|
+
cacheHitRate: (this.stats.cacheHits + this.stats.cacheMisses) > 0
|
|
215
|
+
? this.stats.cacheHits / (this.stats.cacheHits + this.stats.cacheMisses)
|
|
216
|
+
: 0,
|
|
217
|
+
callsThisHour,
|
|
218
|
+
tokensThisHour,
|
|
219
|
+
tokensToday,
|
|
220
|
+
budgetRemainingHour: Math.max(0, this.tokenBudgetPerHour - tokensThisHour),
|
|
221
|
+
budgetRemainingDay: Math.max(0, this.tokenBudgetPerDay - tokensToday),
|
|
222
|
+
averageLatencyMs: this.stats.totalCalls > 0 ? this.stats.totalLatencyMs / this.stats.totalCalls : 0,
|
|
223
|
+
rateLimitHits: this.stats.rateLimitHits,
|
|
224
|
+
errors: this.stats.errors,
|
|
225
|
+
lastCallAt: this.stats.lastCallAt,
|
|
226
|
+
model: this.model,
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
/** Get usage history from DB (for dashboard). */
|
|
230
|
+
getUsageHistory(hours = 24) {
|
|
231
|
+
try {
|
|
232
|
+
return this.db.prepare(`
|
|
233
|
+
SELECT strftime('%Y-%m-%d %H:00', created_at) as hour,
|
|
234
|
+
COUNT(*) as calls,
|
|
235
|
+
SUM(total_tokens) as tokens,
|
|
236
|
+
SUM(cached) as cached
|
|
237
|
+
FROM llm_usage
|
|
238
|
+
WHERE created_at > datetime('now', '-' || ? || ' hours')
|
|
239
|
+
GROUP BY hour
|
|
240
|
+
ORDER BY hour DESC
|
|
241
|
+
`).all(hours);
|
|
242
|
+
}
|
|
243
|
+
catch {
|
|
244
|
+
return [];
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
/** Get usage breakdown by template. */
|
|
248
|
+
getUsageByTemplate() {
|
|
249
|
+
try {
|
|
250
|
+
return this.db.prepare(`
|
|
251
|
+
SELECT template,
|
|
252
|
+
COUNT(*) as calls,
|
|
253
|
+
SUM(total_tokens) as tokens,
|
|
254
|
+
AVG(total_tokens) as avg_tokens
|
|
255
|
+
FROM llm_usage
|
|
256
|
+
WHERE cached = 0
|
|
257
|
+
GROUP BY template
|
|
258
|
+
ORDER BY tokens DESC
|
|
259
|
+
`).all();
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
return [];
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// ── Private Helpers ────────────────────────────────────
|
|
266
|
+
checkRateLimit() {
|
|
267
|
+
const oneHourAgo = Date.now() - 3_600_000;
|
|
268
|
+
this.pruneCallHistory();
|
|
269
|
+
const recentCalls = this.callHistory.filter(c => c.timestamp > oneHourAgo).length;
|
|
270
|
+
return recentCalls < this.maxCallsPerHour;
|
|
271
|
+
}
|
|
272
|
+
checkTokenBudget() {
|
|
273
|
+
const now = Date.now();
|
|
274
|
+
const oneHourAgo = now - 3_600_000;
|
|
275
|
+
const oneDayAgo = now - 86_400_000;
|
|
276
|
+
const tokensThisHour = this.callHistory.filter(c => c.timestamp > oneHourAgo).reduce((s, c) => s + c.tokens, 0);
|
|
277
|
+
if (tokensThisHour >= this.tokenBudgetPerHour)
|
|
278
|
+
return false;
|
|
279
|
+
const tokensToday = this.callHistory.filter(c => c.timestamp > oneDayAgo).reduce((s, c) => s + c.tokens, 0);
|
|
280
|
+
if (tokensToday >= this.tokenBudgetPerDay)
|
|
281
|
+
return false;
|
|
282
|
+
return true;
|
|
283
|
+
}
|
|
284
|
+
getCacheKey(template, userMessage) {
|
|
285
|
+
const input = `${template}:${this.model}:${userMessage}`;
|
|
286
|
+
return createHash('sha256').update(input).digest('hex');
|
|
287
|
+
}
|
|
288
|
+
getFromCache(key) {
|
|
289
|
+
const entry = this.cache.get(key);
|
|
290
|
+
if (!entry)
|
|
291
|
+
return null;
|
|
292
|
+
if (Date.now() > entry.expiresAt) {
|
|
293
|
+
this.cache.delete(key);
|
|
294
|
+
return null;
|
|
295
|
+
}
|
|
296
|
+
return entry.response;
|
|
297
|
+
}
|
|
298
|
+
setCache(key, response) {
|
|
299
|
+
// Evict oldest entries if cache is full
|
|
300
|
+
if (this.cache.size >= this.maxCacheEntries) {
|
|
301
|
+
const firstKey = this.cache.keys().next().value;
|
|
302
|
+
if (firstKey)
|
|
303
|
+
this.cache.delete(firstKey);
|
|
304
|
+
}
|
|
305
|
+
this.cache.set(key, {
|
|
306
|
+
response,
|
|
307
|
+
expiresAt: Date.now() + this.cacheTtlMs,
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
pruneCallHistory() {
|
|
311
|
+
const oneDayAgo = Date.now() - 86_400_000;
|
|
312
|
+
this.callHistory = this.callHistory.filter(c => c.timestamp > oneDayAgo);
|
|
313
|
+
}
|
|
314
|
+
recordUsage(hash, template, response, cached) {
|
|
315
|
+
try {
|
|
316
|
+
this.stmtInsertUsage?.run(hash, template, response.model, response.inputTokens, response.outputTokens, response.tokensUsed, response.durationMs, cached ? 1 : 0);
|
|
317
|
+
}
|
|
318
|
+
catch {
|
|
319
|
+
// Best effort — don't crash on DB error
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=llm-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-service.js","sourceRoot":"","sources":["../../src/llm/llm-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import type { ExperimentEngine } from '../research/experiment-engine.js';
|
|
|
8
8
|
import type { AnomalyDetective } from '../research/anomaly-detective.js';
|
|
9
9
|
import type { AttentionEngine } from '../attention/attention-engine.js';
|
|
10
10
|
import type { TransferEngine } from '../transfer/transfer-engine.js';
|
|
11
|
+
import type { LLMService } from '../llm/llm-service.js';
|
|
11
12
|
export interface NarrativeEngineConfig {
|
|
12
13
|
brainName: string;
|
|
13
14
|
}
|
|
@@ -87,12 +88,24 @@ export declare class NarrativeEngine {
|
|
|
87
88
|
private brainName;
|
|
88
89
|
private thoughtStream;
|
|
89
90
|
private sources;
|
|
91
|
+
private llm;
|
|
90
92
|
private log;
|
|
91
93
|
constructor(db: Database.Database, config: NarrativeEngineConfig);
|
|
92
94
|
setThoughtStream(stream: ThoughtStream): void;
|
|
93
95
|
setDataSources(sources: NarrativeEngineDataSources): void;
|
|
96
|
+
setLLMService(llm: LLMService): void;
|
|
94
97
|
explain(topic: string): Narrative;
|
|
98
|
+
/** Async version of explain() that waits for LLM response. */
|
|
99
|
+
explainAsync(topic: string): Promise<Narrative>;
|
|
100
|
+
private heuristicExplainSummary;
|
|
101
|
+
private gatherContext;
|
|
102
|
+
/** Try to get LLM response from cache synchronously (fire-and-forget for warming). */
|
|
103
|
+
private tryLLMSync;
|
|
104
|
+
private hashPrompt;
|
|
95
105
|
ask(question: string): NarrativeAnswer;
|
|
106
|
+
/** Async version of ask() that waits for LLM response. */
|
|
107
|
+
askAsync(question: string): Promise<NarrativeAnswer>;
|
|
108
|
+
private gatherAskContext;
|
|
96
109
|
findContradictions(): Contradiction[];
|
|
97
110
|
generateDigest(days?: number): WeeklyDigest;
|
|
98
111
|
getConfidenceReport(topic?: string): ConfidenceReport;
|