paperbot / QASystem /utils.py
contextpilot's picture
Add better env var validation and debugging for HF Spaces
e15480e
import os
from dotenv import load_dotenv
from haystack_integrations.document_stores.pinecone import PineconeDocumentStore
from haystack.utils import Secret
load_dotenv()
PINECONE_API_KEY = os.getenv("PINECONE_API_KEY")
HF_TOKEN = os.getenv("HF_TOKEN")
GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
# Import config to get current model dimension
try:
from QASystem.config import CURRENT_MODEL, EMBEDDING_MODELS
MODEL_DIMENSION = EMBEDDING_MODELS[CURRENT_MODEL]["dimension"]
except ImportError:
MODEL_DIMENSION = 384 # Default to fast model dimension
# Validate required environment variables
MISSING_VARS = []
if not PINECONE_API_KEY:
MISSING_VARS.append("PINECONE_API_KEY")
print("⚠️ WARNING: PINECONE_API_KEY not set! Document storage will fail.")
else:
os.environ['PINECONE_API_KEY'] = PINECONE_API_KEY
print("✅ Pinecone API key set successfully.")
if not GOOGLE_API_KEY:
MISSING_VARS.append("GOOGLE_API_KEY")
print("⚠️ WARNING: GOOGLE_API_KEY not set! AI responses will fail.")
else:
os.environ['GOOGLE_API_KEY'] = GOOGLE_API_KEY
print("✅ Google API key set successfully.")
if HF_TOKEN:
os.environ['HF_TOKEN'] = HF_TOKEN
print("✅ HF_TOKEN set successfully.")
else:
print("ℹ️ INFO: HF_TOKEN not set (optional for most models)")
if MISSING_VARS:
print(f"\n⚠️ CRITICAL: Missing required environment variables: {', '.join(MISSING_VARS)}")
print(" For Hugging Face Spaces: Set these as 'Secrets' in Space Settings")
print(" For local development: Create a .env file with these values\n")
print(f"Using embedding dimension: {MODEL_DIMENSION}")
def pinecone_config(namespace="default"):
"""
Configure Pinecone database with namespace isolation.
Using a single namespace ensures only one document is active at a time.
"""
if not PINECONE_API_KEY:
raise ValueError(
"PINECONE_API_KEY is not set! "
"For HF Spaces: Add it as a Secret in Space Settings. "
"For local: Add it to your .env file."
)
document_store = PineconeDocumentStore(
api_key=Secret.from_token(PINECONE_API_KEY),
index="paperbot",
namespace=namespace, # Use namespace to isolate documents
dimension=MODEL_DIMENSION, # Dynamic dimension based on selected model
metric="cosine"
)
return document_store