"""Factory for creating database adapters based on configuration."""
import os
from typing import cast
from .base import VectorDatabase
from .qdrant_adapter import QdrantAdapter
from .supabase_adapter import SupabaseAdapter
def create_database_client() -> VectorDatabase:
"""
Create a database client based on the VECTOR_DATABASE environment variable.
Returns:
VectorDatabase: An instance of either SupabaseAdapter or QdrantAdapter
Raises:
ValueError: If an unknown database type is specified
"""
db_type = os.getenv("VECTOR_DATABASE", "supabase").lower()
# Handle empty string as default
if not db_type:
db_type = "supabase"
if db_type == "supabase":
return cast("VectorDatabase", SupabaseAdapter())
if db_type == "qdrant":
url = os.getenv("QDRANT_URL", "http://qdrant:6333")
api_key = os.getenv("QDRANT_API_KEY")
return cast("VectorDatabase", QdrantAdapter(url=url, api_key=api_key))
msg = f"Unknown database type: {db_type}. Supported types are: 'supabase', 'qdrant'"
raise ValueError(
msg,
)
async def create_and_initialize_database() -> VectorDatabase:
"""
Create and initialize a database client.
This is a convenience function that creates the client and calls initialize().
Returns:
VectorDatabase: An initialized database adapter
"""
client = create_database_client()
await client.initialize()
return client