from langchain.embeddings.openai import OpenAIEmbeddings from models.databases.supabase.supabase import SupabaseDB from pydantic import BaseSettings from supabase.client import Client, create_client from vectorstore.supabase import SupabaseVectorStore class BrainRateLimiting(BaseSettings): max_brain_per_user: int = 5 class BrainSettings(BaseSettings): openai_api_key: str supabase_url: str supabase_service_key: str resend_api_key: str = "null" resend_email_address: str = "brain@mail.quivr.app" class ContactsSettings(BaseSettings): resend_contact_sales_from: str = "null" resend_contact_sales_to: str = "null" class ResendSettings(BaseSettings): resend_api_key: str = "null" def get_supabase_client() -> Client: settings = BrainSettings() # pyright: ignore reportPrivateUsage=none supabase_client: Client = create_client( settings.supabase_url, settings.supabase_service_key ) return supabase_client def get_supabase_db() -> SupabaseDB: supabase_client = get_supabase_client() return SupabaseDB(supabase_client) def get_embeddings() -> OpenAIEmbeddings: settings = BrainSettings() # pyright: ignore reportPrivateUsage=none embeddings = OpenAIEmbeddings( openai_api_key=settings.openai_api_key ) # pyright: ignore reportPrivateUsage=none return embeddings def get_documents_vector_store() -> SupabaseVectorStore: settings = BrainSettings() # pyright: ignore reportPrivateUsage=none embeddings = get_embeddings() supabase_client: Client = create_client( settings.supabase_url, settings.supabase_service_key ) documents_vector_store = SupabaseVectorStore( supabase_client, embeddings, table_name="vectors" ) return documents_vector_store