adding run.py

This commit is contained in:
Aherobo Ovie Victor
2025-07-17 23:06:27 +01:00
parent 9b5e11a6d8
commit 3f141da509
2 changed files with 87 additions and 20 deletions
+87
View File
@@ -0,0 +1,87 @@
#!/usr/bin/env python3
"""
Run script for Mini SpecsComply Pro.
This script initializes and runs the application.
"""
import os
import uvicorn
import argparse
from dotenv import load_dotenv
from loguru import logger
import sys
# Load environment variables from .env file
load_dotenv()
def check_api_keys():
"""Check if required API keys are set."""
missing_keys = []
# Check required API keys
if not os.getenv("COHERE_API_KEY"):
missing_keys.append("COHERE_API_KEY")
if not os.getenv("GROQ_API_KEY"):
missing_keys.append("GROQ_API_KEY")
# Check vector database keys
vector_db = os.getenv("VECTOR_DB", "pinecone").lower()
if vector_db == "pinecone":
if not os.getenv("PINECONE_API_KEY"):
missing_keys.append("PINECONE_API_KEY")
if not os.getenv("PINECONE_ENVIRONMENT"):
missing_keys.append("PINECONE_ENVIRONMENT")
if vector_db == "weaviate":
if not os.getenv("WEAVIATE_URL"):
missing_keys.append("WEAVIATE_URL")
return missing_keys
def main():
"""Run the application."""
# Parse command-line arguments
parser = argparse.ArgumentParser(description="Run Mini SpecsComply Pro API")
parser.add_argument("--host", default="0.0.0.0", help="Host to bind")
parser.add_argument("--port", type=int, default=8000, help="Port to bind")
parser.add_argument("--reload", action="store_true", help="Enable auto-reload")
parser.add_argument("--debug", action="store_true", help="Enable debug mode")
args = parser.parse_args()
# Configure logging
log_level = "DEBUG" if args.debug else "INFO"
logger.remove()
logger.add(
sys.stdout,
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}",
level=log_level,
)
# Check API keys
missing_keys = check_api_keys()
if missing_keys:
logger.warning(f"Missing API keys: {', '.join(missing_keys)}")
logger.warning("Some functionality may not work properly.")
logger.warning("Please check your .env file and ensure all required API keys are set.")
# If critical keys are missing, exit
critical_keys = ["COHERE_API_KEY", "GROQ_API_KEY"]
if any(key in critical_keys for key in missing_keys):
logger.error("Critical API keys are missing. Application cannot start.")
sys.exit(1)
logger.info(f"Starting Mini SpecsComply Pro on {args.host}:{args.port}")
# Run the application
uvicorn.run(
"app.main:app",
host=args.host,
port=args.port,
reload=args.reload,
log_level=log_level.lower(),
)
if __name__ == "__main__":
main()