@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/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-CI2Ob-G8.js"></script>
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.49",
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.3",
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
+ $$;