From 57bcd549d187c3fac03980cb062af0e42e9c4540 Mon Sep 17 00:00:00 2001 From: didier amyot Date: Fri, 3 Jul 2026 13:59:06 -0400 Subject: [PATCH] fead: no idea --- embed.go | 2 +- flake.nix | 7 +++++++ main.go | 8 +++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/embed.go b/embed.go index 4083145..4364e96 100644 --- a/embed.go +++ b/embed.go @@ -31,7 +31,7 @@ func newEmbedder(apiKey, model, baseURL string) *embedder { return &embedder{ apiKey: apiKey, model: model, - baseURL: strings.TrimRight(baseURL, "/"), + baseURL: strings.TrimSuffix(strings.TrimRight(baseURL, "/"), "/v1"), httpClient: &http.Client{ Timeout: 30 * time.Second, }, diff --git a/flake.nix b/flake.nix index bcc5f0a..3fc4af2 100644 --- a/flake.nix +++ b/flake.nix @@ -101,6 +101,12 @@ description = "Username of the admin user created at bootstrap."; }; + searchEngine = lib.mkOption { + type = lib.types.enum [ "qdrant" "fts5" ]; + default = "qdrant"; + description = "Search engine backend. 'fts5' uses SQLite full-text search, 'qdrant' uses Qdrant vector search."; + }; + sqlitePath = lib.mkOption { type = lib.types.path; default = "/var/lib/st-pierre/st-pierre.sqlite"; @@ -152,6 +158,7 @@ QDRANT_TLS = if cfg.qdrantTls then "true" else "false"; EMBEDDING_BASE_URL = cfg.embeddingBaseUrl; EMBEDDING_MODEL = cfg.embeddingModel; + SEARCH_ENGINE = cfg.searchEngine; SQLITE_PATH = builtins.toString cfg.sqlitePath; GIT_COMMIT = gitHash; BUILD_DATE = lastUpdated; diff --git a/main.go b/main.go index 6386ae9..2ecdfa2 100644 --- a/main.go +++ b/main.go @@ -29,7 +29,7 @@ func main() { } defer logger.Sync() - openAIKey := requireEnv(logger, "OPENAI_API_KEY") + openAIKey := os.Getenv("OPENAI_API_KEY") port := envOrDefault("PORT", "8080") sqlitePath := envOrDefault("SQLITE_PATH", "flashcard.db") @@ -164,8 +164,10 @@ func main() { func createSearchEngine(logger *zap.Logger, sqliteStore *sqliteStore, openAIKey string) SearchEngine { qdrantURL := os.Getenv("QDRANT_URL") - if qdrantURL == "" { - logger.Warn("QDRANT_URL not set, using SQLite FTS5 for search") + searchEngine := os.Getenv("SEARCH_ENGINE") + + if searchEngine == "fts5" || qdrantURL == "" { + logger.Info("using SQLite FTS5 for search", zap.String("engine", searchEngine)) return newFTS5Engine(sqliteStore) }