Clone_Lm / backend /storage.py
skumar54's picture
NotebookLM clone: Gradio app, backend, Gemini artifacts
9c9ce67
"""
Storage paths and layout for /data/users/<username>/notebooks/...
All paths are derived from username and notebook_id; no global mutable state.
"""
from pathlib import Path
from typing import Optional
from backend.config import CHROMA_COLLECTION_NAME
from backend.utils import ensure_dir, user_data_dir
def user_root(username: str) -> Path:
return user_data_dir(username)
def notebooks_index_path(username: str) -> Path:
return user_root(username) / "notebooks" / "index.json"
def notebook_dir(username: str, notebook_id: str) -> Path:
return user_root(username) / "notebooks" / notebook_id
def files_raw_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(notebook_dir(username, notebook_id) / "files_raw")
def files_extracted_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(notebook_dir(username, notebook_id) / "files_extracted")
def sources_json_path(username: str, notebook_id: str) -> Path:
return notebook_dir(username, notebook_id) / "sources.json"
def chroma_persist_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(notebook_dir(username, notebook_id) / "chroma")
def chat_messages_path(username: str, notebook_id: str) -> Path:
return ensure_dir(notebook_dir(username, notebook_id) / "chat") / "messages.jsonl"
def artifacts_root(username: str, notebook_id: str) -> Path:
return ensure_dir(notebook_dir(username, notebook_id) / "artifacts")
def artifacts_index_path(username: str, notebook_id: str) -> Path:
return artifacts_root(username, notebook_id) / "index.json"
def reports_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(artifacts_root(username, notebook_id) / "reports")
def quizzes_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(artifacts_root(username, notebook_id) / "quizzes")
def podcasts_dir(username: str, notebook_id: str) -> Path:
return ensure_dir(artifacts_root(username, notebook_id) / "podcasts")
def get_chroma_collection_name() -> str:
return CHROMA_COLLECTION_NAME