Awais
Fix sources titles + concise answers (300 tokens max)
dbfda69
Raw
History Blame Contribute Delete
2.71 kB
"""Application configuration settings."""
import os
from typing import Optional
from pathlib import Path
from pydantic_settings import BaseSettings
from pydantic import ConfigDict
# Load .env from the project root (frontend/src/)
_backend_dir = Path(__file__).resolve().parent # src/config/
_src_dir = _backend_dir.parent.parent # src/
_dotenv_path = _src_dir / ".env"
if _dotenv_path.exists():
from dotenv import load_dotenv
load_dotenv(_dotenv_path)
class Settings(BaseSettings):
"""Application settings loaded from environment variables."""
model_config = ConfigDict(
env_file=str(_dotenv_path),
env_file_encoding="utf-8",
case_sensitive=True,
extra="ignore",
)
# Application
APP_NAME: str = "Physical AI Edge Kit API"
APP_VERSION: str = "1.0.0"
DEBUG: bool = False
# Database - Neon Postgres
DATABASE_URL: str = os.getenv("DATABASE_URL", "postgresql://localhost:5432/edgekit")
# Qdrant Vector Database
QDRANT_URL: str = os.getenv("QDRANT_URL", "http://localhost:6333")
QDRANT_API_KEY: Optional[str] = os.getenv("QDRANT_API_KEY")
QDRANT_COLLECTION: str = os.getenv("QDRANT_COLLECTION", "physical_ai_docs")
# OpenRouter (DEFAULT provider - chat + embeddings)
OPENROUTER_API_KEY: str = os.getenv("OPENROUTER_API_KEY", "").strip()
OPENROUTER_CHAT_MODEL: str = os.getenv("OPENROUTER_CHAT_MODEL", "openai/gpt-oss-20b:free").strip()
OPENROUTER_EMBEDDING_MODEL: str = os.getenv("OPENROUTER_EMBEDDING_MODEL", "nvidia/llama-nemotron-embed-vl-1b-v2:free").strip()
EMBEDDING_DIM: int = int(os.getenv("EMBEDDING_DIM", "2048"))
# Cohere (fallback for embeddings - matches legacy data)
COHERE_API_KEY: str = os.getenv("COHERE_API_KEY", "").strip()
COHERE_EMBEDDING_MODEL: str = os.getenv("COHERE_EMBEDDING_MODEL", "embed-english-v3.0")
# Gemini (for chat completion)
GEMINI_API_KEY: str = os.getenv("GEMINI_API_KEY", "")
GEMINI_CHAT_MODEL: str = os.getenv("GEMINI_CHAT_MODEL", "gemini-2.5-flash")
# OpenAI (fallback)
OPENAI_API_KEY: str = os.getenv("OPENAI_API_KEY", "")
OPENAI_EMBEDDING_MODEL: str = os.getenv("OPENAI_EMBEDDING_MODEL", "text-embedding-3-small")
OPENAI_CHAT_MODEL: str = os.getenv("OPENAI_CHAT_MODEL", "gpt-4o-mini")
# RAG Configuration
RAG_CHUNK_SIZE: int = 500
RAG_CHUNK_OVERLAP: int = 50
RAG_TOP_K: int = 5
RAG_SIMILARITY_THRESHOLD: float = 0.20
RAG_MAX_RESPONSE_TOKENS: int = 300
# Authentication
SECRET_KEY: str = os.getenv("SECRET_KEY", "dev-secret-key-change-in-production")
ACCESS_TOKEN_EXPIRE_MINUTES: int = 30
# CORS
CORS_ORIGINS: list = ["*"]
settings = Settings()