@realtimex/realtimex-alchemy 1.0.49 → 1.0.51
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/CHANGELOG.md +14 -0
- package/dist/api/services/AlchemistService.js +2 -2
- package/dist/api/services/ChatService.js +1 -1
- package/dist/api/services/DeduplicationService.js +1 -1
- package/dist/api/services/EmbeddingService.js +54 -34
- package/dist/api/services/SDKService.js +0 -1
- package/dist/assets/{index-CI2Ob-G8.js → index-Cb2XPDey.js} +27 -27
- package/dist/index.html +1 -1
- package/package.json +3 -3
- package/supabase/migrations/20260127000002_add_vector_storage.sql +67 -0
package/dist/index.html
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
10
10
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
11
11
|
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;700&family=Outfit:wght@300;400;600;800&display=swap" rel="stylesheet">
|
|
12
|
-
<script type="module" crossorigin src="/assets/index-
|
|
12
|
+
<script type="module" crossorigin src="/assets/index-Cb2XPDey.js"></script>
|
|
13
13
|
<link rel="stylesheet" crossorigin href="/assets/index-BcolxI8u.css">
|
|
14
14
|
</head>
|
|
15
15
|
<body>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@realtimex/realtimex-alchemy",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.51",
|
|
4
4
|
"description": "Passive Intelligence engine for RealTimeX Alchemy. Transmute your reading time into high-density insights.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/api/index.js",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@anthropic-ai/sdk": "^0.24.1",
|
|
45
45
|
"@mozilla/readability": "^0.6.0",
|
|
46
|
-
"@realtimex/sdk": "^1.1.
|
|
46
|
+
"@realtimex/sdk": "^1.1.4",
|
|
47
47
|
"@supabase/supabase-js": "^2.39.0",
|
|
48
48
|
"@types/jsdom": "^27.0.0",
|
|
49
49
|
"@types/mozilla-readability": "^0.2.1",
|
|
@@ -82,4 +82,4 @@
|
|
|
82
82
|
"typescript": "^5.3.3",
|
|
83
83
|
"vite": "^7.3.1"
|
|
84
84
|
}
|
|
85
|
-
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
-- Enable pgvector extension
|
|
2
|
+
CREATE EXTENSION IF NOT EXISTS vector;
|
|
3
|
+
|
|
4
|
+
-- Vectors table (separate from signals for flexibility)
|
|
5
|
+
CREATE TABLE alchemy_vectors (
|
|
6
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
7
|
+
signal_id UUID NOT NULL REFERENCES signals(id) ON DELETE CASCADE,
|
|
8
|
+
user_id UUID NOT NULL,
|
|
9
|
+
embedding vector(1536) NOT NULL, -- OpenAI text-embedding-3-small dimension
|
|
10
|
+
model TEXT NOT NULL DEFAULT 'text-embedding-3-small',
|
|
11
|
+
created_at TIMESTAMPTZ DEFAULT now(),
|
|
12
|
+
|
|
13
|
+
UNIQUE(signal_id, model)
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
-- Indexes
|
|
17
|
+
CREATE INDEX idx_vectors_user ON alchemy_vectors(user_id);
|
|
18
|
+
CREATE INDEX idx_vectors_signal ON alchemy_vectors(signal_id);
|
|
19
|
+
|
|
20
|
+
-- HNSW index for fast similarity search
|
|
21
|
+
CREATE INDEX idx_vectors_embedding ON alchemy_vectors
|
|
22
|
+
USING hnsw (embedding vector_cosine_ops);
|
|
23
|
+
|
|
24
|
+
-- RLS
|
|
25
|
+
ALTER TABLE alchemy_vectors ENABLE ROW LEVEL SECURITY;
|
|
26
|
+
|
|
27
|
+
CREATE POLICY "Users can manage their own vectors"
|
|
28
|
+
ON alchemy_vectors FOR ALL
|
|
29
|
+
USING (auth.uid() = user_id)
|
|
30
|
+
WITH CHECK (auth.uid() = user_id);
|
|
31
|
+
|
|
32
|
+
-- Similarity search function (called via supabase.rpc())
|
|
33
|
+
CREATE OR REPLACE FUNCTION match_vectors(
|
|
34
|
+
query_embedding vector(1536),
|
|
35
|
+
match_threshold FLOAT DEFAULT 0.5,
|
|
36
|
+
match_count INT DEFAULT 10,
|
|
37
|
+
target_user_id UUID DEFAULT auth.uid()
|
|
38
|
+
)
|
|
39
|
+
RETURNS TABLE (
|
|
40
|
+
id UUID,
|
|
41
|
+
signal_id UUID,
|
|
42
|
+
similarity FLOAT,
|
|
43
|
+
title TEXT,
|
|
44
|
+
summary TEXT,
|
|
45
|
+
url TEXT,
|
|
46
|
+
category TEXT
|
|
47
|
+
)
|
|
48
|
+
LANGUAGE plpgsql
|
|
49
|
+
AS $$
|
|
50
|
+
BEGIN
|
|
51
|
+
RETURN QUERY
|
|
52
|
+
SELECT
|
|
53
|
+
v.id,
|
|
54
|
+
v.signal_id,
|
|
55
|
+
(1 - (v.embedding <=> query_embedding))::FLOAT AS similarity,
|
|
56
|
+
s.title,
|
|
57
|
+
s.summary,
|
|
58
|
+
s.url,
|
|
59
|
+
s.category
|
|
60
|
+
FROM alchemy_vectors v
|
|
61
|
+
JOIN signals s ON s.id = v.signal_id
|
|
62
|
+
WHERE v.user_id = target_user_id
|
|
63
|
+
AND 1 - (v.embedding <=> query_embedding) > match_threshold
|
|
64
|
+
ORDER BY v.embedding <=> query_embedding
|
|
65
|
+
LIMIT match_count;
|
|
66
|
+
END;
|
|
67
|
+
$$;
|