|
import os |
|
import sys |
|
import logging |
|
from pathlib import Path |
|
from dotenv import load_dotenv |
|
from src.interface import launch_interface |
|
from src.utils import setup_logging |
|
|
|
logging.basicConfig( |
|
level=logging.DEBUG, |
|
format='%(asctime)s - %(levelname)s - %(message)s' |
|
) |
|
|
|
def verify_environment() -> bool: |
|
""" |
|
Перевірка наявності необхідних змінних середовища та структури проекту. |
|
|
|
Returns: |
|
bool: True якщо всі перевірки пройдені, False в іншому випадку |
|
""" |
|
required_env_vars = [ |
|
'OPENAI_API_KEY', |
|
'ANTHROPIC_API_KEY', |
|
'AZURE_API_KEY', |
|
'AZURE_ENDPOINT' |
|
] |
|
|
|
missing_vars = [var for var in required_env_vars if not os.getenv(var)] |
|
if missing_vars: |
|
logging.warning(f"Missing environment variables: {', '.join(missing_vars)}") |
|
return False |
|
|
|
required_dirs = [ |
|
Path('logs'), |
|
Path('docs'), |
|
Path('src/config'), |
|
Path('src/high-risk-symptoms-guidance') |
|
] |
|
|
|
for directory in required_dirs: |
|
if not directory.exists(): |
|
try: |
|
directory.mkdir(parents=True, exist_ok=True) |
|
logging.info(f"Created directory: {directory}") |
|
except Exception as e: |
|
logging.error(f"Error creating directory {directory}: {str(e)}") |
|
return False |
|
|
|
return True |
|
|
|
def setup_project() -> None: |
|
""" |
|
Налаштування проекту: створення необхідних директорій та файлів. |
|
""" |
|
try: |
|
|
|
project_structure = { |
|
'logs': [], |
|
'docs': ['HELP.md'], |
|
'src/config': ['config.py', '__init__.py'], |
|
'src/high-risk-symptoms-guidance': [] |
|
} |
|
|
|
root_dir = Path(__file__).parent |
|
for dir_path, files in project_structure.items(): |
|
directory = root_dir / dir_path |
|
directory.mkdir(parents=True, exist_ok=True) |
|
|
|
for file in files: |
|
file_path = directory / file |
|
if not file_path.exists(): |
|
file_path.touch() |
|
logging.info(f"Created file: {file_path}") |
|
|
|
logging.info("Project structure setup completed") |
|
|
|
except Exception as e: |
|
logging.error(f"Error setting up project structure: {str(e)}") |
|
sys.exit(1) |
|
|
|
def main() -> None: |
|
""" |
|
Головна функція програми. |
|
""" |
|
try: |
|
|
|
load_dotenv() |
|
|
|
|
|
setup_logging() |
|
|
|
|
|
if not verify_environment(): |
|
logging.warning("Environment check failed, but continuing with available features") |
|
|
|
|
|
setup_project() |
|
|
|
|
|
launch_interface() |
|
|
|
except Exception as e: |
|
logging.error(f"Critical error in main: {str(e)}") |
|
sys.exit(1) |
|
|
|
if __name__ == "__main__": |
|
main() |