0xkobold 0.7.2 → 0.8.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/HEARTBEAT.md +239 -0
- package/IDENTITY.md +12 -0
- package/README.md +138 -4
- package/SOUL.md +21 -0
- package/dist/package.json +10 -5
- package/dist/src/agent/bootstrap-loader.js +295 -66
- package/dist/src/agent/bootstrap-loader.js.map +1 -1
- package/dist/src/agent/context-pruning.js +10 -5
- package/dist/src/agent/context-pruning.js.map +1 -1
- package/dist/src/agent/embedded-runner.js +29 -15
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/agent/index.js +5 -2
- package/dist/src/agent/index.js.map +1 -1
- package/dist/src/agent/system-prompt.js +167 -20
- package/dist/src/agent/system-prompt.js.map +1 -1
- package/dist/src/agent/tools/spawn-agent.js +72 -5
- package/dist/src/agent/tools/spawn-agent.js.map +1 -1
- package/dist/src/channels/slack/webhook.js +2 -2
- package/dist/src/channels/slack/webhook.js.map +1 -1
- package/dist/src/channels/telegram/bot.js +4 -4
- package/dist/src/channels/telegram/bot.js.map +1 -1
- package/dist/src/channels/whatsapp/integration.js +4 -4
- package/dist/src/channels/whatsapp/integration.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +9 -10
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/init.js +90 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/setup.js +53 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/index.js +0 -0
- package/dist/src/config/unified-config.js +5 -0
- package/dist/src/config/unified-config.js.map +1 -1
- package/dist/src/cron/index.js +2 -0
- package/dist/src/cron/index.js.map +1 -1
- package/dist/src/cron/nl-parser.js +522 -0
- package/dist/src/cron/nl-parser.js.map +1 -0
- package/dist/src/cron/runner.js +6 -31
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
- package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
- package/dist/src/extensions/core/diagnostics-extension.js +93 -56
- package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
- package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
- package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
- package/dist/src/extensions/core/heartbeat-extension.js +416 -150
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
- package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
- package/dist/src/extensions/core/learning-extension.js.map +1 -0
- package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
- package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +25 -2
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
- package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
- package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/extensions/loader.js +5 -1
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/gateway/gateway-server.js +74 -3
- package/dist/src/gateway/gateway-server.js.map +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/methods/agent.js +1 -1
- package/dist/src/gateway/methods/agent.js.map +1 -1
- package/dist/src/gateway/methods/index.js +4 -0
- package/dist/src/gateway/methods/index.js.map +1 -1
- package/dist/src/gateway/methods/node.js +261 -0
- package/dist/src/gateway/methods/node.js.map +1 -0
- package/dist/src/gateway/queue-modes.js +356 -0
- package/dist/src/gateway/queue-modes.js.map +1 -0
- package/dist/src/index.js +47 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/community-analytics.js +569 -0
- package/dist/src/llm/community-analytics.js.map +1 -0
- package/dist/src/llm/index.js +28 -4
- package/dist/src/llm/index.js.map +1 -1
- package/dist/src/llm/model-discovery.js +335 -0
- package/dist/src/llm/model-discovery.js.map +1 -0
- package/dist/src/llm/model-popularity.js +566 -0
- package/dist/src/llm/model-popularity.js.map +1 -0
- package/dist/src/llm/model-scoring-db.js +553 -0
- package/dist/src/llm/model-scoring-db.js.map +1 -0
- package/dist/src/llm/multi-provider.js +258 -0
- package/dist/src/llm/multi-provider.js.map +1 -0
- package/dist/src/llm/ollama.js +133 -187
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/router-commands.js +773 -0
- package/dist/src/llm/router-commands.js.map +1 -0
- package/dist/src/llm/router-core.js +600 -0
- package/dist/src/llm/router-core.js.map +1 -0
- package/dist/src/memory/checkpoint-manager.js +278 -0
- package/dist/src/memory/checkpoint-manager.js.map +1 -0
- package/dist/src/memory/conflict-detector.js +279 -0
- package/dist/src/memory/conflict-detector.js.map +1 -0
- package/dist/src/memory/context-graph.js +360 -0
- package/dist/src/memory/context-graph.js.map +1 -0
- package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
- package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
- package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
- package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/index.js +135 -0
- package/dist/src/memory/dialectic/index.js.map +1 -0
- package/dist/src/memory/dialectic/nudges.js +380 -0
- package/dist/src/memory/dialectic/nudges.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
- package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning.js +390 -0
- package/dist/src/memory/dialectic/reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/skill-creation.js +481 -0
- package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
- package/dist/src/memory/dialectic/store.js +663 -0
- package/dist/src/memory/dialectic/store.js.map +1 -0
- package/dist/src/memory/dialectic/types.js +11 -0
- package/dist/src/memory/dialectic/types.js.map +1 -0
- package/dist/src/memory/index.js +24 -2
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/memory-decay.js +350 -0
- package/dist/src/memory/memory-decay.js.map +1 -0
- package/dist/src/memory/memory-integration.js +5 -5
- package/dist/src/memory/memory-integration.js.map +1 -1
- package/dist/src/memory/migrate-memory-stream.js +97 -0
- package/dist/src/memory/migrate-memory-stream.js.map +1 -0
- package/dist/src/memory/session-memory-bridge.js +49 -5
- package/dist/src/memory/session-memory-bridge.js.map +1 -1
- package/dist/src/memory/session-store.js +123 -0
- package/dist/src/memory/session-store.js.map +1 -1
- package/dist/src/memory/smart-write-rules.js +164 -0
- package/dist/src/memory/smart-write-rules.js.map +1 -0
- package/dist/src/memory/tiered-memory.js +436 -0
- package/dist/src/memory/tiered-memory.js.map +1 -0
- package/dist/src/memory/types.js +6 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/memory/verify-migration.js +99 -0
- package/dist/src/memory/verify-migration.js.map +1 -0
- package/dist/src/pi-config.js +11 -9
- package/dist/src/pi-config.js.map +1 -1
- package/dist/src/skills/conditional-skills.js +464 -0
- package/dist/src/skills/conditional-skills.js.map +1 -0
- package/dist/src/skills/index.js +5 -0
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/skills/loader.js +56 -0
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/skills/skill-manage.js +417 -0
- package/dist/src/skills/skill-manage.js.map +1 -0
- package/dist/src/tui/commands/orchestration-commands.js +62 -0
- package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
- package/package.json +10 -5
- package/skills/model-router-test.ts +65 -0
- package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
- package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
- package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
- package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard.js +0 -223
- package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
- package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
- package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
- package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
- package/dist/src/llm/router.js +0 -145
- package/dist/src/llm/router.js.map +0 -1
- package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
- package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
- package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
- package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
- package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
- package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
- package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
- package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
- package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
- package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
- package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
- package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
- package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
- package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
- package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
- package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
- package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
- package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
- package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
- package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
- package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
- package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
- package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
- package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
- package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
- package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
- package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
- package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
- package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
- package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
- package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
- package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
- package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
- package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
- package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
- package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
- package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
- package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
- package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
- package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
- package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
- package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
- package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
- package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
- package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
- package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
- package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
- package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
- package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
- package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
- package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
- package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
- package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
- package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
- package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
- package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
- package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
- package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
- package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
- package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
- package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
- package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
- package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
- package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
- package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
- package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
- package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
- package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
- package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
- package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
- package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/wrappy/wrappy.js +0 -33
|
@@ -0,0 +1,553 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Scoring Database - Persistent Model Performance Tracking
|
|
3
|
+
*
|
|
4
|
+
* Stores and retrieves model performance data for adaptive routing.
|
|
5
|
+
* Enables long-term learning and AI-generated tier lists.
|
|
6
|
+
*
|
|
7
|
+
* Database: ~/.0xkobold/model-scoring.db
|
|
8
|
+
*/
|
|
9
|
+
import { Database } from 'bun:sqlite';
|
|
10
|
+
import { homedir } from 'os';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { mkdirSync, existsSync } from 'fs';
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Database Schema
|
|
15
|
+
// ============================================================================
|
|
16
|
+
const DB_PATH = join(homedir(), '.0xkobold', 'model-scoring.db');
|
|
17
|
+
const SCHEMA = `
|
|
18
|
+
-- Individual performance records
|
|
19
|
+
CREATE TABLE IF NOT EXISTS performance_history (
|
|
20
|
+
id TEXT PRIMARY KEY,
|
|
21
|
+
model_name TEXT NOT NULL,
|
|
22
|
+
task_type TEXT DEFAULT 'chat',
|
|
23
|
+
complexity TEXT DEFAULT 'medium',
|
|
24
|
+
latency_ms INTEGER DEFAULT 0,
|
|
25
|
+
input_tokens INTEGER DEFAULT 0,
|
|
26
|
+
output_tokens INTEGER DEFAULT 0,
|
|
27
|
+
timestamp INTEGER NOT NULL,
|
|
28
|
+
user_rating INTEGER,
|
|
29
|
+
success INTEGER DEFAULT 1,
|
|
30
|
+
session_id TEXT
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_perf_model ON performance_history(model_name);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_perf_time ON performance_history(timestamp);
|
|
35
|
+
CREATE INDEX IF NOT EXISTS idx_perf_task ON performance_history(task_type);
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_perf_session ON performance_history(session_id);
|
|
37
|
+
|
|
38
|
+
-- Aggregated scores (updated periodically)
|
|
39
|
+
CREATE TABLE IF NOT EXISTS model_scores (
|
|
40
|
+
model_name TEXT PRIMARY KEY,
|
|
41
|
+
avg_latency REAL DEFAULT 0,
|
|
42
|
+
avg_quality REAL DEFAULT 0,
|
|
43
|
+
usage_count INTEGER DEFAULT 0,
|
|
44
|
+
success_rate REAL DEFAULT 0,
|
|
45
|
+
score REAL DEFAULT 0,
|
|
46
|
+
last_used INTEGER,
|
|
47
|
+
last_updated INTEGER
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
-- Task-specific performance
|
|
51
|
+
CREATE TABLE IF NOT EXISTS task_performance (
|
|
52
|
+
id TEXT PRIMARY KEY,
|
|
53
|
+
model_name TEXT NOT NULL,
|
|
54
|
+
task_type TEXT NOT NULL,
|
|
55
|
+
avg_latency REAL DEFAULT 0,
|
|
56
|
+
avg_quality REAL DEFAULT 0,
|
|
57
|
+
usage_count INTEGER DEFAULT 0,
|
|
58
|
+
success_rate REAL DEFAULT 0,
|
|
59
|
+
score REAL DEFAULT 0,
|
|
60
|
+
last_updated INTEGER,
|
|
61
|
+
UNIQUE(model_name, task_type)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
CREATE INDEX IF NOT EXISTS idx_task_perf_model ON task_performance(model_name);
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_task_perf_type ON task_performance(task_type);
|
|
66
|
+
|
|
67
|
+
-- User feedback history
|
|
68
|
+
CREATE TABLE IF NOT EXISTS user_feedback (
|
|
69
|
+
id TEXT PRIMARY KEY,
|
|
70
|
+
model_name TEXT NOT NULL,
|
|
71
|
+
rating INTEGER NOT NULL,
|
|
72
|
+
task_type TEXT,
|
|
73
|
+
context TEXT,
|
|
74
|
+
timestamp INTEGER NOT NULL
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_model ON user_feedback(model_name);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_feedback_time ON user_feedback(timestamp);
|
|
79
|
+
|
|
80
|
+
-- Tier list snapshots (AI-generated)
|
|
81
|
+
CREATE TABLE IF NOT EXISTS tier_lists (
|
|
82
|
+
id TEXT PRIMARY KEY,
|
|
83
|
+
generated_at INTEGER NOT NULL,
|
|
84
|
+
period TEXT NOT NULL,
|
|
85
|
+
tiers TEXT NOT NULL, -- JSON array of ModelTier
|
|
86
|
+
summary TEXT,
|
|
87
|
+
total_samples INTEGER DEFAULT 0
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_tier_time ON tier_lists(generated_at);
|
|
91
|
+
`;
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// Model Scoring Database Class
|
|
94
|
+
// ============================================================================
|
|
95
|
+
class ModelScoringDB {
|
|
96
|
+
db;
|
|
97
|
+
initialized = false;
|
|
98
|
+
constructor(dbPath = DB_PATH) {
|
|
99
|
+
const dir = join(homedir(), '.0xkobold');
|
|
100
|
+
if (!existsSync(dir)) {
|
|
101
|
+
mkdirSync(dir, { recursive: true });
|
|
102
|
+
}
|
|
103
|
+
this.db = new Database(dbPath);
|
|
104
|
+
this.db.exec("PRAGMA journal_mode = WAL;");
|
|
105
|
+
this.db.exec("PRAGMA synchronous = NORMAL;");
|
|
106
|
+
this.initialize();
|
|
107
|
+
}
|
|
108
|
+
initialize() {
|
|
109
|
+
this.db.exec(SCHEMA);
|
|
110
|
+
this.initialized = true;
|
|
111
|
+
console.log('[ModelScoringDB] Initialized');
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Performance Recording
|
|
115
|
+
// ============================================================================
|
|
116
|
+
recordPerformance(perf) {
|
|
117
|
+
const id = `perf-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
118
|
+
this.db.query(`
|
|
119
|
+
INSERT INTO performance_history (
|
|
120
|
+
id, model_name, task_type, complexity, latency_ms,
|
|
121
|
+
input_tokens, output_tokens, timestamp, user_rating, success, session_id
|
|
122
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
123
|
+
`).run(id, perf.modelName, perf.taskType, perf.complexity, perf.latencyMs, perf.inputTokens, perf.outputTokens, perf.timestamp || Date.now(), perf.userRating ?? null, perf.success ? 1 : 0, perf.sessionId ?? null);
|
|
124
|
+
// Update aggregated scores asynchronously
|
|
125
|
+
this.updateModelScore(perf.modelName);
|
|
126
|
+
return id;
|
|
127
|
+
}
|
|
128
|
+
addFeedback(modelName, rating, taskType, context) {
|
|
129
|
+
const id = `fb-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
130
|
+
this.db.query(`
|
|
131
|
+
INSERT INTO user_feedback (id, model_name, rating, task_type, context, timestamp)
|
|
132
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
133
|
+
`).run(id, modelName, rating, taskType ?? null, context ?? null, Date.now());
|
|
134
|
+
// Update quality score
|
|
135
|
+
this.updateModelScore(modelName);
|
|
136
|
+
return id;
|
|
137
|
+
}
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// Aggregated Scores
|
|
140
|
+
// ============================================================================
|
|
141
|
+
updateModelScore(modelName) {
|
|
142
|
+
// Calculate aggregated metrics
|
|
143
|
+
const stats = this.db.query(`
|
|
144
|
+
SELECT
|
|
145
|
+
AVG(latency_ms) as avg_latency,
|
|
146
|
+
AVG(CASE WHEN user_rating IS NOT NULL THEN user_rating ELSE NULL END) as avg_quality,
|
|
147
|
+
COUNT(*) as usage_count,
|
|
148
|
+
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as success_rate,
|
|
149
|
+
MAX(timestamp) as last_used
|
|
150
|
+
FROM performance_history
|
|
151
|
+
WHERE model_name = ?
|
|
152
|
+
`).get(modelName);
|
|
153
|
+
// Calculate overall score
|
|
154
|
+
const avgRating = stats?.avg_quality ?? 3;
|
|
155
|
+
const avgLatency = stats?.avg_latency ?? 0;
|
|
156
|
+
const successRate = stats?.success_rate ?? 0.5;
|
|
157
|
+
const usageCount = stats?.usage_count ?? 0;
|
|
158
|
+
// Score formula: 40% quality + 30% success rate + 20% speed + 10% reliability
|
|
159
|
+
const normalizedLatency = avgLatency > 0 ? Math.max(0, 1 - (avgLatency / 10000)) : 0.5;
|
|
160
|
+
const qualityScore = avgRating / 5;
|
|
161
|
+
const score = qualityScore * 0.40 +
|
|
162
|
+
successRate * 0.30 +
|
|
163
|
+
normalizedLatency * 0.20 +
|
|
164
|
+
Math.min(usageCount / 100, 1) * 0.10;
|
|
165
|
+
// Upsert to model_scores
|
|
166
|
+
this.db.query(`
|
|
167
|
+
INSERT INTO model_scores (
|
|
168
|
+
model_name, avg_latency, avg_quality, usage_count, success_rate, score, last_used, last_updated
|
|
169
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
170
|
+
ON CONFLICT(model_name) DO UPDATE SET
|
|
171
|
+
avg_latency = excluded.avg_latency,
|
|
172
|
+
avg_quality = excluded.avg_quality,
|
|
173
|
+
usage_count = excluded.usage_count,
|
|
174
|
+
success_rate = excluded.success_rate,
|
|
175
|
+
score = excluded.score,
|
|
176
|
+
last_used = excluded.last_used,
|
|
177
|
+
last_updated = excluded.last_updated
|
|
178
|
+
`).run(modelName, avgLatency, avgRating, usageCount, successRate, score, stats?.last_used ?? Date.now(), Date.now());
|
|
179
|
+
}
|
|
180
|
+
getModelScore(modelName) {
|
|
181
|
+
const row = this.db.query(`
|
|
182
|
+
SELECT model_name, avg_latency, avg_quality, usage_count, success_rate, score, last_used
|
|
183
|
+
FROM model_scores WHERE model_name = ?
|
|
184
|
+
`).get(modelName);
|
|
185
|
+
if (!row)
|
|
186
|
+
return null;
|
|
187
|
+
return {
|
|
188
|
+
modelName: row.model_name,
|
|
189
|
+
avgLatency: row.avg_latency,
|
|
190
|
+
avgQuality: row.avg_quality,
|
|
191
|
+
usageCount: row.usage_count,
|
|
192
|
+
successRate: row.success_rate,
|
|
193
|
+
score: row.score,
|
|
194
|
+
lastUsed: row.last_used,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
getAllScores() {
|
|
198
|
+
const rows = this.db.query(`
|
|
199
|
+
SELECT model_name, avg_latency, avg_quality, usage_count, success_rate, score, last_used
|
|
200
|
+
FROM model_scores
|
|
201
|
+
ORDER BY score DESC
|
|
202
|
+
`).all();
|
|
203
|
+
return rows.map(row => ({
|
|
204
|
+
modelName: row.model_name,
|
|
205
|
+
avgLatency: row.avg_latency,
|
|
206
|
+
avgQuality: row.avg_quality,
|
|
207
|
+
usageCount: row.usage_count,
|
|
208
|
+
successRate: row.success_rate,
|
|
209
|
+
score: row.score,
|
|
210
|
+
lastUsed: row.last_used,
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
213
|
+
// ============================================================================
|
|
214
|
+
// Task-Specific Performance
|
|
215
|
+
// ============================================================================
|
|
216
|
+
updateTaskPerformance(modelName, taskType) {
|
|
217
|
+
const stats = this.db.query(`
|
|
218
|
+
SELECT
|
|
219
|
+
AVG(latency_ms) as avg_latency,
|
|
220
|
+
AVG(CASE WHEN user_rating IS NOT NULL THEN user_rating ELSE NULL END) as avg_quality,
|
|
221
|
+
COUNT(*) as usage_count,
|
|
222
|
+
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as success_rate
|
|
223
|
+
FROM performance_history
|
|
224
|
+
WHERE model_name = ? AND task_type = ?
|
|
225
|
+
`).get(modelName, taskType);
|
|
226
|
+
if (!stats || stats.usage_count === 0)
|
|
227
|
+
return;
|
|
228
|
+
const avgRating = stats?.avg_quality ?? 3;
|
|
229
|
+
const successRate = stats?.success_rate ?? 0.5;
|
|
230
|
+
const score = (avgRating / 5) * 0.5 + successRate * 0.5;
|
|
231
|
+
const id = `tp-${modelName}-${taskType}`;
|
|
232
|
+
this.db.query(`
|
|
233
|
+
INSERT INTO task_performance (
|
|
234
|
+
id, model_name, task_type, avg_latency, avg_quality, usage_count, success_rate, score, last_updated
|
|
235
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
236
|
+
ON CONFLICT(model_name, task_type) DO UPDATE SET
|
|
237
|
+
avg_latency = excluded.avg_latency,
|
|
238
|
+
avg_quality = excluded.avg_quality,
|
|
239
|
+
usage_count = excluded.usage_count,
|
|
240
|
+
success_rate = excluded.success_rate,
|
|
241
|
+
score = excluded.score,
|
|
242
|
+
last_updated = excluded.last_updated
|
|
243
|
+
`).run(id, modelName, taskType, stats.avg_latency, avgRating, stats.usage_count, successRate, score, Date.now());
|
|
244
|
+
}
|
|
245
|
+
getTaskPerformance(modelName, taskType) {
|
|
246
|
+
const row = this.db.query(`
|
|
247
|
+
SELECT model_name, avg_latency, avg_quality, usage_count, success_rate, score
|
|
248
|
+
FROM task_performance
|
|
249
|
+
WHERE model_name = ? AND task_type = ?
|
|
250
|
+
`).get(modelName, taskType);
|
|
251
|
+
if (!row)
|
|
252
|
+
return null;
|
|
253
|
+
return {
|
|
254
|
+
modelName: row.model_name,
|
|
255
|
+
avgLatency: row.avg_latency,
|
|
256
|
+
avgQuality: row.avg_quality,
|
|
257
|
+
usageCount: row.usage_count,
|
|
258
|
+
successRate: row.success_rate,
|
|
259
|
+
score: row.score,
|
|
260
|
+
lastUsed: Date.now(),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
getBestForTask(taskType, minSamples = 3) {
|
|
264
|
+
const row = this.db.query(`
|
|
265
|
+
SELECT model_name, avg_latency, avg_quality, usage_count, success_rate, score
|
|
266
|
+
FROM task_performance
|
|
267
|
+
WHERE task_type = ? AND usage_count >= ?
|
|
268
|
+
ORDER BY score DESC
|
|
269
|
+
LIMIT 1
|
|
270
|
+
`).get(taskType, minSamples);
|
|
271
|
+
if (!row)
|
|
272
|
+
return null;
|
|
273
|
+
return {
|
|
274
|
+
modelName: row.model_name,
|
|
275
|
+
avgLatency: row.avg_latency,
|
|
276
|
+
avgQuality: row.avg_quality,
|
|
277
|
+
usageCount: row.usage_count,
|
|
278
|
+
successRate: row.success_rate,
|
|
279
|
+
score: row.score,
|
|
280
|
+
lastUsed: Date.now(),
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
// ============================================================================
|
|
284
|
+
// Tier List Generation
|
|
285
|
+
// ============================================================================
|
|
286
|
+
generateTierList(period = 'all') {
|
|
287
|
+
const now = Date.now();
|
|
288
|
+
let sinceTime;
|
|
289
|
+
switch (period) {
|
|
290
|
+
case 'day':
|
|
291
|
+
sinceTime = now - 24 * 60 * 60 * 1000;
|
|
292
|
+
break;
|
|
293
|
+
case 'week':
|
|
294
|
+
sinceTime = now - 7 * 24 * 60 * 60 * 1000;
|
|
295
|
+
break;
|
|
296
|
+
case 'month':
|
|
297
|
+
sinceTime = now - 30 * 24 * 60 * 60 * 1000;
|
|
298
|
+
break;
|
|
299
|
+
default:
|
|
300
|
+
sinceTime = 0;
|
|
301
|
+
}
|
|
302
|
+
const rows = this.db.query(`
|
|
303
|
+
SELECT
|
|
304
|
+
model_name,
|
|
305
|
+
AVG(latency_ms) as avg_latency,
|
|
306
|
+
AVG(CASE WHEN user_rating IS NOT NULL THEN user_rating ELSE 3 END) as avg_quality,
|
|
307
|
+
COUNT(*) as usage_count,
|
|
308
|
+
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as success_rate,
|
|
309
|
+
MAX(timestamp) as last_used
|
|
310
|
+
FROM performance_history
|
|
311
|
+
WHERE timestamp >= ?
|
|
312
|
+
GROUP BY model_name
|
|
313
|
+
HAVING usage_count >= 2
|
|
314
|
+
ORDER BY
|
|
315
|
+
(AVG(CASE WHEN user_rating IS NOT NULL THEN user_rating ELSE 3 END) / 5.0) * 0.4 +
|
|
316
|
+
(SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*)) * 0.3 +
|
|
317
|
+
(1 - AVG(latency_ms) / 10000.0) * 0.2 +
|
|
318
|
+
(MIN(COUNT(*) / 50.0, 1.0)) * 0.1
|
|
319
|
+
DESC
|
|
320
|
+
`).all(sinceTime);
|
|
321
|
+
const tiers = [];
|
|
322
|
+
const tierThresholds = {
|
|
323
|
+
S: 0.85,
|
|
324
|
+
A: 0.70,
|
|
325
|
+
B: 0.55,
|
|
326
|
+
C: 0.40,
|
|
327
|
+
D: 0,
|
|
328
|
+
};
|
|
329
|
+
for (const row of rows) {
|
|
330
|
+
const qualityScore = (row.avg_quality ?? 3) / 5;
|
|
331
|
+
const successRate = row.success_rate;
|
|
332
|
+
const normalizedLatency = row.avg_latency > 0
|
|
333
|
+
? Math.max(0, 1 - (row.avg_latency / 10000))
|
|
334
|
+
: 0.5;
|
|
335
|
+
const reliabilityBonus = Math.min(row.usage_count / 50, 1);
|
|
336
|
+
const score = qualityScore * 0.40 +
|
|
337
|
+
successRate * 0.30 +
|
|
338
|
+
normalizedLatency * 0.20 +
|
|
339
|
+
reliabilityBonus * 0.10;
|
|
340
|
+
// Determine tier
|
|
341
|
+
let tier = 'D';
|
|
342
|
+
if (score >= tierThresholds.S)
|
|
343
|
+
tier = 'S';
|
|
344
|
+
else if (score >= tierThresholds.A)
|
|
345
|
+
tier = 'A';
|
|
346
|
+
else if (score >= tierThresholds.B)
|
|
347
|
+
tier = 'B';
|
|
348
|
+
else if (score >= tierThresholds.C)
|
|
349
|
+
tier = 'C';
|
|
350
|
+
// Determine strengths and weaknesses
|
|
351
|
+
const strengths = [];
|
|
352
|
+
const weaknesses = [];
|
|
353
|
+
if (successRate > 0.9)
|
|
354
|
+
strengths.push('Reliable');
|
|
355
|
+
if (row.avg_latency < 2000)
|
|
356
|
+
strengths.push('Fast');
|
|
357
|
+
if (qualityScore > 0.8)
|
|
358
|
+
strengths.push('High Quality');
|
|
359
|
+
if (row.usage_count > 50)
|
|
360
|
+
strengths.push('Well-tested');
|
|
361
|
+
if (successRate < 0.7)
|
|
362
|
+
weaknesses.push('Unreliable');
|
|
363
|
+
if (row.avg_latency > 5000)
|
|
364
|
+
weaknesses.push('Slow');
|
|
365
|
+
if (qualityScore < 0.6)
|
|
366
|
+
weaknesses.push('Low Quality');
|
|
367
|
+
if (row.usage_count < 5)
|
|
368
|
+
weaknesses.push('Limited Data');
|
|
369
|
+
// Recommend based on performance profile
|
|
370
|
+
const recommendedFor = [];
|
|
371
|
+
if (row.avg_latency < 3000 && successRate > 0.8)
|
|
372
|
+
recommendedFor.push('Quick Tasks');
|
|
373
|
+
if (qualityScore > 0.75 && row.usage_count > 10)
|
|
374
|
+
recommendedFor.push('Complex Tasks');
|
|
375
|
+
if (successRate > 0.9)
|
|
376
|
+
recommendedFor.push('Critical Operations');
|
|
377
|
+
if (row.avg_latency < 1500)
|
|
378
|
+
recommendedFor.push('Real-time');
|
|
379
|
+
tiers.push({
|
|
380
|
+
modelName: row.model_name,
|
|
381
|
+
tier,
|
|
382
|
+
score,
|
|
383
|
+
avgLatency: row.avg_latency,
|
|
384
|
+
avgQuality: row.avg_quality,
|
|
385
|
+
usageCount: row.usage_count,
|
|
386
|
+
successRate: row.success_rate,
|
|
387
|
+
strengths,
|
|
388
|
+
weaknesses,
|
|
389
|
+
recommendedFor,
|
|
390
|
+
});
|
|
391
|
+
}
|
|
392
|
+
// Save tier list snapshot
|
|
393
|
+
this.saveTierList(tiers, period);
|
|
394
|
+
return tiers;
|
|
395
|
+
}
|
|
396
|
+
saveTierList(tiers, period) {
|
|
397
|
+
const id = `tier-${Date.now()}`;
|
|
398
|
+
this.db.query(`
|
|
399
|
+
INSERT INTO tier_lists (id, generated_at, period, tiers, summary, total_samples)
|
|
400
|
+
VALUES (?, ?, ?, ?, ?, ?)
|
|
401
|
+
`).run(id, Date.now(), period, JSON.stringify(tiers), `Generated ${tiers.length} model rankings for period: ${period}`, tiers.reduce((sum, t) => sum + t.usageCount, 0));
|
|
402
|
+
}
|
|
403
|
+
getLatestTierList() {
|
|
404
|
+
const row = this.db.query(`
|
|
405
|
+
SELECT generated_at, period, tiers
|
|
406
|
+
FROM tier_lists
|
|
407
|
+
ORDER BY generated_at DESC
|
|
408
|
+
LIMIT 1
|
|
409
|
+
`).get();
|
|
410
|
+
if (!row)
|
|
411
|
+
return null;
|
|
412
|
+
return {
|
|
413
|
+
tiers: JSON.parse(row.tiers),
|
|
414
|
+
generatedAt: row.generated_at,
|
|
415
|
+
period: row.period,
|
|
416
|
+
};
|
|
417
|
+
}
|
|
418
|
+
// ============================================================================
|
|
419
|
+
// Statistics & Reporting
|
|
420
|
+
// ============================================================================
|
|
421
|
+
getPerformanceHistory(limit = 100) {
|
|
422
|
+
const rows = this.db.query(`
|
|
423
|
+
SELECT * FROM performance_history
|
|
424
|
+
ORDER BY timestamp DESC
|
|
425
|
+
LIMIT ?
|
|
426
|
+
`).all(limit);
|
|
427
|
+
return rows.map(row => ({
|
|
428
|
+
id: row.id,
|
|
429
|
+
modelName: row.model_name,
|
|
430
|
+
taskType: row.task_type,
|
|
431
|
+
complexity: row.complexity,
|
|
432
|
+
latencyMs: row.latency_ms,
|
|
433
|
+
inputTokens: row.input_tokens,
|
|
434
|
+
outputTokens: row.output_tokens,
|
|
435
|
+
timestamp: row.timestamp,
|
|
436
|
+
userRating: row.user_rating,
|
|
437
|
+
success: row.success === 1,
|
|
438
|
+
sessionId: row.session_id,
|
|
439
|
+
}));
|
|
440
|
+
}
|
|
441
|
+
getRecentFeedback(limit = 50) {
|
|
442
|
+
const rows = this.db.query(`
|
|
443
|
+
SELECT model_name, rating, task_type, timestamp
|
|
444
|
+
FROM user_feedback
|
|
445
|
+
ORDER BY timestamp DESC
|
|
446
|
+
LIMIT ?
|
|
447
|
+
`).all(limit);
|
|
448
|
+
return rows.map(row => ({
|
|
449
|
+
modelName: row.model_name,
|
|
450
|
+
rating: row.rating,
|
|
451
|
+
taskType: row.task_type,
|
|
452
|
+
timestamp: row.timestamp,
|
|
453
|
+
}));
|
|
454
|
+
}
|
|
455
|
+
getModelStats(modelName) {
|
|
456
|
+
const stats = this.db.query(`
|
|
457
|
+
SELECT
|
|
458
|
+
COUNT(*) as total_usage,
|
|
459
|
+
AVG(latency_ms) as avg_latency,
|
|
460
|
+
AVG(CASE WHEN user_rating IS NOT NULL THEN user_rating ELSE NULL END) as avg_rating,
|
|
461
|
+
SUM(CASE WHEN success = 1 THEN 1 ELSE 0 END) * 1.0 / COUNT(*) as success_rate
|
|
462
|
+
FROM performance_history
|
|
463
|
+
WHERE model_name = ?
|
|
464
|
+
`).get(modelName);
|
|
465
|
+
const tasks = this.db.query(`
|
|
466
|
+
SELECT task_type, COUNT(*) as count
|
|
467
|
+
FROM performance_history
|
|
468
|
+
WHERE model_name = ?
|
|
469
|
+
GROUP BY task_type
|
|
470
|
+
`).all(modelName);
|
|
471
|
+
const taskBreakdown = {};
|
|
472
|
+
for (const task of tasks) {
|
|
473
|
+
taskBreakdown[task.task_type] = task.count;
|
|
474
|
+
}
|
|
475
|
+
return {
|
|
476
|
+
totalUsage: stats?.total_usage ?? 0,
|
|
477
|
+
avgLatency: stats?.avg_latency ?? 0,
|
|
478
|
+
avgRating: stats?.avg_rating ?? 0,
|
|
479
|
+
successRate: stats?.success_rate ?? 0,
|
|
480
|
+
taskBreakdown,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
// ============================================================================
|
|
484
|
+
// Maintenance
|
|
485
|
+
// ============================================================================
|
|
486
|
+
clearHistory() {
|
|
487
|
+
this.db.exec(`
|
|
488
|
+
DELETE FROM performance_history;
|
|
489
|
+
DELETE FROM user_feedback;
|
|
490
|
+
DELETE FROM task_performance;
|
|
491
|
+
DELETE FROM tier_lists;
|
|
492
|
+
DELETE FROM model_scores;
|
|
493
|
+
`);
|
|
494
|
+
console.log('[ModelScoringDB] History cleared');
|
|
495
|
+
}
|
|
496
|
+
vacuum() {
|
|
497
|
+
this.db.exec('VACUUM;');
|
|
498
|
+
console.log('[ModelScoringDB] Database vacuumed');
|
|
499
|
+
}
|
|
500
|
+
close() {
|
|
501
|
+
this.db.close();
|
|
502
|
+
this.initialized = false;
|
|
503
|
+
}
|
|
504
|
+
// ============================================================================
|
|
505
|
+
// Export/Import
|
|
506
|
+
// ============================================================================
|
|
507
|
+
exportData() {
|
|
508
|
+
const history = this.db.query('SELECT * FROM performance_history').all();
|
|
509
|
+
const scores = this.db.query('SELECT * FROM model_scores').all();
|
|
510
|
+
const feedback = this.db.query('SELECT * FROM user_feedback').all();
|
|
511
|
+
const tasks = this.db.query('SELECT * FROM task_performance').all();
|
|
512
|
+
const tiers = this.db.query('SELECT * FROM tier_lists').all();
|
|
513
|
+
return {
|
|
514
|
+
exportedAt: new Date().toISOString(),
|
|
515
|
+
history,
|
|
516
|
+
scores,
|
|
517
|
+
feedback,
|
|
518
|
+
tasks,
|
|
519
|
+
tiers,
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
importData(data) {
|
|
523
|
+
if (data.history) {
|
|
524
|
+
for (const row of data.history) {
|
|
525
|
+
this.db.query(`
|
|
526
|
+
INSERT OR REPLACE INTO performance_history
|
|
527
|
+
(id, model_name, task_type, complexity, latency_ms, input_tokens, output_tokens, timestamp, user_rating, success, session_id)
|
|
528
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
529
|
+
`).run(row.id || `import-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`, row.model_name ?? row.modelName, row.task_type ?? row.taskType ?? 'chat', row.complexity ?? 'medium', row.latency_ms ?? row.latencyMs ?? 0, row.input_tokens ?? row.inputTokens ?? 0, row.output_tokens ?? row.outputTokens ?? 0, row.timestamp ?? Date.now(), row.user_rating ?? row.userRating ?? null, row.success ?? 1, row.session_id ?? row.sessionId ?? null);
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
console.log('[ModelScoringDB] Data imported');
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
// ============================================================================
|
|
536
|
+
// Singleton Instance
|
|
537
|
+
// ============================================================================
|
|
538
|
+
let dbInstance = null;
|
|
539
|
+
export function getModelScoringDB() {
|
|
540
|
+
if (!dbInstance) {
|
|
541
|
+
dbInstance = new ModelScoringDB();
|
|
542
|
+
}
|
|
543
|
+
return dbInstance;
|
|
544
|
+
}
|
|
545
|
+
export function closeModelScoringDB() {
|
|
546
|
+
if (dbInstance) {
|
|
547
|
+
dbInstance.close();
|
|
548
|
+
dbInstance = null;
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
export { ModelScoringDB };
|
|
552
|
+
export default ModelScoringDB;
|
|
553
|
+
//# sourceMappingURL=model-scoring-db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-scoring-db.js","sourceRoot":"","sources":["../../../src/llm/model-scoring-db.ts"],"names":[],"mappings":"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"}
|