@askdkc/kiokuko 0.2.6 → 0.2.8
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.ja.md +18 -0
- package/README.ko.md +17 -0
- package/README.md +23 -0
- package/README.zh-CN.md +16 -0
- package/dist/akinator/agent-task.d.ts +5 -0
- package/dist/akinator/agent-task.d.ts.map +1 -1
- package/dist/akinator/agent-task.js +98 -28
- package/dist/akinator/agent-task.js.map +1 -1
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +94 -8
- package/dist/cli.js.map +1 -1
- package/dist/commands/doctor.d.ts +4 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +46 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/embeddings.d.ts +26 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +190 -0
- package/dist/commands/embeddings.js.map +1 -0
- package/dist/commands/import.d.ts.map +1 -1
- package/dist/commands/import.js +7 -0
- package/dist/commands/import.js.map +1 -1
- package/dist/commands/use.d.ts.map +1 -1
- package/dist/commands/use.js +22 -8
- package/dist/commands/use.js.map +1 -1
- package/dist/config/paths.d.ts +5 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +34 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/context/broker.d.ts +3 -1
- package/dist/context/broker.d.ts.map +1 -1
- package/dist/context/broker.js +11 -7
- package/dist/context/broker.js.map +1 -1
- package/dist/context/delivery.d.ts.map +1 -1
- package/dist/context/delivery.js +5 -3
- package/dist/context/delivery.js.map +1 -1
- package/dist/context/ranking.d.ts +1 -1
- package/dist/context/ranking.d.ts.map +1 -1
- package/dist/context/ranking.js +1 -0
- package/dist/context/ranking.js.map +1 -1
- package/dist/context/scoped-broker.d.ts +4 -3
- package/dist/context/scoped-broker.d.ts.map +1 -1
- package/dist/context/scoped-broker.js +45 -7
- package/dist/context/scoped-broker.js.map +1 -1
- package/dist/context/selection-state.d.ts +12 -0
- package/dist/context/selection-state.d.ts.map +1 -1
- package/dist/context/selection-state.js +117 -7
- package/dist/context/selection-state.js.map +1 -1
- package/dist/db/capabilities.d.ts +8 -0
- package/dist/db/capabilities.d.ts.map +1 -1
- package/dist/db/capabilities.js +14 -0
- package/dist/db/capabilities.js.map +1 -1
- package/dist/db/connection.d.ts +7 -0
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +56 -0
- package/dist/db/connection.js.map +1 -1
- package/dist/db/migrate.d.ts.map +1 -1
- package/dist/db/migrate.js +3 -0
- package/dist/db/migrate.js.map +1 -1
- package/dist/embedding/backend.d.ts +27 -0
- package/dist/embedding/backend.d.ts.map +1 -0
- package/dist/embedding/backend.js +67 -0
- package/dist/embedding/backend.js.map +1 -0
- package/dist/embedding/config.d.ts +10 -0
- package/dist/embedding/config.d.ts.map +1 -0
- package/dist/embedding/config.js +142 -0
- package/dist/embedding/config.js.map +1 -0
- package/dist/embedding/diagnostics.d.ts +34 -0
- package/dist/embedding/diagnostics.d.ts.map +1 -0
- package/dist/embedding/diagnostics.js +263 -0
- package/dist/embedding/diagnostics.js.map +1 -0
- package/dist/embedding/document.d.ts +20 -0
- package/dist/embedding/document.d.ts.map +1 -0
- package/dist/embedding/document.js +122 -0
- package/dist/embedding/document.js.map +1 -0
- package/dist/embedding/javascript-backend.d.ts +11 -0
- package/dist/embedding/javascript-backend.d.ts.map +1 -0
- package/dist/embedding/javascript-backend.js +164 -0
- package/dist/embedding/javascript-backend.js.map +1 -0
- package/dist/embedding/jobs.d.ts +67 -0
- package/dist/embedding/jobs.d.ts.map +1 -0
- package/dist/embedding/jobs.js +259 -0
- package/dist/embedding/jobs.js.map +1 -0
- package/dist/embedding/local-model-loader.d.ts +24 -0
- package/dist/embedding/local-model-loader.d.ts.map +1 -0
- package/dist/embedding/local-model-loader.js +64 -0
- package/dist/embedding/local-model-loader.js.map +1 -0
- package/dist/embedding/local-transformers-provider.d.ts +17 -0
- package/dist/embedding/local-transformers-provider.d.ts.map +1 -0
- package/dist/embedding/local-transformers-provider.js +54 -0
- package/dist/embedding/local-transformers-provider.js.map +1 -0
- package/dist/embedding/model-download.d.ts +32 -0
- package/dist/embedding/model-download.d.ts.map +1 -0
- package/dist/embedding/model-download.js +41 -0
- package/dist/embedding/model-download.js.map +1 -0
- package/dist/embedding/model-installation.d.ts +17 -0
- package/dist/embedding/model-installation.d.ts.map +1 -0
- package/dist/embedding/model-installation.js +71 -0
- package/dist/embedding/model-installation.js.map +1 -0
- package/dist/embedding/model-manifest.d.ts +18 -0
- package/dist/embedding/model-manifest.d.ts.map +1 -0
- package/dist/embedding/model-manifest.js +86 -0
- package/dist/embedding/model-manifest.js.map +1 -0
- package/dist/embedding/openai-compatible-provider.d.ts +24 -0
- package/dist/embedding/openai-compatible-provider.d.ts.map +1 -0
- package/dist/embedding/openai-compatible-provider.js +330 -0
- package/dist/embedding/openai-compatible-provider.js.map +1 -0
- package/dist/embedding/presets/local-small.d.ts +8 -0
- package/dist/embedding/presets/local-small.d.ts.map +1 -0
- package/dist/embedding/presets/local-small.js +67 -0
- package/dist/embedding/presets/local-small.js.map +1 -0
- package/dist/embedding/presets/manifest.d.ts +27 -0
- package/dist/embedding/presets/manifest.d.ts.map +1 -0
- package/dist/embedding/presets/manifest.js +5 -0
- package/dist/embedding/presets/manifest.js.map +1 -0
- package/dist/embedding/profile.d.ts +10 -0
- package/dist/embedding/profile.d.ts.map +1 -0
- package/dist/embedding/profile.js +67 -0
- package/dist/embedding/profile.js.map +1 -0
- package/dist/embedding/provider.d.ts +13 -0
- package/dist/embedding/provider.d.ts.map +1 -0
- package/dist/embedding/provider.js +17 -0
- package/dist/embedding/provider.js.map +1 -0
- package/dist/embedding/query-cache.d.ts +45 -0
- package/dist/embedding/query-cache.d.ts.map +1 -0
- package/dist/embedding/query-cache.js +181 -0
- package/dist/embedding/query-cache.js.map +1 -0
- package/dist/embedding/runtime.d.ts +14 -0
- package/dist/embedding/runtime.d.ts.map +1 -0
- package/dist/embedding/runtime.js +407 -0
- package/dist/embedding/runtime.js.map +1 -0
- package/dist/embedding/settings.d.ts +6 -0
- package/dist/embedding/settings.d.ts.map +1 -0
- package/dist/embedding/settings.js +69 -0
- package/dist/embedding/settings.js.map +1 -0
- package/dist/embedding/setup-lock.d.ts +7 -0
- package/dist/embedding/setup-lock.d.ts.map +1 -0
- package/dist/embedding/setup-lock.js +35 -0
- package/dist/embedding/setup-lock.js.map +1 -0
- package/dist/embedding/setup-service.d.ts +53 -0
- package/dist/embedding/setup-service.d.ts.map +1 -0
- package/dist/embedding/setup-service.js +184 -0
- package/dist/embedding/setup-service.js.map +1 -0
- package/dist/embedding/sqlite-vec-backend.d.ts +9 -0
- package/dist/embedding/sqlite-vec-backend.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-backend.js +106 -0
- package/dist/embedding/sqlite-vec-backend.js.map +1 -0
- package/dist/embedding/sqlite-vec-loader.d.ts +17 -0
- package/dist/embedding/sqlite-vec-loader.d.ts.map +1 -0
- package/dist/embedding/sqlite-vec-loader.js +51 -0
- package/dist/embedding/sqlite-vec-loader.js.map +1 -0
- package/dist/embedding/store.d.ts +66 -0
- package/dist/embedding/store.d.ts.map +1 -0
- package/dist/embedding/store.js +490 -0
- package/dist/embedding/store.js.map +1 -0
- package/dist/embedding/types.d.ts +126 -0
- package/dist/embedding/types.d.ts.map +1 -0
- package/dist/embedding/types.js +2 -0
- package/dist/embedding/types.js.map +1 -0
- package/dist/embedding/vector.d.ts +9 -0
- package/dist/embedding/vector.d.ts.map +1 -0
- package/dist/embedding/vector.js +90 -0
- package/dist/embedding/vector.js.map +1 -0
- package/dist/embedding/worker.d.ts +23 -0
- package/dist/embedding/worker.d.ts.map +1 -0
- package/dist/embedding/worker.js +84 -0
- package/dist/embedding/worker.js.map +1 -0
- package/dist/enno-oduno/schemas.d.ts +2 -2
- package/dist/ledger/checkpoint-contract.d.ts +2 -2
- package/dist/mcp/bounded-stdio-transport.d.ts +3 -0
- package/dist/mcp/bounded-stdio-transport.d.ts.map +1 -1
- package/dist/mcp/bounded-stdio-transport.js +15 -3
- package/dist/mcp/bounded-stdio-transport.js.map +1 -1
- package/dist/mcp/request-deadline.d.ts +51 -0
- package/dist/mcp/request-deadline.d.ts.map +1 -0
- package/dist/mcp/request-deadline.js +155 -0
- package/dist/mcp/request-deadline.js.map +1 -0
- package/dist/mcp/runtime-owner.d.ts +27 -0
- package/dist/mcp/runtime-owner.d.ts.map +1 -0
- package/dist/mcp/runtime-owner.js +129 -0
- package/dist/mcp/runtime-owner.js.map +1 -0
- package/dist/mcp/server.d.ts +11 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +83 -22
- package/dist/mcp/server.js.map +1 -1
- package/dist/memory/checkpoint-contract.d.ts +3 -3
- package/dist/memory/entries.d.ts.map +1 -1
- package/dist/memory/entries.js +13 -0
- package/dist/memory/entries.js.map +1 -1
- package/dist/memory/federated-retrieval.d.ts +3 -2
- package/dist/memory/federated-retrieval.d.ts.map +1 -1
- package/dist/memory/federated-retrieval.js +112 -31
- package/dist/memory/federated-retrieval.js.map +1 -1
- package/dist/memory/hybrid-retrieval.d.ts +9 -2
- package/dist/memory/hybrid-retrieval.d.ts.map +1 -1
- package/dist/memory/hybrid-retrieval.js +60 -13
- package/dist/memory/hybrid-retrieval.js.map +1 -1
- package/dist/memory/retrieval.d.ts +4 -3
- package/dist/memory/retrieval.d.ts.map +1 -1
- package/dist/memory/retrieval.js +6 -6
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/scoped-memory.d.ts +3 -2
- package/dist/memory/scoped-memory.d.ts.map +1 -1
- package/dist/memory/scoped-memory.js +7 -3
- package/dist/memory/scoped-memory.js.map +1 -1
- package/dist/server/agent-application.js +1 -1
- package/dist/server/agent-application.js.map +1 -1
- package/dist/server/http.d.ts +17 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +79 -13
- package/dist/server/http.js.map +1 -1
- package/dist/skills/discovery-service.d.ts.map +1 -1
- package/dist/skills/discovery-service.js +10 -8
- package/dist/skills/discovery-service.js.map +1 -1
- package/dist/skills/find.d.ts +1 -0
- package/dist/skills/find.d.ts.map +1 -1
- package/dist/skills/find.js +1 -0
- package/dist/skills/find.js.map +1 -1
- package/dist/skills/materialization-authority.d.ts +1 -1
- package/dist/skills/materialization-authority.d.ts.map +1 -1
- package/dist/skills/materialization-authority.js +2 -2
- package/dist/skills/materialization-authority.js.map +1 -1
- package/dist/skills/providers/skills-sh-compat.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-compat.js +4 -2
- package/dist/skills/providers/skills-sh-compat.js.map +1 -1
- package/dist/skills/providers/skills-sh-v1.d.ts +2 -2
- package/dist/skills/providers/skills-sh-v1.d.ts.map +1 -1
- package/dist/skills/providers/skills-sh-v1.js +22 -4
- package/dist/skills/providers/skills-sh-v1.js.map +1 -1
- package/dist/skills/source/github-fetcher.d.ts.map +1 -1
- package/dist/skills/source/github-fetcher.js +8 -4
- package/dist/skills/source/github-fetcher.js.map +1 -1
- package/dist/skills/types.d.ts +3 -2
- package/dist/skills/types.d.ts.map +1 -1
- package/docs/agent-file.md +72 -0
- package/docs/agent-gateway.md +104 -0
- package/docs/architecture.md +12 -0
- package/docs/cli-contract.md +13 -0
- package/docs/client-compatibility.md +298 -0
- package/docs/database.md +11 -0
- package/docs/execution-ledger.md +89 -0
- package/docs/release-notes-0.1.18.md +103 -0
- package/docs/retrieval-evaluation.md +10 -0
- package/docs/security.md +11 -0
- package/docs/sqlite-driver-adr.md +8 -0
- package/migrations/021_semantic_embeddings.sql +122 -0
- package/migrations/022_embedding_setup_v2.sql +236 -0
- package/migrations/down/021_semantic_embeddings.sql +17 -0
- package/migrations/down/022_embedding_setup_v2.sql +133 -0
- package/package.json +10 -1
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { lstat } from 'node:fs/promises';
|
|
3
|
+
import { withImmediateTransaction } from '../db/transaction.js';
|
|
4
|
+
import { KiokukoError } from '../errors.js';
|
|
5
|
+
import { readEntry } from '../memory/entries.js';
|
|
6
|
+
import { buildCanonicalEmbeddingDocument, renderEmbeddingProviderInput } from './document.js';
|
|
7
|
+
import { claimEmbeddingJobs, failEmbeddingJob, finalizeEmbeddingJob, listEmbeddingJobs } from './jobs.js';
|
|
8
|
+
import { acquireEmbeddingSetupLock } from './setup-lock.js';
|
|
9
|
+
import { installEmbeddingModel } from './model-installation.js';
|
|
10
|
+
import { LOCAL_SMALL_PRESET } from './presets/local-small.js';
|
|
11
|
+
import { createLocalEmbeddingProfile } from './profile.js';
|
|
12
|
+
import { activateLocalEmbeddingProfileInTransaction } from './store.js';
|
|
13
|
+
function now(options) {
|
|
14
|
+
return options.now?.() ?? new Date().toISOString();
|
|
15
|
+
}
|
|
16
|
+
function setupFailureCode(error) {
|
|
17
|
+
if (error instanceof KiokukoError && error.code === 'SERVICE_UNAVAILABLE')
|
|
18
|
+
return 'provider_unavailable';
|
|
19
|
+
if (error instanceof KiokukoError && error.code === 'VALIDATION_ERROR')
|
|
20
|
+
return 'dimension_mismatch';
|
|
21
|
+
return 'provider_unavailable';
|
|
22
|
+
}
|
|
23
|
+
async function installationExists(directory) {
|
|
24
|
+
try {
|
|
25
|
+
return (await lstat(directory)).isDirectory();
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error instanceof Error && 'code' in error && error.code === 'ENOENT')
|
|
29
|
+
return false;
|
|
30
|
+
throw error;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function installationId(presetId, revision, manifestHash) {
|
|
34
|
+
return createHash('sha256').update(`${presetId}\u0000${revision}\u0000${manifestHash}`, 'utf8').digest('hex');
|
|
35
|
+
}
|
|
36
|
+
function activateSettings(database, input) {
|
|
37
|
+
database.prepare(`
|
|
38
|
+
UPDATE embedding_settings
|
|
39
|
+
SET mode = 'optional', provider_kind = 'local-transformers', preset_id = ?,
|
|
40
|
+
model_installation_id = ?, vector_backend = 'auto', batch_size = 16,
|
|
41
|
+
timeout_ms = 30000, legacy_profile_id = NULL, setup_state = ?, updated_at = ?
|
|
42
|
+
WHERE singleton = 1
|
|
43
|
+
`).run(LOCAL_SMALL_PRESET.id, input.installationId, input.setupState, input.now);
|
|
44
|
+
}
|
|
45
|
+
async function drainSetupJobs(database, provider, profileId, generation, options) {
|
|
46
|
+
let completed = 0;
|
|
47
|
+
let failed = 0;
|
|
48
|
+
let blocked = 0;
|
|
49
|
+
for (let round = 0; round < 3; round += 1) {
|
|
50
|
+
const jobs = claimEmbeddingJobs(database, { maxJobs: 64, now: now(options) });
|
|
51
|
+
if (jobs.length === 0)
|
|
52
|
+
break;
|
|
53
|
+
for (const job of jobs) {
|
|
54
|
+
try {
|
|
55
|
+
const entry = readEntry(database, { workspace: job.workspace, entryId: job.entryId });
|
|
56
|
+
const canonical = buildCanonicalEmbeddingDocument({
|
|
57
|
+
kind: entry.kind,
|
|
58
|
+
title: entry.title,
|
|
59
|
+
summary: entry.summary,
|
|
60
|
+
body: entry.body,
|
|
61
|
+
tags: entry.tags,
|
|
62
|
+
scope: entry.scope,
|
|
63
|
+
});
|
|
64
|
+
const providerInput = renderEmbeddingProviderInput(canonical.text);
|
|
65
|
+
const vectors = await provider.embed([providerInput]);
|
|
66
|
+
if (vectors.length !== 1)
|
|
67
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Local provider returned an invalid batch');
|
|
68
|
+
const documentHash = createHash('sha256').update(providerInput, 'utf8').digest('hex');
|
|
69
|
+
finalizeEmbeddingJob(database, {
|
|
70
|
+
entryId: job.entryId,
|
|
71
|
+
profileId,
|
|
72
|
+
generation,
|
|
73
|
+
leaseId: job.leaseId,
|
|
74
|
+
revision: job.revision,
|
|
75
|
+
contentHash: job.contentHash,
|
|
76
|
+
documentHash,
|
|
77
|
+
vector: vectors[0],
|
|
78
|
+
now: now(options),
|
|
79
|
+
});
|
|
80
|
+
completed += 1;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const code = setupFailureCode(error);
|
|
84
|
+
if (code === 'dimension_mismatch')
|
|
85
|
+
blocked += 1;
|
|
86
|
+
else
|
|
87
|
+
failed += 1;
|
|
88
|
+
failEmbeddingJob(database, {
|
|
89
|
+
entryId: job.entryId,
|
|
90
|
+
profileId,
|
|
91
|
+
generation,
|
|
92
|
+
leaseId: job.leaseId,
|
|
93
|
+
errorCode: code,
|
|
94
|
+
availableAt: now(options),
|
|
95
|
+
now: now(options),
|
|
96
|
+
permanent: code === 'dimension_mismatch',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
const remaining = listEmbeddingJobs(database, { profileId }).filter((job) => job.state !== 'leased').length;
|
|
102
|
+
return { completed, failed, blocked, remaining };
|
|
103
|
+
}
|
|
104
|
+
export async function runEmbeddingSetup(database, input, options = {}) {
|
|
105
|
+
if (input.presetId !== LOCAL_SMALL_PRESET.id)
|
|
106
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Only the local-small embedding preset is supported');
|
|
107
|
+
if (typeof input.confirmed !== 'boolean' || typeof input.dryRun !== 'boolean' || typeof input.offline !== 'boolean' || typeof input.replace !== 'boolean') {
|
|
108
|
+
throw new KiokukoError('VALIDATION_ERROR', 'Embedding setup options are invalid');
|
|
109
|
+
}
|
|
110
|
+
const eligible = Number(database.prepare('SELECT COUNT(*) AS count FROM entries').get()?.count ?? 0);
|
|
111
|
+
const fromVersion = Number(database.prepare('SELECT MAX(version) AS version FROM schema_migrations').get()?.version ?? 0);
|
|
112
|
+
if (input.dryRun) {
|
|
113
|
+
return {
|
|
114
|
+
presetId: LOCAL_SMALL_PRESET.id,
|
|
115
|
+
model: { repository: LOCAL_SMALL_PRESET.artifactRepository, revision: LOCAL_SMALL_PRESET.revision, installation: 'reused', bytes: LOCAL_SMALL_PRESET.files.reduce((sum, file) => sum + file.size, 0) },
|
|
116
|
+
migration: { fromVersion, toVersion: fromVersion, backupPath: null, applied: [] },
|
|
117
|
+
profile: { profileId: createLocalEmbeddingProfile(LOCAL_SMALL_PRESET).profileId, generation: 0, activated: false },
|
|
118
|
+
embeddings: { eligible, completed: 0, failed: 0, blocked: 0, remaining: eligible },
|
|
119
|
+
backend: options.backendId ?? 'javascript',
|
|
120
|
+
semanticEnabled: false,
|
|
121
|
+
restartRequired: false,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
if (!input.confirmed)
|
|
125
|
+
throw new KiokukoError('USAGE_ERROR', 'Embedding setup requires explicit confirmation');
|
|
126
|
+
const lock = await acquireEmbeddingSetupLock(options);
|
|
127
|
+
try {
|
|
128
|
+
const finalDirectory = (await import('../config/paths.js')).getEmbeddingPresetDirectory(LOCAL_SMALL_PRESET.id, LOCAL_SMALL_PRESET.revision, options);
|
|
129
|
+
if (input.offline && !(await installationExists(finalDirectory)))
|
|
130
|
+
throw new KiokukoError('SERVICE_UNAVAILABLE', 'The pinned local embedding model is not installed for offline setup');
|
|
131
|
+
const installed = await (options.installer ?? installEmbeddingModel)(LOCAL_SMALL_PRESET, {
|
|
132
|
+
...options,
|
|
133
|
+
...(input.offline ? { downloader: { download: async () => { throw new KiokukoError('SERVICE_UNAVAILABLE', 'Offline setup cannot download the model'); } } } : {}),
|
|
134
|
+
});
|
|
135
|
+
const profile = createLocalEmbeddingProfile(LOCAL_SMALL_PRESET);
|
|
136
|
+
const setupNow = now(options);
|
|
137
|
+
const setupId = randomUUID();
|
|
138
|
+
const installation = installationId(LOCAL_SMALL_PRESET.id, LOCAL_SMALL_PRESET.revision, installed.manifestHash);
|
|
139
|
+
const activation = withImmediateTransaction(database, () => {
|
|
140
|
+
database.prepare(`
|
|
141
|
+
INSERT INTO embedding_model_installations (
|
|
142
|
+
installation_id, preset_id, repository_id, revision, artifact_manifest_hash,
|
|
143
|
+
relative_path, state, total_bytes, installed_at, verified_at, last_checked_at
|
|
144
|
+
) VALUES (?, ?, ?, ?, ?, ?, 'verified', ?, ?, ?, ?)
|
|
145
|
+
ON CONFLICT(installation_id) DO UPDATE SET state = 'verified', verified_at = excluded.verified_at, last_checked_at = excluded.last_checked_at
|
|
146
|
+
`).run(installation, LOCAL_SMALL_PRESET.id, LOCAL_SMALL_PRESET.artifactRepository, LOCAL_SMALL_PRESET.revision, installed.manifestHash, installed.relativePath, installed.totalBytes, setupNow, setupNow, setupNow);
|
|
147
|
+
database.prepare(`
|
|
148
|
+
INSERT INTO embedding_setup_runs (setup_id, preset_id, phase, initial_entry_count, processed_entry_count, started_at, updated_at)
|
|
149
|
+
VALUES (?, ?, 'activating', ?, 0, ?, ?)
|
|
150
|
+
`).run(setupId, LOCAL_SMALL_PRESET.id, eligible, setupNow, setupNow);
|
|
151
|
+
const result = activateLocalEmbeddingProfileInTransaction(database, profile, { replace: input.replace, now: setupNow });
|
|
152
|
+
activateSettings(database, { installationId: installation, setupState: 'installing', now: setupNow });
|
|
153
|
+
database.prepare('UPDATE embedding_setup_runs SET active_profile_id = ?, model_installation_id = ?, phase = \'embedding\', updated_at = ? WHERE setup_id = ?').run(profile.profileId, installation, setupNow, setupId);
|
|
154
|
+
return result;
|
|
155
|
+
});
|
|
156
|
+
const provider = options.provider ?? new (await import('./local-transformers-provider.js')).LocalTransformersEmbeddingProvider({ profile: profile.identity, modelDirectory: installed.directory });
|
|
157
|
+
let drain;
|
|
158
|
+
try {
|
|
159
|
+
drain = await drainSetupJobs(database, provider, profile.profileId, activation.generation, options);
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
await provider.close?.();
|
|
163
|
+
}
|
|
164
|
+
const finalState = drain.remaining === 0 ? 'ready' : 'degraded';
|
|
165
|
+
withImmediateTransaction(database, () => {
|
|
166
|
+
activateSettings(database, { installationId: installation, setupState: finalState, now: now(options) });
|
|
167
|
+
database.prepare('UPDATE embedding_setup_runs SET phase = ?, processed_entry_count = ?, updated_at = ?, completed_at = ? WHERE setup_id = ?').run(finalState === 'ready' ? 'completed' : 'failed', drain.completed, now(options), now(options), setupId);
|
|
168
|
+
});
|
|
169
|
+
return {
|
|
170
|
+
presetId: LOCAL_SMALL_PRESET.id,
|
|
171
|
+
model: { repository: LOCAL_SMALL_PRESET.artifactRepository, revision: LOCAL_SMALL_PRESET.revision, installation: installed.installation, bytes: installed.totalBytes },
|
|
172
|
+
migration: { fromVersion, toVersion: fromVersion, backupPath: null, applied: [] },
|
|
173
|
+
profile: { profileId: profile.profileId, generation: activation.generation, activated: activation.activated },
|
|
174
|
+
embeddings: { eligible, completed: drain.completed, failed: drain.failed, blocked: drain.blocked, remaining: drain.remaining },
|
|
175
|
+
backend: options.backendId ?? 'javascript',
|
|
176
|
+
semanticEnabled: true,
|
|
177
|
+
restartRequired: true,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
await lock.release();
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=setup-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup-service.js","sourceRoot":"","sources":["../../src/embedding/setup-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SqliteDatabase } from '../db/adapter.js';
|
|
2
|
+
import type { VectorHit, VectorSearchBackend, VectorSearchInput } from './types.js';
|
|
3
|
+
export declare const SQLITE_VEC_BACKEND_ID: "sqlite-vec";
|
|
4
|
+
export declare class SqliteVecVectorSearchBackend implements VectorSearchBackend {
|
|
5
|
+
readonly id: "sqlite-vec";
|
|
6
|
+
search(database: SqliteDatabase, input: VectorSearchInput): VectorHit[];
|
|
7
|
+
}
|
|
8
|
+
export declare const createSqliteVecVectorSearchBackend: () => VectorSearchBackend;
|
|
9
|
+
//# sourceMappingURL=sqlite-vec-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vec-backend.d.ts","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-backend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,kBAAkB,CAAC;AAKlE,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpF,eAAO,MAAM,qBAAqB,EAAG,YAAqB,CAAC;AAwD3D,qBAAa,4BAA6B,YAAW,mBAAmB;IACtE,QAAQ,CAAC,EAAE,eAAyB;IAEpC,MAAM,CAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,iBAAiB,GAAG,SAAS,EAAE;CAyDxE;AAED,eAAO,MAAM,kCAAkC,QAAO,mBAAyD,CAAC"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { KiokukoError } from '../errors.js';
|
|
2
|
+
import { requireWorkspace } from '../serialization/validate.js';
|
|
3
|
+
import { decodeVector, encodeVector, normalizeVector } from './vector.js';
|
|
4
|
+
import { MAX_VECTOR_SEARCH_LIMIT } from './javascript-backend.js';
|
|
5
|
+
export const SQLITE_VEC_BACKEND_ID = 'sqlite-vec';
|
|
6
|
+
function invalid(message) {
|
|
7
|
+
throw new KiokukoError('VALIDATION_ERROR', message);
|
|
8
|
+
}
|
|
9
|
+
function integrity(message) {
|
|
10
|
+
throw new KiokukoError('INTEGRITY_ERROR', message);
|
|
11
|
+
}
|
|
12
|
+
function entryId(value) {
|
|
13
|
+
if (typeof value !== 'string' || value.length === 0 || value.length > 512 || /[\u0000-\u001f\u007f]/u.test(value)) {
|
|
14
|
+
integrity('Stored vector entry ID is invalid');
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function searchInput(input) {
|
|
19
|
+
if (typeof input.profileId !== 'string' || !/^[0-9a-f]{64}$/u.test(input.profileId))
|
|
20
|
+
invalid('profileId is invalid');
|
|
21
|
+
if (!Number.isSafeInteger(input.dimensions) || input.dimensions < 2 || input.dimensions > 8192)
|
|
22
|
+
invalid('dimensions is invalid');
|
|
23
|
+
if (!Number.isFinite(input.distanceCeiling) || input.distanceCeiling <= 0 || input.distanceCeiling >= 2)
|
|
24
|
+
invalid('distanceCeiling is invalid');
|
|
25
|
+
if (!Number.isSafeInteger(input.limit) || input.limit < 1 || input.limit > MAX_VECTOR_SEARCH_LIMIT)
|
|
26
|
+
invalid('limit is invalid');
|
|
27
|
+
const queryVector = normalizeVector(input.queryVector, input.dimensions);
|
|
28
|
+
const workspace = input.workspace === undefined ? undefined : requireWorkspace(input.workspace);
|
|
29
|
+
const excludedWorkspaces = input.excludedWorkspaces === undefined
|
|
30
|
+
? []
|
|
31
|
+
: [...new Set(input.excludedWorkspaces.map((value) => requireWorkspace(value)))];
|
|
32
|
+
return {
|
|
33
|
+
profileId: input.profileId,
|
|
34
|
+
dimensions: input.dimensions,
|
|
35
|
+
queryVector,
|
|
36
|
+
queryBlob: encodeVector(queryVector, input.dimensions),
|
|
37
|
+
distanceCeiling: input.distanceCeiling,
|
|
38
|
+
workspace,
|
|
39
|
+
excludedWorkspaces,
|
|
40
|
+
limit: input.limit,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export class SqliteVecVectorSearchBackend {
|
|
44
|
+
id = SQLITE_VEC_BACKEND_ID;
|
|
45
|
+
search(database, input) {
|
|
46
|
+
const normalized = searchInput(input);
|
|
47
|
+
const clauses = [
|
|
48
|
+
'ee.profile_id = ?',
|
|
49
|
+
'ee.dimensions = ?',
|
|
50
|
+
'ee.revision = e.current_revision',
|
|
51
|
+
'ee.content_hash = r.content_hash',
|
|
52
|
+
];
|
|
53
|
+
const parameters = [normalized.queryBlob, normalized.profileId, normalized.dimensions];
|
|
54
|
+
if (normalized.workspace !== undefined) {
|
|
55
|
+
clauses.push('e.workspace = ?');
|
|
56
|
+
parameters.push(normalized.workspace);
|
|
57
|
+
}
|
|
58
|
+
if (normalized.excludedWorkspaces.length > 0) {
|
|
59
|
+
clauses.push(`e.workspace NOT IN (${normalized.excludedWorkspaces.map(() => '?').join(', ')})`);
|
|
60
|
+
parameters.push(...normalized.excludedWorkspaces);
|
|
61
|
+
}
|
|
62
|
+
parameters.push(normalized.limit);
|
|
63
|
+
let rows;
|
|
64
|
+
try {
|
|
65
|
+
rows = database.prepare(`
|
|
66
|
+
SELECT ee.entry_id, ee.dimensions, ee.embedding, ee.vector_hash,
|
|
67
|
+
vec_distance_cosine(ee.embedding, ?) AS distance
|
|
68
|
+
FROM entry_embeddings AS ee
|
|
69
|
+
JOIN entries AS e
|
|
70
|
+
ON e.id = ee.entry_id
|
|
71
|
+
JOIN entry_revisions AS r
|
|
72
|
+
ON r.entry_id = e.id
|
|
73
|
+
AND r.revision = e.current_revision
|
|
74
|
+
WHERE ${clauses.join(' AND ')}
|
|
75
|
+
ORDER BY distance ASC, ee.entry_id ASC
|
|
76
|
+
LIMIT ?
|
|
77
|
+
`).all(...parameters);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
const failure = new KiokukoError('SERVICE_UNAVAILABLE', 'sqlite-vec vector search is unavailable');
|
|
81
|
+
Object.defineProperty(failure, 'cause', { value: error });
|
|
82
|
+
throw failure;
|
|
83
|
+
}
|
|
84
|
+
const hits = [];
|
|
85
|
+
for (const row of rows) {
|
|
86
|
+
const id = entryId(row.entry_id);
|
|
87
|
+
if (typeof row.dimensions !== 'number' || row.dimensions !== normalized.dimensions) {
|
|
88
|
+
integrity('Stored vector dimensions do not match the search profile');
|
|
89
|
+
}
|
|
90
|
+
const vectorHash = typeof row.vector_hash === 'string' ? row.vector_hash : integrity('Stored vector hash is invalid');
|
|
91
|
+
try {
|
|
92
|
+
decodeVector(row.embedding, normalized.dimensions, vectorHash);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
integrity('Stored vector is invalid');
|
|
96
|
+
}
|
|
97
|
+
if (typeof row.distance !== 'number' || !Number.isFinite(row.distance))
|
|
98
|
+
integrity('Vector distance is invalid');
|
|
99
|
+
if (row.distance <= normalized.distanceCeiling)
|
|
100
|
+
hits.push({ entryId: id, distance: row.distance });
|
|
101
|
+
}
|
|
102
|
+
return hits;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
export const createSqliteVecVectorSearchBackend = () => new SqliteVecVectorSearchBackend();
|
|
106
|
+
//# sourceMappingURL=sqlite-vec-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vec-backend.js","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const SQLITE_VEC_LOADER_ID: "sqlite-vec";
|
|
2
|
+
export declare const SQLITE_VEC_PACKAGE_VERSION: "0.1.9";
|
|
3
|
+
export declare const SQLITE_VEC_EXTENSION_VERSION: "v0.1.9";
|
|
4
|
+
export declare const SQLITE_VEC_VERSION: "0.1.9";
|
|
5
|
+
export interface SqliteVecLoadConnection {
|
|
6
|
+
loadExtension(path: string): void;
|
|
7
|
+
}
|
|
8
|
+
export interface SqliteVecLoader {
|
|
9
|
+
readonly id: typeof SQLITE_VEC_LOADER_ID;
|
|
10
|
+
readonly packageVersion: typeof SQLITE_VEC_PACKAGE_VERSION;
|
|
11
|
+
readonly extensionVersion: typeof SQLITE_VEC_EXTENSION_VERSION;
|
|
12
|
+
load(database: SqliteVecLoadConnection): void;
|
|
13
|
+
}
|
|
14
|
+
export declare function isSqliteVecLoader(value: unknown): value is SqliteVecLoader;
|
|
15
|
+
/** Resolve only the exact, package-owned sqlite-vec loader. */
|
|
16
|
+
export declare function createSqliteVecLoader(): Promise<SqliteVecLoader | null>;
|
|
17
|
+
//# sourceMappingURL=sqlite-vec-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vec-loader.d.ts","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-loader.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,EAAG,YAAqB,CAAC;AAC1D,eAAO,MAAM,0BAA0B,EAAG,OAAgB,CAAC;AAC3D,eAAO,MAAM,4BAA4B,EAAG,QAAiB,CAAC;AAC9D,eAAO,MAAM,kBAAkB,SAA6B,CAAC;AAE7D,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,oBAAoB,CAAC;IACzC,QAAQ,CAAC,cAAc,EAAE,OAAO,0BAA0B,CAAC;IAC3D,QAAQ,CAAC,gBAAgB,EAAE,OAAO,4BAA4B,CAAC;IAC/D,IAAI,CAAC,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAC;CAC/C;AAkBD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED,+DAA+D;AAC/D,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CA6B7E"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
export const SQLITE_VEC_LOADER_ID = 'sqlite-vec';
|
|
3
|
+
export const SQLITE_VEC_PACKAGE_VERSION = '0.1.9';
|
|
4
|
+
export const SQLITE_VEC_EXTENSION_VERSION = 'v0.1.9';
|
|
5
|
+
export const SQLITE_VEC_VERSION = SQLITE_VEC_PACKAGE_VERSION;
|
|
6
|
+
const knownLoaders = new WeakSet();
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return typeof value === 'object' && value !== null;
|
|
9
|
+
}
|
|
10
|
+
function isSqliteVecPackage(value) {
|
|
11
|
+
if (!isRecord(value))
|
|
12
|
+
return false;
|
|
13
|
+
return typeof value.getLoadablePath === 'function' && typeof value.load === 'function';
|
|
14
|
+
}
|
|
15
|
+
export function isSqliteVecLoader(value) {
|
|
16
|
+
return typeof value === 'object' && value !== null && knownLoaders.has(value);
|
|
17
|
+
}
|
|
18
|
+
/** Resolve only the exact, package-owned sqlite-vec loader. */
|
|
19
|
+
export async function createSqliteVecLoader() {
|
|
20
|
+
let candidate;
|
|
21
|
+
try {
|
|
22
|
+
// Keep the package name constant so optional dependency resolution cannot
|
|
23
|
+
// become an extension-path configuration surface.
|
|
24
|
+
const packageName = 'sqlite-vec';
|
|
25
|
+
candidate = await import(packageName);
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
if (!isSqliteVecPackage(candidate))
|
|
31
|
+
return null;
|
|
32
|
+
try {
|
|
33
|
+
const loadablePath = candidate.getLoadablePath();
|
|
34
|
+
if (!path.isAbsolute(loadablePath) || /[\u0000-\u001f\u007f]/u.test(loadablePath))
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
const loader = Object.freeze({
|
|
41
|
+
id: SQLITE_VEC_LOADER_ID,
|
|
42
|
+
packageVersion: SQLITE_VEC_PACKAGE_VERSION,
|
|
43
|
+
extensionVersion: SQLITE_VEC_EXTENSION_VERSION,
|
|
44
|
+
load(database) {
|
|
45
|
+
candidate.load(database);
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
knownLoaders.add(loader);
|
|
49
|
+
return loader;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=sqlite-vec-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-vec-loader.js","sourceRoot":"","sources":["../../src/embedding/sqlite-vec-loader.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,MAAM,CAAC,MAAM,oBAAoB,GAAG,YAAqB,CAAC;AAC1D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAgB,CAAC;AAC3D,MAAM,CAAC,MAAM,4BAA4B,GAAG,QAAiB,CAAC;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC;AAkB7D,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU,CAAC;AAE3C,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,OAAO,KAAK,CAAC,eAAe,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AACzF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AAED,+DAA+D;AAC/D,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,IAAI,SAAkB,CAAC;IACvB,IAAI,CAAC;QACH,0EAA0E;QAC1E,kDAAkD;QAClD,MAAM,WAAW,GAAW,YAAY,CAAC;QACzC,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACxC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,wBAAwB,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,IAAI,CAAC;IACjG,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAC3B,EAAE,EAAE,oBAAoB;QACxB,cAAc,EAAE,0BAA0B;QAC1C,gBAAgB,EAAE,4BAA4B;QAC9C,IAAI,CAAC,QAAiC;YACpC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { SqliteDatabase } from '../db/adapter.js';
|
|
2
|
+
import type { EmbeddingProfile, LocalEmbeddingProfile } from './types.js';
|
|
3
|
+
export interface EmbeddingRuntimeState {
|
|
4
|
+
readonly activeProfileId: string | null;
|
|
5
|
+
readonly generation: number;
|
|
6
|
+
readonly activatedAt: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface ActiveEmbeddingProfile {
|
|
9
|
+
readonly profile: EmbeddingProfile;
|
|
10
|
+
readonly generation: number;
|
|
11
|
+
readonly activatedAt: string;
|
|
12
|
+
}
|
|
13
|
+
export interface ActivateEmbeddingProfileOptions {
|
|
14
|
+
readonly replace: boolean;
|
|
15
|
+
readonly now?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface EmbeddingProfileActivation {
|
|
18
|
+
readonly profileId: string;
|
|
19
|
+
readonly generation: number;
|
|
20
|
+
readonly activated: boolean;
|
|
21
|
+
readonly enqueued: number;
|
|
22
|
+
}
|
|
23
|
+
export interface CurrentEntryEmbeddingJobInput {
|
|
24
|
+
readonly entryId: string;
|
|
25
|
+
readonly revision: number;
|
|
26
|
+
readonly contentHash: string;
|
|
27
|
+
readonly now: string;
|
|
28
|
+
}
|
|
29
|
+
export interface EntryEmbeddingInput {
|
|
30
|
+
readonly entryId: string;
|
|
31
|
+
readonly profileId: string;
|
|
32
|
+
readonly revision: number;
|
|
33
|
+
readonly contentHash: string;
|
|
34
|
+
readonly documentHash: string;
|
|
35
|
+
readonly vector: Float32Array | readonly number[];
|
|
36
|
+
readonly createdAt: string;
|
|
37
|
+
}
|
|
38
|
+
export interface StoredEntryEmbedding {
|
|
39
|
+
readonly entryId: string;
|
|
40
|
+
readonly profileId: string;
|
|
41
|
+
readonly revision: number;
|
|
42
|
+
readonly contentHash: string;
|
|
43
|
+
readonly documentHash: string;
|
|
44
|
+
readonly dimensions: number;
|
|
45
|
+
readonly vector: Float32Array;
|
|
46
|
+
readonly vectorHash: string;
|
|
47
|
+
readonly createdAt: string;
|
|
48
|
+
}
|
|
49
|
+
export declare function readEmbeddingProfile(database: SqliteDatabase, profileId: string): EmbeddingProfile | undefined;
|
|
50
|
+
export declare function readEmbeddingRuntimeState(database: SqliteDatabase): EmbeddingRuntimeState;
|
|
51
|
+
export declare function readActiveEmbeddingProfile(database: SqliteDatabase): ActiveEmbeddingProfile | null;
|
|
52
|
+
/** Enqueue the current entry revision for the active profile inside its caller-owned transaction. */
|
|
53
|
+
export declare function enqueueCurrentEntryEmbeddingInTransaction(database: SqliteDatabase, input: CurrentEntryEmbeddingJobInput): void;
|
|
54
|
+
/** Enqueue every current entry for an already-installed active profile. */
|
|
55
|
+
export declare function enqueueAllCurrentEntryEmbeddingsInTransaction(database: SqliteDatabase, requestedNow?: string, requestedWorkspace?: string): number;
|
|
56
|
+
export declare function activateEmbeddingProfileInTransaction(database: SqliteDatabase, profile: EmbeddingProfile, options: ActivateEmbeddingProfileOptions): EmbeddingProfileActivation;
|
|
57
|
+
export declare function activateEmbeddingProfile(database: SqliteDatabase, profile: EmbeddingProfile, options: ActivateEmbeddingProfileOptions): EmbeddingProfileActivation;
|
|
58
|
+
export declare function activateLocalEmbeddingProfileInTransaction(database: SqliteDatabase, profile: LocalEmbeddingProfile, options: ActivateEmbeddingProfileOptions): EmbeddingProfileActivation;
|
|
59
|
+
export declare function activateLocalEmbeddingProfile(database: SqliteDatabase, profile: LocalEmbeddingProfile, options: ActivateEmbeddingProfileOptions): EmbeddingProfileActivation;
|
|
60
|
+
export declare function upsertEntryEmbeddingInTransaction(database: SqliteDatabase, input: EntryEmbeddingInput): void;
|
|
61
|
+
export declare function upsertEntryEmbedding(database: SqliteDatabase, input: EntryEmbeddingInput): void;
|
|
62
|
+
export declare function readEntryEmbedding(database: SqliteDatabase, input: {
|
|
63
|
+
entryId: string;
|
|
64
|
+
profileId: string;
|
|
65
|
+
}): StoredEntryEmbedding | undefined;
|
|
66
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/embedding/store.ts"],"names":[],"mappings":"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"}
|