""" Configuration for ContextFlow Research """ import os from dataclasses import dataclass, field from typing import List, Optional @dataclass class LLMConfig: api_key: str = os.environ.get('LLM_API_KEY', '') base_url: str = os.environ.get('LLM_BASE_URL', 'https://api.openai.com/v1') model: str = os.environ.get('LLM_MODEL', 'gpt-4-turbo') temperature: float = 0.7 max_tokens: int = 4000 @dataclass class SupabaseConfig: url: str = os.environ.get('SUPABASE_URL', '') anon_key: str = os.environ.get('SUPABASE_ANON_KEY', '') service_key: str = os.environ.get('SUPABASE_SERVICE_KEY', '') @dataclass class NotionConfig: api_key: str = os.environ.get('NOTION_API_KEY', '') database_id: str = os.environ.get('NOTION_DATABASE_ID', '') @dataclass class ZepConfig: api_key: str = os.environ.get('ZEP_API_KEY', '') @dataclass class Config: secret_key: str = os.environ.get('SECRET_KEY', 'contextflow-research-secret-2024') debug: bool = os.environ.get('DEBUG', 'False').lower() == 'true' host: str = os.environ.get('HOST', '0.0.0.0') port: int = int(os.environ.get('PORT', 5001)) llm: LLMConfig = field(default_factory=LLMConfig) supabase: SupabaseConfig = field(default_factory=SupabaseConfig) notion: NotionConfig = field(default_factory=NotionConfig) zep: ZepConfig = field(default_factory=ZepConfig) upload_folder: str = 'uploads' max_content_length: int = 100 * 1024 * 1024 allowed_domains: List[str] = field(default_factory=lambda: [ 'wikipedia.org', 'khanacademy.org', 'coursera.org', 'edx.org', 'stackoverflow.com', 'developer.mozilla.org', 'geeksforgeeks.org', 'chatgpt.com', 'claude.ai', 'gemini.google', 'chat.google.com', 'github.com', 'huggingface.co', 'arxiv.org', 'arxiv.org', 'youtube.com', ' Khanacademy', ' Brilliant', ' Brilliant.org', 'udemy.com', 'pluralsight.com', 'w3schools.com', 'tutorialspoint.com', 'medium.com', 'dev.to', 'stackoverflow.com', 'stackexchange.com', 'learn.microsoft.com', 'docs.python.org', 'docs.oracle.com', 'pandas.pydata.org', 'numpy.org', 'scikit-learn.org', 'tensorflow.org', 'pytorch.org', 'keras.io', 'huggingface.co/docs', 'langchain.ai' ]) rl_training_interval: int = 100 simulation_rounds: int = 50 graph_batch_size: int = 5