| import os |
| from pathlib import Path |
|
|
| from dotenv import load_dotenv |
|
|
|
|
| BASE_DIR = Path(__file__).resolve().parent.parent |
| DATA_DIR = BASE_DIR / "data" |
| UPLOAD_DIR = DATA_DIR / "uploads" |
| URL_IMPORT_DIR = UPLOAD_DIR / "urls" |
| DB_DIR = DATA_DIR / "chroma_db" |
| REGISTRY_PATH = DATA_DIR / "chunk_registry.json" |
| NOTES_PATH = DATA_DIR / "notes.json" |
| HISTORY_PATH = DATA_DIR / "history.json" |
| FLASHCARDS_PATH = DATA_DIR / "flashcards.json" |
| LEARNING_STATE_PATH = DATA_DIR / "learning_state.json" |
| TEMPLATES_DIR = BASE_DIR / "templates" |
| STATIC_DIR = BASE_DIR / "static" |
|
|
| load_dotenv(BASE_DIR / ".env") |
|
|
| SUPPORTED_EXTENSIONS = {".pdf", ".txt"} |
| DEFAULT_LLM_PROVIDER = os.getenv("RABBOOK_LLM_PROVIDER", "groq").lower() |
| DEFAULT_LLM_MODEL = os.getenv("RABBOOK_LLM_MODEL", "llama-3.1-8b-instant") |
| OLLAMA_BASE_URL = os.getenv("RABBOOK_OLLAMA_BASE_URL", "http://localhost:11434") |
| |
| OLLAMA_NUM_GPU = int(os.getenv("RABBOOK_OLLAMA_NUM_GPU", "-1")) |
| OLLAMA_THINKING_MODE = os.getenv("RABBOOK_OLLAMA_THINKING", "true").lower() == "true" |
| DEFAULT_HOST = os.getenv("RABBOOK_HOST", "0.0.0.0") |
| DEFAULT_PORT = int(os.getenv("RABBOOK_PORT", "6001")) |
| DEFAULT_RETRIEVAL_K = int(os.getenv("RABBOOK_RETRIEVAL_K", "6")) |
| DEFAULT_RERANK_CANDIDATE_K = int(os.getenv("RABBOOK_RERANK_CANDIDATE_K", "40")) |
| DEFAULT_BM25_CANDIDATE_K = int(os.getenv("RABBOOK_BM25_CANDIDATE_K", "40")) |
| DEFAULT_RRF_K = int(os.getenv("RABBOOK_RRF_K", "60")) |
| DEFAULT_ENABLE_QUERY_TRANSFORM = os.getenv("RABBOOK_ENABLE_QUERY_TRANSFORM", "true").lower() == "true" |
| DEFAULT_SUBQUERY_COUNT = int(os.getenv("RABBOOK_SUBQUERY_COUNT", "3")) |
| DEFAULT_CONTEXT_WINDOW = int(os.getenv("RABBOOK_CONTEXT_WINDOW", "1")) |
| DEFAULT_MAX_EXPANDED_CHUNKS = int(os.getenv("RABBOOK_MAX_EXPANDED_CHUNKS", "12")) |
| DEFAULT_MIN_GROUNDED_RERANK_SCORE = float( |
| os.getenv("RABBOOK_MIN_GROUNDED_RERANK_SCORE", "1.0") |
| ) |
| DEFAULT_MIN_GROUNDED_CHUNKS = int(os.getenv("RABBOOK_MIN_GROUNDED_CHUNKS", "1")) |
| DEFAULT_GROUNDED_FALLBACK_MESSAGE = os.getenv( |
| "RABBOOK_GROUNDED_FALLBACK_MESSAGE", |
| "I don't have enough support in the current documents to answer that confidently.", |
| ) |
| DEFAULT_CHUNK_SIZE = int(os.getenv("RABBOOK_CHUNK_SIZE", "1200")) |
| DEFAULT_CHUNK_OVERLAP = int(os.getenv("RABBOOK_CHUNK_OVERLAP", "150")) |
| DEFAULT_SEMANTIC_MIN_CHUNK_SIZE = int(os.getenv("RABBOOK_SEMANTIC_MIN_CHUNK_SIZE", "350")) |
| DEFAULT_SEMANTIC_PERCENTILE = int(os.getenv("RABBOOK_SEMANTIC_PERCENTILE", "85")) |
| DEFAULT_RERANK_MODEL = os.getenv( |
| "RABBOOK_RERANK_MODEL", |
| "cross-encoder/ms-marco-MiniLM-L-6-v2", |
| ) |
| ENABLE_LANGGRAPH_AGENT = os.getenv("RABBOOK_ENABLE_LANGGRAPH_AGENT", "true").lower() == "true" |
| DEFAULT_ENABLE_RESEARCH_FALLBACK = os.getenv("RABBOOK_ENABLE_RESEARCH_FALLBACK", "false").lower() == "true" |
| ENABLE_TOOL_AGENT = os.getenv("RABBOOK_ENABLE_TOOL_AGENT", "false").lower() == "true" |
|
|
| UPLOAD_DIR.mkdir(parents=True, exist_ok=True) |
| URL_IMPORT_DIR.mkdir(parents=True, exist_ok=True) |
|
|
|
|
| def get_google_api_key() -> str | None: |
| return os.getenv("GEMINI_KEY") |
|
|