diff --git a/README.md b/README.md
index bc09d38d99..633d04c723 100644
--- a/README.md
+++ b/README.md
@@ -185,7 +185,7 @@ import TSCode from '!!raw-loader!/_includes/code/howto/manage-data.create.ts';
text={TSCode}
startMarker="// ValidateObject START"
endMarker="// ValidateObject END"
- language="ts"
+ language="tsv2"
/>
diff --git a/_build_scripts/update-config-versions.js b/_build_scripts/update-config-versions.js
index add3353325..31aa4f392a 100644
--- a/_build_scripts/update-config-versions.js
+++ b/_build_scripts/update-config-versions.js
@@ -1,30 +1,53 @@
const fetch = require('node-fetch');
const getRepoVersion = async (repoName) => {
- const response = await fetch( // fetch all release versions
- `https://api.github.com/repos/weaviate/${repoName}/releases`,
- {
- method: 'GET',
- headers: {
- 'Content-Type': 'application/json',
- 'authorization': // Use the github token if available
- (process.env.GH_API_TOKEN) ?
- `Bearer ${ process.env.GH_API_TOKEN }` : ''
+ try {
+ const response = await fetch( // fetch all release versions
+ `https://api.github.com/repos/weaviate/${repoName}/releases`,
+ {
+ method: 'GET',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'authorization': // Use the github token if available
+ (process.env.GH_API_TOKEN) ?
+ `Bearer ${ process.env.GH_API_TOKEN }` : ''
+ }
}
+ );
+
+ // First check if the response was ok
+ if (!response.ok) {
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
}
- );
- const releases = await response.json();
- const highestVersion = releases
- .filter(item => !item.prerelease) // remove pre-release items
- .map(item => item.tag_name) // keep only the tag_name
- .sort() // sort items alphabetically – ascending
- .pop() // the last item contains the highest version (what we need)
- .replace('v', '') // remove the v from the name "v1.26.1" => "1.26.1"
+ const releases = await response.json();
+
+ // Check if releases is actually an array
+ if (!Array.isArray(releases)) {
+ // Debug log to see what we're getting
+ console.log(`Raw response for ${repoName}:`, JSON.stringify(releases).slice(0, 200));
+ console.error(`Unexpected response format for ${repoName}:`, releases);
+ throw new Error(`Expected array of releases but got ${typeof releases}`);
+ }
+
+ if (releases.length === 0) {
+ throw new Error(`No releases found for ${repoName}`);
+ }
- console.log(`${repoName} ${highestVersion}`)
+ const highestVersion = releases
+ .filter(item => !item.prerelease) // remove pre-release items
+ .map(item => item.tag_name) // keep only the tag_name
+ .sort() // sort items alphabetically – ascending
+ .pop() // the last item contains the highest version (what we need)
+ .replace('v', '') // remove the v from the name "v1.26.1" => "1.26.1"
- return highestVersion;
+ console.log(`${repoName} ${highestVersion}`);
+ return highestVersion;
+ } catch (error) {
+ console.error(`Error fetching version for ${repoName}:`, error);
+ // Maybe return a default version or rethrow depending on your needs
+ throw error;
+ }
}
// Build time versions replace values set in versions-config.json
@@ -63,4 +86,4 @@ const updateConfigFile = async () => {
});
}
-updateConfigFile();
\ No newline at end of file
+updateConfigFile();
diff --git a/_includes/code/client-libraries/python_v4.py b/_includes/code/client-libraries/python_v4.py
index fcdbabdddb..bcee7158b1 100644
--- a/_includes/code/client-libraries/python_v4.py
+++ b/_includes/code/client-libraries/python_v4.py
@@ -1,3 +1,5 @@
+import weaviate
+
# START WVCImportExample
import weaviate.classes as wvc
# END WVCImportExample
@@ -5,15 +7,6 @@
import weaviate_datasets as wd
import os
-# InstantiationV3API
-import weaviate
-
-client = weaviate.Client(
- url="http://localhost:8080",
-)
-# END InstantiationV3API
-
-
# TryFinallyExample
import weaviate
diff --git a/_includes/code/configuration/replication-consistency.mdx b/_includes/code/configuration/replication-consistency.mdx
index 917c78c825..8209c4767a 100644
--- a/_includes/code/configuration/replication-consistency.mdx
+++ b/_includes/code/configuration/replication-consistency.mdx
@@ -22,7 +22,7 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
text={PyCodeV3}
startMarker="# START AsyncRepair"
endMarker="# END AsyncRepair"
- language="py"
+ language="pyv3"
/>
@@ -40,7 +40,7 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
text={TSCodeLegacy}
startMarker="// START AsyncRepair"
endMarker="// END AsyncRepair"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/connections/connect-python-v3.py b/_includes/code/connections/connect-python-v3.py
index ee16968786..62b8b5d2ed 100644
--- a/_includes/code/connections/connect-python-v3.py
+++ b/_includes/code/connections/connect-python-v3.py
@@ -1,5 +1,13 @@
# THIS FILE HASN'T BEEN TESTED TO RUN END-TO-END
+# InstantiationV3API
+import weaviate
+
+client = weaviate.Client(
+ url="http://localhost:8080",
+)
+# END InstantiationV3API
+
#####################
### Cloud connect ###
#####################
diff --git a/_includes/code/connections/oidc-connect.mdx b/_includes/code/connections/oidc-connect.mdx
index e328836723..e0d64f3a08 100644
--- a/_includes/code/connections/oidc-connect.mdx
+++ b/_includes/code/connections/oidc-connect.mdx
@@ -23,7 +23,7 @@ import GoCode from '!!raw-loader!/_includes/code/connections/connect.go';
text={PyV3Code}
startMarker="# START OIDCConnect"
endMarker="# END OIDCConnect"
- language="py"
+ language="pyv3"
/>
@@ -39,7 +39,7 @@ import GoCode from '!!raw-loader!/_includes/code/connections/connect.go';
text={TsV2Code}
startMarker="// START OIDCConnect"
endMarker="// END OIDCConnect"
- language="js"
+ language="tsv2"
/>
diff --git a/_includes/code/core.client.palm.apikey.mdx b/_includes/code/core.client.palm.apikey.mdx
index c262941e75..f610352aee 100644
--- a/_includes/code/core.client.palm.apikey.mdx
+++ b/_includes/code/core.client.palm.apikey.mdx
@@ -11,8 +11,8 @@ client = weaviate.Client(
url = "https://WEAVIATE_INSTANCE_URL", # Replace WEAVIATE_INSTANCE_URL with the URL
# highlight-start
additional_headers = {
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY", # Replace with your API key
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY", # Replace with your API key
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY", # Replace with your API key
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY", # Replace with your API key
}
# highlight-end
)
@@ -30,8 +30,8 @@ const client = weaviate.client({
// highlight-start
// Replace with your API key
headers: {
- 'X-Google-Vertex-Api-Key': 'YOUR-VERTEX-API-KEY', // Replace with your API key
- 'X-Google-Studio-Api-Key': 'YOUR-AI-STUDIO-API-KEY', // Replace with your API key
+ 'X-Goog-Vertex-Api-Key': 'YOUR-VERTEX-API-KEY', // Replace with your API key
+ 'X-Goog-Studio-Api-Key': 'YOUR-AI-STUDIO-API-KEY', // Replace with your API key
},
// highlight-end
});
@@ -57,8 +57,8 @@ func main() {
// highlight-start
// Replace with your API key
Headers: map[string]string{
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY", // Replace with your API key
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY", // Replace with your API key
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY", // Replace with your API key
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY", // Replace with your API key
}
// highlight-end
}
@@ -85,8 +85,8 @@ public class App {
// highlight-start
Map headers = new HashMap() { {
// Replace with your API key
- put("X-Google-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
- put("X-Google-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
+ put("X-Goog-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
+ put("X-Goog-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
} };
// highlight-end
diff --git a/_includes/code/embedded.instantiate.custom.mdx b/_includes/code/embedded.instantiate.custom.mdx
index 87662112f9..c67f9cc1d4 100644
--- a/_includes/code/embedded.instantiate.custom.mdx
+++ b/_includes/code/embedded.instantiate.custom.mdx
@@ -20,7 +20,7 @@ import TsCodeV2CustomModules from '!!raw-loader!/_includes/code/install/embedded
text={PyCodeV3}
startMarker="# START CustomModules"
endMarker="# END CustomModules"
- language="py"
+ language="pyv3"
/>
@@ -28,7 +28,7 @@ import TsCodeV2CustomModules from '!!raw-loader!/_includes/code/install/embedded
text={TsCodeV2CustomModules}
startMarker="// START CustomModules"
endMarker="// END CustomModules"
- language="js"
+ language="tsv2"
/>
diff --git a/_includes/code/embedded.instantiate.mdx b/_includes/code/embedded.instantiate.mdx
index 526cfddcef..44c532495e 100644
--- a/_includes/code/embedded.instantiate.mdx
+++ b/_includes/code/embedded.instantiate.mdx
@@ -19,7 +19,7 @@ import TsCodeV2 from '!!raw-loader!/_includes/code/install/embedded-v2.ts';
text={PyCodeV3}
startMarker="# START SimpleInstance"
endMarker="# END SimpleInstance"
- language="py"
+ language="pyv3"
/>
@@ -27,7 +27,7 @@ import TsCodeV2 from '!!raw-loader!/_includes/code/install/embedded-v2.ts';
text={TsCodeV2}
startMarker="// START SimpleInstance"
endMarker="// END SimpleInstance"
- language="js"
+ language="tsv2"
/>
diff --git a/_includes/code/embedded.instantiate.module.mdx b/_includes/code/embedded.instantiate.module.mdx
index b9cb623510..ee7e307181 100644
--- a/_includes/code/embedded.instantiate.module.mdx
+++ b/_includes/code/embedded.instantiate.module.mdx
@@ -20,7 +20,7 @@ import TsCodeV2CustomModules from '!!raw-loader!/_includes/code/install/embedded
text={PyCodeV3}
startMarker="# START CustomModules"
endMarker="# END CustomModules"
- language="py"
+ language="pyv3"
/>
@@ -28,7 +28,7 @@ import TsCodeV2CustomModules from '!!raw-loader!/_includes/code/install/embedded
text={TsCodeV2CustomModules}
startMarker="// START CustomModules"
endMarker="// END CustomModules"
- language="js"
+ language="tsv2"
/>
diff --git a/_includes/code/generative.groupedtask.examples.py b/_includes/code/generative.groupedtask.examples.py
index 985347f7d1..7d7d314bad 100644
--- a/_includes/code/generative.groupedtask.examples.py
+++ b/_includes/code/generative.groupedtask.examples.py
@@ -16,8 +16,8 @@
"X-OpenAI-Api-Key": os.getenv("OPENAI_APIKEY"),
# END GenerativeOpenAI
# START GenerativeGoogle
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
# END GenerativeGoogle
# START GenerativeHuggingface
"X-HuggingFace-Api-Key": "YOUR_HUGGINGFACE_APIKEY",
diff --git a/_includes/code/generative.palm.groupedresult.mdx b/_includes/code/generative.palm.groupedresult.mdx
index 04f0daf21b..a318467fd2 100644
--- a/_includes/code/generative.palm.groupedresult.mdx
+++ b/_includes/code/generative.palm.groupedresult.mdx
@@ -20,8 +20,8 @@ import weaviate
client = weaviate.Client(
url = "https://WEAVIATE_INSTANCE_URL/", # Replace WEAVIATE_INSTANCE_URL with your instance URL
additional_headers={
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
}
)
@@ -97,8 +97,8 @@ func main() {
Host: "WEAVIATE_INSTANCE_URL", // Replace with your instance URL
Scheme: "https",
Headers: map[string]string{
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
},
}
client, err := weaviate.NewClient(cfg)
@@ -150,8 +150,8 @@ import io.weaviate.client.v1.graphql.query.fields.Field;
public class App {
public static void main(String[] args) {
Map headers = new HashMap() { {
- put("X-Google-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
- put("X-Google-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
+ put("X-Goog-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
+ put("X-Goog-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
} };
Config config = new Config("https", "WEAVIATE_INSTANCE_URL", headers);
// Replace with your instance URL
@@ -253,8 +253,8 @@ echo '{
-X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $WEAVIATE_API_KEY" \
- -H "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
- -H "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
+ -H "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
+ -H "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
-d @- \
https://WEAVIATE_INSTANCE_URL/v1/graphql # Replace WEAVIATE_INSTANCE_URL with your instance URL
```
diff --git a/_includes/code/generative.palm.singleresult.mdx b/_includes/code/generative.palm.singleresult.mdx
index c3a285359f..0cc08592a5 100644
--- a/_includes/code/generative.palm.singleresult.mdx
+++ b/_includes/code/generative.palm.singleresult.mdx
@@ -20,8 +20,8 @@ import weaviate
client = weaviate.Client(
url = "https://WEAVIATE_INSTANCE_URL", # Replace WEAVIATE_INSTANCE_URL with the URL
additional_headers={
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
}
)
@@ -96,8 +96,8 @@ func main() {
Host: "WEAVIATE_INSTANCE_URL",
Scheme: "https",
Headers: map[string]string{
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
},
}
client, err := weaviate.NewClient(cfg)
@@ -152,8 +152,8 @@ import io.weaviate.client.v1.graphql.query.fields.Field;
public class App {
public static void main(String[] args) {
Map headers = new HashMap() { {
- put("X-Google-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
- put("X-Google-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
+ put("X-Goog-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
+ put("X-Goog-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
} };
Config config = new Config("https", "WEAVIATE_INSTANCE_URL", headers);
WeaviateClient client = new WeaviateClient(config);
@@ -263,8 +263,8 @@ echo '{
-X POST \
-H 'Content-Type: application/json' \
-H "Authorization: Bearer $WEAVIATE_API_KEY" \
- -H "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
- -H "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
+ -H "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
+ -H "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
-d @- \
https://${WEAVIATE_INSTANCE_URL}/v1/graphql
```
diff --git a/_includes/code/generative.singleprompt.examples.py b/_includes/code/generative.singleprompt.examples.py
index c4eb68f568..b443f818f5 100644
--- a/_includes/code/generative.singleprompt.examples.py
+++ b/_includes/code/generative.singleprompt.examples.py
@@ -16,8 +16,8 @@
"X-OpenAI-Api-Key": os.getenv("OPENAI_APIKEY"),
# END GenerativeOpenAI
# START GenerativeGoogle
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
# END GenerativeGoogle
# START GenerativeHuggingface
"X-HuggingFace-Api-Key": "YOUR_HUGGINGFACE_APIKEY",
diff --git a/_includes/code/graphql.filters.nearText.palm.mdx b/_includes/code/graphql.filters.nearText.palm.mdx
index 6a036463b3..aac309929a 100644
--- a/_includes/code/graphql.filters.nearText.palm.mdx
+++ b/_includes/code/graphql.filters.nearText.palm.mdx
@@ -20,8 +20,8 @@ import weaviate
client = weaviate.Client(
url="http://localhost:8080",
additional_headers={
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
}
)
@@ -100,8 +100,8 @@ func main() {
Host: "localhost:8080",
Scheme: "http",
Headers: map[string]string{
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
},
}
client, err := weaviate.NewClient(cfg)
@@ -170,8 +170,8 @@ import java.util.Map;
public class App {
public static void main(String[] args) {
Map headers = new HashMap() { {
- put("X-Google-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
- put("X-Google-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
+ put("X-Goog-Vertex-Api-Key", "YOUR-VERTEX-API-KEY");
+ put("X-Goog-Studio-Api-Key", "YOUR-AI-STUDIO-API-KEY");
} };
Config config = new Config("http", "localhost:8080", headers);
WeaviateClient client = new WeaviateClient(config);
@@ -249,8 +249,8 @@ echo '{
-X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer learn-weaviate' \
- -H "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
- -H "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
+ -H "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY" \
+ -H "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY" \
-d @- \
https://edu-demo.weaviate.network/v1/graphql
```
diff --git a/_includes/code/graphql.filters.nearText.py b/_includes/code/graphql.filters.nearText.py
index cb00221c9e..d635e09d99 100644
--- a/_includes/code/graphql.filters.nearText.py
+++ b/_includes/code/graphql.filters.nearText.py
@@ -17,8 +17,8 @@
"X-OpenAI-Api-Key": os.getenv("OPENAI_APIKEY"),
# END NearTextOpenAI
# START NearTextGoogle
- "X-Google-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
- "X-Google-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
+ "X-Goog-Vertex-Api-Key": "YOUR-VERTEX-API-KEY",
+ "X-Goog-Studio-Api-Key": "YOUR-AI-STUDIO-API-KEY",
# END NearTextGoogle
# START NearTextHuggingface
"X-HuggingFace-Api-Key": "YOUR_HUGGINGFACE_APIKEY",
diff --git a/_includes/code/graphql.get.beacon.mdx b/_includes/code/graphql.get.beacon.mdx
index 928e461fc3..565fa45427 100644
--- a/_includes/code/graphql.get.beacon.mdx
+++ b/_includes/code/graphql.get.beacon.mdx
@@ -22,7 +22,7 @@ import PyCodeV3 from '!!raw-loader!/_includes/code/graphql.get.beacon.v3.py';
text={PyCodeV3}
startMarker="# ===== PYTHON EXAMPLE ====="
endMarker="# ===== END PYTHON EXAMPLE ====="
- language="py"
+ language="pyv3"
/>
@@ -167,7 +167,7 @@ echo '{
text={PyCodeV3}
startMarker="# ===== GRAPHQL EXAMPLE ====="
endMarker="# ===== END GRAPHQL EXAMPLE ====="
- language="py"
+ language="pyv3"
/>
diff --git a/_includes/code/graphql.get.multitenancy.mdx b/_includes/code/graphql.get.multitenancy.mdx
index e3d31f535a..d1d1345441 100644
--- a/_includes/code/graphql.get.multitenancy.mdx
+++ b/_includes/code/graphql.get.multitenancy.mdx
@@ -22,7 +22,7 @@ import GoCode from '!!raw-loader!/_includes/code/howto/go/docs/manage-data.multi
text={PyCodeV3}
startMarker="# START Search"
endMarker="# END Search"
- language="py"
+ language="pyv3"
/>
@@ -31,7 +31,7 @@ import GoCode from '!!raw-loader!/_includes/code/howto/go/docs/manage-data.multi
text={TSCode}
startMarker="// START Search"
endMarker="// END Search"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/graphql.get.simple.mdx b/_includes/code/graphql.get.simple.mdx
index efe548a448..1a7c299339 100644
--- a/_includes/code/graphql.get.simple.mdx
+++ b/_includes/code/graphql.get.simple.mdx
@@ -20,7 +20,7 @@ import PyCodeV3 from '!!raw-loader!/_includes/code/graphql.get.simple.v3.py';
text={PyCodeV3}
startMarker="# ===== PYTHON EXAMPLE ====="
endMarker="# ===== END PYTHON EXAMPLE ====="
- language="py"
+ language="pyv3"
/>
@@ -145,7 +145,7 @@ echo '{
text={PyCodeV3}
startMarker="# ===== GRAPHQL EXAMPLE ====="
endMarker="# ===== END GRAPHQL EXAMPLE ====="
- language="py"
+ language="pyv3"
/>
diff --git a/_includes/code/howto/configure.backups.py b/_includes/code/howto/configure.backups.py
index 50f1b0db4a..a2543ab6a0 100644
--- a/_includes/code/howto/configure.backups.py
+++ b/_includes/code/howto/configure.backups.py
@@ -92,9 +92,29 @@
# ===== Cancel ongoing backup =====
# ==============================================
+# Note - this will fail in automated tests as the backup is already completed
+
+# Create the collections, whether they exist or not
+client.collections.delete(["Article", "Publication"])
+articles = client.collections.create(name="Article")
+publications = client.collections.create(name="Publication")
+
+articles.data.insert(properties={"title": "Dummy"})
+publications.data.insert(properties={"title": "Dummy"})
+
+# Start a backup to cancel
+result = client.backup.create(
+ backup_id="some-unwanted-backup",
+ backend="filesystem",
+ include_collections=["Article", "Publication"],
+ wait_for_completion=False,
+)
+
+print(result)
+
# START CancelBackup
result = client.backup.cancel(
- backup_id="my-very-first-backup",
+ backup_id="some-unwanted-backup",
backend="filesystem",
)
diff --git a/_includes/code/howto/go/docs/model-providers/1-connect/main.go b/_includes/code/howto/go/docs/model-providers/1-connect/main.go
index ecff53f23d..9ffea82a9c 100644
--- a/_includes/code/howto/go/docs/model-providers/1-connect/main.go
+++ b/_includes/code/howto/go/docs/model-providers/1-connect/main.go
@@ -34,8 +34,8 @@ func main() {
"X-Databricks-Token": os.Getenv("DATABRICKS_TOKEN"),
// END DatabricksInstantiation
// START GoogleInstantiation
- "X-Google-Vertex-Key": os.Getenv("VERTEX_APIKEY"),
- "X-Google-Studio-Key": os.Getenv("STUDIO_APIKEY"),
+ "X-Goog-Vertex-Key": os.Getenv("VERTEX_APIKEY"),
+ "X-Goog-Studio-Key": os.Getenv("STUDIO_APIKEY"),
// END GoogleInstantiation
// START HuggingFaceInstantiation
"X-HuggingFace-Api-Key": os.Getenv("HUGGINGFACE_APIKEY"),
diff --git a/_includes/code/howto/manage-data.collections.py b/_includes/code/howto/manage-data.collections.py
index c279be04eb..9330a6b76c 100644
--- a/_includes/code/howto/manage-data.collections.py
+++ b/_includes/code/howto/manage-data.collections.py
@@ -565,6 +565,41 @@
client.close()
+# ==============================================
+# ===== ALL REPLICATION SETTINGS
+# ==============================================
+
+# Connect to a setting with 3 replicas
+client = weaviate.connect_to_local(
+ port=8180 # Port for demo setup with 3 replicas
+)
+
+# Clean slate
+client.collections.delete("Article")
+
+# START AllReplicationSettings
+from weaviate.classes.config import Configure, ReplicationDeletionStrategy
+
+client.collections.create(
+ "Article",
+ # highlight-start
+ replication_config=Configure.replication(
+ factor=3,
+ async_enabled=True, # Enable asynchronous repair
+ deletion_strategy=ReplicationDeletionStrategy.TIME_BASED_RESOLUTION, # Added in v1.28; Set the deletion conflict resolution strategy
+ )
+ # highlight-end
+)
+# END AllReplicationSettings
+
+# Test
+collection = client.collections.get("Article")
+config = collection.config.get()
+assert config.replication_config.async_enabled == True
+assert config.replication_config.deletion_strategy == ReplicationDeletionStrategy.TIME_BASED_RESOLUTION
+
+client.close()
+
# ====================
# ===== SHARDING =====
# ====================
diff --git a/_includes/code/howto/search.hybrid.py b/_includes/code/howto/search.hybrid.py
index 85da3a0d0e..cb596e9ee6 100644
--- a/_includes/code/howto/search.hybrid.py
+++ b/_includes/code/howto/search.hybrid.py
@@ -302,10 +302,10 @@
# End test
# =========================================
-# ===== Hybrid with vector similarity =====
+# ===== Hybrid with vector parameters =====
# =========================================
-# START VectorSimilarityPython
+# START VectorParametersPython
from weaviate.classes.query import HybridVector, Move, HybridFusion
jeopardy = client.collections.get("JeopardyQuestion")
@@ -321,6 +321,27 @@
alpha=0.75,
limit=5,
)
+# END VectorParametersPython
+
+assert len(response.objects) <= 5
+assert len(response.objects) > 0
+
+# =========================================
+# ===== Hybrid with vector similarity threshold =====
+# =========================================
+
+# START VectorSimilarityPython
+from weaviate.classes.query import HybridVector, Move, HybridFusion
+
+jeopardy = client.collections.get("JeopardyQuestion")
+response = jeopardy.query.hybrid(
+ query="California",
+ # highlight-start
+ max_vector_distance=0.4, # Maximum threshold for the vector search component
+ # highlight-end
+ alpha=0.75,
+ limit=5,
+)
# END VectorSimilarityPython
assert len(response.objects) <= 5
diff --git a/_includes/code/howto/search.multi-target-v4.py b/_includes/code/howto/search.multi-target-v4.py
index 1d24a21bc6..af8671ffa4 100644
--- a/_includes/code/howto/search.multi-target-v4.py
+++ b/_includes/code/howto/search.multi-target-v4.py
@@ -167,7 +167,7 @@
# END MultiTargetMultipleNearVectorsV1
# START MultiTargetMultipleNearVectorsV2
-from weaviate.classes.query import MetadataQuery
+from weaviate.classes.query import TargetVectors, MetadataQuery
collection = client.collections.get("JeopardyTiny")
diff --git a/_includes/code/python/howto.configure.rbac.permissions.py b/_includes/code/python/howto.configure.rbac.permissions.py
new file mode 100644
index 0000000000..baeab65d3b
--- /dev/null
+++ b/_includes/code/python/howto.configure.rbac.permissions.py
@@ -0,0 +1,95 @@
+import weaviate
+from weaviate import WeaviateClient
+
+# START-ANY
+from weaviate.classes.rbac import Permissions
+
+# END-ANY
+from weaviate.classes.init import Auth
+
+admin_client = weaviate.connect_to_local(
+ # Use custom port defined in tests/docker-compose-rbac.yml (without showing the user)
+ port=8580,
+ grpc_port=50551,
+ auth_credentials=Auth.api_key("admin-key")
+)
+
+def reset_user(user: str, client: WeaviateClient):
+ # Clean slate
+ current_roles = client.roles.by_user(user) # check if user exists
+ for k in current_roles.keys():
+ client.roles.revoke_from_user(role_names=k, user=user) # revoke all roles
+
+# =================================================================
+# =============== EXAMPLE: READ + WRITE PERMISSIONS
+# =================================================================
+
+# Clean slate
+reset_user("other-user", client=admin_client)
+admin_client.roles.delete("rw_role_target_collections") # delete if exists
+
+# START ReadWritePermissionDefinition
+# Define permissions (example confers read+write rights to collections starting with "TargetCollection_")
+admin_permissions = [
+ Permissions.collections(
+ collection="TargetCollection_*",
+ create_collection=True,
+ read_config=True,
+ update_config=True,
+ delete_collection=True,
+ ),
+ Permissions.data(
+ collection="TargetCollection_*",
+ create=True,
+ read=True,
+ update=True,
+ delete=True
+ ),
+ Permissions.backup(collection="TargetCollection_*", manage=True),
+ Permissions.nodes(collection="TargetCollection_*", read=True),
+ Permissions.cluster(read=True),
+]
+
+# Create a new role and assign it to a user
+admin_client.roles.create(role_name="rw_role_target_collections", permissions=admin_permissions)
+admin_client.roles.assign_to_user(role_names="rw_role_target_collections", user="other-user")
+# END ReadWritePermissionDefinition
+
+# ===== TEST ===== basic checks to see if the role was created
+user_permissions = admin_client.roles.by_user("other-user")
+
+assert "rw_role_target_collections" in user_permissions.keys()
+assert user_permissions["rw_role_target_collections"].collections_permissions[0].collection == "TargetCollection_*"
+assert user_permissions["rw_role_target_collections"].name == "rw_role_target_collections"
+
+# =================================================================
+# =============== EXAMPLE: VIEWER PERMISSIONS
+# =================================================================
+
+# Clean slate
+reset_user("other-user", client=admin_client)
+admin_client.roles.delete("viewer_role_target_collections") # delete if exists
+
+# START ViewerPermissionDefinition
+# Define permissions (example confers viewer rights to collections starting with "TargetCollection_")
+viewer_permissions = [
+ Permissions.collections(
+ collection="TargetCollection_*",
+ read_config=True,
+ ),
+ Permissions.data(collection="TargetCollection_*", read=True),
+]
+
+# Create a new role and assign it to a user
+admin_client.roles.create(role_name="viewer_role_target_collections", permissions=viewer_permissions)
+admin_client.roles.assign_to_user(role_names="viewer_role_target_collections", user="other-user")
+# END ViewerPermissionDefinition
+
+# ===== TEST ===== basic checks to see if the role was created
+user_permissions = admin_client.roles.by_user("other-user")
+
+assert "viewer_role_target_collections" in user_permissions.keys()
+assert user_permissions["viewer_role_target_collections"].collections_permissions[0].collection == "TargetCollection_*"
+assert user_permissions["viewer_role_target_collections"].name == "viewer_role_target_collections"
+
+admin_client.close()
diff --git a/_includes/code/python/howto.configure.rbac.roles.py b/_includes/code/python/howto.configure.rbac.roles.py
new file mode 100644
index 0000000000..fc2df06eb4
--- /dev/null
+++ b/_includes/code/python/howto.configure.rbac.roles.py
@@ -0,0 +1,152 @@
+from weaviate.classes.rbac import Permissions
+
+# START AdminClient
+import weaviate
+from weaviate.classes.init import Auth
+
+# Connect to Weaviate as Admin
+admin_client = weaviate.connect_to_local(
+ # END AdminClient
+ # Use custom port defined in tests/docker-compose-rbac.yml (without showing the user)
+ port=8580,
+ grpc_port=50551,
+ # START AdminClient
+ auth_credentials=Auth.api_key("admin-key")
+)
+# END AdminClient
+
+jane_client = weaviate.connect_to_local(
+ port=8580, grpc_port=50551, auth_credentials=Auth.api_key("jane-key")
+)
+
+# # START CreateRole
+# admin_client.roles.create(role_name="devrel")
+# # END CreateRole
+
+# START AddRoleAtCreate
+from weaviate.classes.rbac import Permissions
+
+permissions = [
+ Permissions.collections(
+ collection="Test_*",
+ read_config=True,
+ create_collection=False,
+ delete_collection=False,
+ ),
+ Permissions.collections(
+ collection="Test_DevRel",
+ read_config=True,
+ create_collection=True,
+ delete_collection=True,
+ ),
+]
+
+admin_client.roles.create(
+ role_name="devrel", permissions=permissions
+)
+# END AddRoleAtCreate
+assert "devrel" in admin_client.roles.list_all().keys()
+
+# START AddRoles
+from weaviate.classes.rbac import Permissions
+
+permissions = [
+ Permissions.data(collection="Test_DevRel", read=True, create=True),
+ Permissions.data(collection="Test_*", read=True, create=False)
+]
+
+admin_client.roles.add_permissions(permissions=permissions, role_name="devrel")
+# END AddRoles
+
+# START ManageRoles
+from weaviate.classes.rbac import Permissions
+
+permissions = [
+ Permissions.roles(role="devrel", read=True, manage=True),
+ Permissions.roles(role="devrel-*", read=True, manage=False)
+]
+
+admin_client.roles.create(role_name="devrel-admin", permissions=permissions)
+# END ManageRoles
+
+# START ClusterAndNodePermissions
+from weaviate.classes.rbac import Permissions
+
+permissions = [
+ Permissions.cluster(read=True),
+ Permissions.nodes(collection="Test_DevRel", verbosity="verbose", read=True)
+]
+
+admin_client.roles.add_permissions(permissions=permissions, role_name="devrel-admin")
+# END ClusterAndNodePermissions
+
+
+# START AssignRole
+admin_client.roles.assign_to_user(role_names="devrel", user="jane-doe")
+# END AssignRole
+assert "devrel" in admin_client.roles.by_user(user="jane-doe")
+
+# START ListCurrentUserRoles
+print(admin_client.roles.of_current_user())
+# END ListCurrentUserRoles
+
+# START ListUserRoles
+user_roles = admin_client.roles.by_user(user="jane-doe")
+
+for role in user_roles:
+ print(role)
+# END ListUserRoles
+assert any(permission.collection == "Test_DevRel" for permission in user_roles["devrel"].collections_permissions)
+
+# START CheckRoleExists
+print(admin_client.roles.exists(role_name="role-name")) # Returns True or False
+# END CheckRoleExists
+
+# START InspectRole
+print(admin_client.roles.by_name(role_name="devrel"))
+# END InspectRole
+
+# START AssignedUsers
+assigned_users = admin_client.roles.assigned_users(role_name="devrel")
+
+for user in assigned_users:
+ print(user)
+# END AssignedUsers
+assert "jane-doe" in assigned_users
+
+# START ListAllRoles
+all_roles = admin_client.roles.list_all()
+
+for role_name, role in all_roles.items():
+ print(role_name, role)
+# END ListAllRoles
+
+# START RemovePermissions
+from weaviate.classes.rbac import Permissions
+
+permissions = [
+ Permissions.collections(
+ collection="Test_DevRel",
+ read_config=True,
+ create_collection=True,
+ delete_collection=True,
+ ),
+ Permissions.data(collection="Test_*", read=True, create=False)
+]
+
+admin_client.roles.remove_permissions(
+ role_name="devrel", permissions=permissions
+)
+# END RemovePermissions
+
+# START RevokeRoles
+admin_client.roles.revoke_from_user(role_names=["devrel"], user="jane-doe")
+# END RevokeRoles
+assert "devrel" not in admin_client.roles.by_user(user="jane-doe")
+
+# START DeleteRole
+admin_client.roles.delete(role_name="devrel")
+# END DeleteRole
+
+admin_client.close()
+jane_client.close()
diff --git a/_includes/code/quickstart.autoschema.connect.docker.mdx b/_includes/code/quickstart.autoschema.connect.docker.mdx
index f9994f2533..46398dc145 100644
--- a/_includes/code/quickstart.autoschema.connect.docker.mdx
+++ b/_includes/code/quickstart.autoschema.connect.docker.mdx
@@ -21,7 +21,7 @@ import EndToEndTSCode from '!!raw-loader!/_includes/code/quickstart/endtoend.ts'
text={EndToEndTSCode}
startMarker="// DockerInstantiationExample"
endMarker="// END DockerInstantiationExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart.byov.all.py b/_includes/code/quickstart.byov.all.py
index 2b4f576efd..7aa9e8495a 100644
--- a/_includes/code/quickstart.byov.all.py
+++ b/_includes/code/quickstart.byov.all.py
@@ -12,59 +12,60 @@
client = weaviate.connect_to_local()
-try:
+# ===== Create schema =====
+import weaviate.classes as wvc
- # ===== Create schema =====
- import weaviate.classes as wvc
+# Create the collection. Weaviate's autoschema feature will infer properties when importing.
+questions = client.collections.create(
+ "Question",
+ vectorizer_config=wvc.config.Configure.Vectorizer.none(),
+)
- # Create the collection. Weaviate's autoschema feature will infer properties when importing.
- questions = client.collections.create(
- "Question",
- vectorizer_config=wvc.config.Configure.Vectorizer.none(),
- )
+# ===== Import data =====
+import requests
- # ===== Import data =====
- import requests
+fname = "jeopardy_tiny_with_vectors_all-OpenAI-ada-002.json" # This file includes pre-generated vectors
+url = f"https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/{fname}"
+resp = requests.get(url)
+data = json.loads(resp.text) # Load data
- fname = "jeopardy_tiny_with_vectors_all-OpenAI-ada-002.json" # This file includes pre-generated vectors
- url = f"https://raw.githubusercontent.com/weaviate-tutorials/quickstart/main/data/{fname}"
- resp = requests.get(url)
- data = json.loads(resp.text) # Load data
+question_objs = list()
+for i, d in enumerate(data):
+ question_objs.append(wvc.data.DataObject(
+ properties={
+ "answer": d["Answer"],
+ "question": d["Question"],
+ "category": d["Category"],
+ },
+ vector=d["vector"]
+ ))
- question_objs = list()
- for i, d in enumerate(data):
- question_objs.append(wvc.data.DataObject(
- properties={
- "answer": d["Answer"],
- "question": d["Question"],
- "category": d["Category"],
- },
- vector=d["vector"]
- ))
+questions = client.collections.get("Question")
+questions.data.insert_many(question_objs)
- questions = client.collections.get("Question")
- questions.data.insert_many(question_objs)
+# ===== Query =====
+query_vector = [0.0042927247,-0.007413445,0.00034457954,-0.01897398,-0.00251218,0.020693844,-0.027351381,-0.008647864,-0.000042449385,-0.012337249,-0.006678342,0.0072608762,0.0051838635,-0.020555146,0.00017055604,0.028821588,0.047351733,-0.0045319796,0.008959935,-0.012323379,-0.008585449,0.022483058,0.0013869869,-0.01801696,-0.0014806085,0.01269093,0.021539906,-0.03592296,-0.0024116235,-0.012087591,0.014369184,-0.0019261781,-0.03506303,-0.028932547,-0.008162417,-0.026949156,-0.011782453,0.00049628125,0.018044699,0.011213789,0.014452403,0.028072614,-0.010957196,-0.0006033393,-0.008876716,-0.008079199,-0.011789389,-0.007517469,-0.028960286,-0.0059328363,0.006758094,0.021997612,-0.004521577,-0.015506513,-0.010208224,-0.014577232,-0.004726158,0.025714736,-0.0025104464,-0.016421925,-0.025922785,-0.00038467214,-0.021054462,0.019611996,-0.013315074,0.0014346646,-0.0017857456,0.01572843,-0.01003485,-0.008675603,0.02323203,0.0033079637,0.0056970487,-0.0129405875,0.035534605,-0.010769953,-0.023010112,-0.001464138,-0.008932196,0.015700692,0.010166614,-0.022483058,0.00788502,0.0029698857,0.018710453,0.0029768206,-0.014341445,0.008897521,-0.013141701,-0.037115768,0.0148546295,0.004067339,-0.0060680676,0.02529864,-0.027601039,0.021345729,-0.010721409,0.033676043,-0.0191959,-0.06807332,-0.009812932,0.015312335,-0.010825433,-0.018613365,-0.02110994,0.006248376,0.008550774,0.0044556954,0.023134941,-0.026990766,-0.010097264,0.021623125,-0.0070979055,-0.04798975,0.0006449489,-0.0011338618,0.0033894493,-0.011172179,0.0053641717,-0.010430141,0.021484427,-0.012885109,0.010298378,-0.013003002,0.019917132,0.010832367,-0.04235858,-0.010222093,-0.0017658077,0.009466185,0.023564907,0.01998648,0.0036928526,0.01162295,-0.022413708,0.016421925,-0.008842042,0.0043065944,-0.017503774,-0.031262685,0.007739387,0.033787,-0.040583238,-0.00029863563,0.003266354,0.025423469,0.012579971,0.023759086,0.0168935,0.0042996593,0.015437164,-0.0035125443,0.029043505,0.0031709988,-0.0038350187,-0.0030479038,-0.009889216,0.008696408,0.0022053092,0.003027099,-0.009507795,0.0028918677,0.012406598,-0.022344358,0.009695038,0.017462164,0.007059763,0.012316444,-0.0020596755,-0.019487167,-0.0132734645,0.038197618,-0.022385968,0.030153096,0.00017857457,0.019736823,0.010624319,0.0026023341,-0.014715931,0.0079405,-0.024965765,0.026200183,0.018627234,0.0108670425,-0.0010913853,0.009181853,0.01484076,-0.0072192666,0.031207206,-0.020638365,-0.004466098,0.016061308,0.0054855333,0.004379411,-0.6910524,-0.032178096,0.009660364,-0.005471663,0.012371923,0.0264221,0.007586818,-0.0030929807,-0.012434337,0.011678429,0.019320728,-0.0058392147,-0.009098634,-0.015132027,-0.013571667,-0.030014396,0.008328856,-0.03281611,0.008481425,0.002597133,-0.024008743,-0.0026543462,-0.009015415,-0.011983567,0.009154114,0.0044799675,0.018155659,-0.018821413,-0.008890586,-0.007989044,-0.0075729485,0.0119211525,-0.000356499,-0.0021550308,0.019487167,0.0044314233,-0.0039737173,0.028280662,0.021317989,0.043828785,-0.01319718,-0.030097615,0.0011035214,0.012815759,-0.022691106,0.028211314,0.016602233,-0.0020648767,0.023981003,0.015756171,0.012337249,0.0019556514,0.01583939,0.018710453,0.02334299,-0.0115536,0.017531514,-0.008946066,-0.0024619016,-0.0015447567,-0.010069525,0.0008317587,-0.014743671,-0.027295902,-0.02328751,0.027878437,-0.032483235,0.009743583,0.019917132,-0.010215159,0.022330489,0.022815935,-0.014604972,-0.0008096536,-0.0001595035,0.016075179,0.022372099,-0.0052601476,-0.015132027,0.0032004723,0.0068309107,-0.010083395,-0.02106833,-0.0066228625,0.028904807,-0.020915762,-0.007628428,0.010478686,0.0037240598,0.0037136574,0.014299835,0.02868289,0.0009223463,-0.0052428106,-0.014702061,0.009701974,-0.011810194,-0.0084952945,0.00659859,-0.013044612,-0.005218538,0.000095517884,0.021248639,0.010346922,0.011352488,0.0045909267,-0.004670678,0.020763194,0.044022962,-0.021539906,0.0077809966,-0.00095181976,-0.0062934533,0.010714474,-0.00017369844,-0.033592824,0.0066089923,-0.0025104464,0.021997612,-0.01805857,-0.0023474754,0.0060819373,0.006276116,-0.011962762,0.0061720917,0.01590874,-0.018946242,-0.020888023,-0.017670212,0.0003892232,0.017795041,0.013377489,0.011269269,-0.015464904,0.028252924,0.009681169,0.015534253,-0.020541277,0.010679799,-0.007836476,-0.027073985,-0.015561993,0.005603427,-0.0010081661,-0.013342814,-0.006154754,-0.022427578,-0.0022053092,-0.019279119,0.012933653,0.017448295,0.012815759,0.0019105745,0.028849328,0.034674674,-0.023689736,-0.0062449086,-0.0008872382,-0.0068690525,0.013516188,0.010561905,0.01814179,-0.018391447,0.003644308,-0.0026716834,-0.017032199,-0.0070181536,0.015173636,-0.0076006884,-0.04776783,0.01110283,-0.03919625,-0.015451034,0.010242898,0.011123635,0.0003929074,-0.017808912,0.01603357,0.021387339,-0.0055479477,-0.016297096,-0.0038107466,-0.020333229,-0.0032958277,0.018405316,0.0031796675,0.032316796,0.020555146,-0.004365541,0.012933653,0.009951631,0.02227501,0.0012266166,0.0085299695,0.019182028,0.009819867,0.0014468007,0.010020981,-0.0030704422,0.02314881,0.04449454,-0.00095702097,0.01794761,-0.011095895,0.0017319999,-0.042968854,-0.0022139777,-0.038197618,0.021595387,0.015437164,0.0070909704,-0.020236138,0.0027913111,-0.039473645,0.012614646,0.012316444,-0.009743583,0.001855095,-0.019681344,-0.009743583,0.00084866263,-0.017157027,0.00058080076,-0.00075634127,0.0057143862,0.017198637,0.011858738,0.012420468,-0.00026157705,-0.013849064,0.017420555,-0.0037517995,-0.001249155,0.0019539178,0.00023535434,0.02323203,0.013439903,-0.018987851,0.039751045,0.018641103,-0.0019660539,0.009119439,0.01319718,-0.0072678113,0.010464816,-0.008821237,0.016505145,0.008710277,0.0009656896,-0.0037726043,-0.006210234,-0.0020388707,-0.033620562,-0.001653115,0.01678254,-0.021359598,0.016297096,0.022857545,0.012240159,0.026935285,0.009743583,0.005721321,0.004119351,-0.0048717917,0.008821237,0.0018377576,0.00633853,-0.01159521,-0.023398468,0.008412075,-0.03287159,-0.022496928,0.0030635074,-0.01271867,0.009188788,0.021539906,-0.0035749588,0.0062969206,-0.008751887,-0.0121846795,-0.00661246,-0.0108670425,0.00954247,0.017517645,0.0061408845,-0.013509252,-0.012191615,-0.010485621,-0.00028606606,0.009965501,-0.01697672,0.0140640475,0.012538361,0.0042476472,-0.0034223902,-0.010804628,0.007732452,-0.014494013,-0.010423207,-0.0030756434,-0.0034657335,-0.0132387895,0.0005292222,-0.006678342,0.0117269745,0.008800432,-0.0062449086,-0.022427578,-0.018419186,-0.017795041,0.012288704,0.0028329208,-0.0077948663,0.0013878538,-0.0072192666,0.014604972,-0.008328856,-0.005766398,0.026852066,-0.0041505583,-0.019209769,-0.005579155,-0.02644984,-0.013682626,0.074231535,0.022982374,-0.011747779,0.04737947,0.0021376936,-0.023315249,-0.010811563,-0.0041366885,0.00527055,-0.01907107,0.006158222,-0.027060114,0.018280488,0.005957109,-0.011858738,0.0072539416,-0.014452403,-0.02220566,0.015326206,-0.0036928526,-0.017906,-0.024008743,0.0070008165,0.027129464,0.0033287685,0.0022798597,-0.0025416536,0.02231662,-0.006650602,-0.026269533,-0.003377313,0.0046360036,0.008536904,0.012462078,0.0075660134,0.019223638,0.016740931,0.0013055014,0.0001641629,-0.012545297,0.01585326,0.020929633,0.010069525,-0.018779803,0.0101042,-0.021775695,-0.0098476065,0.033481862,-0.00319007,-0.0024237595,0.019501036,0.006761561,-0.0073787705,-0.016879631,0.009403771,0.009112504,0.0047608325,0.015367815,-0.007177657,-0.00002692705,-0.027129464,-0.044217143,0.020444186,0.0017944142,0.0011052552,-0.009653429,-0.038475018,0.0013497117,-0.023592647,0.000589036,0.0035957636,-0.029820219,-0.00023080329,-0.022496928,0.008079199,-0.00632466,0.029293163,-0.011928087,0.0046810806,0.030125355,-0.0018932371,0.0013809188,-0.0026526125,-0.030069876,0.0044418257,0.0068447804,-0.0009275475,-0.0065188385,0.011401032,0.021900523,0.0061339494,0.004902999,0.02653306,0.005773333,-0.0012517556,0.00581841,0.01994487,0.020263879,-0.00839127,-0.012323379,0.0025728608,-0.023065591,-0.00661246,0.010485621,0.008210963,0.0032351469,0.0011980099,0.031290423,-0.014161136,0.007725517,0.028849328,-0.007049361,0.018155659,0.0148685,0.0041332208,0.019528776,0.0056450367,0.01801696,0.005246278,-0.0220947,-0.001432064,-0.028100355,0.013689561,0.017642474,-0.0050139576,-0.016796412,0.00212209,-0.016560623,-0.013849064,0.0007424714,-0.016089048,0.023967134,0.0030739098,-0.032677412,-0.03206714,-0.009986306,-0.019833913,0.021886652,-0.020818673,-0.011498122,0.0005365906,0.005274018,0.021914393,-0.023093332,-0.0018446926,-0.047240775,-0.01058271,-0.0022538537,-0.014923979,0.024674498,-0.013960023,-0.0022746585,-0.007864215,-0.010769953,-0.0071637873,-0.049238034,-0.022011481,-0.019958742,0.043745566,0.018641103,0.019847782,-0.016435795,0.01697672,0.016158398,0.0028953352,0.0068690525,0.004972348,0.013793585,-0.035867482,0.0191959,0.028655149,-0.006137417,0.017725693,-0.008897521,0.0023145343,0.04208118,-0.003514278,-0.020901892,-0.0026006005,-0.0135369925,-0.014098722,0.0072400714,-0.0021966405,0.014979458,-0.009244268,-0.001380052,0.006449489,-0.0015967686,-0.012108396,-0.019931002,0.03292707,-0.024521928,0.031013027,-0.017545383,-0.004667211,-0.009473121,-0.0020683443,-0.008536904,-0.002578062,0.008113873,0.0028294532,0.019736823,0.00086599996,0.0027965123,-0.0048059095,0.0063940096,-0.0034900059,-0.011525861,0.010624319,-0.014618842,0.010506426,-0.0016297096,-0.016200008,-0.03284385,0.0064078793,0.011241529,-0.0075452086,0.01693511,-0.0121846795,-0.010284508,0.038585976,-0.0045077074,0.013966958,-0.012808824,0.030985286,0.037726045,0.0015369549,-0.026796587,-0.008370466,-0.0013289069,-0.0003181401,0.02323203,0.0074689244,0.007621493,-0.027878437,0.0070181536,0.009154114,-0.012559166,-0.03706029,0.021803435,0.016297096,0.0012985665,-0.019778432,0.00033179327,-0.024951894,0.026297271,0.0065708505,-0.003065241,-0.013100091,-0.008516099,0.0007281681,0.009313617,0.0016600499,0.03270515,0.011879543,0.005801073,-0.012635451,-0.0038904983,-0.013044612,0.009459251,-0.0046845484,0.024050353,-0.01572843,0.0044834353,0.005048632,-0.0076769725,0.0003972417,-0.012469012,-0.004670678,0.03481337,-0.018322097,-0.0064182817,-0.011616015,0.02657467,0.019917132,0.010624319,-0.0038731608,-0.017725693,-0.026227923,-0.0062449086,0.022594016,0.023925524,0.0011884744,-0.012087591,-0.0014702061,-0.0063697374,-0.007857281,-0.0042615174,-0.000051063875,-0.015561993,-0.007808736,0.009944696,0.00954247,0.017808912,0.0052948226,-0.015783912,-0.0026543462,0.024660626,-0.02337073,0.027448472,-0.02117929,-0.016213877,-0.025423469,0.0069141295,-0.0012768948,-0.025173813,0.02539573,-0.017059939,-0.023551038,-0.012420468,-0.020901892,0.018211138,0.0026803522,-0.02016679,0.019667475,-0.01114444,0.017323466,-0.033287685,-0.043662347,0.023010112,-0.014396924,0.0055375453,0.0048891287,-0.011026545,0.009805998,0.014285965,0.013183311,-0.006137417,-0.024840936,-0.017184768,-0.026075354,0.020846413,-0.00029235083,-0.022066962,-0.013786649,-0.011511991,-0.012656256,0.012045981,0.0026283402,-0.0051838635,-0.0026664822,-0.008259507,0.023981003,0.011858738,-0.021623125,-0.0034657335,-0.0028936013,-0.010707539,-0.023426209,0.0075244037,-0.00037773722,0.030319534,0.0071707224,-0.0052358755,-0.018322097,0.010138874,-0.024147442,-0.018710453,0.024410969,0.005291355,0.021872783,0.0001582032,0.0069279997,0.0029109388,-0.0015733633,0.015284596,-0.026685627,-0.0052636154,0.0025173812,-0.006130482,0.02231662,-0.009133309,-0.010978001,-0.023981003,0.021581516,-0.007063231,0.0048925965,0.00223825,-0.004847519,0.0050659697,-0.0082664415,0.023634257,0.010430141,0.014244355,0.015367815,-0.019501036,-0.009930826,0.013301204,-0.015340075,-0.024757717,-0.008065329,-0.016338706,-0.008751887,0.036366798,-0.011574405,-0.0129405875,0.022108572,-0.010326117,0.015783912,0.018821413,-0.0024358958,0.0066401996,0.0016513813,-0.007878086,-0.014369184,-0.0057109185,-0.027642649,-0.0047296253,0.014729801,-0.00065751845,0.020763194,-0.01210146,0.0009795595,-0.013349749,-0.0024653692,-0.024258401,-0.0013471111,-0.0051630586,0.015298465,0.021650866,-0.02314881,-0.02427227,0.0000668571,-0.018322097,-0.007933565,-0.011498122,0.010908652,-0.0074758595,0.0090570245,0.005100644,-0.018419186,-0.014383054,-0.0051457216,0.012788019,-0.022843674,-0.010138874,0.17021103,-0.031345904,0.0020614092,0.024091963,-0.004341269,0.005180396,0.019182028,-0.0011312612,0.0013644483,0.016408054,0.0028173171,-0.0062379735,-0.01106122,0.00850223,0.008897521,-0.0047747022,-0.02334299,-0.012801889,-0.0202084,-0.014181941,0.0033305022,-0.0015196175,-0.0083011165,-0.03167878,0.031123986,0.0016505144,-0.01003485,-0.021997612,0.004341269,-0.0058946945,-0.011241529,-0.016477404,-0.00028324872,-0.009785193,-0.019639734,0.0076561677,-0.0029525484,0.0037275273,0.016477404,0.00036668466,0.0036720478,0.010783823,0.029209943,-0.027573299,0.0009691571,0.034646932,-0.0055652848,-0.017906,0.009133309,0.01592261,-0.031651042,0.01803083,-0.0057906704,0.032400016,0.0072955512,-0.0072539416,0.013030742,0.0019747226,0.006775431,0.023564907,-0.027143333,0.01586713,-0.018585624,0.018114049,-0.01059658,0.010360792,-0.011310878,0.010125005,0.0028398556,-0.015312335,-0.015104287,-0.0025936656,-0.022066962,0.010395466,-0.028128095,-0.019889392,0.041581865,0.0356733,0.0190572,0.010055655,0.000041853415,0.0025919317,-0.018918501,-0.022372099,-0.010749148,-0.027198814,0.015284596,0.020263879,-0.014937849,0.01803083,-0.019556515,-0.0023925523,-0.020569015,-0.024008743,0.010201288,0.018086309,-0.006560448,0.030402754,-0.029154465,0.0106381895,-0.028627409,0.016768672,0.03181748,0.0007095305,-0.0006332462,0.0031467266,-0.027184943,0.0055340775,0.0022573213,-0.018710453,0.0006384474,-0.017378947,-0.005128384,-0.008398206,0.0022642561,0.019806173,0.0023682802,-0.016283225,0.0190572,-0.013190245,-0.015007198,-0.010229029,0.0122193545,0.011331683,-0.008516099,-0.007989044,-0.014188876,0.018238878,0.009043154,-0.040444538,-0.011213789,-0.0019383142,0.0014476676,-0.006449489,-0.017254118,-0.0006939269,-0.018835282,-0.013703431,-0.02434162,0.011747779,-0.0025364524,0.0007021621,-0.0036339057,0.007489729,-0.0034848046,-0.014951719,0.03167878,0.012753344,-0.005176929,-0.022732716,-0.016505145,-0.005097177,-0.026255662,-0.008842042,0.010887847,-0.000096547294,-0.00951473,-0.03481337,0.0070146862,0.007975175,-0.022427578,0.0053086923,0.03511851,-0.012302574,0.013335879,-0.018654974,-0.18252748,0.0028346544,0.024577407,-0.029709259,0.027864566,0.025797956,0.002408156,-0.0002698123,0.005759463,0.0030877795,0.012801889,0.0074550547,-0.04152639,-0.0018689649,-0.012857368,-0.0084952945,-0.000054964774,0.011331683,0.0029178737,0.010804628,0.023828436,-0.020693844,0.011498122,-0.022774326,0.007115243,0.018405316,0.0005461261,0.009327487,-0.0040846765,-0.028544191,-0.010686734,-0.018488536,0.017281856,-0.0012309508,-0.0150488075,0.014799151,-0.011872608,-0.027711999,-0.01708768,0.008321921,0.0059120315,0.040860634,0.013446838,-0.0037483322,0.005152656,0.012073721,0.009001545,0.012788019,0.027351381,-0.026366621,0.0042337775,-0.0018013492,0.0030756434,0.005430054,0.033315424,0.0012734274,-0.043939743,0.025950525,-0.02099898,-0.006151287,-0.021012852,-0.028433232,0.020721585,-0.016879631,-0.010520295,-0.0135369925,-0.024258401,0.0103746625,-0.019931002,0.003027099,0.008204027,-0.013176376,0.024716107,-0.012919783,0.0058808243,-0.0012612912,0.0066540698,0.010811563,-0.0015248187,-0.0140640475,-0.02228888,0.025978265,-0.012489817,-0.018807542,0.0085646445,-0.0014832091,-0.0016305764,0.0018308227,-0.007056296,-0.016019698,0.0046186666,-0.024091963,-0.018738193,-0.021470558,0.01482689,0.027947785,-0.007850346,0.012288704,-0.0026976895,-0.014563362,0.014175006,-0.00047027523,-0.0048856614,0.011505056,0.04760139,-0.0046498734,0.019667475,-0.008536904,0.027975526,0.0023006645,-0.009570209,-0.0010359058,0.012018242,0.035867482,-0.0077671264,0.007760192,-0.012510622,-0.01159521,0.0038731608,-0.009951631,0.040943854,-0.0036616453,-0.0190572,0.0127464095,0.0006341131,-0.015353945,-0.10768566,-0.02848871,-0.00011756881,0.02644984,-0.011935023,0.021942133,-0.031207206,0.014674322,0.0074273148,0.031872958,-0.019445557,-0.002134226,-0.01893237,-0.010097264,0.0011399299,0.007933565,-0.0043308665,-0.009882282,-0.0069349343,0.036810633,0.005305225,-0.0076492326,0.006054198,0.014563362,-0.011401032,0.011851803,-0.0024896415,0.03706029,0.008349661,-0.0019209769,0.002571127,-0.019778432,0.007760192,-0.032316796,-0.008356596,0.0006618528,-0.014618842,-0.014341445,0.016047439,-0.0033374373,0.02314881,0.007205397,0.021207029,-0.017739562,0.011435707,-0.013710366,0.0012274834,0.004719223,-0.0022642561,-0.026963025,-0.010360792,0.00084172765,-0.018474666,-0.00082742434,0.0093899015,-0.013107026,-0.0028727967,0.02002809,-0.009632624,-0.0014754073,0.010353858,0.0016383782,-0.0068933247,0.04435584,0.008363531,-0.015742302,-0.02321816,-0.026130833,0.027850697,-0.023509428,0.016019698,0.03256645,-0.025936656,0.011151374,-0.019306857,0.0129405875,-0.016671583,0.010548036,0.02013905,-0.022815935,-0.009126374,-0.019140419,0.016130658,-0.020804804,0.026644018,0.011588275,-0.005128384,-0.006664472,0.008086134,0.002212244,-0.0153816845,0.008294182,0.021415077,-0.009854542,-0.0032299457,-0.0010731812,-0.01482689,-0.027309772,0.00066098594,0.010450946,-0.012316444,-0.007871151,-0.072456196,0.0009197457,0.008204027,-0.005371107,0.017628603,0.0020267346,0.005381509,-0.0079405,0.009896152,0.02965378,-0.015298465,0.018322097,-0.0013601141,-0.02432775,-0.019140419,-0.028294533,0.035534605,0.02016679,0.020041961,0.015312335,0.022663366,-0.0050798394,0.037975702,0.0039355755,-0.023856174,-0.007822606,-0.0023162682,0.010215159,-0.013897609,-0.028031005,0.01055497,-0.011338618,-0.00012883807,0.026865937,0.0074550547,-0.017434426,0.014077917,0.00034067867,-0.00013642316,0.06025071,-0.02525703,-0.03620036,-0.0070909704,-0.009438446,0.01215694,0.01800309,-0.027004635,0.02009744,0.0064529567,-0.01316944,0.0061998316,0.013550862,-0.02119316,-0.034646932,-0.012045981,-0.010409337,0.019681344,0.0080029145,0.011935023,-0.0077879312,0.028155833,0.048433583,0.0026526125,0.00042476473,-0.014168072,-0.00633853,-0.009230398,-0.008162417,0.012371923,-0.030957548,-0.0200697,-0.00948699,0.0026335414,0.005031295,0.019098809,-0.008308051,-0.02319042,0.008959935,-0.0030635074,0.028627409,0.025548298,0.016269356,-0.016574493,0.026741108,0.023634257,0.024993503,-0.01678254,0.009029285,0.012045981,0.0071637873,-0.007961305,0.015756171,0.0061270148,-0.003606166,0.026810456,0.014660452,-0.005825345,-0.014230486,0.005142254,0.0134676425,-0.014660452,-0.007080568,0.0054508587,-0.020555146,-0.0020926164,-0.0039667827,-0.026158573,-0.042663716,-0.009570209,0.013980828,0.019681344,0.004802442,-0.010721409,0.006702614,-0.025492819,0.016089048,-0.006990414,-0.01798922,-0.018169528,0.037753783,0.021359598,0.011775519,0.023634257,0.010936392,0.00850223,0.01214307,0.028877066,-0.0057698656,0.0021671671,0.0044140858,0.012801889,-0.008807367,-0.029293163,-0.010229029,-0.0018134854,-0.023842305,0.0101458095,0.017739562,-0.029431863,0.047934268,0.0026266065,-0.004015327,0.016089048,-0.02205309,0.012337249,0.014244355,0.020360967,-0.04260824,-0.010797693,0.009070895,-0.0006332462,0.0036789828,-0.0140293725,-0.032122616,-0.0036893853,-0.01904333,0.019265248,0.002271191,-0.0055132727,-0.0018464263,-0.0055028703,0.029764738,0.009327487,-0.02868289,-0.0085646445,0.014168072,-0.0011243263,-0.0057109185,-0.024022613,0.028932547,0.0028450568,-0.04629762,-0.011338618,0.0070250886,-0.00013393092,-0.021720216,-0.007961305,0.012801889,0.028072614,-0.0042407126,0.018682713,-0.019722953,-0.022538537,-0.0032507505,0.010645124,-0.021803435,-0.020763194,-0.025992135]
- # ===== Query =====
- query_vector = [0.0042927247,-0.007413445,0.00034457954,-0.01897398,-0.00251218,0.020693844,-0.027351381,-0.008647864,-0.000042449385,-0.012337249,-0.006678342,0.0072608762,0.0051838635,-0.020555146,0.00017055604,0.028821588,0.047351733,-0.0045319796,0.008959935,-0.012323379,-0.008585449,0.022483058,0.0013869869,-0.01801696,-0.0014806085,0.01269093,0.021539906,-0.03592296,-0.0024116235,-0.012087591,0.014369184,-0.0019261781,-0.03506303,-0.028932547,-0.008162417,-0.026949156,-0.011782453,0.00049628125,0.018044699,0.011213789,0.014452403,0.028072614,-0.010957196,-0.0006033393,-0.008876716,-0.008079199,-0.011789389,-0.007517469,-0.028960286,-0.0059328363,0.006758094,0.021997612,-0.004521577,-0.015506513,-0.010208224,-0.014577232,-0.004726158,0.025714736,-0.0025104464,-0.016421925,-0.025922785,-0.00038467214,-0.021054462,0.019611996,-0.013315074,0.0014346646,-0.0017857456,0.01572843,-0.01003485,-0.008675603,0.02323203,0.0033079637,0.0056970487,-0.0129405875,0.035534605,-0.010769953,-0.023010112,-0.001464138,-0.008932196,0.015700692,0.010166614,-0.022483058,0.00788502,0.0029698857,0.018710453,0.0029768206,-0.014341445,0.008897521,-0.013141701,-0.037115768,0.0148546295,0.004067339,-0.0060680676,0.02529864,-0.027601039,0.021345729,-0.010721409,0.033676043,-0.0191959,-0.06807332,-0.009812932,0.015312335,-0.010825433,-0.018613365,-0.02110994,0.006248376,0.008550774,0.0044556954,0.023134941,-0.026990766,-0.010097264,0.021623125,-0.0070979055,-0.04798975,0.0006449489,-0.0011338618,0.0033894493,-0.011172179,0.0053641717,-0.010430141,0.021484427,-0.012885109,0.010298378,-0.013003002,0.019917132,0.010832367,-0.04235858,-0.010222093,-0.0017658077,0.009466185,0.023564907,0.01998648,0.0036928526,0.01162295,-0.022413708,0.016421925,-0.008842042,0.0043065944,-0.017503774,-0.031262685,0.007739387,0.033787,-0.040583238,-0.00029863563,0.003266354,0.025423469,0.012579971,0.023759086,0.0168935,0.0042996593,0.015437164,-0.0035125443,0.029043505,0.0031709988,-0.0038350187,-0.0030479038,-0.009889216,0.008696408,0.0022053092,0.003027099,-0.009507795,0.0028918677,0.012406598,-0.022344358,0.009695038,0.017462164,0.007059763,0.012316444,-0.0020596755,-0.019487167,-0.0132734645,0.038197618,-0.022385968,0.030153096,0.00017857457,0.019736823,0.010624319,0.0026023341,-0.014715931,0.0079405,-0.024965765,0.026200183,0.018627234,0.0108670425,-0.0010913853,0.009181853,0.01484076,-0.0072192666,0.031207206,-0.020638365,-0.004466098,0.016061308,0.0054855333,0.004379411,-0.6910524,-0.032178096,0.009660364,-0.005471663,0.012371923,0.0264221,0.007586818,-0.0030929807,-0.012434337,0.011678429,0.019320728,-0.0058392147,-0.009098634,-0.015132027,-0.013571667,-0.030014396,0.008328856,-0.03281611,0.008481425,0.002597133,-0.024008743,-0.0026543462,-0.009015415,-0.011983567,0.009154114,0.0044799675,0.018155659,-0.018821413,-0.008890586,-0.007989044,-0.0075729485,0.0119211525,-0.000356499,-0.0021550308,0.019487167,0.0044314233,-0.0039737173,0.028280662,0.021317989,0.043828785,-0.01319718,-0.030097615,0.0011035214,0.012815759,-0.022691106,0.028211314,0.016602233,-0.0020648767,0.023981003,0.015756171,0.012337249,0.0019556514,0.01583939,0.018710453,0.02334299,-0.0115536,0.017531514,-0.008946066,-0.0024619016,-0.0015447567,-0.010069525,0.0008317587,-0.014743671,-0.027295902,-0.02328751,0.027878437,-0.032483235,0.009743583,0.019917132,-0.010215159,0.022330489,0.022815935,-0.014604972,-0.0008096536,-0.0001595035,0.016075179,0.022372099,-0.0052601476,-0.015132027,0.0032004723,0.0068309107,-0.010083395,-0.02106833,-0.0066228625,0.028904807,-0.020915762,-0.007628428,0.010478686,0.0037240598,0.0037136574,0.014299835,0.02868289,0.0009223463,-0.0052428106,-0.014702061,0.009701974,-0.011810194,-0.0084952945,0.00659859,-0.013044612,-0.005218538,0.000095517884,0.021248639,0.010346922,0.011352488,0.0045909267,-0.004670678,0.020763194,0.044022962,-0.021539906,0.0077809966,-0.00095181976,-0.0062934533,0.010714474,-0.00017369844,-0.033592824,0.0066089923,-0.0025104464,0.021997612,-0.01805857,-0.0023474754,0.0060819373,0.006276116,-0.011962762,0.0061720917,0.01590874,-0.018946242,-0.020888023,-0.017670212,0.0003892232,0.017795041,0.013377489,0.011269269,-0.015464904,0.028252924,0.009681169,0.015534253,-0.020541277,0.010679799,-0.007836476,-0.027073985,-0.015561993,0.005603427,-0.0010081661,-0.013342814,-0.006154754,-0.022427578,-0.0022053092,-0.019279119,0.012933653,0.017448295,0.012815759,0.0019105745,0.028849328,0.034674674,-0.023689736,-0.0062449086,-0.0008872382,-0.0068690525,0.013516188,0.010561905,0.01814179,-0.018391447,0.003644308,-0.0026716834,-0.017032199,-0.0070181536,0.015173636,-0.0076006884,-0.04776783,0.01110283,-0.03919625,-0.015451034,0.010242898,0.011123635,0.0003929074,-0.017808912,0.01603357,0.021387339,-0.0055479477,-0.016297096,-0.0038107466,-0.020333229,-0.0032958277,0.018405316,0.0031796675,0.032316796,0.020555146,-0.004365541,0.012933653,0.009951631,0.02227501,0.0012266166,0.0085299695,0.019182028,0.009819867,0.0014468007,0.010020981,-0.0030704422,0.02314881,0.04449454,-0.00095702097,0.01794761,-0.011095895,0.0017319999,-0.042968854,-0.0022139777,-0.038197618,0.021595387,0.015437164,0.0070909704,-0.020236138,0.0027913111,-0.039473645,0.012614646,0.012316444,-0.009743583,0.001855095,-0.019681344,-0.009743583,0.00084866263,-0.017157027,0.00058080076,-0.00075634127,0.0057143862,0.017198637,0.011858738,0.012420468,-0.00026157705,-0.013849064,0.017420555,-0.0037517995,-0.001249155,0.0019539178,0.00023535434,0.02323203,0.013439903,-0.018987851,0.039751045,0.018641103,-0.0019660539,0.009119439,0.01319718,-0.0072678113,0.010464816,-0.008821237,0.016505145,0.008710277,0.0009656896,-0.0037726043,-0.006210234,-0.0020388707,-0.033620562,-0.001653115,0.01678254,-0.021359598,0.016297096,0.022857545,0.012240159,0.026935285,0.009743583,0.005721321,0.004119351,-0.0048717917,0.008821237,0.0018377576,0.00633853,-0.01159521,-0.023398468,0.008412075,-0.03287159,-0.022496928,0.0030635074,-0.01271867,0.009188788,0.021539906,-0.0035749588,0.0062969206,-0.008751887,-0.0121846795,-0.00661246,-0.0108670425,0.00954247,0.017517645,0.0061408845,-0.013509252,-0.012191615,-0.010485621,-0.00028606606,0.009965501,-0.01697672,0.0140640475,0.012538361,0.0042476472,-0.0034223902,-0.010804628,0.007732452,-0.014494013,-0.010423207,-0.0030756434,-0.0034657335,-0.0132387895,0.0005292222,-0.006678342,0.0117269745,0.008800432,-0.0062449086,-0.022427578,-0.018419186,-0.017795041,0.012288704,0.0028329208,-0.0077948663,0.0013878538,-0.0072192666,0.014604972,-0.008328856,-0.005766398,0.026852066,-0.0041505583,-0.019209769,-0.005579155,-0.02644984,-0.013682626,0.074231535,0.022982374,-0.011747779,0.04737947,0.0021376936,-0.023315249,-0.010811563,-0.0041366885,0.00527055,-0.01907107,0.006158222,-0.027060114,0.018280488,0.005957109,-0.011858738,0.0072539416,-0.014452403,-0.02220566,0.015326206,-0.0036928526,-0.017906,-0.024008743,0.0070008165,0.027129464,0.0033287685,0.0022798597,-0.0025416536,0.02231662,-0.006650602,-0.026269533,-0.003377313,0.0046360036,0.008536904,0.012462078,0.0075660134,0.019223638,0.016740931,0.0013055014,0.0001641629,-0.012545297,0.01585326,0.020929633,0.010069525,-0.018779803,0.0101042,-0.021775695,-0.0098476065,0.033481862,-0.00319007,-0.0024237595,0.019501036,0.006761561,-0.0073787705,-0.016879631,0.009403771,0.009112504,0.0047608325,0.015367815,-0.007177657,-0.00002692705,-0.027129464,-0.044217143,0.020444186,0.0017944142,0.0011052552,-0.009653429,-0.038475018,0.0013497117,-0.023592647,0.000589036,0.0035957636,-0.029820219,-0.00023080329,-0.022496928,0.008079199,-0.00632466,0.029293163,-0.011928087,0.0046810806,0.030125355,-0.0018932371,0.0013809188,-0.0026526125,-0.030069876,0.0044418257,0.0068447804,-0.0009275475,-0.0065188385,0.011401032,0.021900523,0.0061339494,0.004902999,0.02653306,0.005773333,-0.0012517556,0.00581841,0.01994487,0.020263879,-0.00839127,-0.012323379,0.0025728608,-0.023065591,-0.00661246,0.010485621,0.008210963,0.0032351469,0.0011980099,0.031290423,-0.014161136,0.007725517,0.028849328,-0.007049361,0.018155659,0.0148685,0.0041332208,0.019528776,0.0056450367,0.01801696,0.005246278,-0.0220947,-0.001432064,-0.028100355,0.013689561,0.017642474,-0.0050139576,-0.016796412,0.00212209,-0.016560623,-0.013849064,0.0007424714,-0.016089048,0.023967134,0.0030739098,-0.032677412,-0.03206714,-0.009986306,-0.019833913,0.021886652,-0.020818673,-0.011498122,0.0005365906,0.005274018,0.021914393,-0.023093332,-0.0018446926,-0.047240775,-0.01058271,-0.0022538537,-0.014923979,0.024674498,-0.013960023,-0.0022746585,-0.007864215,-0.010769953,-0.0071637873,-0.049238034,-0.022011481,-0.019958742,0.043745566,0.018641103,0.019847782,-0.016435795,0.01697672,0.016158398,0.0028953352,0.0068690525,0.004972348,0.013793585,-0.035867482,0.0191959,0.028655149,-0.006137417,0.017725693,-0.008897521,0.0023145343,0.04208118,-0.003514278,-0.020901892,-0.0026006005,-0.0135369925,-0.014098722,0.0072400714,-0.0021966405,0.014979458,-0.009244268,-0.001380052,0.006449489,-0.0015967686,-0.012108396,-0.019931002,0.03292707,-0.024521928,0.031013027,-0.017545383,-0.004667211,-0.009473121,-0.0020683443,-0.008536904,-0.002578062,0.008113873,0.0028294532,0.019736823,0.00086599996,0.0027965123,-0.0048059095,0.0063940096,-0.0034900059,-0.011525861,0.010624319,-0.014618842,0.010506426,-0.0016297096,-0.016200008,-0.03284385,0.0064078793,0.011241529,-0.0075452086,0.01693511,-0.0121846795,-0.010284508,0.038585976,-0.0045077074,0.013966958,-0.012808824,0.030985286,0.037726045,0.0015369549,-0.026796587,-0.008370466,-0.0013289069,-0.0003181401,0.02323203,0.0074689244,0.007621493,-0.027878437,0.0070181536,0.009154114,-0.012559166,-0.03706029,0.021803435,0.016297096,0.0012985665,-0.019778432,0.00033179327,-0.024951894,0.026297271,0.0065708505,-0.003065241,-0.013100091,-0.008516099,0.0007281681,0.009313617,0.0016600499,0.03270515,0.011879543,0.005801073,-0.012635451,-0.0038904983,-0.013044612,0.009459251,-0.0046845484,0.024050353,-0.01572843,0.0044834353,0.005048632,-0.0076769725,0.0003972417,-0.012469012,-0.004670678,0.03481337,-0.018322097,-0.0064182817,-0.011616015,0.02657467,0.019917132,0.010624319,-0.0038731608,-0.017725693,-0.026227923,-0.0062449086,0.022594016,0.023925524,0.0011884744,-0.012087591,-0.0014702061,-0.0063697374,-0.007857281,-0.0042615174,-0.000051063875,-0.015561993,-0.007808736,0.009944696,0.00954247,0.017808912,0.0052948226,-0.015783912,-0.0026543462,0.024660626,-0.02337073,0.027448472,-0.02117929,-0.016213877,-0.025423469,0.0069141295,-0.0012768948,-0.025173813,0.02539573,-0.017059939,-0.023551038,-0.012420468,-0.020901892,0.018211138,0.0026803522,-0.02016679,0.019667475,-0.01114444,0.017323466,-0.033287685,-0.043662347,0.023010112,-0.014396924,0.0055375453,0.0048891287,-0.011026545,0.009805998,0.014285965,0.013183311,-0.006137417,-0.024840936,-0.017184768,-0.026075354,0.020846413,-0.00029235083,-0.022066962,-0.013786649,-0.011511991,-0.012656256,0.012045981,0.0026283402,-0.0051838635,-0.0026664822,-0.008259507,0.023981003,0.011858738,-0.021623125,-0.0034657335,-0.0028936013,-0.010707539,-0.023426209,0.0075244037,-0.00037773722,0.030319534,0.0071707224,-0.0052358755,-0.018322097,0.010138874,-0.024147442,-0.018710453,0.024410969,0.005291355,0.021872783,0.0001582032,0.0069279997,0.0029109388,-0.0015733633,0.015284596,-0.026685627,-0.0052636154,0.0025173812,-0.006130482,0.02231662,-0.009133309,-0.010978001,-0.023981003,0.021581516,-0.007063231,0.0048925965,0.00223825,-0.004847519,0.0050659697,-0.0082664415,0.023634257,0.010430141,0.014244355,0.015367815,-0.019501036,-0.009930826,0.013301204,-0.015340075,-0.024757717,-0.008065329,-0.016338706,-0.008751887,0.036366798,-0.011574405,-0.0129405875,0.022108572,-0.010326117,0.015783912,0.018821413,-0.0024358958,0.0066401996,0.0016513813,-0.007878086,-0.014369184,-0.0057109185,-0.027642649,-0.0047296253,0.014729801,-0.00065751845,0.020763194,-0.01210146,0.0009795595,-0.013349749,-0.0024653692,-0.024258401,-0.0013471111,-0.0051630586,0.015298465,0.021650866,-0.02314881,-0.02427227,0.0000668571,-0.018322097,-0.007933565,-0.011498122,0.010908652,-0.0074758595,0.0090570245,0.005100644,-0.018419186,-0.014383054,-0.0051457216,0.012788019,-0.022843674,-0.010138874,0.17021103,-0.031345904,0.0020614092,0.024091963,-0.004341269,0.005180396,0.019182028,-0.0011312612,0.0013644483,0.016408054,0.0028173171,-0.0062379735,-0.01106122,0.00850223,0.008897521,-0.0047747022,-0.02334299,-0.012801889,-0.0202084,-0.014181941,0.0033305022,-0.0015196175,-0.0083011165,-0.03167878,0.031123986,0.0016505144,-0.01003485,-0.021997612,0.004341269,-0.0058946945,-0.011241529,-0.016477404,-0.00028324872,-0.009785193,-0.019639734,0.0076561677,-0.0029525484,0.0037275273,0.016477404,0.00036668466,0.0036720478,0.010783823,0.029209943,-0.027573299,0.0009691571,0.034646932,-0.0055652848,-0.017906,0.009133309,0.01592261,-0.031651042,0.01803083,-0.0057906704,0.032400016,0.0072955512,-0.0072539416,0.013030742,0.0019747226,0.006775431,0.023564907,-0.027143333,0.01586713,-0.018585624,0.018114049,-0.01059658,0.010360792,-0.011310878,0.010125005,0.0028398556,-0.015312335,-0.015104287,-0.0025936656,-0.022066962,0.010395466,-0.028128095,-0.019889392,0.041581865,0.0356733,0.0190572,0.010055655,0.000041853415,0.0025919317,-0.018918501,-0.022372099,-0.010749148,-0.027198814,0.015284596,0.020263879,-0.014937849,0.01803083,-0.019556515,-0.0023925523,-0.020569015,-0.024008743,0.010201288,0.018086309,-0.006560448,0.030402754,-0.029154465,0.0106381895,-0.028627409,0.016768672,0.03181748,0.0007095305,-0.0006332462,0.0031467266,-0.027184943,0.0055340775,0.0022573213,-0.018710453,0.0006384474,-0.017378947,-0.005128384,-0.008398206,0.0022642561,0.019806173,0.0023682802,-0.016283225,0.0190572,-0.013190245,-0.015007198,-0.010229029,0.0122193545,0.011331683,-0.008516099,-0.007989044,-0.014188876,0.018238878,0.009043154,-0.040444538,-0.011213789,-0.0019383142,0.0014476676,-0.006449489,-0.017254118,-0.0006939269,-0.018835282,-0.013703431,-0.02434162,0.011747779,-0.0025364524,0.0007021621,-0.0036339057,0.007489729,-0.0034848046,-0.014951719,0.03167878,0.012753344,-0.005176929,-0.022732716,-0.016505145,-0.005097177,-0.026255662,-0.008842042,0.010887847,-0.000096547294,-0.00951473,-0.03481337,0.0070146862,0.007975175,-0.022427578,0.0053086923,0.03511851,-0.012302574,0.013335879,-0.018654974,-0.18252748,0.0028346544,0.024577407,-0.029709259,0.027864566,0.025797956,0.002408156,-0.0002698123,0.005759463,0.0030877795,0.012801889,0.0074550547,-0.04152639,-0.0018689649,-0.012857368,-0.0084952945,-0.000054964774,0.011331683,0.0029178737,0.010804628,0.023828436,-0.020693844,0.011498122,-0.022774326,0.007115243,0.018405316,0.0005461261,0.009327487,-0.0040846765,-0.028544191,-0.010686734,-0.018488536,0.017281856,-0.0012309508,-0.0150488075,0.014799151,-0.011872608,-0.027711999,-0.01708768,0.008321921,0.0059120315,0.040860634,0.013446838,-0.0037483322,0.005152656,0.012073721,0.009001545,0.012788019,0.027351381,-0.026366621,0.0042337775,-0.0018013492,0.0030756434,0.005430054,0.033315424,0.0012734274,-0.043939743,0.025950525,-0.02099898,-0.006151287,-0.021012852,-0.028433232,0.020721585,-0.016879631,-0.010520295,-0.0135369925,-0.024258401,0.0103746625,-0.019931002,0.003027099,0.008204027,-0.013176376,0.024716107,-0.012919783,0.0058808243,-0.0012612912,0.0066540698,0.010811563,-0.0015248187,-0.0140640475,-0.02228888,0.025978265,-0.012489817,-0.018807542,0.0085646445,-0.0014832091,-0.0016305764,0.0018308227,-0.007056296,-0.016019698,0.0046186666,-0.024091963,-0.018738193,-0.021470558,0.01482689,0.027947785,-0.007850346,0.012288704,-0.0026976895,-0.014563362,0.014175006,-0.00047027523,-0.0048856614,0.011505056,0.04760139,-0.0046498734,0.019667475,-0.008536904,0.027975526,0.0023006645,-0.009570209,-0.0010359058,0.012018242,0.035867482,-0.0077671264,0.007760192,-0.012510622,-0.01159521,0.0038731608,-0.009951631,0.040943854,-0.0036616453,-0.0190572,0.0127464095,0.0006341131,-0.015353945,-0.10768566,-0.02848871,-0.00011756881,0.02644984,-0.011935023,0.021942133,-0.031207206,0.014674322,0.0074273148,0.031872958,-0.019445557,-0.002134226,-0.01893237,-0.010097264,0.0011399299,0.007933565,-0.0043308665,-0.009882282,-0.0069349343,0.036810633,0.005305225,-0.0076492326,0.006054198,0.014563362,-0.011401032,0.011851803,-0.0024896415,0.03706029,0.008349661,-0.0019209769,0.002571127,-0.019778432,0.007760192,-0.032316796,-0.008356596,0.0006618528,-0.014618842,-0.014341445,0.016047439,-0.0033374373,0.02314881,0.007205397,0.021207029,-0.017739562,0.011435707,-0.013710366,0.0012274834,0.004719223,-0.0022642561,-0.026963025,-0.010360792,0.00084172765,-0.018474666,-0.00082742434,0.0093899015,-0.013107026,-0.0028727967,0.02002809,-0.009632624,-0.0014754073,0.010353858,0.0016383782,-0.0068933247,0.04435584,0.008363531,-0.015742302,-0.02321816,-0.026130833,0.027850697,-0.023509428,0.016019698,0.03256645,-0.025936656,0.011151374,-0.019306857,0.0129405875,-0.016671583,0.010548036,0.02013905,-0.022815935,-0.009126374,-0.019140419,0.016130658,-0.020804804,0.026644018,0.011588275,-0.005128384,-0.006664472,0.008086134,0.002212244,-0.0153816845,0.008294182,0.021415077,-0.009854542,-0.0032299457,-0.0010731812,-0.01482689,-0.027309772,0.00066098594,0.010450946,-0.012316444,-0.007871151,-0.072456196,0.0009197457,0.008204027,-0.005371107,0.017628603,0.0020267346,0.005381509,-0.0079405,0.009896152,0.02965378,-0.015298465,0.018322097,-0.0013601141,-0.02432775,-0.019140419,-0.028294533,0.035534605,0.02016679,0.020041961,0.015312335,0.022663366,-0.0050798394,0.037975702,0.0039355755,-0.023856174,-0.007822606,-0.0023162682,0.010215159,-0.013897609,-0.028031005,0.01055497,-0.011338618,-0.00012883807,0.026865937,0.0074550547,-0.017434426,0.014077917,0.00034067867,-0.00013642316,0.06025071,-0.02525703,-0.03620036,-0.0070909704,-0.009438446,0.01215694,0.01800309,-0.027004635,0.02009744,0.0064529567,-0.01316944,0.0061998316,0.013550862,-0.02119316,-0.034646932,-0.012045981,-0.010409337,0.019681344,0.0080029145,0.011935023,-0.0077879312,0.028155833,0.048433583,0.0026526125,0.00042476473,-0.014168072,-0.00633853,-0.009230398,-0.008162417,0.012371923,-0.030957548,-0.0200697,-0.00948699,0.0026335414,0.005031295,0.019098809,-0.008308051,-0.02319042,0.008959935,-0.0030635074,0.028627409,0.025548298,0.016269356,-0.016574493,0.026741108,0.023634257,0.024993503,-0.01678254,0.009029285,0.012045981,0.0071637873,-0.007961305,0.015756171,0.0061270148,-0.003606166,0.026810456,0.014660452,-0.005825345,-0.014230486,0.005142254,0.0134676425,-0.014660452,-0.007080568,0.0054508587,-0.020555146,-0.0020926164,-0.0039667827,-0.026158573,-0.042663716,-0.009570209,0.013980828,0.019681344,0.004802442,-0.010721409,0.006702614,-0.025492819,0.016089048,-0.006990414,-0.01798922,-0.018169528,0.037753783,0.021359598,0.011775519,0.023634257,0.010936392,0.00850223,0.01214307,0.028877066,-0.0057698656,0.0021671671,0.0044140858,0.012801889,-0.008807367,-0.029293163,-0.010229029,-0.0018134854,-0.023842305,0.0101458095,0.017739562,-0.029431863,0.047934268,0.0026266065,-0.004015327,0.016089048,-0.02205309,0.012337249,0.014244355,0.020360967,-0.04260824,-0.010797693,0.009070895,-0.0006332462,0.0036789828,-0.0140293725,-0.032122616,-0.0036893853,-0.01904333,0.019265248,0.002271191,-0.0055132727,-0.0018464263,-0.0055028703,0.029764738,0.009327487,-0.02868289,-0.0085646445,0.014168072,-0.0011243263,-0.0057109185,-0.024022613,0.028932547,0.0028450568,-0.04629762,-0.011338618,0.0070250886,-0.00013393092,-0.021720216,-0.007961305,0.012801889,0.028072614,-0.0042407126,0.018682713,-0.019722953,-0.022538537,-0.0032507505,0.010645124,-0.021803435,-0.020763194,-0.025992135]
+import time
+time.sleep(1) # Sleep so we don't query before async indexing finishes
- response = questions.query.near_vector(
- near_vector=query_vector,
- limit=2,
- return_metadata=wvc.query.MetadataQuery(certainty=True)
- )
+response = questions.query.near_vector(
+ near_vector=query_vector,
+ limit=2,
+ return_metadata=wvc.query.MetadataQuery(certainty=True)
+)
- print(response)
+print(response)
- # ===== Test import =====
- # ===== Test query results =====
- assert len(response.objects) == 2
- assert type(response.objects[0].metadata.certainty) == float
- assert type(response.objects[0].properties) == dict
+# ===== Test import =====
- client.collections.delete("Question")
+# ===== Test query results =====
+assert len(response.objects) == 2
+assert type(response.objects[0].metadata.certainty) == float
+assert type(response.objects[0].properties) == dict
+
+client.collections.delete("Question")
-finally:
- client.close()
+client.close()
diff --git a/_includes/code/quickstart.byov.schema.mdx b/_includes/code/quickstart.byov.schema.mdx
index 5c99819c66..4c9d829338 100644
--- a/_includes/code/quickstart.byov.schema.mdx
+++ b/_includes/code/quickstart.byov.schema.mdx
@@ -39,7 +39,7 @@ import ByovAllShCode from '!!raw-loader!/_includes/code/quickstart.byov.all.sh';
text={ByovAllTsCodeLegacy}
startMarker="// Class definition"
endMarker="// Import data"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/collection.definition.mdx b/_includes/code/quickstart/collection.definition.mdx
index 768e211c23..ccf63a9eae 100644
--- a/_includes/code/quickstart/collection.definition.mdx
+++ b/_includes/code/quickstart/collection.definition.mdx
@@ -44,7 +44,7 @@ import GoCollectionDefine from '!!raw-loader!/_includes/code/quickstart/go-colle
text={EndToEndTSCodeLegacy}
startMarker="// START CreateCollection"
endMarker="// END CreateCollection"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/connect.withkey.mdx b/_includes/code/quickstart/connect.withkey.mdx
index 444ea5197f..32a17a907e 100644
--- a/_includes/code/quickstart/connect.withkey.mdx
+++ b/_includes/code/quickstart/connect.withkey.mdx
@@ -47,7 +47,7 @@ import GoConnectCode from '!!raw-loader!/_includes/code/quickstart/go-connect.go
text={EndToEndTSCodeLegacy}
startMarker="// InstantiationExample"
endMarker="// END InstantiationExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/endtoend.mdx b/_includes/code/quickstart/endtoend.mdx
index fde30475ae..9eb4292300 100644
--- a/_includes/code/quickstart/endtoend.mdx
+++ b/_includes/code/quickstart/endtoend.mdx
@@ -38,7 +38,7 @@ import GoCreateAll from '!!raw-loader!/_includes/code/quickstart/go-create-run-a
text={EndToEndTSCodeLegacy}
startMarker="// EndToEndExample"
endMarker="// END EndToEndExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/generativesearch.grouped.mdx b/_includes/code/quickstart/generativesearch.grouped.mdx
index b87850e118..0ee3b96d38 100644
--- a/_includes/code/quickstart/generativesearch.grouped.mdx
+++ b/_includes/code/quickstart/generativesearch.grouped.mdx
@@ -56,7 +56,7 @@ import GoGenGrouped from '!!raw-loader!/_includes/code/quickstart/go-query-gener
text={EndToEndTSCodeLegacy}
startMarker="// GenerativeSearchGroupedTaskExample"
endMarker="// END GenerativeSearchGroupedTaskExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/generativesearch.single.mdx b/_includes/code/quickstart/generativesearch.single.mdx
index 6e6a88a895..e32608b002 100644
--- a/_includes/code/quickstart/generativesearch.single.mdx
+++ b/_includes/code/quickstart/generativesearch.single.mdx
@@ -56,7 +56,7 @@ import GoGenerative from '!!raw-loader!/_includes/code/quickstart/go-query-gener
text={EndToEndTSCodeLegacy}
startMarker="// GenerativeSearchExample"
endMarker="// END GenerativeSearchExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/import.custom.vectors.mdx b/_includes/code/quickstart/import.custom.vectors.mdx
index eb6d9f29b6..a78d678f46 100644
--- a/_includes/code/quickstart/import.custom.vectors.mdx
+++ b/_includes/code/quickstart/import.custom.vectors.mdx
@@ -32,7 +32,7 @@ import EndToEndTSCode from '!!raw-loader!/_includes/code/quickstart/endtoend.ts'
text={EndToEndTSCode}
startMarker="// Import data with custom vectors"
endMarker="// END Import data with custom vectors"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/import.mdx b/_includes/code/quickstart/import.mdx
index 995477aed1..c11925062a 100644
--- a/_includes/code/quickstart/import.mdx
+++ b/_includes/code/quickstart/import.mdx
@@ -37,7 +37,7 @@ import GoImportObjects from '!!raw-loader!/_includes/code/quickstart/go-add-obje
text={EndToEndTSCodeLegacy}
startMarker="// Import data function"
endMarker="// END Import data function"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/neartext.mdx b/_includes/code/quickstart/neartext.mdx
index a0b4e76f66..9005f10d3f 100644
--- a/_includes/code/quickstart/neartext.mdx
+++ b/_includes/code/quickstart/neartext.mdx
@@ -63,7 +63,7 @@ import GoNearText from '!!raw-loader!/_includes/code/quickstart/go-query-neartex
text={EndToEndTSCodeLegacy}
startMarker="// NearTextExample"
endMarker="// END NearTextExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/quickstart/neartext.where.mdx b/_includes/code/quickstart/neartext.where.mdx
index 03f5e68a09..3e40e37b10 100644
--- a/_includes/code/quickstart/neartext.where.mdx
+++ b/_includes/code/quickstart/neartext.where.mdx
@@ -56,7 +56,7 @@ import GoWhereFilter from '!!raw-loader!/_includes/code/quickstart/go-query-filt
text={EndToEndTSCodeLegacy}
startMarker="// NearTextWhereExample"
endMarker="// END NearTextWhereExample"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/code/schema.things.create.replication.mdx b/_includes/code/schema.things.create.replication.mdx
index d43d186099..e665958f52 100644
--- a/_includes/code/schema.things.create.replication.mdx
+++ b/_includes/code/schema.things.create.replication.mdx
@@ -22,7 +22,7 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
text={PyCodeV3}
startMarker="# START ReplicationSettings"
endMarker="# END ReplicationSettings"
- language="py"
+ language="pyv3"
/>
@@ -40,7 +40,7 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
text={TSCodeLegacy}
startMarker="// START ReplicationSettings"
endMarker="// END ReplicationSettings"
- language="ts"
+ language="tsv2"
/>
diff --git a/_includes/gcp.token.expiry.notes.mdx b/_includes/gcp.token.expiry.notes.mdx
index 0b33a80090..74a8a0cd08 100644
--- a/_includes/gcp.token.expiry.notes.mdx
+++ b/_includes/gcp.token.expiry.notes.mdx
@@ -39,7 +39,7 @@ def re_instantiate_weaviate() -> weaviate.Client:
client = weaviate.Client(
url = "https://WEAVIATE_INSTANCE_URL", # Replace WEAVIATE_INSTANCE_URL with the URL
additional_headers = {
- "X-Google-Vertex-Api-Key": token,
+ "X-Goog-Vertex-Api-Key": token,
}
)
return client
@@ -98,7 +98,7 @@ def re_instantiate_weaviate() -> weaviate.Client:
cluster_url="https://WEAVIATE_INSTANCE_URL", # Replace WEAVIATE_INSTANCE_URL with the URL
auth_credentials=Auth.api_key(weaviate_api_key), # Replace with your Weaviate Cloud key
headers={
- "X-Google-Vertex-Api-Key": token,
+ "X-Goog-Vertex-Api-Key": token,
},
)
return client
diff --git a/_includes/release-history.md b/_includes/release-history.md
index d64712757c..ae1929ad77 100644
--- a/_includes/release-history.md
+++ b/_includes/release-history.md
@@ -2,7 +2,8 @@ This table lists the Weaviate core versions and corresponding client library ver
| Weaviate ([GitHub][cWeaviate]) | First release date | Python ([GitHub][cPython]) | TypeScript/ JavaScript ([GitHub][cTypeScript]) | Go ([GitHub][cGo]) | Java ([GitHub][cJava]) |
| :- | :- | :-: | :-: | :-: | :-: |
-| 1.27.x | 2024-10-16 | 4.9.x | 3.2.x | 4.16.x | 4.9.x |
+| 1.28.x | 2024-12-11 | 4.10.x | TBC | TBC | TBC |
+| 1.27.x | 2024-10-16 | 4.9.x | 3.2.x | 4.16.x | 5.0.x 4.9.x |
| 1.26.x | 2024-07-22 | 4.7.x | 3.1.x | 4.15.x | 4.8.x |
| 1.25.x | 2024-05-10 | 4.6.x | 2.1.x | 4.13.x | 4.6.x |
| 1.24.x | 2024-02-27 | 4.5.x | 2.0.x | 4.10.x | 4.4.x |
@@ -10,7 +11,7 @@ This table lists the Weaviate core versions and corresponding client library ver
| 1.22.x | 2023-10-27 | 3.25.x | 1.5.x | 4.10.x | 4.3.x |
| 1.21.x | 2023-08-17 | 3.22.x | 1.4.x | 4.9.x | 4.2.x |
| 1.20.x | 2023-07-06 | 3.22.x | 1.1.x | 4.7.x | 4.2.x |
-| 1.19.x | 2023-05-04 | 3.17.x | 1.1.x[1](#typescript-change)| 4.7.x | 4.0.x |
+| 1.19.x | 2023-05-04 | 3.17.x | 1.1.x[1](#typescript-client-change)| 4.7.x | 4.0.x |
| 1.18.x | 2023-03-07 | 3.13.x | 2.14.x | 4.6.x | 3.6.x |
| 1.17.x | 2022-12-20 | 3.9.x | 2.14.x | 4.5.x | 3.5.x |
| 1.16.x | 2022-10-31 | 3.8.x | 2.13.x | 4.4.x | 3.4.x |
@@ -31,6 +32,10 @@ This table lists the Weaviate core versions and corresponding client library ver
| 1.1.x | 2021-02-10 | 2.1.x | - | - | - |
| 1.0.x | 2021-01-14 | 2.0.x | - | - | - |
+#### TypeScript client change
+
+The [TypeScript client](https://github.com/weaviate/typescript-client) replaced the [JavaScript client](https://github.com/weaviate/weaviate-javascript-client) on 2023-03-17.
+
[comment]: # ( repo links )
[cWeaviate]: https://github.com/weaviate/weaviate/releases
diff --git a/_includes/tokenization_definition.mdx b/_includes/tokenization_definition.mdx
index 616a9e4d2c..5127a6b0bd 100644
--- a/_includes/tokenization_definition.mdx
+++ b/_includes/tokenization_definition.mdx
@@ -6,4 +6,5 @@
| `field` | Index the whole field after trimming whitespace characters. | `Hello, (beautiful) world` |
| `trigram` | Split the property as rolling trigrams. | `Hel`, `ell`, `llo`, `lo,`, ... |
| `gse` | Use the `gse` tokenizer to split the property. | [See `gse` docs](https://pkg.go.dev/github.com/go-ego/gse#section-readme) |
-| `kagome_kr` | Use the `Kagome` tokenizer with a Korean dictionary to split the property. | [See `kagome` docs](https://github.com/ikawaha/kagome) and the [Korean dictionary](https://github.com/ikawaha/kagome-dict-ko) |
+| `kagome_ja` | Use the `Kagome` tokenizer with a Japanese (IPA) dictionary to split the property. | [See `kagome` docs](https://github.com/ikawaha/kagome) and the [dictionary](https://github.com/ikawaha/kagome-dict/). |
+| `kagome_kr` | Use the `Kagome` tokenizer with a Korean dictionary to split the property. | [See `kagome` docs](https://github.com/ikawaha/kagome) and the [Korean dictionary](https://github.com/ikawaha/kagome-dict-ko). |
diff --git a/apple-and-weaviate/2024-07-02-create-and-load-a-weaviate-cluster/index.mdx b/apple-and-weaviate/2024-07-02-create-and-load-a-weaviate-cluster/index.mdx
index 3fcee03133..332596aca4 100644
--- a/apple-and-weaviate/2024-07-02-create-and-load-a-weaviate-cluster/index.mdx
+++ b/apple-and-weaviate/2024-07-02-create-and-load-a-weaviate-cluster/index.mdx
@@ -9,12 +9,9 @@ image: ./img/hero.png
---
![Set up a Weaviate Cluster on WCD and load in book data using a python data pipeline that can be searched through your iOS and other Apple Ecosystem Applications.](./img/hero.png)
-
-## Overview
-
In this article we will setup a Weaviate Cluster and load the same books data used in the article [IOS Intro - Search with Benefits](/apple-and-weaviate/apple-apps-part-1).
-You can download the resources used in this blog [here](https://github.com/weaviate/BookRecs/blob/main/blog-resources/article05.zip).
+You can download the resources used in this blog [here](https://github.com/weaviate/BookRecs/blob/main/blog-resources/article05.zip).
### Quckstart
@@ -50,11 +47,11 @@ Create an Xcode Project using External Builder as described in **External Builde
![create-xcode-project](./img/create-xcode-project.png)
-## Install Weaviate Client
+## Install Weaviate Client
From the root directory of your Xcode Project, install the Weaviate Client.
- pip install -U weaviate-client
+ pip install -U weaviate-client
Refer to the section **Install Python Packages and Setup a Virtual Environment** in the article **External Builder (Xcode) for Python** for guidance
diff --git a/apple-and-weaviate/2024-07-02-external-builder-xcode-for-python/index.mdx b/apple-and-weaviate/2024-07-02-external-builder-xcode-for-python/index.mdx
index c031219e6c..84ee2d2a7f 100644
--- a/apple-and-weaviate/2024-07-02-external-builder-xcode-for-python/index.mdx
+++ b/apple-and-weaviate/2024-07-02-external-builder-xcode-for-python/index.mdx
@@ -9,8 +9,6 @@ image: ./img/external-builder-hero.png
---
![Use Xcode to run your Python datapipelines. This article explains how you can set up external builders to integrate Python into your Xcode workflows.](./img/external-builder-hero.png)
-## Overview
-
Xcode itself isn't built for directly developing and building Python projects. However, you can leverage external builders to integrate Python development into your Xcode workflow.
Using Xcode to run python scripts is an alternative to using a native to python playground like Jupyter while allowing you to use a development tool you are familiar with.
diff --git a/apple-and-weaviate/2024-07-02-running-python-on-your-mac/index.mdx b/apple-and-weaviate/2024-07-02-running-python-on-your-mac/index.mdx
index c68203cb87..2777bd70eb 100644
--- a/apple-and-weaviate/2024-07-02-running-python-on-your-mac/index.mdx
+++ b/apple-and-weaviate/2024-07-02-running-python-on-your-mac/index.mdx
@@ -9,8 +9,6 @@ image: ./img/python-on-mac-hero.png
---
![Many data science frameworks are written in Python. In this article we'll get set up to run Python on your Mac!](./img/python-on-mac-hero.png)
-## Overview
-
Weaviate and other data science frameworks are making Python a powerful tool for data analysis on the Mac. Get ready to use them in your workflow.
![overview-python](./img/overview-python.png)
@@ -32,7 +30,7 @@ There are several ways to get Python up and running on your Mac:
1. Official Python Installer: Download the latest version directly from the [Python website](https://www.python.org/downloads/). This is a straightforward approach.
-2. [Anaconda](https://anaconda.cloud/getting-started): This popular distribution includes Python along with a vast collection of scientific computing and data science packages. This method simplifies installation and is recommended.
+2. [Anaconda](https://anaconda.cloud/getting-started): This popular distribution includes Python along with a vast collection of scientific computing and data science packages. This method simplifies installation and is recommended.
3. Homebrew: This package manager allows you to install various software on your Mac, including Python. It offers flexibility for managing multiple Python versions.
@@ -54,8 +52,8 @@ Consider having a project01 directory that includes a volume calculator applicat
Let's walk through setting up a virtual environment for your Python project, assuming you already have user installed version of Python in place. We'll use the project01 directory as an example:
-Navigate to the project directory: Open your terminal and use the cd command to switch to the directory containing your project files. For instance, if project01 is on your desktop, you might type...
-
+Navigate to the project directory: Open your terminal and use the cd command to switch to the directory containing your project files. For instance, if project01 is on your desktop, you might type...
+
cd ~/Desktop/project01.
**Create the virtual environment**: Use the following command in your terminal, replacing the last venv parameter with your desired virtual environment name:
@@ -65,7 +63,7 @@ Navigate to the project directory: Open your terminal and use the cd command to
This creates a new directory named venv in your project directory. It contains all the necessary files for a separate Python environment.
-**Activate the virtual environment**: Tell your terminal to use the newly created virtual environment.
+**Activate the virtual environment**: Tell your terminal to use the newly created virtual environment.
source venv/bin/activate
@@ -91,15 +89,15 @@ These commands help you verify your Python setup:
**Version of Python**:
-This will display the version of Python currently in use by your terminal.
+This will display the version of Python currently in use by your terminal.
On my Mac, it currently shows Python 3.11.7.
- python --version
+ python --version
**Path to Python Executable**:
-This will show the location of the Python executable (via an alias) that your terminal is using.
+This will show the location of the Python executable (via an alias) that your terminal is using.
which python
diff --git a/authors.yml b/authors.yml
index 0cafe3d9d6..2efcd91472 100644
--- a/authors.yml
+++ b/authors.yml
@@ -7,11 +7,15 @@ alea:
name: Alea Abed
title: Head of Marketing
image_url: /img/people/icon/alea.jpg
+alvin:
+ name: Alvin Richards
+ title: Head of Product
+ image_url: /img/people/icon/alvin.jpg
ara:
name: Ara Gonzalez
title: People Operations Manager
url: https://linkedin.com/in/aranzazugonzalez
- image_url: /img/people/icon/ara.png
+ image_url: /img/people/icon/ara.jpg
bob:
name: Bob van Luijt
title: CEO
@@ -21,7 +25,7 @@ byron:
name: Byron Voorbach
title: Head of Customer Success
url: https://github.com/byronvoorbach
- image_url: /img/people/icon/byron.png
+ image_url: /img/people/icon/byron.jpg
connor:
name: Connor Shorten
title: Product Researcher
@@ -61,12 +65,12 @@ ieva:
name: Ieva Urbaite
title: Marketing
url: https://www.linkedin.com/in/ievaurbaite/
- image_url: /img/people/icon/ieva.png
+ image_url: /img/people/icon/ieva.jpg
jessie:
name: Jessie de Groot
title: Head of People and Culture
url: https://linkedin.com/in/jessiedegroot/
- image_url: /img/people/icon/jessie.png
+ image_url: /img/people/icon/jessie.jpg
jp:
name: Joon-Pil (JP) Hwang
title: Educator
@@ -91,7 +95,7 @@ mary:
name: Mary Newhauser
title: Machine Learning Engineer
url: https://www.linkedin.com/in/mary-newhauser-02273551/
- image_url: /img/people/icon/mary.png
+ image_url: /img/people/icon/mary.jpg
pete:
name: Peter Schramm
title: WCD Tech Lead
@@ -111,7 +115,7 @@ svitlana:
name: Svitlana Smolianova
title: Head of Design
url: https://linkedin.com/in/svitlana-sm
- image_url: /img/people/icon/svitlana.png
+ image_url: /img/people/icon/svitlana.jpg
zain:
name: Zain Hasan
title: Developer Advocate
@@ -121,12 +125,12 @@ john:
name: John Trengrove
title: Head of Applied Research
url: https://github.com/trengrj
- image_url: /img/people/icon/john.png
+ image_url: /img/people/icon/john.jpg
shukri:
name: Mohd Shukri Hasan
title: Integration Solution Engineer
url: https://github.com/hsm207
- image_url: /img/people/icon/shukri.jpeg
+ image_url: /img/people/icon/shukri.jpg
tommy:
name: Tommy Smith
title: Polyglot Engineer
@@ -136,12 +140,12 @@ jerry:
name: Jerry Liu
title: Co-Founder/CEO LlamaIndex
url: https://github.com/jerryjliu
- image_url: /img/people/icon/jerry.png
+ image_url: /img/people/icon/jerry.jpg
sam:
name: Sam Stoelinga
title: Contributor to Substratus.AI
url: https://github.com/samos123
- image_url: /img/people/icon/sam.png
+ image_url: /img/people/icon/sam.jpg
femke:
name: Femke Plantinga
title: Content Manager
@@ -159,12 +163,12 @@ victoria:
name: Victoria Slocum
title: Machine Learning Engineer
url: https://www.linkedin.com/in/victorialslocum/
- image_url: /img/people/icon/victoria.png
+ image_url: /img/people/icon/victoria.jpg
adam:
name: Adam Chan
title: Developer Growth Engineer
url: https://www.linkedin.com/in/itsajchan/
- image_url: /img/people/icon/adam.png
+ image_url: /img/people/icon/adam.jpg
asdine:
name: Asdine El Hrychy
title: Software Engineer
@@ -174,27 +178,32 @@ ajit:
name: Ajit Mistry
title: Developer Growth Intern
url: https://github.com/ajit283
- image_url: /img/people/icon/ajit.png
+ image_url: /img/people/icon/ajit.jpg
amir:
name: Amir Houieh
title: Founder & CEO of Unbody
url: https://www.unbody.io/
- image_url: /img/people/icon/amir.jpeg
+ image_url: /img/people/icon/amir.jpg
+hossein:
+ name: Hossein Mehrabi
+ title: Founder & CTO of Unbody
+ url: https://github.com/jeangovil
+ image_url: /img/people/icon/hossein.jpg
charles:
name: Charles Frye
title: AI Engineer
url: https://twitter.com/charles_irl
- image_url: /img/people/icon/charles-modal.png
+ image_url: /img/people/icon/charles-modal.jpg
randy:
name: Randy Fong
title: Senior iOS Developer
url: https://www.linkedin.com/in/randy-fong-1530545/
- image_url: /img/people/icon/randy.jpeg
+ image_url: /img/people/icon/randy.jpg
aman:
name: Aman Sharma
title: CTO @Lamatic.ai
url: https://www.linkedin.com/in/amanintech
- image_url: /img/people/icon/aman.jpeg
+ image_url: /img/people/icon/aman.jpg
charles-pierse:
name: Charles Pierse
title: Head of Weaviate Labs
@@ -209,14 +218,24 @@ deepti:
name: Deepti Naidu
title: Partner Solution Engineer
url: https://www.linkedin.com/in/deeptinaidu/
- image_url: /img/people/icon/deepti.png
+ image_url: /img/people/icon/deepti.jpg
tony:
name: Tony Le
title: Business Development Director
url: https://www.linkedin.com/in/tony-l-35a305b/
- image_url: /img/people/icon/tony.png
+ image_url: /img/people/icon/tony.jpg
jobi:
name: Jobi George
title: Head of Partnerships
url: https://www.linkedin.com/in/jobigeorge/
- image_url: /img/people/icon/jobi.jpeg
+ image_url: /img/people/icon/jobi.jpg
+spiros:
+ name: Spiros
+ title: Head of Security
+ url: https://github.com/spiros-spiros
+ image_url: /img/people/icon/spiros.jpg
+staci:
+ name: Staci Blue
+ title: Event Marketing Manager
+ url: https://www.linkedin.com/in/staci-blue/
+ image_url: /img/people/icon/staci.jpg
diff --git a/blog/2021-01-25-history-of-weaviate/img/vector-space.jpeg b/blog/2021-01-25-history-of-weaviate/img/vector-space.jpeg
deleted file mode 100644
index d3ce150bba..0000000000
Binary files a/blog/2021-01-25-history-of-weaviate/img/vector-space.jpeg and /dev/null differ
diff --git a/blog/2021-01-25-history-of-weaviate/img/vector-space.jpg b/blog/2021-01-25-history-of-weaviate/img/vector-space.jpg
new file mode 100644
index 0000000000..5406ef1666
Binary files /dev/null and b/blog/2021-01-25-history-of-weaviate/img/vector-space.jpg differ
diff --git a/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpeg b/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpeg
deleted file mode 100644
index c41cd66ab5..0000000000
Binary files a/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpeg and /dev/null differ
diff --git a/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpg b/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpg
new file mode 100644
index 0000000000..3fb40de26b
Binary files /dev/null and b/blog/2021-01-25-history-of-weaviate/img/weaviate-console.jpg differ
diff --git a/blog/2021-01-25-history-of-weaviate/index.mdx b/blog/2021-01-25-history-of-weaviate/index.mdx
index 7b28dd96cf..85fd5f4001 100644
--- a/blog/2021-01-25-history-of-weaviate/index.mdx
+++ b/blog/2021-01-25-history-of-weaviate/index.mdx
@@ -52,7 +52,7 @@ Finding more context around a word has to do with a concept called disambiguatio
To validate if we could disambiguate the word "apple" the following simple step was taken. What if we looked for all the words that are in the neighborhood of the space in between "apple" and "fruit"? Turns out the results are way better! We can disambiguate by moving through the hyperspace while using individual words as beacons to navigate.
-![Vector Space](./img/vector-space.jpeg)
+![Vector Space](./img/vector-space.jpg)
In the next step, the goal was to validate if we could keep semantic meaning when storing a data object in the hyperspace by calculating the centroid using the individual words as beacons. We did that as follows, the title of this Vogue article: "Louis Vuitton's New Capsule with League of Legends Brings French High Fashion to Online Gaming — and Vice Versa".
@@ -90,7 +90,7 @@ Examples of implementations include: classification of invoices into categories,
## The Future
Weaviate will stay fully open source for the community to use. The team is growing to accelerate building Weaviate and supporting users. We are releasing new features very frequently, like new vector indexes and search pipeline features, and Weaviate Cloud and Weaviate Query App.
-![Weaviate Console](./img/weaviate-console.jpeg)
+![Weaviate Console](./img/weaviate-console.jpg)
## Listen to Bob's story at the Open Source Data
Want to learn more about the background of Vector Search and how the ecosystem is developing? [Listen to Sam Ramji from DataStax interviewing Bob van Luijt about Vector Search and the AI stack.](https://www.datastax.com/resources/podcast/vector-search-ai-stack-more-bob-van-luijt).
diff --git a/blog/2022-06-23-the-ai-first-database-ecosystem/img/hero.jpeg b/blog/2022-06-23-the-ai-first-database-ecosystem/img/hero.jpg
similarity index 100%
rename from blog/2022-06-23-the-ai-first-database-ecosystem/img/hero.jpeg
rename to blog/2022-06-23-the-ai-first-database-ecosystem/img/hero.jpg
diff --git a/blog/2022-06-23-the-ai-first-database-ecosystem/index.mdx b/blog/2022-06-23-the-ai-first-database-ecosystem/index.mdx
index 143cdfa6bc..7ffef54845 100644
--- a/blog/2022-06-23-the-ai-first-database-ecosystem/index.mdx
+++ b/blog/2022-06-23-the-ai-first-database-ecosystem/index.mdx
@@ -4,12 +4,12 @@ slug: the-ai-first-database-ecosystem
authors: [bob]
date: 2022-06-23
tags: ['concepts']
-image: ./img/hero.jpeg
+image: ./img/hero.jpg
# canonical-url: https://www.forbes.com/sites/forbestechcouncil/2022/06/23/the-ai-first-database-ecosystem/
# canonical-name: Forbes
description: "Learn about the vision of the AI-First Database Ecosystem, which drives the R&D of the databases of the future."
---
-![The AI-First Database Ecosystem](./img/hero.jpeg)
+![The AI-First Database Ecosystem](./img/hero.jpg)
diff --git a/blog/2022-09-07-weaviate-1-15-release/img/ordered-imports.png b/blog/2022-09-07-weaviate-1-15-release/img/ordered-imports.png
index 9d5dd92251..a1eb529eb9 100644
Binary files a/blog/2022-09-07-weaviate-1-15-release/img/ordered-imports.png and b/blog/2022-09-07-weaviate-1-15-release/img/ordered-imports.png differ
diff --git a/blog/2022-12-20-weaviate-1-17-release/img/bm25.png b/blog/2022-12-20-weaviate-1-17-release/img/bm25.png
index f41a28f890..441b55e94a 100644
Binary files a/blog/2022-12-20-weaviate-1-17-release/img/bm25.png and b/blog/2022-12-20-weaviate-1-17-release/img/bm25.png differ
diff --git a/blog/2022-12-20-weaviate-1-17-release/img/faster-startup.png b/blog/2022-12-20-weaviate-1-17-release/img/faster-startup.png
index 67a62a7c68..3102064bd3 100644
Binary files a/blog/2022-12-20-weaviate-1-17-release/img/faster-startup.png and b/blog/2022-12-20-weaviate-1-17-release/img/faster-startup.png differ
diff --git a/blog/2022-12-20-weaviate-1-17-release/img/hero.png b/blog/2022-12-20-weaviate-1-17-release/img/hero.png
index c463b81a4c..57f8e9be0a 100644
Binary files a/blog/2022-12-20-weaviate-1-17-release/img/hero.png and b/blog/2022-12-20-weaviate-1-17-release/img/hero.png differ
diff --git a/blog/2022-12-20-weaviate-1-17-release/img/hybrid-search.png b/blog/2022-12-20-weaviate-1-17-release/img/hybrid-search.png
index ab992e14ca..132721b755 100644
Binary files a/blog/2022-12-20-weaviate-1-17-release/img/hybrid-search.png and b/blog/2022-12-20-weaviate-1-17-release/img/hybrid-search.png differ
diff --git a/blog/2022-12-20-weaviate-1-17-release/img/other-improvements.png b/blog/2022-12-20-weaviate-1-17-release/img/other-improvements.png
index 67a62a7c68..3102064bd3 100644
Binary files a/blog/2022-12-20-weaviate-1-17-release/img/other-improvements.png and b/blog/2022-12-20-weaviate-1-17-release/img/other-improvements.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/LSM-stores.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/LSM-stores.png
index eb69001fe2..59254170f7 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/LSM-stores.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/LSM-stores.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/batch-objects-latency.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/batch-objects-latency.png
index 5d6d0a1327..59779078db 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/batch-objects-latency.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/batch-objects-latency.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/gear.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/gear.png
index f48f1bfcb6..ef8ab14bcb 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/gear.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/gear.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/hero.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/hero.png
index fbecff99a0..6bed5a859d 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/hero.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/hero.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/magnifying-glass.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/magnifying-glass.png
index c104281515..96c28ca4ab 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/magnifying-glass.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/magnifying-glass.png differ
diff --git a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/number-of-vectors-imported.png b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/number-of-vectors-imported.png
index c4d76b7000..8915d236c0 100644
Binary files a/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/number-of-vectors-imported.png and b/blog/2022-12-27-details-behind-the-sphere-dataset-in-weaviate/img/number-of-vectors-imported.png differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.jpg b/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.jpg
new file mode 100644
index 0000000000..5473a667a0
Binary files /dev/null and b/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.jpg differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.png b/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.png
deleted file mode 100644
index 3a0c332a2e..0000000000
Binary files a/blog/2023-01-24-how-ai-creates-art/img/denoisingimage.png and /dev/null differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/hero.png b/blog/2023-01-24-how-ai-creates-art/img/hero.png
index 005b8d98fa..6c10d9c151 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/hero.png and b/blog/2023-01-24-how-ai-creates-art/img/hero.png differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/mscoco.png b/blog/2023-01-24-how-ai-creates-art/img/mscoco.png
index 287e11388b..cf4aa4f1d0 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/mscoco.png and b/blog/2023-01-24-how-ai-creates-art/img/mscoco.png differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/noising_denoising.png b/blog/2023-01-24-how-ai-creates-art/img/noising_denoising.png
index c5ee3a5d06..248069251c 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/noising_denoising.png and b/blog/2023-01-24-how-ai-creates-art/img/noising_denoising.png differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/noisingimage.jpg b/blog/2023-01-24-how-ai-creates-art/img/noisingimage.jpg
new file mode 100644
index 0000000000..d142fdbf5d
Binary files /dev/null and b/blog/2023-01-24-how-ai-creates-art/img/noisingimage.jpg differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/noisingimage.png b/blog/2023-01-24-how-ai-creates-art/img/noisingimage.png
deleted file mode 100644
index 8a70b9948b..0000000000
Binary files a/blog/2023-01-24-how-ai-creates-art/img/noisingimage.png and /dev/null differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/perception_of_the_world.jpg b/blog/2023-01-24-how-ai-creates-art/img/perception_of_the_world.jpg
index 324483c4f0..4183d48a49 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/perception_of_the_world.jpg and b/blog/2023-01-24-how-ai-creates-art/img/perception_of_the_world.jpg differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/searching_through_multi_dimensional_vector_space.jpg b/blog/2023-01-24-how-ai-creates-art/img/searching_through_multi_dimensional_vector_space.jpg
index 084a3ac9ca..8bd18661b7 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/searching_through_multi_dimensional_vector_space.jpg and b/blog/2023-01-24-how-ai-creates-art/img/searching_through_multi_dimensional_vector_space.jpg differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/the_mona_lisa_drip_painted.jpg b/blog/2023-01-24-how-ai-creates-art/img/the_mona_lisa_drip_painted.jpg
index 161dd0faf3..67dcdc633b 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/the_mona_lisa_drip_painted.jpg and b/blog/2023-01-24-how-ai-creates-art/img/the_mona_lisa_drip_painted.jpg differ
diff --git a/blog/2023-01-24-how-ai-creates-art/img/three_images.png b/blog/2023-01-24-how-ai-creates-art/img/three_images.png
index d17ba6b3a6..846301b620 100644
Binary files a/blog/2023-01-24-how-ai-creates-art/img/three_images.png and b/blog/2023-01-24-how-ai-creates-art/img/three_images.png differ
diff --git a/blog/2023-01-24-how-ai-creates-art/index.mdx b/blog/2023-01-24-how-ai-creates-art/index.mdx
index 1e3bcd9188..af03c0d3d7 100644
--- a/blog/2023-01-24-how-ai-creates-art/index.mdx
+++ b/blog/2023-01-24-how-ai-creates-art/index.mdx
@@ -45,7 +45,7 @@ The question then becomes how diffusion models can learn (or even approximate) t
![noising gif](./img/noise.gif)
*[Source](https://yang-song.net/blog/2021/score/)*
-![noising images](./img/noisingimage.png)
+![noising images](./img/noisingimage.jpg)
*[Source](https://huggingface.co/blog/annotated-diffusion)*
This “noising” process, shown in the images above allows us to take training set images and add known quantities of noise to it until it becomes completely random noise. This process takes images from a state of having high probability of being found in the training set to having a low probability of existing in the training set.
@@ -55,7 +55,7 @@ Once the “noising” step is completed, then we can use these clean and noisy
![denoising gif](./img/denoise.gif)
*[Source](https://yang-song.net/blog/2021/score/)*
-![denoising images](./img/denoisingimage.png)
+![denoising images](./img/denoisingimage.jpg)
*[Source](https://huggingface.co/blog/annotated-diffusion)*
Now if we take this trained diffusion model and just give it a random static image and run the de-noising process it will transform the static image into an image that resembles images in the training set!
diff --git a/blog/2023-01-31-weaviate-podcast-search/img/andrew-huberman-search.png b/blog/2023-01-31-weaviate-podcast-search/img/andrew-huberman-search.png
index 3f74dd4439..db8fd4e277 100644
Binary files a/blog/2023-01-31-weaviate-podcast-search/img/andrew-huberman-search.png and b/blog/2023-01-31-weaviate-podcast-search/img/andrew-huberman-search.png differ
diff --git a/blog/2023-01-31-weaviate-podcast-search/img/hero.png b/blog/2023-01-31-weaviate-podcast-search/img/hero.png
index 4fad17e560..531aa86d04 100644
Binary files a/blog/2023-01-31-weaviate-podcast-search/img/hero.png and b/blog/2023-01-31-weaviate-podcast-search/img/hero.png differ
diff --git a/blog/2023-01-31-weaviate-podcast-search/img/podcast-search.png b/blog/2023-01-31-weaviate-podcast-search/img/podcast-search.png
index 7c310209bb..c27f277e4f 100644
Binary files a/blog/2023-01-31-weaviate-podcast-search/img/podcast-search.png and b/blog/2023-01-31-weaviate-podcast-search/img/podcast-search.png differ
diff --git a/blog/2023-02-21-combining-langchain-and-weaviate/img/hero.png b/blog/2023-02-21-combining-langchain-and-weaviate/img/hero.png
index c6123182a2..ce6c267713 100644
Binary files a/blog/2023-02-21-combining-langchain-and-weaviate/img/hero.png and b/blog/2023-02-21-combining-langchain-and-weaviate/img/hero.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/Ann.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/Ann.png
index 8cfb60ad51..a2110c82f3 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/Ann.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/Ann.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/hero.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/hero.png
index fcbc1b87c4..b040a9610f 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/hero.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/hero.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image10.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image10.png
index 034de0a170..dac90263fe 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image10.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image10.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image11.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image11.png
index 9e0a9aae19..2ca045bfdf 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image11.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image11.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image12.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image12.png
index c4eaf0d432..77bcc30940 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image12.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image12.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image13.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image13.png
index afff633552..2cb93fbe71 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image13.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image13.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image14.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image14.png
index 95f9075d1b..e41458f0b3 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image14.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image14.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image15.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image15.png
index 7fc2649ae0..0efe70f932 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image15.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image15.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image16.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image16.png
index 86c8423caa..3e641016ac 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image16.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image16.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image5.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image5.png
index 90f4eb8479..a57d41883a 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image5.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image5.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image6.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image6.png
index 73a2062721..1b4b48e8e3 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image6.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image6.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image7.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image7.png
index 4781621b83..c2cc7033df 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image7.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image7.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image8.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image8.png
index 64428a1320..047dc97dcc 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image8.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image8.png differ
diff --git a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image9.png b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image9.png
index f04e1f17fe..a98e62ab9e 100644
Binary files a/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image9.png and b/blog/2023-03-14-ann-algorithms-hnsw-pq/img/image9.png differ
diff --git a/blog/2023-03-23-what-are-llms/img/ChatGPT-2.jpg b/blog/2023-03-23-what-are-llms/img/ChatGPT-2.jpg
new file mode 100644
index 0000000000..028dc26228
Binary files /dev/null and b/blog/2023-03-23-what-are-llms/img/ChatGPT-2.jpg differ
diff --git a/blog/2023-03-23-what-are-llms/img/ChatGPT-2.png b/blog/2023-03-23-what-are-llms/img/ChatGPT-2.png
deleted file mode 100644
index 0d72bd4298..0000000000
Binary files a/blog/2023-03-23-what-are-llms/img/ChatGPT-2.png and /dev/null differ
diff --git a/blog/2023-03-23-what-are-llms/img/twitter1.jpeg b/blog/2023-03-23-what-are-llms/img/twitter1.jpeg
deleted file mode 100644
index ae32dd8111..0000000000
Binary files a/blog/2023-03-23-what-are-llms/img/twitter1.jpeg and /dev/null differ
diff --git a/blog/2023-03-23-what-are-llms/img/twitter1.jpg b/blog/2023-03-23-what-are-llms/img/twitter1.jpg
new file mode 100644
index 0000000000..065c7a1fbc
Binary files /dev/null and b/blog/2023-03-23-what-are-llms/img/twitter1.jpg differ
diff --git a/blog/2023-03-23-what-are-llms/img/twitter2.jpg b/blog/2023-03-23-what-are-llms/img/twitter2.jpg
new file mode 100644
index 0000000000..9491db44fc
Binary files /dev/null and b/blog/2023-03-23-what-are-llms/img/twitter2.jpg differ
diff --git a/blog/2023-03-23-what-are-llms/img/twitter2.png b/blog/2023-03-23-what-are-llms/img/twitter2.png
deleted file mode 100644
index 255642f2c5..0000000000
Binary files a/blog/2023-03-23-what-are-llms/img/twitter2.png and /dev/null differ
diff --git a/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpeg b/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpeg
deleted file mode 100644
index 593a24eb9c..0000000000
Binary files a/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpeg and /dev/null differ
diff --git a/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpg b/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpg
new file mode 100644
index 0000000000..26aab4396d
Binary files /dev/null and b/blog/2023-03-23-what-are-llms/img/wheeloffortune.jpg differ
diff --git a/blog/2023-03-23-what-are-llms/index.mdx b/blog/2023-03-23-what-are-llms/index.mdx
index 106478c4fc..26845e2c86 100644
--- a/blog/2023-03-23-what-are-llms/index.mdx
+++ b/blog/2023-03-23-what-are-llms/index.mdx
@@ -22,7 +22,7 @@ In this blog we discuss:
When OpenAI launched ChatGPT at the end of 2022, more than one million people had tried the model in just a week and that trend has only continued with monthly active users for the chatbot service reaching over 100 Million, quicker than any service before, as reported by [Reuters](https://www.reuters.com/technology/chatgpt-sets-record-fastest-growing-user-base-analyst-note-2023-02-01/) and [Yahoo Finance](https://finance.yahoo.com/news/chatgpt-on-track-to-surpass-100-million-users-faster-than-tiktok-or-instagram-ubs-214423357.html?guccounter=1). Since then, OpenAI has been iteratively improving the underlying model, announcing the release of GPT (Generative Pretrained Transformer) 4.0 last week, with new and improved capabilities. It wouldn’t be hyperbole to say that Natural Language Processing (NLP) and Generative Large Language Models (LLMs) have taken the world by storm.
-![gpt100](./img/ChatGPT-2.png)
+![gpt100](./img/ChatGPT-2.jpg)
Though ChatGPT was not the first AI chatbot that has been released to the public, what really surprised people about this particular service was the breadth and depth of knowledge it had and its ability to articulate that knowledge with human-like responses. Aside from this, the generative aspect of this model is also quite apparent as it can hallucinate situations and dream up vivid details to fill in descriptions when prompted to do so. This gives the chatbot service somewhat of a human-like “creativity” - which is what adds a whole new dimension of utility for the service, as well as a wow factor to the user experience!
@@ -41,7 +41,7 @@ This explains why LLMs know something about basically everything but it still do
To understand how LLMs work let's consider a scenario. Imagine you are on the Wheel of Fortune game show and are tasked with completing the following phrase:
-![wheel](./img/wheeloffortune.jpeg)
+![wheel](./img/wheeloffortune.jpg)
The vast majority of you, I bet, would answer: "EASY! It’s: '**ANOTHER FEATHER *I*N YO*U*R *C*A*P***'." And you would be correct! But humor me for a second while I play devil’s advocate and propose an alternative: Why not: “**ANOTHER FEATHER *O*N YO*U*R *C*A*T***”? This is a perfectly structured and complete English sentence. Why, then, did no one think of this alternative as a potential completion of the phrase?
@@ -72,7 +72,7 @@ One current limitation of LLMs, which can prevent them from attaining points 3 a
GPT 3.5 | GPT 4.0
:-------------------------:|:-------------------------:
-![t1](./img/twitter1.jpeg) | ![t2](./img/twitter2.png)
+![t1](./img/twitter1.jpg) | ![t2](./img/twitter2.jpg)
These LLMs are distilling the information they read from vast amounts of interactions between words. So both humans and LLMs in their unique ways build a statistical understanding of the language they are trained on.
diff --git a/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-dark.png b/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-dark.png
index 9d5d26438a..9487d811fe 100644
Binary files a/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-dark.png and b/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-dark.png differ
diff --git a/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-light.png b/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-light.png
index fae1a63b4a..d9e18244de 100644
Binary files a/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-light.png and b/blog/2023-03-28-monitoring-weaviate-in-production/img/Weaviate-monitoring-weaviate-in-prod-light.png differ
diff --git a/blog/2023-03-28-monitoring-weaviate-in-production/img/datadog-summary.png b/blog/2023-03-28-monitoring-weaviate-in-production/img/datadog-summary.png
index 3a38c7d364..94a8312e94 100644
Binary files a/blog/2023-03-28-monitoring-weaviate-in-production/img/datadog-summary.png and b/blog/2023-03-28-monitoring-weaviate-in-production/img/datadog-summary.png differ
diff --git a/blog/2023-03-28-monitoring-weaviate-in-production/img/hero.png b/blog/2023-03-28-monitoring-weaviate-in-production/img/hero.png
index 08f3da085c..4f22acc6d5 100644
Binary files a/blog/2023-03-28-monitoring-weaviate-in-production/img/hero.png and b/blog/2023-03-28-monitoring-weaviate-in-production/img/hero.png differ
diff --git a/blog/2023-03-28-monitoring-weaviate-in-production/img/query-latency.png b/blog/2023-03-28-monitoring-weaviate-in-production/img/query-latency.png
index 5ca22ecb2e..81a9c51201 100644
Binary files a/blog/2023-03-28-monitoring-weaviate-in-production/img/query-latency.png and b/blog/2023-03-28-monitoring-weaviate-in-production/img/query-latency.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-dark.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-dark.png
index 9334a949de..8f627a6aa2 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-dark.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-dark.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-light.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-light.png
index 2b37d1c249..ce975c7ba0 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-light.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/diagram-light.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/gdbtweet.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/gdbtweet.png
index 16e05379aa..70d257552e 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/gdbtweet.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/gdbtweet.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/hero.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/hero.png
index 0068ebc667..cf05396b30 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/hero.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/hero.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic1.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic1.png
index e6e98bd50c..4716d4c0ed 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic1.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic1.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic10.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic10.png
index 1c791658e2..76422df910 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic10.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic10.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic11.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic11.png
index 1d74ab11e2..ff0e22de50 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic11.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic11.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic12.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic12.png
index b2ad1ef743..875c570b0c 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic12.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic12.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic13.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic13.png
index 8156af4d06..69fad085b9 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic13.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic13.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic2.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic2.png
index 08c43822dd..a248b97a37 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic2.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic2.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic3.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic3.png
index 62c14a6347..8b07a086e6 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic3.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic3.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic4.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic4.png
index b5fba008e6..911c3e6af3 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic4.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic4.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic5.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic5.png
index 00646b165b..951b3819dc 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic5.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic5.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic6.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic6.png
index daa3e951c4..ce8cf33a12 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic6.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic6.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic7.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic7.png
index c74d601ac4..0f669125a8 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic7.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic7.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic8.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic8.png
index 5bbc049493..aef42c83f6 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic8.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic8.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic9.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic9.png
index 71c71e80e1..9c5824f558 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/pic9.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/pic9.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-dark.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-dark.png
index f7b8cea9a6..2d9b40e88d 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-dark.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-dark.png differ
diff --git a/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-light.png b/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-light.png
index a8707a7fe9..23a4aed932 100644
Binary files a/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-light.png and b/blog/2023-04-04-weaviate-retrieval-plugin/img/plugin-light.png differ
diff --git a/blog/2023-04-11-ranking-models/img/animation.png b/blog/2023-04-11-ranking-models/img/animation.png
index 05f797f05b..d09131092b 100644
Binary files a/blog/2023-04-11-ranking-models/img/animation.png and b/blog/2023-04-11-ranking-models/img/animation.png differ
diff --git a/blog/2023-04-11-ranking-models/img/hero.png b/blog/2023-04-11-ranking-models/img/hero.png
index 8879e17d23..253de549f0 100644
Binary files a/blog/2023-04-11-ranking-models/img/hero.png and b/blog/2023-04-11-ranking-models/img/hero.png differ
diff --git a/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-dark.png b/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-dark.png
index dc185e3918..11be9a305c 100644
Binary files a/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-dark.png and b/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-dark.png differ
diff --git a/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-light.png b/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-light.png
index 1d1868446f..61a210ec64 100644
Binary files a/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-light.png and b/blog/2023-04-18-autogpt-and-weaviate/img/Weaviate-auto-gpt-light.png differ
diff --git a/blog/2023-04-18-autogpt-and-weaviate/img/hero.png b/blog/2023-04-18-autogpt-and-weaviate/img/hero.png
index 949c978bb9..177cc45e80 100644
Binary files a/blog/2023-04-18-autogpt-and-weaviate/img/hero.png and b/blog/2023-04-18-autogpt-and-weaviate/img/hero.png differ
diff --git a/blog/2023-04-25-auth-in-weaviate/index.mdx b/blog/2023-04-25-auth-in-weaviate/index.mdx
index d2b13e304d..031bb59c10 100644
--- a/blog/2023-04-25-auth-in-weaviate/index.mdx
+++ b/blog/2023-04-25-auth-in-weaviate/index.mdx
@@ -15,8 +15,6 @@ description: "Videos on authentication: an overview, how to log in, how to set i
import ReactPlayer from 'react-player/lazy'
-## Overview
-
Authentication is one of those topics that we get quite a few questions about. And we can see why. It's a big, complex topic, and even within Weaviate, there are many options available which can make it seem quite confusing.
The core concept of authentication is relatively simple. When a client (e.g. a Weaviate client) sends a request to a server (e.g. a Weaviate database), it includes a "secret" that provides some assurances to Weaviate as to who that request is coming from, so that it can operate on that information.
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/areyahavingfunmrkrabs.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/areyahavingfunmrkrabs.png
index 57cb25861e..af9308148e 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/areyahavingfunmrkrabs.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/areyahavingfunmrkrabs.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-dark.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-dark.png
index 9334a949de..8f627a6aa2 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-dark.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-dark.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-light.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-light.png
index 2b37d1c249..ce975c7ba0 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-light.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/diagram-light.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/error.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/error.png
index a9f7cfd5e3..5c9236bd74 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/error.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/error.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/hackathon.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/hackathon.png
index 2f6dc86e8f..46df01211d 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/hackathon.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/hackathon.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/hero.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/hero.png
index 03d74b5827..770ea69da6 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/hero.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/hero.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/openaiapi.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/openaiapi.png
index 6175289fa7..02f5544eb3 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/openaiapi.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/openaiapi.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-dark.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-dark.png
index f7b8cea9a6..2d9b40e88d 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-dark.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-dark.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-light.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-light.png
index a8707a7fe9..23a4aed932 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-light.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/plugin-light.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/swagger.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/swagger.png
index 5c6e5a24d8..435100a31f 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/swagger.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/swagger.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/test1.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/test1.png
index 64115f004b..db04c62987 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/test1.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/test1.png differ
diff --git a/blog/2023-04-27-how-to-chatgpt-plugin/img/test2.png b/blog/2023-04-27-how-to-chatgpt-plugin/img/test2.png
index 4cdb49ab3d..c1152db1a8 100644
Binary files a/blog/2023-04-27-how-to-chatgpt-plugin/img/test2.png and b/blog/2023-04-27-how-to-chatgpt-plugin/img/test2.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/datatypes.png b/blog/2023-05-04-weaviate-1-19-release/img/datatypes.png
index c319749da6..ae0cf58079 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/datatypes.png and b/blog/2023-05-04-weaviate-1-19-release/img/datatypes.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/gencohere.png b/blog/2023-05-04-weaviate-1-19-release/img/gencohere.png
index 6d6935869a..6c39b02c37 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/gencohere.png and b/blog/2023-05-04-weaviate-1-19-release/img/gencohere.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/groupby.png b/blog/2023-05-04-weaviate-1-19-release/img/groupby.png
index 9a1e330a29..300e1953ed 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/groupby.png and b/blog/2023-05-04-weaviate-1-19-release/img/groupby.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/grpc.png b/blog/2023-05-04-weaviate-1-19-release/img/grpc.png
index fd8dc628dd..a442ae01aa 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/grpc.png and b/blog/2023-05-04-weaviate-1-19-release/img/grpc.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/hero.png b/blog/2023-05-04-weaviate-1-19-release/img/hero.png
index 2cc370f3fb..8936be458a 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/hero.png and b/blog/2023-05-04-weaviate-1-19-release/img/hero.png differ
diff --git a/blog/2023-05-04-weaviate-1-19-release/img/tunableconsistency.png b/blog/2023-05-04-weaviate-1-19-release/img/tunableconsistency.png
index d31e417f1e..6bf4c9148c 100644
Binary files a/blog/2023-05-04-weaviate-1-19-release/img/tunableconsistency.png and b/blog/2023-05-04-weaviate-1-19-release/img/tunableconsistency.png differ
diff --git a/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-dark.png b/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-dark.png
index 6e11e40251..d7b662562b 100644
Binary files a/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-dark.png and b/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-dark.png differ
diff --git a/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-light.png b/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-light.png
index e71bbf7f4d..a0edeb2c63 100644
Binary files a/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-light.png and b/blog/2023-05-23-pdfs-to-weaviate/img/Weaviate-ingesting-light.png differ
diff --git a/blog/2023-05-23-pdfs-to-weaviate/img/donut.png b/blog/2023-05-23-pdfs-to-weaviate/img/donut.png
index 3a413b43c2..89b9b7da76 100644
Binary files a/blog/2023-05-23-pdfs-to-weaviate/img/donut.png and b/blog/2023-05-23-pdfs-to-weaviate/img/donut.png differ
diff --git a/blog/2023-05-23-pdfs-to-weaviate/img/hero.png b/blog/2023-05-23-pdfs-to-weaviate/img/hero.png
index 7c4e5136fb..143bab76b3 100644
Binary files a/blog/2023-05-23-pdfs-to-weaviate/img/hero.png and b/blog/2023-05-23-pdfs-to-weaviate/img/hero.png differ
diff --git a/blog/2023-06-13-llms-and-search/img/hero.png b/blog/2023-06-13-llms-and-search/img/hero.png
index 3ba6b1f67f..bde0a712f4 100644
Binary files a/blog/2023-06-13-llms-and-search/img/hero.png and b/blog/2023-06-13-llms-and-search/img/hero.png differ
diff --git a/blog/2023-06-13-llms-and-search/img/qa-example.png b/blog/2023-06-13-llms-and-search/img/qa-example.png
index 9c9b91a18b..abf742fa71 100644
Binary files a/blog/2023-06-13-llms-and-search/img/qa-example.png and b/blog/2023-06-13-llms-and-search/img/qa-example.png differ
diff --git a/blog/2023-06-13-llms-and-search/img/tree-of-thought.png b/blog/2023-06-13-llms-and-search/img/tree-of-thought.png
index aaf7810288..99462daf64 100644
Binary files a/blog/2023-06-13-llms-and-search/img/tree-of-thought.png and b/blog/2023-06-13-llms-and-search/img/tree-of-thought.png differ
diff --git a/blog/2023-06-13-llms-and-search/img/wiki-example.png b/blog/2023-06-13-llms-and-search/img/wiki-example.png
index fc47996e7d..f3a46bf98f 100644
Binary files a/blog/2023-06-13-llms-and-search/img/wiki-example.png and b/blog/2023-06-13-llms-and-search/img/wiki-example.png differ
diff --git a/blog/2023-06-22-llamaindex-and-weaviate/img/hero.png b/blog/2023-06-22-llamaindex-and-weaviate/img/hero.png
index 3211bb076c..716e796795 100644
Binary files a/blog/2023-06-22-llamaindex-and-weaviate/img/hero.png and b/blog/2023-06-22-llamaindex-and-weaviate/img/hero.png differ
diff --git a/blog/2023-06-22-llamaindex-and-weaviate/index.mdx b/blog/2023-06-22-llamaindex-and-weaviate/index.mdx
index 9b9b24d02d..0086e28b88 100644
--- a/blog/2023-06-22-llamaindex-and-weaviate/index.mdx
+++ b/blog/2023-06-22-llamaindex-and-weaviate/index.mdx
@@ -74,7 +74,7 @@ nodes = parser.get_nodes_from_documents(blogs)
Here, we use the SimpleDirectoryReader to load in all documents from a given directory. We then use our `SimpleNodeParser` to chunk up the source documents into Node objects (text chunks).
-The next step is to 1) define a `WeaviateVectorStore`, and 2) build a vector index over this vector store using LlamaIndex.
+The next step is to 1) define a `WeaviateVectorStore`, and 2) build a [vector index](/developers/weaviate/concepts/vector-index) over this vector store using LlamaIndex.
```python
from llama_index.vector_stores import WeaviateVectorStore
diff --git a/blog/2023-06-27-multimodal-models/img/vectorspace.png b/blog/2023-06-27-multimodal-models/img/vectorspace.png
index 190d37259f..86eb53519d 100644
Binary files a/blog/2023-06-27-multimodal-models/img/vectorspace.png and b/blog/2023-06-27-multimodal-models/img/vectorspace.png differ
diff --git a/blog/2023-07-18-automated-testing/index.mdx b/blog/2023-07-18-automated-testing/index.mdx
index 5af3d7399e..d3f9e1ff06 100644
--- a/blog/2023-07-18-automated-testing/index.mdx
+++ b/blog/2023-07-18-automated-testing/index.mdx
@@ -53,7 +53,7 @@ Such complexity makes it important to test the application as a whole, and not j
text={TSCode}
startMarker="// START Connect"
endMarker="// Client is now ready to accept requests"
- language="js"
+ language="tsv2"
/>
@@ -131,7 +131,7 @@ If you have yet to install the required dependencies, run the following command:
text={TSCode}
startMarker="// START ConnectAndCleanup"
endMarker="// Client connected and schema cleared"
- language="ts"
+ language="tsv2"
/>
@@ -162,7 +162,7 @@ Here, the integration test will consist of checking that the class was created w
text={TSCode}
startMarker="// Create the class"
endMarker="// Class created successfully"
- language="ts"
+ language="tsv2"
/>
@@ -206,7 +206,7 @@ The test is simple; it verifies that all specified objects have been imported by
text={TSCode}
startMarker="// Import objects from the JSON file"
endMarker="// Import completed successfully"
- language="ts"
+ language="tsv2"
/>
@@ -244,7 +244,7 @@ Depending on your application and usage, you may find that the top result change
text={TSCode}
startMarker="// Run a test query"
endMarker="// Query test completed"
- language="ts"
+ language="tsv2"
/>
@@ -282,7 +282,7 @@ The code below brings together the setup and tests we've implemented so far - if
text={TSCode}
startMarker="// START Connect"
endMarker="// END all"
- language="ts"
+ language="tsv2"
/>
diff --git a/blog/2023-08-01-vector-database/index.mdx b/blog/2023-08-01-vector-database/index.mdx
index 74b19e255a..b1396bc9b2 100644
--- a/blog/2023-08-01-vector-database/index.mdx
+++ b/blog/2023-08-01-vector-database/index.mdx
@@ -22,7 +22,7 @@ If you have just recently heard the term “vector database” for the first tim
The excitement around vector databases - sometimes referred to as AI databases - is closely related to the release of ChatGPT. Since late 2022, the public has started to understand the capabilities of state-of-the-art large language models (LLMs), while developers have realized that vector databases can enhance these models further.
-This article will explain some of their core concepts, such as [vector embeddings](/blog/vector-embeddings-explained) and [vector search](/blog/vector-search-explained). Then, we will dive into the technical details of using distance metrics in vector search and how vector indexes enable efficient retrieval. Once we have a fundamental understanding, we will discuss use cases and the current tool landscape.
+This article will explain some of their core concepts, such as [vector embeddings](/blog/vector-embeddings-explained) and [vector search](/blog/vector-search-explained). Then, we will dive into the technical details of using distance metrics in vector search and how [vector indexes](/developers/weaviate/concepts/vector-index) enable efficient retrieval. Once we have a fundamental understanding, we will discuss use cases and the current tool landscape.
## What is a Vector Database?
A vector database indexes, stores, and provides access to structured or unstructured data (e.g., text or images) alongside its vector embeddings, which are the data's numerical representation. It allows users to find and retrieve similar objects quickly at scale in production.
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine-example.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine-example.png
index 6cbfdfa58e..4d6642fcad 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine-example.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine-example.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine.png
index e92d8d61ab..bbc4e00fbd 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/cosine.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/direction.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/direction.png
index 27795da2d7..ce85f544ff 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/direction.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/direction.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/dot-product.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/dot-product.png
index f3747f89e9..7fb839b7dc 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/dot-product.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/dot-product.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/equation1.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/equation1.png
index 6721b2d50b..10d04aceb2 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/equation1.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/equation1.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/hamming-and-bpr.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/hamming-and-bpr.png
index 6bb99a909d..9e7b92c0b6 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/hamming-and-bpr.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/hamming-and-bpr.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/hero.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/hero.png
index c23fc858e3..cdd36787be 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/hero.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/hero.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-equation.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-equation.png
index e1a0edf190..6e109b2589 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-equation.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-equation.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-formula.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-formula.png
index a1ff6005f4..67f00b8d11 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-formula.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/l2-formula.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan-example.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan-example.png
index 09585be165..d0d4090f40 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan-example.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan-example.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan.png
index ec6951bbdd..29599bdf91 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/manhattan.png differ
diff --git a/blog/2023-08-15-distance-metrics-in-vector-search/img/vectors-example.png b/blog/2023-08-15-distance-metrics-in-vector-search/img/vectors-example.png
index 8fa705dd60..69d65c5b1d 100644
Binary files a/blog/2023-08-15-distance-metrics-in-vector-search/img/vectors-example.png and b/blog/2023-08-15-distance-metrics-in-vector-search/img/vectors-example.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/1.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/1.png
index 9907fdcf07..927be89e36 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/1.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/1.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/2.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/2.png
index 6809d323ea..7e751e0220 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/2.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/2.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/3.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/3.png
index cdaefc08e9..bbb9856fc5 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/3.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/3.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/4.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/4.png
index 26319013f3..9eced34fc6 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/4.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/4.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/5.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/5.png
index dd1ac12471..77ffc0b1eb 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/5.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/5.png differ
diff --git a/blog/2023-09-11-weaviate-gorilla-part-1/img/hero.png b/blog/2023-09-11-weaviate-gorilla-part-1/img/hero.png
index 4b946c96e1..b2104414fd 100644
Binary files a/blog/2023-09-11-weaviate-gorilla-part-1/img/hero.png and b/blog/2023-09-11-weaviate-gorilla-part-1/img/hero.png differ
diff --git a/blog/2023-09-26-collections-python-client/img/hero.png b/blog/2023-09-26-collections-python-client/img/hero.png
index b3cc201320..56031dde65 100644
Binary files a/blog/2023-09-26-collections-python-client/img/hero.png and b/blog/2023-09-26-collections-python-client/img/hero.png differ
diff --git a/blog/2023-09-26-collections-python-client/img/inverted-index-hints.png b/blog/2023-09-26-collections-python-client/img/inverted-index-hints.png
index d41af10189..66bfee60b9 100644
Binary files a/blog/2023-09-26-collections-python-client/img/inverted-index-hints.png and b/blog/2023-09-26-collections-python-client/img/inverted-index-hints.png differ
diff --git a/blog/2023-10-02-hacktoberfest-2023/img/hacktoberfest_2023_demo.mp4 b/blog/2023-10-02-hacktoberfest-2023/img/hacktoberfest_2023_demo.mp4
index 7a04c39e72..4c1abe66a8 100644
Binary files a/blog/2023-10-02-hacktoberfest-2023/img/hacktoberfest_2023_demo.mp4 and b/blog/2023-10-02-hacktoberfest-2023/img/hacktoberfest_2023_demo.mp4 differ
diff --git a/blog/2023-10-02-hacktoberfest-2023/img/weaviate-demos.png b/blog/2023-10-02-hacktoberfest-2023/img/weaviate-demos.png
index 693c6ee6a2..c04eeb5ee3 100644
Binary files a/blog/2023-10-02-hacktoberfest-2023/img/weaviate-demos.png and b/blog/2023-10-02-hacktoberfest-2023/img/weaviate-demos.png differ
diff --git a/blog/2023-10-02-hacktoberfest-2023/img/weaviate-hacktoberfest-2023.png b/blog/2023-10-02-hacktoberfest-2023/img/weaviate-hacktoberfest-2023.png
index 0d37229442..41c6109cec 100644
Binary files a/blog/2023-10-02-hacktoberfest-2023/img/weaviate-hacktoberfest-2023.png and b/blog/2023-10-02-hacktoberfest-2023/img/weaviate-hacktoberfest-2023.png differ
diff --git a/blog/2023-11-15-moonsift-story/img/hero.png b/blog/2023-11-15-moonsift-story/img/hero.png
index 9916177a62..ffec81d48b 100644
Binary files a/blog/2023-11-15-moonsift-story/img/hero.png and b/blog/2023-11-15-moonsift-story/img/hero.png differ
diff --git a/blog/2023-11-15-moonsift-story/img/image1.png b/blog/2023-11-15-moonsift-story/img/image1.png
index 9cdc04e0ce..3130b772ab 100644
Binary files a/blog/2023-11-15-moonsift-story/img/image1.png and b/blog/2023-11-15-moonsift-story/img/image1.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/agents.png b/blog/2023-11-21-rag-evaluation/img/agents.png
index 5134ec76ed..7b0491628b 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/agents.png and b/blog/2023-11-21-rag-evaluation/img/agents.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/chunk.png b/blog/2023-11-21-rag-evaluation/img/chunk.png
index 60bb5e42fa..53c751b81a 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/chunk.png and b/blog/2023-11-21-rag-evaluation/img/chunk.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/hero.png b/blog/2023-11-21-rag-evaluation/img/hero.png
index bbc491bd42..9404e8b6b3 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/hero.png and b/blog/2023-11-21-rag-evaluation/img/hero.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/multi-index.png b/blog/2023-11-21-rag-evaluation/img/multi-index.png
index e87fce7814..55928ce1b9 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/multi-index.png and b/blog/2023-11-21-rag-evaluation/img/multi-index.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/rag-eval.png b/blog/2023-11-21-rag-evaluation/img/rag-eval.png
index 336fbb993f..7b1da63af0 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/rag-eval.png and b/blog/2023-11-21-rag-evaluation/img/rag-eval.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/ragas-score.png b/blog/2023-11-21-rag-evaluation/img/ragas-score.png
index 328021923c..07bb3bbe98 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/ragas-score.png and b/blog/2023-11-21-rag-evaluation/img/ragas-score.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/sql-router.png b/blog/2023-11-21-rag-evaluation/img/sql-router.png
index ea89619a38..dc2b97734c 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/sql-router.png and b/blog/2023-11-21-rag-evaluation/img/sql-router.png differ
diff --git a/blog/2023-11-21-rag-evaluation/img/sub-question.png b/blog/2023-11-21-rag-evaluation/img/sub-question.png
index 862a2b541c..ecd3393f25 100644
Binary files a/blog/2023-11-21-rag-evaluation/img/sub-question.png and b/blog/2023-11-21-rag-evaluation/img/sub-question.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/any2any_D.png b/blog/2023-12-05-multimodal-RAG/img/any2any_D.png
index 2a6f7f9ba3..0d14c97783 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/any2any_D.png and b/blog/2023-12-05-multimodal-RAG/img/any2any_D.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/any2any_L.png b/blog/2023-12-05-multimodal-RAG/img/any2any_L.png
index 7ed3a6b0b3..16f169cbf0 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/any2any_L.png and b/blog/2023-12-05-multimodal-RAG/img/any2any_L.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/cross_modal.png b/blog/2023-12-05-multimodal-RAG/img/cross_modal.png
index cfb9c15b0c..8d896db2b2 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/cross_modal.png and b/blog/2023-12-05-multimodal-RAG/img/cross_modal.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/hero.png b/blog/2023-12-05-multimodal-RAG/img/hero.png
index 9d527b9bb3..05e50f8cfb 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/hero.png and b/blog/2023-12-05-multimodal-RAG/img/hero.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/image_a.png b/blog/2023-12-05-multimodal-RAG/img/image_a.png
index 0312dec553..6ba214c615 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/image_a.png and b/blog/2023-12-05-multimodal-RAG/img/image_a.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/image_b.png b/blog/2023-12-05-multimodal-RAG/img/image_b.png
index 7f9e4017b9..25d9900a35 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/image_b.png and b/blog/2023-12-05-multimodal-RAG/img/image_b.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/mmRAG_D.png b/blog/2023-12-05-multimodal-RAG/img/mmRAG_D.png
index 68d76801d6..40cc9fed71 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/mmRAG_D.png and b/blog/2023-12-05-multimodal-RAG/img/mmRAG_D.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/mm_RAG_L.png b/blog/2023-12-05-multimodal-RAG/img/mm_RAG_L.png
index a6e9c04eb4..98334f1082 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/mm_RAG_L.png and b/blog/2023-12-05-multimodal-RAG/img/mm_RAG_L.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/puppy.png b/blog/2023-12-05-multimodal-RAG/img/puppy.png
index 8205a46d0a..a260e97e42 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/puppy.png and b/blog/2023-12-05-multimodal-RAG/img/puppy.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/puppy_dalle.png b/blog/2023-12-05-multimodal-RAG/img/puppy_dalle.png
index e418dcdd55..68453a44e4 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/puppy_dalle.png and b/blog/2023-12-05-multimodal-RAG/img/puppy_dalle.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/unified_emb_D.png b/blog/2023-12-05-multimodal-RAG/img/unified_emb_D.png
index 8894fda3d2..9192814e82 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/unified_emb_D.png and b/blog/2023-12-05-multimodal-RAG/img/unified_emb_D.png differ
diff --git a/blog/2023-12-05-multimodal-RAG/img/unified_emb_L.png b/blog/2023-12-05-multimodal-RAG/img/unified_emb_L.png
index 8adeef32df..1da715c9d1 100644
Binary files a/blog/2023-12-05-multimodal-RAG/img/unified_emb_L.png and b/blog/2023-12-05-multimodal-RAG/img/unified_emb_L.png differ
diff --git a/blog/2023-12-19-weaviate-1-23-release/img/generative-anyscale.png b/blog/2023-12-19-weaviate-1-23-release/img/generative-anyscale.png
index 899780880d..b77cf62bb3 100644
Binary files a/blog/2023-12-19-weaviate-1-23-release/img/generative-anyscale.png and b/blog/2023-12-19-weaviate-1-23-release/img/generative-anyscale.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/Group_2596.png b/blog/2023-12-26-weaviate-recap/img/Group_2596.png
new file mode 100644
index 0000000000..e1fc3a3b5a
Binary files /dev/null and b/blog/2023-12-26-weaviate-recap/img/Group_2596.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/Group_2596_(1).png b/blog/2023-12-26-weaviate-recap/img/Group_2596_(1).png
deleted file mode 100644
index ea565b318a..0000000000
Binary files a/blog/2023-12-26-weaviate-recap/img/Group_2596_(1).png and /dev/null differ
diff --git a/blog/2023-12-26-weaviate-recap/img/Group_2597.png b/blog/2023-12-26-weaviate-recap/img/Group_2597.png
index ebe5b9887f..a750ed1122 100644
Binary files a/blog/2023-12-26-weaviate-recap/img/Group_2597.png and b/blog/2023-12-26-weaviate-recap/img/Group_2597.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/Recap_2023.png b/blog/2023-12-26-weaviate-recap/img/Recap_2023.png
index ead51206e9..b6b38642b0 100644
Binary files a/blog/2023-12-26-weaviate-recap/img/Recap_2023.png and b/blog/2023-12-26-weaviate-recap/img/Recap_2023.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/Weaviate-hero_(1).gif b/blog/2023-12-26-weaviate-recap/img/Weaviate-hero.gif
similarity index 100%
rename from blog/2023-12-26-weaviate-recap/img/Weaviate-hero_(1).gif
rename to blog/2023-12-26-weaviate-recap/img/Weaviate-hero.gif
diff --git a/blog/2023-12-26-weaviate-recap/img/hackathons.png b/blog/2023-12-26-weaviate-recap/img/hackathons.png
index 50520e5367..ce9fb78d6f 100644
Binary files a/blog/2023-12-26-weaviate-recap/img/hackathons.png and b/blog/2023-12-26-weaviate-recap/img/hackathons.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/hero.png b/blog/2023-12-26-weaviate-recap/img/hero.png
index 685f4713fa..7b612e3a60 100644
Binary files a/blog/2023-12-26-weaviate-recap/img/hero.png and b/blog/2023-12-26-weaviate-recap/img/hero.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/workshops.png b/blog/2023-12-26-weaviate-recap/img/workshops.png
new file mode 100644
index 0000000000..5e30e89ab8
Binary files /dev/null and b/blog/2023-12-26-weaviate-recap/img/workshops.png differ
diff --git a/blog/2023-12-26-weaviate-recap/img/workshops_3.png b/blog/2023-12-26-weaviate-recap/img/workshops_3.png
deleted file mode 100644
index 5375f64e82..0000000000
Binary files a/blog/2023-12-26-weaviate-recap/img/workshops_3.png and /dev/null differ
diff --git a/blog/2023-12-26-weaviate-recap/index.mdx b/blog/2023-12-26-weaviate-recap/index.mdx
index db8572e662..8bef4575b6 100644
--- a/blog/2023-12-26-weaviate-recap/index.mdx
+++ b/blog/2023-12-26-weaviate-recap/index.mdx
@@ -42,7 +42,7 @@ In the realm of Generative AI, especially with the emergence of OpenAI's ChatGPT
Our in-house projects, [Verba, an open-source RAG app](https://github.com/weaviate/Verba) and [Health Search](https://github.com/weaviate/healthsearch-demo) built by [Edward Schmuhl](https://www.linkedin.com/in/edwardschmuhl/), and other projects like [Leonie Monigatti's](https://www.linkedin.com/in/804250ab/) [Awesome-Moviate](https://github.com/weaviate-tutorials/awesome-moviate) and [Adam Chan](https://www.linkedin.com/in/itsajchan/)'s [Recommendation System](https://github.com/itsajchan/Create-JSON-Data-with-AI) have pushed the boundaries of what's possible with vector databases applicable to different industry use cases.
-![build with weaviate](img/Group_2596_(1).png)
+![build with weaviate](img/Group_2596.png)
### Community projects
@@ -73,7 +73,7 @@ Every week, [Zain](https://www.linkedin.com/in/zainhas/), [JP](https://www.linke
Later in the year, we teamed up with [DeepLearningAI](https://www.deeplearning.ai/) to create a short course with [Sebastian](https://www.linkedin.com/in/sebawita/) and [Zain](https://www.linkedin.com/in/zainhas/), "[Vector Databases: from Embeddings to Applications with Weaviate](https://www.deeplearning.ai/short-courses/vector-databases-embeddings-applications/)." It’s been a year packed with learning.
-![workshops](img/workshops_3.png)
+![workshops](img/workshops.png)
## Building a Global Community
@@ -100,7 +100,7 @@ Nominate your hero [here](https://docs.google.com/forms/d/e/1FAIpQLSePtgvTPZGx2g
As we keep building, learning, and collaborating, we're excited to see the innovations that 2024 will bring. 💫
-![Weaviate Hero](img/Weaviate-hero_(1).gif)
+![Weaviate Hero](img/Weaviate-hero.gif)
import WhatNext from '/_includes/what-next.mdx'
diff --git a/blog/2024-01-23-typescript-multimodal-search/img/hero.png b/blog/2024-01-23-typescript-multimodal-search/img/hero.png
index d3bbcfd786..eab5d2d6a9 100644
Binary files a/blog/2024-01-23-typescript-multimodal-search/img/hero.png and b/blog/2024-01-23-typescript-multimodal-search/img/hero.png differ
diff --git a/blog/2024-01-23-typescript-multimodal-search/img/multimodal-1.png b/blog/2024-01-23-typescript-multimodal-search/img/multimodal-1.png
index bc7466e44a..d01405217b 100644
Binary files a/blog/2024-01-23-typescript-multimodal-search/img/multimodal-1.png and b/blog/2024-01-23-typescript-multimodal-search/img/multimodal-1.png differ
diff --git a/blog/2024-01-23-typescript-multimodal-search/img/multimodal-2.png b/blog/2024-01-23-typescript-multimodal-search/img/multimodal-2.png
index d636326114..dbfd351248 100644
Binary files a/blog/2024-01-23-typescript-multimodal-search/img/multimodal-2.png and b/blog/2024-01-23-typescript-multimodal-search/img/multimodal-2.png differ
diff --git a/blog/2024-01-23-typescript-multimodal-search/img/mumose-1.gif b/blog/2024-01-23-typescript-multimodal-search/img/mumose-1.gif
deleted file mode 100644
index 6d5cb56386..0000000000
Binary files a/blog/2024-01-23-typescript-multimodal-search/img/mumose-1.gif and /dev/null differ
diff --git a/blog/2024-01-23-typescript-multimodal-search/img/project-demo.mp4 b/blog/2024-01-23-typescript-multimodal-search/img/project-demo.mp4
new file mode 100644
index 0000000000..4ffebf20b3
Binary files /dev/null and b/blog/2024-01-23-typescript-multimodal-search/img/project-demo.mp4 differ
diff --git a/blog/2024-01-23-typescript-multimodal-search/index.mdx b/blog/2024-01-23-typescript-multimodal-search/index.mdx
index e64d79e708..0a7c9e7856 100644
--- a/blog/2024-01-23-typescript-multimodal-search/index.mdx
+++ b/blog/2024-01-23-typescript-multimodal-search/index.mdx
@@ -514,7 +514,12 @@ Here was call the `vectorSearch()` server action we created above and pass the q
### Final Result
Then you should be able to search like this
-![the final multimodal search project](./img/mumose-1.gif)
+import multimodalVideo from './img/project-demo.mp4';
+
+
## Conclusion
diff --git a/blog/2024-02-01-py-client-v4-release/index.mdx b/blog/2024-02-01-py-client-v4-release/index.mdx
index 384ad70872..54b8717c9d 100644
--- a/blog/2024-02-01-py-client-v4-release/index.mdx
+++ b/blog/2024-02-01-py-client-v4-release/index.mdx
@@ -12,6 +12,7 @@ import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBlock';
import PythonCode from '!!raw-loader!/_includes/code/client-libraries/python_v4.py';
+import PythonV3Code from '!!raw-loader!/_includes/code/connections/connect-python-v3.py';
import ManageCollectionsCode from '!!raw-loader!/_includes/code/howto/manage-data.collections.py';
![Weaviate Python Client v4 Release](./img/hero.png)
@@ -106,7 +107,7 @@ Here is an example that really captures the difference between the `v4` and `v3`
text={CollectionsV3}
startMarker="# START CreateCollectionWithProperties"
endMarker="# END CreateCollectionWithProperties"
- language="python"
+ language="pyv3"
/>
@@ -180,7 +181,7 @@ Direct instantiation with full control over the parameters is also possible, too
diff --git a/blog/2024-09-17-better-ecommerce-typescript/img/final-application.png b/blog/2024-09-17-better-ecommerce-typescript/img/final-application.png
index 03af05f60b..08d6d3c639 100644
Binary files a/blog/2024-09-17-better-ecommerce-typescript/img/final-application.png and b/blog/2024-09-17-better-ecommerce-typescript/img/final-application.png differ
diff --git a/blog/2024-10-10-wealingo-demo/img/image.png b/blog/2024-10-10-wealingo-demo/img/image.png
index 8049efb9af..def7cf1bc9 100644
Binary files a/blog/2024-10-10-wealingo-demo/img/image.png and b/blog/2024-10-10-wealingo-demo/img/image.png differ
diff --git a/blog/2024-10-10-wealingo-demo/img/image1.png b/blog/2024-10-10-wealingo-demo/img/image1.png
index 0baceffd4b..545f8bdcd9 100644
Binary files a/blog/2024-10-10-wealingo-demo/img/image1.png and b/blog/2024-10-10-wealingo-demo/img/image1.png differ
diff --git a/blog/2024-10-10-wealingo-demo/img/image2.png b/blog/2024-10-10-wealingo-demo/img/image2.png
index 56e84c5c7a..5fad126089 100644
Binary files a/blog/2024-10-10-wealingo-demo/img/image2.png and b/blog/2024-10-10-wealingo-demo/img/image2.png differ
diff --git a/blog/2024-10-10-wealingo-demo/img/image3.png b/blog/2024-10-10-wealingo-demo/img/image3.png
index 46b11f52e3..457fb625ad 100644
Binary files a/blog/2024-10-10-wealingo-demo/img/image3.png and b/blog/2024-10-10-wealingo-demo/img/image3.png differ
diff --git a/blog/2024-10-10-wealingo-demo/img/image4.png b/blog/2024-10-10-wealingo-demo/img/image4.png
index fc31d453d3..4a0c09986b 100644
Binary files a/blog/2024-10-10-wealingo-demo/img/image4.png and b/blog/2024-10-10-wealingo-demo/img/image4.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/hero.png b/blog/2024-10-15-introduction-to-rag/img/hero.png
index 24bd9ca71a..10266aeaba 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/hero.png and b/blog/2024-10-15-introduction-to-rag/img/hero.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/rag-advanced-rag.png b/blog/2024-10-15-introduction-to-rag/img/rag-advanced-rag.png
index 1c1a50bc80..8bc1779484 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/rag-advanced-rag.png and b/blog/2024-10-15-introduction-to-rag/img/rag-advanced-rag.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/rag-base.png b/blog/2024-10-15-introduction-to-rag/img/rag-base.png
index f8be67d1a0..25f6479757 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/rag-base.png and b/blog/2024-10-15-introduction-to-rag/img/rag-base.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/rag-evaluation.png b/blog/2024-10-15-introduction-to-rag/img/rag-evaluation.png
index fc5b5c189b..bb7ea0c4ed 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/rag-evaluation.png and b/blog/2024-10-15-introduction-to-rag/img/rag-evaluation.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/rag-stages.png b/blog/2024-10-15-introduction-to-rag/img/rag-stages.png
index c89697f802..b034291048 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/rag-stages.png and b/blog/2024-10-15-introduction-to-rag/img/rag-stages.png differ
diff --git a/blog/2024-10-15-introduction-to-rag/img/rag-workflow.png b/blog/2024-10-15-introduction-to-rag/img/rag-workflow.png
index e4fec016ad..1e73e3669e 100644
Binary files a/blog/2024-10-15-introduction-to-rag/img/rag-workflow.png and b/blog/2024-10-15-introduction-to-rag/img/rag-workflow.png differ
diff --git a/blog/2024-10-29-low-code-builder-lamatic/img/data-indexing-flow.png b/blog/2024-10-29-low-code-builder-lamatic/img/data-indexing-flow.png
index c389450970..647eeaf896 100644
Binary files a/blog/2024-10-29-low-code-builder-lamatic/img/data-indexing-flow.png and b/blog/2024-10-29-low-code-builder-lamatic/img/data-indexing-flow.png differ
diff --git a/blog/2024-10-29-low-code-builder-lamatic/img/gen-ops-cycle.png b/blog/2024-10-29-low-code-builder-lamatic/img/gen-ops-cycle.png
index 575bf765d1..6fba904638 100644
Binary files a/blog/2024-10-29-low-code-builder-lamatic/img/gen-ops-cycle.png and b/blog/2024-10-29-low-code-builder-lamatic/img/gen-ops-cycle.png differ
diff --git a/blog/2024-10-29-low-code-builder-lamatic/img/hero.png b/blog/2024-10-29-low-code-builder-lamatic/img/hero.png
index 2d827c6045..98eaa07d2b 100644
Binary files a/blog/2024-10-29-low-code-builder-lamatic/img/hero.png and b/blog/2024-10-29-low-code-builder-lamatic/img/hero.png differ
diff --git a/blog/2024-10-29-low-code-builder-lamatic/img/lamatic-value.png b/blog/2024-10-29-low-code-builder-lamatic/img/lamatic-value.png
index 4554d2d623..a6eae290e4 100644
Binary files a/blog/2024-10-29-low-code-builder-lamatic/img/lamatic-value.png and b/blog/2024-10-29-low-code-builder-lamatic/img/lamatic-value.png differ
diff --git a/blog/2024-10-29-low-code-builder-lamatic/img/retrieval-and-response-flow.png b/blog/2024-10-29-low-code-builder-lamatic/img/retrieval-and-response-flow.png
index c9edaa2604..0e384feb2c 100644
Binary files a/blog/2024-10-29-low-code-builder-lamatic/img/retrieval-and-response-flow.png and b/blog/2024-10-29-low-code-builder-lamatic/img/retrieval-and-response-flow.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/Components_of_an_AI_agent.png b/blog/2024-11-05-what-is-agentic-rag/img/Components_of_an_AI_agent.png
index cafa3b2316..f9ad6a1baa 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/Components_of_an_AI_agent.png and b/blog/2024-11-05-what-is-agentic-rag/img/Components_of_an_AI_agent.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/Multi_Agent_RAG_System.png b/blog/2024-11-05-what-is-agentic-rag/img/Multi_Agent_RAG_System.png
index 1915e03327..226b096f02 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/Multi_Agent_RAG_System.png and b/blog/2024-11-05-what-is-agentic-rag/img/Multi_Agent_RAG_System.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/ReAct.png b/blog/2024-11-05-what-is-agentic-rag/img/ReAct.png
index 0e6297cfc3..49fa126ec2 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/ReAct.png and b/blog/2024-11-05-what-is-agentic-rag/img/ReAct.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/Single_Agent_RAG_System_(Router).png b/blog/2024-11-05-what-is-agentic-rag/img/Single_Agent_RAG_System_(Router).png
index f714d2631d..21629b01f3 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/Single_Agent_RAG_System_(Router).png and b/blog/2024-11-05-what-is-agentic-rag/img/Single_Agent_RAG_System_(Router).png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/Vanilla_RAG.png b/blog/2024-11-05-what-is-agentic-rag/img/Vanilla_RAG.png
index 3517f479e7..1b0056765e 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/Vanilla_RAG.png and b/blog/2024-11-05-what-is-agentic-rag/img/Vanilla_RAG.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/img/hero.png b/blog/2024-11-05-what-is-agentic-rag/img/hero.png
index 2fcc11b9cc..423d82db9a 100644
Binary files a/blog/2024-11-05-what-is-agentic-rag/img/hero.png and b/blog/2024-11-05-what-is-agentic-rag/img/hero.png differ
diff --git a/blog/2024-11-05-what-is-agentic-rag/index.mdx b/blog/2024-11-05-what-is-agentic-rag/index.mdx
index 57f4a25c49..082ff3f3ef 100644
--- a/blog/2024-11-05-what-is-agentic-rag/index.mdx
+++ b/blog/2024-11-05-what-is-agentic-rag/index.mdx
@@ -250,9 +250,10 @@ Finally, this article discussed the benefits and limitations of agentic RAG pipe
## Further Resources
-- [Notebook](https://github.com/weaviate/recipes/tree/main/integrations/llm-frameworks/letta) using Swarm
+- [Notebook](https://github.com/weaviate/recipes/blob/main/integrations/llm-frameworks/function-calling/openai/openai-swarm.ipynb) using Swarm
- [Notebook](https://github.com/weaviate/recipes/tree/main/integrations/llm-frameworks/letta) using Letta and Weaviate
-
+- [Notebooks](https://github.com/weaviate/recipes/tree/main/integrations/llm-frameworks/function-calling/ollama) on using function calling in Ollama
+- [Notebook](https://github.com/weaviate/recipes/blob/main/integrations/llm-frameworks/agentic-rag-benchmark/vanilla-rag-vs-agentic-rag.ipynb) on Vanilla RAG versus Agentic RAG
import WhatsNext from '/_includes/what-next.mdx';
diff --git a/blog/2024-11-21-vector-search-explained/img/any2any_L.png b/blog/2024-11-21-vector-search-explained/img/any2any_L.png
index 7ed3a6b0b3..2840bc0873 100644
Binary files a/blog/2024-11-21-vector-search-explained/img/any2any_L.png and b/blog/2024-11-21-vector-search-explained/img/any2any_L.png differ
diff --git a/blog/2024-11-21-vector-search-explained/img/hero.png b/blog/2024-11-21-vector-search-explained/img/hero.png
index 4981d4bb03..ee349c813a 100644
Binary files a/blog/2024-11-21-vector-search-explained/img/hero.png and b/blog/2024-11-21-vector-search-explained/img/hero.png differ
diff --git a/blog/2024-11-21-vector-search-explained/img/rag.png b/blog/2024-11-21-vector-search-explained/img/rag.png
index f9cf44c7d6..fcf447b4a0 100644
Binary files a/blog/2024-11-21-vector-search-explained/img/rag.png and b/blog/2024-11-21-vector-search-explained/img/rag.png differ
diff --git a/blog/2024-11-21-vector-search-explained/img/vector-search.png b/blog/2024-11-21-vector-search-explained/img/vector-search.png
index 6bd059360e..9f2ab1ff54 100644
Binary files a/blog/2024-11-21-vector-search-explained/img/vector-search.png and b/blog/2024-11-21-vector-search-explained/img/vector-search.png differ
diff --git a/blog/2024-12-03-weaviate-embeddings/img/hero.jpg b/blog/2024-12-03-weaviate-embeddings/img/hero.jpg
new file mode 100644
index 0000000000..0aed51687c
Binary files /dev/null and b/blog/2024-12-03-weaviate-embeddings/img/hero.jpg differ
diff --git a/blog/2024-12-03-weaviate-embeddings/img/weaviate-embeddings.png b/blog/2024-12-03-weaviate-embeddings/img/weaviate-embeddings.png
new file mode 100644
index 0000000000..d75eb4a216
Binary files /dev/null and b/blog/2024-12-03-weaviate-embeddings/img/weaviate-embeddings.png differ
diff --git a/blog/2024-12-03-weaviate-embeddings/index.mdx b/blog/2024-12-03-weaviate-embeddings/index.mdx
new file mode 100644
index 0000000000..09e70656ed
--- /dev/null
+++ b/blog/2024-12-03-weaviate-embeddings/index.mdx
@@ -0,0 +1,53 @@
+---
+title: Introducing Weaviate Embeddings
+slug: introducing-weaviate-embeddings
+authors: [alvin, charles-pierse]
+date: 2024-12-03
+tags: ['release']
+image: ./img/hero.jpg
+description: "Say goodbye to the headaches of creating and managing vector embeddings."
+---
+
+![Weaviate Embeddings](./img/hero.jpg)
+
+If you’re building AI applications and have struggled with embedding provider rate limits, being locked in with a single provider or model, or the overhead of self-hosting models, you’re in good company. So many developers face unnecessary friction when it comes to creating and managing vector embeddings, a critical function of their AI pipelines.
+
+We’re excited to announce that [**Weaviate Embeddings**](/developers/wcs/embeddings), a new embedding service in Weaviate Cloud that makes creating vector embeddings as easy as possible for AI developers, is now available in preview.
+
+## The need for model flexibility
+
+The landscape of Gen AI and machine learning models is evolving at a crazy pace, with new models being released almost daily. From large language models (LLMs), to vertical-specific, multimodal, open-source, and commercial models—developers are faced with an overwhelming amount of options. When you’re locked in with a single provider, it’s difficult to swap models and try new ones. Open-source models are becoming increasingly popular, but the complexity of self-hosting is one many teams don’t have the time or inclination to do, they simply want to focus on building new application capabilities and creating new business outcomes.
+
+Weaviate has always prioritized model flexibility in our architecture, and we’ll continue to offer easy ways to integrate with external model providers via pre-built APIs. Weaviate Embeddings introduces the ability to run embedding models directly within Weaviate Cloud, without the need to connect to an external provider.
+
+In preview, Weaviate Embeddings offers Snowflake’s [Arctic-Embed](https://github.com/Snowflake-Labs/arctic-embed) open-source text embedding model which has scored impressively in industry benchmarks (although we’re fans of you running your own benchmarks). You can learn more about it [here](https://www.snowflake.com/engineering-blog/arctic-embed-m-v1-5-enterprise-retrieval/). We’ll soon add support for class-leading commercial multilingual and multimodal models. Users will be able to create vector embeddings for a variety of models, and compare the results and recall accuracy for their use case. This simplifies selecting the right model for the problem you are trying to solve.
+
+## Freedom from rate limits
+
+Most external embedding APIs impose strict rate limits or batch processing with lengthy turnaround times, which slows down your entire pipeline, or even worse creates unnecessary latency for the search experience you are building. One of our customers recently told us that they’ve had to rebuild their entire document syncing pipeline around the fact that they were constantly running into rate limits with their commercial provider. Other customers struggle with throughput, stability, cost, and recall quality using existing services.
+
+With Weaviate Embeddings, there are no artificial constraints. Our infrastructure is built to handle high-throughput use cases, efficiently processing large volumes of embeddings per second without compromising performance. Whether you’re importing billions of documents or performing real-time vector searches, Weaviate Embeddings scales with you, without slowing you down. Pricing is based on tokens consumed.
+
+![With Weaviate Embeddings, your data and embedding models run within the same service](./img/weaviate-embeddings.png)
+
+
+## AI-ready data, with less friction
+
+Our goal is to give developers flexibility of choice, while providing levers to make building AI applications easier and more efficient. With Weaviate Embeddings, you get:
+
+* **Leading OSS and proprietary models:** Access cutting-edge open source and proprietary models. At preview, we will offer Snowflake Arctic-Embed (open-source) with commercial models coming early next year.
+* **Co-located models and data:** Reduce latency and improve performance by hosting both your data and your models in Weaviate Cloud.
+* **Cost efficient and GPU-powered:** Leverage GPU-powered inference and cost-efficient performance. Pay-as-you-go pricing based on tokens consumed means you only pay for what you use. You get full control, including the ability to optimize embedding dimensions based on your specific use case.
+* **Secure, enterprise-ready deployment:** Weaviate is SOC2-certified, with security features like role-based access controls and strict data isolation.
+
+## A foundation for the future
+
+Weaviate Embeddings is the bedrock of our future hosted model offerings. Upcoming advancements and releases will include multimodal models, dedicated hosting, and fine-tuned, optimized models tailored to your collection—laying the groundwork for exceptional retrieval quality across any domain. And this is just the beginning—stay tuned for exciting updates in the months ahead!
+
+## Give it a try
+
+To learn more about Weaviate Embeddings, check out the [docs](https://weaviate.io/developers/wcs/embeddings), sign up for our [upcoming webinar](https://webinars.techstronglearning.com/simplify-building-ai-native-embedding-models-and-vector-databases), or request [preview access](https://events.weaviate.io/embeddings-preview) and we’ll get in touch.
+
+import WhatsNext from '/_includes/what-next.mdx';
+
+
diff --git a/blog/2024-12-04-unbody-weaviate-2/img/hero.jpg b/blog/2024-12-04-unbody-weaviate-2/img/hero.jpg
new file mode 100644
index 0000000000..5640f37fd3
Binary files /dev/null and b/blog/2024-12-04-unbody-weaviate-2/img/hero.jpg differ
diff --git a/blog/2024-12-04-unbody-weaviate-2/index.mdx b/blog/2024-12-04-unbody-weaviate-2/index.mdx
new file mode 100644
index 0000000000..5b15208a3d
--- /dev/null
+++ b/blog/2024-12-04-unbody-weaviate-2/index.mdx
@@ -0,0 +1,182 @@
+---
+title: 'Unbody’s Approach to Expanding Weaviate’s Generative Capabilities'
+slug: unbody-weaviate-extension
+description: "Unbody has enhanced Weaviate's generative capabilities by developing a custom Generative API that addresses limitations such as static project configurations, limited RAG syntax, and text-only input restrictions."
+authors: [hossein]
+date: 2024-12-04
+tags: []
+image: ./img/hero.jpg
+---
+
+![AI-First Technology](./img/hero.jpg)
+
+Two years ago, we faced a critical question at [Unbody](https://unbody.io/): how could we build a development stack that was not just AI-enabled but truly AI-native? Like many developers, we started with familiar tools like MongoDB, but we quickly realized that traditional databases weren’t designed to handle the demands of AI-driven workflows. That’s when we turned to [Weaviate](https://weaviate.io/), an AI-native vector database.
+
+Unbody is an AI-native development stack designed to unify AI and product development into a single workflow. Weaviate fits perfectly into this vision, as [this blog post](/blog/unbody-weaviate) outlined. It became a core part of our stack, powering generative features and helping us deliver a flexible, AI-ready experience.
+
+Fast-forward to today: while Weaviate has been a strong foundation, we’ve encountered limitations in its generative capabilities as our needs evolved. Instead of moving away, we decided to expand it. By building a custom extension to its generative endpoint, we tailored it specifically for Unbody’s requirements.
+
+In this post, we’ll share how we extended Weaviate to create a more dynamic and adaptable generative API for our unique use case.
+
+## Challenge
+
+While Weaviate's [generative module (Retrieval Augmented Generation (RAG))](/developers/weaviate/configuration/modules#generative-model-integrations) initially met our user's needs, we encountered limitations as their requirements became more sophisticated. The [generative features](/developers/weaviate/search/generative) proved inflexible when dealing with evolving demands, especially for advanced scenarios.
+
+### 1. Static Configuration at Project Creation
+
+Weaviate's generative search module supported multiple generative providers, such as OpenAI, Cohere, PaLM, GPT4All, and others. However, at the project creation stage, users were required to lock in specific settings, including:
+
+- Model name
+- Temperature
+- Top-k, max tokens, and other related parameters
+
+While this setup worked well in the early stages, it presented significant challenges later. If a different generative provider or parameter was required, our users had to create a new project —a project in Unbody is an isolated data space— with the new settings. This meant deploying an entirely new Weaviate instance to accommodate the changes. This added friction when adapting to users' evolving needs and made the process inefficient.
+
+:::info
+This [feature was enabled](https://github.com/weaviate/weaviate/pull/6112) in Weaviate [`v.1.27.1`](https://github.com/weaviate/weaviate/releases/tag/v1.27.1)
+:::
+
+### 2. Limited Retrieval-Augmented Generation (RAG) Syntax
+
+Another major issue was the limited flexibility in Weaviate’s support for Retrieval-Augmented Generation (RAG). While simple prompts combined with data retrieval from the database worked in some cases, more complex interactions often required:
+
+- **Separation of System and User Prompts:** In scenarios where users interact with data, there’s often a need to distinctly separate the system’s instructions (system prompt) from the user’s input (user prompt). This becomes essential for use cases like chatbots or complex conversation flows. Without this, supporting advanced RAG functionalities or chat completions wasn’t feasible.
+- **Simplistic Template Engine:** The built-in template engine was relatively basic. It allowed users to insert string-typed fields directly from the objects they were executing RAG on. However, many users required a more powerful templating system that could handle advanced scenarios like dynamic data injection, context creation, or flexible template structures. There was no built-in way to filter or transform data, which limited our ability to create custom structures needed for more sophisticated workflows.
+
+### 3. Text-Only Input Limitation
+
+A third challenge arose when it came to input types. The generative method within Weaviate only accepted textual content as input, regardless of the model being used. This posed a limitation for our users' projects where they needed to use images as input. Being restricted to text input limited our users’ ability to fully leverage the capabilities of multi-modal models, preventing them from building more interactive and media-rich applications.
+
+## Solution
+
+The challenges we faced with Weaviate’s built-in generative features led us to decouple the generative module from the database to achieve increased flexibility.
+
+To address these needs, we developed a **Generative API** and created a custom module that integrates Weaviate into this API. This solution provides us with greater flexibility and scalability.
+
+This solution provides the ability to dynamically select models and providers, ensuring that Unbody projects are no longer tied to the static configurations set during project creation. This flexibility allows developers to switch models or adjust parameters on the fly, without having to redeploy or set up new projects.
+
+Additionally, the new generative module overcomes the limitations of text-only inputs, now supporting image-based prompts as well. This opens up multi-modal capabilities, enabling richer interactions and media-driven applications. We also introduced a more sophisticated templating engine that allows for advanced data manipulation and transformation, providing custom context creation and more complex workflows.
+
+With these improvements, our solution now offers:
+
+**Dynamic Model and Parameters**
+
+Users can switch between models like GPT-4 or Cohere without the need for redeployment, ensuring adaptability for a range of generative tasks. Additionally, it's possible to customize generative requests further with various parameters such as max tokens and temperature. This ensures more control over the generated content.
+
+```graphql
+{
+ Get {
+ TextBlock {
+ _additional {
+ generate(
+ groupedResult: {
+ task: """
+ prompt...
+ """
+ properties: ["text"]
+ options: {
+ model: "gpt-4o",
+ maxTokens: 1024,
+ temperature: 0
+ }
+ }
+ ) {
+ groupedResult
+ }
+ }
+ }
+ }
+}
+```
+
+**Multi-Modal Input Support**
+
+The module allows image inputs alongside text, unlocking the potential of models like GPT-4 Vision for richer, interactive applications.
+
+```graphql
+await unbody.get.imageBlock
+ .limit(2)
+ .generate.fromMany({
+ messages: [
+ {
+ content: 'Describe these images',
+ },
+ {
+ type: 'image',
+ content: '$..url',
+ },
+ ],
+ })
+ .exec()
+```
+
+**Enhanced Chat Completions**
+
+The system supports conversation flows by distinguishing between system and user roles, making it ideal for building interactive chatbots and retrieval-augmented generation (RAG) scenarios.
+
+```tsx
+await unbody.get.textBlock
+ .generate.fromMany({
+ messages: [
+ {
+ role: "system",
+ content: 'System prompt...',
+ },
+ ...history,
+ {
+ role: "user",
+ content: "user prompt"
+ }
+ ],
+ })
+ .exec()
+```
+
+**Advanced Data Transformation**
+
+Our Generative API integrates JQ, a powerful JSON processor, to enable sophisticated data transformation directly within API calls. This integration allows developers to dynamically filter, manipulate, and transform JSON data on-the-fly, eliminating the need for separate data processing steps. Using the `vars` option, query results can be transformed into JSON-serializable data and injected into message content, providing a streamlined workflow for complex data handling.
+
+```json
+vars: [
+ {
+ "formatter": "jq",
+ "name": "document",
+ "expression": "{ originalName, text }"
+ }
+]
+
+await unbody.get.googleDoc
+ .generate.fromOne({
+ messages: [
+ {
+ content: "prompt... \n DOCUMENT: {document}",
+ }
+ ],
+ })
+ .exec()
+```
+
+## What's Next
+
+As we continue to refine and expand our generative capabilities, we're focused on introducing several key features to enhance flexibility, performance, and functionality. Here's a glimpse of what's on our roadmap:
+
+### 1. Structured Output
+
+We plan to introduce structured output capabilities, allowing developers to enforce specific formats in model responses. By implementing output validation and schema support, we'll ensure that generated content follows predefined structures, making it seamless to integrate with existing systems and workflows.
+
+### 2. Support for Streaming
+
+To improve the responsiveness of our generative models, we are working on adding streaming support to both Unbody’s Generative API (REST) and the GraphQL API. This will enable users to receive partial outputs as they are generated, reducing latency and improving user experience, particularly for applications like real-time chat or large content generation tasks.
+
+### 3. Tool/Function Calling
+
+We’re exploring ways to integrate support for tool and function calling within the generative API. This feature would enable models to automatically trigger predefined functions or interact with external systems, enhancing their ability to handle complex workflows and dynamic tasks without manual intervention.
+
+### 4. Broader Model and Provider Support
+
+We plan to expand the range of supported providers and models, including fine-tuned models designed for specific tasks, such as coding. This will offer developers more options to tailor their generative models to specialized use cases, whether it’s code generation, legal document drafting, or other domain-specific applications.
+
+
+import WhatNext from '/_includes/what-next.mdx';
+
+
diff --git a/blog/2024-12-11-hybrid-search-ja/img/hero.png b/blog/2024-12-11-hybrid-search-ja/img/hero.png
new file mode 100644
index 0000000000..10d80c5425
Binary files /dev/null and b/blog/2024-12-11-hybrid-search-ja/img/hero.png differ
diff --git a/blog/2024-12-11-hybrid-search-ja/img/hybrid-search-results.jpg b/blog/2024-12-11-hybrid-search-ja/img/hybrid-search-results.jpg
new file mode 100644
index 0000000000..b03b0fec8e
Binary files /dev/null and b/blog/2024-12-11-hybrid-search-ja/img/hybrid-search-results.jpg differ
diff --git a/blog/2024-12-11-hybrid-search-ja/img/hybrid-search.jpg b/blog/2024-12-11-hybrid-search-ja/img/hybrid-search.jpg
new file mode 100644
index 0000000000..c5f6178f6a
Binary files /dev/null and b/blog/2024-12-11-hybrid-search-ja/img/hybrid-search.jpg differ
diff --git a/blog/2024-12-11-hybrid-search-ja/img/keyword-search-results.jpg b/blog/2024-12-11-hybrid-search-ja/img/keyword-search-results.jpg
new file mode 100644
index 0000000000..3cd242f78c
Binary files /dev/null and b/blog/2024-12-11-hybrid-search-ja/img/keyword-search-results.jpg differ
diff --git a/blog/2024-12-11-hybrid-search-ja/index.mdx b/blog/2024-12-11-hybrid-search-ja/index.mdx
new file mode 100644
index 0000000000..5652f63369
--- /dev/null
+++ b/blog/2024-12-11-hybrid-search-ja/index.mdx
@@ -0,0 +1,229 @@
+---
+title: 'ハイブリッド検索とは?'
+slug: hybrid-search-ja
+description: "ハイブリッド検索の説明とKAGOME_JAトークナイザーを使った実装"
+authors: [leonie]
+date: 2024-12-11
+tags: ['concepts']
+image: ./img/hero.png
+---
+
+![ハイブリッド検索](./img/hero.png)
+
+ハイブリッド検索は、複数の検索アルゴリズムを組み合わせることで、検索結果の精度や関連性を向上させる技術です。一般的に、ハイブリッド検索とはキーワード検索とベクトル検索を組み合わせた方法を指します。これら二つのアルゴリズムの強みを活用することで、ユーザーに効果的な検索体験を提供します。
+
+Weaviate[ベクトルデータベース](/blog/what-is-a-vector-database)におけるハイブリッド検索では、スパースベクトルとデンスベクトルの両方が利用されます。
+スパースベクトルにはトークナイザーが必要ですが、Weaviate `v1.28` では日本語テキスト向けに新しいトークナイザー`KAGOME_JA`が導入されました。
+
+このブログ記事では、ハイブリッド検索の基本を学び、日本語テキストで`KAGOME_JA`トークナイザーを使ったWeaviateのハイブリッド検索の方法を解説します。
+
+## ハイブリッド検索の説明
+
+Weaviateのハイブリッド検索は、デンスベクトルとスパースベクトルを統合して、それぞれの検索手法の利点を活かします。
+これら二つのベクトルは異なるアルゴリズムによって計算されます。
+
+![ハイブリッド検索](./img/hybrid-search.jpg)
+
+### キーワード検索
+
+キーワード検索にはスパースベクトルを使用します。
+スパースベクトルは、主にゼロ値が多く一部に非ゼロ値を持つ構造をしており、デンスベクトルは主に非ゼロ値で構成されています。
+スパース埋め込みは、[BM25](https://en.wikipedia.org/wiki/Okapi_BM25) や [SPLADE](https://arxiv.org/abs/2107.05720) のようなアルゴリズムから生成されます。
+Weaviateにおける現在のハイブリッド検索実装では、BM25/BM25Fが使用されています。
+
+スパース埋め込みを生成するためには、トークナイザーが必要です。
+Weaviateでは、日本語テキスト向けに以下の[3つのトークナイザーが利用可能](/developers/academy/py/tokenization/options)です。
+
+| トークナイザー | `TRIGAM` | `GSE` | `KAGOME_JA` (Weaviate `v1.28`で導入) |
+| :---- | :---- | :---- | :---- |
+| メリット | 辞書不要 部分一致する | 辞書にある単語をできるだけ 部分一致する | 辞書にある単語 不要な結果が出ない |
+| デメリット | 不自然な単語がある 出てくる単語が多数 | 英単語は1文字ずつに分割 不自然な単語がある 辞書が必要 | 単語中の部分一致はしない 辞書が必要
+*Source: [Jun Ohtani](https://x.com/johtani)*
+
+### ベクトル検索
+
+ベクトル検索にはデンスベクトルを使用します。
+デンス埋め込みは、[GloVe](https://text2vec.org/glove.html)や[Transformers](https://huggingface.co/docs/transformers/index)といった機械学習モデルから生成されます。これらのベクトルは情報が密に詰まっており、ほとんどが非ゼロ値で構成されています。ベクトルデータベースはこれらの埋め込みを保存し、二つのベクトル間の距離を計算します。この[距離メトリクス](/blog/distance-metrics-in-vector-search)により、二つのベクトル埋め込みがどれほど類似しているか、または異なるかがわかります。検索クエリもデータベクトルと同様にベクトルに変換され、その距離値によってベクトルの近さが決まります。
+
+### 融合アルゴリズム
+
+キーワード検索とベクトル検索の結果を単一のランキングリストに統合する方法はいくつかあります。Weaviate `v1.20`以降では、以下の2つのアルゴリズムが利用可能です:
+
+* `rankedFusion`
+* `relativeScoreFusion`
+
+これらの融合アルゴリズムについての詳細は、[こちらの記事](/blog/hybrid-search-fusion-algorithms#fusion-algorithms)で解説されています。
+
+さらに、alphaパラメータを用いてキーワード検索とベクトル検索の結果の重み付けを調整できます:
+
+* `alpha = 0`:キーワード検索のみ
+* `alpha = 1`:ベクトル検索のみ
+* `alpha = 0.5`:スパースとデンスのベクトルを均等に重み付け
+
+## ハイブリット検索のメリット
+
+ハイブリッド検索は、ベクトル検索の機能を活用しつつ、正確なキーワード一致も必要とする検索システムに理想的です。
+
+例えば、「春のドレス」というクエリを考えてみましょう。通常のキーワード検索やベクトル検索に比べて、ハイブリッド検索を使用する方がより良い結果を得られます。デンスベクトル表現では「春」が花柄や軽い素材を意味すると解釈され、キーワード検索では「ドレス」という単語に正確に一致します。
+このように、ハイブリッド検索はスパースベクトルとデンスベクトルの両方の利点を活かします。
+
+一般的に、デンスベクトルはクエリの文脈を理解するのに優れており、スパースベクトルはキーワード一致に優れています。
+
+## Weaviateのハイブリッド検索 実装
+
+これで、ハイブリッド検索の概要と日本語テキストへの応用がわかるようになったと思います。`KAGOME_JA`トークナイザーを活用して、Weaviateでさらに効果的な検索を実現しましょう!
+
+```py
+data = [
+ ["スポーツ用レギンス", "吸湿速乾性に優れた素材で作られたレギンス。ジムやヨガ、ランニングに最適です。"],
+ ["点線模様の長靴", "雨の日のおしゃれにぴったりの長靴。ユニークな点線模様が特徴です。"],
+ ["トレンチコート", "クラシックなデザインのトレンチコート。春や秋の軽い羽織りに最適な一着です。"],
+ ["ひまわりの模様のドレス", "明るいひまわり柄が夏らしい印象のドレス。軽やかで涼しい素材が魅力です。"],
+ ["ライトカーディガン", "肌寒い日の重ね着に便利なライトカーディガン。軽量で持ち運びにも便利です。"],
+ ["フローラルミニスカート", "春や夏にぴったりの花柄ミニスカート。華やかなデザインで女性らしさを引き立てます。"],
+ ["ピンクのスカート", "柔らかなピンク色がかわいらしいスカート。シンプルなデザインでコーディネートしやすいです。"],
+ ["カシミアセーター", "高級感のあるカシミア素材で作られたセーター。寒い冬に暖かさとスタイルを提供します。"],
+ ["ライトウールスカーフ", "秋や冬にぴったりのウールスカーフ。軽量で肌触りが良く、暖かさをプラスします。"],
+ ["ニットドレス", "柔らかく暖かい素材で作られたニットドレス。寒い季節のカジュアルスタイルに最適です。"],
+ ["ミディプリーツスカート", "エレガントなシルエットが特徴のプリーツスカート。どんなトップスとも相性抜群です。"],
+ ["花柄の傘", "雨の日を明るくしてくれる花柄デザインの傘。軽量で使いやすい構造です。"],
+ ["長袖の紺色のドレス", "落ち着いた紺色がエレガントな長袖ドレス。フォーマルな場にも最適です。"],
+ ["春の花柄ドレス", "春の装いにぴったりの鮮やかな花柄ドレス。柔らかい素材で着心地も抜群です。"],
+ ["ボア付きデニムジャケット", "冬の寒さから守るボア付きデニムジャケット。カジュアルスタイルにぴったりです。"],
+ ["レザーアンクルブーツ", "シックで洗練されたデザインのレザーアンクルブーツ。秋冬の装いにおすすめです。"],
+ ["防水ジャケット", "雨の日の外出を快適にする防水ジャケット。軽量で動きやすいデザインが魅力です。"],
+ ["シンプルな黒のタートルネック", "どんなスタイルにも合わせやすい黒のタートルネック。秋冬の重ね着に最適です。"],
+ ["シフォンブラウス", "軽やかで女性らしいデザインのシフォンブラウス。春や夏のフォーマルな場にもおすすめです。"]
+]
+```
+
+### 1. Weaviate データベース作成
+
+日本語のKAGOMEトークナイザーを使用したハイブリッド検索をWeaviateで利用するには、Weaviate`v1.28`以降のバージョンを使用していることを確認する必要があります。以下の手順で、[Dockerを使用してWeaviateベクトルデータベースのインスタンスをローカル環境にセットアップ](/developers/weaviate/installation/docker-compose)できます:
+
+```
+docker run -p 8080:8080 -p 50051:50051 -e ENABLE_TOKENIZER_KAGOME_JA='true' -e ENABLE_MODULES='text2vec-cohere' cr.weaviate.io/semitechnologies/weaviate:1.28.1
+```
+
+次は[Weaviate ClientのPythonライブラリ](/developers/weaviate/client-libraries)を準備します。バージョン4.9.6以上が必要です。
+
+```
+!pip install weaviate-client
+```
+
+### 2. Weaviateの接続情報をセットアップ
+
+次に、Weaviate Clientを初期化します。Weaviateに接続するための設定では、Cohereの埋め込みモデルを使用するため、CohereのAPIキーが必要です。
+
+```py
+import weaviate, os
+
+# Connect to your local Weaviate instance deployed with Docker
+client = weaviate.connect_to_local(
+ headers={
+ "X-COHERE-Api-Key": os.environ["COHERE_API_KEY"]
+ }
+)
+```
+
+### 3. データコレクションの定義
+
+次に、クラスを作成して[Schema](developers/weaviate/config-refs/schema)を定義します。クラスは、オブジェクトを格納するデータコレクションです。クラスのSchemaには、Cohereの多言語(日本語対応)埋め込みモデル `embed-multilingual-v3.0` を定義します。また、`KAGOME_JA`トークナイザーを有効化します。
+
+```py
+import weaviate.classes.config as wc
+
+client.collections.create(
+ name="ClothingItems",
+ vectorizer_config=wc.Configure.Vectorizer.text2vec_cohere(
+ model="embed-multilingual-v3.0", ),
+ properties=[
+ wc.Property(name="item",
+ data_type=wc.DataType.TEXT,
+ tokenization=wc.Tokenization.KAGOME_JA
+ ),
+ wc.Property(name="description",
+ data_type=wc.DataType.TEXT,
+ tokenization=wc.Tokenization.KAGOME_JA
+ ),
+ ]
+)
+```
+
+### 4. データ登録
+
+次に、WeaviateのClientを使用してデータを登録します。
+
+```py
+# Get a collection object for "ClothingItems"
+clothes = client.collections.get("ClothingItems")
+
+with clothes.batch.dynamic() as batch:
+ for d in data:
+ batch.add_object({
+ "item": d[0],
+ "description" : d[1],
+ })
+```
+
+### 5. クエリ方法
+
+これでベクトルデータベースのセットアップが完了し、クエリを実行できる状態になりました。
+
+まずは、シンプルなBM25クエリから始めましょう。
+
+```py
+response = clothes.query.bm25(
+ query="ドレス",
+ limit=3
+)
+
+for item in response.objects:
+ print(f"{item.properties['item']}: {item.properties['description']}")
+```
+
+結果は以下の通りです。ご覧のとおり、検索結果には「ドレス」というキーワードに一致するアイテムのみが含まれています。
+
+```
+長袖の紺色のドレス: 落ち着いた紺色がエレガントな長袖ドレス。フォーマルな場にも最適です。
+ニットドレス: 柔らかく暖かい素材で作られたニットドレス。寒い季節のカジュアルスタイルに最適です。
+ひまわりの模様のドレス: 明るいひまわり柄が夏らしい印象のドレス。軽やかで涼しい素材が魅力です。
+```
+
+![keyword-search-results](./img/keyword-search-results.jpg)
+
+では、前の例で説明したハイブリッド検索クエリを試してみましょう。
+
+```py
+response = clothes.query.hybrid(
+ query="春のドレス",
+ alpha=0.8,
+ limit=3
+)
+
+for item in response.objects:
+ print(f"{item.properties['item']}: {item.properties['description']}")
+```
+
+結果は以下の通りです。ご覧のとおり、検索結果には「ドレス」というキーワードに一致するアイテムと、春に適した花柄のアイテムの両方が含まれています。最後のアイテムは「ドレス」というキーワードには一致していませんが、それでも花柄のスカートが含まれています。これは、alpha値を0.8に設定しており、キーワード検索よりもベクトル検索を優先しているためです。
+
+```
+春の花柄ドレス: 春の装いにぴったりの鮮やかな花柄ドレス。柔らかい素材で着心地も抜群です。
+ひまわりの模様のドレス: 明るいひまわり柄が夏らしい印象のドレス。軽やかで涼しい素材が魅力です。
+フローラルミニスカート: 春や夏にぴったりの花柄ミニスカート。華やかなデザインで女性らしさを引き立てます。
+```
+
+![hybrid-search-results](./img/hybrid-search-results.jpg)
+
+
+## まとめ
+
+この記事では、ハイブリッド検索の概念について説明しました。Weaviateベクトルデータベースにおけるハイブリッド検索は、キーワード検索とベクトル検索を組み合わせたものです。これら二つの検索を統合することで、ベクトル検索の強力な機能を活用しながら、製品名やブランド名など特定のキーワードの正確な一致も必要とするユースケースで、より関連性の高い結果を得ることができます。
+
+日本語テキストに対して、Weaviateではキーワード検索およびハイブリッド検索のために3つの異なるトークナイザーを選択できるようになりました。上記のKAGOME\_JAトークナイザーを使用したハイブリッド検索の例について、コードは[このノートブック](https://github.com/weaviate/recipes/blob/main/weaviate-features/hybrid-search/hybrid_search_cohere_japanese.ipynb)で確認できます。
+
+ハイブリッド検索の詳細については、[ドキュメント](/developers/weaviate/api/graphql/search-operators#hybrid)をご覧ください!
+
+import WhatNext from '/_includes/what-next.mdx';
+
+
diff --git a/blog/2024-12-12-weaviate-1-28-release/_core-1-28-include.mdx b/blog/2024-12-12-weaviate-1-28-release/_core-1-28-include.mdx
new file mode 100644
index 0000000000..0e4ea82d48
--- /dev/null
+++ b/blog/2024-12-12-weaviate-1-28-release/_core-1-28-include.mdx
@@ -0,0 +1,147 @@
+Weaviate `1.28` brings enterprise-grade security, faster indexing, and improved multilingual support to your vector database. This release introduces role-based access control (RBAC), enhanced async indexing improvements, and native Japanese language support - making Weaviate more secure, faster, and globally accessible than ever.
+
+Here are the key highlights:
+
+Here are the release ⭐️*highlights*⭐️!
+
+![Weaviate 1.28](./img/hero.png)
+
+- [**Improved security 👤🔐: Role-based access control preview**](#role-based-access-control-rbac️)
+- [**Speedier, more robust 🏎️ async vector indexing**](#async-indexing-improvements)
+- [**Conflict resolution improvements 🤝 for deletions**](#conflict-resolution-improvements)
+- [**New Japanese 🇯🇵 `kagome_ja` tokenizer for keyword/hybrid search**](#new-japanese-tokenizer)
+- [**Groundwork for Keyword & Hybrid search 🔠 improvements: BlockMax WAND**](#blockmax-wand-experimental)
+- [**Improvements since 1.27**](#other-improvements)
+ - [**Voyage AI Multimodal model support**](#voyage-ai-multimodal-model-support)
+ - [**Weaviate Embeddings**](#weaviate-embeddings)
+
+## Role-based access control (RBAC)️
+
+Weaviate `1.28` introduces role-based access control (RBAC) as a technical preview, offering more granular control over user permissions.
+
+:::caution 🚧 Technical Preview
+Role-based access control (RBAC) is added `v1.28` as a **technical preview**. This means that the feature is still under development and may change in future releases, including potential breaking changes. **We do not recommend using this feature in production environments at this time.**
+
+
+We appreciate [your feedback](https://forum.weaviate.io/) on this feature.
+:::
+
+This powerful new feature is another big step that is built for our power and enterprise users. It allows you to provide granular sets of permissions through built-in and custom roles to control access to your Weaviate instance.
+
+With RBAC, you can:
+
+- Assign built-in roles (`admin`, `viewer`) to users for common access patterns
+- Create custom roles with fine-grained permissions for different resources
+- Assign multiple roles to users
+- Control access at various levels including collections, objects, backups, and cluster operations
+
+![Authorization flow as an image](./img/authz-diagram.png)
+
+For example, you could create roles like:
+
+A "data scientist" role with read-only access to specific collections
+An "app service" role that can only write to certain collections
+A "backup operator" role that can only manage backups
+A "devops" role with access to view cluster and node metadata
+
+Permissions can be as specific as needed - from broad access to all collections down to operations on individual collections. The system is additive, meaning if a user has multiple roles, they'll gain the combined permissions of all their roles.
+
+To learn more, check out our [Authentication](/developers/weaviate/configuration/authentication) and [Authorization and RBAC](/developers/weaviate/configuration/authorization) documentation, along with the [Roles](/developers/weaviate/configuration/roles) guide.
+
+While RBAC is currently in technical preview (meaning there might be changes before the final release), we're excited to get feedback from the community on this important security feature. For production environments, we recommend continuing to use the existing authentication and authorization mechanisms for now.
+
+## Async indexing improvements
+
+We've enhanced our [asynchronous vector indexing](/developers/weaviate/concepts/vector-index#asynchronous-indexing) feature in `v1.28`, making it more robust and capable than ever. While async indexing (introduced in `v1.22`) already helped speed up batch imports by handling vector indexing in the background, we've now expanded its capabilities and rebuilt its foundations.
+
+The async indexing system now handles all operations related to the vector index, including:
+- Single object imports
+- Object deletions
+- Object updates
+- All batch operations (as before)
+
+This results in a unified system that is more robust, and also more performant. One reason is that it reduces lock contention, which can slow down indexing operations if multiple requests are trying to update the index at the same time.
+
+Another change is that we've replaced the previous in-memory queue with an on-disk queue system. This architectural change reduces memory usage.
+
+This feature is particularly valuable when you're working with large datasets. While the object store updates immediately, vector indexing happens in the background, allowing your requests to complete faster.
+
+Want to try it out? Just set `ASYNC_INDEXING=true` in your environment variables. Weaviate Cloud users can enable it with a single click in the Cloud Console.
+
+As you can see, we are still making improvements to the async indexing feature. This is still marked as **experimental**, so we'd love to hear your feedback on how it's working for you.
+
+## Conflict resolution improvements
+
+When running Weaviate across multiple replicas, it's crucial to maintain [consistency](/developers/weaviate/concepts/replication-architecture/consistency) across the cluster. One common challenge is how to handle conflicts when objects are deleted, as a deleted object might be mistaken for an object that is yet to be created.
+
+`v1.28` introduces three deletion resolution strategies that you can choose from based on your needs:
+
+- `DeleteOnConflict`: The most conservative option that ensures deletions are always honored. Once an object is marked for deletion, it stays deleted across all replicas.
+- `TimeBasedResolution`: A timestamp-based approach where the most recent operation wins. For example, if an object is deleted and then recreated later, the recreation takes precedence. But if the deletion happened after the recreation attempt, the object stays deleted.
+- `NoAutomatedResolution`: The classic approach (and default setting) for those who prefer manual control over conflict resolution.
+
+These strategies work seamlessly with Weaviate's existing replication and repair features to ensure your data stays consistent across your cluster, while giving you control over how deletion conflicts should be handled.
+
+This improvement is particularly valuable for production deployments where data consistency is critical and manual intervention should be minimized.
+
+To use this feature, [set the deletion strategy at the collection level under replication settings](/developers/weaviate/manage-data/collections#replication-settings).
+
+### New Japanese tokenizer
+
+We 🫶 our community, and seeing Weaviate usage grow around the world. So we are very excited to show off this feature that expands our existing set of keyword tokenizers for Japanese text. Especially so as it was contributed to us by [Jun Ohtani](https://github.com/johtani), a Weaviate community user!
+
+This feature adds a new Japanese tokenizer, `kagome_ja`, to Weaviate's keyword and hybrid search capabilities. This tokenizer uses the [Kagome](https://github.com/ikawaha/kagome) library, a morphological analyzer for Japanese text, to break down Japanese text into individual tokens for indexing and searching.
+
+To use this tokenizer, set the `ENABLE_TOKENIZER_KAGOME_JA` [environment variable](/developers/weaviate/config-refs/env-vars) to `true`, and set the [tokenization method](/developers/weaviate/config-refs/schema#kagome_ja-tokenization-method) for the relevant properties to `kagome_ja`.
+
+## BlockMax WAND (Experimental)
+
+:::caution 🚧 Experimental Feature
+This iteration of BlockMax WAND is not for production use.
+
+
+Currently, this feature must be enabled before ingesting any data, as it requires a different form of an inverted index. For this experimental version, we do not support migrations. The disk format may change in future releases, which will require a re-index, meaning a potential re-ingestion of data.
+:::
+
+BM25 searches form the foundation of Weaviate's keyword and hybrid search capabilities, so we're always looking for further improvements.
+
+`v1.28` lays the groundwork for this by introducing an experimental implementation for the [BlockMax WAND](http://engineering.nyu.edu/~suel/papers/bmw.pdf) algorithm. This highly experimental feature aims to speed up BM25 and hybrid searches by more efficiently evaluating search results, using "blocks" of documents to reduce the number of calculations needed.
+
+While this feature isn't ready for production use, we're including it in 1.28 for those interested in testing and providing feedback. You can try it out by enabling two environment variables:
+
+- `USE_INVERTED_SEARCHABLE: true`: Enables an experimental disk format optimized for BlockMax WAND
+- `USE_BLOCKMAX_WAND: true`: Activates the BlockMax WAND algorithm for queries
+
+We're excited about the potential performance improvements this could bring to keyword and hybrid search in future releases.
+
+## Other improvements
+
+### Voyage AI Multimodal model support
+
+![Voyage AI embeddings integration schematic](../../developers/weaviate/model-providers/_includes/integration_voyageai_embedding.png)
+
+Weaviate recently added support for [Voyage AI's Multimodal model](https://blog.voyageai.com/2024/11/12/voyage-multimodal-3/), a powerful model that combines text and image embeddings for multimodal search.
+
+This model integration was added to Weaviate recently, with `v1.27.8`, `v1.26.12` and `v1.25.28`. You can now use the [Voyage AI model integration](/developers/weaviate/model-providers/voyageai) to build AI-driven applications that can search for objects based on both text and image data.
+
+Note: Client support and official documentation will follow very soon
+
+### Weaviate Embeddings
+
+![Weaviate Embeddings](https://weaviate.io/img/site/weaviate-embedding-image.svg)
+
+In case you missed it, we recently introduced a new service called [Weaviate Embeddings](/developers/wcs/embeddings). This service provides secure, scalable embedding generation as a fully managed service, tightly integrated with Weaviate Cloud instances.
+
+This allows you to generate text embeddings using single authentication, and benefits of unified billing with your Weaviate Cloud account. Read more about it in our [announcement blog post](/blog/introducing-weaviate-embeddings).
+
+## Summary
+
+Ready to Get Started?
+
+Enjoy the new features and improvements in Weaviate `1.28`. The release is available open-source as always [on GitHub](https://github.com/weaviate/weaviate/releases/tag/v1.28.0), and will be available for new Sandboxes on [Weaviate Cloud](https://console.weaviate.cloud/) very shortly.
+
+For those of you upgrading a self-hosted version, please check the [migration guide](/developers/weaviate/more-resources/migration#general-upgrade-instructions) for detailed instructions.
+
+It will be available for Serverless clusters on Weaviate Cloud soon as well.
+
+Thanks for reading, see you next time 👋!
diff --git a/blog/2024-12-12-weaviate-1-28-release/img/authz-diagram.png b/blog/2024-12-12-weaviate-1-28-release/img/authz-diagram.png
new file mode 100644
index 0000000000..234db9b706
Binary files /dev/null and b/blog/2024-12-12-weaviate-1-28-release/img/authz-diagram.png differ
diff --git a/blog/2024-12-12-weaviate-1-28-release/img/hero.png b/blog/2024-12-12-weaviate-1-28-release/img/hero.png
new file mode 100644
index 0000000000..f10d7efcb1
Binary files /dev/null and b/blog/2024-12-12-weaviate-1-28-release/img/hero.png differ
diff --git a/blog/2024-12-12-weaviate-1-28-release/index.mdx b/blog/2024-12-12-weaviate-1-28-release/index.mdx
new file mode 100644
index 0000000000..c5cc7eb79c
--- /dev/null
+++ b/blog/2024-12-12-weaviate-1-28-release/index.mdx
@@ -0,0 +1,18 @@
+---
+title: Weaviate 1.28 Release
+slug: weaviate-1-28-release
+authors: [jp]
+date: 2024-12-12
+image: ./img/hero.png
+tags: ['release', 'engineering']
+description: "Read about a preview of role-based access control, improved indexing, Weaviate Embeddings, new Voyage Multimodal model and a Japanese BM25 tokenizer!"
+
+---
+
+import Core128 from './_core-1-28-include.mdx';
+
+
+
+import WhatsNext from '/_includes/what-next.mdx'
+
+
diff --git a/blog/2024-12-17-hardening-oss/img/harden.jpg b/blog/2024-12-17-hardening-oss/img/harden.jpg
new file mode 100644
index 0000000000..92b8bfa079
Binary files /dev/null and b/blog/2024-12-17-hardening-oss/img/harden.jpg differ
diff --git a/blog/2024-12-17-hardening-oss/index.mdx b/blog/2024-12-17-hardening-oss/index.mdx
new file mode 100644
index 0000000000..90435f6e33
--- /dev/null
+++ b/blog/2024-12-17-hardening-oss/index.mdx
@@ -0,0 +1,41 @@
+---
+title: 'Hardening your Weaviate OSS Installation'
+slug: hardening-oss
+description: "Moving your Weaviate OSS instance into production? Check out our handy guide to securing your Weaviate database in the cloud, including all the helpful modules we’ve added to make it as easy as possible to keep your vectors safe."
+authors: [spiros]
+date: 2024-12-17
+tags: [how-to]
+image: ./img/harden.jpg
+---
+
+![Secure Weaviate](./img/harden.jpg)
+
+At Weaviate, we take the protection of your data seriously. Our information security measures continuously evolve and adapt to threats we see out there in the wilds of the internet.
+An area we are seeing more and more within our community is successful Weaviate projects that have been put into production using our [Open Source product](https://github.com/weaviate/weaviate). With Weaviate Open Source you’re in control of your data, the Weaviate environment and the infrastructure it’s hosted on. In fact, we’ve built Weaviate with a range of [modules](/developers/weaviate/configuration/modules) that can make your transition from hackathon to startup to customer-ready easy and safe.
+Managing a Weaviate installation as part of a wider application at scale can be challenging and will introduce risks that are not faced by small projects or experiments. That’s why today we’re launching our [OSS Hardening Guide.](/img/site/Security-Checklist.pdf) This document contains hints and tips to use the built-in tools that are part of Weaviate and its hosting infrastructure in order to maximise the confidentiality, integrity and availability of your installation.
+
+## Risk-based thinking
+Not every Weaviate installation needs the same security investment as ‘Fort Knox’ but it is difficult to know how much security is appropriate when deploying in production.
+Behind the scenes in the Weaviate security team, we strongly believe that the best security and investment decisions are reached through risk-based thinking. The first step to hardening your Weaviate OSS installation should be to consider the risks that you face; is the data that you’ll be storing sensitive in any way? are you subject to any industry or national regulation? what about your end users - will they expect a certain level of security?
+Once you have determined your risks, it’s time to see what mitigations you can implement in order to manage them. Head to our OSS Hardening Guide to understand what is available within Weaviate. While measures such as [Role-based Access Control](/developers/weaviate/configuration/authorization), automatic [Backup](/developers/weaviate/configuration/backups) capability and [Replication](/developers/weaviate/configuration/replication) can help you design a set of easy-to-implement controls to manage access and availability, you will also want to consider encryption both for data in transit and in storage.
+Remember the principal of defense-in-depth: always configure multiple security controls in case one fails.
+
+:::info
+All modern information security frameworks require some form of risk assessment, so you're already ahead once your customers start asking for evidence of that practice!
+:::
+
+## Testing before production
+It’s a good idea to test your Weaviate security measures to make sure that they are correctly configured before you launch. In particular, we recommend that you use an online SSL checker to make sure your encryption in transit is working, and that you test that you can restore your backups should the worst happen.
+Now is a good time to go back to your risks and mitigations, and assure yourself that the measures you’re implemented are actually managing the risk - for instance, if you’ve used replication to make sure your service can survive if a node fails, have you tested to verify that’s the case?
+If this service is especially critical, you may wish to engage the service of a third party penetration testing company to assist you with your assurance. If you choose to do this, we recommend ensuring your tester is CREST certified.
+
+## Ongoing Maintenance
+Sadly, information security is not a ‘set and forget kind’ of job. There are a number of regular activities that we recommend are scheduled and operated as often as you think necessary. Remember that risk-based thinking should be practiced whenever a major change takes place in your environment, whether that’s the rollout of a new major version, the introduction of a new feature, expanding into a different customer base or reaching a company growth milestone. Involving a diverse range of thinkers can improve your identification, understanding and treatment of risk as well.
+We release new versions of Weaviate all the time, and strongly advise OSS users to stay within one major release of our latest version if possible. These releases will contain security fixes and improvements, as well as exciting new features. We will also patch any third party vulnerabilities that are identified by the open source community and our security partners.
+
+## Stay safe out there!
+In summary, going from development to production is an incredible journey, and our OSS Hardening Guide, your risk-based thinking coupled with some testing, it can be a safe and secure one as well.
+
+import WhatNext from '/_includes/what-next.mdx';
+
+
diff --git a/blog/2024-12-18-recap-london-roadshow/img/hero.png b/blog/2024-12-18-recap-london-roadshow/img/hero.png
new file mode 100644
index 0000000000..d9d3d36866
Binary files /dev/null and b/blog/2024-12-18-recap-london-roadshow/img/hero.png differ
diff --git a/blog/2024-12-18-recap-london-roadshow/index.mdx b/blog/2024-12-18-recap-london-roadshow/index.mdx
new file mode 100644
index 0000000000..bdfb83acf0
--- /dev/null
+++ b/blog/2024-12-18-recap-london-roadshow/index.mdx
@@ -0,0 +1,115 @@
+---
+title: 'Recap: London Roadshow'
+slug: recap-london-roadshow
+description: "The Weaviate team was in London last month, where the presentations were packed with insights from the field, real-world use cases, and inspiration for what’s next in AI. From streamlining development to tackling challenges in nuclear energy, here’s a recap of the standout moments."
+authors: [staci]
+date: 2024-12-18
+tags: []
+image: ./img/hero.png
+---
+
+![AI in Prod London](./img/hero.png)
+
+---
+
+**AI in Action: Lessons from the Real World**
+
+The Weaviate team was in London last month, where the presentations were packed with insights from the field, real-world use cases, and inspiration for what’s next in AI. From streamlining development to tackling challenges in nuclear energy, here’s a recap of the standout moments.
+
+---
+
+### **1. Mastering Vector Databases**
+
+Our CTO & Co-Founder, Etienne Dilocker dove deep into two emerging use cases for large-scale projects:
+
+- **E-commerce search** handling **1-10 billion embeddings** with sub-second queries, powered by HNSW indexing and smart optimizations.
+- **Email RAG** using a multi-tenant setup to process hundreds of thousands of smaller datasets with sub-second speed.
+
+Both examples proved there’s no one-size-fits-all solution—your approach should depend on the data and the problem you’re solving.
+
+---
+
+### **2. OLIVER’s AI Sandbox and Experimentation**
+
+Andy Hoare, Senior Business Analyst, from the marketing agency **OLIVER** shared how the company scaled from 500 to 5,000 people in 10 years, while making AI experimentation a core part of their strategy. Their **AI Sandbox** has **1,250+ users**, generating **10,000 images a month** and powering **10 million chat interactions**.
+
+He spoke about the following projects:
+
+- **Slipstream** is changing how clients and agencies work together by empowering clients to create more comprehensive and efficient briefs and allowing agencies to work smarter and faster.
+- **C2PA** is a transparency initiative for AI-generated content that enables OLIVER to maintain a duty of care to its clients and audiences and build trust as a content creator.
+- **Share of Model,** with Jellyfish, measures brand perception within AI models.
+
+Andy’s advice? Experiment often, fail fast, and find great tech partners to support your growth.
+
+
+
+
+
+---
+
+### **3. AI Meets Nuclear Decommissioning**
+
+Willem van Asperen and Derek Van Gelderen from **PA Consulting** shared their innovative use of AI in the nuclear sector. At **Sellafield Limited**, they’re solving business-critical challenges, like:
+
+- A wave of retirements shrinking their workforce by **20%** in the next five years.
+- Document reviews that used to take **12 months**.
+
+Their solutions included:
+
+- **SLComply.ai**, which automates compliance and slashes administrative time by **90%**.
+- **DANI**, a GenAI-powered assistant that processes documents in minutes instead of months.
+- **Genie**, a system that connects LLMs, databases, and operational tools to make workflows seamless.
+
+PA Consulting’s use of Weaviate to scale its document and compliance tools highlights the power of vector search and AI in transforming workflows. By integrating Weaviate, they’re achieving greater efficiency, accuracy, and scalability all while remaining user centric.
+
+
+
+
+
+---
+
+### **4. Building AI-Native Software with Unbody.io**
+
+Amir Huieh, CEO & Co-Founder of **unbody.io**, shared his journey from running a computer vision and NLP to founding Unbody, an AI-first startup. He broke down the difference between **AI-native** apps (where AI is the core) and **AI-enhanced** ones (where AI is just a bonus).
+
+Amir showed how integrating **Weaviate** helped his team streamline their development stack, cutting out unnecessary layers. Demos included:
+
+- A **healthcare platform** that matches patients with therapists.
+- An **AI blogging tool** that turns videos into full articles.
+- A **desktop organizer** for simplifying digital clutter.
+
+And the big news? **Unbody is going open source!** Amir invited the community to [jump in and contribute](http://unbody.io/blog/going-oss).
+
+
+
+
+
+---
+
+### **Key Takeaways**
+
+Across every session, a few key themes stood out:
+
+- **Simplify where you can**: Merging AI and traditional stacks saves time and headaches.
+- **Experiment boldly**: Whether it’s a sandbox or open source, trying new things (and failing fast) is the way to grow.
+- **AI is solving real problems**: From nuclear compliance to blogging tools, the impact is tangible and exciting.
+
+The future of AI is collaborative, creative, and just getting started. Let’s keep building, learning, and sharing!
+
+import WhatNext from '/_includes/what-next.mdx';
+
+
diff --git a/developers/academy/js/starter_text_data/101_setup_weaviate/index.mdx b/developers/academy/js/starter_text_data/101_setup_weaviate/index.mdx
index 37ab0d72f4..95c249881b 100644
--- a/developers/academy/js/starter_text_data/101_setup_weaviate/index.mdx
+++ b/developers/academy/js/starter_text_data/101_setup_weaviate/index.mdx
@@ -4,8 +4,6 @@ description: "Learn to set up Weaviate for text data projects, including environ
---
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-## Overview
-
:::warning TODO
diff --git a/developers/academy/theory/101_hello_weaviate/15_overview_vectors.mdx b/developers/academy/theory/101_hello_weaviate/15_overview_vectors.mdx
index c31103f073..a481262728 100644
--- a/developers/academy/theory/101_hello_weaviate/15_overview_vectors.mdx
+++ b/developers/academy/theory/101_hello_weaviate/15_overview_vectors.mdx
@@ -10,7 +10,7 @@ import ReactPlayer from 'react-player/lazy'
-We've covered that Weaviate is a vector database, and that a vector search is similarity-based. But, what is a vector?
+We've covered that Weaviate is a [vector database](/blog/what-is-a-vector-database), and that a vector search is similarity-based. But, what is a vector?
A vector in this context is just a series of numbers like `[1, 0]` or `[0.513, 0.155, 0.983, ..., 0.001, 0.932]`. Vectors like these are used to capture meaning.
diff --git a/developers/academy/theory/150_search_types/_index.md b/developers/academy/theory/150_search_types/_index.md
new file mode 100644
index 0000000000..59fc513592
--- /dev/null
+++ b/developers/academy/theory/150_search_types/_index.md
@@ -0,0 +1,27 @@
+---
+title: 150 Search Types
+description: An introduction to different search types in Weaviate
+sidebar_position: 150 # Like a subject number (e.g. CS101)
+---
+
+## Unit overview
+
+### Prerequisites
+
+- None
+
+## Learning objectives
+
+import LearningGoalsExp from '/src/components/Academy/learningGoalsExp.mdx';
+
+
+
+import LearningGoals from '/src/components/Academy/learningGoals.jsx';
+
+
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/academy/theory/150_search_types/_notes.md b/developers/academy/theory/150_search_types/_notes.md
new file mode 100644
index 0000000000..2528b659ac
--- /dev/null
+++ b/developers/academy/theory/150_search_types/_notes.md
@@ -0,0 +1,52 @@
+### Vector embeddings
+
+Vector embeddings are numerical representations of objects in a high-dimensional space. These vectors are generated by a model trained to represent the objects in a way that captures their semantic meaning.
+
+A vector embedding may look like:
+
+```json
+[0, 1, 0, 0, 1]
+```
+
+or like:
+
+```json
+[0.158, 0.011, 0.840, 0.577, 0.897, ..., 0.144]
+```
+
+A vector embedding may be typically between 300 and 2048 dimensions, although the exact number varies depending on the model. The longer the vector, the more information it can capture about the object. On the other hand, they require more resources to store, index and search.
+
+Vector embeddings that are produced by the same model are said to be "compatible", or that they are "in the same vector space".
+
+:::tip Analog: Vector embeddings as language
+An intuitive way to think of vector embeddings is as a language. Just as two people must speak the same language to communicate, two vectors must be in the same vector space to be compared. If two vectors are not in the same vector space, their values are meaningless when compared, even if they are the same length.
+:::
+
+## Vector distance
+
+Vector distance indicates how close, or far apart, two vectors are in high-dimensional space. This is a measure of the object's "semantic" similarity to the query, based on their vector embeddings.
+
+In a simple example, consider colors "SkyBlue", "LightSteelBlue", and "DarkOrange". These colors can be represented as vectors in a 3D space, with the RGB values as the vector components.
+
+| Color | Vector (R,G,B) |
+|----------------|-----------------|
+| SkyBlue | (135, 206, 235) |
+| LightSteelBlue | (176, 196, 222) |
+| DarkOrange | (255, 140, 0) |
+
+The vectors for "SkyBlue" and "LightSteelBlue" are much closer to each other than either is to "DarkOrange", reflecting their similarity as light blue colors versus an orange color.
+
+If you search a vector database containing vectors for "SkyBlue" and "DarkOrange" with a query vector for "LightSteelBlue", the search would return "SkyBlue" as the closest match.
+
+Vector search for far more complex objects, such as text, images, or audio, is based on the same principle. The vectors are generated by a model trained to represent the objects in a high-dimensional space, where the distance between vectors reflects the similarity between the objects.
+
+### Distance and search quality
+
+All compatible vectors are similar to some degree search will have some "top" search results, even if the query is not similar to any objects in the dataset.
+
+If you search a vector database containing vectors for colors "Red", "Crimson" and "LightCoral" with a query vector for "SkyBlue", the search will still return a result (e.g. "Red"), even if it is not semantically similar to the query. The search is simply returning the closest match, even if it is not a good match in the absolute sense.
+
+To ensure that the search results are meaningful, consider the following strategies:
+
+- **Use a threshold**: Set a minimum similarity score for the results. This will exclude results that are not similar enough to the query.
+- **Apply filters**: Use [filters](../filtering.md) to exclude results based on other criteria, such as metadata or properties.
diff --git a/developers/contributor-guide/weaviate-core/parsing-cross-refs.md b/developers/contributor-guide/weaviate-core/parsing-cross-refs.md
index 9740428adc..57c18de754 100644
--- a/developers/contributor-guide/weaviate-core/parsing-cross-refs.md
+++ b/developers/contributor-guide/weaviate-core/parsing-cross-refs.md
@@ -6,8 +6,6 @@ image: og/contributor-guide/weaviate-core.jpg
# tags: ['contributor-guide']
---
-## Overview
-
Objects are parsed twice:
* First, closest to disk, immediately after reading-in the byte blob, all
@@ -76,4 +74,4 @@ import ContributorGuideMoreResources from '/_includes/more-resources-contributor
import DocsFeedback from '/_includes/docs-feedback.mdx';
-
\ No newline at end of file
+
diff --git a/developers/wcs/embeddings/index.md b/developers/wcs/embeddings/index.md
index 05e72294e9..c87e5334c9 100644
--- a/developers/wcs/embeddings/index.md
+++ b/developers/wcs/embeddings/index.md
@@ -4,8 +4,6 @@ sidebar_position: 200
image: og/wcs/user_guides.jpg
---
-## Overview
-
Weaviate Embeddings provides secure, scalable embedding generation as a fully managed service.
Weaviate Embeddings integrates with Weaviate Cloud instances to generate, store, and search embeddings without managing infrastructure.
diff --git a/developers/wcs/sandbox.mdx b/developers/wcs/sandbox.mdx
index 6f7f0df687..ef5a025b82 100644
--- a/developers/wcs/sandbox.mdx
+++ b/developers/wcs/sandbox.mdx
@@ -81,7 +81,7 @@ To export your collection definitions, follow these steps:
text={PyCodeV3}
startMarker="# START ReadAllCollections"
endMarker="# END ReadAllCollections"
- language="py"
+ language="pyv3"
/>
@@ -90,7 +90,7 @@ To export your collection definitions, follow these steps:
text={TSCode}
startMarker="// START ReadAllCollections"
endMarker="// END ReadAllCollections"
- language="ts"
+ language="tsv2"
/>
@@ -157,7 +157,7 @@ Refer to the exported schema to recreate the property definitions.
text={PyCodeV3}
startMarker="# START CreateCollectionWithProperties"
endMarker="# END CreateCollectionWithProperties"
- language="py"
+ language="pyv3"
/>
@@ -166,7 +166,7 @@ Refer to the exported schema to recreate the property definitions.
text={TSCode}
startMarker="// START CreateCollectionWithProperties"
endMarker="// END CreateCollectionWithProperties"
- language="ts"
+ language="tsv2"
/>
@@ -189,4 +189,4 @@ Sandboxes can be extended three times. Each extension is for an additional 14 da
import SupportAndTrouble from '/_includes/wcs/support-and-troubleshoot.mdx';
-
\ No newline at end of file
+
diff --git a/developers/weaviate/api/graphql/additional-operators.md b/developers/weaviate/api/graphql/additional-operators.md
index 700295fd45..7c6c8aa352 100644
--- a/developers/weaviate/api/graphql/additional-operators.md
+++ b/developers/weaviate/api/graphql/additional-operators.md
@@ -179,7 +179,7 @@ Sample client code:
text={AutocutPyCodeV3}
startMarker="# START Autocut Python"
endMarker="# END Autocut Python"
- language="py"
+ language="pyv3"
/>
@@ -188,7 +188,7 @@ Sample client code:
text={AutocutTSCode}
startMarker="// START Autocut"
endMarker="// END Autocut"
- language="ts"
+ language="tsv2"
/>
@@ -341,7 +341,7 @@ The sort function takes either an object, or an array of objects, that describe
text={PyCodeV3}
startMarker="# START Sorting Python"
endMarker="# END Sorting Python"
- language="py"
+ language="pyv3"
/>
@@ -350,7 +350,7 @@ The sort function takes either an object, or an array of objects, that describe
text={TSCode}
startMarker="// START Sorting"
endMarker="// END Sorting"
- language="ts"
+ language="tsv2"
/>
@@ -442,7 +442,7 @@ To sort by more than one property, pass an array of { `path`, `order` } objects
text={PyCodeV3}
startMarker="# START MultiplePropSorting Python"
endMarker="# END MultiplePropSorting Python"
- language="py"
+ language="pyv3"
/>
@@ -451,7 +451,7 @@ To sort by more than one property, pass an array of { `path`, `order` } objects
text={TSCode}
startMarker="// START MultiplePropSorting"
endMarker="// END MultiplePropSorting"
- language="ts"
+ language="tsv2"
/>
@@ -518,7 +518,7 @@ To sort with metadata, add an underscore to the property name.
text={PyCodeV3}
startMarker="# START AdditionalPropSorting Python"
endMarker="# END AdditionalPropSorting Python"
- language="py"
+ language="pyv3"
/>
@@ -527,7 +527,7 @@ To sort with metadata, add an underscore to the property name.
text={TSCode}
startMarker="// START AdditionalPropSorting"
endMarker="// END AdditionalPropSorting"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/api/graphql/additional-properties.md b/developers/weaviate/api/graphql/additional-properties.md
index 01fcd38119..9e079e91dc 100644
--- a/developers/weaviate/api/graphql/additional-properties.md
+++ b/developers/weaviate/api/graphql/additional-properties.md
@@ -11,8 +11,6 @@ import TryEduDemo from '/_includes/try-on-edu-demo.mdx';
-## Overview
-
Various 'additional properties', also called 'metadata', can be retrieved in queries.
### Available additional properties
diff --git a/developers/weaviate/api/graphql/aggregate.md b/developers/weaviate/api/graphql/aggregate.md
index ae007cd3ed..f0050179a2 100644
--- a/developers/weaviate/api/graphql/aggregate.md
+++ b/developers/weaviate/api/graphql/aggregate.md
@@ -146,7 +146,7 @@ As such, this `Aggregate` query will retrieve the total object count in a class.
### groupBy argument
-You can use a groupBy argument to get meta information about groups of data objects.
+You can use a groupBy argument to get meta information about groups of data objects, from those matching a query. The groups can be based on a property of the data objects.
import GroupbyLimitations from '/_includes/groupby-limitations.mdx';
diff --git a/developers/weaviate/api/graphql/explore.md b/developers/weaviate/api/graphql/explore.md
index 37477e2b73..592e039e7c 100644
--- a/developers/weaviate/api/graphql/explore.md
+++ b/developers/weaviate/api/graphql/explore.md
@@ -14,8 +14,6 @@ As a result, `Explore` is not available on [Weaviate Cloud (WCD)](https://consol
:::
-## Overview
-
Use `Explore` to perform vector searches across multiple collections. Note that `Explore` is currently not available in the gRPC API.
### Requirements
diff --git a/developers/weaviate/api/graphql/filters.md b/developers/weaviate/api/graphql/filters.md
index 60cfd14a31..768767f4f6 100644
--- a/developers/weaviate/api/graphql/filters.md
+++ b/developers/weaviate/api/graphql/filters.md
@@ -11,8 +11,6 @@ import TryEduDemo from '/_includes/try-on-edu-demo.mdx';
-## Overview
-
Conditional filters may be added to queries such as [`Object-level`](./get.md) and [`Aggregate`](./aggregate.md) queries, as well as [batch deletion](../../manage-data/delete.mdx#delete-multiple-objects). The operator used for filtering is also called a `where` filter.
A filter may consist of one or more conditions, which are combined using the `And` or `Or` operators. Each condition consists of a property path, an operator, and a value.
diff --git a/developers/weaviate/api/graphql/get.md b/developers/weaviate/api/graphql/get.md
index fcba908368..412fcd8981 100644
--- a/developers/weaviate/api/graphql/get.md
+++ b/developers/weaviate/api/graphql/get.md
@@ -12,8 +12,6 @@ import TryEduDemo from '/_includes/try-on-edu-demo.mdx';
-## Overview
-
This page covers object-level query functions. They are collectively referred to as `Get` queries within.
diff --git a/developers/weaviate/api/graphql/search-operators.md b/developers/weaviate/api/graphql/search-operators.md
index 1c1612b58e..ada5384d6e 100644
--- a/developers/weaviate/api/graphql/search-operators.md
+++ b/developers/weaviate/api/graphql/search-operators.md
@@ -11,9 +11,6 @@ import TryEduDemo from '/_includes/try-on-edu-demo.mdx';
-
-## Overview
-
This page covers the search operators that can be used in queries, such as vector search operators (`nearText`, `nearVector`, `nearObject`, etc), keyword search operator (`bm25`), hybrid search operator (`hybrid`).
Only one search operator can be added to queries on the collection level.
diff --git a/developers/weaviate/api/grpc.md b/developers/weaviate/api/grpc.md
index d29a4bf65b..e9d3d58c54 100644
--- a/developers/weaviate/api/grpc.md
+++ b/developers/weaviate/api/grpc.md
@@ -6,8 +6,6 @@ image: og/docs/api.jpg
# tags: ['schema']
---
-## Overview
-
Starting with Weaviate `v1.19.0`, a gRPC interface has been progressively added to Weaviate. gRPC is a high-performance, open-source universal RPC framework that is contract-based and can be used in any environment. It is based on HTTP/2 and Protocol Buffers, and is therefore very fast and efficient.
As of Weaviate `v1.23.7`, the gRPC interface is considered stable. The latest (`v4`) Weaviate Python client library supports gRPC, and the other client libraries will follow.
diff --git a/developers/weaviate/api/index.md b/developers/weaviate/api/index.md
index d0452180f6..7e7b82c53d 100644
--- a/developers/weaviate/api/index.md
+++ b/developers/weaviate/api/index.md
@@ -16,8 +16,6 @@ image: og/docs/api.jpg
- [Concepts: Interface](../concepts/interface.md)
:::
-## Overview
-
This section includes references for the RESTful and GraphQL APIs. RESTful API end-points can be used to add data or obtain information about the Weaviate instance, and the GraphQL interface to retrieve data.
### References - Search
diff --git a/developers/weaviate/client-libraries/index.md b/developers/weaviate/client-libraries/index.md
index bf23228dd7..e2d2551a6c 100644
--- a/developers/weaviate/client-libraries/index.md
+++ b/developers/weaviate/client-libraries/index.md
@@ -6,9 +6,6 @@ image: og/docs/client-libraries.jpg
# tags: ['client libraries', 'cli']
---
-
-## Overview
-
You can interact with Weaviate by using the GraphQL or RESTful API directly, or with one of the available client libraries.
Currently, Weaviate supports:
diff --git a/developers/weaviate/client-libraries/python/index.md b/developers/weaviate/client-libraries/python/index.md
index 306eb5ba83..fb73865bea 100644
--- a/developers/weaviate/client-libraries/python/index.md
+++ b/developers/weaviate/client-libraries/python/index.md
@@ -12,8 +12,6 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
import PythonCode from '!!raw-loader!/_includes/code/client-libraries/python_v4.py';
import BatchVectorCode from '!!raw-loader!/_includes/code/howto/manage-data.import.py';
-## Overview
-
This page broadly covers the Weaviate Python client (`v4` release). For usage information not specific to the Python client, such as code examples, see the relevant pages in the [Weaviate documentation](../../index.md). Some frequently used sections are [listed here](#code-examples--resources) for convenience.
:::info Inline documentation
diff --git a/developers/weaviate/client-libraries/python/python_v3.md b/developers/weaviate/client-libraries/python/python_v3.md
index 36a9cb429a..8e50610395 100644
--- a/developers/weaviate/client-libraries/python/python_v3.md
+++ b/developers/weaviate/client-libraries/python/python_v3.md
@@ -5,11 +5,11 @@ image: og/docs/client-libraries.jpg
# tags: ['python', 'client library']
---
-:::info `v3` client is deprecated
+:::caution `v3` client is deprecated
This document relates to the legacy `v3` client and API.
-Starting in December 2024, the `v4` [client installations](https://pypi.org/project/weaviate-client/) will no longer include the `v3` API (i.e. the `weaviate.Client` class). This will help us to provide the best developer experience for you, support for the latest features, and clearly separate the two.
+From `v4.10.0`, the [Weaviate Python client installations](https://pypi.org/project/weaviate-client/) no longer include the `v3` API (i.e. the `weaviate.Client` class). This separation helps us to provide the best developer experience for you and provide support for the latest Weaviate features.
The `v3` client will continue to get critical security updates and bugfixes for the foreseeable future, but it will not support any new features.
diff --git a/developers/weaviate/client-libraries/python/v3_v4_migration.md b/developers/weaviate/client-libraries/python/v3_v4_migration.md
index ecd1ad7231..263a97da01 100644
--- a/developers/weaviate/client-libraries/python/v3_v4_migration.md
+++ b/developers/weaviate/client-libraries/python/v3_v4_migration.md
@@ -32,8 +32,9 @@ To go from `v3` to `v4`, you must
pip install -U weaviate-client
```
-2. Upgrade Weaviate to a compatible version
- - Weaviate `1.23.7` is required for `v4.4.1`. Generally, we recommend you use the latest versions of Weaviate and the client.
+2. Upgrade Weaviate to a compatible version. Each minor Python client version is closely tied to a minor Weaviate version.
+ - For example, Weaviate `v1.27.x` were developed together with `v4.9.x` of the Python client.
+ - Generally, we recommend you use the latest versions of Weaviate and the client. You can find the version compatibility matrix in the [release notes](../../release-notes/index.md#weaviate-core-and-client-releases)
3. Make sure a port for gRPC is open to Weaviate.
- The default port is 50051.
@@ -193,7 +194,7 @@ import ManageDataCodeV3 from '!!raw-loader!/_includes/code/howto/manage-data.rea
text={ManageDataCodeV3}
startMarker="# ReadObject START"
endMarker="# ReadObject END"
- language="py"
+ language="pyv3"
/>
@@ -246,7 +247,7 @@ import SearchSimilarityCodeV3 from '!!raw-loader!/_includes/code/howto/search.si
text={SearchSimilarityCodeV3}
startMarker="# GetNearTextPython"
endMarker="# END GetNearTextPython"
- language="python"
+ language="pyv3"
/>
diff --git a/developers/weaviate/concepts/indexing.md b/developers/weaviate/concepts/indexing.md
index 0d40b229ed..dc288c9367 100644
--- a/developers/weaviate/concepts/indexing.md
+++ b/developers/weaviate/concepts/indexing.md
@@ -7,7 +7,7 @@ image: og/docs/concepts.jpg
Weaviate supports several types of indexes.
-1. **Vector indexes** - a vector index (e.g. HNSW or flat) is used to serve all vector-search queries.
+1. **[Vector indexes](./vector-index.md)** - a vector index (e.g. HNSW or flat) is used to serve all vector-search queries.
1. **Inverted indexes** - inverted indexes enable BM25 queries, or speed up filtering.
You can configure indexes in Weaviate per collection.
diff --git a/developers/weaviate/concepts/replication-architecture/consistency.md b/developers/weaviate/concepts/replication-architecture/consistency.md
index 4b7b8cb298..8ac241ad84 100644
--- a/developers/weaviate/concepts/replication-architecture/consistency.md
+++ b/developers/weaviate/concepts/replication-architecture/consistency.md
@@ -151,9 +151,61 @@ For speed, data operations on a tenant occur independently of any tenant activit
## Repairs
-When Weaviate detects inconsistent data across replicas, it attempts to repair the out of sync data.
+In distributed systems like Weaviate, object replicas can become inconsistent due to any number of reasons - network issues, node failures, or timing conflicts. When Weaviate detects inconsistent data across replicas, it attempts to repair the out of sync data.
-Starting in v1.26, Weaviate adds [async replication](#async-replication) to proactively detect inconsistencies. In earlier versions, Weaviate uses a [repair-on-read](#repair-on-read) strategy to repair inconsistencies at read time.
+Weaviate uses [async replication](#async-replication), [deletion resolution](#deletion-resolution-strategies) and [repair-on-read](#repair-on-read) strategies to maintain consistency across replicas.
+
+### Async replication
+
+:::info Added in `v1.26`
+:::
+
+Async replication runs in the background. It uses a Merkle tree algorithm to monitor and compare the state of nodes within a cluster. If the algorithm identifies an inconsistency, it resyncs the data on the inconsistent node.
+
+Repair-on-read works well with one or two isolated repairs. Async replication is effective in situations where there are many inconsistencies. For example, if an offline node misses a series of updates, async replication quickly restores consistency when the node returns to service.
+
+Async replication supplements the repair-on-read mechanism. If a node becomes inconsistent between sync checks, the repair-on-read mechanism catches the problem at read time.
+
+To activate async replication, set `asyncEnabled` to true in the [`replicationConfig` section of your collection definition](../../manage-data/collections.mdx#replication-settings).
+
+### Deletion resolution strategies
+
+:::info Added in `v1.28`
+:::
+
+When an object is present on some replicas but not others, this can be because a creation has not yet been propagated to all replicas, or because a deletion has not yet been propagated to all replicas. It is important to distinguish between these two cases.
+
+Deletion resolution works alongside async replication and repair-on-read to ensure consistent handling of deleted objects across the cluster. For each collection, you can set one of the following deletion resolution strategies:
+
+- `NoAutomatedResolution`
+- `DeleteOnConflict`
+- `TimeBasedResolution`
+
+#### `NoAutomatedResolution`
+
+This is the default setting, and the only setting available in Weaviate versions prior to `v1.28`. In this mode, Weaviate does not treat deletion conflicts as a special case. If an object is present on some replicas but not others, Weaviate may potentially restore the object on the replicas where it is missing.
+
+#### `DeleteOnConflict`
+
+A deletion conflict in `deleteOnConflict` is always resolved by deleting the object on all replicas.
+
+To do so, Weaviate updates an object as a deleted object on a replica upon receiving a deletion request, rather than removing all traces of the object.
+
+#### `TimeBasedResolution`
+
+A deletion conflict in `timeBasedResolution` is resolved based on the timestamp of the deletion request, in comparison to any subsequent updates to the object such as a creation or an update.
+
+If the deletion request has a timestamp that is later than the timestamp of any subsequent updates, the object is deleted on all replicas. If the deletion request has a timestamp that is earlier than the timestamp of any subsequent updates, the later updates are applied to all replicas.
+
+For example:
+- If an object is deleted at timestamp 100 and then recreated at timestamp 90, the recreation wins
+- If an object is deleted at timestamp 100 and then recreated at timestamp 110, the deletion wins
+
+#### Choosing a strategy
+
+- Use `NoAutomatedResolution` when you want maximum control and handle conflicts manually
+- Use `DeleteOnConflict` when you want to ensure deletions are always honored
+- Use `TimeBasedResolution` when you want the most recent operation to take precedence
### Repair-on-read
@@ -178,19 +230,6 @@ The read repair process also depends on the read and write consistency levels us
Repairs only happen on read, so they do not create a lot of background overhead. While nodes are in an inconsistent state, read operations with consistency level of `ONE` may return stale data.
-### Async replication
-
-:::info Added in `v1.26`
-:::
-
-Async replication runs in the background. It uses a Merkle tree algorithm to monitor and compare the state of nodes within a cluster. If the algorithm identifies an inconsistency, it resyncs the data on the inconsistent node.
-
-Repair-on-read works well with one or two isolated repairs. Async replication is effective in situations where there are many inconsistencies. For example, if an offline node misses a series of updates, async replication quickly restores consistency when the node returns to service.
-
-Async replication supplements the repair-on-read mechanism. If a node becomes inconsistent between sync checks, the repair-on-read mechanism catches the problem at read time.
-
-To activate async replication, set `asyncEnabled` to true in the [`replicationConfig` section of your collection definition](../../manage-data/collections.mdx#replication-settings).
-
## Related pages
- [API References | GraphQL | Get | Consistency Levels](../../api/graphql/get.md#consistency-levels)
- [API References | REST | Objects](/developers/weaviate/api/rest#tag/objects)
diff --git a/developers/weaviate/concepts/search/hybrid-search.md b/developers/weaviate/concepts/search/hybrid-search.md
new file mode 100644
index 0000000000..8c3f1ebbb2
--- /dev/null
+++ b/developers/weaviate/concepts/search/hybrid-search.md
@@ -0,0 +1,191 @@
+---
+title: Hybrid search
+sidebar_position: 60
+image: og/docs/concepts.jpg
+# tags: ['concepts', 'search', 'hybrid search', 'vector search', 'keyword search', 'bm25']
+---
+
+Hybrid search combines [vector search](./vector-search.md) and [keyword search (BM25)](./keyword-search.md) to leverage the strengths of both approaches. This takes into account results' semantic similarity (vector search) and exact keyword relevance (BM25), providing more comprehensive search results.
+
+A hybrid search runs both search types in parallel and combines their scores to produce a final ranking of results. This makes it versatile and robust, suitable for a wide range of search use cases.
+
+## How Hybrid Search Works
+
+In Weaviate, a hybrid search performs the following steps:
+
+1. Executes both searches in parallel:
+ - Vector search to find semantically similar content
+ - BM25 search to find keyword matches
+1. Combines the normalized scores using a [fusion method](#fusion-method)
+1. Returns results ranked by the combined scores
+
+```mermaid
+%%{init: {
+ 'theme': 'base',
+ 'themeVariables': {
+ 'primaryColor': '#4a5568',
+ 'primaryTextColor': '#2d3748',
+ 'primaryBorderColor': '#718096',
+ 'lineColor': '#718096',
+ 'secondaryColor': '#f7fafc',
+ 'tertiaryColor': '#edf2f7',
+ 'fontFamily': 'Inter, system-ui, sans-serif',
+ 'fontSize': '14px',
+ 'lineHeight': '1.4',
+ 'nodeBorder': '1px',
+ 'mainBkg': '#ffffff',
+ 'clusterBkg': '#f8fafc'
+ }
+}}%%
+
+flowchart LR
+ %% Style definitions
+ classDef systemBox fill:#f8fafc,stroke:#3182ce,stroke-width:1.5px,color:#2d3748,font-weight:bold
+ classDef processBox fill:#f8fafc,stroke:gray,stroke-width:0.5px,color:#2d3748,font-weight:bold
+ classDef component fill:white,stroke:#a0aec0,stroke-width:1px,color:#2d3748
+
+ %% Main flow
+ query["🔍 Query"] --> split["Query Processing"]
+
+ %% Parallel processes
+ split --> vector["Vector Search"]
+ split --> bm25["BM25 Search"]
+
+ %% Results combination
+ vector --> fusion["Score Fusion"]
+ bm25 --> fusion
+ fusion --> results["📑 Ranked Results"]
+
+ %% Parameters box
+ subgraph params["Search Parameters"]
+ alpha["Alpha: Balance between\nvector and keyword scores"]
+ fusion_type["Fusion Strategy:\nrankedFusion or relativeScoreFusion"]
+ end
+
+ params --> fusion
+
+ %% Apply styles
+ class query,split,vector,bm25,fusion,results component
+ class params processBox
+ class alpha,fusion_type component
+
+ %% Linkstyle for curved edges
+ linkStyle default stroke:#718096,stroke-width:3px,fill:none,background-color:white
+```
+
+### Fusion Strategies
+
+Weaviate supports two strategies (`relativeScoreFusion` and `rankedFusion`) for combining vector and keyword search scores:
+
+With `relativeScoreFusion` (default from `v1.24`), each object is scored by *normalizing* the metrics output by the vector search and keyword search respectively. The highest value becomes 1, the lowest value becomes 0, and others end up in between according to this scale. The total score is thus calculated by a scaled sum of normalized vector distance and normalized BM25 score.
+
+With `rankedFusion` (default for `v1.23` and lower), each object is scored according to its position in the results for the given search, starting from the highest score for the top-ranked object and decreasing down the order. The total score is calculated by adding these rank-based scores from the vector and keyword searches.
+
+Generally, `relativeScoreFusion` might be a a good choice, which is why it is the default.
+
+The main reason is that `relativeScoreFusion` retains more information from the original searches than `rankedFusion`, which only retains the rankings. More generally we believe that the nuances captured in the vector and keyword search metrics are more likely to be reflected in rankings produced by `relativeScoreFusion`.
+
+We include a concrete example of the two fusion strategies below.
+
+### Fusion Example
+
+Let's say that a search returns **five objects** with **document id** (from 0 to 4), and **scores** from **keyword** and **vector search**, **ordered by score**:
+
+
+
+
Search Type
+
(id): score
(id): score
(id): score
(id): score
(id): score
+
+
+
Keyword
+
(1): 5
(0): 2.6
(2): 2.3
(4): 0.2
(3): 0.09
+
+
+
Vector
+
(2): 0.6
(4): 0.598
(0): 0.596
(1): 0.594
(3): 0.009
+
+
+
+#### Ranked Fusion
+
+The score depends on the rank of each result and is computed according to `1/(RANK + 60)`, resulting in:
+
+
+
+
Search Type
+
(id): score
(id): score
(id): score
(id): score
(id): score
+
+
+
Keyword
+
(1): 0.0154
(0): 0.0160
(2): 0.0161
(4): 0.0167
(3): 0.0166
+
+
+
Vector
+
(2): 0.016502
(4): 0.016502
(0): 0.016503
(1): 0.016503
(3): 0.016666
+
+
+
+As you can see, the results for each rank are identical, regardless of the input score.
+
+#### Relative Score Fusion
+
+In relative score fusion, the largest score is set to 1 and the lowest to 0, and all entries in-between are scaled according to their **relative distance** to the **maximum** and **minimum values**.
+
+
+
+
Search Type
+
(id): score
(id): score
(id): score
(id): score
(id): score
+
+
+
Keyword
+
(1): 1.0
(0): 0.511
(2): 0.450
(4): 0.022
(3): 0.0
+
+
+
Vector
+
(2): 1.0
(4): 0.996
(0): 0.993
(1): 0.986
(3): 0.0
+
+
+
+The scores therefore reflect the relative distribution of the original scores. For example, the vector search scores of the first 4 documents were almost identical, which is still the case for the normalized scores.
+
+#### Comparison
+
+For the vector search, the scores for the top 4 objects (**IDs 2, 4, 0, 1**) were almost identical, and all of them were good results. While for the keyword search, one object (**ID 1**) was much better than the rest.
+
+This is captured in the final result of `relativeScoreFusion`, which identified the object **ID 1** the top result. This is justified because this document was the best result in the keyword search with a big gap to the next-best score and in the top group of vector search.
+
+In contrast, for `rankedFusion`, the object **ID 2** is the top result, closely followed by objects **ID 1** and **ID 0**.
+
+### Alpha Parameter
+
+The alpha value determines the weight of the vector search results in the final hybrid search results. The alpha value can range from 0 to 1:
+
+- `alpha = 0.5` (default): Equal weight to both searches
+- `alpha > 0.5`: More weight to vector search
+- `alpha < 0.5`: More weight to keyword search
+
+## Search Thresholds
+
+Hybrid search supports a maximum vector distance threshold through the `max vector distance` parameter.
+
+This threshold applies only to the vector search component of the hybrid search, allowing you to filter out results that are too dissimilar in vector space, regardless of their keyword search scores.
+
+For example, consider a maximum vector distance of `0.3`. This means objects with a vector distance higher than `0.3` will be excluded from the hybrid search results, even if they have high keyword search scores.
+
+This can be useful when you want to ensure semantic similarity meets a minimum standard while still taking advantage of keyword matching.
+
+There is no equivalent threshold parameter for the keyword (BM25) component of hybrid search or the final combined scores.
+
+This is because BM25 scores are not normalized or bounded like vector distances, making a universal threshold less meaningful.
+
+## Further resources
+
+- [How-to: Search](../../search/index.md)
+- [How-to: Hybrid search](../../search/hybrid.md)
+- [Blog: A deep dive into Weaviate's fusion algorithms](/blog/hybrid-search-fusion-algorithms)
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/weaviate/concepts/search/index.md b/developers/weaviate/concepts/search/index.md
index 4ccaddf61c..3cdd52dcf2 100644
--- a/developers/weaviate/concepts/search/index.md
+++ b/developers/weaviate/concepts/search/index.md
@@ -192,9 +192,13 @@ For example:
+:::info Read more
+See the [keyword search](./keyword-search.md) page for more details on how keyword search works in Weaviate.
+:::
+
#### Vector Search
-Similarity-based search using [vector embeddings](#vector-embeddings). This method compares vector representations of the query against those of the stored objects to find the closest matches, based on a predefined [distance metric](../../config-refs/distances.md).
+Similarity-based search using vector embeddings. This method compares vector representations of the query against those of the stored objects to find the closest matches, based on a predefined [distance metric](../../config-refs/distances.md).
In Weaviate, you can perform vector searches in multiple ways. You can search for similar objects based on [a text input](../../search/similarity.md#search-with-text), [a vector input](../../search/similarity.md#search-with-a-vector), or [an exist object](../../search/similarity.md#search-with-an-existing-object). You can even search for similar objects with other modalities such as [with images](../../search/image.md).
@@ -240,9 +244,13 @@ For example:
+:::info Read more
+See the [vector search](./vector-search.md) page for more details on how vector search works in Weaviate.
+:::
+
#### Hybrid Search
-Combines vector and keyword search to leverage the strengths of both approaches. Both searches are carried out and the results are combined using the selected [hybrid fusion method](#hybrid-fusion-method) and the given [alpha](#alpha-hybrid-search) value.
+Combines vector and keyword search to leverage the strengths of both approaches. Both searches are carried out and the results are combined using the selected parameters, such as the hybrid fusion method and the alpha value.
Hybrid Search: Example
@@ -287,6 +295,10 @@ For example:
+:::info Read more
+See the [hybrid search](./hybrid-search.md) page for more details on how hybrid search works in Weaviate.
+:::
+
### Retrieval: Unordered
Queries can be formulated without any ranking mechanisms.
@@ -360,31 +372,22 @@ The search results consist of `{"description": "black bear"}` and `{"description
```
-## Glossary
-
-#### Vector embeddings
-
-A vector embedding captures semantic meaning of an object in a vector space. It consists of a set of numbers that represent the object's features. Vector embeddings are generated by a vectorizer model, which is a machine learning model that is trained for this purpose.
-
-#### BM25F algorithm
-
-The BM25 algorithm ranks matching documents according to their relevance to a given search query. At a high level, the BM25 algorithm uses the count of query terms in the document (term frequency) against the overall frequency of the term in the dataset (inverse document frequency) to calculate a relevance score.
-
-The BM25F variant extends the BM25 algorithm to support multiple fields in the search index.
-
-#### Hybrid fusion method
-
-Weaviate uses a hybrid fusion method to combine the results of vector and keyword searches. The method determines how the results of the two searches are combined to produce the final search results.
+## Search scores and metrics
-There are two algorithms available: `relativeScoreFusion` (default from `1.24`) and `rankedFusion` (default until `1.24`).
+Weaviate uses a variety of metrics to rank search results of a given query. The following metrics are used in Weaviate:
-With `rankedFusion`, each object is scored according to its position in the results for the given search, starting from the highest score for the top-ranked object and decreasing down the order. The total score is calculated by adding these rank-based scores from the vector and keyword searches.
+- Vector distance: A vector distance measure between the query and the object.
+- BM25F score: A keyword search score calculated using the BM25F algorithm.
+- Hybrid score: A combined score from vector and keyword searches.
-With `relativeScoreFusion`, each object is scored by *normalizing* the metrics output by the vector search and keyword search respectively. The highest value becomes 1, the lowest value becomes 0, and others end up in between according to this scale. The total score is thus calculated by a scaled sum of normalized vector similarity and normalized BM25 score.
+## Further resources
-#### Alpha (hybrid search)
+For more details, see the respective pages for:
+- [Concepts: Vector search](./vector-search.md)
+- [Concepts: Keyword search](./keyword-search.md)
+- [Concepts: Hybrid search](./hybrid-search.md).
-The alpha value determines the weight of the vector search results in the final hybrid search results. The alpha value ranges from 0 to 1, where 0 means only keyword search results are considered, and 1 means only vector search results are considered.
+For code snippets on how to use these search types, see the [How-to: search](../search/index.md) page.
## Questions and feedback
diff --git a/developers/weaviate/concepts/search/keyword-search.md b/developers/weaviate/concepts/search/keyword-search.md
new file mode 100644
index 0000000000..a8f64e6822
--- /dev/null
+++ b/developers/weaviate/concepts/search/keyword-search.md
@@ -0,0 +1,182 @@
+---
+title: Keyword Search (BM25)
+sidebar_position: 40
+image: og/docs/concepts.jpg
+# tags: ['concepts', 'search', 'keyword search', 'bm25', 'keyword']
+---
+
+Keyword search is an exact matching-based search using "tokens", or strings of characters.
+
+It uses the BM25 algorithm, which ranks matching documents according to their relevance to a given search query. At a high level, the BM25 algorithm uses the count of query terms in the document (term frequency) against the overall frequency of the term in the dataset (inverse document frequency) to calculate a relevance score.
+
+More specifically, Weaviate uses the BM25F algorithm, which extends BM25 to support using multiple fields in the search index.
+
+A keyword search determines the best matches based on the matches of exact tokens contained in the query against those of the stored objects. As a result, a keyword search is a good choice when exact matches (e.g. exact domain-specific language, precise categories or tags) are important. For example:
+
+- Searching for documents containing specific technical terms
+- Identifying articles by precise keywords or tags
+
+This differs from vector search, which finds semantically similar content even when the exact words don't match. You might use keyword search when precision is more important than finding related concepts.
+
+## Keyword search in Weaviate
+
+In Weaviate, a keyword search will return the objects best matching the query, as measured by [BM25F](https://en.wikipedia.org/wiki/Okapi_BM25) "score".
+
+:::info BM25F vs BM25
+The "F" in BM25F stands for "field", indicating that it is a field-specific version of BM25. This allows for different weights for different fields, or properties, of the objects.
+
+
+In Weaviate, they are used interchangeably, as the BM25F algorithm is used to calculate the scores for keyword searches. Here we will refer to it generally as BM25.
+:::
+
+A BM25 score is calculated based on the frequency of the query tokens in the object properties, as well as the length of the object properties and the query.
+
+When an input string such as `"A red Nike shoe"` is provided as the query, Weaviate will:
+
+1. [Tokenize](#tokenization) the input (e.g. to `["a", "red", "nike", "shoe"]`)
+2. Remove any [stopwords](#stopwords) (e.g. remove `a`, to produce `["red", "nike", "shoe"]`)
+3. Determine the BM25 scores against [selected properties](#selected-properties) of the database objects, based on the [BM25 parameters](#bm25-parameters) and any [property boosting](#property-boosting).
+4. Return the objects with the highest BM25 scores as the search results
+
+### Tokenization
+
+Tokenization for keyword searches refers to how each source text is split up into individual "tokens" to be compared and matched.
+
+The default tokenization method is `word`.
+
+Other tokenization methods such as `whitespace`, `lowercase`, and `field` are available, as well as specialized ones such as `GSE` or `kagome_kr` for other languages ([more details](../../config-refs/schema/index.md#tokenization)).
+
+Set the tokenization option [in the inverted index configuration](../../search/bm25.md#set-tokenization) for a collection.
+
+:::info Tokenization in different contexts
+
+The term "tokenization" is used in other contexts such as vectorization, or language generation. Note that each of these typically use different tokenizers to meet different requirements. This results in different sets of tokens, even from the same input text.
+
+:::
+
+### Stopwords
+
+Stopwords are words that are filtered out before processing text.
+
+Weaviate uses configurable stopwords in calculating the BM25 score. Any tokens that are contained in the stopword list will be ignored from the BM25 score calculation.
+
+See the [reference page](../../config-refs/schema/index.md#stopwords-stopword-lists) for more details.
+
+### BM25 Parameters
+
+BM25 is a scoring function used to rank documents based on the query terms appearing in them. It has two main parameters that control its behavior:
+
+- `k1` (default: 1.2): Controls term frequency saturation. Higher values mean that multiple occurrences of a term continue to increase the score more
+- `b` (default: 0.75): Controls document length normalization. Values closer to 1 mean more normalization for document length
+
+```mermaid
+%%{init: {
+ 'theme': 'base',
+ 'themeVariables': {
+ 'primaryColor': '#4a5568',
+ 'primaryTextColor': '#2d3748',
+ 'primaryBorderColor': '#718096',
+ 'lineColor': '#718096',
+ 'secondaryColor': '#f7fafc',
+ 'tertiaryColor': '#edf2f7',
+ 'fontFamily': 'Inter, system-ui, sans-serif',
+ 'fontSize': '14px',
+ 'lineHeight': '1.4',
+ 'nodeBorder': '1px',
+ 'mainBkg': '#ffffff',
+ 'clusterBkg': '#f8fafc'
+ }
+}}%%
+
+flowchart LR
+ %% Style definitions
+ classDef systemBox fill:#f8fafc,stroke:#3182ce,stroke-width:1.5px,color:#2d3748,font-weight:bold
+ classDef processBox fill:#f8fafc,stroke:gray,stroke-width:0.5px,color:#2d3748,font-weight:bold
+ classDef component fill:white,stroke:#a0aec0,stroke-width:1px,color:#2d3748
+ classDef paramBox fill:white,stroke:#3182ce,stroke-width:1px,color:#2d3748
+
+ %% Main flow
+ query["🔍 Query Text"] --> tokenize["⚡ Tokenization"]
+ tokenize --> stopwords["🚫 Stopword\nRemoval"]
+ stopwords --> scoring["📊 BM25\nScoring"]
+
+ %% Parameters section
+ subgraph params["Parameter Configuration"]
+ direction TB
+ k1["k1: Term Frequency\nSaturation Control"]
+ b["b: Document Length\nNormalization"]
+ end
+
+ params --> scoring
+ scoring --> results["📑 Ranked\nResults"]
+
+ %% Apply styles
+ class query,tokenize,stopwords,scoring,results component
+ class params processBox
+ class k1,b paramBox
+
+ %% Linkstyle for curved edges
+ linkStyle default stroke:#718096,stroke-width:3px,fill:none,background-color:white
+```
+
+Set custom `k1` and `b` values [for a collection](../../manage-data/collections.mdx#set-inverted-index-parameters).
+
+
+
+### Selected properties
+
+A BM25 query can optionally specify which object properties are to be included in the score calculations.
+
+By default, all `text` properties are included in a BM25 calculation. There are two ways to vary this:
+
+- In the collection configuration, [set `indexSearchable` for a property to `false`](../../manage-data/collections.mdx#property-level-settings). This property will then be ignored in all BM25 searches.
+- [Specify which properties to search at query time](../../search/bm25.md#search-on-selected-properties-only). This will only apply for that particular query.
+
+### Property Boosting
+
+Property boosting allows a query apply different weights to different properties when calculating the final BM25 score.
+
+This is useful when certain properties are more important for search than others.
+
+For example, when searching an e-commerce catalog, you could boost the title property and its categories over the product description.
+
+
+
+[Set the property weights](../../search/bm25.md#use-weights-to-boost-properties) at query time.
+
+## Combining with Vector Search
+
+Keyword search can be combined with vector search in Weaviate to perform a hybrid search. This allows you to leverage both:
+- Exact matching capabilities of keyword search
+- Semantic understanding of vector search
+
+See [Hybrid Search](./hybrid-search.md) for more information.
+
+## Notes and Best Practices
+
+Here are some key considerations when using keyword search:
+
+1. **Tokenization Choice**
+ - Choose based on your data and search requirements. For example, use `word` tokenization for natural language text, but consider `field` for URLs or email addresses that need exact matching as a whole.
+ - For multilingual content, consider specialized tokenizers like `GSE` for Chinese/Japanese or `kagome_kr` for Korean
+ - Consider special characters and case sensitivity needs
+ - Test your tokenization choice with subsets of your data and queries to ensure it handles special characters and case sensitivity as expected. You could perform these experiments with vectorization disabled to save resources/costs, as the two processes are independent.
+
+2. **Performance Optimization**
+ - Index only the properties you need for search
+ - Consider combining keyword search with vector search (i.e. perform a [hybrid search](./hybrid-search.md)) as a starting point, especially where you cannot anticipate users' behavior
+
+3. **Query Optimization**
+ - Consider boosting properties that are more important for search (e.g. title, category) over others (e.g. description)
+ - Only modify `k1` and `b` values if you have a good reason to do so, as the defaults are generally well-suited for most use cases
+
+### Further resources
+
+- [How-to: Search](../../search/index.md)
+- [How-to: Keyword search](../../search/bm25.md)
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/weaviate/concepts/search/vector-search.md b/developers/weaviate/concepts/search/vector-search.md
new file mode 100644
index 0000000000..20142e8035
--- /dev/null
+++ b/developers/weaviate/concepts/search/vector-search.md
@@ -0,0 +1,290 @@
+---
+title: Vector Search
+sidebar_position: 20
+image: og/docs/concepts.jpg
+# tags: ['concepts', 'search', 'vector search', 'vector']
+---
+
+Vector search is a similarity-based search using vector embeddings, or vectors. Vector search also referred to as "semantic search" due to its ability to find semantically similar objects.
+
+A vector embedding captures semantic meaning of an object in a vector space. It consists of a set of numbers that represent the object's features. Vector embeddings are generated by a vectorizer model, which is a machine learning model that is trained for this purpose.
+
+A vector search compares [vectors of the stored objects](#object-vectors) against the [query vector(s)](#query-vectors) to find the closest matches, before returning the top `n` results.
+
+:::tip An introduction to vector search
+New to vector search? Check out our blog, ["Vector Search Explained"](/blog/vector-search-explained) for an introduction to vector search concepts and use cases.
+:::
+
+## Object vectors
+
+For vector search, each object must have representative vector embeddings.
+
+The model used to generate vectors is called a vectorizer model, or an embedding model.
+
+A user can populate Weaviate with objects and their vectors in one of two ways:
+
+- Use Weaviate's [vectorizer model provider integrations](#model-provider-integration) to generate vectors
+- [Provide vectors directly](#bring-your-own-vector) to Weaviate
+
+### Model provider integration
+
+Weaviate provides [first-party integrations with popular vectorizer model providers](../../model-providers/index.md) such as [Cohere](../../model-providers/cohere/index.md), [Ollama](../../model-providers/ollama/index.md), [OpenAI](../../model-providers/openai/index.md), and more.
+
+In this workflow, the user can [configure a vectorizer for a collection](../../manage-data/collections.mdx#specify-a-vectorizer) and Weaviate will automatically generate vectors as needed, such as when inserting objects or performing searches.
+
+```mermaid
+%%{init: {
+ 'theme': 'base',
+ 'themeVariables': {
+ 'primaryColor': '#4a5568',
+ 'primaryTextColor': '#2d3748',
+ 'primaryBorderColor': '#718096',
+ 'lineColor': '#718096',
+ 'secondaryColor': '#f7fafc',
+ 'tertiaryColor': '#edf2f7',
+ 'fontFamily': 'Inter, system-ui, sans-serif',
+ 'fontSize': '14px',
+ 'lineHeight': '1.4',
+ 'nodeBorder': '1px',
+ 'mainBkg': '#ffffff',
+ 'clusterBkg': '#f8fafc'
+ }
+}}%%
+
+flowchart LR
+ %% Style definitions
+ classDef systemBox fill:#f8fafc,stroke:#3182ce,stroke-width:1.5px,color:#2d3748,font-weight:bold
+ classDef weaviateBox fill:#f8fafc,stroke:gray,stroke-width:0.5px,color:#2d3748,font-weight:bold
+ classDef cloudBox fill:white,stroke:#48bb78,stroke-width:2px,color:#553c9a,font-weight:bold
+ classDef providerBox fill:#f8fafc,stroke:gray,stroke-width:0.5px,color:#2d3748,font-weight:bold
+ classDef component fill:white,stroke:#a0aec0,stroke-width:1px,color:#2d3748
+ classDef edgeLabel fill:white,stroke:#e2e8f0,stroke-width:1px,color:#4a5568
+
+ %% Provider section
+ subgraph provider["Model provider"]
+ inference["🤖 Inference API /\nLocal model"]
+ end
+
+ %% Weaviate section
+ subgraph weaviate["Weaviate"]
+ vectorizer["🔌 Model provider\nintegration"]
+ core["💾 Data &\nvector store"]
+ end
+
+ %% User System
+ subgraph user["🖥️ User System"]
+ data["📄 Data"]
+ end
+
+ %% Connections with curved edges
+ data --->|"1. Insert objects\n(no vector)"| core
+ core --->|"2. Request\nvector"| vectorizer
+ vectorizer --->|"3. Request\nvector"| inference
+ inference --->|"4. Vector"| vectorizer
+ vectorizer --->|"5. Vector"| core
+
+ %% Apply styles
+ class user systemBox
+ class weaviate weaviateBox
+ class cloud cloudBox
+ class provider providerBox
+ class data,core,vectorizer,inference component
+
+ %% Linkstyle for curved edges
+ linkStyle default stroke:#718096,stroke-width:3px,fill:none,background-color:white
+```
+
+This integration abstracts the vector generation process from the user, allowing the user to focus on building applications and performing searches without worrying about the vector generation process.
+
+:::info Vectorizer configuration is immutable
+
+Once it is set, the vectorizer cannot be changed for a collection. This ensures that the vectors are generated consistently and stay compatible. If you need to change the vectorizer, you must create a new collection with the desired vectorizer, and [migrate the data to the new collection](../../manage-data/migrate.mdx).
+
+:::
+
+#### Manual vectors when vectorizer is configured
+
+Even when a vectorizer model is configured for a collection, a user can still provide vectors directly when inserting objects or performing a query. In this case, Weaviate will use the provided vector instead of generating a new one.
+
+This is useful when the user already has vectors generated by the same model, such as when importing objects from another system. Re-using the same vectors will save time and resources, as Weaviate will not need to generate new vectors.
+
+### Bring your own vector
+
+A user can directly upload vectors to Weaviate when inserting objects. This is useful when the user already has vectors generated by a model, or if the user wants to use a specific vectorizer model that does not have an integration with Weaviate.
+
+```mermaid
+%%{init: {
+ 'theme': 'base',
+ 'themeVariables': {
+ 'primaryColor': '#4a5568',
+ 'primaryTextColor': '#2d3748',
+ 'primaryBorderColor': '#718096',
+ 'lineColor': '#718096',
+ 'secondaryColor': '#f7fafc',
+ 'tertiaryColor': '#edf2f7',
+ 'fontFamily': 'Inter, system-ui, sans-serif',
+ 'fontSize': '14px',
+ 'lineHeight': '1.4',
+ 'nodeBorder': '1px',
+ 'mainBkg': '#ffffff',
+ 'clusterBkg': '#f8fafc'
+ }
+}}%%
+
+flowchart LR
+ %% Style definitions
+ classDef systemBox fill:#f8fafc,stroke:#3182ce,stroke-width:1.5px,color:#2d3748,font-weight:bold
+ classDef weaviateBox fill:#f8fafc,stroke:gray,stroke-width:0.5px,color:#2d3748,font-weight:bold
+ classDef component fill:white,stroke:#a0aec0,stroke-width:1px,color:#2d3748
+ classDef edgeLabel fill:white,stroke:#e2e8f0,stroke-width:1px,color:#4a5568
+
+ %% Weaviate section
+ subgraph weaviate["Weaviate"]
+ core["💾 Data &\nvector store"]
+ end
+
+ %% User System
+ subgraph user["🖥️ User System"]
+ data["📄 Data"]
+ end
+
+ %% Connections with curved edges
+ data --->|"1. Insert objects\n(with vectors)"| core
+
+ %% Apply styles
+ class user systemBox
+ class weaviate weaviateBox
+ class cloud cloudBox
+ class provider providerBox
+ class data,core,vectorizer,inference component
+
+ %% Linkstyle for curved edges
+ linkStyle default stroke:#718096,stroke-width:3px,fill:none,background-color:white
+```
+
+In this workflow, the user has the flexibility to use any vectorizer model and process independently of Weaviate.
+
+If using your own model, we recommend explicitly setting the vectorizer as `none` in the vectorizer configuration, such that you do not accidentally generate incompatible vectors with Weaviate.
+
+### Multiple object vectors
+
+:::info Added in `v1.24`
+:::
+
+A collections can be configured to allow each object to be represented my multiple vectors.
+
+Each such vector works as its distinct vector space that is independent of each other, referred to as a "named vector".
+
+A named vector can be configured with a [vectorizer model integration](#model-provider-integration), and may be provided using the ["bring your own vector"](#bring-your-own-vector) integration.
+
+## Query vectors
+
+In Weaviate, you can specify the query vector using:
+
+- A query vector (called `nearVector`),
+- A query object (called `nearObject`),
+- A query text (called `nearText`), or
+- A query media (called `nearImage` or `nearVideo`).
+
+In each of these cases, the search will return the most similar objects to the query, based on the vector embeddings of the query and the stored objects. However, they differ in how the query vector is specified to Weaviate.
+
+### `nearVector`
+
+In a `nearVector` query, the user provides a vector directly to Weaviate. This vector is compared to the vectors of the stored objects to find the most similar objects.
+
+### `nearObject`
+
+In a `nearObject` query, the user provides an object ID to Weaviate. Weaviate retrieves the vector of the object and compares it to the vectors of the stored objects to find the most similar objects.
+
+### `nearText` (and `nearImage`, `nearVideo`)
+
+In a `nearText` query, the user provides an input text to Weaviate. Weaviate uses the specified vectorizer model to generate a vector for the text, and compares it to the vectors of the stored objects to find the most similar objects.
+
+As a result, a `nearText` query is only available for collections where a vectorizer model is configured.
+
+A `nearImage` or `nearVideo` query works similarly to a `nearText` query, but with an image or video input instead of text.
+
+## Multi-target vector search
+
+:::info Added in `v1.26`
+:::
+
+In a multi-target vector search, Weaviate performs multiple, concurrent, single-target vector searches.
+
+These searches will produce multiple sets of results, each with a vector distance score.
+
+Weaviat combines these result sets, using a ["join strategy"](#available-join-strategies) to produce final scores for each result.
+
+If an object is within the search limit or the distance threshold of any of the target vectors, it will be included in the search results.
+
+If an object does not contain vectors for any selected target vector, Weaviate ignores that object and does not include it in the search results.
+
+### Available join strategies.
+
+- **minimum** (*default*) Use the minimum of all vector distances.
+- **sum** Use the sum of the vector distances.
+- **average** Use the average of the vector distances.
+- **manual weights** Use the sum of weighted distances, where the weight is provided for each target vector.
+- **relative score** Use the sum of weighted normalized distances, where the weight is provided for each target vector.
+
+## Vector index and search
+
+Weaviate uses vector indexes to facilitate efficient vector searches. Like other types of indexes, a vector index organizes vector embeddings in a way that allows for fast retrieval while optimizing for other needs such as search quality (e.g. recall), search throughput, and resource use (e.g. memory).
+
+In Weaviate, multiple types of vector indexes are available such as `hnsw`, `flat` and `dynamic` indexes.
+
+Each [collection](../data.md#collections) or [tenant](../data.md#multi-tenancy) in Weaviate will have its own vector index. Additionally, each collection or tenant can have [multiple vector indexes](../data.md#multiple-vectors-named-vectors), each with different configurations.
+
+:::info
+Read more about:
+- [Collections](../data.md#collections)
+- [Multi-tenancy](../data.md#multi-tenancy)
+- [Vector indexes](../vector-index.md)
+- [Multiple named vectors](../data.md#multiple-vectors-named-vectors)
+:::
+
+### Distance metrics
+
+There are many ways to measure vector distances, such as cosine distance, dot product, and Euclidean distance. Weaviate supports a variety of these distance metrics, as listed on the [distance metrics](../../config-refs/distances.md) page. Each vectorizer model is trained with a specific distance metric, so it is important to use the same distance metric for search as was used for training the model.
+
+Weaviate uses cosine distance as the default distance metric for vector searches, as this is the typical distance metric for vectorizer models.
+
+:::tip Distance vs Similarity
+In a "distance", the lower the value, the closer the vectors are to each other. In a "similarity", or "certainty" score, the higher the value, the closer the vectors are to each other. Some metrics, such as cosine distance, can also be expressed as a similarity score. Others, such as Euclidean distance, are only expressable as a distance.
+:::
+
+## Notes and best practices
+
+All compatible vectors are similar to some degree search.
+
+This has two effects:
+
+1. There will always be some "top" search results regardless of relevance.
+1. The entire dataset is always returned.
+
+If you search a vector database containing vectors for colors "Red", "Crimson" and "LightCoral" with a query vector for "SkyBlue", the search will still return a result (e.g. "Red"), even if it is not semantically similar to the query. The search is simply returning the closest match, even if it is not a good match in the absolute sense.
+
+As a result, Weaviate provides multiple ways to limit the search results:
+
+- **Limit**: Specify the maximum number of results to return.
+ - If not provided, defaults to system-defined [`QUERY_DEFAULTS_LIMIT`](../../config-refs/env-vars.md#general) of 10.
+- **AutoCut**: Limit results based on discontinuities in result metrics such as vector distance or search score.
+- **Threshold**: Specify a minimum similarity score (e.g. maximum cosine distance) for the results.
+- **Apply filters**: Use [filters](../filtering.md) to exclude results based on other criteria, such as metadata or properties.
+
+Use a combination of these methods to ensure that the search results are meaningful and relevant to the user.
+
+Generally, start with a `limit` to a maximum number of results to provide to the user, and adjust the `threshold` such that irrelevant results are unlikely to be returned.
+
+This will cause the search to return up to the specified (`limit`) number of results, but only if they are above the specified (`threshold`) similarity score.
+
+### Further resources
+
+- [How-to: Search](../../search/index.md)
+- [How-to: Vector similarity search](../../search/similarity.md)
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/weaviate/concepts/vector-index.md b/developers/weaviate/concepts/vector-index.md
index 10f7ca5be4..0ccdceb0e8 100644
--- a/developers/weaviate/concepts/vector-index.md
+++ b/developers/weaviate/concepts/vector-index.md
@@ -5,7 +5,7 @@ image: og/docs/concepts.jpg
# tags: ['vector index plugins']
---
-Vector indexing is a key component of vector databases. It can help to [significantly **increase the speed** of the search process of similarity search](https://weaviate.io/blog/vector-search-explained) with only a minimal tradeoff in search accuracy ([HNSW index](#hierarchical-navigable-small-world-hnsw-index)), or efficiently store many subsets of data in a small memory footprint ([flat index](#flat-index)). The [dynamic index](#dynamic-index) can even start off as a flat index and then dynamically switch to the HNSW index as it scales past a threshold.
+What is vector indexing? It's a key component of vector databases that helps to [significantly **increase the speed** of the search process of similarity search](https://weaviate.io/blog/vector-search-explained) with only a minimal tradeoff in search accuracy ([HNSW index](#hierarchical-navigable-small-world-hnsw-index)), or efficiently store many subsets of data in a small memory footprint ([flat index](#flat-index)). The [dynamic index](#dynamic-index) can even start off as a flat index and then dynamically switch to the HNSW index as it scales past a threshold.
Weaviate's vector-first storage system takes care of all storage operations with a vector index. Storing data in a vector-first manner not only allows for semantic or context-based search, but also makes it possible to store *very* large amounts of data without decreasing performance (assuming scaled well horizontally or having sufficient shards for the indexes).
@@ -20,9 +20,13 @@ Available starting in `v1.25`. This is an experimental feature. Use with caution
This page explains what vector indexes are, and what purpose they serve in the Weaviate vector database.
+:::info What is a vector index?
+In vector databases, a vector index is a data structure that organizes vector embeddings to enable efficient similarity search. Indexing vector databases properly is crucial for performance, and different index types serve different purposes - from the simple flat index to more sophisticated approaches like HNSW.
+:::
+
## Why do you need vector indexing?
-[Vector embeddings](https://weaviate.io/blog/vector-embeddings-explained) are a great way to represent meaning. Vectors embeddings are arrays of elements that can capture meaning from different data types, such as texts, images, videos, and other content. The number of elements are called dimensions. High dimension vectors capture more information, but they are harder to work with.
+[Vector embeddings](https://weaviate.io/blog/vector-embeddings-explained) are a great way to represent meaning. Understanding how to index a vector is crucial for working with vector databases effectively. Vectors embeddings are arrays of elements that can capture meaning from different data types, such as texts, images, videos, and other content. The number of elements are called dimensions. High dimension vectors capture more information, but they are harder to work with.
Vector databases make it easier to work with high dimensional vectors. Consider search; Vector databases efficiently measure semantic similarity between data objects. When you run a [similarity search](https://weaviate.io/developers/weaviate/search/similarity), a vector database like Weaviate uses a vectorized version of the query to find objects in the database that have vectors similar to the query vector.
@@ -44,6 +48,8 @@ Another way to think of this is how products are placed in a supermarket. You'd
You might be also interested in our blog post [Vector search explained](https://weaviate.io/blog/vector-search-explained).
:::
+Let's explore how to index a vector using different approaches supported by Weaviate. The first method is the HNSW index.
+
## Hierarchical Navigable Small World (HNSW) index
**Hierarchical Navigable Small World (HNSW)** is an algorithm that works on multi-layered graphs. It is also an index type, and refers to vector indexes that are created using the HNSW algorithm. HNSW indexes enable very fast queries, but rebuilding the index when you add new vectors can be resource intensive.
@@ -143,14 +149,28 @@ Cleanup is an async process runs that rebuilds the HNSW graph after deletes and
Available starting in `v1.22`. This is an experimental feature. Use with caution.
:::
-Starting in Weaviate `1.22`, you can use asynchronous indexing by opting in.
+This feature relates to the vector index, specifically only to the HNSW index.
-Asynchronous indexing decouples object creation from vector index updates. Objects are created faster, and the vector index updates in the background. Asynchronous indexing is especially useful for importing large amounts of data.
+Asynchronous indexing can be enabled by opting in as follows:
+- Open-source users can do this by setting the `ASYNC_INDEXING` environment variable to `true`.
+- Weaviate Cloud users can do this by toggling the `Enable async indexing` switch in the Weaviate Cloud Console.
-While the vector index is updating, Weaviate can search a maximum of 100,000 un-indexed objects by brute force, that is, without using the vector index. This means that the search performance is slower until the vector index has been fully updated. Also, any additional new objects beyond the first 100,000 in the queue are not include in the search.
+With synchronous indexing, the vector index is updated in lockstep with the object store. Updating an HNSW index can be an expensive operation, especially as the size of the index grows. As a result, the indexing operation can be the bottleneck in the system, slowing down the time for user requests to be completed.
-:::tip
-You might be also interested in our blog post [Vamana vs. HNSW - Exploring ANN algorithms Part 1](https://weaviate.io/blog/ann-algorithms-vamana-vs-hnsw).
+When asynchronous indexing is enabled, all vector indexing operations go through a queue. This applies to not only batch imports, but also to single object imports, deletions, and updates.
+
+This means that the object store can be updated quickly to finish performing user requests while the vector index updates in the background. Asynchronous indexing is especially useful for importing large amounts of data.
+
+This means that there will be a short delay between object creation and the object being available for vector search using the HNSW index. The number of objects in the queue can be monitored per node [as shown here](../config-refs/nodes.md).
+
+:::info Changes in `v1.28`
+In Weaviate `v1.22` to `v1.27`, the async indexing feature only affected batch import operations, using an in-memory queue.
+
+
+Starting in `v1.28`, the async indexing feature has been expanded to include single object imports, deletions, and updates. Additionally, the in-memory queue has been replaced with a persistent, on-disk queue. This change allows for more robust handling of indexing operations, and improves performance though reduction of lock contention and memory usage.
+
+
+The use of an on-disk queue may result in a slight increase in disk usage, however this is expected to be a small percentage of the total disk usage.
:::
## Flat index
@@ -158,7 +178,7 @@ You might be also interested in our blog post [Vamana vs. HNSW - Exploring ANN a
:::info Added in `v1.23`
:::
-The **flat index** is a simple, lightweight index that is fast to build and has a very small memory footprint. This index type is a good choice for use cases where each end user (i.e. tenant) has their own, isolated, dataset, such as in a SaaS product for example, or a database of isolated record sets.
+The **flat index** is one of the fundamental ways to implement vector indexing in databases. As the name suggests, it's a simple, lightweight index that is fast to build and has a very small memory footprint. This index type is a good choice for use cases where each end user (i.e. tenant) has their own, isolated, dataset, such as in a SaaS product for example, or a database of isolated record sets.
As the name suggests, the flat index is a single layer of disk-backed data objects and thus a very small memory footprint. The flat index is a good choice for small collections, such as for multi-tenancy use cases.
diff --git a/developers/weaviate/concepts/vector-quantization.md b/developers/weaviate/concepts/vector-quantization.md
index de013a8550..5a06caae69 100644
--- a/developers/weaviate/concepts/vector-quantization.md
+++ b/developers/weaviate/concepts/vector-quantization.md
@@ -14,8 +14,13 @@ Weaviate currently offers two vector quantization techniques:
- [Scalar quantization (SQ)](#scalar-quantization)
## What is quantization?
+
In general, quantization techniques reduce the memory footprint by representing numbers with lower precision numbers, like rounding a number to the nearest integer. In neural networks, quantization reduces the values of the weights or activations of the model stored as a 32-bit floating-point number (4 bytes) to a lower precision number, such as an 8-bit integer (1 byte).
+### What is vector quantization?
+
+Vector quantization is a technique that reduces the memory footprint of vector embeddings. Vector embeddings have been typically represented as 32-bit floating-point numbers. Vector quantization techniques reduce the size of the vector embeddings by representing them as smaller numbers, such as 8-bit integers or binary numbers. Some quantization techniques also reduce the number of dimensions in the vector embeddings.
+
## Product quantization
[Product quantization](https://ieeexplore.ieee.org/document/5432202) is a multi-step quantization technique that is available for use with `hnsw` indexes in Weaivate.
diff --git a/developers/weaviate/config-refs/env-vars.md b/developers/weaviate/config-refs/env-vars.md
index 8755091ba5..d9f3918fe1 100644
--- a/developers/weaviate/config-refs/env-vars.md
+++ b/developers/weaviate/config-refs/env-vars.md
@@ -17,7 +17,7 @@ All other values are interpreted as `false`.
| Variable | Description | Type | Example Value |
| --- | --- | --- | --- |
-| `ASYNC_INDEXING` | (Experimental as of `v1.22`.)
If set, Weaviate creates vector indexes asynchronously to the object creation process. This can be useful for importing large amounts of data. (default: `false`) | `boolean` | `false` |
+| `ASYNC_INDEXING` | (Experimental, added in `v1.22`.)
If set, Weaviate creates vector indexes asynchronously to the object creation process. This can be useful for importing large amounts of data. (default: `false`) | `boolean` | `false` |
| `AUTOSCHEMA_ENABLED` | Whether to infer the schema where necessary with the autoschema (default: `true`) | `boolean` | `true` |
| `RAFT_ENABLE_ONE_NODE_RECOVERY` | Enable running the single node recovery routine on restart. This is useful if the
default hostname has changed and a single node cluster believes there are supposed to be two nodes. | `boolean` | `false` |
@@ -29,6 +29,7 @@ default hostname has changed and a single node cluster believes there are suppos
| `ENABLE_API_BASED_MODULES` | Enable all API-based modules. (Experimental as of `v1.26.0`) | `boolean` | `true` |
| `ENABLE_MODULES` | Specify Weaviate modules to enable | `string - comma separated names` | `text2vec-openai,generative-openai` |
| `ENABLE_TOKENIZER_GSE` | Enable the [`GSE` tokenizer](../config-refs/schema/index.md#gse-and-trigram-tokenization-methods) for use | `boolean` | `true` |
+| `ENABLE_TOKENIZER_KAGOME_JA` | Enable the [`Kagome` tokenizer for Japanese](../config-refs/schema/index.md#kagome_ja-tokenization-method) for use (Experimental as of `v1.28.0`) | `boolean` | `true` |
| `ENABLE_TOKENIZER_KAGOME_KR` | Enable the [`Kagome` tokenizer for Korean](../config-refs/schema/index.md#kagome_kr-tokenization-method) for use (Experimental as of `v1.25.7`) | `boolean` | `true` |
| `GODEBUG` | Controls debugging variables within the runtime. [See official Go docs](https://pkg.go.dev/runtime). | `string - comma-separated list of name=val pairs` | `gctrace=1` |
| `GOMAXPROCS` | Set the maximum number of threads that can be executing simultaneously. If this value is set, it be respected by `LIMIT_RESOURCES`. | `string - number` | `NUMBER_OF_CPU_CORES` |
@@ -59,6 +60,8 @@ default hostname has changed and a single node cluster believes there are suppos
| `TOMBSTONE_DELETION_MAX_PER_CYCLE` | Maximum number of tombstones to delete per cleanup cycle. Set this to limit cleanup cycles, as they are resource-intensive. As an example, set a maximum of 10000000 (10M) for a cluster with 300 million-object shards. Default: none | `string - int` (New in `v1.24.15` / `v1.25.2`) | `10000000` |
| `TOMBSTONE_DELETION_MIN_PER_CYCLE` | Minimum number of tombstones to delete per cleanup cycle. Set this to prevent triggering unnecessary cleanup cycles below a threshold. As an example, set a minimum of 1000000 (1M) for a cluster with 300 million-object shards. Default: 0 (New in `v1.24.15`, `v1.25.2`) | `string - int` | `100000` |
| `USE_GSE` | Enable the [`GSE` tokenizer](../config-refs/schema/index.md#gse-and-trigram-tokenization-methods) for use. (The same as `ENABLE_TOKENIZER_GSE`. We recommend using `ENABLE_TOKENIZER_GSE` for consistency in naming with other optional tokenizers.) | `boolean` | `true` |
+| `USE_INVERTED_SEARCHABLE` | (Experimental) Store searchable properties using a more efficient in-disk format, designed for the BlockMax WAND algorithm. Set as `true` together with `USE_BLOCKMAX_WAND` to enable BlockMax WAND at query time. Added in `v1.28`. (Default: `false`)
This format is experimental and may be subject to breaking changes in future versions. Expect to need to re-index your data again if you enable this feature.
Migrations are not supported with this feature enabled. Start with a fresh index.
| `boolean` | `true` |
+| `USE_BLOCKMAX_WAND` | (Experimental) Use BlockMax WAND algorithm for BM25 and hybrid searches. Recommend enabling together with `USE_INVERTED_SEARCHABLE` to get the full performance benefits. Added in `v1.28`. (Default: `false`)
BlockMax WAND scores on single and multiple property search may be different due to different IDF and property length normalization
| `boolean` | `true` |
## Module-specific
@@ -76,6 +79,13 @@ default hostname has changed and a single node cluster believes there are suppos
| `TRANSFORMERS_INFERENCE_API` | The endpoint where to reach the transformers module if enabled | `string` | `http://t2v-transformers:8080` |
| `USE_GOOGLE_AUTH` | Automatically look for Google Cloud credentials, and generate Vertex AI access tokens for Weaviate to use as needed ([read more](../model-providers/google/index.md)). (default: `false`) | `boolean` | `true` |
| `USE_SENTENCE_TRANSFORMERS_VECTORIZER` | (EXPERIMENTAL) Use the `sentence-transformer` vectorizer instead of the default vectorizer (from the `transformers` library). Applies to custom images only. | `boolean` | `true` |
+| `CLIP_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `multi2vec-clip` module to start up before starting (default: `true`). | `boolean` | `true` |
+| `NER_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `ner-transformers` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
+| `QNA_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `qna-transformers` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
+| `RERANKER_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `reranker-transformers` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
+| `SUM_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `sum-transformers` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
+| `GPT4ALL_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `text2vec-gpt4all` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
+| `TRANSFORMERS_WAIT_FOR_STARTUP` | If `true`, Weaviate waits for the `text2vec-transformers` module to start up before starting (default: `true`). (Available from `v1.25.27`, `v1.26.12`, `v1.27.7`) | `boolean` | `true` |
## Authentication and authorization
diff --git a/developers/weaviate/config-refs/schema/_category_.json b/developers/weaviate/config-refs/schema/_category_.json
index 4a2475dad6..7d3e4d209c 100644
--- a/developers/weaviate/config-refs/schema/_category_.json
+++ b/developers/weaviate/config-refs/schema/_category_.json
@@ -1,4 +1,4 @@
{
- "label": "Collection schema",
+ "label": "Collection definition",
"position": 2
-}
\ No newline at end of file
+}
diff --git a/developers/weaviate/config-refs/schema/index.md b/developers/weaviate/config-refs/schema/index.md
index bba3876f3b..95dcb39754 100644
--- a/developers/weaviate/config-refs/schema/index.md
+++ b/developers/weaviate/config-refs/schema/index.md
@@ -546,6 +546,25 @@ The `gse` tokenizer is not loaded by default to save resources. To use it, set t
- `"素早い茶色の狐が怠けた犬を飛び越えた"`: `["素早", "素早い", "早い", "茶色", "の", "狐", "が", "怠け", "けた", "犬", "を", "飛び", "飛び越え", "越え", "た", "素早い茶色の狐が怠けた犬を飛び越えた"]`
- `"すばやいちゃいろのきつねがなまけたいぬをとびこえた"`: `["すばや", "すばやい", "やい", "いち", "ちゃ", "ちゃい", "ちゃいろ", "いろ", "のき", "きつ", "きつね", "つね", "ねが", "がな", "なま", "なまけ", "まけ", "けた", "けたい", "たい", "いぬ", "を", "とび", "とびこえ", "こえ", "た", "すばやいちゃいろのきつねがなまけたいぬをとびこえた"]`
+### `kagome_ja` tokenization method
+
+:::caution Experimental feature
+Available starting in `v1.28.0`. This is an experimental feature. Use with caution.
+:::
+
+For Japanese text, `kagome_ja` tokenization method is also available. This uses the [`Kagome` tokenizer](https://github.com/ikawaha/kagome?tab=readme-ov-file) with a Japanese [MeCab IPA](https://github.com/ikawaha/kagome-dict/) dictionary to split the property text.
+
+The `kagome_ja` tokenizer is not loaded by default to save resources. To use it, set the environment variable `ENABLE_TOKENIZER_KAGOME_JA` to `true` on the Weaviate instance.
+
+`kagome_ja` tokenization examples:
+
+- `"春の夜の夢はうつつよりもかなしき 夏の夜の夢はうつつに似たり 秋の夜の夢はうつつを超え 冬の夜の夢は心に響く 山のあなたに小さな村が見える 川の音が静かに耳に届く 風が木々を通り抜ける音 星空の下、すべてが平和である"`:
+ - [`"春", "の", "夜", "の", "夢", "は", "うつつ", "より", "も", "かなしき", "\n\t", "夏", "の", "夜", "の", "夢", "は", "うつつ", "に", "似", "たり", "\n\t", "秋", "の", "夜", "の", "夢", "は", "うつつ", "を", "超え", "\n\t", "冬", "の", "夜", "の", "夢", "は", "心", "に", "響く", "\n\n\t", "山", "の", "あなた", "に", "小さな", "村", "が", "見える", "\n\t", "川", "の", "音", "が", "静か", "に", "耳", "に", "届く", "\n\t", "風", "が", "木々", "を", "通り抜ける", "音", "\n\t", "星空", "の", "下", "、", "すべて", "が", "平和", "で", "ある"`]
+- `"素早い茶色の狐が怠けた犬を飛び越えた"`:
+ - `["素早い", "茶色", "の", "狐", "が", "怠け", "た", "犬", "を", "飛び越え", "た"]`
+- `"すばやいちゃいろのきつねがなまけたいぬをとびこえた"`:
+ - `["すばやい", "ちゃ", "いろ", "の", "きつね", "が", "なまけ", "た", "いぬ", "を", "とびこえ", "た"]`
+
### `kagome_kr` tokenization method
:::caution Experimental feature
@@ -558,9 +577,12 @@ The `kagome_kr` tokenizer is not loaded by default to save resources. To use it,
`kagome_kr` tokenization examples:
-- `"아버지가방에들어가신다"`: `["아버지", "가", "방", "에", "들어가", "신다"]`
-- `"아버지가 방에 들어가신다"`: `["아버지", "가", "방", "에", "들어가", "신다"]`
-- `"결정하겠다"`: `["결정", "하", "겠", "다"]`
+- `"아버지가방에들어가신다"`:
+ - `["아버지", "가", "방", "에", "들어가", "신다"]`
+- `"아버지가 방에 들어가신다"`:
+ - `["아버지", "가", "방", "에", "들어가", "신다"]`
+- `"결정하겠다"`:
+ - `["결정", "하", "겠", "다"]`
### Inverted index types
diff --git a/developers/weaviate/config-refs/schema/multi-vector.md b/developers/weaviate/config-refs/schema/multi-vector.md
index dbed8095f5..2fc0d4e0e1 100644
--- a/developers/weaviate/config-refs/schema/multi-vector.md
+++ b/developers/weaviate/config-refs/schema/multi-vector.md
@@ -39,6 +39,23 @@ Named vector collections support hybrid search, but only for one vector at a tim
[Keyword search](/developers/weaviate/search/bm25) syntax does not change if a collection has named vectors.
+### Query multiple named vectors
+
+:::info Added in `v1.26`
+:::
+
+Where multiple named vectors are defined in a collection, you can query them in a single search. This is useful for comparing the similarity of an object to multiple named vectors.
+
+This is called a "multi-target vector search".
+
+In a multi-target vector search, you can specify:
+
+- The target vectors to search
+- The query(ies) to compare to the target vectors
+- The weights to apply to each distance (raw, or normalized) for each target vector
+
+Read more in [How-to: Multi-target vector search](../../search/multi-vector.md).
+
## Related pages
- [How-to: manage data](/developers/weaviate/manage-data/collections#define-multiple-named-vectors): Configure collections
diff --git a/developers/weaviate/config-refs/schema/vector-index.md b/developers/weaviate/config-refs/schema/vector-index.md
index bb76d16c8e..43192ff504 100644
--- a/developers/weaviate/config-refs/schema/vector-index.md
+++ b/developers/weaviate/config-refs/schema/vector-index.md
@@ -5,7 +5,7 @@ image: og/docs/configuration.jpg
# tags: ['configuration', 'vector index']
---
-Vector indexes facilitate efficient, vector-first data storage and retrieval.
+[Vector indexes](../../concepts/vector-index.md) facilitate efficient, vector-first data storage and retrieval.
## HNSW indexes
diff --git a/developers/weaviate/configuration/authentication.md b/developers/weaviate/configuration/authentication.md
index 49bf937ebe..f123ab4353 100644
--- a/developers/weaviate/configuration/authentication.md
+++ b/developers/weaviate/configuration/authentication.md
@@ -5,34 +5,84 @@ image: og/docs/configuration.jpg
# tags: ['authentication']
---
-Weaviate offers an optional authentication scheme using API keys and OpenID Connect (OIDC), which can enable various [authorizations](authorization.md) levels.
+:::info Authentication and authorization
+Authentication and authorization are closely related concepts, and sometimes abbreviated as `AuthN` and `AuthZ`. Authentication (`AuthN`) is the process of verifying the identity of a user, while authorization (`AuthZ`) is the process of determining what permissions the user has.
+:::
+
+Weaviate controls access through user authentication via API keys or OpenID Connect (OIDC), with an option for anonymous access. Users can then be assigned different [authorization](./authorization.md) levels, as shown in the diagram below.
+
+```mermaid
+flowchart LR
+ %% Define main nodes
+ Request["Client\nRequest"]
+ AuthCheck{"AuthN\nEnabled?"}
+ AccessCheck{"Check\nAuthZ"}
+ Access["✅ Access\nGranted"]
+ Denied["❌ Access\nDenied"]
+
+ %% Define authentication method nodes
+ subgraph auth ["AuthN"]
+ direction LR
+ API["API Key"]
+ OIDC["OIDC"]
+ AuthResult{"Success?"}
+ end
+
+ %% Define connections
+ Request --> AuthCheck
+ AuthCheck -->|"No"| AccessCheck
+ AuthCheck -->|"Yes"| auth
+ API --> AuthResult
+ OIDC --> AuthResult
+ AuthResult -->|"Yes"| AccessCheck
+ AuthResult -->|"No"| Denied
+
+ AccessCheck -->|"Pass"| Access
+ AccessCheck -->|"Fail"| Denied
+
+ %% Style nodes
+ style Request fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style AuthCheck fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style AccessCheck fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style Access fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style Denied fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style API fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style OIDC fill:#ffffff,stroke:#B9C8DF,color:#130C49
+ style AuthResult fill:#ffffff,stroke:#B9C8DF,color:#130C49
+
+ %% Style subgraph
+ style auth fill:#ffffff,stroke:#130C49,stroke-width:2px,color:#130C49
+```
+
+For example, a user logging in with the API key `jane-secret` may be granted administrator permissions, while another user logging in with the API key `ian-secret` may be granted read-only permissions.
-When authentication is disabled, all anonymous requests will be granted access.
+In summary, Weaviate allows the following authentication methods:
-In this documentation, we cover all scenarios for your convenience:
-- [Configuring Weaviate and the client for API key use](#api-key)
-- [Configuring Weaviate and the client for OIDC](#oidc---a-systems-perspective)
-- [Configuring Weaviate for anonymous access](#anonymous-access)
+- API key
+- OpenID Connect (OIDC)
+- Anonymous access (no authentication, strongly discouraged except for development or evaluation)
Note that API key and OIDC authentication can be both enabled at the same time.
-:::tip We recommend starting with the API key
-For most use cases, the API key option offers a balance between security and ease of use. Give it a try first, unless you have specific requirements that necessitate a different approach.
-:::
+The way to configure authentication differs by your deployment method, depending on whether you are running Weaviate in Docker or Kubernetes. Below, we provide examples for both.
-:::info Using Kubernetes?
-See [this page](../installation/kubernetes.md#authentication-and-authorization) for how to set up `values.yaml` for authentication & authorization.
+:::info What about Weaviate Cloud (WCD)?
+For Weaviate Cloud (WCD) instances, authentication is pre-configured with OIDC and API key access. You can [authenticate against Weaviate](../connections/connect-cloud.mdx) with your WCD credentials using OIDC, or [with API keys](/developers/wcs/platform/manage-api-keys).
:::
-## WCD authentication
+## API Key Authentication
-[Weaviate Cloud (WCD)](https://console.weaviate.cloud/) instances are pre-configured for API key [authentication](/developers/wcs/connect.mdx).
+API key authentication is a simple and effective way to authenticate users. Each user is assigned a unique API key, which is used to authenticate the user.
-## API key
+Note that you can either:
+- Set one user for all API keys, or
+- Define one user per API key (the number of users must match the number of API keys)
-To configure Weaviate for API key-based authentication, add the following environment variables to your configuration file.
+Make sure all listed users are also configured in the authorization settings.
-An example `docker-compose.yml` file looks like this:
+### API keys: Docker
+
+API key authentication can be configured using environment variables. In Docker Compose, set them in the configuration file (`docker-compose.yml`) such as in the following example:
```yaml
services:
@@ -40,82 +90,73 @@ services:
...
environment:
...
+ # Disable anonymous access.
+ AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
+
# Enables API key authentication.
AUTHENTICATION_APIKEY_ENABLED: 'true'
- # List one or more keys, separated by commas. Each key corresponds to a specific user identity below.
- AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'jane-secret-key,ian-secret-key'
+ # List one or more keys in plaintext separated by commas. Each key corresponds to a specific user identity below.
+ AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'viewer-key,admin-key'
# List one or more user identities, separated by commas. Each identity corresponds to a specific key above.
- AUTHENTICATION_APIKEY_USERS: 'jane@doe.com,ian-smith'
+ AUTHENTICATION_APIKEY_USERS: 'viewer-user,admin-user'
```
-The example associates API keys and users.
+This configuration:
+- Disables anonymous access
+- Enables API key authentication
+- Defines plaintext API keys in `AUTHENTICATION_APIKEY_ALLOWED_KEYS`
+- Associates users with the API keys in `AUTHENTICATION_APIKEY_USERS`
-| API key | User|
-| :- | :- |
-| `jane-secret-key` | `jane@doe.com` |
-| `ian-secret-key` | `ian-smith` |
+These users can now be assigned permissions based on the authorization settings.
-:::info `n` APIKEY_ALLOWED_KEYS vs `n` APIKEY_USERS
-There are two options for configuring the number of keys and users:
-- Option 1: There is exactly one user specified and any number of keys (all keys will end up using the same user).
-- Option 2: The lengths match, then key `n` will map to user `n`.
-:::
+### API keys: Kubernetes
-These users' permissions will be determined by the [authorization](./authorization.md) settings. Below is one such example configuration.
+For Kubernetes deployments using Helm, API key authentication can be configured in the `values.yaml` file under the `authentication` section. Here's an example configuration:
```yaml
-services:
- weaviate:
- ...
- environment:
- ...
- AUTHORIZATION_ADMINLIST_ENABLED: 'true'
- AUTHORIZATION_ADMINLIST_USERS: 'jane@doe.com,john@doe.com'
- AUTHORIZATION_ADMINLIST_READONLY_USERS: 'ian-smith,roberta@doe.com'
+authentication:
+ anonymous_access:
+ # Disable anonymous access.
+ enabled: false
+
+ apikey:
+ # Enables API key authentication.
+ enabled: true
+
+ # List one or more keys in plaintext separated by commas. Each key corresponds to a specific user identity below.
+ allowed_keys:
+ - admin-key
+ - viewer-key
+
+ # List one or more user identities, separated by commas. Each identity corresponds to a specific key above.
+ users:
+ - admin-user
+ - viewer-user
```
-The example associates permissions with users.
-
-| User| User type | Permission |
-| :- | :- | :- |
-| `jane-secret-key` | Admin | Read, write |
-| `john@doe.com` | Admin | Read, write |
-| `ian-smith` | Read Only | Read |
-| `roberta@doe.com` | Read Only | Read |
+This configuration:
+- Disables anonymous access
+- Enables API key authentication
+- Defines plaintext API keys in `allowed_keys`
+- Associates users with the API keys in `users`
-In the example, `jane-secret-key` is an `admin` key, and `ian-secret-key` is a `read-only` key.
-
-:::note What about the other identities?
-You might notice that the authorization list includes `john@doe.com` and `roberta@doe.com`. Weaviate supports a combination of API key and OIDC-based authentication. Thus, the additional users might be OIDC users.
+:::warning Environment Variables Take Precedence
+If you configure API keys using environment variables, those settings will take precedence over the values in `values.yaml`. To use the Helm values configuration, ensure you have not set the corresponding environment variables.
:::
-### API key: Client-side usage
-
-import APIKeyUsage from '/_includes/clients/api-token-usage.mdx';
-
-
-
-The cURL command looks like this:
+For enhanced security in production environments, you can store API keys in Kubernetes secrets and reference them using environment variables instead of storing them as plaintext in the Helm values.
-```bash
-curl https://${WEAVIATE_INSTANCE_URL}/v1/meta -H "Authorization: Bearer ${WEAVIATE_API_KEY}" | jq
-```
+## OIDC Authentication
-import ClientLibraryUsage from '/_includes/clients/client-library-usage.mdx';
+OIDC authentication requires the resource (Weaviate) to validate tokens issued by an identity provider. The identity provider authenticates the user and issues tokens, which are then validated by Weaviate.
-
+In an example setup, a Weaviate instance acts as the resource, Weaviate Cloud (WCD) acts as the identity provider, and the Weaviate client acts on behalf of the user.
-## OIDC
-
-OIDC authentication involves three parties.
-
-1. A **user** who wants to access a resource.
-1. An **identity provider (a.k.a token issuer)** (e.g. Okta, Microsoft, or WCD) that authenticates the user and issues tokens.
-1. A **resource** (in this case, Weaviate) who validates the tokens to rely on the identity provider's authentication.
+Any "OpenID Connect" compatible token issuer that implements OpenID Connect Discovery is compatible with Weaviate.
-For example, a setup may involve a Weaviate instance as a resource, Weaviate Cloud (WCD) as an identity provider, and the Weaviate client acting on behalf of the user. This document attempts to provide some perspective from each one to help you use Weaviate with authentication.
+This document discusses how to configure Weaviate as the resource.
@@ -133,38 +174,11 @@ correct, all contents of the token are trusted, which authenticates the user bas
-## OIDC: Server-side
+### OIDC: Docker
-Any "OpenID Connect" compatible token issuer that implements OpenID Connect Discovery is compatible with Weaviate.
-
-### Configure Weaviate as the resource
-
-Configuring the OIDC token issuer is outside the scope of this document, but here are a few options as a starting point:
+To configure Weaviate for OIDC-based authentication, add the following environment variables to your configuration file.
-- For simple use-cases such as for a single user, you can use Weaviate Cloud (WCD) as the OIDC token issuer. To do so:
- - Make sure you have a WCD account (you can [sign up here](https://console.weaviate.cloud/)).
- - In the Docker Compose file (e.g. `docker-compose.yml`), specify:
- - `https://auth.wcs.api.weaviate.io/auth/realms/SeMI` as the issuer (in `AUTHENTICATION_OIDC_ISSUER`),
- - `wcs` as the client id (in `AUTHENTICATION_OIDC_CLIENT_ID`), and
- - enable the adminlist (`AUTHORIZATION_ADMINLIST_ENABLED: 'true'`) and add your WCD account email as the user (in `AUTHORIZATION_ADMINLIST_USERS`) .
- - `email` as the username claim (in `AUTHENTICATION_OIDC_USERNAME_CLAIM`).
-
-- If you need a more customizable setup you can use commercial OIDC providers like [Okta](https://www.okta.com/).
-- As another alternative, you can run your own OIDC token issuer server, which may be the most complex but also configurable solution. Popular open-source solutions include Java-based [Keycloak](https://www.keycloak.org/) and Golang-based [dex](https://github.com/dexidp/dex).
-
-:::info
-By default, Weaviate validates that the token includes a specified client id in the audience claim. If your token issuer does not support this feature, you can turn it off as outlined in the configuration section below.
-:::
-
-### Set configuration options
-
-To use OpenID Connect (OIDC), the **respective environment variables** must be correctly configured in the configuration yaml for Weaviate.
-
-:::info
-As of November 2022, we were aware of some differences in Microsoft Azure's OIDC implementation compared to others. If you are using Azure and experiencing difficulties, [this external blog post](https://xsreality.medium.com/making-azure-ad-oidc-compliant-5734b70c43ff) may be useful.
-:::
-
-The OIDC-related Docker Compose environment variables are shown below. For configuration details, see the inline-yaml comments:
+An example `docker-compose.yml` file looks like this:
```yaml
services:
@@ -209,17 +223,120 @@ services:
AUTHENTICATION_OIDC_SCOPES: ''
```
-#### Get the Weaviate OpenID endpoint
+:::info OIDC and Azure
+As of November 2022, we were aware of some differences in Microsoft Azure's OIDC implementation compared to others. If you are using Azure and experiencing difficulties, [this external blog post](https://xsreality.medium.com/making-azure-ad-oidc-compliant-5734b70c43ff) may be useful.
+:::
-If you have OIDC authentication enabled, you can obtain Weaviate's OIDC configuration from the following endpoint:
+### OIDC: Kubernetes
-```bash
-curl ${WEAVIATE_INSTANCE_URL}/v1/.well-known/openid-configuration
+For Kubernetes deployments using Helm, OIDC authentication can be configured in the `values.yaml` file under the `authentication` section. Here's an example configuration:
+
+```yaml
+authentication:
+ anonymous_access:
+ # Disable anonymous access.
+ enabled: false
+ oidc:
+ # enabled (optional - defaults to false) turns OIDC auth on. All other fields in
+ # this section will only be validated if enabled is set to true.
+ enabled: true
+
+ # issuer (required) tells weaviate how to discover the token issuer. This
+ # endpoint must implement the OpenID Connect Discovery spec, so that weaviate
+ # can retrieve the issuer's public key.
+ #
+ # The example URL below uses the path structure commonly found with keycloak
+ # where an example realm 'my-weaviate-usecase' was created. The exact
+ # path structure depends on the token issuer. See the token issuer's documentation
+ # about which endpoint implements OIDC Discovery.
+ issuer: 'http://my-token-issuer/auth/realms/my-weaviate-usecase'
+
+ # client_id (required unless skip_client_id_check is set to true) tells
+ # Weaviate to check for a particular OAuth 2.0 client_id in the audience claim.
+ # This is to prevent that a token which was signed by the correct issuer
+ # but never intended to be used with Weaviate can be used for authentication.
+ #
+ # For more information on what clients are in OAuth 2.0, see
+ # https://tools.ietf.org/html/rfc6749#section-1.1
+ client_id: 'my-weaviate-client'
+
+ # username_claim (required) tells Weaviate which claim in the token to use for extracting
+ # the username. The username will be passed to the authorization plugin.
+ username_claim: 'email'
+
+ # skip_client_id_check (optional, defaults to false) skips the client_id
+ # validation in the audience claim as outlined in the section above.
+ # Not recommended to set this option as it reduces security, only set this
+ # if your token issuer is unable to provide a correct audience claim
+ skip_client_id_check: 'false'
+
+ # scope (optional) these will be used by clients as default scopes for authentication
+ scopes: ''
+
+ # groups_claim: ''
```
-Edit ${WEAVIATE_INSTANCE_URL} to provide your instance URL.
+### Note: Configuring the OIDC token issuer
-## OIDC: Client-side
+Configuring the OIDC token issuer is outside the scope of this document, but here are a few options as a starting point:
+
+- For simple use-cases such as for a single user, you can use Weaviate Cloud (WCD) as the OIDC token issuer. To do so:
+ - Make sure you have a WCD account (you can [sign up here](https://console.weaviate.cloud/)).
+ - In the Docker Compose file (e.g. `docker-compose.yml`), specify:
+ - `https://auth.wcs.api.weaviate.io/auth/realms/SeMI` as the issuer (in `AUTHENTICATION_OIDC_ISSUER`),
+ - `wcs` as the client id (in `AUTHENTICATION_OIDC_CLIENT_ID`), and
+ - enable the adminlist (`AUTHORIZATION_ADMINLIST_ENABLED: 'true'`) and add your WCD account email as the user (in `AUTHORIZATION_ADMINLIST_USERS`) .
+ - `email` as the username claim (in `AUTHENTICATION_OIDC_USERNAME_CLAIM`).
+
+- If you need a more customizable setup you can use commercial OIDC providers like [Okta](https://www.okta.com/).
+- As another alternative, you can run your own OIDC token issuer server, which may be the most complex but also configurable solution. Popular open-source solutions include Java-based [Keycloak](https://www.keycloak.org/) and Golang-based [dex](https://github.com/dexidp/dex).
+
+:::info
+By default, Weaviate validates that the token includes a specified client id in the audience claim. If your token issuer does not support this feature, you can turn it off as outlined in the configuration section below.
+:::
+
+## Anonymous Access
+
+Weaviate can be configured to accept anonymous requests. This is strongly discouraged except for development or evaluation purposes.
+
+Users that send requests without explicit authentication are authenticated as `user: anonymous`.
+
+You can use the authorization plugin to specify which permissions to apply to this `anonymous` user. If anonymous access is disabled altogether, any request without an allowed authentication scheme returns `401 Unauthorized`.
+
+### Anonymous access: Docker
+
+To enable anonymous access in Docker Compose, add the following environment variable to your configuration file:
+
+```yaml
+services:
+ weaviate:
+ ...
+ environment:
+ ...
+ AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
+```
+
+### Anonymous access: Kubernetes
+
+To enable anonymous access in Kubernetes, add the following configuration to your `values.yaml` file:
+
+```yaml
+authentication:
+ anonymous_access:
+ enabled: true
+```
+
+## Client-side Usage
+
+### API key
+
+import APIKeyUsage from '/_includes/clients/api-token-usage.mdx';
+
+
+
+We recommend using a client library to authenticate against Weaviate. See [How-to: Connect](../connections/index.mdx) pages for more information.
+
+### OIDC
The OIDC standard allows for many different methods *(flows)* of obtaining tokens. The appropriate method can vary depending on your situation, including configurations at the token issuer, and your requirements.
@@ -239,9 +356,6 @@ import OIDCExamples from '/_includes/code/connections/oidc-connect.mdx';
-
-
-
### Get and pass tokens manually
@@ -357,31 +471,10 @@ For example, the cURL command looks like this:
curl https://localhost:8080/v1/objects -H "Authorization: Bearer ${WEAVIATE_API_KEY}" | jq
```
-
-
-## Anonymous access
-By default, Weaviate is configured to accept requests without any authentication headers or parameters. Users that send requests without explicit authentication are authenticated as `user: anonymous`.
-
-You can use the authorization plugin to specify which
-permissions to apply to anonymous users. If anonymous access is disabled altogether,
-any request without an allowed authentication scheme returns `401 Unauthorized`.
-
-### Configuration
-Anonymous access can be enabled or disabled in the configuration yaml using the environment variable shown below:
-
-```yaml
-services:
- weaviate:
- ...
- environment:
- ...
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
-```
-
-### How to use
-
-Send REST requests to Weaviate without any additional authentication headers or parameters.
+## Further resources
+- [Configuration: Authorization and RBAC](./authorization.md)
+- [References: Environment variables / Authentication and Authorization](../config-refs/env-vars.md#authentication-and-authorization)
## Questions and feedback
diff --git a/developers/weaviate/configuration/authorization.md b/developers/weaviate/configuration/authorization.md
index 056b803379..962eaa6616 100644
--- a/developers/weaviate/configuration/authorization.md
+++ b/developers/weaviate/configuration/authorization.md
@@ -1,35 +1,129 @@
---
-title: Authorization
+title: Authorization & RBAC
sidebar_position: 35
image: og/docs/configuration.jpg
# tags: ['authorization']
---
-The authorization plugin allows Weaviate to provide differentiated access to users based on their [authentication](./authentication.md) status. Along with allowing or disallowing anonymous access, Weaviate can differentiate between a user who is in the admin list, or on the read-only list.
+:::info Authentication and authorization
+Authentication and authorization are closely related concepts, and sometimes abbreviated as `AuthN` and `AuthZ`. Authentication (`AuthN`) is the process of verifying the identity of a user, while authorization (`AuthZ`) is the process of determining what permissions the user has.
+:::
-## Admin list
+Weaviate provides differentiated access through [authorization](./authorization.md) levels, based on the user's [authentication](./authentication.md) status. A user can be granted admin permission, read-only permission, or no permission at all. From `v1.28.0`, Weaviate also supports Role-Based Access Control (RBAC) for more fine-grained control over user permissions.
+
+The following diagram illustrates the flow of a user request through the authentication and authorization process:
+
+```mermaid
+flowchart TB
+ User(["Authenticated User"]) --> AuthScheme{"Authorization\nScheme?"}
+
+ subgraph rbac ["RBAC Authorization"]
+ direction TB
+ AdminRole["Admin Role"]
+ ViewerRole["Viewer Role"]
+ CustomRole["Custom Roles"]
+
+ Perms1["Full Access\nAll Operations"]
+ Perms2["Read-only\nAccess"]
+ Perms3["Custom\nPermissions"]
+
+ AdminRole --> Perms1
+ ViewerRole --> Perms2
+ CustomRole --> Perms3
+ end
-The admin list relies on the configured `Authentication Schema` to correctly identify
-the user. On each request, a check against a pre-configured admin list is done.
-If the user is contained in this list, they get all permissions. If they aren't,
-they get none. It is not currently possible to assign only some rights to a specific user.
+ subgraph adminlist ["Admin List Authorization"]
+ direction TB
+ AdminUser["Admin Users"]
+ ReadOnly["Read-only Users"]
+ AnonUser["Anonymous Users\n(Optional)"]
-## Read-only list
+ AllPerms["Full Access\nAll Operations"]
+ ReadPerms["Read-only\nAccess"]
+
+ AdminUser --> AllPerms
+ ReadOnly --> ReadPerms
+ AnonUser -.->|"If enabled"| AllPerms
+ AnonUser -.->|"If enabled"| ReadPerms
+ end
+
+ subgraph undiffer ["Undifferentiated Access"]
+ AllAccess["Full Access\nAll Operations"]
+ end
+
+ AuthScheme -->|"RBAC"| rbac
+ AuthScheme -->|"Admin List"| adminlist
+ AuthScheme -->|"Undifferentiated"| undiffer
+
+ %% Style nodes
+ style User fill:#f9f9f9,stroke:#666
+ style AuthScheme fill:#f5f5f5,stroke:#666
+ style AnonUser fill:#f9f9f9,stroke:#666,stroke-dasharray: 5 5
+
+ %% Style subgraphs
+ style rbac fill:#e6f3ff,stroke:#4a90e2
+ style adminlist fill:#e6ffe6,stroke:#2ea44f
+ style undiffer fill:#fff0e6,stroke:#ff9933
+```
-Other than a list of admins, it is also possible to specify a list of read-only users.
-Those users have permissions on all `get` and `list` operations, but no other
-permissions.
+## Available authorization schemes
-If a subject is present on both the admin and read-only list, Weaviate will
-throw an error on startup due to the invalid configuration.
+The following authorization schemes are available in Weaviate:
-## Usage
+- [Role-Based Access Control (RBAC)](#role-based-access-control-rbac)
+- [Admin list](#admin-list)
+- [Undifferentiated access](#undifferentiated-access)
-:::info Using Kubernetes?
-See [this page](../installation/kubernetes.md#authentication-and-authorization) for how to set up `values.yaml` for authentication & authorization.
+In the Admin list authorization scheme, [anonymous users](#anonymous-users) can be granted permissions.
+
+The way to configure authorization differs by your deployment method, depending on whether you are running Weaviate in Docker or Kubernetes. Below, we provide examples for both.
+
+:::info What about Weaviate Cloud (WCD)?
+For Weaviate Cloud (WCD) instances, authorization is pre-configured with Admin list access. You can [authenticate against Weaviate](../connections/connect-cloud.mdx) with your WCD credentials using OIDC, or [with admin or read-only API keys](/developers/wcs/platform/manage-api-keys).
+
+
+RBAC access will be available in WCD in a future release.
+:::
+
+## Role-Based Access Control (RBAC)
+
+:::caution RBAC technical preview
+Role-based access control (RBAC) is added `v1.28` as a **technical preview**. This means that the feature is still under development and may change in future releases, including potential breaking changes. **We do not recommend using this feature in production environments at this time.**
+
+
+We appreciate [your feedback](https://forum.weaviate.io/) on this feature.
:::
-Configure the admin plugin in the configuration yaml like so:
+Role-based access control (RBAC) is a method of restricting access to resources based on the roles of users. In Weaviate, RBAC allows you to define [roles](./roles.md) and assign permissions to those roles. Users can then be assigned to roles, and inherit the permissions associated with those roles.
+
+Weaviate comes with a set of predefined roles. These roles are:
+
+- `admin`: The admin role has full access to all resources in Weaviate.
+- `viewer`: The viewer role has read-only access to all resources in Weaviate.
+
+They are assigned to users based on the Weaviate configuration file. Once a user is assigned a predefined role, their permissions are set accordingly. These roles cannot be modified, and these users cannot have additional roles assigned to them.
+
+For more information on roles and permissions, see [this page](./roles.md).
+
+:::tip At least one admin user required
+When using RBAC, you must specify at least one user with the build-in admin role. This user will have full permissions to perform all actions in Weaviate. Otherwise, Weaviate will not start.
+:::
+
+### Discussions: RBAC and performance
+
+RBAC is a powerful feature that allows you to define fine-grained access control policies. However, it can also have an impact on performance as each operation must be checked against the user's permissions.
+
+The exact performance impact will depend on your set up and use case. In our internal testing, the most significant performance impact was seen for object creation operations.
+
+We did not observe additional performance penalities for using custom roles over the built-in roles.
+
+Here are some tips to optimize performance when using RBAC:
+- Monitor object creation performance
+- Use a high availability (i.e. 3+ nodes) setup to distribute the load
+
+### RBAC: Docker
+
+RBAC authorization can be configured using environment variables. In Docker Compose, set them in the configuration file (`docker-compose.yml`) such as in the following example:
```yaml
services:
@@ -37,24 +131,233 @@ services:
...
environment:
...
+ # Example authentication configuration using API keys
+ # OIDC access can also be used with RBAC
+ AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
+ AUTHENTICATION_APIKEY_ENABLED: 'true'
+ AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'viewer-key,admin-key,other-key'
+ AUTHENTICATION_APIKEY_USERS: 'viewer-user,admin-user,other-user'
+
+ # Authorization configuration
+ # Enable RBAC
+ AUTHORIZATION_ENABLE_RBAC: 'true'
+
+ # Provide pre-configured roles to users
+ # This assumes that the relevant user has been authenticated and identified
+ #
+ # You MUST define at least one admin user
+ AUTHORIZATION_ADMIN_USERS: 'admin-user'
+ AUTHORIZATION_VIEWER_USERS: 'viewer-user'
+```
+
+This configuration:
+- Enables RBAC
+- Configures `admin-user` as a user with built-in admin permissions
+- Configures `viewer-user` as a user with built-in viewer permissions
+- Configures `other-user` as a user with no built-in permissions
+
+The `other-user` can now be assigned custom roles and permissions using the [RBAC Roles API](./roles.md).
+
+### RBAC: Kubernetes
+
+For Kubernetes deployments using Helm, API key authentication can be configured in the `values.yaml` file under the `authorization` section. Here's an example configuration:
+
+```yaml
+# Example authentication configuration using API keys
+authentication:
+ anonymous_access:
+ enabled: false
+ apikey:
+ enabled: true
+ allowed_keys:
+ - admin-key
+ - viewer-key
+ - other-key
+ users:
+ - admin-user
+ - viewer-user
+ - other-user
+
+# Authorization configuration
+authorization:
+ rbac:
+ # Enable RBAC
+ enabled: true
+ # Provide pre-configured roles to users
+ # This assumes that the relevant user has been authenticated and identified
+ #
+ # You MUST define at least one admin user
+ admins:
+ - admin-user
+ viewers:
+ - viewer-user
+```
+
+This configuration:
+- Enables RBAC
+- Configures `admin-user` as a user with built-in admin permissions
+- Configures `viewer-user` as a user with built-in viewer permissions
+- Configures `other-user` as a user with no built-in permissions
+
+The `other-user` can now be assigned custom roles and permissions using the [RBAC Roles API](./roles.md).
+
+## Admin list
+
+The "Admin list" authorization scheme allows you to specify a list of admin users with full permissions to perform all actions in Weaviate, and a list of read-only users with permissions to perform only read operations.
+
+These permissions cannot be customized or extended. For more fine-grained control over user permissions, use [RBAC](#role-based-access-control-rbac) instead.
+
+Admin list authorization scheme cannot be used in combination with RBAC.
+
+### Admin list: Docker
+
+Admin list authorization can be configured using environment variables. In Docker Compose, set them in the configuration file (`docker-compose.yml`) such as in the following example:
+
+```yaml
+services:
+ weaviate:
+ ...
+ environment:
+ ...
+ # Example authentication configuration using API keys
+ # OIDC access can also be used with RBAC
+ AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
+ AUTHENTICATION_APIKEY_ENABLED: 'true'
+ AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'viewer-key,admin-key,other-key'
+ AUTHENTICATION_APIKEY_USERS: 'viewer-user,admin-user,other-user'
+
+ # Authorization configuration
+ # Enable admin list
AUTHORIZATION_ADMINLIST_ENABLED: 'true'
- AUTHORIZATION_ADMINLIST_USERS: 'jane@doe.com,john@doe.com'
- AUTHORIZATION_ADMINLIST_READONLY_USERS: 'ian-smith,roberta@doe.com'
+
+ # Provide pre-configured roles to users
+ # This assumes that the relevant user has been authenticated and identified
+ #
+ # You MUST define at least one admin user
+ AUTHORIZATION_ADMINLIST_USERS: 'admin-user'
+ AUTHORIZATION_ADMINLIST_READONLY_USERS: 'viewer-user'
```
-The above would enable the plugin and make users `jane@doe.com` and
-`john@doe.com` admins. Additionally, users `ian-smith` and `roberta@doe.com` will have read-only permissions.
+This configuration:
+- Enables Admin list authorization
+- Configures `admin-user` as a user with built-in admin permissions
+- Configures `viewer-user` as a user with built-in viewer permissions
-:::note User identifier
-As shown in the above example, any string can be used to identify the user. This depends on what you configured in the authentication settings. For example, OIDC users may be identified by their email address by setting `AUTHENTICATION_OIDC_USERNAME_CLAIM` as `email`, whereas API key-authenticated users may be identified as a plain string such as `ian-smith`.
-:::
+Note that in this configuration, `other-user` has no permissions.
+
+### Admin list: Kubernetes
+
+For Kubernetes deployments using Helm, API key authentication can be configured in the `values.yaml` file under the `authorization` section. Here's an example configuration:
+
+```yaml
+# Example authentication configuration using API keys
+authentication:
+ anonymous_access:
+ enabled: false
+ apikey:
+ enabled: true
+ allowed_keys:
+ - admin-key
+ - viewer-key
+ - other-key
+ users:
+ - admin-user
+ - viewer-user
+ - other-user
+
+# Authorization configuration
+authorization:
+ admin_list:
+ # Enable admin list
+ enabled: true
+
+ # Provide pre-configured roles to users
+ # This assumes that the relevant user has been authenticated and identified
+ #
+ # You MUST define at least one admin user
+ users:
+ - admin-user
+ read_only_users:
+ - viewer-user
+```
+
+### Anonymous users
+
+Anonymous users are identified as `anonymous` in Weaviate. In the Admin list authorization scheme, you can apply permissions to anonymous users. The RBAC authorization scheme is not compatible with anonymous users.
+
+To confer permissions to anonymous users in the Admin list scheme, you can use the `anonymous` keyword in the configuration as shown below.
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+
+
+
+
+
+```yaml
+services:
+ weaviate:
+ ...
+ environment:
+ ...
+ # Enable anonymous access
+ AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true'
+
+ # Configure admin user API key
+ AUTHORIZATION_ADMINLIST_ENABLED: 'true'
+ AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'admin-key'
+ AUTHENTICATION_APIKEY_USERS: 'admin-user'
+
+ # Enable admin list and provide admin access to "admin-user" only
+ AUTHORIZATION_ADMINLIST_USERS: 'admin-user'
+ # Provide read-only access to anonymous users
+ AUTHORIZATION_ADMINLIST_READONLY_USERS: 'anonymous'
+```
+
+
+
+
+
+```yaml
+# Example authentication configuration using API keys
+authentication:
+ # Enable anonymous access
+ anonymous_access:
+ enabled: true
+
+ # Enable admin list and configure admin user API key
+ apikey:
+ enabled: true
+ allowed_keys:
+ - admin-key
+ users:
+ - admin-user
+
+authorization:
+ # Enable admin list and provide admin access to "admin-user" only
+ admin_list:
+ # Enable admin list
+ enabled: true
+ users:
+ - admin-user
+ # Provide read-only access to anonymous users
+ read_only_users:
+ - anonymous
+```
+
+
+
+
+
+## Undifferentiated access
-## RBAC
+Weaviate can be configured to provide undifferentiated access, by disabling authentication for example and enabling anonymous access. This configuration is strongly discouraged except for development or evaluation purposes.
-More fine-grained Role-Based Access Control (RBAC) coming soon. As of now the
-only possible distinction is between Admins (CRUD), Read-Only Users and
-entirely unauthorized users.
+## Further resources
+- [Configuration: Authentication](./authentication.md)
+- [Configuration: RBAC Roles](./roles.md)
+- [References: Environment variables / Authentication and Authorization](../config-refs/env-vars.md#authentication-and-authorization)
## Questions and feedback
diff --git a/developers/weaviate/configuration/backups.md b/developers/weaviate/configuration/backups.md
index c3ff806bae..369830a877 100644
--- a/developers/weaviate/configuration/backups.md
+++ b/developers/weaviate/configuration/backups.md
@@ -20,47 +20,154 @@ import CurlCode from '!!raw-loader!/_includes/code/howto/configure.backups.sh';
Weaviate's Backup feature is designed to work natively with cloud technology. Most notably, it allows:
-* Seamless integration with widely-used cloud blob storage, such as AWS S3, GCS, or Azure
+* Seamless integration with widely-used cloud blob storage, such as AWS S3, GCS, or Azure Storage
* Backup and Restore between different storage providers
-* Single-command backup and restore from the REST API
+* Single-command backup and restore
* Choice of backing up an entire instance, or selected collections only
-* Zero downtime & minimal impact for your users when backups are running
-* Easy Migration to new environments
+* Easy migration to new environments
-:::caution Restoring backups from `v1.23.12` and older
-If you are running Weaviate `v1.23.12` or older, first **[update Weaviate](../more-resources/migration/index.md) to version 1.23.13** or higher before restoring a backup.
-Versions prior to `v1.23.13` had a bug that could lead to data not being stored correctly from a backup of your data.
-:::
+:::caution Important backup considerations
-:::note
-_Single node backup is available starting in Weaviate `v1.15`. Multi-node backups is available starting in `v1.16`_.
+- **Version Requirements**: If you are running Weaviate `v1.23.12` or older, you must [update](../more-resources/migration/index.md) to `v1.23.13` or higher before restoring a backup to prevent data corruption.
+- **[Multi-tenancy](../concepts/data.md#multi-tenancy) limitations**: Backups will only include `active` tenants. `Inactive` or `offloaded` tenants in multi-tenant collections will not be included. Be sure to [activate](../manage-data/multi-tenancy.md#activate-tenant) any required tenants before creating a backup.
:::
-:::caution Backups do not include inactive or offloaded tenants
-Backups of [multi-tenant collections](../concepts/data.md#multi-tenancy) will only include `active` tenants, and not `inactive` or `offloaded` tenants. [Activate tenants](../manage-data/multi-tenancy.md#activate-tenant) before creating a backup to ensure all data is included.
-:::
+## Backup Quickstart
+
+Get started with Weaviate backups in minutes using the local filesystem, which is a great option for development and testing.
+
+### 1. Configure Weaviate
+
+Add these environment variables to your Weaviate configuration (e.g. Docker or Kubernetes configuration file):
+
+```yaml
+# Enable the filesystem backup module
+ENABLE_MODULES=backup-filesystem
+
+# Set backup location (e.g. within a Docker container or on a Kubernetes pod)
+BACKUP_FILESYSTEM_PATH=/var/lib/weaviate/backups
+```
+
+### 2. Start a backup
+
+Restart Weaviate to apply the new configuration. Then, you are ready to start a backup:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+That's all there is to getting started with backups in Weaviate. The backup will be stored in the specified location on the local filesystem.
+
+You can also:
+- [Restore the backup](#restore-backup) to a Weaviate instance
+- [Check the status](#asynchronous-status-checking) of the backup (if you did not wait for completion)
+- [Cancel the backup](#cancel-backup) if needed
+
+Note that local backups are not suitable for production environments. For production, use a cloud provider like S3, GCS, or Azure Storage.
+
+The following sections provide more details on how to configure and use backups in Weaviate.
## Configuration
-In order to perform backups, a backup provider module must be activated. Multiple backup providers can be active at the same time. Currently `backup-s3`, `backup-gcs`, `backup-azure`, and `backup-filesystem` modules are available for S3, GCS, Azure or filesystem backups respectively.
+Weaviate supports four backup storage options:
-As it is built on Weaviate's [module system](/developers/weaviate/configuration/modules.md), additional providers can be added in the future.
+| Provider | Module Name | Best For | Multi-Node Support |
+|----------|------------|-----------|-------------------|
+| AWS S3 | `backup-s3` | Production deployments, AWS environments | Yes |
+| Google Cloud Storage | `backup-gcs` | Production deployments, GCP environments | Yes |
+| Azure Storage | `backup-azure` | Production deployments, Azure environments | Yes |
+| Local Filesystem | `backup-filesystem` | Development, testing, single-node setups | No |
-All service-discovery and authentication-related configuration is set using
-environment variables.
+To use any provider:
+1. Enable the module
+ - Add the module name to the `ENABLE_MODULES` environment variable
+ - On Weaviate Cloud instances, a relevant default module is enabled
+2. Configure the required modules
+ - Option 1: Set the necessary environment variables
+ - Option 2 (Kubernetes): Configure the [Helm chart values](#kubernetes-configuration)
+
+Note multiple providers can be enabled simultaneously
### S3 (AWS or S3-compatible)
-Use the `backup-s3` module to enable backing up to and restoring from any S3-compatible blob storage. This includes AWS S3, and MinIO.
+- Works with AWS S3 and S3-compatible services (e.g., MinIO)
+- Supports multi-node deployments
+- Recommended for production use
+
+To configure `backup-s3`, you need to enable the module and provide the necessary configuration.
-To enable the module, add its name to the `ENABLE_MODULES` environment variable. Modules are comma-separated. To enable the module along with the `text2vec-transformers` module for example, set:
+#### Enable module
+
+Add `backup-s3` to the `ENABLE_MODULES` environment variable. For example, to enable the S3 module along with the `text2vec-cohere` module, set:
```
-ENABLE_MODULES=backup-s3,text2vec-transformers
+ENABLE_MODULES=backup-s3,text2vec-cohere
```
#### S3 Configuration (vendor-agnostic)
-In addition to enabling the module, you need to configure it using environment variables. This configuration applies to any S3-compatible backend.
+
+This configuration applies to any S3-compatible backend.
| Environment variable | Required | Description |
| --- | --- | --- |
@@ -71,7 +178,7 @@ In addition to enabling the module, you need to configure it using environment v
#### S3 Configuration (AWS-specific)
-You must provide Weaviate with AWS authentication details. You can choose between access-key or ARN-based authentication:
+For AWS, provide Weaviate with authentication details. You can choose between access-key or ARN-based authentication:
#### Option 1: With IAM and ARN roles
@@ -88,16 +195,20 @@ The backup module will first try to authenticate itself using AWS IAM. If the au
### GCS (Google Cloud Storage)
-Use the `backup-gcs` module to enable backing up to and restoring from any Google Cloud Storage bucket.
+- Works with Google Cloud Storage
+- Supports multi-node deployments
+- Recommended for production use
+
+To configure `backup-gcs`, you need to enable the module and provide the necessary configuration.
-To enable the module, add its name to the `ENABLE_MODULES` environment variable. Modules are comma-separated. To enable the module along with the `text2vec-transformers` module for example, set:
+#### Enable module
+
+Add `backup-gcs` to the `ENABLE_MODULES` environment variable. For example, to enable the S3 module along with the `text2vec-cohere` module, set:
```
-ENABLE_MODULES=backup-gcs,text2vec-transformers
+ENABLE_MODULES=backup-gcs,text2vec-cohere
```
-In addition to enabling the module, you need to configure it using environment variables. There are bucket-related variables, as well as credential-related variables.
-
#### GCS bucket-related variables
| Environment variable | Required | Description |
@@ -121,12 +232,18 @@ This makes it easy to use the same module in different setups. For example, you
### Azure Storage
-Use the `backup-azure` module to enable backing up to and restoring from any Microsoft Azure Storage container.
+- Works with Microsoft Azure Storage
+- Supports multi-node deployments
+- Recommended for production use
-To enable the module, add its name to the `ENABLE_MODULES` environment variable. Modules are comma-separated. To enable the module along with the `text2vec-transformers` module for example, set:
+To configure `backup-azure`, you need to enable the module and provide the necessary configuration.
+
+#### Enable module
+
+Add `backup-azure` to the `ENABLE_MODULES` environment variable. For example, to enable the Azure module along with the `text2vec-cohere` module, set:
```
-ENABLE_MODULES=backup-azure,text2vec-transformers
+ENABLE_MODULES=backup-azure,text2vec-cohere
```
In addition to enabling the module, you need to configure it using environment variables. There are container-related variables, as well as credential-related variables.
@@ -162,20 +279,22 @@ At least one of `AZURE_STORAGE_CONNECTION_STRING` or `AZURE_STORAGE_ACCOUNT` mus
### Filesystem
-:::caution `backup-filesystem` - limitations
-`backup-filesystem` is only compatible with single-node backups. Use `backup-gcs` or `backup-s3` if support for multi-node backups is needed.
+- Works with Google Cloud Storage
+- Supports single-node deployments only
+- Not recommended for production use
-The filesystem provider is not intended for production use, as its availability is directly tied to the node on which it operates.
-:::
+To configure `backup-filesystem`, you need to enable the module and provide the necessary configuration.
-Instead of backing up to a remote backend, you can also back up to the local filesystem. This may be helpful during development, for example to be able to quickly exchange setups, or to save a state from accidental future changes.
+#### Enable module
-To allow backups to the local filesystem, add `backup-filesystem` to the `ENABLE_MODULES` environment variable. Modules are comma-separated. To enable the module along with the `text2vec-transformers` module for example, set:
+Add `backup-filesystem` to the `ENABLE_MODULES` environment variable. For example, to enable the S3 module along with the `text2vec-cohere` module, set:
```
-ENABLE_MODULES=backup-filesystem,text2vec-transformers
+ENABLE_MODULES=backup-filesystem,text2vec-cohere
```
+#### Backup Configuration
+
In addition to enabling the module, you need to configure it using environment variables:
| Environment variable | Required | Description |
@@ -184,53 +303,28 @@ In addition to enabling the module, you need to configure it using environment v
### Other Backup Backends
-Weaviate uses its [module system](/developers/weaviate/configuration/modules.md) to decouple the backup orchestration from the remote backup storage backends. It is easy to add new providers and use them with the existing backup API. If you are missing your desired backup module, you can open a feature request or contribute it yourself. For either option, join our Slack community to have a quick chat with us on how to get started.
-
+If you are missing your desired backup module, you can open a feature request on the [Weaviate GitHub repository](https://github.com/weaviate/weaviate/issues). We are also open to community contributions for new backup modules.
## API
-### Create Backup
-
-Once the modules are enabled and the configuration is provided, you can start a backup on any running instance with a single HTTP request.
-
-#### Method and URL
+For REST API documentation, see the [Backups section](https://weaviate.io/developers/weaviate/api/rest#tag/backups).
-```js
-POST /v1/backups/{backend}
-```
-
-#### Parameters
-
-##### URL Parameters
+### Create Backup
-| Name | Type | Required | Description |
-| ---- | ---- | ---- | ---- |
-| `backend` | string | yes | The name of the backup provider module without the `backup-` prefix, for example `s3`, `gcs`, `azure`, or `filesystem`. |
+Once the modules are enabled and the configuration is provided, you can start a backup on any running instance with a single request.
-##### Request Body
+You can choose to include or exclude specific collections in the backup. If you do not specify any collections, all collections are included by default.
-The request takes a JSON object with the following properties:
+The `include` and `exclude` options are mutually exclusive. You can set none or exactly one of those.
-| Name | Type | Required | Description |
-| ---- | ---- | ---- | ---- |
-| `id` | string (lowercase letters, numbers, underscore, minus) | yes | The id of the backup. This string must be provided on all future requests, such as status checking or restoration. |
-| `include` | list of strings | no | An optional list of collection names to be included in the backup. If not set, all collections are included. |
-| `exclude` | list of strings | no | An optional list of collection names to be excluded from the backup. If not set, no collections are excluded. |
-| `config` | object | no | An optional object to configure the backup. If not set, it will assign defaults from config table.|
+##### Available `config` object properties
-:::note
-You cannot set `include` and `exclude` at the same time. Set none or exactly one of those.
-:::
-
-##### Config object properties
| name | type | required | default | description |
| ---- | ---- | ---- | ---- |---- |
| `cpuPercentage` | number | no | `50%` | An optional integer to set the desired CPU core utilization ranging from 1%-80%. |
| `chunkSize` | number | no | `128MB` | An optional integer represents the desired size for chunks. Weaviate will attempt to come close the specified size, with a minimum of 2MB, default of 128MB, and a maximum of 512MB.|
-| `compressionLevel`| string | no | `DefaultCompression` | An optional compression level used by compression algorithm from options. `DefaultCompression`, `BestSpeed`, `BestCompression`|
-:::note
-Weaviate uses [gzip compression](https://pkg.go.dev/compress/gzip#pkg-constants) by default.
-:::
+| `compressionLevel`| string | no | `DefaultCompression` | An optional compression level used by compression algorithm from options. (`DefaultCompression`, `BestSpeed`, `BestCompression`) Weaviate uses [gzip compression](https://pkg.go.dev/compress/gzip#pkg-constants) by default. |
+
@@ -264,7 +358,7 @@ Weaviate uses [gzip compression](https://pkg.go.dev/compress/gzip#pkg-constants)
text={TSCodeLegacy}
startMarker="// START CreateBackup"
endMarker="// END CreateBackup"
- language="ts"
+ language="tsv2"
/>
@@ -335,7 +429,7 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the backup
text={PyCodeV3}
startMarker="# START StatusCreateBackup"
endMarker="# END StatusCreateBackup"
- language="py"
+ language="pyv3"
/>
@@ -353,7 +447,7 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the backup
text={TSCodeLegacy}
startMarker="// START StatusCreateBackup"
endMarker="// END StatusCreateBackup"
- language="ts"
+ language="tsv2"
/>
@@ -411,7 +505,10 @@ An ongoing backup can be cancelled at any time. The backup process will be stopp
This operation is particularly useful if you have started a backup by accident, or if you would like to stop a backup that is taking too long.
### Restore Backup
-You can restore any backup to any machine as long as the name and number of nodes between source and target are identical. The backup does not need to be created on the same instance. Once a backup backend is configured, you can restore a backup with a single HTTP request.
+
+You can restore any backup to any machine as long as the name and number of nodes between source and target are identical. The backup does not need to be created on the same instance. Once a backup backend is configured, you can restore a backup with a single request.
+
+As with backup creation, the `include` and `exclude` options are mutually exclusive. You can set none or exactly one of those. In a restore operation, `include` and `exclude` are relative to the collections contained in the backup. The restore process is not aware of collections that existed on the source machine if they were not part of the backup.
Note that a restore fails if any of the collections already exist on this instance.
@@ -420,35 +517,8 @@ If you are running Weaviate `v1.23.12` or older, first **[update Weaviate](../mo
Versions prior to `v1.23.13` had a bug that could lead to data not being stored correctly from a backup of your data.
:::
-#### Method and URL
+##### Available `config` object properties
-```js
-POST /v1/backups/{backend}/{backup_id}/restore
-```
-
-#### Parameters
-
-##### URL Parameters
-
-| Name | Type | Required | Description |
-| ---- | ---- | ---- | ---- |
-| `backend` | string | yes | The name of the backup provider module without the `backup-` prefix, for example `s3`, `gcs`, or `filesystem`. |
-| `backup_id` | string | yes | The user-provided backup identifier that was used when sending the request to create the backup. |
-
-##### Request Body
-The request takes a json object with the following properties:
-
-| Name | Type | Required | Description |
-| ---- | ---- | ---- | ---- |
-| `include` | list of strings | no | An optional list of collection names to be included in the backup. If not set, all collections are included. |
-| `exclude` | list of strings | no | An optional list of collection names to be excluded from the backup. If not set, no collections are excluded. |
-| `config` | object | no | An optional object to configure the restore. If not set, it will assign defaults from config table.|
-
-*Note 1: You cannot set `include` and `exclude` at the same time. Set none or exactly one of those.*
-
-*Note 2: `include` and `exclude` are relative to the collections contained in the backup. The restore process does not know which collections existed on the source machine if they were not part of the backup.*
-
-##### Config object properties
| name | type | required | default | description |
| ---- | ---- | ---- | ---- |---- |
| `cpuPercentage` | number | no | `50%` | An optional integer to set the desired CPU core utilization ranging from 1%-80%. |
@@ -467,7 +537,7 @@ The request takes a json object with the following properties:
text={PyCodeV3}
startMarker="# START RestoreBackup"
endMarker="# END RestoreBackup"
- language="py"
+ language="pyv3"
/>
@@ -485,7 +555,7 @@ The request takes a json object with the following properties:
text={TSCodeLegacy}
startMarker="// START RestoreBackup"
endMarker="// END RestoreBackup"
- language="ts"
+ language="tsv2"
/>
@@ -524,19 +594,6 @@ All client implementations have a "wait for completion" option which will poll t
If you set the "wait for completion" option to false, you can also check the status yourself using the Backup Restore Status API.
-```js
-GET /v1/backups/{backend}/{backup_id}/restore
-```
-
-#### Parameters
-
-##### URL Parameters
-
-| Name | Type | Required | Description |
-| ---- | ---- | ---- | ---- |
-| `backend` | string | yes | The name of the backup provider module without the `backup-` prefix, for example `s3`, `gcs`, or `filesystem`. |
-| `backup_id` | string | yes | The user-provided backup identifier that was used when sending the requests to create and restore the backup. |
-
The response contains a `"status"` field. If the status is `SUCCESS`, the restore is complete. If the status is `FAILED`, an additional error is provided.
@@ -553,7 +610,7 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the restor
text={PyCodeV3}
startMarker="# START StatusRestoreBackup"
endMarker="# END StatusRestoreBackup"
- language="py"
+ language="pyv3"
/>
@@ -571,7 +628,7 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the restor
text={TSCodeLegacy}
startMarker="// START StatusRestoreBackup"
endMarker="// END StatusRestoreBackup"
- language="ts"
+ language="tsv2"
/>
@@ -603,6 +660,13 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the restor
+## Kubernetes configuration
+
+When running Weaviate on Kubernetes, you can configure the backup provider using Helm chart values.
+
+These values are available under the `backups` key in the `values.yaml` file. Refer to the inline documentation in the `values.yaml` file for more information.
+
+
## Technical Considerations
@@ -610,7 +674,7 @@ The response contains a `"status"` field. If the status is `SUCCESS`, the restor
The backup process is designed to be minimally invasive to a running setup. Even on very large setups, where terabytes of data need to be copied, Weaviate stays fully usable during backup. It even accepts write requests while a backup process is running. This sections explains how backups work under the hood and why Weaviate can safely accept writes while a backup is copied.
-Weaviate uses a custom [LSM Store](../concepts/storage.md#object-and-inverted-index-store) for it's object store and inverted index. LSM stores are a hybrid of immutable disk segments and an in-memory structure called a memtable that accepts all writes (including updates and deletes). Most of the time, files on disk are immutable, there are only three situations where files are changed:
+Weaviate uses a custom [LSM Store](../concepts/storage.md#object-and-inverted-index-store) for its object store and inverted index. LSM stores are a hybrid of immutable disk segments and an in-memory structure called a memtable that accepts all writes (including updates and deletes). Most of the time, files on disk are immutable, there are only three situations where files are changed:
1. Anytime a memtable is flushed. This creates a new segment. Existing segments are not changed.
2. Any write into the memtable is also written into a Write-Ahead-Log (WAL). The WAL is only needed for disaster-recovery. Once a segment has been orderly flushed, the WAL can be discarded.
@@ -640,6 +704,12 @@ The flexibility around backup providers opens up new use cases. Besides using th
For example, consider the following situation: You would like to do a load test on production data. If you would do the load test in production it might affect users. An easy way to get meaningful results without affecting uses it to duplicate your entire environment. Once the new production-like "loadtest" environment is up, create a backup from your production environment and restore it into your "loadtest" environment. This even works if the production environment is running on a completely different cloud provider than the new environment.
+## Troubleshooting and notes
+
+- Single node backup is available starting in Weaviate `v1.15`. Multi-node backups is available starting in `v1.16`.
+- In some cases, backups can take a long time, or get "stuck", causing Weaviate to be unresponsive. If this happens, you can [cancel the backup](#cancel-backup) and try again.
+- If a backup module is misconfigured, such as having an invalid backup path, it can cause Weaviate to not start. Review the system logs for any errors.
+
## Related pages
- [References: REST API: Backups](/developers/weaviate/api/rest#tag/backups)
diff --git a/developers/weaviate/configuration/compression/bq-compression.md b/developers/weaviate/configuration/compression/bq-compression.md
index 21c0d6a01b..ba70bbb98c 100644
--- a/developers/weaviate/configuration/compression/bq-compression.md
+++ b/developers/weaviate/configuration/compression/bq-compression.md
@@ -53,7 +53,7 @@ This can be done by setting the `vector_index_config` of the collection to enabl
text={PyCodeV3}
startMarker="# START EnableBQ"
endMarker="# END EnableBQ"
- language="py"
+ language="pyv3"
/>
@@ -71,7 +71,7 @@ This can be done by setting the `vector_index_config` of the collection to enabl
text={TSCodeLegacy}
startMarker="// START EnableBQ"
endMarker="// END EnableBQ"
- language="ts"
+ language="tsv2"
/>
@@ -124,7 +124,7 @@ For example:
text={PyCodeV3}
startMarker="# START BQWithOptions"
endMarker="# END BQWithOptions"
- language="py"
+ language="pyv3"
/>
@@ -142,7 +142,7 @@ For example:
text={TSCodeLegacy}
startMarker="// START BQWithOptions"
endMarker="// END BQWithOptions"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/configuration/compression/pq-compression.md b/developers/weaviate/configuration/compression/pq-compression.md
index 7f2b37db9c..1541371d8e 100644
--- a/developers/weaviate/configuration/compression/pq-compression.md
+++ b/developers/weaviate/configuration/compression/pq-compression.md
@@ -71,7 +71,7 @@ To configure PQ in a collection, use the [PQ parameters](./pq-compression.md#pq-
text={PyCodeV3}
startMarker="# START CollectionWithAutoPQ"
endMarker="# END CollectionWithAutoPQ"
- language="py"
+ language="pyv3"
/>
@@ -89,7 +89,7 @@ To configure PQ in a collection, use the [PQ parameters](./pq-compression.md#pq-
text={TSCodeLegacy}
startMarker="// START CollectionWithAutoPQ"
endMarker="// END CollectionWithAutoPQ"
- language="ts"
+ language="tsv2"
/>
@@ -144,7 +144,7 @@ Follow these steps to manually enable PQ.
text={PyCodeV3}
startMarker="# START InitialSchema"
endMarker="# END InitialSchema"
- language="py"
+ language="pyv3"
/>
@@ -162,7 +162,7 @@ Follow these steps to manually enable PQ.
text={TSCodeLegacy}
startMarker="// START InitClassDef"
endMarker="// END InitClassDef"
- language="ts"
+ language="tsv2"
/>
@@ -218,7 +218,7 @@ To enable PQ, update your collection definition as shown below. For additional c
text={PyCodeV3}
startMarker="# START UpdateSchema"
endMarker="# END UpdateSchema"
- language="py"
+ language="pyv3"
/>
@@ -236,7 +236,7 @@ To enable PQ, update your collection definition as shown below. For additional c
text={TSCodeLegacy}
startMarker="// START UpdateSchema"
endMarker="// END UpdateSchema"
- language="ts"
+ language="tsv2"
/>
@@ -323,7 +323,7 @@ To review the current `pq` configuration, you can retrieve it as shown below.
text={PyCodeV3}
startMarker="# START GetSchema"
endMarker="# END GetSchema"
- language="py"
+ language="pyv3"
/>
@@ -341,7 +341,7 @@ To review the current `pq` configuration, you can retrieve it as shown below.
text={TSCodeLegacy}
startMarker="// START GetSchema"
endMarker="// END GetSchema"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/configuration/compression/sq-compression.md b/developers/weaviate/configuration/compression/sq-compression.md
index 5c4d4d3626..ed65251608 100644
--- a/developers/weaviate/configuration/compression/sq-compression.md
+++ b/developers/weaviate/configuration/compression/sq-compression.md
@@ -44,7 +44,7 @@ To enable SQ, set `vector_index_config`.
text={PyCodeV3}
startMarker="# START EnableSQ"
endMarker="# END EnableSQ"
- language="py"
+ language="pyv3"
/>
@@ -78,7 +78,7 @@ To tune SQ, set these `vectorIndexConfig` parameters.
text={PyCodeV3}
startMarker="# START SQWithOptions"
endMarker="# END SQWithOptions"
- language="py"
+ language="pyv3"
/>
diff --git a/developers/weaviate/configuration/roles.md b/developers/weaviate/configuration/roles.md
new file mode 100644
index 0000000000..57ec52e8b2
--- /dev/null
+++ b/developers/weaviate/configuration/roles.md
@@ -0,0 +1,796 @@
+---
+title: RBAC Roles
+sidebar_position: 38
+image: og/docs/configuration.jpg
+# tags: ['rbac', 'roles', 'configuration', 'authorization']
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBlock';
+import PyCode from '!!raw-loader!/_includes/code/python/howto.configure.rbac.permissions.py';
+
+:::caution RBAC technical preview
+Role-based access control (RBAC) is added `v1.28` as a **technical preview**. This means that the feature is still under development and may change in future releases, including potential breaking changes. **We do not recommend using this feature in production environments at this time.**
+
+
+We appreciate [your feedback](https://forum.weaviate.io/) on this feature.
+:::
+
+Weaviate provides differentiated access through [authorization](./authorization.md) levels, based on the [authenticated](./authentication.md) user identity.
+
+If role-based access control (RBAC) is enabled, access can be further restricted based the roles of users. In Weaviate, RBAC allows you to define roles and assign permissions to those roles. Users can then be assigned to roles, and inherit the permissions associated with those roles.
+
+Roles and permissions can be managed through Weaviate API (e.g. via REST API directly, or through a client library).
+
+Refer to the client library examples below, or [the REST API documentation](../api/rest.md) for concrete examples on how to manage roles and permissions.
+
+## Roles
+
+### Predefined roles
+
+Weaviate comes with a set of predefined roles. These roles are:
+
+- `admin`: The admin role has full access to all resources in Weaviate.
+- `viewer`: The viewer role has read-only access to all resources in Weaviate.
+
+`admin` and `viewer` roles can be assigned through the Weaviate configuration file. A predefined role cannot be modified. The user can, however, be assigned additional roles through the Weaviate API.
+
+All roles can also be assigned through the Weaviate API, including the predefined roles. The predefined roles cannot be modified, but they can be assigned or revoked from users.
+
+Refer to the [authorization](./authorization.md) page for more information on how to assign predefined roles to users.
+
+### Custom roles
+
+Any authenticated user that is not assigned a predefined role has no roles or permissions by default.
+
+These users' permissions can be modified through Weaviate by those with the appropriate permissions. This allows for the creation of custom roles, which can be assigned to users as needed.
+
+### Managing roles
+
+Role management requires appropriate `role` resource permissions through a predefined `admin` role or a role with `manage_roles` permission.
+
+## Permissions
+
+Permissions in Weaviate define what actions users can perform on specific resources. Each permission consists of:
+
+- A resource type (e.g., collections, objects)
+- Access levels (read, write, update, delete, manage)
+- Optional resource-specific constraints
+
+### Available permissions
+
+Permissions can be defined for the following resources:
+
+1. **Role Management**
+ - Read roles
+ - Manage roles
+
+1. **Collections** (collection definitions only, data object permissions are separate)
+ - Create, read, update, and delete collection definitions
+
+1. **Data Objects**
+ - Read, write, update, and delete objects
+
+1. **Backup**
+ - Manage backups
+
+1. **Cluster Data Access**
+ - Read cluster metadata
+
+1. **Node Data Access**
+ - Read node metadata at a specified verbosity level
+
+:::caution Role Management Permissions
+Be careful when assigning permissions to roles that manage roles. These permissions can be used to escalate privileges by assigning additional roles to users. Only assign these permissions to trusted users.
+:::
+
+### Permission behavior
+
+When defining permissions, setting a permission to `False` indicates that the permission is *not set*, rather than explicitly denying access. This means that if a user has multiple roles, and one role grants a permission while another sets it to `False`, the user will still have that permission through the role that grants it.
+
+For example, if a user has two roles:
+- Role A sets `read` to `False` for Collection X
+- Role B sets `read` to `True` for Collection X
+
+The user will have read access to Collection X because Role B grants the permission, while Role A's `False` value simply indicates no permission is set rather than blocking access.
+
+:::info Permissions and `aggregate` queries
+
+In `v1.28`, aggregate queries require the user to have the `read_config` permission on all collections (i.e. with a `"*"` collection name filter).
+
+
+This is due to the implementation of the `aggregate` queries under-the-hood, which uses GraphQL rather than gRPC. This will be improved in future versions of Weaviate.
+:::
+
+#### Wildcards in permissions
+
+Many permissions require a collection name filter, to specify which collections the permission applies to.
+
+In thi case, `"*"` acts as a multi-character wildcard. As an example, setting a permission with `"Test_*"` as the collection filter would apply that permission to all collections that start with `Test_`. Or, setting a permission with `"*"` as the collection filter would apply that permission to all available collections.
+
+## Example permission sets
+
+### Read and write permissions
+
+This confers read and write permissions for collections starting with `TargetCollection_`, and read permissions to nodes and cluster metadata.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Viewer permissions
+
+This confers viewer permissions for collections starting with `TargetCollection_`.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+import RolePyCode from '!!raw-loader!/_includes/code/python/howto.configure.rbac.roles.py';
+
+## Role management
+
+Role management requires appropriate `role` resource permissions through a predefined `admin` role or a role with `manage_roles` permission.
+
+For more information see the [Authentication](./authentication.md) and [Authorization](./authorization.md) pages.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+
+
+### Create new role with permissions
+
+This example creates a role called "devrel" with permissions to:
+
+- Read all collections starting with "Test_".
+- Delete or create the collection "Test_DevRel"
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Grant additional permissions
+
+Additional permissions can be granted to a role at any time. The role must already exist.
+
+This example grants additional permissions to the "devrel" role to:
+
+- Read data in all collections that start with "Test_".
+- Create new data in "Test_DevRel".
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Remove permissions from a role
+
+Permissions can be removed from a role at any time. Removing all permissions from a role will not delete the role itself.
+
+This example removes from the "devrel" role permissions to:
+
+- Read the data from collections that start with "Test_"
+- Create and delete collections called "Test_DevRel"
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Assign a role to a user
+
+A custom user can have any number of roles assigned to them (including none). The role can be a predefined role (e.g. `viewer`) or a custom role.
+
+This example assigns the custom "devrel" role to "jane-doe".
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Get the current user's roles and permissions
+
+Retrieve the role and permission information for the currently authenticated user.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Get a user's roles and permissions
+
+Retrieve the role and permission information for any user.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Check if a role exists
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Inspect a role
+
+View the permissions assigned to a role.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### List all roles
+
+View all roles in the system and their permissions.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### List users with a role
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Delete a role
+
+Deleting a role will remove it from the system, and revoke the associated permissions from all users had this role.
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+### Revoke a role from a user
+
+You can revoke one or more roles from a specific user.
+
+This examples revokes "role-1" and "role-2" from the user "jane-doe".
+
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
+
+```go
+// Go support coming soon
+```
+
+
+
+
+
+```java
+// Java support coming soon
+```
+
+
+
+
+
+## Further resources
+
+- [Configuration: Authentication](./authentication.md)
+- [Configuration: Authorization and RBAC](./authorization.md)
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/weaviate/connections/connect-cloud.mdx b/developers/weaviate/connections/connect-cloud.mdx
index f48e6886bd..05f3dc18d5 100644
--- a/developers/weaviate/connections/connect-cloud.mdx
+++ b/developers/weaviate/connections/connect-cloud.mdx
@@ -45,7 +45,7 @@ To connect, use the Weaviate URL and the Weaviate API key for your WCD instance
text={PyCodeV3}
startMarker="# START APIKeyWCD"
endMarker="# END APIKeyWCD"
- language="py"
+ language="pyv3"
/>
@@ -61,7 +61,7 @@ To connect, use the Weaviate URL and the Weaviate API key for your WCD instance
text={TsCodeV2}
startMarker="// START APIKeyWCD"
endMarker="// END APIKeyWCD"
- language="js"
+ language="tsv2"
/>
@@ -108,7 +108,7 @@ If you use API-based models for vectorization or RAG, you must provide an API ke
text={PyCodeV3}
startMarker="# START ThirdPartyAPIKeys"
endMarker="# END ThirdPartyAPIKeys"
- language="py"
+ language="pyv3"
/>
@@ -124,7 +124,7 @@ If you use API-based models for vectorization or RAG, you must provide an API ke
text={TsCodeV2}
startMarker="// START ThirdPartyAPIKeys"
endMarker="// END ThirdPartyAPIKeys"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/connections/connect-embedded.mdx b/developers/weaviate/connections/connect-embedded.mdx
index f96d6c2c50..44c0db39f5 100644
--- a/developers/weaviate/connections/connect-embedded.mdx
+++ b/developers/weaviate/connections/connect-embedded.mdx
@@ -35,7 +35,7 @@ For more details on using Embedded Weaviate, see [Embedded Weaviate](/developers
text={PyCodeV3}
startMarker="# START Embedded"
endMarker="# END Embedded"
- language="py"
+ language="pyv3"
/>
@@ -43,7 +43,7 @@ For more details on using Embedded Weaviate, see [Embedded Weaviate](/developers
text={TsCodeV2}
startMarker="// START Embedded"
endMarker="// END Embedded"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/connections/connect-local.mdx b/developers/weaviate/connections/connect-local.mdx
index 961aa3e91b..f42a8ad80e 100644
--- a/developers/weaviate/connections/connect-local.mdx
+++ b/developers/weaviate/connections/connect-local.mdx
@@ -47,7 +47,7 @@ To connect to a local instance without authentication, follow these examples.
text={PyCodeV3}
startMarker="# START LocalNoAuth"
endMarker="# END LocalNoAuth"
- language="py"
+ language="pyv3"
/>
@@ -63,7 +63,7 @@ To connect to a local instance without authentication, follow these examples.
text={TsCodeV2}
startMarker="// START LocalNoAuth"
endMarker="// END LocalNoAuth"
- language="js"
+ language="tsv2"
/>
@@ -110,7 +110,7 @@ To change the default URL or port number, follow these examples.
text={PyCodeV3}
startMarker="# START CustomURL"
endMarker="# END CustomURL"
- language="py"
+ language="pyv3"
/>
@@ -126,7 +126,7 @@ To change the default URL or port number, follow these examples.
text={TsCodeV2}
startMarker="// START CustomURL"
endMarker="// END CustomURL"
- language="js"
+ language="tsv2"
/>
@@ -174,7 +174,7 @@ To authenticate with a Weaviate API key, follow these examples.
text={PyCodeV3}
startMarker="# START LocalAuth"
endMarker="# END LocalAuth"
- language="py"
+ language="pyv3"
/>
@@ -190,7 +190,7 @@ To authenticate with a Weaviate API key, follow these examples.
text={TsCodeV2}
startMarker="// START LocalAuth"
endMarker="// END LocalAuth"
- language="js"
+ language="tsv2"
/>
@@ -245,7 +245,7 @@ Integrations that use external APIs often need API keys. To add third party API
text={PyCodeV3}
startMarker="# START LocalThirdPartyAPIKeys"
endMarker="# END LocalThirdPartyAPIKeys"
- language="py"
+ language="pyv3"
/>
@@ -261,7 +261,7 @@ Integrations that use external APIs often need API keys. To add third party API
text={TsCodeV2}
startMarker="// START LocalThirdPartyAPIKeys"
endMarker="// END LocalThirdPartyAPIKeys"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/installation/aws-marketplace.md b/developers/weaviate/installation/aws-marketplace.md
index 810275d9c4..1726f0324f 100644
--- a/developers/weaviate/installation/aws-marketplace.md
+++ b/developers/weaviate/installation/aws-marketplace.md
@@ -8,8 +8,6 @@ image: og/docs/installation.jpg
import ReactPlayer from 'react-player/lazy'
-## Overview
-
You can use [AWS Marketplace](https://aws.amazon.com/marketplace) to directly launch a Weaviate cluster.
diff --git a/developers/weaviate/installation/gc-marketplace.md b/developers/weaviate/installation/gc-marketplace.md
index 76f75a7145..6330734aa2 100644
--- a/developers/weaviate/installation/gc-marketplace.md
+++ b/developers/weaviate/installation/gc-marketplace.md
@@ -6,9 +6,6 @@ image: og/docs/installation.jpg
tags: ['installation', 'Google Cloud Marketplace']
---
-
-## Overview
-
You can use [Google Cloud Marketplace](https://console.cloud.google.com/marketplace) to directly launch a Weaviate cluster.
:::info Prerequisites
diff --git a/developers/weaviate/installation/index.md b/developers/weaviate/installation/index.md
index 6f2ef90528..a532255a6f 100644
--- a/developers/weaviate/installation/index.md
+++ b/developers/weaviate/installation/index.md
@@ -7,6 +7,8 @@ image: og/docs/installation.jpg
Weaviate is available as a hosted service, [Weaviate Cloud (WCD)](https://console.weaviate.cloud/), or as a self managed instance. If you manage your own instance, you can host it locally or with a cloud provider. Self-managed instances use the same Weaviate core database as WCD.
+If you are upgrading from a previous version of Weaviate, see the [Migration Guide](../more-resources/migration/index.md) for any changes that may affect your installation.
+
## Installation methods
To install and configure Weaviate, see the following:
@@ -35,7 +37,7 @@ import RunUnreleasedImages from '/_includes/configuration/run-unreleased.mdx'
When you try upcoming features, please provide [feedback](https://github.com/weaviate/weaviate/issues/new/choose). Your comments are appreciated and help us to make Weaviate more useful for you.
## Related pages
-- [Connect to Weaviate](../connections)
+- [Connect to Weaviate](../connections/index.mdx)
- [Weaviate Quickstart](../quickstart/index.md)
- [Weaviate Cloud Quickstart](../../wcs/quickstart.mdx)
- [References: Configuration](../configuration/index.md)
diff --git a/developers/weaviate/introduction.md b/developers/weaviate/introduction.md
index 5935218f42..1354b5a112 100644
--- a/developers/weaviate/introduction.md
+++ b/developers/weaviate/introduction.md
@@ -76,7 +76,7 @@ import GoCode from '!!raw-loader!/_includes/code/howto/go/docs/manage-data.class
text={PyCodeV3}
startMarker="# START ReadAllCollections"
endMarker="# END ReadAllCollections"
- language="py"
+ language="pyv3"
/>
@@ -94,7 +94,7 @@ import GoCode from '!!raw-loader!/_includes/code/howto/go/docs/manage-data.class
text={TSCodeLegacy}
startMarker="// START ReadAllCollections"
endMarker="// END ReadAllCollections"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/collections.mdx b/developers/weaviate/manage-data/collections.mdx
index 8c322440af..631fc52466 100644
--- a/developers/weaviate/manage-data/collections.mdx
+++ b/developers/weaviate/manage-data/collections.mdx
@@ -44,7 +44,7 @@ import InitialCaps from '/_includes/schemas/initial-capitalization.md'
text={PyCodeV3}
startMarker="# START BasicCreateCollection"
endMarker="# END BasicCreateCollection"
- language="py"
+ language="pyv3"
/>
@@ -62,7 +62,7 @@ import InitialCaps from '/_includes/schemas/initial-capitalization.md'
text={TSCodeLegacy}
startMarker="// START BasicCreateCollection"
endMarker="// END BasicCreateCollection"
- language="ts"
+ language="tsv2"
/>
@@ -119,7 +119,7 @@ For details, see:
text={PyCodeV3}
startMarker="# START CreateCollectionWithProperties"
endMarker="# END CreateCollectionWithProperties"
- language="py"
+ language="pyv3"
/>
@@ -137,7 +137,7 @@ For details, see:
text={TSCodeLegacy}
startMarker="// START CreateCollectionWithProperties"
endMarker="// END CreateCollectionWithProperties"
- language="ts"
+ language="tsv2"
/>
@@ -187,7 +187,7 @@ Collection level settings override default values and general configuration para
text={PyCodeV3}
startMarker="# START Vectorizer"
endMarker="# END Vectorizer"
- language="py"
+ language="pyv3"
/>
@@ -205,7 +205,7 @@ Collection level settings override default values and general configuration para
text={TSCodeLegacy}
startMarker="// START Vectorizer"
endMarker="// END Vectorizer"
- language="ts"
+ language="tsv2"
/>
@@ -243,7 +243,7 @@ You can define multiple named vectors per collection. This allows each object to
text={PyCodeV3}
startMarker="# START BasicNamedVectors"
endMarker="# END BasicNamedVectors"
- language="py"
+ language="pyv3"
/>
@@ -261,7 +261,7 @@ You can define multiple named vectors per collection. This allows each object to
text={TSCodeLegacy}
startMarker="// START BasicNamedVectors"
endMarker="// END BasicNamedVectors"
- language="ts"
+ language="tsv2"
/>
@@ -295,7 +295,7 @@ To configure how a vectorizer works (i.e. what model to use) with a specific col
text={PyCodeV3}
startMarker="# START ModuleSettings"
endMarker="# END ModuleSettings"
- language="py"
+ language="pyv3"
/>
@@ -313,7 +313,7 @@ To configure how a vectorizer works (i.e. what model to use) with a specific col
text={TSCodeLegacy}
startMarker="// START ModuleSettings"
endMarker="// END ModuleSettings"
- language="ts"
+ language="tsv2"
/>
@@ -347,7 +347,7 @@ The vector index type can be set for each collection at creation time, between `
text={PyCodeV3}
startMarker="# START SetVectorIndexType"
endMarker="# END SetVectorIndexType"
- language="py"
+ language="pyv3"
/>
@@ -365,7 +365,7 @@ The vector index type can be set for each collection at creation time, between `
text={TSCodeLegacy}
startMarker="// START SetVectorIndexType"
endMarker="// END SetVectorIndexType"
- language="ts"
+ language="tsv2"
/>
@@ -409,7 +409,7 @@ Was added in `v1.27`
text={PyCodeV3}
startMarker="# START SetVectorIndexParams"
endMarker="# END SetVectorIndexParams"
- language="py"
+ language="pyv3"
/>
@@ -427,7 +427,7 @@ Was added in `v1.27`
text={TSCodeLegacy}
startMarker="// START SetVectorIndexParams"
endMarker="// END SetVectorIndexParams"
- language="ts"
+ language="tsv2"
/>
@@ -471,7 +471,7 @@ Configure individual properties in a collection. Each property can have it's own
text={PyCodeV3}
startMarker="# START PropModuleSettings"
endMarker="# END PropModuleSettings"
- language="py"
+ language="pyv3"
/>
@@ -489,7 +489,7 @@ Configure individual properties in a collection. Each property can have it's own
text={TSCodeLegacy}
startMarker="// START PropModuleSettings"
endMarker="// END PropModuleSettings"
- language="ts"
+ language="tsv2"
/>
@@ -522,7 +522,7 @@ If you choose to bring your own vectors, you should specify the `distance metric
text={PyCodeV3}
startMarker="# START DistanceMetric"
endMarker="# END DistanceMetric"
- language="py"
+ language="pyv3"
/>
@@ -540,7 +540,7 @@ If you choose to bring your own vectors, you should specify the `distance metric
text={TSCodeLegacy}
startMarker="// START DistanceMetric"
endMarker="// END DistanceMetric"
- language="ts"
+ language="tsv2"
/>
@@ -585,7 +585,7 @@ Various [inverted index parameters](../config-refs/schema/index.md#invertedindex
text={PyCodeV3}
startMarker="# START SetInvertedIndexParams"
endMarker="# END SetInvertedIndexParams"
- language="py"
+ language="pyv3"
/>
@@ -603,7 +603,7 @@ Various [inverted index parameters](../config-refs/schema/index.md#invertedindex
text={TSCodeLegacy}
startMarker="// START SetInvertedIndexParams"
endMarker="// END SetInvertedIndexParams"
- language="ts"
+ language="tsv2"
/>
@@ -631,7 +631,7 @@ Configure a [`reranker`](../concepts/search/index.md#rerank) model integration f
text={PyCodeV3}
startMarker="# START SetReranker"
endMarker="# END SetReranker"
- language="py"
+ language="pyv3"
/>
@@ -649,7 +649,7 @@ Configure a [`reranker`](../concepts/search/index.md#rerank) model integration f
text={TSCodeLegacy}
startMarker="// START SetReranker"
endMarker="// END SetReranker"
- language="ts"
+ language="tsv2"
/>
@@ -677,7 +677,7 @@ Update the [`reranker`](../concepts/search/index.md#rerank) model integration fo
text={PyCodeV3}
startMarker="# START UpdateReranker"
endMarker="# END UpdateReranker"
- language="py"
+ language="pyv3"
/>
@@ -694,7 +694,7 @@ Update the [`reranker`](../concepts/search/index.md#rerank) model integration fo
text={TSCodeLegacy}
startMarker="// START UpdateReranker"
endMarker="// END UpdateReranker"
- language="ts"
+ language="tsv2"
/>
@@ -722,7 +722,7 @@ Specify a `generative` model integration for a collection (for RAG).
text={PyCodeV3}
startMarker="# START SetGenerative"
endMarker="# END SetGenerative"
- language="py"
+ language="pyv3"
/>
@@ -740,7 +740,7 @@ Specify a `generative` model integration for a collection (for RAG).
text={TSCodeLegacy}
startMarker="// START SetGenerative"
endMarker="// END SetGenerative"
- language="ts"
+ language="tsv2"
/>
@@ -764,7 +764,7 @@ Specify a generative `model name`.
text={PyCodeV3}
startMarker="# START SetGenModel"
endMarker="# END SetGenModel"
- language="py"
+ language="pyv3"
/>
@@ -782,7 +782,7 @@ Specify a generative `model name`.
text={TSCodeLegacy}
startMarker="// START SetGenModel"
endMarker="// END SetGenModel"
- language="ts"
+ language="tsv2"
/>
@@ -810,7 +810,7 @@ Update a [`reranker`](../concepts/search/index.md#rerank) model integration for
text={PyCodeV3}
startMarker="# START UpdateGenerative"
endMarker="# END UpdateGenerative"
- language="py"
+ language="pyv3"
/>
@@ -827,7 +827,7 @@ Update a [`reranker`](../concepts/search/index.md#rerank) model integration for
text={TSCodeLegacy}
startMarker="// START UpdateGenerative"
endMarker="// END UpdateGenerative"
- language="ts"
+ language="tsv2"
/>
@@ -838,11 +838,74 @@ import RaftRFChangeWarning from '/_includes/1-25-replication-factor.mdx';
-Configure replication per collection.
+Configure replication settings, such as [async replication](../concepts/replication-architecture/consistency.md#async-replication) and [deletion resolution strategy](../concepts/replication-architecture/consistency.md#deletion-resolution-strategies).
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-import ReplicationConfigWithAsyncRepair from '/_includes/code/configuration/replication-consistency.mdx';
+```bash
+curl \
+-X POST \
+-H "Content-Type: application/json" \
+-d '{
+ "class": "Article",
+ "properties": [
+ {
+ "dataType": [
+ "string"
+ ],
+ "description": "Title of the article",
+ "name": "title"
+ }
+ ],
+ "replicationConfig": {
+ "factor": 3,
+ "asyncEnabled": true
+ }
+}' \
+http://localhost:8080/v1/schema
+```
-
+
+
@@ -876,7 +939,7 @@ Configure sharding per collection.
text={PyCodeV3}
startMarker="# START ShardingSettings"
endMarker="# END ShardingSettings"
- language="py"
+ language="pyv3"
/>
@@ -894,7 +957,7 @@ Configure sharding per collection.
text={TSCodeLegacy}
startMarker="// START ShardingSettings"
endMarker="// END ShardingSettings"
- language="ts"
+ language="tsv2"
/>
@@ -932,7 +995,7 @@ Create a collection with multi-tenancy enabled.
text={PyCodeV3}
startMarker="# START Multi-tenancy"
endMarker="# END Multi-tenancy"
- language="py"
+ language="pyv3"
/>
@@ -950,7 +1013,7 @@ Create a collection with multi-tenancy enabled.
text={TSCodeLegacy}
startMarker="// START Multi-tenancy"
endMarker="// END Multi-tenancy"
- language="ts"
+ language="tsv2"
/>
@@ -973,7 +1036,7 @@ Retrieve a collection definition from the schema.
text={PyCodeV3}
startMarker="# START ReadOneCollection"
endMarker="# END ReadOneCollection"
- language="py"
+ language="pyv3"
/>
@@ -991,7 +1054,7 @@ Retrieve a collection definition from the schema.
text={TSCodeLegacy}
startMarker="// START ReadOneCollection"
endMarker="// END ReadOneCollection"
- language="ts"
+ language="tsv2"
/>
@@ -1198,7 +1261,7 @@ Fetch the database schema to retrieve all of the collection definitions.
text={PyCodeV3}
startMarker="# START ReadAllCollections"
endMarker="# END ReadAllCollections"
- language="py"
+ language="pyv3"
/>
@@ -1216,7 +1279,7 @@ Fetch the database schema to retrieve all of the collection definitions.
text={TSCodeLegacy}
startMarker="// START ReadAllCollections"
endMarker="// END ReadAllCollections"
- language="ts"
+ language="tsv2"
/>
@@ -1260,7 +1323,7 @@ You can update a collection definition to change the [mutable collection setting
text={PyCodeV3}
startMarker="# START UpdateCollection"
endMarker="# END UpdateCollection"
- language="py"
+ language="pyv3"
/>
@@ -1278,7 +1341,7 @@ You can update a collection definition to change the [mutable collection setting
text={TSCodeLegacy}
startMarker="// START UpdateCollection"
endMarker="// END UpdateCollection"
- language="ts"
+ language="tsv2"
/>
@@ -1318,7 +1381,7 @@ Some parameters cannot be modified after you create your collection.
text={PyCodeV3}
startMarker="# START ModifyParam"
endMarker="# END ModifyParam"
- language="py"
+ language="pyv3"
/>
diff --git a/developers/weaviate/manage-data/create.mdx b/developers/weaviate/manage-data/create.mdx
index 023f2f0a1e..2092e2f601 100644
--- a/developers/weaviate/manage-data/create.mdx
+++ b/developers/weaviate/manage-data/create.mdx
@@ -41,7 +41,7 @@ This example creates an object in the `JeopardyQuestion` collection.
text={PyCodeV3}
startMarker="# CreateObject START"
endMarker="# CreateObject END"
- language="py"
+ language="pyv3"
/>
@@ -59,7 +59,7 @@ This example creates an object in the `JeopardyQuestion` collection.
text={TSCodeLegacy}
startMarker="// CreateObject START"
endMarker="// CreateObject END"
- language="ts"
+ language="tsv2"
/>
@@ -116,7 +116,7 @@ When you create an object, you can provide a vector. (For specifying multiple, n
text={PyCodeV3}
startMarker="# CreateObjectWithVector START"
endMarker="# CreateObjectWithVector END"
- language="py"
+ language="pyv3"
/>
@@ -134,7 +134,7 @@ When you create an object, you can provide a vector. (For specifying multiple, n
text={TSCodeLegacy}
startMarker="// CreateObjectWithVector START"
endMarker="// CreateObjectWithVector END"
- language="ts"
+ language="tsv2"
/>
@@ -179,7 +179,7 @@ When you create an object, you can specify named vectors (if [configured in your
text={PyCodeV3}
startMarker="# CreateObjectNamedVectors START"
endMarker="# CreateObjectNamedVectors END"
- language="py"
+ language="pyv3"
/>
@@ -197,7 +197,7 @@ When you create an object, you can specify named vectors (if [configured in your
text={TSCodeLegacy}
startMarker="// CreateObjectNamedVectors START"
endMarker="// CreateObjectNamedVectors END"
- language="ts"
+ language="tsv2"
/>
@@ -225,7 +225,7 @@ If no ID is provided, Weaviate will generate a random [UUID](https://en.wikipedi
text={PyCodeV3}
startMarker="# CreateObjectWithId START"
endMarker="# CreateObjectWithId END"
- language="py"
+ language="pyv3"
/>
@@ -243,7 +243,7 @@ If no ID is provided, Weaviate will generate a random [UUID](https://en.wikipedi
text={TSCodeLegacy}
startMarker="// CreateObjectWithId START"
endMarker="// CreateObjectWithId END"
- language="ts"
+ language="tsv2"
/>
@@ -289,7 +289,7 @@ Object IDs are not randomly generated. The same value always generates the same
text={PyCodeV3}
startMarker="# CreateObjectWithDeterministicId START"
endMarker="# CreateObjectWithDeterministicId END"
- language="py"
+ language="pyv3"
/>
@@ -307,7 +307,7 @@ Object IDs are not randomly generated. The same value always generates the same
text={TSCodeLegacy}
startMarker="// CreateObjectWithDeterministicId START"
endMarker="// CreateObjectWithDeterministicId END"
- language="ts"
+ language="tsv2"
/>
@@ -364,7 +364,7 @@ You can create an object with cross-references to other objects.
text={XrefPyCodeV3}
startMarker="# START ObjectWithCrossRef"
endMarker="# END ObjectWithCrossRef"
- language="py"
+ language="pyv3"
/>
@@ -382,7 +382,7 @@ You can create an object with cross-references to other objects.
text={XrefTSCodeLegacy}
startMarker="// START ObjectWithCrossRef"
endMarker="// END ObjectWithCrossRef"
- language="ts"
+ language="tsv2"
/>
@@ -422,7 +422,7 @@ Before you create an object, you can [validate](/developers/weaviate/api/rest#ta
text={PyCodeV3}
startMarker="# ValidateObject START"
endMarker="# ValidateObject END"
- language="py"
+ language="pyv3"
/>
@@ -440,7 +440,7 @@ Before you create an object, you can [validate](/developers/weaviate/api/rest#ta
text={TSCodeLegacy}
startMarker="// ValidateObject START"
endMarker="// ValidateObject END"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/cross-references.mdx b/developers/weaviate/manage-data/cross-references.mdx
index 591cd45066..11937b7e80 100644
--- a/developers/weaviate/manage-data/cross-references.mdx
+++ b/developers/weaviate/manage-data/cross-references.mdx
@@ -51,7 +51,7 @@ Include the reference property in the collection definition before adding cross-
text={PyCodeV3}
startMarker="# START CrossRefDefinition"
endMarker="# END CrossRefDefinition"
- language="py"
+ language="pyv3"
/>
@@ -82,7 +82,7 @@ It is also possible to add a cross-reference property to an existing collection
text={PyCodeV3}
startMarker="# START Collections TwoWay Category2"
endMarker="# END Collections TwoWay Category2"
- language="python"
+ language="pyv3"
/>
@@ -99,7 +99,7 @@ It is also possible to add a cross-reference property to an existing collection
text={TSCodeLegacy}
startMarker="// START Collections TwoWay Category2"
endMarker="// END Collections TwoWay Category2"
- language="ts"
+ language="tsv2"
/>
@@ -124,7 +124,7 @@ Specify a cross-reference when creating an object.
text={PyCodeV3}
startMarker="# START ObjectWithCrossRef"
endMarker="# END ObjectWithCrossRef"
- language="py"
+ language="pyv3"
/>
@@ -142,7 +142,7 @@ Specify a cross-reference when creating an object.
text={TSCodeLegacy}
startMarker="// START ObjectWithCrossRef"
endMarker="// END ObjectWithCrossRef"
- language="ts"
+ language="tsv2"
/>
@@ -167,7 +167,7 @@ Specify the required id and properties for the source and the target.
text={PyCodeV3}
startMarker="# START OneWay"
endMarker="# END OneWay"
- language="py"
+ language="pyv3"
/>
@@ -185,7 +185,7 @@ Specify the required id and properties for the source and the target.
text={TSCodeLegacy}
startMarker="// START OneWay"
endMarker="// END OneWay"
- language="ts"
+ language="tsv2"
/>
@@ -229,7 +229,7 @@ Create the `JeopardyCategory` collection:
text={PyCodeV3}
startMarker="# START Collections TwoWay Category1"
endMarker="# END Collections TwoWay Category1"
- language="python"
+ language="pyv3"
/>
@@ -246,7 +246,7 @@ Create the `JeopardyCategory` collection:
text={TSCodeLegacy}
startMarker="// START Collections TwoWay Category1"
endMarker="// END Collections TwoWay Category1"
- language="ts"
+ language="tsv2"
/>
@@ -267,7 +267,7 @@ Create the `JeopardyQuestion` collection including the reference property to `Je
text={PyCodeV3}
startMarker="# START Collections TwoWay Question"
endMarker="# END Collections TwoWay Question"
- language="python"
+ language="pyv3"
/>
@@ -284,7 +284,7 @@ Create the `JeopardyQuestion` collection including the reference property to `Je
text={TSCodeLegacy}
startMarker="// START Collections TwoWay Question"
endMarker="// END Collections TwoWay Question"
- language="ts"
+ language="tsv2"
/>
@@ -305,7 +305,7 @@ Modify `JeopardyCategory` to add the reference to `JeopardyQuestion`:
text={PyCodeV3}
startMarker="# START Collections TwoWay Category2"
endMarker="# END Collections TwoWay Category2"
- language="python"
+ language="pyv3"
/>
@@ -322,7 +322,7 @@ Modify `JeopardyCategory` to add the reference to `JeopardyQuestion`:
text={TSCodeLegacy}
startMarker="// START Collections TwoWay Category2"
endMarker="// END Collections TwoWay Category2"
- language="ts"
+ language="tsv2"
/>
@@ -344,7 +344,7 @@ And add the cross-references:
text={PyCodeV3}
startMarker="# TwoWay Python"
endMarker="# END TwoWay Python"
- language="py"
+ language="pyv3"
/>
@@ -362,7 +362,7 @@ And add the cross-references:
text={TSCodeLegacy}
startMarker="// TwoWay TS"
endMarker="// END TwoWay TS"
- language="ts"
+ language="tsv2"
/>
@@ -405,7 +405,7 @@ Weaviate allows creation of multiple cross-references from one source object.
text={PyCodeV3}
startMarker="# Multiple Python"
endMarker="# END Multiple Python"
- language="py"
+ language="pyv3"
/>
@@ -423,7 +423,7 @@ Weaviate allows creation of multiple cross-references from one source object.
text={TSCodeLegacy}
startMarker="// Multiple TS"
endMarker="// END Multiple TS"
- language="ts"
+ language="tsv2"
/>
@@ -465,7 +465,7 @@ Cross-references can be read as part of the object.
text={PyCodeV3}
startMarker="# ReadCrossRef"
endMarker="# END ReadCrossRef"
- language="py"
+ language="pyv3"
/>
@@ -498,7 +498,7 @@ Deleting a cross-reference with the same parameters used to define the cross-ref
text={PyCodeV3}
startMarker="# Delete Python"
endMarker="# END Delete Python"
- language="py"
+ language="pyv3"
/>
@@ -516,7 +516,7 @@ Deleting a cross-reference with the same parameters used to define the cross-ref
text={TSCodeLegacy}
startMarker="// Delete TS"
endMarker="// END Delete TS"
- language="ts"
+ language="tsv2"
/>
@@ -569,7 +569,7 @@ The targets of a cross-reference can be updated.
text={PyCodeV3}
startMarker="# Update Python"
endMarker="# END Update Python"
- language="py"
+ language="pyv3"
/>
@@ -587,7 +587,7 @@ The targets of a cross-reference can be updated.
text={TSCodeLegacy}
startMarker="// Update TS"
endMarker="// END Update TS"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/delete.mdx b/developers/weaviate/manage-data/delete.mdx
index 018657b6cb..adeae79c34 100644
--- a/developers/weaviate/manage-data/delete.mdx
+++ b/developers/weaviate/manage-data/delete.mdx
@@ -53,7 +53,7 @@ To delete by id, specify the collection name and the object id.
text={PyCodeV3}
startMarker="# START DeleteObject"
endMarker="# END DeleteObject"
- language="py"
+ language="pyv3"
/>
@@ -71,7 +71,7 @@ To delete by id, specify the collection name and the object id.
text={TSCodeLegacy}
startMarker="// START DeleteObject"
endMarker="// END DeleteObject"
- language="ts"
+ language="tsv2"
/>
@@ -116,7 +116,7 @@ You can handle errors as follows:
text={TSCode}
startMarker="// START DeleteError"
endMarker="// END DeleteError"
- language="ts"
+ language="tsv2"
/>
-->
@@ -141,7 +141,7 @@ To delete objects that match a set of criteria, specify the collection and a [`w
text={PyCodeV3}
startMarker="# START DeleteBatch"
endMarker="# END DeleteBatch"
- language="py"
+ language="pyv3"
/>
@@ -159,7 +159,7 @@ To delete objects that match a set of criteria, specify the collection and a [`w
text={TSCodeLegacy}
startMarker="// START DeleteBatch"
endMarker="// END DeleteBatch"
- language="ts"
+ language="tsv2"
/>
@@ -211,7 +211,7 @@ Use `ContainsAny` / `ContainsAll` filters to delete of objects by a set of crite
text={PyCodeV3}
startMarker="# START DeleteContains"
endMarker="# END DeleteContains"
- language="py"
+ language="pyv3"
/>
@@ -315,7 +315,7 @@ The default `QUERY_MAXIMUM_RESULTS` value is 10,000. This may be configurable, e
text={PyCodeV3}
startMarker="# START DeleteByIDBatch"
endMarker="# END DeleteByIDBatch"
- language="py"
+ language="pyv3"
/>
@@ -405,7 +405,7 @@ Objects must belong to a collection in Weaviate. Accordingly,
@@ -423,7 +423,7 @@ Objects must belong to a collection in Weaviate. Accordingly,
diff --git a/developers/weaviate/manage-data/import.mdx b/developers/weaviate/manage-data/import.mdx
index 0cf2d39962..e8d4ee5c17 100644
--- a/developers/weaviate/manage-data/import.mdx
+++ b/developers/weaviate/manage-data/import.mdx
@@ -49,7 +49,7 @@ The following example adds objects to the `MyCollection` collection.
text={PyCodeV3}
startMarker="# START BasicBatchImportExample"
endMarker="# END BasicBatchImportExample"
- language="py"
+ language="pyv3"
/>
@@ -67,7 +67,7 @@ The following example adds objects to the `MyCollection` collection.
text={TSCodeLegacy}
startMarker="// START BasicBatchImportExample"
endMarker="// END BasicBatchImportExample"
- language="ts"
+ language="tsv2"
/>
@@ -187,7 +187,7 @@ Weaviate generates an UUID for each object. Object IDs must be unique. If you se
text={PyCodeV3}
startMarker="# START BatchImportWithIDExample"
endMarker="# END BatchImportWithIDExample"
- language="py"
+ language="pyv3"
/>
@@ -205,7 +205,7 @@ Weaviate generates an UUID for each object. Object IDs must be unique. If you se
text={TSCodeLegacy}
startMarker="// START BatchImportWithIDExample"
endMarker="// END BatchImportWithIDExample"
- language="ts"
+ language="tsv2"
/>
@@ -247,7 +247,7 @@ Use the `vector` property to specify a vector for each object.
text={PyCodeV3}
startMarker="# START BatchImportWithVectorExample"
endMarker="# END BatchImportWithVectorExample"
- language="py"
+ language="pyv3"
/>
@@ -265,7 +265,7 @@ Use the `vector` property to specify a vector for each object.
text={TSCodeLegacy}
startMarker="// START BatchImportWithVectorExample"
endMarker="// END BatchImportWithVectorExample"
- language="ts"
+ language="tsv2"
/>
@@ -310,7 +310,7 @@ When you create an object, you can specify named vectors (if [configured in your
text={PyCodeV3}
startMarker="# START BatchImportWithNamedVectors"
endMarker="# END BatchImportWithNamedVectors"
- language="py"
+ language="pyv3"
/>
@@ -328,7 +328,7 @@ When you create an object, you can specify named vectors (if [configured in your
text={TSCodeLegacy}
startMarker="// START BatchImportWithNamedVectors"
endMarker="// END BatchImportWithNamedVectors"
- language="ts"
+ language="tsv2"
/>
@@ -352,7 +352,7 @@ You can batch create links from an object to another other object through cross-
text={PyCodeV3}
startMarker="# BatchImportWithRefExample"
endMarker="# END BatchImportWithRefExample"
- language="py"
+ language="pyv3"
/>
@@ -360,7 +360,7 @@ You can batch create links from an object to another other object through cross-
text={TSCodeLegacy}
startMarker="// BatchImportWithRefExample"
endMarker="// END BatchImportWithRefExample"
- language="ts"
+ language="tsv2"
/>
@@ -423,7 +423,7 @@ To try the example code, download the sample data and create the sample input fi
text={PyCodeV3}
startMarker="# START JSON streaming"
endMarker="# END JSON streaming"
- language="py"
+ language="pyv3"
/>
@@ -456,7 +456,7 @@ To try the example code, download the sample data and create the sample input fi
text={PyCodeV3}
startMarker="# START CSV streaming"
endMarker="# END CSV streaming"
- language="py"
+ language="pyv3"
/>
diff --git a/developers/weaviate/manage-data/migrate.mdx b/developers/weaviate/manage-data/migrate.mdx
index cb2d552d02..6944faa1e1 100644
--- a/developers/weaviate/manage-data/migrate.mdx
+++ b/developers/weaviate/manage-data/migrate.mdx
@@ -13,9 +13,6 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
import PyCode from '!!raw-loader!/_includes/code/howto/manage-data.migrate.data.v4.py';
import PyCodeV3 from '!!raw-loader!/_includes/code/howto/manage-data.migrate.data.v3.py';
-
-## Overview
-
Follow these examples to migrate data manually when using a backup is not possible. They cover all permutations between:
- a single-tenancy collection (Collection), and
@@ -61,7 +58,7 @@ Create a collection (e.g. `WineReview`) at the target instance, matching the col
text={PyCodeV3}
startMarker="# START CreateCollectionCollectionToCollection"
endMarker="# END CreateCollectionCollectionToCollection"
- language="py"
+ language="pyv3"
/>
@@ -90,7 +87,7 @@ Migrate:
text={PyCodeV3}
startMarker="# START CollectionToCollection"
endMarker="# END CollectionToCollection"
- language="py"
+ language="pyv3"
/>
@@ -115,7 +112,7 @@ Create a collection (e.g. `WineReview`) at the target instance, matching the col
text={PyCodeV3}
startMarker="# START CreateCollectionCollectionToTenant"
endMarker="# END CreateCollectionCollectionToTenant"
- language="py"
+ language="pyv3"
/>
@@ -138,7 +135,7 @@ Add tenants at the target instance before adding data objects.
text={PyCodeV3}
startMarker="# START CreateTenants"
endMarker="# END CreateTenants"
- language="py"
+ language="pyv3"
/>
@@ -167,7 +164,7 @@ Migrate:
text={PyCodeV3}
startMarker="# START CollectionToTenant"
endMarker="# END CollectionToTenant"
- language="py"
+ language="pyv3"
/>
@@ -192,7 +189,7 @@ Create a collection (e.g. `WineReview`) at the target instance, matching the col
text={PyCodeV3}
startMarker="# START CreateCollectionTenantToCollection"
endMarker="# END CreateCollectionTenantToCollection"
- language="py"
+ language="pyv3"
/>
@@ -221,7 +218,7 @@ Migrate:
text={PyCodeV3}
startMarker="# START TenantToCollection"
endMarker="# END TenantToCollection"
- language="py"
+ language="pyv3"
/>
@@ -246,7 +243,7 @@ Create a collection (e.g. `WineReview`) at the target instance, matching the col
text={PyCodeV3}
startMarker="# START CreateCollectionTenantToTenant"
endMarker="# END CreateCollectionTenantToTenant"
- language="py"
+ language="pyv3"
/>
@@ -269,7 +266,7 @@ Add tenants at the target instance before adding data objects.
text={PyCodeV3}
startMarker="# START CreateTenants"
endMarker="# END CreateTenants"
- language="py"
+ language="pyv3"
/>
@@ -298,7 +295,7 @@ Migrate:
text={PyCodeV3}
startMarker="# START TenantToTenant"
endMarker="# END TenantToTenant"
- language="py"
+ language="pyv3"
/>
diff --git a/developers/weaviate/manage-data/multi-tenancy.md b/developers/weaviate/manage-data/multi-tenancy.md
index 7046a3e20f..f25118c590 100644
--- a/developers/weaviate/manage-data/multi-tenancy.md
+++ b/developers/weaviate/manage-data/multi-tenancy.md
@@ -51,7 +51,7 @@ Multi-tenancy is disabled by default. To enable multi-tenancy, set `multiTenancy
text={PyCodeV3}
startMarker="# START EnableMultiTenancy"
endMarker="# END EnableMultiTenancy"
- language="py"
+ language="pyv3"
/>
@@ -67,7 +67,7 @@ Multi-tenancy is disabled by default. To enable multi-tenancy, set `multiTenancy
text={TSCodeLegacy}
startMarker="// START EnableMultiTenancy"
endMarker="// END EnableMultiTenancy"
- language="ts"
+ language="tsv2"
/>
@@ -197,7 +197,7 @@ Tenant status is available from Weaviate `1.21` onwards.
text={PyCodeV3}
startMarker="# START AddTenantsToClass"
endMarker="# END AddTenantsToClass"
- language="py"
+ language="pyv3"
/>
@@ -215,7 +215,7 @@ Tenant status is available from Weaviate `1.21` onwards.
text={TSCodeLegacy}
startMarker="// START AddTenantsToClass"
endMarker="// END AddTenantsToClass"
- language="ts"
+ language="tsv2"
/>
@@ -259,7 +259,7 @@ This example lists the tenants in the `MultiTenancyCollection` collection:
text={PyCodeV3}
startMarker="# START ListTenants"
endMarker="# END ListTenants"
- language="py"
+ language="pyv3"
/>
@@ -277,7 +277,7 @@ This example lists the tenants in the `MultiTenancyCollection` collection:
text={TSCodeLegacy}
startMarker="// START ListTenants"
endMarker="// END ListTenants"
- language="ts"
+ language="tsv2"
/>
@@ -378,7 +378,7 @@ Deleting a tenant deletes all associated objects.
text={PyCodeV3}
startMarker="# START RemoveTenants"
endMarker="# END RemoveTenants"
- language="py"
+ language="pyv3"
/>
@@ -396,7 +396,7 @@ Deleting a tenant deletes all associated objects.
text={TSCodeLegacy}
startMarker="// START RemoveTenants"
endMarker="// END RemoveTenants"
- language="ts"
+ language="tsv2"
/>
@@ -468,7 +468,7 @@ Multi-tenancy collections require tenant name (e.g. `tenantA`) with each CRUD op
text={PyCodeV3}
startMarker="# START CreateMtObject"
endMarker="# END CreateMtObject"
- language="py"
+ language="pyv3"
/>
@@ -486,7 +486,7 @@ Multi-tenancy collections require tenant name (e.g. `tenantA`) with each CRUD op
text={TSCodeLegacy}
startMarker="// START CreateMtObject"
endMarker="// END CreateMtObject"
- language="ts"
+ language="tsv2"
/>
@@ -528,7 +528,7 @@ Multi-tenancy collections require the tenant name (e.g. `tenantA`) with each `Ge
text={PyCodeV3}
startMarker="# START Search"
endMarker="# END Search"
- language="py"
+ language="pyv3"
/>
@@ -546,7 +546,7 @@ Multi-tenancy collections require the tenant name (e.g. `tenantA`) with each `Ge
text={TSCodeLegacy}
startMarker="// START Search"
endMarker="// END Search"
- language="ts"
+ language="tsv2"
/>
@@ -592,7 +592,7 @@ Multi-tenancy collections require the tenant name (e.g. `tenantA`) when creating
text={PyCodeV3}
startMarker="# START AddCrossRef"
endMarker="# END AddCrossRef"
- language="py"
+ language="pyv3"
/>
@@ -610,7 +610,7 @@ Multi-tenancy collections require the tenant name (e.g. `tenantA`) when creating
text={TSCodeLegacy}
startMarker="// START AddCrossRef"
endMarker="// END AddCrossRef"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/read-all-objects.mdx b/developers/weaviate/manage-data/read-all-objects.mdx
index d042e2e202..4658e777dd 100644
--- a/developers/weaviate/manage-data/read-all-objects.mdx
+++ b/developers/weaviate/manage-data/read-all-objects.mdx
@@ -44,7 +44,7 @@ The following code iterates through all objects, providing the properties and id
text={PyCodeV3}
startMarker="# START ReadAllProps"
endMarker="# END ReadAllProps"
- language="py"
+ language="pyv3"
/>
@@ -62,7 +62,7 @@ The following code iterates through all objects, providing the properties and id
text={TSCodeLegacy}
startMarker="// START ReadAllProps"
endMarker="// END ReadAllProps"
- language="ts"
+ language="tsv2"
/>
@@ -105,7 +105,7 @@ Read through all data including the vectors. (Also applicable where [named vecto
text={PyCodeV3}
startMarker="# START ReadAllVectors"
endMarker="# END ReadAllVectors"
- language="py"
+ language="pyv3"
/>
@@ -123,7 +123,7 @@ Read through all data including the vectors. (Also applicable where [named vecto
text={TSCodeLegacy}
startMarker="// START ReadAllVectors"
endMarker="// END ReadAllVectors"
- language="ts"
+ language="tsv2"
/>
@@ -152,7 +152,7 @@ For classes where [multi-tenancy](../concepts/data.md#multi-tenancy) is enabled,
text={PyCodeV3}
startMarker="# START ReadAllTenants"
endMarker="# END ReadAllTenants"
- language="py"
+ language="pyv3"
/>
@@ -170,7 +170,7 @@ For classes where [multi-tenancy](../concepts/data.md#multi-tenancy) is enabled,
text={TSCodeLegacy}
startMarker="// START ReadAllTenants"
endMarker="// END ReadAllTenants"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/read.mdx b/developers/weaviate/manage-data/read.mdx
index af4b79755f..6afeece205 100644
--- a/developers/weaviate/manage-data/read.mdx
+++ b/developers/weaviate/manage-data/read.mdx
@@ -44,7 +44,7 @@ Use an ID to retrieve an object. If the id doesn't exist, Weaviate returns a 404
text={PyCodeV3}
startMarker="# ReadObject START"
endMarker="# ReadObject END"
- language="py"
+ language="pyv3"
/>
@@ -62,7 +62,7 @@ Use an ID to retrieve an object. If the id doesn't exist, Weaviate returns a 404
text={TSCodeLegacy}
startMarker="// ReadObject START"
endMarker="// ReadObject END"
- language="ts"
+ language="tsv2"
/>
@@ -105,7 +105,7 @@ Object vectors can be retrieved by specifying its return.
text={PyCodeV3}
startMarker="# ReadObjectWithVector START"
endMarker="# ReadObjectWithVector END"
- language="py"
+ language="pyv3"
/>
@@ -123,7 +123,7 @@ Object vectors can be retrieved by specifying its return.
text={TSCodeLegacy}
startMarker="// ReadObjectWithVector START"
endMarker="// ReadObjectWithVector END"
- language="ts"
+ language="tsv2"
/>
@@ -165,7 +165,7 @@ Where [named vectors](../config-refs/schema/multi-vector.md) are used, you can r
text={PyCodeV3}
startMarker="# ReadObjectNamedVectors START"
endMarker="# ReadObjectNamedVectors END"
- language="py"
+ language="pyv3"
/>
@@ -183,7 +183,7 @@ Where [named vectors](../config-refs/schema/multi-vector.md) are used, you can r
text={TSCodeLegacy}
startMarker="// ReadObjectNamedVectors START"
endMarker="// ReadObjectNamedVectors END"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/manage-data/tenant-states.mdx b/developers/weaviate/manage-data/tenant-states.mdx
index 51d910c437..bf69339750 100644
--- a/developers/weaviate/manage-data/tenant-states.mdx
+++ b/developers/weaviate/manage-data/tenant-states.mdx
@@ -11,8 +11,6 @@ import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBl
import PyCode from '!!raw-loader!/_includes/code/howto/manage-data.multi-tenancy.py';
import TSCode from '!!raw-loader!/_includes/code/howto/manage-data.multi-tenancy.ts';
-## Overview
-
![Storage Tiers](./img/storage-tiers.jpg)
Storage resources are grouped into tiers. Each tier has different performance characteristics and costs:
diff --git a/developers/weaviate/manage-data/update.mdx b/developers/weaviate/manage-data/update.mdx
index 8c94b83fef..fa0ad59748 100644
--- a/developers/weaviate/manage-data/update.mdx
+++ b/developers/weaviate/manage-data/update.mdx
@@ -36,7 +36,7 @@ Weaviate allows partial or complete object updates.
## Update object properties
-To update a collection property, provide the collection name, the object id, and the properties to update.
+This operation replaces the entire value of the specified properties only, leaving the unspecified properties. Provide the collection name, the object id, and the properties to update.
If you update the value of a *previously vectorized* property, Weaviate re-vectorizes the object automatically. This also reindexes the updated object.
@@ -56,7 +56,7 @@ However, if you add a *new* property to your collection definition, Weaviate onl
text={PyCodeV3}
startMarker="# UpdateProps START"
endMarker="# UpdateProps END"
- language="py"
+ language="pyv3"
/>
@@ -72,7 +72,7 @@ However, if you add a *new* property to your collection definition, Weaviate onl
text={TSCodeLegacy}
startMarker="// UpdateProps START"
endMarker="// UpdateProps END"
- language="ts"
+ language="tsv2"
/>
@@ -111,7 +111,7 @@ The object vector can also be updated similarly to properties. For [named vector
text={PyCodeV3}
startMarker="# UpdateVector START"
endMarker="# UpdateVector END"
- language="py"
+ language="pyv3"
/>
@@ -162,7 +162,7 @@ The entire object can be replaced by providing the collection name, id and the n
text={PyCodeV3}
startMarker="# Replace START"
endMarker="# Replace END"
- language="py"
+ language="pyv3"
/>
@@ -180,7 +180,7 @@ The entire object can be replaced by providing the collection name, id and the n
text={TSCodeLegacy}
startMarker="// Replace START"
endMarker="// Replace END"
- language="ts"
+ language="tsv2"
/>
@@ -224,7 +224,7 @@ At object level, you can replace the object with a copy that has those propertie
text={PyCodeV3}
startMarker="# DelProps START"
endMarker="# DelProps END"
- language="py"
+ language="pyv3"
/>
@@ -242,7 +242,7 @@ At object level, you can replace the object with a copy that has those propertie
text={TSCodeLegacy}
startMarker="// DelProps START"
endMarker="// DelProps END"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/model-providers/_includes/google-api-key-note.md b/developers/weaviate/model-providers/_includes/google-api-key-note.md
index 3d410d215b..47e45d8efd 100644
--- a/developers/weaviate/model-providers/_includes/google-api-key-note.md
+++ b/developers/weaviate/model-providers/_includes/google-api-key-note.md
@@ -1,9 +1,9 @@
API key headers
-Starting from `v1.25.1` and `v1.24.14`, there are separate headers `X-Google-Vertex-Api-Key` and `X-Google-Studio-Api-Key` for Vertex AI users and AI Studio respectively.
+From `v1.27.7`, `v1.26.12` and `v1.25.27`, `X-Goog-Vertex-Api-Key` and `X-Goog-Studio-Api-Key` headers are supported for Vertex AI users and AI Studio respectively. We recommend these headers for highest compatibility.
-Prior to Weaviate `v1.25.1` or `v1.24.14`, there was one header for both Vertex AI users and AI Studio, specified with either `X-Google-Api-Key` or `X-PaLM-Api-Key`. We recommend using the new headers for clarity and future compatibility.
+Consider `X-Google-Vertex-Api-Key`, `X-Google-Studio-Api-Key`, `X-Google-Api-Key` and `X-PaLM-Api-Key` deprecated.
diff --git a/developers/weaviate/model-providers/_includes/provider.connect.py b/developers/weaviate/model-providers/_includes/provider.connect.py
index 5525acf4c3..d04123c34b 100644
--- a/developers/weaviate/model-providers/_includes/provider.connect.py
+++ b/developers/weaviate/model-providers/_includes/provider.connect.py
@@ -103,9 +103,9 @@
"X-Friendli-Baseurl": "https://inference.friendli.ai/dedicated",
# END FriendliDedicatedInstantiation
# START GoogleInstantiation # START GoogleVertexInstantiation
- "X-Google-Vertex-Api-Key": vertex_key,
+ "X-Goog-Vertex-Api-Key": vertex_key,
# START GoogleInstantiation # END GoogleVertexInstantiation
- "X-Google-Studio-Api-Key": studio_key,
+ "X-Goog-Studio-Api-Key": studio_key,
# END GoogleInstantiation
# START HuggingFaceInstantiation
"X-HuggingFace-Api-Key": huggingface_key,
diff --git a/developers/weaviate/model-providers/_includes/provider.vectorizer.py b/developers/weaviate/model-providers/_includes/provider.vectorizer.py
index 62a1e25559..8e3d1142ec 100644
--- a/developers/weaviate/model-providers/_includes/provider.vectorizer.py
+++ b/developers/weaviate/model-providers/_includes/provider.vectorizer.py
@@ -934,6 +934,102 @@
# clean up
client.collections.delete("DemoCollection")
+# START BasicMMVectorizerVoyageAI
+from weaviate.classes.config import Configure
+
+client.collections.create(
+ "DemoCollection",
+ # highlight-start
+ properties=[
+ Property(name="title", data_type=DataType.TEXT),
+ Property(name="poster", data_type=DataType.BLOB),
+ ],
+ vectorizer_config=[
+ Configure.NamedVectors.multi2vec_voyageai(
+ name="title_vector",
+ # Define the fields to be used for the vectorization - using image_fields, text_fields
+ image_fields=[
+ Multi2VecField(name="poster", weight=0.9)
+ ],
+ text_fields=[
+ Multi2VecField(name="title", weight=0.1)
+ ],
+ )
+ ],
+ # highlight-end
+ # Additional parameters not shown
+)
+# END BasicMMVectorizerVoyageAI
+
+# clean up
+client.collections.delete("DemoCollection")
+
+# START MMVectorizerVoyageAICustomModel
+from weaviate.classes.config import Configure
+
+client.collections.create(
+ "DemoCollection",
+ # highlight-start
+ properties=[
+ Property(name="title", data_type=DataType.TEXT),
+ Property(name="poster", data_type=DataType.BLOB),
+ ],
+ vectorizer_config=[
+ Configure.NamedVectors.multi2vec_voyageai(
+ name="title_vector",
+ model="voyage-multimodal-3",
+ # Define the fields to be used for the vectorization - using image_fields, text_fields
+ image_fields=[
+ Multi2VecField(name="poster", weight=0.9)
+ ],
+ text_fields=[
+ Multi2VecField(name="title", weight=0.1)
+ ],
+ )
+ ],
+ # highlight-end
+ # Additional parameters not shown
+)
+# END MMVectorizerVoyageAICustomModel
+
+# clean up
+client.collections.delete("DemoCollection")
+
+# START FullMMVectorizerVoyageAI
+from weaviate.classes.config import Configure
+
+client.collections.create(
+ "DemoCollection",
+ # highlight-start
+ properties=[
+ Property(name="title", data_type=DataType.TEXT),
+ Property(name="poster", data_type=DataType.BLOB),
+ ],
+ vectorizer_config=[
+ Configure.NamedVectors.multi2vec_voyageai(
+ name="title_vector",
+ # Define the fields to be used for the vectorization - using image_fields, text_fields
+ image_fields=[
+ Multi2VecField(name="poster", weight=0.9)
+ ],
+ text_fields=[
+ Multi2VecField(name="title", weight=0.1)
+ ],
+ # Further options
+ # model="voyage-multimodal-3",
+ # truncation="true", # or "false",
+ # output_encoding="base64", # or "null"
+ # base_url=""
+ )
+ ],
+ # highlight-end
+ # Additional parameters not shown
+)
+# END FullMMVectorizerVoyageAI
+
+# clean up
+client.collections.delete("DemoCollection")
+
# START BasicVectorizerWeaviate
from weaviate.classes.config import Configure
diff --git a/developers/weaviate/model-providers/_includes/provider.vectorizer.ts b/developers/weaviate/model-providers/_includes/provider.vectorizer.ts
index e0dd5d3896..f77385c42a 100644
--- a/developers/weaviate/model-providers/_includes/provider.vectorizer.ts
+++ b/developers/weaviate/model-providers/_includes/provider.vectorizer.ts
@@ -612,21 +612,112 @@ await client.collections.create({
await client.collections.delete('DemoCollection');
// START BasicMMVectorizerJinaAI
-// TS client support coming soon
+await client.collections.create({
+ name: 'DemoCollection',
+ properties: [
+ {
+ name: 'title',
+ dataType: 'text' as const,
+ },
+ {
+ name: 'poster',
+ dataType: 'blob' as const,
+ },
+ ],
+ // highlight-start
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecJinaAI({
+ name: 'title_vector',
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }]
+ },
+ ),
+ ],
+ // highlight-end
+ // Additional parameters not shown
+});
// END BasicMMVectorizerJinaAI
// Clean up
await client.collections.delete('DemoCollection');
// START MMVectorizerJinaCustomModel
-// TS client support coming soon
+await client.collections.create({
+ name: 'DemoCollection',
+ properties: [
+ {
+ name: 'title',
+ dataType: 'text' as const,
+ },
+ {
+ name: 'poster',
+ dataType: 'blob' as const,
+ },
+ ],
+ // highlight-start
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecJinaAI({
+ name: 'title_vector',
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }],
+ model: "jina-clip-v2"
+ },
+ ),
+ ],
+ // highlight-end
+ // Additional parameters not shown
+});
// END MMVectorizerJinaCustomModel
// Clean up
await client.collections.delete('DemoCollection');
// START FullMMVectorizerJinaAI
-// TS client support coming soon
+await client.collections.create({
+ name: 'DemoCollection',
+ properties: [
+ {
+ name: 'title',
+ dataType: 'text' as const,
+ },
+ {
+ name: 'poster',
+ dataType: 'blob' as const,
+ },
+ ],
+ // highlight-start
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecJinaAI({
+ name: 'title_vector',
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }],
+ // Further options
+ // model:"jina-clip-v2",
+
+ },
+ ),
+ ],
+ // highlight-end
+ // Additional parameters not shown
+});
// END FullMMVectorizerJinaAI
// Clean up
@@ -650,7 +741,8 @@ await client.collections.create({
],
// highlight-end
// Additional parameters not shown
-});// END BasicVectorizerMistral
+});
+// END BasicVectorizerMistral
// Clean up
await client.collections.delete('DemoCollection');
@@ -1031,6 +1123,117 @@ await client.collections.create({
});
// END FullVectorizerVoyageAI
+// Clean up
+await client.collections.delete('DemoCollection');
+
+// START BasicMMVectorizerVoyageAI
+await client.collections.create({
+ name: "DemoCollection",
+ // highlight-start
+ properties: [
+ {
+ name: 'title',
+ dataType: weaviate.configure.dataType.TEXT,
+ },
+ {
+ name: 'poster',
+ dataType: weaviate.configure.dataType.BLOB,
+ },
+ ],
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecVoyageAI({
+ name: "title_vector",
+ // Define the fields to be used for the vectorization - using imageFields, textFields
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }]
+ })],
+ // highlight-end
+ // Additional parameters not shown
+})// END BasicMMVectorizerVoyageAI
+
+
+// Clean up
+await client.collections.delete('DemoCollection');
+
+// START MMVectorizerVoyageAICustomModel
+await client.collections.create({
+ name: "DemoCollection",
+ // highlight-start
+ properties: [
+ {
+ name: 'title',
+ dataType: weaviate.configure.dataType.TEXT,
+ },
+ {
+ name: 'poster',
+ dataType: weaviate.configure.dataType.BLOB,
+ },
+ ],
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecVoyageAI({
+ name: "title_vector",
+ // Define the fields to be used for the vectorization - using imageFields, textFields
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }],
+ model: "voyage-multimodal-3",
+ })],
+ // highlight-end
+ // Additional parameters not shown
+})// END MMVectorizerVoyageAICustomModel
+
+
+// Clean up
+await client.collections.delete('DemoCollection');
+
+// START FullMMVectorizerVoyageAI
+await client.collections.create({
+ name: "DemoCollection",
+ // highlight-start
+ properties: [
+ {
+ name: 'title',
+ dataType: weaviate.configure.dataType.TEXT,
+ },
+ {
+ name: 'poster',
+ dataType: weaviate.configure.dataType.BLOB,
+ },
+ ],
+ vectorizers: [
+ weaviate.configure.vectorizer.multi2VecVoyageAI({
+ name: "title_vector",
+ // Define the fields to be used for the vectorization - using imageFields, textFields
+ imageFields: [{
+ name: "poster",
+ weight: 0.9
+ }],
+ textFields: [{
+ name: "title",
+ weight: 0.1
+ }],
+ // Further options
+ // model: "voyage-multimodal-3",
+ // truncation: "true", // or "false"
+ // outputEncoding: "base64" // or "null"
+ // baseURL: ""
+ })],
+ // highlight-end
+ // Additional parameters not shown
+})// END FullMMVectorizerVoyageAI
+
+
// Clean up
await client.collections.delete('DemoCollection');
diff --git a/developers/weaviate/model-providers/cohere/embeddings-multimodal.md b/developers/weaviate/model-providers/cohere/embeddings-multimodal.md
index 4c915bf2d3..b598dfbf3b 100644
--- a/developers/weaviate/model-providers/cohere/embeddings-multimodal.md
+++ b/developers/weaviate/model-providers/cohere/embeddings-multimodal.md
@@ -306,7 +306,7 @@ The query below returns the `n` most similar objects to the input image from the
### Other integrations
-- [Cohere text embeddings models + Weaviate](./embeddings.md).
+- [Cohere text embedding models + Weaviate](./embeddings.md).
- [Cohere generative models + Weaviate](./generative.md).
- [Cohere reranker models + Weaviate](./reranker.md).
diff --git a/developers/weaviate/model-providers/cohere/embeddings.md b/developers/weaviate/model-providers/cohere/embeddings.md
index 46b920098f..6ca553cc97 100644
--- a/developers/weaviate/model-providers/cohere/embeddings.md
+++ b/developers/weaviate/model-providers/cohere/embeddings.md
@@ -68,6 +68,10 @@ Provide the API key to Weaviate using one of the following methods:
startMarker="# START CohereInstantiation"
endMarker="# END CohereInstantiation"
language="py"
+ docRefs={[
+ "weaviate.html#weaviate.connect_to_weaviate_cloud",
+ "weaviate.html#weaviate.auth.Auth",
+ ]}
/>
@@ -77,6 +81,10 @@ Provide the API key to Weaviate using one of the following methods:
startMarker="// START CohereInstantiation"
endMarker="// END CohereInstantiation"
language="ts"
+ docRefs={[
+ "functions/connectToWeaviateCloud",
+ "classes/ApiKey",
+ ]}
/>
diff --git a/developers/weaviate/model-providers/index.md b/developers/weaviate/model-providers/index.md
index 1940fd34dd..8d2f0d0b09 100644
--- a/developers/weaviate/model-providers/index.md
+++ b/developers/weaviate/model-providers/index.md
@@ -30,7 +30,7 @@ This enables an enhanced developed experience, such as the ability to:
| [OctoAI (Deprecated)](./octoai/index.md) | [Text](./octoai/embeddings.md) | [Text](./octoai/generative.md) | - |
| [OpenAI](./openai/index.md) | [Text](./openai/embeddings.md) | [Text](./openai/generative.md) | - |
| [Azure OpenAI](./openai-azure/index.md) | [Text](./openai-azure/embeddings.md) | [Text](./openai-azure/generative.md) | - |
-| [Voyage AI](./voyageai/index.md) | [Text](./voyageai/embeddings.md) | - | [Reranker](./voyageai/reranker.md) |
+| [Voyage AI](./voyageai/index.md) | [Text](./voyageai/embeddings.md), [Multimodal](./voyageai/embeddings-multimodal.md) | - | [Reranker](./voyageai/reranker.md) |
| [Weaviate](./weaviate/index.md) | [Text](./weaviate/embeddings.md) | - | - |
#### Enable all API-based modules
diff --git a/developers/weaviate/model-providers/voyageai/embeddings-multimodal.md b/developers/weaviate/model-providers/voyageai/embeddings-multimodal.md
new file mode 100644
index 0000000000..e5f0a58d15
--- /dev/null
+++ b/developers/weaviate/model-providers/voyageai/embeddings-multimodal.md
@@ -0,0 +1,326 @@
+---
+title: Multimodal Embeddings
+description: "Weaviate's integration with VoyageAI's APIs allows you to access their models' capabilities directly from Weaviate."
+sidebar_position: 25
+image: og/docs/integrations/provider_integrations_voyageai.jpg
+# tags: ['model providers', 'voyageai', 'embeddings']
+---
+
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+import FilteredTextBlock from '@site/src/components/Documentation/FilteredTextBlock';
+import PyConnect from '!!raw-loader!../_includes/provider.connect.py';
+import TSConnect from '!!raw-loader!../_includes/provider.connect.ts';
+import PyCode from '!!raw-loader!../_includes/provider.vectorizer.py';
+import TSCode from '!!raw-loader!../_includes/provider.vectorizer.ts';
+
+# VoyageAI Multimodal Embeddings with Weaviate
+
+:::info Added in `v1.25.28`, `v1.26.12`, `1.27.8`
+:::
+
+Weaviate's integration with VoyageAI's APIs allows you to access their models' capabilities directly from Weaviate.
+
+[Configure a Weaviate vector index](#configure-the-vectorizer) to use a VoyageAI embedding model, and Weaviate will generate embeddings for various operations using the specified model and your VoyageAI API key. This feature is called the *vectorizer*.
+
+Note this integration does not support Voyage AI's "interleaving" input mode. For this type of usage, import your own vectors with objects as [shown in this guide](../../starter-guides/custom-vectors.mdx).
+
+At [import time](#data-import), Weaviate generates multimodal object embeddings and saves them into the index. For [vector](#vector-near-text-search) and [hybrid](#hybrid-search) search operations, Weaviate converts text queries into embeddings. [Multimodal search operations](#vector-near-media-search) are also supported.
+
+![Embedding integration illustration](../_includes/integration_voyageai_embedding.png)
+
+## Requirements
+
+### Weaviate configuration
+
+Your Weaviate instance must be configured with the VoyageAI vectorizer integration (`multi2vec-voyageai`) module.
+
+
+ For Weaviate Cloud (WCD) users
+
+This integration is enabled by default on Weaviate Cloud (WCD) serverless instances.
+
+
+
+
+ For self-hosted users
+
+- Check the [cluster metadata](../../config-refs/meta.md) to verify if the module is enabled.
+- Follow the [how-to configure modules](../../configuration/modules.md) guide to enable the module in Weaviate.
+
+
+
+### API credentials
+
+You must provide a valid VoyageAI API key to Weaviate for this integration. Go to [VoyageAI](https://voyageai.com/) to sign up and obtain an API key.
+
+Provide the API key to Weaviate using one of the following methods:
+
+- Set the `VOYAGEAI_APIKEY` environment variable that is available to Weaviate.
+- Provide the API key at runtime, as shown in the examples below.
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Configure the vectorizer
+
+[Configure a Weaviate index](../../manage-data/collections.mdx#specify-a-vectorizer) as follows to use a VoyageAI embedding model:
+
+
+
+
+
+
+
+
+
+
+
+
+### Select a model
+
+You can specify one of the [available models](#available-models) for the vectorizer to use, as shown in the following configuration example.
+
+
+
+
+
+
+
+
+
+
+
+
+You can [specify](#vectorizer-parameters) one of the [available models](#available-models) for Weaviate to use. The [default model](#available-models) is used if no model is specified.
+
+import VectorizationBehavior from '/_includes/vectorization.behavior.mdx';
+
+
+ Vectorization behavior
+
+
+
+
+
+### Vectorizer parameters
+
+The following examples show how to configure VoyageAI-specific options.
+
+
+
+
+
+
+
+
+
+
+
+
+For further details on model parameters, see the [VoyageAI API documentation](https://docs.voyageai.com/reference/multimodal-embeddings-api).
+
+## Data import
+
+After configuring the vectorizer, [import data](../../manage-data/import.mdx) into Weaviate. Weaviate generates embeddings for text objects using the specified model.
+
+
+
+
+
+
+
+
+
+
+
+
+
+:::tip Re-use existing vectors
+If you already have a compatible model vector available, you can provide it directly to Weaviate. This can be useful if you have already generated embeddings using the same model and want to use them in Weaviate, such as when migrating data from another system.
+:::
+
+## Searches
+
+Once the vectorizer is configured, Weaviate will perform vector and hybrid search operations using the specified VoyageAI model.
+
+![Embedding integration at search illustration](../_includes/integration_voyageai_embedding_search.png)
+
+### Vector (near text) search
+
+When you perform a [vector search](../../search/similarity.md#search-with-text), Weaviate converts the text query into an embedding using the specified model and returns the most similar objects from the database.
+
+The query below returns the `n` most similar objects from the database, set by `limit`.
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Hybrid search
+
+:::info What is a hybrid search?
+A hybrid search performs a vector search and a keyword (BM25) search, before [combining the results](../../search/hybrid.md#change-the-ranking-method) to return the best matching objects from the database.
+:::
+
+When you perform a [hybrid search](../../search/hybrid.md), Weaviate converts the text query into an embedding using the specified model and returns the best scoring objects from the database.
+
+The query below returns the `n` best scoring objects from the database, set by `limit`.
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Vector (near media) search
+
+When you perform a media search such as a [near image search](../../search/similarity.md#search-with-image), Weaviate converts the query into an embedding using the specified model and returns the most similar objects from the database.
+
+To perform a near media search such as near image search, convert the media query into a base64 string and pass it to the search query.
+
+The query below returns the `n` most similar objects to the input image from the database, set by `limit`.
+
+
+
+
+
+
+
+
+
+
+
+
+
+## References
+
+### Available models
+
+- `voyage-multimodal-3` (Default)
+
+## Further resources
+
+### Other integrations
+
+- [VoyageAI text embedding models + Weaviate](./embeddings.md).
+- [VoyageAI reranker models + Weaviate](./reranker.md).
+
+### Code examples
+
+Once the integrations are configured at the collection, the data management and search operations in Weaviate work identically to any other collection. See the following model-agnostic examples:
+
+- The [how-to: manage data](../../manage-data/index.md) guides show how to perform data operations (i.e. create, update, delete).
+- The [how-to: search](../../search/index.md) guides show how to perform search operations (i.e. vector, keyword, hybrid) as well as retrieval augmented generation.
+
+### External resources
+
+- VoyageAI [Multimodal Embed API documentation](https://docs.voyageai.com/reference/multimodal-embeddings-api)
+
+## Questions and feedback
+
+import DocsFeedback from '/_includes/docs-feedback.mdx';
+
+
diff --git a/developers/weaviate/model-providers/voyageai/embeddings.md b/developers/weaviate/model-providers/voyageai/embeddings.md
index e71e73965d..e5640e6e6f 100644
--- a/developers/weaviate/model-providers/voyageai/embeddings.md
+++ b/developers/weaviate/model-providers/voyageai/embeddings.md
@@ -362,6 +362,7 @@ The query below returns the `n` best scoring objects from the database, set by `
### Other integrations
+- [Voyage AI multimodal embedding embeddings models + Weaviate](./embeddings-multimodal.md)
- [Voyage AI reranker models + Weaviate](./embeddings.md).
### Code examples
diff --git a/developers/weaviate/model-providers/voyageai/index.md b/developers/weaviate/model-providers/voyageai/index.md
index d54a518507..aff6476ffc 100644
--- a/developers/weaviate/model-providers/voyageai/index.md
+++ b/developers/weaviate/model-providers/voyageai/index.md
@@ -19,9 +19,10 @@ These integrations empower developers to build sophisticated AI-driven applicati
Voyage AI's embedding models transform text data into high-dimensional vector representations, capturing semantic meaning and context.
-[Weaviate integrates with Voyage AI's embedding models](./embeddings.md) to enable seamless vectorization of data. This integration allows users to perform semantic and hybrid search operations without the need for additional preprocessing or data transformation steps.
+[Weaviate integrates with Voyage AI's embedding models](./embeddings.md) and [multimodal embedding models](./embeddings-multimodal.md) to enable seamless vectorization of data. This integration allows users to perform semantic and hybrid search operations without the need for additional preprocessing or data transformation steps.
-[Voyage AI embedding integration page](./embeddings.md)
+- [Voyage AI embedding integration page](./embeddings.md)
+- [Voyage AI multimodal embedding integration page](./embeddings-multimodal.md)
### Reranker models
@@ -46,6 +47,8 @@ You must provide a valid Voyage AI API key to Weaviate for these integrations. G
Then, go to the relevant integration page to learn how to configure Weaviate with the Voyage AI models and start using them in your applications.
- [Text Embeddings](./embeddings.md)
+- [Multimodal Embeddings](./embeddings-multimodal.md)
+- [Rerankers](./reranker.md)
## Questions and feedback
diff --git a/developers/weaviate/model-providers/voyageai/reranker.md b/developers/weaviate/model-providers/voyageai/reranker.md
index 87c0925d15..a19308770a 100644
--- a/developers/weaviate/model-providers/voyageai/reranker.md
+++ b/developers/weaviate/model-providers/voyageai/reranker.md
@@ -170,6 +170,7 @@ Any search in Weaviate can be combined with a reranker to perform reranking oper
### Other integrations
- [Voyage AI embedding models + Weaviate](./embeddings.md).
+- [Voyage AI multimodal embedding embeddings models + Weaviate](./embeddings-multimodal.md)
### Code examples
diff --git a/developers/weaviate/modules/img2vec-neural.md b/developers/weaviate/modules/img2vec-neural.md
index 3c6049ae5d..82980f429e 100644
--- a/developers/weaviate/modules/img2vec-neural.md
+++ b/developers/weaviate/modules/img2vec-neural.md
@@ -9,9 +9,6 @@ image: og/docs/modules/img2vec-neural.jpg
For new projects, we recommend using the [Transformers multi-modal integration](../model-providers/transformers/embeddings-multimodal.md) module instead of `img2vec-neural`. This uses CLIP models, which uses a more modern model architecture than `resnet` models used in `img2vec-neural`. CLIP models are also multi-modal, meaning they can handle both images and text and therefore applicable to a wider range of use cases.
:::
-
-## Overview
-
The `img2vec-neural` module enables Weaviate to obtain vectors locally images using a [`resnet50`](https://arxiv.org/abs/1512.03385) model.
`img2vec-neural` encapsulates the model in a Docker container, which allows independent scaling on GPU-enabled hardware while keeping Weaviate on CPU-only hardware, as Weaviate is CPU-optimized.
diff --git a/developers/weaviate/modules/text2vec-contextionary.md b/developers/weaviate/modules/text2vec-contextionary.md
index df078faf6e..d767de79eb 100644
--- a/developers/weaviate/modules/text2vec-contextionary.md
+++ b/developers/weaviate/modules/text2vec-contextionary.md
@@ -6,10 +6,6 @@ image: og/docs/modules/text2vec-contextionary.jpg
# tags: ['text2vec', 'text2vec-contextionary', 'contextionary']
---
-
-
-## Overview
-
The `text2vec-contextionary` module enables Weaviate to obtain vectors locally using a lightweight model.
Key notes:
diff --git a/developers/weaviate/more-resources/migration/index.md b/developers/weaviate/more-resources/migration/index.md
index f5e815b2af..28ff4e1dc3 100644
--- a/developers/weaviate/more-resources/migration/index.md
+++ b/developers/weaviate/more-resources/migration/index.md
@@ -18,6 +18,13 @@ When upgrading Weaviate, we recommend that you:
This approach of upgrading one minor version at a time helps to minimize the risk of issues during the upgrade process, by mirroring our testing and release process. Upgrading to the latest patch version of each minor release ensures that you have the latest bugfixes and improvements.
+### Version-specific migration guides
+
+- When upgrading to version `1.25.x` from `1.24.x` (or lower), you must perform a [Raft migration](#raft-migration-v1250).
+- When upgrading to version `1.26.x` or higher (from the preceding version), ensure that the cluster metadata is synchronized.
+ - To do so, poll the `/cluster/statistics` endpoint, and check that the correct number of nodes are reporting statistics, and the `synchronized` flag is showing `true`, before proceeding with the upgrade.
+ - For an example implementation, see the [`wait_for_raft_sync` function here](https://github.com/weaviate/weaviate-local-k8s/blob/main/utilities/helpers.sh).
+
:::tip Scenario: upgrading from `v1.25.10` to `v1.27`
Between `v1.25` and `v1.27`, there are two minor versions, `v1.26` and `v1.27`. So:
@@ -32,8 +39,6 @@ Between `v1.25` and `v1.27`, there are two minor versions, `v1.26` and `v1.27`.
:::
-## Version-specific migration guides
-
### Raft Migration (v1.25.0+)
Weaviate `v1.25.0` introduced Raft [as the consensus algorithm for cluster metadata](../../concepts/replication-architecture/cluster-architecture.md#metadata-replication-raft). This requires a one-time migration of the cluster metadata.
diff --git a/developers/weaviate/quickstart/weaviate.md b/developers/weaviate/quickstart/weaviate.md
deleted file mode 100644
index a30e6c6938..0000000000
--- a/developers/weaviate/quickstart/weaviate.md
+++ /dev/null
@@ -1,661 +0,0 @@
----
-title: With Weaviate Embeddings
-sidebar_position: 0
-image: og/docs/quickstart-tutorial.jpg
-# tags: ['getting started']
-hide_table_of_contents: true
----
-
-# Quickstart: with Weaviate Embeddings
-
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-
-Expected time: 30 minutesPrerequisites: None
-
-
-:::info Before you begin
-
-In this quickstart guide, you will use *Weaviate Cloud*, *Weaviate Embeddings* and *OpenAI* to:
-
-1. Set up Weaviate. (10 minutes)
-1. Populate the database. (10 minutes)
-1. Perform a semantic search and retrieval augmented generation (RAG). (10 minutes)
-
-```mermaid
-flowchart LR
- %% Define nodes with white backgrounds and darker borders
- A1["Create Weaviate\nSandbox"] --> A2["Install client\nlibrary"]
- A2 --> A3["Connect to\nWeaviate"]
- A3 --> B1["Define collection\n(with an inference API)"]
- B1 --> B2["Batch import\nobjects"]
- B2 --> C1["Semantic search\n(nearText)"]
- C1 --> C2["RAG\n(Generate)"]
-
- %% Group nodes in subgraphs with brand colors
- subgraph sg1 ["1. Setup"]
- A1
- A2
- A3
- end
-
- subgraph sg2 ["2. Populate"]
- B1
- B2
- end
-
- subgraph sg3 ["3. Query"]
- C1
- C2
- end
-
- %% Style nodes with white background and darker borders
- style A1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style A2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style A3 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style B1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style B2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style C1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style C2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
-
- %% Style subgraphs with brand colors
- style sg1 fill:#ffffff,stroke:#61BD73,stroke-width:2px,color:#130C49
- style sg2 fill:#ffffff,stroke:#130C49,stroke-width:2px,color:#130C49
- style sg3 fill:#ffffff,stroke:#7AD6EB,stroke-width:2px,color:#130C49
-```
-
-
-
-Notes:
-
-- The code examples here are self-contained. You can copy and paste them into your own environment to try them out.
-- Python users can try [our Jupyter notebook](https://github.com/weaviate-tutorials/quickstart/blob/main/quickstart_end_to_end.ipynb) locally or on [Google Colab](https://colab.research.google.com/github/weaviate-tutorials/quickstart/blob/main/quickstart_end_to_end.ipynb).
-- If you prefer to use locally hosted resources, see [Quickstart: locally hosted](./local.md).
-:::
-
-
-
-### Prerequisites
-
-You need a Weaviate Cloud account to complete this guide. If you do not have one, you can [create a free account](https://console.weaviate.cloud).
-
-## Step 1: Set up Weaviate
-
-### 1.1 Create a Weaviate database
-
-Go the [WCD homepage](https://console.weaviate.cloud) and create a free Sandbox instance.
-
-import CreateCluster from '/developers/weaviate/quickstart/img/create_cluster.png';
-import CreateSandbox from '/developers/weaviate/quickstart/img/create_sandbox.png';
-import EnableEmbeddings from '/developers/weaviate/quickstart/img/enable_embeddings.png';
-
-
- Click on this button to start cluster creation
-
-
-
-
-
-
-
-
-
-
Give your cluster a name.
-
Set your preferred cloud region.
-
Click "Create".
-
-
-
-
-
-
-
-
- Populate these fields and create a sandbox.
-
-
-
-
-
-
-
-
-
-
Go to "Embedding" on the navigation bar.
-
Toggle "Enabled" to the "On" position
-
-
-
-
-
-
-
-
- Enable Weaviate Embeddings.
-
-
-
-
-
-
-:::note
-- Cluster provisioning typically takes 1-3 minutes.
-- When the cluster is ready, WCD displays a check mark (`✔️`) next to the cluster name.
-- Note that WCD adds a random suffix to sandbox cluster names to ensure uniqueness.
-- As of 2024 November, this service is hosted in the United States. By using the service, you agree to the data being transferred to the United States for processing.
- - We do not use your data for any purpose other than providing the service.
-:::
-
-
-
-### 1.2 Install a client library
-
-We recommend using a [client library](../client-libraries/index.md) to work with Weaviate. Follow the instructions below to install one of the official client libraries, available in [Python](../client-libraries/python/index.md), [JavaScript/TypeScript](../client-libraries/typescript/index.mdx), [Go](../client-libraries/go.md), and [Java](../client-libraries/java.md).
-
-import CodeClientInstall from '/_includes/code/quickstart/clients.install.mdx';
-
-
-
-### 1.3: Connect to Weaviate
-
-Now you can connect to your Weaviate instance. Get the instance **REST Endpoint URL** and the **Administrator API Key** from the WCD console as shown below.
-
-import WCDClusterURL from '/developers/weaviate/quickstart/img/cluster_url.png';
-
-import WCDClusterAdminKey from '/developers/weaviate/quickstart/img/cluster_admin_key.png';
-
-
-
-
-
-
-
-
-
- Grab the REST Endpoint URL.
-
-
-
-
-
-
-
-
-
-
-
- Grab the Admin API key.
-
-
-
-
-
-
-
-
-:::info REST vs gRPC endpoints
-Weaviate supports both REST and gRPC protocols. For Weaviate Cloud deployments, you only need to provide the REST endpoint URL - the client will automatically configure gRPC.
-:::
-
-Once you have the **REST Endpoint URL** and the **Admin API key**, you can connect to the Sandbox instance, and work with Weaviate.
-
-The example below shows how to connect to Weaviate and perform a basic operation, like checking the cluster status.
-
-import ConnectIsReady from '/_includes/code/quickstart/quickstart.is_ready.mdx'
-
-
-
-If you did not see any errors, you are ready to proceed. We will replace the simple cluster status check with more meaningful operations in the next steps.
-
-
-
-## Step 2: Populate the database
-
-Now, we can populate our database by first defining a collection then adding data.
-
-### 2.1 Define a collection
-
-:::info What is a collection?
-A collection is a set of objects that share the same data structure, like a table in relational databases or a collection in NoSQL databases. A collection also includes additional configurations that define how the data objects are stored and indexed.
-:::
-
-The following example creates a *collection* called `Question` with:
- - OpenAI [embedding model integration](../model-providers/openai/embeddings.md) to create vectors during ingestion & queries.
- - OpenAI [generative AI integrations](../model-providers/openai/generative.md) for retrieval augmented generation (RAG).
-
-import CreateCollection from '/_includes/code/quickstart/quickstart.create_collection.mdx'
-
-
-
-Run this code to create the collection to which you can add data.
-
-:::info What models are being used?
-You can optionally specify the model in the collection definition. As we did not specify models in the collection definition above, these integrations will use the Weaviate-defined default models.
-
-
-See the [model providers integration](../model-providers/index.md) section for more information.
-:::
-
-
- Do you prefer a different setup?
-
-Weaviate is very flexible. If you prefer a different model provider integration, or prefer to import your own vectors, see one of the following guides:
-
-
-
-
-
-
Prefer a different model provider?
-
-
- See this section for information on how to user another provider, such as AWS, Cohere, Google, and many more.
-
-
-
-
-### 2.2 Add objects
-
-We can now add data to our collection.
-
-The following example:
-- Loads objects, and
-- Adds objects to the target collection (`Question`) using a batch process.
-
-:::tip Batch imports
-([Batch imports](../manage-data/import.mdx)) are the most efficient way to add large amounts of data, as it sends multiple objects in a single request. See the [How-to: Batch import](../manage-data/import.mdx) guide for more information.
-:::
-
-import ImportObjects from '/_includes/code/quickstart/quickstart.import_objects.mdx'
-
-
-
-Run this code to add the demo data.
-
-:::info OpenAI API key in the header
-Note that this code includes an additional header for the OpenAI API key. Weaviate uses this key to generate vector embeddings for the data objects as they are being added.
-:::
-
-
-
-## Step 3: Queries
-
-Weaviate provides a wide range of query tools to help you find the right data. We will try a few searches here.
-
-### 3.1 Semantic search
-
-Semantic search finds results based on meaning. This is called `nearText` in Weaviate.
-
-The following example searches for 2 objects whose meaning is most similar to that of `biology`.
-
-import QueryNearText from '/_includes/code/quickstart/quickstart.query.neartext.mdx'
-
-
-
-Run this code to perform the query. Our query found entries for `DNA` and `species`.
-
-
- Example full response in JSON format
-
-```json
-{
- {
- "answer": "DNA",
- "question": "In 1953 Watson & Crick built a model of the molecular structure of this, the gene-carrying substance",
- "category": "SCIENCE"
- },
- {
- "answer": "species",
- "question": "2000 news: the Gunnison sage grouse isn't just another northern sage grouse, but a new one of this classification",
- "category": "SCIENCE"
- }
-}
-```
-
-
-
-If you inspect the full response, you will see that the word `biology` does not appear anywhere.
-
-Even so, Weaviate was able to return biology-related entries. This is made possible by *vector embeddings* that capture meaning. Under the hood, semantic search is powered by vectors, or vector embeddings.
-
-Here is a diagram showing the workflow in Weaviate.
-
-```mermaid
-flowchart LR
- Query["🔍 Search:\n'biology'"]
-
- subgraph sg1 ["Vector Search"]
- direction LR
- VS1["Convert query\nto vector"] --> VS2["Find similar\nvectors"]
- VS2 --> VS3["Return top\nmatches"]
- end
-
- subgraph sg2 ["Results"]
- R1["Most similar\ndocuments"]
- end
-
- Query --> VS1
- VS3 --> R1
-
- %% Style nodes with white background and darker borders
- style Query fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS3 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style R1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
-
- %% Style subgraphs with brand colors
- style sg1 fill:#ffffff,stroke:#61BD73,stroke-width:2px,color:#130C49
- style sg2 fill:#ffffff,stroke:#130C49,stroke-width:2px,color:#130C49
-```
-
-:::info Where did the vectors come from?
-Weaviate used the OpenAI API key to generate a vector embedding for each object during import. During the query, Weaviate similarly converted the query (`biology`) into a vector.
-
-As we mentioned above, this is optional. See [Starter Guide: Bring Your Own Vectors](/developers/weaviate/starter-guides/custom-vectors.mdx) if you would prefer to provide your own vectors.
-:::
-
-:::tip More search types available
-
-Weaviate is capable of many types of searches. See, for example, our how-to guides on [similarity searches](../search/similarity.md), [keyword searches](../search/bm25.md), [hybrid searches](../search/hybrid.md), and [filtered searches](../search/filters.md).
-
-:::
-
-### 3.2 Retrieval augmented generation
-
-Retrieval augmented generation (RAG), also called generative search, combines the power of generative AI models such as large language models (LLMs) with the up-to-date truthfulness of a database.
-
-RAG works by prompting a large language model (LLM) with a combination of a *user query* and *data retrieved from a database*.
-
-This diagram shows the RAG workflow in Weaviate.
-
-```mermaid
-flowchart LR
- subgraph sg0 ["Weaviate Query"]
- direction TB
- Search["🔍 Search: \n'biology'"]
- Prompt["✍️ Prompt: \n'Write a\ntweet...'"]
- end
-
- subgraph sg1 ["Vector Search"]
- direction LR
- VS1["Convert query\nto vector"] --> VS2["Find similar\nvectors"]
- VS2 --> VS3["Return top\nmatches"]
- end
-
- subgraph sg2 ["Generation"]
- direction LR
- G1["Send\n(results + prompt)\nto LLM"]
- G1 --> G2["Generate\nresponse"]
- end
-
- subgraph sg3 ["Results"]
- direction TB
- R1["Most similar\ndocuments"]
- R2["Generated\ncontent"]
- end
-
- Search --> VS1
- VS3 --> R1
- Prompt --> G1
- VS3 --> G1
- G2 --> R2
-
- %% Style nodes with white background and darker borders
- style Search fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style Prompt fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style VS3 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style G1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style G2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style R1 fill:#ffffff,stroke:#B9C8DF,color:#130C49
- style R2 fill:#ffffff,stroke:#B9C8DF,color:#130C49
-
- %% Style subgraphs with brand colors
- style sg0 fill:#ffffff,stroke:#130C49,stroke-width:2px,color:#130C49
- style sg1 fill:#ffffff,stroke:#61BD73,stroke-width:2px,color:#130C49
- style sg2 fill:#ffffff,stroke:#7AD6EB,stroke-width:2px,color:#130C49
- style sg3 fill:#ffffff,stroke:#130C49,stroke-width:2px,color:#130C49
-```
-
-The following example combines the same search (for `biology`) with a prompt to generate a tweet.
-
-import QueryRAG from '/_includes/code/quickstart/quickstart.query.rag.mdx'
-
-
-
-Run this code to perform the query. Here is one possible response (your response will likely be different).
-
-```text
-🧬 In 1953 Watson & Crick built a model of the molecular structure of DNA, the gene-carrying substance! 🧬🔬
-
-🦢 2000 news: the Gunnison sage grouse isn't just another northern sage grouse, but a new species! 🦢🌿 #ScienceFacts #DNA #SpeciesClassification
-```
-
-The response should be new, yet familiar. This because you have seen the entries above for `DNA` and `species` in the [semantic search](#semantic-search) section.
-
-The power of RAG comes from the ability to transform your own data. Weaviate helps you in this journey by making it easy to perform a combined search & generation in just a few lines of code.
-
-
-
-## Recap
-
-In this quickstart guide, you:
-
-- Created a Serverless Weaviate sandbox instance on Weaviate Cloud.
-- Defined a collection and added data.
-- Performed queries, including:
- - Semantic search, and
- - Retrieval augmented generation.
-
-Where to go next is up to you. We include some suggested steps and resources below.
-
-
-
-## Next
-
-Try these additional resources to learn more about Weaviate:
-
-
-
-
-
-## FAQs & Troubleshooting
-
-We provide answers to some common questions, or potential issues below.
-
-### Questions
-
-#### Can I use different integrations?
-
-
- See answer
-
-In this example, we use the `OpenAI` inference API. But you can use others.
-
-If you do want to change the embeddings, or the generative AI integrations, you can. You will need to:
-- Ensure that the Weaviate module is available in the Weaviate instance you are using,
-- Modify your collection definition to use your preferred integration, and
-- Make sure to use the right API key(s) (if necessary) for your integration.
-
-See the [model providers integration](../model-providers/index.md) section for more information.
-
-
-
-### Troubleshooting
-
-#### If you see Error: Name 'Question' already used as a name for an Object class
-
-
- See answer
-
-You may see this error if you try to create a collection that already exists in your instance of Weaviate. In this case, you can follow these instructions to delete the collection.
-
-import CautionSchemaDeleteClass from '/_includes/schema-delete-class.mdx'
-
-
-
-
-
-#### How to confirm collection creation
-
-
- See answer
-
-If you are not sure whether the collection has been created, check the [`schema`](/developers/weaviate/api/rest#tag/schema) endpoint.
-
-Replace WEAVIATE_INSTANCE_URL with your instance's REST Endpoint URL.:
-
-```
-https://WEAVIATE_INSTANCE_URL/v1/schema
-```
-
-You should see:
-
-```json
-{
- "classes": [
- {
- "class": "Question",
- ... // truncated additional information here
- "vectorizer": "text2vec-openai"
- }
- ]
-}
-```
-
-Where the schema should indicate that the `Question` collection has been added.
-
-:::note REST & GraphQL in Weaviate
-Weaviate uses a combination of RESTful and GraphQL APIs. In Weaviate, RESTful API endpoints can be used to add data or obtain information about the Weaviate instance, and the GraphQL interface to retrieve data.
-:::
-
-
-
-#### How to confirm data import
-
-
- See answer
-
-To confirm successful data import, check the [`objects`](/developers/weaviate/api/rest#tag/objects) endpoint to verify that all objects are imported.
-
-Replace WEAVIATE_INSTANCE_URL with your instance REST Endpoint URL:
-
-```
-https://WEAVIATE_INSTANCE_URL/v1/objects
-```
-
-You should see:
-
-```json
-{
- "deprecations": null,
- "objects": [
- ... // Details of each object
- ],
- "totalResults": 10 // You should see 10 results here
-}
-```
-
-Where you should be able to confirm that you have imported all `10` objects.
-
-
-
-#### If the `nearText` search is not working
-
-
- See answer
-
-To perform text-based (`nearText`) similarity searches, you need to have a vectorizer enabled, and configured in your collection.
-
-Make sure the vectorizer is configured [like this](#define-a-data-collection).
-
-If the search still doesn't work, [contact us](#questions-and-feedback)!
-
-
-
-
-## Questions and feedback
-
-import DocsFeedback from '/_includes/docs-feedback.mdx';
-
-
diff --git a/developers/weaviate/release-notes/index.md b/developers/weaviate/release-notes/index.md
index 219144bd28..6221cc0950 100644
--- a/developers/weaviate/release-notes/index.md
+++ b/developers/weaviate/release-notes/index.md
@@ -9,6 +9,7 @@ This page lists [developer release notes](https://github.com/weaviate/weaviate/r
- To see the GitHub release notes for a particular version, click on the version number.
- For expanded blog posts on recent minor releases, follow the links in the table of contents at the left of this page.
+- For more information on upgrading Weaviate, see the [Migration Guide](../more-resources/migration/index.md).
### Weaviate core and client releases
@@ -28,7 +29,3 @@ Refer to the GitHub release notes for the corresponding client library for more
- [TypeScript/JavaScript](https://github.com/weaviate/typescript-client/releases)
- [Go](https://github.com/weaviate/weaviate-go-client/releases)
- [Java](https://github.com/weaviate/java-client/releases)
-
-#### Note: TypeScript client change
-
-The [TypeScript client](https://github.com/weaviate/typescript-client) replaced the [JavaScript client](https://github.com/weaviate/weaviate-javascript-client) on 2023-03-17.
diff --git a/developers/weaviate/release-notes/release_1_28.mdx b/developers/weaviate/release-notes/release_1_28.mdx
new file mode 100644
index 0000000000..309a90b676
--- /dev/null
+++ b/developers/weaviate/release-notes/release_1_28.mdx
@@ -0,0 +1,10 @@
+---
+title: Weaviate 1.28.0
+sidebar_position: 5
+image: og/docs/release-notes.jpg
+tags: ['release', 'engineering']
+---
+
+import ReleaseNotes from '/blog/2024-12-12-weaviate-1-28-release/_core-1-28-include.mdx' ;
+
+
diff --git a/developers/weaviate/search/aggregate.md b/developers/weaviate/search/aggregate.md
index 85ca942c3f..fa43478604 100644
--- a/developers/weaviate/search/aggregate.md
+++ b/developers/weaviate/search/aggregate.md
@@ -56,7 +56,7 @@ Return the number of objects matched by the query.
text={PyCodeV3}
startMarker="# MetaCount Python"
endMarker="# END MetaCount Python"
- language="py"
+ language="pyv3"
/>
@@ -74,7 +74,7 @@ Return the number of objects matched by the query.
text={TSCodeLegacy}
startMarker="// MetaCount TS"
endMarker="// END MetaCount TS"
- language="js"
+ language="tsv2"
/>
@@ -129,7 +129,7 @@ This example counts occurrence frequencies in the `question` property:
text={PyCodeV3}
startMarker="# TextProp Python"
endMarker="# END TextProp Python"
- language="py"
+ language="pyv3"
/>
@@ -147,7 +147,7 @@ This example counts occurrence frequencies in the `question` property:
text={TSCodeLegacy}
startMarker="// TextProp TS"
endMarker="// END TextProp TS"
- language="js"
+ language="tsv2"
/>
@@ -202,7 +202,7 @@ This example sums the `points` property.
text={PyCodeV3}
startMarker="# IntProp Python"
endMarker="# END IntProp Python"
- language="py"
+ language="pyv3"
/>
@@ -220,7 +220,7 @@ This example sums the `points` property.
text={TSCodeLegacy}
startMarker="// IntProp TS"
endMarker="// END IntProp TS"
- language="js"
+ language="tsv2"
/>
@@ -277,7 +277,7 @@ To retrieve aggregate data for each group, use the `groupedBy` properties.
text={PyCodeV3}
startMarker="# groupBy Python"
endMarker="# END groupBy Python"
- language="py"
+ language="pyv3"
/>
@@ -295,7 +295,7 @@ To retrieve aggregate data for each group, use the `groupedBy` properties.
text={TSCodeLegacy}
startMarker="// groupBy TS"
endMarker="// END groupBy TS"
- language="js"
+ language="tsv2"
/>
@@ -358,7 +358,7 @@ Use `objectLimit` to specify the maximum number of objects to aggregate.
text={PyCodeV3}
startMarker="# nearTextWithLimit Python"
endMarker="# END nearTextWithLimit Python"
- language="py"
+ language="pyv3"
/>
@@ -376,7 +376,7 @@ Use `objectLimit` to specify the maximum number of objects to aggregate.
text={TSCodeLegacy}
startMarker="// nearTextWithLimit TS"
endMarker="// END nearTextWithLimit TS"
- language="js"
+ language="tsv2"
/>
@@ -436,7 +436,7 @@ Use `distance` to specify how similar the objects should be.
text={PyCodeV3}
startMarker="# nearTextWithDistance Python"
endMarker="# END nearTextWithDistance Python"
- language="py"
+ language="pyv3"
/>
@@ -454,7 +454,7 @@ Use `distance` to specify how similar the objects should be.
text={TSCodeLegacy}
startMarker="// nearTextWithDistance TS"
endMarker="// END nearTextWithDistance TS"
- language="js"
+ language="tsv2"
/>
@@ -509,7 +509,7 @@ You can use `Aggregate` with a [hybrid search](./hybrid.md) operator.
text={PyCodeV3}
startMarker="# HybridExample"
endMarker="# END HybridExample"
- language="py"
+ language="pyv3"
/>
@@ -527,7 +527,7 @@ You can use `Aggregate` with a [hybrid search](./hybrid.md) operator.
text={TSCodeLegacy}
startMarker="// nearTextWithLimit TS"
endMarker="// END nearTextWithLimit TS"
- language="js"
+ language="tsv2"
/>
@@ -582,7 +582,7 @@ For more specific results, use a `filter` to narrow your search.
text={PyCodeV3}
startMarker="# whereFilter Python"
endMarker="# END whereFilter Python"
- language="py"
+ language="pyv3"
/>
@@ -600,7 +600,7 @@ For more specific results, use a `filter` to narrow your search.
text={TSCodeLegacy}
startMarker="// whereFilter TS"
endMarker="// END whereFilter TS"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/basics.md b/developers/weaviate/search/basics.md
index f38cdd3afa..dc8bc50642 100644
--- a/developers/weaviate/search/basics.md
+++ b/developers/weaviate/search/basics.md
@@ -40,7 +40,7 @@ You can get objects without specifying any parameters. This returns objects in a
text={PyCodeV3}
startMarker="# BasicGetPython"
endMarker="# END BasicGetPython"
- language="py"
+ language="pyv3"
/>
@@ -61,7 +61,7 @@ You can get objects without specifying any parameters. This returns objects in a
text={TSCodeLegacy}
startMarker="// BasicGetJS"
endMarker="// END BasicGetJS"
- language="js"
+ language="tsv2"
/>
@@ -137,7 +137,7 @@ Use `limit` to set a fixed maximum number of objects to return.
text={PyCodeV3}
startMarker="# GetWithLimitPython"
endMarker="# END GetWithLimitPython"
- language="py"
+ language="pyv3"
/>
@@ -158,7 +158,7 @@ Use `limit` to set a fixed maximum number of objects to return.
text={TSCodeLegacy}
startMarker="// GetWithLimitJS"
endMarker="// END GetWithLimitJS"
- language="js"
+ language="tsv2"
/>
@@ -226,7 +226,7 @@ To start in the middle of your result set, define an `offset`. Set a `limit` to
text={PyCodeV3}
startMarker="# GetWithLimitOffsetPython"
endMarker="# END GetWithLimitOffsetPython"
- language="py"
+ language="pyv3"
/>
@@ -247,7 +247,7 @@ To start in the middle of your result set, define an `offset`. Set a `limit` to
text={TSCodeLegacy}
startMarker="// GetWithLimitOffsetJS"
endMarker="// END GetWithLimitOffsetJS"
- language="js"
+ language="tsv2"
/>
@@ -319,7 +319,7 @@ You can specify which object properties to return.
text={PyCodeV3}
startMarker="# GetPropertiesPython"
endMarker="# END GetPropertiesPython"
- language="py"
+ language="pyv3"
/>
@@ -340,7 +340,7 @@ You can specify which object properties to return.
text={TSCodeLegacy}
startMarker="// GetPropertiesJS"
endMarker="// END GetPropertiesJS"
- language="js"
+ language="tsv2"
/>
@@ -408,7 +408,7 @@ You can retrieve the object vector. (Also applicable where [named vectors](../co
text={PyCodeV3}
startMarker="# GetObjectVectorPython"
endMarker="# END GetObjectVectorPython"
- language="py"
+ language="pyv3"
/>
@@ -429,7 +429,7 @@ You can retrieve the object vector. (Also applicable where [named vectors](../co
text={TSCodeLegacy}
startMarker="// GetObjectVectorJS"
endMarker="// END GetObjectVectorJS"
- language="js"
+ language="tsv2"
/>
@@ -499,7 +499,7 @@ You can retrieve the object `id` (uuid).
text={PyCodeV3}
startMarker="# GetObjectIdPython"
endMarker="# END GetObjectIdPython"
- language="py"
+ language="pyv3"
/>
@@ -520,7 +520,7 @@ You can retrieve the object `id` (uuid).
text={TSCodeLegacy}
startMarker="// GetObjectIdJS"
endMarker="// END GetObjectIdJS"
- language="js"
+ language="tsv2"
/>
@@ -593,7 +593,7 @@ To retrieve properties from cross-referenced objects, specify:
text={PyCodeV3}
startMarker="# GetWithCrossRefsPython"
endMarker="# END GetWithCrossRefsPython"
- language="py"
+ language="pyv3"
/>
@@ -614,7 +614,7 @@ To retrieve properties from cross-referenced objects, specify:
text={TSCodeLegacy}
startMarker="// GetWithCrossRefs"
endMarker="// END GetWithCrossRefs"
- language="js"
+ language="tsv2"
/>
@@ -674,7 +674,7 @@ You can specify metadata fields to be returned.
text={PyCodeV3}
startMarker="# GetWithMetadataPython"
endMarker="# END GetWithMetadataPython"
- language="py"
+ language="pyv3"
/>
@@ -695,7 +695,7 @@ You can specify metadata fields to be returned.
text={TSCodeLegacy}
startMarker="// GetWithMetadataJS"
endMarker="// END GetWithMetadataJS"
- language="js"
+ language="tsv2"
/>
@@ -752,7 +752,7 @@ If [multi-tenancy](../concepts/data.md#multi-tenancy) is enabled, specify the te
text={PyCodeV3}
startMarker="# MultiTenancy"
endMarker="# END MultiTenancy"
- language="py"
+ language="pyv3"
/>
@@ -770,7 +770,7 @@ If [multi-tenancy](../concepts/data.md#multi-tenancy) is enabled, specify the te
text={TSCodeLegacy}
startMarker="// MultiTenancy"
endMarker="// END MultiTenancy"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/bm25.md b/developers/weaviate/search/bm25.md
index f745c0c227..ef61957519 100644
--- a/developers/weaviate/search/bm25.md
+++ b/developers/weaviate/search/bm25.md
@@ -36,7 +36,7 @@ To use BM25 keyword search, define a search string.
text={PyCodeV3}
startMarker="# BM25BasicPython"
endMarker="# END BM25BasicPython"
- language="python"
+ language="pyv3"
/>
@@ -54,7 +54,7 @@ To use BM25 keyword search, define a search string.
text={TSCodeLegacy}
startMarker="// START Basic"
endMarker="// END Basic"
- language="js"
+ language="tsv2"
/>
@@ -119,7 +119,7 @@ You can retrieve the BM25F `score` values for each returned object.
text={PyCodeV3}
startMarker="# BM25WithScorePython"
endMarker="# END BM25WithScorePython"
- language="python"
+ language="pyv3"
/>
@@ -137,7 +137,7 @@ You can retrieve the BM25F `score` values for each returned object.
text={TSCodeLegacy}
startMarker="// START Score"
endMarker="// END Score"
- language="js"
+ language="tsv2"
/>
@@ -205,7 +205,7 @@ A keyword search can be directed to only search a subset of object properties. I
text={PyCodeV3}
startMarker="# BM25WithPropertiesPython"
endMarker="# END BM25WithPropertiesPython"
- language="python"
+ language="pyv3"
/>
@@ -223,7 +223,7 @@ A keyword search can be directed to only search a subset of object properties. I
text={TSCodeLegacy}
startMarker="// START Properties"
endMarker="// END Properties"
- language="js"
+ language="tsv2"
/>
@@ -290,7 +290,7 @@ You can weight how much each property affects the overall BM25F score. This exam
text={PyCodeV3}
startMarker="# BM25WithBoostedPropertiesPython"
endMarker="# END BM25WithBoostedPropertiesPython"
- language="python"
+ language="pyv3"
/>
@@ -308,7 +308,7 @@ You can weight how much each property affects the overall BM25F score. This exam
text={TSCodeLegacy}
startMarker="// START Boost"
endMarker="// END Boost"
- language="js"
+ language="tsv2"
/>
@@ -383,7 +383,7 @@ import TknTsCodeLegacy from '!!raw-loader!/_includes/code/howto/manage-data.coll
text={TknPyCodeV3}
startMarker="# START PropModuleSettings"
endMarker="# END PropModuleSettings"
- language="py"
+ language="pyv3"
/>
@@ -401,7 +401,7 @@ import TknTsCodeLegacy from '!!raw-loader!/_includes/code/howto/manage-data.coll
text={TknTsCodeLegacy}
startMarker="// START PropModuleSettings"
endMarker="// END PropModuleSettings"
- language="ts"
+ language="tsv2"
/>
@@ -436,7 +436,7 @@ Optionally, use `offset` to paginate the results.
text={PyCodeV3}
startMarker="# START limit Python"
endMarker="# END limit Python"
- language="py"
+ language="pyv3"
/>
@@ -454,7 +454,7 @@ Optionally, use `offset` to paginate the results.
text={TSCodeLegacy}
startMarker="// START limit"
endMarker="// END limit"
- language="ts"
+ language="tsv2"
/>
@@ -505,7 +505,7 @@ To limit results to groups of similar distances to the query, use the [`autocut`
text={PyCodeV3}
startMarker="# START autocut Python"
endMarker="# END autocut Python"
- language="py"
+ language="pyv3"
/>
@@ -523,7 +523,7 @@ To limit results to groups of similar distances to the query, use the [`autocut`
text={TSCodeLegacy}
startMarker="// START autocut"
endMarker="// END autocut"
- language="ts"
+ language="tsv2"
/>
@@ -627,7 +627,7 @@ For more specific results, use a [`filter`](../api/graphql/filters.md) to narrow
text={PyCodeV3}
startMarker="# BM25WithFilterPython"
endMarker="# END BM25WithFilterPython"
- language="python"
+ language="pyv3"
/>
@@ -645,7 +645,7 @@ For more specific results, use a [`filter`](../api/graphql/filters.md) to narrow
text={TSCodeLegacy}
startMarker="// START Filter"
endMarker="// END Filter"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/filters.md b/developers/weaviate/search/filters.md
index 78a5394ca5..29cf85bc6b 100644
--- a/developers/weaviate/search/filters.md
+++ b/developers/weaviate/search/filters.md
@@ -37,7 +37,7 @@ Add a `filter` to your query, to limit the result set.
text={PyCodeV3}
startMarker="# SingleFilterPython"
endMarker="# END SingleFilterPython"
- language="python"
+ language="pyv3"
/>
@@ -55,7 +55,7 @@ Add a `filter` to your query, to limit the result set.
text={JavaScriptCodeLegacy}
startMarker="// searchSingleFilter"
endMarker="// END searchSingleFilter"
- language="js"
+ language="tsv2"
/>
@@ -143,7 +143,7 @@ To filter with two or more conditions, use `And` or `Or` to define the relations
text={PyCodeV3}
startMarker="# MultipleFiltersAndPython"
endMarker="# END MultipleFiltersAndPython"
- language="python"
+ language="pyv3"
/>
@@ -168,7 +168,7 @@ To filter with two or more conditions, use `And` or `Or` to define the relations
text={JavaScriptCodeLegacy}
startMarker="// searchMultipleFiltersAnd"
endMarker="// END searchMultipleFiltersAnd"
- language="js"
+ language="tsv2"
/>
@@ -224,7 +224,7 @@ You can group and nest filters.
text={PyCodeV3}
startMarker="# MultipleFiltersNestedPython"
endMarker="# END MultipleFiltersNestedPython"
- language="python"
+ language="pyv3"
/>
@@ -242,7 +242,7 @@ You can group and nest filters.
text={JavaScriptCodeLegacy}
startMarker="// searchMultipleFiltersNested"
endMarker="// END searchMultipleFiltersNested"
- language="js"
+ language="tsv2"
/>
@@ -312,7 +312,7 @@ Filters work with search operators like `nearXXX`, `hybrid`, and `bm25`.
text={PyCodeV3}
startMarker="# SingleFilterNearTextPython"
endMarker="# END SingleFilterNearTextPython"
- language="python"
+ language="pyv3"
/>
@@ -330,7 +330,7 @@ Filters work with search operators like `nearXXX`, `hybrid`, and `bm25`.
text={JavaScriptCodeLegacy}
startMarker="// searchFilterNearText"
endMarker="// END searchFilterNearText"
- language="js"
+ language="tsv2"
/>
@@ -386,7 +386,7 @@ The `ContainsAny` operator works on text properties and take an array of values
text={PyCodeV3}
startMarker="# ContainsAnyFilter"
endMarker="# END ContainsAnyFilter"
- language="python"
+ language="pyv3"
/>
@@ -404,7 +404,7 @@ The `ContainsAny` operator works on text properties and take an array of values
text={JavaScriptCodeLegacy}
startMarker="// ContainsAnyFilter"
endMarker="// END ContainsAnyFilter"
- language="js"
+ language="tsv2"
/>
@@ -460,7 +460,7 @@ The `ContainsAll` operator works on text properties and take an array of values
text={PyCodeV3}
startMarker="# ContainsAllFilter"
endMarker="# END ContainsAllFilter"
- language="python"
+ language="pyv3"
/>
@@ -478,7 +478,7 @@ The `ContainsAll` operator works on text properties and take an array of values
text={JavaScriptCodeLegacy}
startMarker="// ContainsAllFilter"
endMarker="// END ContainsAllFilter"
- language="js"
+ language="tsv2"
/>
@@ -538,7 +538,7 @@ If the object property is a `text`, or `text`-like data type such as object ID,
text={PyCodeV3}
startMarker="# LikeFilterPython"
endMarker="# END LikeFilterPython"
- language="python"
+ language="pyv3"
/>
@@ -556,7 +556,7 @@ If the object property is a `text`, or `text`-like data type such as object ID,
text={JavaScriptCodeLegacy}
startMarker="// searchLikeFilter"
endMarker="// END searchLikeFilter"
- language="js"
+ language="tsv2"
/>
@@ -624,7 +624,7 @@ To filter on properties from a cross-referenced object, add the collection name
text={PyCodeV3}
startMarker="# CrossReferencePython"
endMarker="# END CrossReferencePython"
- language="python"
+ language="pyv3"
/>
@@ -642,7 +642,7 @@ To filter on properties from a cross-referenced object, add the collection name
text={JavaScriptCodeLegacy}
startMarker="// searchSingleFilter"
endMarker="// END searchSingleFilter"
- language="js"
+ language="tsv2"
/>
@@ -699,7 +699,7 @@ import GeoLimitations from '/_includes/geo-limitations.mdx';
text={PyCodeV3}
startMarker="# START FilterbyGeolocation"
endMarker="# END FilterbyGeolocation"
- language="python"
+ language="pyv3"
/>
@@ -716,7 +716,7 @@ import GeoLimitations from '/_includes/geo-limitations.mdx';
text={JavaScriptCode}
startMarker="// FilterbyGeolocation"
endMarker="// END FilterbyGeolocation"
- language="js"
+ language="tsv2"
/>
@@ -792,7 +792,7 @@ For the full list, see [API references: Filters](../api/graphql/filters.md#speci
text={PyCodeV3}
startMarker="# START FilterById"
endMarker="# END FilterById"
- language="python"
+ language="pyv3"
/>
@@ -808,7 +808,7 @@ For the full list, see [API references: Filters](../api/graphql/filters.md#speci
text={JavaScriptCodeLegacy}
startMarker="// filterById"
endMarker="// END filterById"
- language="js"
+ language="tsv2"
/>
@@ -849,7 +849,7 @@ This filter requires the [property timestamp](../config-refs/schema/index.md#ind
text={PyCodeV3}
startMarker="# START FilterByTimestamp"
endMarker="# END FilterByTimestamp"
- language="python"
+ language="pyv3"
/>
@@ -907,7 +907,7 @@ This filter requires the [property length](../config-refs/schema/index.md#indexp
text={PyCodeV3}
startMarker="# START FilterByPropertyLength"
endMarker="# END FilterByPropertyLength"
- language="python"
+ language="pyv3"
/>
@@ -924,7 +924,7 @@ This filter requires the [property length](../config-refs/schema/index.md#indexp
text={JavaScriptCodeLegacy}
startMarker="// FilterByPropertyLength"
endMarker="// END FilterByPropertyLength"
- language="js"
+ language="tsv2"
/>
@@ -965,7 +965,7 @@ This filter requires the [property null state](../config-refs/schema/index.md#in
text={PyCodeV3}
startMarker="# START FilterByPropertyNullState"
endMarker="# END FilterByPropertyNullState"
- language="python"
+ language="pyv3"
/>
diff --git a/developers/weaviate/search/generative.md b/developers/weaviate/search/generative.md
index e317635808..8f78ef7782 100644
--- a/developers/weaviate/search/generative.md
+++ b/developers/weaviate/search/generative.md
@@ -51,7 +51,7 @@ Any vector-based search on collections with [named vectors](../config-refs/schem
text={PyCodeV3}
startMarker="# NamedVectorNearTextPython"
endMarker="# END NamedVectorNearTextPython"
- language="python"
+ language="pyv3"
/>
@@ -69,7 +69,7 @@ Any vector-based search on collections with [named vectors](../config-refs/schem
text={TSCodeLegacy}
startMarker="// NamedVectorNearText"
endMarker="// END NamedVectorNearText"
- language="ts"
+ language="tsv2"
/>
@@ -104,7 +104,7 @@ The properties you use in the prompt do not have to be among the properties you
text={PyCodeV3}
startMarker="# SingleGenerativePropertiesPython"
endMarker="# END SingleGenerativePropertiesPython"
- language="py"
+ language="pyv3"
/>
@@ -122,7 +122,7 @@ The properties you use in the prompt do not have to be among the properties you
text={TSCodeLegacy}
startMarker="// SingleGenerativeProperties TS"
endMarker="// END SingleGenerativeProperties TS"
- language="js"
+ language="tsv2"
/>
@@ -178,7 +178,7 @@ Grouped task search returns one response that includes all of the query results.
text={PyCodeV3}
startMarker="# GroupedGenerativePython"
endMarker="# END GroupedGenerativePython"
- language="py"
+ language="pyv3"
/>
@@ -196,7 +196,7 @@ Grouped task search returns one response that includes all of the query results.
text={TSCodeLegacy}
startMarker="// GroupedGenerative TS"
endMarker="// END GroupedGenerative TS"
- language="js"
+ language="tsv2"
/>
@@ -255,7 +255,7 @@ Define object `properties` to use in the prompt. This limits the information in
text={PyCodeV3}
startMarker="# GroupedGenerativeProperties Python"
endMarker="# END GroupedGenerativeProperties Python"
- language="py"
+ language="pyv3"
/>
@@ -273,7 +273,7 @@ Define object `properties` to use in the prompt. This limits the information in
text={TSCodeLegacy}
startMarker="// GroupedGenerativeProperties"
endMarker="// END GroupedGenerativeProperties"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/hybrid.md b/developers/weaviate/search/hybrid.md
index 691fe9e5be..2f512e677a 100644
--- a/developers/weaviate/search/hybrid.md
+++ b/developers/weaviate/search/hybrid.md
@@ -37,7 +37,7 @@ Combine the results of a vector search and a keyword search. The search uses a s
text={PyCodeV3}
startMarker="# HybridBasicPython"
endMarker="# END HybridBasicPython"
- language="python"
+ language="pyv3"
/>
@@ -55,7 +55,7 @@ Combine the results of a vector search and a keyword search. The search uses a s
text={TSCodeLegacy}
startMarker="// searchHybridBasic"
endMarker="// END searchHybridBasic"
- language="js"
+ language="tsv2"
/>
@@ -113,7 +113,7 @@ A hybrid search on a collection that has [named vectors](../config-refs/schema/m
text={PyCodeV3}
startMarker="# NamedVectorHybridPython"
endMarker="# END NamedVectorHybridPython"
- language="python"
+ language="pyv3"
/>
@@ -129,7 +129,7 @@ A hybrid search on a collection that has [named vectors](../config-refs/schema/m
text={TSCodeLegacy}
startMarker="// NamedVectorHybrid"
endMarker="// END NamedVectorHybrid"
- language="ts"
+ language="tsv2"
/>
@@ -175,7 +175,7 @@ To see the object rankings, set the `explain score` field in your query. The sea
text={PyCodeV3}
startMarker="# HybridWithScorePython"
endMarker="# END HybridWithScorePython"
- language="python"
+ language="pyv3"
/>
@@ -193,7 +193,7 @@ To see the object rankings, set the `explain score` field in your query. The sea
text={TSCodeLegacy}
startMarker="// searchHybridWithScore"
endMarker="// END searchHybridWithScore"
- language="js"
+ language="tsv2"
/>
@@ -252,7 +252,7 @@ Hybrid search results can favor the keyword component or the vector component. T
text={PyCodeV3}
startMarker="# HybridWithAlphaPython"
endMarker="# END HybridWithAlphaPython"
- language="python"
+ language="pyv3"
/>
@@ -270,7 +270,7 @@ Hybrid search results can favor the keyword component or the vector component. T
text={TSCodeLegacy}
startMarker="// searchHybridWithAlpha"
endMarker="// END searchHybridWithAlpha"
- language="js"
+ language="tsv2"
/>
@@ -329,7 +329,7 @@ The output is like this:
text={PyCodeV3}
startMarker="# HybridWithFusionTypePython"
endMarker="# END HybridWithFusionTypePython"
- language="python"
+ language="pyv3"
/>
@@ -347,7 +347,7 @@ The output is like this:
text={TSCodeLegacy}
startMarker="// searchHybridWithFusionType"
endMarker="// END searchHybridWithFusionType"
- language="ts"
+ language="tsv2"
/>
@@ -415,7 +415,7 @@ The keyword search portion of hybrid search can be directed to only search a sub
text={PyCodeV3}
startMarker="# HybridWithPropertiesPython"
endMarker="# END HybridWithPropertiesPython"
- language="python"
+ language="pyv3"
/>
@@ -433,7 +433,7 @@ The keyword search portion of hybrid search can be directed to only search a sub
text={TSCodeLegacy}
startMarker="// searchHybridWithProperties"
endMarker="// END searchHybridWithProperties"
- language="js"
+ language="tsv2"
/>
@@ -489,7 +489,7 @@ Specify the relative value of an object's `properties` in the keyword search. Hi
text={PyCodeV3}
startMarker="# HybridWithPropertyWeightingPython"
endMarker="# END HybridWithPropertyWeightingPython"
- language="python"
+ language="pyv3"
/>
@@ -507,7 +507,7 @@ Specify the relative value of an object's `properties` in the keyword search. Hi
text={TSCodeLegacy}
startMarker="// searchHybridWithPropertyWeighting"
endMarker="// END searchHybridWithPropertyWeighting"
- language="js"
+ language="tsv2"
/>
@@ -563,7 +563,7 @@ The vector component of hybrid search can use a query string or a query vector.
text={PyCodeV3}
startMarker="# HybridWithVectorPython"
endMarker="# END HybridWithVectorPython"
- language="python"
+ language="pyv3"
/>
@@ -581,7 +581,7 @@ The vector component of hybrid search can use a query string or a query vector.
text={TSCodeLegacy}
startMarker="// searchHybridWithVector"
endMarker="// END searchHybridWithVector"
- language="js"
+ language="tsv2"
/>
@@ -623,14 +623,14 @@ The output is like this:
:::info Added in `v1.25`
:::
-You can specify [vector similarity search](/developers/weaviate/search/similarity) parameters similar to [near text](/developers/weaviate/search/similarity.md#search-with-text) or [near vector](/developers/weaviate/search/similarity.md#search-with-a-vector) searches, such as `group by` and `move to` / `move away`. An equvalent `distance` [threshold for vector search](./similarity.md#set-a-similarity-threshold) can be specified with the `max vector distance` parameter.
+You can specify [vector similarity search](/developers/weaviate/search/similarity) parameters similar to [near text](/developers/weaviate/search/similarity.md#search-with-text) or [near vector](/developers/weaviate/search/similarity.md#search-with-a-vector) searches, such as `group by` and `move to` / `move away`. An equivalent `distance` [threshold for vector search](./similarity.md#set-a-similarity-threshold) can be specified with the `max vector distance` parameter.
@@ -640,7 +640,7 @@ You can specify [vector similarity search](/developers/weaviate/search/similarit
text={PyCodeV3}
startMarker="# VectorSimilarityGraphQL"
endMarker="# END VectorSimilarityGraphQL"
- language="python"
+ language="pyv3"
/>
@@ -667,6 +667,32 @@ The output is like this:
+## Hybrid search thresholds
+
+:::info Added in `v1.25`
+:::
+
+The only available search threshold is `max vector distance`, which will set the maximum allowable distance for the vector search component.
+
+
+
+
+
+
+
+
+```ts
+// TS support coming soon
+```
+
+
+
+
## Group results
:::info Added in `v1.25`
@@ -718,7 +744,7 @@ Optionally, use `offset` to paginate the results.
text={PyCodeV3}
startMarker="# START limit Python"
endMarker="# END limit Python"
- language="py"
+ language="pyv3"
/>
@@ -736,7 +762,7 @@ Optionally, use `offset` to paginate the results.
text={TSCodeLegacy}
startMarker="// START limit"
endMarker="// END limit"
- language="ts"
+ language="tsv2"
/>
@@ -778,7 +804,7 @@ To limit results to groups with similar distances from the query, use the [`auto
text={PyCodeV3}
startMarker="# START autocut Python"
endMarker="# END autocut Python"
- language="py"
+ language="pyv3"
/>
@@ -796,7 +822,7 @@ To limit results to groups with similar distances from the query, use the [`auto
text={TSCodeLegacy}
startMarker="// START autocut"
endMarker="// END autocut"
- language="ts"
+ language="tsv2"
/>
@@ -852,7 +878,7 @@ To narrow your search results, use a [`filter`](../api/graphql/filters.md).
text={PyCodeV3}
startMarker="# HybridWithFilterPython"
endMarker="# END HybridWithFilterPython"
- language="python"
+ language="pyv3"
/>
@@ -870,7 +896,7 @@ To narrow your search results, use a [`filter`](../api/graphql/filters.md).
text={TSCodeLegacy}
startMarker="// searchHybridWithFilter"
endMarker="// END searchHybridWithFilter"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/image.md b/developers/weaviate/search/image.md
index 0b309e5960..d3644fe9d3 100644
--- a/developers/weaviate/search/image.md
+++ b/developers/weaviate/search/image.md
@@ -55,7 +55,7 @@ If your query image is stored in a file, you can use the client library to searc
text={PyCodeV3}
startMarker="# START ImageFileSearch"
endMarker="# END ImageFileSearch"
- language="py"
+ language="pyv3"
/>
@@ -135,7 +135,7 @@ You can search by a base64 representation of an image:
text={PyCodeV3}
startMarker="# START search with base64"
endMarker="# END search with base64"
- language="py"
+ language="pyv3"
/>
@@ -153,7 +153,7 @@ You can search by a base64 representation of an image:
text={TSCodeLegacy}
startMarker="// START search with base64"
endMarker="// END search with base64"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/multi-vector.md b/developers/weaviate/search/multi-vector.md
index 3204f9a0d3..5c3caee5de 100644
--- a/developers/weaviate/search/multi-vector.md
+++ b/developers/weaviate/search/multi-vector.md
@@ -15,7 +15,7 @@ import GoCode from '!!raw-loader!/_includes/code/howto/search.multi-target.go';
:::info Added in `v1.26`
:::
-In a multi-target vector search, Weaviate searches multiple target vector spaces concurrently and combines the results. A multi-target vector search produce a single set of search results.
+In a multi-target vector search, Weaviate searches multiple target vector spaces concurrently. These results are combined using a ["join strategy"](#available-join-strategies) to produce a single set of search results.
There are multiple ways to specify the target vectors and query vectors, such as:
@@ -27,24 +27,8 @@ There are multiple ways to specify the target vectors and query vectors, such as
-## Combining search results
-
-A multi-target vector search involves multiple, concurrent, single-target vector searches. These searches will produce multiple sets of results, each with a vector distance score.
-
-These distances are combined using a ["join strategy"](#available-join-strategies).
-
-
- How Weaviate combines search results
-
-- If an object is within the search limit or the distance threshold of any of the target vectors, it will be included in the search results.
-- If an object does not contain vectors for any selected target vector, Weaviate ignores that object and does not include it in the search results.
-
-
-
### Available join strategies.
-These are the available join strategies:
-
- **minimum** (*default*) Use the minimum of all vector distances.
- **sum** Use the sum of the vector distances.
- **average** Use the average of the vector distances.
@@ -121,7 +105,7 @@ You can also specify the query vectors as an array of vectors. The array will be
:::info Added in `v1.27`
:::
-Additionally to the above, you can specify the same target vector multiple times with different query vectors. In other words, you can use multiple query vectors for the same target vector.
+You can also specify the same target vector multiple times with different query vectors. In other words, you can use multiple query vectors for the same target vector.
The query vectors in this case are specified as an array of vectors. There are multiple ways to specify the target vectors in this case:
diff --git a/developers/weaviate/search/rerank.md b/developers/weaviate/search/rerank.md
index 73e05b1b86..f863e239c5 100644
--- a/developers/weaviate/search/rerank.md
+++ b/developers/weaviate/search/rerank.md
@@ -57,7 +57,7 @@ Any vector-based search on collections with [named vectors](../config-refs/schem
text={SimilarityPyCodeV3}
startMarker="# NamedVectorNearTextPython"
endMarker="# END NamedVectorNearTextPython"
- language="python"
+ language="pyv3"
/>
@@ -75,7 +75,7 @@ Any vector-based search on collections with [named vectors](../config-refs/schem
text={SimilarityTSCodeLegacy}
startMarker="// NamedVectorNearText"
endMarker="// END NamedVectorNearText"
- language="ts"
+ language="tsv2"
/>
@@ -117,7 +117,7 @@ To rerank the results of a vector search, configure the object properties to sor
text={PyCodeV3}
startMarker="# START nearTextRerank Python"
endMarker="# END nearTextRerank Python"
- language="py"
+ language="pyv3"
/>
@@ -135,7 +135,7 @@ To rerank the results of a vector search, configure the object properties to sor
text={TSCodeLegacy}
startMarker="// START RerankNearText"
endMarker="// END RerankNearText"
- language="ts"
+ language="tsv2"
/>
@@ -191,7 +191,7 @@ To rerank the results of a keyword search, configure the object properties to so
text={PyCodeV3}
startMarker="# START bm25Rerank Python"
endMarker="# END bm25Rerank Python"
- language="py"
+ language="pyv3"
/>
@@ -209,7 +209,7 @@ To rerank the results of a keyword search, configure the object properties to so
text={TSCodeLegacy}
startMarker="// START bm25Rerank"
endMarker="// END bm25Rerank"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/search/similarity.md b/developers/weaviate/search/similarity.md
index 116c70c320..6d4ebc4665 100644
--- a/developers/weaviate/search/similarity.md
+++ b/developers/weaviate/search/similarity.md
@@ -36,7 +36,7 @@ Use the [`Near Text`](../api/graphql/search-operators.md#neartext) operator to f
text={PyCodeV3}
startMarker="# GetNearTextPython"
endMarker="# END GetNearTextPython"
- language="python"
+ language="pyv3"
/>
@@ -54,7 +54,7 @@ Use the [`Near Text`](../api/graphql/search-operators.md#neartext) operator to f
text={TSCodeLegacy}
startMarker="// GetNearText"
endMarker="// END GetNearText"
- language="ts"
+ language="tsv2"
/>
@@ -126,7 +126,7 @@ This example uses a base64 representation of an image.
text={ImgSrchPyCodeV3}
startMarker="# START search with base64"
endMarker="# END search with base64"
- language="py"
+ language="pyv3"
/>
@@ -144,7 +144,7 @@ This example uses a base64 representation of an image.
text={ImgSrchTSCodeLegacy}
startMarker="// START search with base64"
endMarker="// END search with base64"
- language="ts"
+ language="tsv2"
/>
@@ -180,7 +180,7 @@ If you have an object ID, use the [`Near Object`](../api/graphql/search-operator
text={PyCodeV3}
startMarker="# GetNearObjectPython"
endMarker="# END GetNearObjectPython"
- language="python"
+ language="pyv3"
/>
@@ -198,7 +198,7 @@ If you have an object ID, use the [`Near Object`](../api/graphql/search-operator
text={TSCode}
startMarker="// GetNearObject"
endMarker="// END GetNearObject"
- language="ts"
+ language="tsv2"
/>
@@ -259,7 +259,7 @@ If you have an input vector, use the [`Near Vector`](../api/graphql/search-opera
text={PyCodeV3}
startMarker="# GetNearVectorPython"
endMarker="# END GetNearVectorPython"
- language="python"
+ language="pyv3"
/>
@@ -277,7 +277,7 @@ If you have an input vector, use the [`Near Vector`](../api/graphql/search-opera
text={TSCodeLegacy}
startMarker="// GetNearVector"
endMarker="// END GetNearVector"
- language="ts"
+ language="tsv2"
/>
@@ -340,7 +340,7 @@ To search a collection that has [named vectors](../config-refs/schema/multi-vect
text={PyCodeV3}
startMarker="# NamedVectorNearTextPython"
endMarker="# END NamedVectorNearTextPython"
- language="python"
+ language="pyv3"
/>
@@ -358,7 +358,7 @@ To search a collection that has [named vectors](../config-refs/schema/multi-vect
text={TSCodeLegacy}
startMarker="// NamedVectorNearText"
endMarker="// END NamedVectorNearText"
- language="ts"
+ language="tsv2"
/>
@@ -423,7 +423,7 @@ To set a similarity threshold between the search and target vectors, define a ma
text={PyCodeV3}
startMarker="# GetWithDistancePython"
endMarker="# END GetWithDistancePython"
- language="python"
+ language="pyv3"
/>
@@ -441,7 +441,7 @@ To set a similarity threshold between the search and target vectors, define a ma
text={TSCodeLegacy}
startMarker="// GetWithDistance"
endMarker="// END GetWithDistance"
- language="ts"
+ language="tsv2"
/>
@@ -503,7 +503,7 @@ Optionally, use `offset` to paginate the results.
text={PyCodeV3}
startMarker="# GetLimitOffsetPython"
endMarker="# END GetLimitOffsetPython"
- language="python"
+ language="pyv3"
/>
@@ -521,7 +521,7 @@ Optionally, use `offset` to paginate the results.
text={TSCodeLegacy}
startMarker="// GetLimitOffset"
endMarker="// END GetLimitOffset"
- language="ts"
+ language="tsv2"
/>
@@ -572,7 +572,7 @@ To limit results to groups of similar distances to the query, use the [`autocut`
text={PyCodeV3}
startMarker="# START Autocut Python"
endMarker="# END Autocut Python"
- language="py"
+ language="pyv3"
/>
@@ -590,7 +590,7 @@ To limit results to groups of similar distances to the query, use the [`autocut`
text={TSCodeLegacy}
startMarker="// START Autocut"
endMarker="// END Autocut"
- language="ts"
+ language="tsv2"
/>
@@ -655,7 +655,7 @@ Use a property or a cross-reference to group results. To group returned objects,
text={PyCodeV3}
startMarker="# GetWithGroupbyPython"
endMarker="# END GetWithGroupbyPython"
- language="python"
+ language="pyv3"
/>
@@ -673,7 +673,7 @@ Use a property or a cross-reference to group results. To group returned objects,
text={TSCodeLegacy}
startMarker="// GetWithGroupBy"
endMarker="// END GetWithGroupBy"
- language="ts"
+ language="tsv2"
/>
@@ -738,7 +738,7 @@ For more specific results, use a [`filter`](../api/graphql/filters.md) to narrow
text={PyCodeV3}
startMarker="# GetWithWherePython"
endMarker="# END GetWithWherePython"
- language="python"
+ language="pyv3"
/>
@@ -756,7 +756,7 @@ For more specific results, use a [`filter`](../api/graphql/filters.md) to narrow
text={TSCodeLegacy}
startMarker="// GetWithFilter"
endMarker="// END GetWithFilter"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/starter-guides/custom-vectors.mdx b/developers/weaviate/starter-guides/custom-vectors.mdx
index 97e285ca82..65b4ae5089 100644
--- a/developers/weaviate/starter-guides/custom-vectors.mdx
+++ b/developers/weaviate/starter-guides/custom-vectors.mdx
@@ -14,7 +14,7 @@ import ByovAllTsCode from '!!raw-loader!/_includes/code/quickstart.byov.all.ts';
import ByovAllTsCodeLegacy from '!!raw-loader!/_includes/code/quickstart.byov.all.legacy.ts';
import ByovAllShCode from '!!raw-loader!/_includes/code/quickstart.byov.all.sh';
-Weaviate is a vector database. [Vector databases](/blog/vector-library-vs-vector-database) store data objects and vectors that represent those objects. The vector representation is also called an "embedding."
+Weaviate is a vector database. [Vector databases](/blog/what-is-a-vector-database) store data objects and vectors that represent those objects. The vector representation is also called an "embedding."
When you import data, you can pass pre-existing vectors or generate new ones. "Bring your own vectors" means you supply the vector embeddings when you upload your data. The embeddings you provide can be custom vectors or vectors that are pre-generated using a [model provider](/developers/weaviate/model-providers).
@@ -190,7 +190,7 @@ This [`nearVector`](/developers/weaviate/search/similarity#search-with-a-vector)
text={ByovAllTsCodeLegacy}
startMarker="// Query using nearVector"
endMarker="END-OF-FILE"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/starter-guides/generative.md b/developers/weaviate/starter-guides/generative.md
index 12ee34d999..7734a159bd 100644
--- a/developers/weaviate/starter-guides/generative.md
+++ b/developers/weaviate/starter-guides/generative.md
@@ -16,9 +16,6 @@ import TSCodeEduDemoLegacy from '!!raw-loader!/_includes/code/starter-guides/gen
import TSCodeLocal from '!!raw-loader!/_includes/code/starter-guides/generative_local.ts';
import TSCodeLocalLegacy from '!!raw-loader!/_includes/code/starter-guides/generative_local-v2.ts';
-
-## Overview
-
:::info Related pages
- [Which Weaviate is right for me?](./which-weaviate.md)
- [How-to: Retrieval augmented generation](../search/generative.md)
@@ -85,7 +82,7 @@ Connect to the instance like so, remembering to replace the API key for the LLM
text={PyCodeV3}
startMarker="# Instantiation"
endMarker="# END Instantiation"
- language="py"
+ language="pyv3"
/>
@@ -102,7 +99,7 @@ Connect to the instance like so, remembering to replace the API key for the LLM
text={TSCodeEduDemoLegacy}
startMarker="// Instantiation"
endMarker="// END Instantiation"
- language="ts"
+ language="tsv2"
/>
@@ -128,7 +125,7 @@ Before we can generate text, we need to retrieve relevant data. Let's retrieve t
text={PyCodeV3}
startMarker="# DataRetrieval"
endMarker="# END DataRetrieval"
- language="py"
+ language="pyv3"
/>
@@ -144,7 +141,7 @@ Before we can generate text, we need to retrieve relevant data. Let's retrieve t
text={TSCodeEduDemoLegacy}
startMarker="// DataRetrieval"
endMarker="// END DataRetrieval"
- language="ts"
+ language="tsv2"
/>
@@ -198,7 +195,7 @@ Run the following code snippet, and inspect the results:
text={PyCodeV3}
startMarker="# TransformResultSets"
endMarker="# END TransformResultSets"
- language="py"
+ language="pyv3"
/>
@@ -214,7 +211,7 @@ Run the following code snippet, and inspect the results:
text={TSCodeEduDemoLegacy}
startMarker="// TransformResultSets"
endMarker="// END TransformResultSets"
- language="ts"
+ language="tsv2"
/>
@@ -267,7 +264,7 @@ Note that in this query, we apply a `single prompt` parameter. This means that t
text={PyCodeV3}
startMarker="# TransformIndividualObjects"
endMarker="# END TransformIndividualObjects"
- language="py"
+ language="pyv3"
/>
@@ -283,7 +280,7 @@ Note that in this query, we apply a `single prompt` parameter. This means that t
text={TSCodeEduDemoLegacy}
startMarker="// TransformIndividualObjects"
endMarker="// END TransformIndividualObjects"
- language="ts"
+ language="tsv2"
/>
@@ -354,7 +351,7 @@ You can check which modules are enabled by viewing the `meta` information for yo
text={PyCodeV3}
startMarker="# ListModules"
endMarker="# END ListModules"
- language="py"
+ language="pyv3"
/>
@@ -370,7 +367,7 @@ You can check which modules are enabled by viewing the `meta` information for yo
text={TSCodeEduDemoLegacy}
startMarker="// ListModules"
endMarker="// END ListModules"
- language="ts"
+ language="tsv2"
/>
@@ -458,7 +455,7 @@ In the following snippet, we download a chapter of the `Pro Git` book, clean it
text={PyCodeV3}
startMarker="# ChunkText"
endMarker="# END ChunkText"
- language="py"
+ language="pyv3"
/>
@@ -474,7 +471,7 @@ In the following snippet, we download a chapter of the `Pro Git` book, clean it
text={TSCodeLocalLegacy}
startMarker="// ChunkText"
endMarker="// END ChunkText"
- language="ts"
+ language="tsv2"
/>
@@ -501,7 +498,7 @@ The below collection definition for the `GitBookChunk` collection specifies `tex
text={PyCodeV3}
startMarker="# CreateClass"
endMarker="# END CreateClass"
- language="py"
+ language="pyv3"
/>
@@ -517,7 +514,7 @@ The below collection definition for the `GitBookChunk` collection specifies `tex
text={TSCodeLocalLegacy}
startMarker="// CreateClass"
endMarker="// END CreateClass"
- language="ts"
+ language="tsv2"
/>
@@ -540,7 +537,7 @@ Now, we can import the data into Weaviate.
text={PyCodeV3}
startMarker="# ImportData"
endMarker="# END ImportData"
- language="py"
+ language="pyv3"
/>
@@ -556,7 +553,7 @@ Now, we can import the data into Weaviate.
text={TSCodeLocalLegacy}
startMarker="// ImportData"
endMarker="// END ImportData"
- language="ts"
+ language="tsv2"
/>
@@ -577,7 +574,7 @@ Once this is done, you should have imported a collection of chunks from the chap
text={PyCodeV3}
startMarker="# CountObjects"
endMarker="# END CountObjects"
- language="py"
+ language="pyv3"
/>
@@ -593,7 +590,7 @@ Once this is done, you should have imported a collection of chunks from the chap
text={TSCodeLocalLegacy}
startMarker="// CountObjects"
endMarker="// END CountObjects"
- language="ts"
+ language="tsv2"
/>
@@ -622,7 +619,7 @@ Single prompts tell Weaviate to generate text based on each retrieved object and
text={PyCodeV3}
startMarker="# SinglePrompt"
endMarker="# END SinglePrompt"
- language="py"
+ language="pyv3"
/>
@@ -638,7 +635,7 @@ Single prompts tell Weaviate to generate text based on each retrieved object and
text={TSCodeLocalLegacy}
startMarker="// SinglePrompt"
endMarker="// END SinglePrompt"
- language="ts"
+ language="tsv2"
/>
@@ -677,7 +674,7 @@ In this example, we prompt the language model to write a trivia tweet based on t
text={PyCodeV3}
startMarker="# GroupedTask"
endMarker="# END GroupedTask"
- language="py"
+ language="pyv3"
/>
@@ -693,7 +690,7 @@ In this example, we prompt the language model to write a trivia tweet based on t
text={TSCodeLocalLegacy}
startMarker="// GroupedTask"
endMarker="// END GroupedTask"
- language="ts"
+ language="tsv2"
/>
@@ -726,7 +723,7 @@ In this example, we search the chapter for passages that relate to the states of
text={PyCodeV3}
startMarker="# NearTextGroupedTask"
endMarker="# END NearTextGroupedTask"
- language="py"
+ language="pyv3"
/>
@@ -742,7 +739,7 @@ In this example, we search the chapter for passages that relate to the states of
text={TSCodeLocalLegacy}
startMarker="// NearTextGroupedTask"
endMarker="// END NearTextGroupedTask"
- language="ts"
+ language="tsv2"
/>
@@ -771,7 +768,7 @@ Now, simply by changing the search query, we can generate similar content about
text={PyCodeV3}
startMarker="# SecondNearTextGroupedTask"
endMarker="# END SecondNearTextGroupedTask"
- language="py"
+ language="pyv3"
/>
@@ -787,7 +784,7 @@ Now, simply by changing the search query, we can generate similar content about
text={TSCodeLocalLegacy}
startMarker="// SecondNearTextGroupedTask"
endMarker="// END SecondNearTextGroupedTask"
- language="ts"
+ language="tsv2"
/>
diff --git a/developers/weaviate/starter-guides/managing-resources/compression.mdx b/developers/weaviate/starter-guides/managing-resources/compression.mdx
index d494f8fc56..af7833c214 100644
--- a/developers/weaviate/starter-guides/managing-resources/compression.mdx
+++ b/developers/weaviate/starter-guides/managing-resources/compression.mdx
@@ -5,10 +5,6 @@ image: og/docs/tutorials.jpg
# tags: ['basics']
---
-Use compression to lower system requirements and save on infrastructure costs.
-
-## Overview
-
Weaviate stores vector representations, also called "vector embeddings" or simply "vectors." Each element of a vector embedding is a dimension. The values are commonly stored as 32 bit floats. A single vector with 1536 dimensions uses about 6 KB of storage.
When collections have millions of objects, the total storage size for the vectors can be very large. The vectors are not just stored, they are indexed as well. This index can also grow very large. The resource costs to host the vectors and the index can be expensive.
diff --git a/developers/weaviate/starter-guides/managing-resources/index.md b/developers/weaviate/starter-guides/managing-resources/index.md
index 8ebbb77e2c..638ea38a93 100644
--- a/developers/weaviate/starter-guides/managing-resources/index.md
+++ b/developers/weaviate/starter-guides/managing-resources/index.md
@@ -6,8 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['basics']
---
-## Overview
-
Weaviate provides flexible resource management features that help you to balance search speeds; search accuracy and recall; and system resource costs.
This guide provides an overview of these topics to help you make allocate resources effectively:
diff --git a/developers/weaviate/starter-guides/schema.md b/developers/weaviate/starter-guides/schema.md
index cc48a81b1c..0ccb71a848 100644
--- a/developers/weaviate/starter-guides/schema.md
+++ b/developers/weaviate/starter-guides/schema.md
@@ -6,9 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['basics']
---
-
-## Overview
-
This tutorial will guide you through the process of defining a schema for your data, including commonly used settings and key considerations.
:::info Prerequisites
diff --git a/developers/weaviate/tutorials/_console.md b/developers/weaviate/tutorials/_console.md
index 2e3bc1eb9d..07605f2af7 100644
--- a/developers/weaviate/tutorials/_console.md
+++ b/developers/weaviate/tutorials/_console.md
@@ -5,9 +5,6 @@ image: og/docs/quickstart-tutorial.jpg
# tags: ['Weaviate console']
---
-
-## Overview
-
Here you can learn how to use the Weaviate console.
The Weaviate console allows you to connect to Weaviate instances that are running on the [Weaviate Cloud (WCD)](https://console.weaviate.cloud/) (our SaaS solution), on your own cluster, on your local machine, or all the public demo datasets. Note that the console never collects any data from your Weaviate instance; you can safely connect every instance, also over VPN.
diff --git a/developers/weaviate/tutorials/_crud.md b/developers/weaviate/tutorials/_crud.md
index 9903c2c756..411446506c 100644
--- a/developers/weaviate/tutorials/_crud.md
+++ b/developers/weaviate/tutorials/_crud.md
@@ -5,9 +5,6 @@ image: og/docs/tutorials.jpg
# tags: ['how to', 'CRUD']
---
-
-## Overview
-
In this tutorial, you will learn how to perform various CRUD operations with Weaviate.
diff --git a/developers/weaviate/tutorials/cross-references.mdx b/developers/weaviate/tutorials/cross-references.mdx
index d1391ac328..22019b8a64 100644
--- a/developers/weaviate/tutorials/cross-references.mdx
+++ b/developers/weaviate/tutorials/cross-references.mdx
@@ -20,8 +20,6 @@ import SearchBasicsTSCode from '!!raw-loader!/_includes/code/howto/search.basics
import FilterPythonCode from '!!raw-loader!/_includes/code/howto/search.filters.py';
import FilterJavaScriptCode from '!!raw-loader!/_includes/code/howto/search.filters.ts';
-## Overview
-
In this tutorial, you will learn how to use cross-references to manage relationships between objects, and to use them to enhance your queries.
Many applications require the ability to manage relationships between objects. For example, a blog application might need to store information about the author of each post. Or, a document store may chunk documents into smaller pieces and store them in separate objects, each with a reference to the original document.
@@ -112,7 +110,7 @@ An example syntax is shown below:
text={XRefCrudTSCode}
startMarker="// START OneWay"
endMarker="// END OneWay"
- language="ts"
+ language="tsv2"
/>
@@ -168,7 +166,7 @@ Take a look at the snippet below in which we retrieve objects from the `Jeopardy
text={SearchBasicsTSCode}
startMarker="// GetWithCrossRefs"
endMarker="// END GetWithCrossRefs"
- language="js"
+ language="tsv2"
/>
@@ -206,7 +204,7 @@ Take a look at the snippet below, This query looks through the `JeopardyQuestion
text={FilterJavaScriptCode}
startMarker="// searchSingleFilter"
endMarker="// END searchSingleFilter"
- language="js"
+ language="tsv2"
/>
diff --git a/developers/weaviate/tutorials/import.md b/developers/weaviate/tutorials/import.md
index 25417702b9..7e50d443a6 100644
--- a/developers/weaviate/tutorials/import.md
+++ b/developers/weaviate/tutorials/import.md
@@ -5,9 +5,8 @@ sidebar_position: 30
image: og/docs/tutorials.jpg
# tags: ['import']
---
-import { DownloadButton } from '/src/theme/Buttons';
-## Overview
+import { DownloadButton } from '/src/theme/Buttons';
In this section, we will explore data import, including details of the batch import process. We will discuss points such as how vectors are imported, what a batch import is, how to manage errors, and some advice on optimization.
diff --git a/developers/weaviate/tutorials/index.md b/developers/weaviate/tutorials/index.md
index b34331fc2f..2c38e65566 100644
--- a/developers/weaviate/tutorials/index.md
+++ b/developers/weaviate/tutorials/index.md
@@ -6,9 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['how to', 'schema']
---
-
-## Overview
-
Tutorials aim to empower you to use Weaviate based on *your* particular needs.
diff --git a/developers/weaviate/tutorials/modules.md b/developers/weaviate/tutorials/modules.md
index 47ef55d14b..6248968258 100644
--- a/developers/weaviate/tutorials/modules.md
+++ b/developers/weaviate/tutorials/modules.md
@@ -6,9 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['modules']
---
-
-## Overview
-
In this guide, you will get an introduction to the role that modules play in Weaviate.
As their name suggest, Weaviate modules are options components to enhance Weaviate's functionality, such as to vectorize data or process results (e.g., question answering). The structure of the module name (`x2vec`) informs you of what the module does. E.g., `text2vec` generates text embeddings, `img2vec` image embeddings, etc.
diff --git a/developers/weaviate/tutorials/query.md b/developers/weaviate/tutorials/query.md
index 5feaef6955..04c065d467 100644
--- a/developers/weaviate/tutorials/query.md
+++ b/developers/weaviate/tutorials/query.md
@@ -6,9 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['basics']
---
-
-## Overview
-
In this section, we will explore different queries that you can perform with Weaviate. Here, we will expand on the `nearText` queries that you may have seen in the [Quickstart tutorial](../quickstart/index.md) to show you different query types, filters and metrics that can be used.
By the end of this section, you will have performed vector and scalar searches separately as well as in combination to retrieve individual objects and aggregations.
diff --git a/developers/weaviate/tutorials/spark-connector.md b/developers/weaviate/tutorials/spark-connector.md
index a5f3f2737f..653ec5b6cb 100644
--- a/developers/weaviate/tutorials/spark-connector.md
+++ b/developers/weaviate/tutorials/spark-connector.md
@@ -6,9 +6,6 @@ image: og/docs/tutorials.jpg
# tags: ['how to', 'spark connector', 'spark']
---
-
-## Overview
-
This tutorial is designed to show you an example of how to use the [Spark Connector](https://github.com/weaviate/spark-connector) to import data into Weaviate from Spark.
By the end of this tutorial, you'll be able to see how to you can import your data into [Apache Spark](https://spark.apache.org/) and then use the Spark Connector to write your data to Weaviate.
diff --git a/developers/weaviate/tutorials/vector-provision-options.mdx b/developers/weaviate/tutorials/vector-provision-options.mdx
index 6e26cad13d..250b9cf655 100644
--- a/developers/weaviate/tutorials/vector-provision-options.mdx
+++ b/developers/weaviate/tutorials/vector-provision-options.mdx
@@ -8,8 +8,6 @@ image: og/docs/tutorials.jpg
import ReactPlayer from 'react-player/lazy'
-## Overview
-
:::info This video covers options for adding a vector during import.
:::
diff --git a/developers/weaviate/tutorials/wikipedia.md b/developers/weaviate/tutorials/wikipedia.md
index a8ea6acb18..444d88db28 100644
--- a/developers/weaviate/tutorials/wikipedia.md
+++ b/developers/weaviate/tutorials/wikipedia.md
@@ -6,8 +6,6 @@ image: og/docs/tutorials.jpg # TODO
# tags: ['import']
---
-## Overview
-
This tutorial will show you how to import a large dataset (25k articles from Wikipedia) that already includes vectors (embeddings generated by OpenAI). We will,
* download and unzip a CSV file that contains the Wikipedia articles
* create a Weaviate instance
diff --git a/docusaurus.config.js b/docusaurus.config.js
index 9786edf638..aab81fcad2 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -114,7 +114,7 @@ const config = {
configuration: {
spec: {
// Last updated: 2024-11-13
- url: 'https://raw.githubusercontent.com/weaviate/weaviate/openapi_docs_202411/openapi-specs/schema.json',
+ url: 'https://raw.githubusercontent.com/weaviate/weaviate/openapi_docs/openapi-specs/schema.json',
},
hideModels: true,
// This feature currently broken - potentially fixed in: https://github.com/scalar/scalar/pull/1387
@@ -221,7 +221,17 @@ const config = {
reb2b.load("5NRP9HG1YMO1");
})();`,
},
-
+ // Microsoft Clarity Script
+ {
+ tagName: 'script',
+ innerHTML: `
+ (function(c,l,a,r,i,t,y){
+ c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
+ t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
+ y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
+ })(window, document, "clarity", "script", "orzk1oie18");
+ `,
+ },
],
};
},
@@ -299,12 +309,12 @@ const config = {
({
image: 'og/default.jpg',
announcementBar: {
- id: 'announcement-bar-november-2024',
- content:`Big things are happening at AWS re:Invent - Dec 2-5 | Meet with our team to jumpstart your 2025 initiatives (and score limited edition swag)!`,
+ id: 'announcement-bar-decemeber-2024',
+ content:`Ready to level up your AI tech stack? Read GigaOm's Sonar Report for Vector Databases`,
backgroundColor: '#1C1468',
textColor: '#F5F5F5',
isCloseable: true,
- },
+ },
docs: {
sidebar: {
hideable: true,
@@ -464,7 +474,7 @@ const config = {
items: [
{
type: 'html',
- value : '
All the power of the AI-native vector database, without the
overhead
diff --git a/src/components/Pricing/Plan/businessCritical.jsx b/src/components/Pricing/Plan/businessCritical.jsx
index e74494c57e..545a94955a 100644
--- a/src/components/Pricing/Plan/businessCritical.jsx
+++ b/src/components/Pricing/Plan/businessCritical.jsx
@@ -38,7 +38,8 @@ export default function PricingBusinessCritical() {
- Choose a fully-managed solution or 24/7 support within your VPC.
+ Choose a fully-managed solution or 24/7 support within your VPC
+ (BYOC Vector Database).
diff --git a/src/components/Pricing/Plan/enterprise.jsx b/src/components/Pricing/Plan/enterprise.jsx
index 574dd7f974..0f888a7a58 100644
--- a/src/components/Pricing/Plan/enterprise.jsx
+++ b/src/components/Pricing/Plan/enterprise.jsx
@@ -67,7 +67,7 @@ export default function PricingEnterprise() {
We manage everything for you in a dedicated instance in Weaviate
- Cloud.
+ Cloud (Enterprise Vector Database).
from $2.64 / AIU
diff --git a/src/components/Pricing/Plan/sandbox.jsx b/src/components/Pricing/Plan/sandbox.jsx
index 676b7ad9d3..4b1583cb36 100644
--- a/src/components/Pricing/Plan/sandbox.jsx
+++ b/src/components/Pricing/Plan/sandbox.jsx
@@ -12,7 +12,8 @@ export default function PricingSandBox() {
With an enterprise subscription, customers have access to a variety of
- support and training options to accelerate adoption and success.
+ support and vector database training options to accelerate adoption
+ and success.
Learn More
diff --git a/src/components/Pricing/Plan/standard.jsx b/src/components/Pricing/Plan/standard.jsx
index 3ea29dc692..671956f30c 100644
--- a/src/components/Pricing/Plan/standard.jsx
+++ b/src/components/Pricing/Plan/standard.jsx
@@ -65,7 +65,10 @@ export default function PricingStandard() {
diff --git a/src/components/Security/SafetyTypes/index.jsx b/src/components/Security/SafetyTypes/index.jsx
index 4fdbfd65f5..c03dc94a42 100644
--- a/src/components/Security/SafetyTypes/index.jsx
+++ b/src/components/Security/SafetyTypes/index.jsx
@@ -9,12 +9,21 @@ export default function SafetyTypes() {
We keep your data safe (and available)
- Weaviate Cloud was built to offload the burden of managing
- a vector database and give development teams peace of mind. Whether
- you’re running Weaviate as a Serverless, Weaviate Enterprise Cloud, or
+ Weaviate Cloud was built to offload the burden of managing a vector
+ database and give development teams peace of mind. Whether you’re
+ running Weaviate as a Serverless, Weaviate Enterprise Cloud, or
Bring Your Own Cloud solution– our top priority is keeping your data
safe and available. Read more about our SLAs{' '}
- here.
+ here. You can also read our Security
+ Checklist for Self-Managed Weaviate Deployments{' '}
+
+ here
+
+ .
diff --git a/src/components/Signup/Alternative/introduction.jsx b/src/components/Signup/Alternative/introduction.jsx
index b7364ad59d..f790dcd914 100644
--- a/src/components/Signup/Alternative/introduction.jsx
+++ b/src/components/Signup/Alternative/introduction.jsx
@@ -79,9 +79,7 @@ export default function introduction() {
-
+
@@ -102,7 +100,7 @@ export default function introduction() {
Have questions about pricing?
- Contact us
+ Contact us
+
+ Weaviate named a Leader and Fast-Mover{' '}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ “[Weaviate] is in the Leader circle because of cost-saving
+ techniques that include storage tiering, its use of language models
+ for summarization and NLQ, and a modular approach to accessing
+ models for embedding content and ranking search results.”
+
+
+ Gigaom Sonar Report for Vector Databases by Andrew Brust and Jelani
+ Harper, December 11. 2024
+
+
+
+
About the report
+
+ The GigaOm Sonar Report for Vector Databases provides a thorough
+ examination of the rapidly evolving vector database market. In its
+ second edition, the report equips IT decision-makers with detailed
+ insights into vendor offerings and evaluation criteria, including:
+