vn6295337's picture
Initial commit: RAG Document Assistant with Zero-Storage Privacy
f866820
import os
from dotenv import load_dotenv
# Load local .env for development
load_dotenv()
# Support Streamlit Cloud secrets
try:
import streamlit as st
_HAS_STREAMLIT = True
except ImportError:
_HAS_STREAMLIT = False
def get_required(key: str) -> str:
"""
Get required config value from environment or Streamlit secrets.
Args:
key: Configuration key to retrieve
Returns:
Configuration value
Raises:
RuntimeError: If key is not found in any configuration source
"""
# Try Streamlit secrets first (for Streamlit Cloud)
if _HAS_STREAMLIT and hasattr(st, 'secrets'):
try:
if key in st.secrets:
return st.secrets[key]
except Exception:
pass # Secrets not configured, fall back to env vars
# Fall back to environment variables (for local/other deployments)
value = os.getenv(key)
if not value:
raise RuntimeError(f"Missing required environment variable: {key}")
return value
def get_optional(key: str, default=None):
"""
Get optional config value from environment or Streamlit secrets.
Args:
key: Configuration key to retrieve
default: Default value if key is not found
Returns:
Configuration value or default
"""
# Try Streamlit secrets first
if _HAS_STREAMLIT and hasattr(st, 'secrets'):
try:
if key in st.secrets:
return st.secrets[key]
except Exception:
pass # Secrets not configured, fall back to env vars
# Fall back to environment variables
return os.getenv(key, default)
# Pinecone (Required)
PINECONE_API_KEY = get_required("PINECONE_API_KEY")
PINECONE_INDEX_NAME = get_optional("PINECONE_INDEX_NAME", "rag-semantic-384")
# LLM provider keys (at least one required)
GEMINI_API_KEY = get_optional("GEMINI_API_KEY")
GROQ_API_KEY = get_optional("GROQ_API_KEY")
OPENROUTER_API_KEY = get_optional("OPENROUTER_API_KEY")
# Model names
GEMINI_MODEL = get_optional("GEMINI_MODEL", "gemini-2.5-flash")
GROQ_MODEL = get_optional("GROQ_MODEL", "llama-3.1-8b-instant")
OPENROUTER_MODEL = get_optional("OPENROUTER_MODEL", "mistralai/mistral-7b-instruct:free")
# Supabase (Optional - not used in current deployment)
SUPABASE_URL = get_optional("SB_PROJECT_URL")
SUPABASE_ANON_KEY = get_optional("SB_ANON_KEY")
# Document source configuration
DOCS_DIR = get_optional("DOCS_DIR", "sample_docs/")
CHUNKS_PATH = get_optional("CHUNKS_PATH", "data/chunks.jsonl")