Redfire-1234's picture
Update app/config.py
0c0f014 verified
from pydantic_settings import BaseSettings
from functools import lru_cache
import os
import base64
import json
class Settings(BaseSettings):
groq_api_key: str
google_drive_folder_id: str
google_application_credentials: str = "credentials.json"
vector_store_path: str = "data/vector_store"
chunk_size: int = 800
chunk_overlap: int = 150
top_k_results: int = 3
class Config:
env_file = ".env"
def get_google_credentials_dict(self) -> dict:
"""
Get Google credentials as dictionary.
Handles both local file and base64 encoded env variable (for HuggingFace Spaces)
"""
# Check if credentials are provided as base64 in environment variable
credentials_base64 = os.getenv("GOOGLE_CREDENTIALS_BASE64")
if credentials_base64:
# Decode base64 credentials (for HuggingFace Spaces)
try:
credentials_json = base64.b64decode(credentials_base64).decode('utf-8')
credentials_dict = json.loads(credentials_json)
# Also write to file for compatibility
with open("credentials.json", "w") as f:
f.write(credentials_json)
print("✅ Google credentials loaded from GOOGLE_CREDENTIALS_BASE64 environment variable")
return credentials_dict
except Exception as e:
raise Exception(f"Error decoding Google credentials from environment variable: {str(e)}")
# Otherwise, read from file (for local development)
elif os.path.exists(self.google_application_credentials):
with open(self.google_application_credentials, 'r') as f:
credentials_dict = json.load(f)
print("✅ Google credentials loaded from credentials.json file")
return credentials_dict
else:
raise Exception(
"Google credentials not found. Please either:\n"
"1. Set GOOGLE_CREDENTIALS_BASE64 environment variable (for HuggingFace Spaces), or\n"
"2. Place credentials.json file in the project root (for local development)"
)
@lru_cache()
def get_settings():
return Settings()