vectra-client 0.2.1 → 0.3.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.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +77 -37
  3. data/CHANGELOG.md +49 -6
  4. data/README.md +52 -393
  5. data/docs/Gemfile +9 -0
  6. data/docs/_config.yml +37 -0
  7. data/docs/_layouts/default.html +14 -0
  8. data/docs/_layouts/home.html +187 -0
  9. data/docs/_layouts/page.html +82 -0
  10. data/docs/_site/api/overview/index.html +145 -0
  11. data/docs/_site/assets/main.css +649 -0
  12. data/docs/_site/assets/main.css.map +1 -0
  13. data/docs/_site/assets/minima-social-icons.svg +33 -0
  14. data/docs/_site/assets/style.css +295 -0
  15. data/docs/_site/community/contributing/index.html +110 -0
  16. data/docs/_site/examples/basic-usage/index.html +117 -0
  17. data/docs/_site/examples/index.html +58 -0
  18. data/docs/_site/feed.xml +1 -0
  19. data/docs/_site/guides/getting-started/index.html +106 -0
  20. data/docs/_site/guides/installation/index.html +82 -0
  21. data/docs/_site/index.html +92 -0
  22. data/docs/_site/providers/index.html +119 -0
  23. data/docs/_site/providers/pgvector/index.html +155 -0
  24. data/docs/_site/providers/pinecone/index.html +121 -0
  25. data/docs/_site/providers/qdrant/index.html +124 -0
  26. data/docs/_site/providers/weaviate/index.html +123 -0
  27. data/docs/_site/robots.txt +1 -0
  28. data/docs/_site/sitemap.xml +39 -0
  29. data/docs/api/overview.md +126 -0
  30. data/docs/assets/style.css +927 -0
  31. data/docs/community/contributing.md +89 -0
  32. data/docs/examples/basic-usage.md +102 -0
  33. data/docs/examples/index.md +54 -0
  34. data/docs/guides/getting-started.md +90 -0
  35. data/docs/guides/installation.md +67 -0
  36. data/docs/guides/performance.md +200 -0
  37. data/docs/index.md +37 -0
  38. data/docs/providers/index.md +81 -0
  39. data/docs/providers/pgvector.md +95 -0
  40. data/docs/providers/pinecone.md +72 -0
  41. data/docs/providers/qdrant.md +73 -0
  42. data/docs/providers/weaviate.md +72 -0
  43. data/lib/vectra/batch.rb +148 -0
  44. data/lib/vectra/cache.rb +261 -0
  45. data/lib/vectra/configuration.rb +6 -1
  46. data/lib/vectra/pool.rb +256 -0
  47. data/lib/vectra/streaming.rb +153 -0
  48. data/lib/vectra/version.rb +1 -1
  49. data/lib/vectra.rb +4 -0
  50. data/netlify.toml +12 -0
  51. metadata +58 -5
  52. data/IMPLEMENTATION_GUIDE.md +0 -686
  53. data/NEW_FEATURES_v0.2.0.md +0 -459
  54. data/RELEASE_CHECKLIST_v0.2.0.md +0 -383
  55. data/USAGE_EXAMPLES.md +0 -787
