File size: 2,917 Bytes
c59d808
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# Database and vector store configuration
import os
from dotenv import load_dotenv

# Load environment variables from .env file
load_dotenv()

class DatabaseSettings:
    """Simple database settings class that reads environment variables directly"""
    
    def __init__(self):
        # ===========================================
        # Vector Store Configuration
        # ===========================================
        self.VECTOR_STORE_PROVIDER = os.getenv("VECTOR_STORE_PROVIDER", "chromadb")
        
        # ChromaDB Configuration
        self.DB_PATH = os.getenv("DB_PATH", "./data/chromadb")
        self.DB_COLLECTION_NAME = os.getenv("DB_COLLECTION_NAME", "recipes")
        self.DB_PERSIST_DIRECTORY = os.getenv("DB_PERSIST_DIRECTORY", "./data/chromadb_persist")
        self.DB_REFRESH_ON_START = os.getenv("DB_REFRESH_ON_START", "false").lower() == "true"
        
        # MongoDB Atlas Configuration
        self.MONGODB_URI = os.getenv("MONGODB_URI")
        self.MONGODB_DATABASE = os.getenv("MONGODB_DATABASE", "recipe_bot")
        self.MONGODB_COLLECTION = os.getenv("MONGODB_COLLECTION", "recipes")
        self.MONGODB_INDEX_NAME = os.getenv("MONGODB_INDEX_NAME", "vector_index")
        self.MONGODB_VECTOR_FIELD = os.getenv("MONGODB_VECTOR_FIELD", "embedding")
        self.MONGODB_TEXT_FIELD = os.getenv("MONGODB_TEXT_FIELD", "text")
        self.MONGODB_SIMILARITY_METRIC = os.getenv("MONGODB_SIMILARITY_METRIC", "cosine")
        self.MONGODB_NUM_CANDIDATES = int(os.getenv("MONGODB_NUM_CANDIDATES", "50"))

    def get_vector_store_config(self):
        """Get vector store configuration based on selected provider"""
        if self.VECTOR_STORE_PROVIDER == "chromadb":
            return {
                "provider": "chromadb",
                "path": self.DB_PATH,
                "collection_name": self.DB_COLLECTION_NAME,
                "persist_directory": self.DB_PERSIST_DIRECTORY,
                "refresh_on_start": self.DB_REFRESH_ON_START
            }
        elif self.VECTOR_STORE_PROVIDER == "mongodb":
            if not self.MONGODB_URI:
                raise ValueError("MongoDB URI is required when using MongoDB Atlas as vector store")
            return {
                "provider": "mongodb",
                "uri": self.MONGODB_URI,
                "database": self.MONGODB_DATABASE,
                "collection_name": self.MONGODB_COLLECTION,
                "index_name": self.MONGODB_INDEX_NAME,
                "vector_field": self.MONGODB_VECTOR_FIELD,
                "text_field": self.MONGODB_TEXT_FIELD,
                "similarity_metric": self.MONGODB_SIMILARITY_METRIC,
                "num_candidates": self.MONGODB_NUM_CANDIDATES
            }
        else:
            raise ValueError(f"Unsupported vector store provider: {self.VECTOR_STORE_PROVIDER}")

# Create global database settings instance
db_settings = DatabaseSettings()