Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions backend/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import os
from pydantic import Field, SecretStr
from pydantic_settings import BaseSettings, SettingsConfigDict

class Settings(BaseSettings):
# Required for LLM
google_api_key: SecretStr = Field(..., alias="GOOGLE_API_KEY")

# Required for Vector Search (Vertex AI)
gcp_project_id: str = Field(..., alias="GCP_PROJECT_ID")
index_endpoint_id_full: str = Field(..., alias="INDEX_ENDPOINT_ID_FULL")
deployed_index_id: str = Field(..., alias="DEPLOYED_INDEX_ID")

# Optional with Defaults
gcp_region: str = Field("europe-west4", alias="GCP_REGION")
bq_dataset_id: str = Field("ks_metadata", alias="BQ_DATASET_ID")
bq_table_id: str = Field("docstore", alias="BQ_TABLE_ID")

# Load from .env file
model_config = SettingsConfigDict(
env_file=".env",
env_file_encoding="utf-8",
extra="ignore"
)

def validate_config():
"""Validates presence of critical env vars at startup."""
try:
settings = Settings()
print("✅ Environment variables validated successfully.")
return settings
except Exception as e:
print("\n❌ CRITICAL ERROR: Missing or Invalid Environment Variables")
print("Please check your .env file or system environment.")
print(f"Details: {e}")
# Exit the process to prevent 'zombie' deployment
import sys
sys.exit(1)
4 changes: 3 additions & 1 deletion backend/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import asyncio
from typing import Optional, Dict, Any
from datetime import datetime

from config import validate_config
from dotenv import load_dotenv
from fastapi import FastAPI, HTTPException
from fastapi.middleware.cors import CORSMiddleware
Expand All @@ -16,6 +16,8 @@

load_dotenv()

validate_config()

# FastAPI app + CORS
app = FastAPI(
title="KnowledgeSpace AI",
Expand Down