@@ -0,0 +1,106 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>Getting Started - Vectra Documentation</title>
5
+ <link rel="stylesheet" href="/assets/style.css">
6
+ </head>
7
+
8
+ <body>
9
+ <div class="site-header">
10
+ <nav class="site-nav">
11
+ <div class="nav-container">
12
+ <a href="/" class="nav-brand">Vectra</a>
13
+ <ul class="nav-menu">
14
+ <li><a href="/guides/installation" class="nav-link">Guides</a></li>
15
+ <li><a href="/api/overview" class="nav-link">API</a></li>
16
+ <li><a href="/providers" class="nav-link">Providers</a></li>
17
+ <li><a href="/examples" class="nav-link">Examples</a></li>
18
+ <li><a href="https://github.com/stokry/vectra" target="_blank" class="nav-link">GitHub</a></li>
19
+ </ul>
20
+ </div>
21
+ </nav>
22
+ </div>
23
+
24
+ <h1 id="getting-started-with-vectra">Getting Started with Vectra</h1>
25
+
26
+ <h2 id="initialize-a-client">Initialize a Client</h2>
27
+
28
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">require</span> <span class="s1">'vectra'</span>
29
+
30
+ <span class="c1"># Initialize with Pinecone</span>
31
+ <span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span>
32
+ <span class="ss">provider: :pinecone</span><span class="p">,</span>
33
+ <span class="ss">api_key: </span><span class="no">ENV</span><span class="p">[</span><span class="s1">'PINECONE_API_KEY'</span><span class="p">],</span>
34
+ <span class="ss">environment: </span><span class="s1">'us-west-4'</span>
35
+ <span class="p">)</span>
36
+ </code></pre></div></div>
37
+
38
+ <h2 id="basic-operations">Basic Operations</h2>
39
+
40
+ <h3 id="upsert-vectors">Upsert Vectors</h3>
41
+
42
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">client</span><span class="p">.</span><span class="nf">upsert</span><span class="p">(</span>
43
+ <span class="ss">vectors: </span><span class="p">[</span>
44
+ <span class="p">{</span>
45
+ <span class="ss">id: </span><span class="s1">'vec-1'</span><span class="p">,</span>
46
+ <span class="ss">values: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span>
47
+ <span class="ss">metadata: </span><span class="p">{</span> <span class="ss">title: </span><span class="s1">'Document 1'</span> <span class="p">}</span>
48
+ <span class="p">},</span>
49
+ <span class="p">{</span>
50
+ <span class="ss">id: </span><span class="s1">'vec-2'</span><span class="p">,</span>
51
+ <span class="ss">values: </span><span class="p">[</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">,</span> <span class="mf">0.4</span><span class="p">],</span>
52
+ <span class="ss">metadata: </span><span class="p">{</span> <span class="ss">title: </span><span class="s1">'Document 2'</span> <span class="p">}</span>
53
+ <span class="p">}</span>
54
+ <span class="p">]</span>
55
+ <span class="p">)</span>
56
+ </code></pre></div></div>
57
+
58
+ <h3 id="query-search">Query (Search)</h3>
59
+
60
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">results</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span>
61
+ <span class="ss">vector: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span>
62
+ <span class="ss">top_k: </span><span class="mi">5</span><span class="p">,</span>
63
+ <span class="ss">include_metadata: </span><span class="kp">true</span>
64
+ <span class="p">)</span>
65
+
66
+ <span class="n">results</span><span class="p">.</span><span class="nf">matches</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">match</span><span class="o">|</span>
67
+ <span class="nb">puts</span> <span class="s2">"ID: </span><span class="si">#{</span><span class="n">match</span><span class="p">[</span><span class="s1">'id'</span><span class="p">]</span><span class="si">}</span><span class="s2">, Score: </span><span class="si">#{</span><span class="n">match</span><span class="p">[</span><span class="s1">'score'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
68
+ <span class="k">end</span>
69
+ </code></pre></div></div>
70
+
71
+ <h3 id="delete-vectors">Delete Vectors</h3>
72
+
73
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">client</span><span class="p">.</span><span class="nf">delete</span><span class="p">(</span><span class="ss">ids: </span><span class="p">[</span><span class="s1">'vec-1'</span><span class="p">,</span> <span class="s1">'vec-2'</span><span class="p">])</span>
74
+ </code></pre></div></div>
75
+
76
+ <h3 id="get-vector-stats">Get Vector Stats</h3>
77
+
78
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">stats</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">stats</span>
79
+ <span class="nb">puts</span> <span class="s2">"Index dimension: </span><span class="si">#{</span><span class="n">stats</span><span class="p">[</span><span class="s1">'dimension'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
80
+ <span class="nb">puts</span> <span class="s2">"Vector count: </span><span class="si">#{</span><span class="n">stats</span><span class="p">[</span><span class="s1">'vector_count'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span>
81
+ </code></pre></div></div>
82
+
83
+ <h2 id="configuration">Configuration</h2>
84
+
85
+ <p>Create a configuration file (Rails: <code class="language-plaintext highlighter-rouge">config/initializers/vectra.rb</code>):</p>
86
+
87
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="no">Vectra</span><span class="p">.</span><span class="nf">configure</span> <span class="k">do</span> <span class="o">|</span><span class="n">config</span><span class="o">|</span>
88
+ <span class="n">config</span><span class="p">.</span><span class="nf">provider</span> <span class="o">=</span> <span class="ss">:pinecone</span>
89
+ <span class="n">config</span><span class="p">.</span><span class="nf">api_key</span> <span class="o">=</span> <span class="no">ENV</span><span class="p">[</span><span class="s1">'PINECONE_API_KEY'</span><span class="p">]</span>
90
+ <span class="n">config</span><span class="p">.</span><span class="nf">environment</span> <span class="o">=</span> <span class="s1">'us-west-4'</span>
91
+ <span class="k">end</span>
92
+
93
+ <span class="c1"># Later in your code:</span>
94
+ <span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span>
95
+ </code></pre></div></div>
96
+
97
+ <h2 id="next-steps">Next Steps</h2>
98
+
99
+ <ul>
100
+ <li><a href="/api/overview">API Reference</a></li>
101
+ <li><a href="/providers">Provider Guides</a></li>
102
+ <li><a href="/examples/basic-usage">Examples</a></li>
103
+ </ul>
104
+
105
+
106
+ </body>
@@ -0,0 +1,82 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>Installation - Vectra Documentation</title>
5
+ <link rel="stylesheet" href="/assets/style.css">
6
+ </head>
7
+
8
+ <body>
9
+ <div class="site-header">
10
+ <nav class="site-nav">
11
+ <div class="nav-container">
12
+ <a href="/" class="nav-brand">Vectra</a>
13
+ <ul class="nav-menu">
14
+ <li><a href="/guides/installation" class="nav-link">Guides</a></li>
15
+ <li><a href="/api/overview" class="nav-link">API</a></li>
16
+ <li><a href="/providers" class="nav-link">Providers</a></li>
17
+ <li><a href="/examples" class="nav-link">Examples</a></li>
18
+ <li><a href="https://github.com/stokry/vectra" target="_blank" class="nav-link">GitHub</a></li>
19
+ </ul>
20
+ </div>
21
+ </nav>
22
+ </div>
23
+
24
+ <h1 id="installation-guide">Installation Guide</h1>
25
+
26
+ <h2 id="requirements">Requirements</h2>
27
+
28
+ <ul>
29
+ <li>Ruby 3.2.0 or higher</li>
30
+ <li>Bundler</li>
31
+ </ul>
32
+
33
+ <h2 id="install-via-bundler">Install via Bundler</h2>
34
+
35
+ <p>Add Vectra to your Gemfile:</p>
36
+
37
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">gem</span> <span class="s1">'vectra-client'</span>
38
+ </code></pre></div></div>
39
+
40
+ <p>Then run:</p>
41
+
42
+ <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">install</span>
43
+ </code></pre></div></div>
44
+
45
+ <h2 id="install-standalone">Install Standalone</h2>
46
+
47
+ <p>Alternatively, install via RubyGems:</p>
48
+
49
+ <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem <span class="nb">install </span>vectra-client
50
+ </code></pre></div></div>
51
+
52
+ <h2 id="rails-integration">Rails Integration</h2>
53
+
54
+ <p>For Rails applications, run the install generator:</p>
55
+
56
+ <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>rails generate vectra:install
57
+ </code></pre></div></div>
58
+
59
+ <p>This will create an initializer file at <code class="language-plaintext highlighter-rouge">config/initializers/vectra.rb</code>.</p>
60
+
61
+ <h2 id="provider-specific-setup">Provider-Specific Setup</h2>
62
+
63
+ <p>Each vector database provider may require additional dependencies:</p>
64
+
65
+ <h3 id="postgresql-with-pgvector">PostgreSQL with pgvector</h3>
66
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">gem</span> <span class="s1">'pg'</span><span class="p">,</span> <span class="s1">'~&gt; 1.5'</span>
67
+ </code></pre></div></div>
68
+
69
+ <h3 id="instrumentation">Instrumentation</h3>
70
+
71
+ <h4 id="datadog">Datadog</h4>
72
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">gem</span> <span class="s1">'dogstatsd-ruby'</span>
73
+ </code></pre></div></div>
74
+
75
+ <h4 id="new-relic">New Relic</h4>
76
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">gem</span> <span class="s1">'newrelic_rpm'</span>
77
+ </code></pre></div></div>
78
+
79
+ <p>See <a href="/providers">Provider Guides</a> for detailed setup instructions.</p>
80
+
81
+
82
+ </body>
@@ -0,0 +1,92 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>Vectra - Vectra Documentation</title>
5
+ <link rel="stylesheet" href="/assets/style.css">
6
+ </head>
7
+
8
+ <body>
9
+ <div class="site-header">
10
+ <nav class="site-nav">
11
+ <div class="nav-container">
12
+ <a href="/" class="nav-brand">Vectra</a>
13
+ <ul class="nav-menu">
14
+ <li><a href="/guides/installation" class="nav-link">Guides</a></li>
15
+ <li><a href="/api/overview" class="nav-link">API</a></li>
16
+ <li><a href="/providers" class="nav-link">Providers</a></li>
17
+ <li><a href="/examples" class="nav-link">Examples</a></li>
18
+ <li><a href="https://github.com/stokry/vectra" target="_blank" class="nav-link">GitHub</a></li>
19
+ </ul>
20
+ </div>
21
+ </nav>
22
+ </div>
23
+
24
+ <main class="site-main home-main">
25
+ <h1 id="welcome-to-vectra-documentation">Welcome to Vectra Documentation</h1>
26
+
27
+ <p><strong>Vectra</strong> is a unified Ruby client for vector databases that allows you to write once and switch providers easily.</p>
28
+
29
+ <h2 id="supported-vector-databases">Supported Vector Databases</h2>
30
+
31
+ <ul>
32
+ <li><strong>Pinecone</strong> - Managed vector database in the cloud</li>
33
+ <li><strong>Qdrant</strong> - Open-source vector database</li>
34
+ <li><strong>Weaviate</strong> - Open-source vector search engine</li>
35
+ <li><strong>PostgreSQL with pgvector</strong> - SQL database with vector support</li>
36
+ </ul>
37
+
38
+ <h2 id="quick-links">Quick Links</h2>
39
+
40
+ <ul>
41
+ <li><a href="/guides/installation">Installation Guide</a></li>
42
+ <li><a href="/guides/getting-started">Getting Started</a></li>
43
+ <li><a href="/api/overview">API Reference</a></li>
44
+ <li><a href="/examples/basic-usage">Examples</a></li>
45
+ <li><a href="/community/contributing">Contributing</a></li>
46
+ </ul>
47
+
48
+ <h2 id="key-features">Key Features</h2>
49
+
50
+ <ul>
51
+ <li>🔄 <strong>Provider Agnostic</strong> - Switch between different vector database providers with minimal code changes</li>
52
+ <li>🚀 <strong>Easy Integration</strong> - Works seamlessly with Rails and other Ruby frameworks</li>
53
+ <li>📊 <strong>Vector Operations</strong> - Create, search, update, and delete vectors</li>
54
+ <li>🔌 <strong>Multiple Providers</strong> - Support for leading vector database platforms</li>
55
+ <li>📈 <strong>Instrumentation</strong> - Built-in support for Datadog and New Relic monitoring</li>
56
+ <li>🗄️ <strong>ActiveRecord Integration</strong> - Native support for Rails models</li>
57
+ </ul>
58
+
59
+ <h2 id="get-started">Get Started</h2>
60
+
61
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">require</span> <span class="s1">'vectra'</span>
62
+
63
+ <span class="c1"># Initialize client</span>
64
+ <span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">provider: :pinecone</span><span class="p">,</span> <span class="ss">api_key: </span><span class="s1">'your-key'</span><span class="p">)</span>
65
+
66
+ <span class="c1"># Upsert vectors</span>
67
+ <span class="n">client</span><span class="p">.</span><span class="nf">upsert</span><span class="p">(</span>
68
+ <span class="ss">vectors: </span><span class="p">[</span>
69
+ <span class="p">{</span> <span class="ss">id: </span><span class="s1">'1'</span><span class="p">,</span> <span class="ss">values: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span> <span class="ss">metadata: </span><span class="p">{</span> <span class="ss">text: </span><span class="s1">'example'</span> <span class="p">}</span> <span class="p">}</span>
70
+ <span class="p">]</span>
71
+ <span class="p">)</span>
72
+
73
+ <span class="c1"># Search</span>
74
+ <span class="n">results</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span><span class="ss">vector: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span> <span class="ss">top_k: </span><span class="mi">5</span><span class="p">)</span>
75
+ </code></pre></div></div>
76
+
77
+ <p>For more detailed examples, see <a href="/examples/basic-usage">Basic Usage</a>.</p>
78
+
79
+ </main>
80
+
81
+ <footer class="site-footer">
82
+ <div class="footer-content">
83
+ <p>&copy; 2024 Vectra. MIT License.</p>
84
+ <ul class="footer-links">
85
+ <li><a href="https://github.com/stokry/vectra">GitHub</a></li>
86
+ <li><a href="https://rubygems.org/gems/vectra-client">RubyGems</a></li>
87
+ <li><a href="/community/contributing">Contributing</a></li>
88
+ </ul>
89
+ </div>
90
+ </footer>
91
+
92
+ </body>
@@ -0,0 +1,119 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>Providers - Vectra Documentation</title>
5
+ <link rel="stylesheet" href="/assets/style.css">
6
+ </head>
7
+
8
+ <body>
9
+ <div class="site-header">
10
+ <nav class="site-nav">
11
+ <div class="nav-container">
12
+ <a href="/" class="nav-brand">Vectra</a>
13
+ <ul class="nav-menu">
14
+ <li><a href="/guides/installation" class="nav-link">Guides</a></li>
15
+ <li><a href="/api/overview" class="nav-link">API</a></li>
16
+ <li><a href="/providers" class="nav-link">Providers</a></li>
17
+ <li><a href="/examples" class="nav-link">Examples</a></li>
18
+ <li><a href="https://github.com/stokry/vectra" target="_blank" class="nav-link">GitHub</a></li>
19
+ </ul>
20
+ </div>
21
+ </nav>
22
+ </div>
23
+
24
+ <h1 id="vector-database-providers">Vector Database Providers</h1>
25
+
26
+ <p>Vectra supports multiple vector database providers. Choose the one that best fits your needs:</p>
27
+
28
+ <h2 id="supported-providers">Supported Providers</h2>
29
+
30
+ <table>
31
+ <thead>
32
+ <tr>
33
+ <th>Provider</th>
34
+ <th>Type</th>
35
+ <th>Best For</th>
36
+ <th>Documentation</th>
37
+ </tr>
38
+ </thead>
39
+ <tbody>
40
+ <tr>
41
+ <td><strong>Pinecone</strong></td>
42
+ <td>Managed Cloud</td>
43
+ <td>Production, Fully managed</td>
44
+ <td><a href="/providers/pinecone">Guide</a></td>
45
+ </tr>
46
+ <tr>
47
+ <td><strong>Qdrant</strong></td>
48
+ <td>Open Source</td>
49
+ <td>Self-hosted, High performance</td>
50
+ <td><a href="/providers/qdrant">Guide</a></td>
51
+ </tr>
52
+ <tr>
53
+ <td><strong>Weaviate</strong></td>
54
+ <td>Open Source</td>
55
+ <td>Semantic search, GraphQL</td>
56
+ <td><a href="/providers/weaviate">Guide</a></td>
57
+ </tr>
58
+ <tr>
59
+ <td><strong>PostgreSQL + pgvector</strong></td>
60
+ <td>SQL Database</td>
61
+ <td>SQL integration, ACID</td>
62
+ <td><a href="/providers/pgvector">Guide</a></td>
63
+ </tr>
64
+ </tbody>
65
+ </table>
66
+
67
+ <h2 id="quick-comparison">Quick Comparison</h2>
68
+
69
+ <h3 id="pinecone">Pinecone</h3>
70
+ <ul>
71
+ <li>✅ Fully managed service</li>
72
+ <li>✅ Easy setup</li>
73
+ <li>✅ Scalable</li>
74
+ <li>❌ Cloud only</li>
75
+ <li>❌ Paid service</li>
76
+ </ul>
77
+
78
+ <h3 id="qdrant">Qdrant</h3>
79
+ <ul>
80
+ <li>✅ Open source</li>
81
+ <li>✅ Self-hosted</li>
82
+ <li>✅ High performance</li>
83
+ <li>✅ Multiple deployment options</li>
84
+ <li>❌ More configuration needed</li>
85
+ </ul>
86
+
87
+ <h3 id="weaviate">Weaviate</h3>
88
+ <ul>
89
+ <li>✅ Open source</li>
90
+ <li>✅ Semantic search</li>
91
+ <li>✅ GraphQL API</li>
92
+ <li>✅ Multi-model support</li>
93
+ <li>❌ More complex</li>
94
+ </ul>
95
+
96
+ <h3 id="postgresql--pgvector">PostgreSQL + pgvector</h3>
97
+ <ul>
98
+ <li>✅ SQL database</li>
99
+ <li>✅ ACID transactions</li>
100
+ <li>✅ Existing infrastructure</li>
101
+ <li>✅ Affordable</li>
102
+ <li>❌ Not specialized for vectors</li>
103
+ </ul>
104
+
105
+ <h2 id="switching-providers">Switching Providers</h2>
106
+
107
+ <p>One of Vectra’s key features is easy provider switching:</p>
108
+
109
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># All it takes is changing one line!</span>
110
+ <span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">provider: :qdrant</span><span class="p">)</span>
111
+
112
+ <span class="c1"># All your code remains the same</span>
113
+ <span class="n">results</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span><span class="ss">vector: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">])</span>
114
+ </code></pre></div></div>
115
+
116
+ <p>See the <a href="/guides/getting-started">Getting Started Guide</a> for more information.</p>
117
+
118
+
119
+ </body>
@@ -0,0 +1,155 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <title>PostgreSQL with pgvector - Vectra Documentation</title>
5
+ <link rel="stylesheet" href="/assets/style.css">
6
+ </head>
7
+
8
+ <body>
9
+ <div class="site-header">
10
+ <nav class="site-nav">
11
+ <div class="nav-container">
12
+ <a href="/" class="nav-brand">Vectra</a>
13
+ <ul class="nav-menu">
14
+ <li><a href="/guides/installation" class="nav-link">Guides</a></li>
15
+ <li><a href="/api/overview" class="nav-link">API</a></li>
16
+ <li><a href="/providers" class="nav-link">Providers</a></li>
17
+ <li><a href="/examples" class="nav-link">Examples</a></li>
18
+ <li><a href="https://github.com/stokry/vectra" target="_blank" class="nav-link">GitHub</a></li>
19
+ </ul>
20
+ </div>
21
+ </nav>
22
+ </div>
23
+
24
+ <h1 id="postgresql-with-pgvector-provider">PostgreSQL with pgvector Provider</h1>
25
+
26
+ <p><a href="https://github.com/pgvector/pgvector">pgvector</a> is a PostgreSQL extension for vector data.</p>
27
+
28
+ <h2 id="setup">Setup</h2>
29
+
30
+ <h3 id="prerequisites">Prerequisites</h3>
31
+
32
+ <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Install PostgreSQL with pgvector extension</span>
33
+ <span class="c"># macOS with Homebrew</span>
34
+ brew <span class="nb">install </span>postgresql
35
+
36
+ <span class="c"># Enable pgvector extension</span>
37
+ psql <span class="nt">-d</span> your_database <span class="nt">-c</span> <span class="s2">"CREATE EXTENSION IF NOT EXISTS vector;"</span>
38
+ </code></pre></div></div>
39
+
40
+ <h3 id="connect-with-vectra">Connect with Vectra</h3>
41
+
42
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span>
43
+ <span class="ss">provider: :pgvector</span><span class="p">,</span>
44
+ <span class="ss">database: </span><span class="s1">'my_database'</span><span class="p">,</span>
45
+ <span class="ss">host: </span><span class="s1">'localhost'</span><span class="p">,</span>
46
+ <span class="ss">port: </span><span class="mi">5432</span><span class="p">,</span>
47
+ <span class="ss">user: </span><span class="s1">'postgres'</span><span class="p">,</span>
48
+ <span class="ss">password: </span><span class="no">ENV</span><span class="p">[</span><span class="s1">'DB_PASSWORD'</span><span class="p">]</span>
49
+ <span class="p">)</span>
50
+ </code></pre></div></div>
51
+
52
+ <h2 id="features">Features</h2>
53
+
54
+ <ul>
55
+ <li>✅ Upsert vectors</li>
56
+ <li>✅ Query/search</li>
57
+ <li>✅ Delete vectors</li>
58
+ <li>✅ SQL integration</li>
59
+ <li>✅ ACID transactions</li>
60
+ <li>✅ Complex queries</li>
61
+ <li>✅ Rails ActiveRecord integration</li>
62
+ </ul>
63
+
64
+ <h2 id="example">Example</h2>
65
+
66
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># Initialize client</span>
67
+ <span class="n">client</span> <span class="o">=</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">Client</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span>
68
+ <span class="ss">provider: :pgvector</span><span class="p">,</span>
69
+ <span class="ss">database: </span><span class="s1">'vectors_db'</span><span class="p">,</span>
70
+ <span class="ss">host: </span><span class="s1">'localhost'</span>
71
+ <span class="p">)</span>
72
+
73
+ <span class="c1"># Upsert vectors</span>
74
+ <span class="n">client</span><span class="p">.</span><span class="nf">upsert</span><span class="p">(</span>
75
+ <span class="ss">vectors: </span><span class="p">[</span>
76
+ <span class="p">{</span> <span class="ss">id: </span><span class="s1">'doc-1'</span><span class="p">,</span> <span class="ss">values: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span> <span class="ss">metadata: </span><span class="p">{</span> <span class="ss">title: </span><span class="s1">'Doc 1'</span> <span class="p">}</span> <span class="p">}</span>
77
+ <span class="p">]</span>
78
+ <span class="p">)</span>
79
+
80
+ <span class="c1"># Search using cosine distance</span>
81
+ <span class="n">results</span> <span class="o">=</span> <span class="n">client</span><span class="p">.</span><span class="nf">query</span><span class="p">(</span><span class="ss">vector: </span><span class="p">[</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span> <span class="ss">top_k: </span><span class="mi">5</span><span class="p">)</span>
82
+ </code></pre></div></div>
83
+
84
+ <h2 id="activerecord-integration">ActiveRecord Integration</h2>
85
+
86
+ <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Document</span> <span class="o">&lt;</span> <span class="no">ApplicationRecord</span>
87
+ <span class="kp">include</span> <span class="no">Vectra</span><span class="o">::</span><span class="no">ActiveRecord</span>
88
+
89
+ <span class="n">vector_search</span> <span class="ss">:embedding_vector</span>
90
+ <span class="k">end</span>
91
+
92
+ <span class="c1"># Search</span>
93
+ <span class="n">docs</span> <span class="o">=</span> <span class="no">Document</span><span class="p">.</span><span class="nf">vector_search</span><span class="p">([</span><span class="mf">0.1</span><span class="p">,</span> <span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.3</span><span class="p">],</span> <span class="ss">limit: </span><span class="mi">10</span><span class="p">)</span>
94
+ </code></pre></div></div>
95
+
96
+ <h2 id="configuration-options">Configuration Options</h2>
97
+
98
+ <table>
99
+ <thead>
100
+ <tr>
101
+ <th>Option</th>
102
+ <th>Type</th>
103
+ <th>Required</th>
104
+ <th>Description</th>
105
+ </tr>
106
+ </thead>
107
+ <tbody>
108
+ <tr>
109
+ <td><code class="language-plaintext highlighter-rouge">database</code></td>
110
+ <td>String</td>
111
+ <td>Yes</td>
112
+ <td>Database name</td>
113
+ </tr>
114
+ <tr>
115
+ <td><code class="language-plaintext highlighter-rouge">host</code></td>
116
+ <td>String</td>
117
+ <td>Yes</td>
118
+ <td>PostgreSQL host</td>
119
+ </tr>
120
+ <tr>
121
+ <td><code class="language-plaintext highlighter-rouge">port</code></td>
122
+ <td>Integer</td>
123
+ <td>No</td>
124
+ <td>PostgreSQL port (default: 5432)</td>
125
+ </tr>
126
+ <tr>
127
+ <td><code class="language-plaintext highlighter-rouge">user</code></td>
128
+ <td>String</td>
129
+ <td>No</td>
130
+ <td>Database user</td>
131
+ </tr>
132
+ <tr>
133
+ <td><code class="language-plaintext highlighter-rouge">password</code></td>
134
+ <td>String</td>
135
+ <td>No</td>
136
+ <td>Database password</td>
137
+ </tr>
138
+ <tr>
139
+ <td><code class="language-plaintext highlighter-rouge">schema</code></td>
140
+ <td>String</td>
141
+ <td>No</td>
142
+ <td>Database schema</td>
143
+ </tr>
144
+ </tbody>
145
+ </table>
146
+
147
+ <h2 id="documentation">Documentation</h2>
148
+
149
+ <ul>
150
+ <li><a href="https://github.com/pgvector/pgvector">pgvector GitHub</a></li>
151
+ <li><a href="https://github.com/pgvector/pgvector#readme">pgvector Docs</a></li>
152
+ </ul>
153
+
154
+
155
+ </body>