-
Notifications
You must be signed in to change notification settings - Fork 33
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
resolves #90
- Loading branch information
Showing
6 changed files
with
193 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Weaviate | ||
|
||
[Weaviate] is an open-source vector database that stores both objects and vectors, allowing for the combination of vector search with structured filtering with the fault tolerance and scalability of a cloud-native database. | ||
|
||
[Weaviate]: https://github.com/weaviate/weaviate | ||
|
||
{#start} | ||
|
||
## Getting started | ||
|
||
```nix | ||
# In `perSystem.process-compose.<name>` | ||
{ | ||
services.weaviate."weaviate1".enable = true; | ||
} | ||
``` | ||
|
||
{#tips} | ||
|
||
## Tips & Tricks | ||
|
||
{#envs} | ||
|
||
### Environment variables | ||
|
||
To see list of environment variables, see [this link](https://weaviate.io/developers/weaviate/config-refs/env-vars). | ||
|
||
```nix | ||
{ | ||
services.weaviate."weaviate1" = { | ||
enable = true; | ||
envs = { | ||
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED = true; | ||
QUERY_DEFAULTS_LIMIT = 100; | ||
DISABLE_TELEMETRY = true; | ||
LIMIT_RESOURCES = true; | ||
ENABLE_MODULES = ["text2vec-openai" "generative-openai"]; | ||
}; | ||
}; | ||
} | ||
``` | ||
|
||
{#port} | ||
|
||
### Use a different port | ||
|
||
```nix | ||
{ | ||
services.weaviate."weaviate1" = { | ||
enable = true; | ||
port = 8080; | ||
}; | ||
} | ||
``` | ||
|
||
{#dataDir} | ||
|
||
### Use a different data path | ||
|
||
```nix | ||
{ | ||
services.weaviate."weaviate1" = { | ||
enable = true; | ||
dataDir = "./data"; | ||
}; | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -18,5 +18,6 @@ in | |
./pgadmin.nix | ||
./cassandra.nix | ||
./tempo.nix | ||
./weaviate.nix | ||
]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
{ pkgs, lib, name, config, ... }: | ||
let | ||
inherit (lib) types; | ||
asAtom = value: | ||
if builtins.isList value then lib.concatStringsSep "," value else value; | ||
toStr = value: | ||
if builtins.isString value then value else builtins.toJSON value; | ||
in | ||
{ | ||
options = { | ||
enable = lib.mkEnableOption name; | ||
|
||
package = lib.mkPackageOption pkgs "weaviate" { }; | ||
|
||
dataDir = lib.mkOption { | ||
type = types.str; | ||
default = "./data/${name}"; | ||
description = "Path to the Weaviate data store"; | ||
}; | ||
|
||
host = lib.mkOption { | ||
type = types.str; | ||
default = "127.0.0.1"; | ||
description = '' | ||
The IP to listen on | ||
''; | ||
example = "0.0.0.0"; | ||
}; | ||
|
||
port = lib.mkOption { | ||
type = types.port; | ||
default = 8080; | ||
description = '' | ||
The port to listen on for connections | ||
''; | ||
}; | ||
|
||
environment = lib.mkOption { | ||
type = types.attrsOf (types.oneOf [ types.raw (types.listOf types.str) ]); | ||
default = { }; | ||
description = '' | ||
Weaviate environment variables. | ||
See https://weaviate.io/developers/weaviate/config-refs/env-vars | ||
''; | ||
example = lib.literalExpression '' | ||
{ | ||
AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED = true; | ||
QUERY_DEFAULTS_LIMIT = 100; | ||
DISABLE_TELEMETRY = true; | ||
LIMIT_RESOURCES = true; | ||
ENABLE_MODULES = ["text2vec-openai" "generative-openai"]; | ||
} | ||
''; | ||
apply = lib.mapAttrs (_: value: toStr (asAtom value)); | ||
}; | ||
|
||
outputs.settings = lib.mkOption { | ||
type = types.deferredModule; | ||
internal = true; | ||
readOnly = true; | ||
default = { | ||
processes = { | ||
"${name}" = | ||
let | ||
startScript = pkgs.writeShellApplication { | ||
name = "start-weaviate"; | ||
runtimeInputs = [ config.package ]; | ||
text = '' | ||
exec weaviate --scheme http --host ${config.host} --port ${toString config.port} | ||
''; | ||
}; | ||
in | ||
{ | ||
environment = config.environment // { "PERSISTENCE_DATA_PATH" = config.dataDir; }; | ||
|
||
command = startScript; | ||
|
||
readiness_probe = { | ||
http_get = { | ||
inherit (config) host port; | ||
path = "/v1/.well-known/ready"; | ||
}; | ||
initial_delay_seconds = 3; | ||
period_seconds = 10; | ||
timeout_seconds = 4; | ||
success_threshold = 1; | ||
failure_threshold = 5; | ||
}; | ||
namespace = name; | ||
|
||
# https://github.com/F1bonacc1/process-compose#-auto-restart-if-not-healthy | ||
availability.restart = "on_failure"; | ||
}; | ||
}; | ||
}; | ||
}; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
{ pkgs, config, ... }: { | ||
services.weaviate."weaviate1" = { | ||
enable = true; | ||
environment = { | ||
# To fix the problem with nix failing to run weaviate in sandbox mode | ||
CLUSTER_ADVERTISE_ADDR = "127.0.0.1"; | ||
}; | ||
}; | ||
|
||
settings.processes.test = | ||
let | ||
cfg = config.services.weaviate."weaviate1"; | ||
in | ||
{ | ||
command = pkgs.writeShellApplication { | ||
runtimeInputs = [ cfg.package pkgs.curl ]; | ||
text = '' | ||
curl http://localhost:8080/v1/.well-known/live | ||
''; | ||
name = "weaviate-test"; | ||
}; | ||
depends_on."weaviate1".condition = "process_healthy"; | ||
}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters