vectra-client 1.0.6 → 1.0.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.
@@ -0,0 +1,215 @@
1
+ ---
2
+ layout: page
3
+ title: FAQ
4
+ permalink: /guides/faq/
5
+ ---
6
+
7
+ # FAQ
8
+
9
+ Najčešća pitanja i kratki odgovori oko korištenja Vectre u produkciji.
10
+
11
+ ---
12
+
13
+ ## 1. Koju dimenziju (dimension) trebam koristiti?
14
+
15
+ **Kratko:** Uskladi `dimension` s modelom kojim generiraš embeddings.
16
+
17
+ - OpenAI `text-embedding-3-small` → 1536 dimenzija
18
+ - OpenAI `text-embedding-3-large` → 3072 dimenzija
19
+ - Cohere `embed-english-v3.0` → 1024 dimenzija
20
+
21
+ U Rails modelu / generatoru:
22
+
23
+ ```ruby
24
+ has_vector :embedding,
25
+ dimension: 1536
26
+ ```
27
+
28
+ Ako dimenzija ne odgovara, Vectra će baciti **ValidationError** pri upsertu.
29
+
30
+ ---
31
+
32
+ ## 2. Kad koristiti pgvector, a kad Qdrant / Pinecone / Weaviate?
33
+
34
+ **Pgvector (PostgreSQL):**
35
+ - Imaš već PostgreSQL i želiš **minimalne dodatne servise**
36
+ - Želiš **SQL** i ACID transakcije
37
+ - Dataset je srednje veličine (do par milijuna vektora)
38
+
39
+ **Qdrant:**
40
+ - Želiš **open source** i **self-hosted** rješenje
41
+ - Trebaš napredne filtere i dobar performance
42
+ - Želiš i opciju clouda (Qdrant Cloud)
43
+
44
+ **Pinecone:**
45
+ - Želiš **managed cloud** i "zero ops"
46
+ - Veći volumeni podataka, multi-region, SLA
47
+
48
+ **Weaviate:**
49
+ - Hoćeš **AI-native** vektorsku bazu s ugrađenim vektorizatorima
50
+ - Želiš GraphQL API i bogat schema model
51
+
52
+ Detaljnije usporedbe imaš i na [homepage-u](https://vectra-docs.netlify.app/api/methods).
53
+
54
+ ---
55
+
56
+ ## 3. Kako spremati embeddings – trebam li ih normalizirati?
57
+
58
+ Preporuka:
59
+
60
+ - Normaliziraj vektore na L2 normu prije spremanja (bolja stabilnost cosine sličnosti)
61
+
62
+ ```ruby
63
+ embedding = EmbeddingService.generate(text)
64
+ normalized = Vectra::Vector.normalize(embedding)
65
+
66
+ client.upsert(
67
+ index: 'documents',
68
+ vectors: [
69
+ { id: 'doc-1', values: normalized, metadata: { title: 'Hello' } }
70
+ ]
71
+ )
72
+ ```
73
+
74
+ Ako koristiš pgvector i želiš direktan `cosine` / `inner product` preko SQL-a, i dalje je dobra praksa normalizirati embeddinge na aplikacijskoj strani.
75
+
76
+ ---
77
+
78
+ ## 4. Zašto ne dobivam nikakve rezultate iz pretrage?
79
+
80
+ Najčešći razlozi:
81
+
82
+ 1. **Krivi index ili namespace**
83
+ - Provjeri da koristiš isti `index` i `namespace` kod `upsert` i `query`
84
+
85
+ 2. **Filter previše restriktivan**
86
+ - Probaj maknuti `filter` i vidjeti dobivaš li rezultate
87
+
88
+ 3. **Dimenzija ne odgovara**
89
+ - Ako je `dimension` u bazi 1536, a šalješ vektor s npr. 1024 elemenata → provider će baciti grešku ili ignorirati upit
90
+
91
+ 4. **Embedding funkcija ne vraća ono što misliš**
92
+ - U testu ispiši prvih par elemenata i dužinu vektora
93
+
94
+ ---
95
+
96
+ ## 5. Kako odabrati metricu sličnosti (cosine / dot / L2)?
97
+
98
+ Vectra ti apstrahira metricu, ali provider ispod može koristiti različite metrike.
99
+
100
+ Praktično:
101
+
102
+ - Za većinu use-caseova → **cosine** ili **dot product** (na normaliziranim vektorima)
103
+ - Pgvector: koristi `cosine` ili `<->` operator, ali Vectra to sakriva iza unified API-ja
104
+
105
+ Ako nisi siguran, koristi default provider metricu + normalizirane embeddinge.
106
+
107
+ ---
108
+
109
+ ## 6. Kako razdvojiti tenant-e (multi-tenant SaaS)?
110
+
111
+ Koristi kombinaciju **namespace** + **metadata filter**:
112
+
113
+ ```ruby
114
+ # Upsert
115
+ client.upsert(
116
+ index: 'documents',
117
+ vectors: [
118
+ { id: 'doc-1', values: embedding, metadata: { tenant_id: tenant.id } }
119
+ ],
120
+ namespace: "tenant_#{tenant.id}"
121
+ )
122
+
123
+ # Query
124
+ client.query(
125
+ index: 'documents',
126
+ vector: query_embedding,
127
+ namespace: "tenant_#{tenant.id}",
128
+ filter: { tenant_id: tenant.id }
129
+ )
130
+ ```
131
+
132
+ Za konkretan primjer pogledaj [Recipes & Patterns](/guides/recipes/#multi-tenant-saas-namespace-isolation).
133
+
134
+ ---
135
+
136
+ ## 7. Kako testirati bez pravog providera?
137
+
138
+ Koristi **Memory provider** (`:memory`):
139
+
140
+ - U test environmentu:
141
+
142
+ ```ruby
143
+ Vectra.configure do |config|
144
+ config.provider = :memory if Rails.env.test?
145
+ end
146
+ ```
147
+
148
+ - Ili direktno u RSpec-u:
149
+
150
+ ```ruby
151
+ let(:client) { Vectra.memory }
152
+ ```
153
+
154
+ Detaljan vodič: [Testing Guide](/guides/testing/).
155
+
156
+ ---
157
+
158
+ ## 8. Koje health checkove trebam za production?
159
+
160
+ Minimalno:
161
+
162
+ - `client.healthy?` u background jobu ili health endpointu
163
+ - `client.ping` za mjerenje latencije
164
+
165
+ Primjer Rails endpointa:
166
+
167
+ ```ruby
168
+ class HealthController < ApplicationController
169
+ def vectra
170
+ status = Vectra::Client.new.ping
171
+
172
+ if status[:healthy]
173
+ render json: status
174
+ else
175
+ render json: status, status: :service_unavailable
176
+ end
177
+ rescue => e
178
+ render json: { healthy: false, error: e.message }, status: :service_unavailable
179
+ end
180
+ end
181
+ ```
182
+
183
+ Više u [Monitoring & Observability](/guides/monitoring/).
184
+
185
+ ---
186
+
187
+ ## 9. Kada koristiti batch upsert umjesto pojedinačnih poziva?
188
+
189
+ Uvijek kad:
190
+
191
+ - Imaš **više od ~20 vektora odjednom**
192
+ - Radiš inicijalni import (npr. 1000+ proizvoda)
193
+
194
+ ```ruby
195
+ Vectra::Batch.upsert(
196
+ client: client,
197
+ index: 'products',
198
+ vectors: product_vectors,
199
+ batch_size: 100,
200
+ on_progress: ->(batch_index, total_batches, batch_count) do
201
+ Rails.logger.info "Batch #{batch_index + 1}/#{total_batches} (#{batch_count} vectors)"
202
+ end
203
+ )
204
+ ```
205
+
206
+ ---
207
+
208
+ ## 10. Kako izabrati pravog providera za moj use-case?
209
+
210
+ Pogledaj [Provider Selection Guide](/providers/selection/) za konkretne scenarije:
211
+
212
+ - "Imam samo Postgres" → pgvector
213
+ - "Želim managed cloud" → Pinecone
214
+ - "Hoću OSS i da se mogu sam hostati" → Qdrant / Weaviate
215
+