#!/usr/bin/env python3
"""
Главная точка входа приложения MCP сервера погоды.
Запускает интерактивный чат с Deepseek для получения информации о погоде.
Использует MCP сервер с инструментами для получения реальных данных из OpenWeatherMap API.
Использование:
python3 deepseek_client.py
"""
import asyncio
import logging
import sys
from modules.config import Config
from modules.deepseek_api import get_weather_response
# Валидируем конфигурацию перед запуском
if not Config.validate():
print("❌ Ошибка конфигурации. Проверьте файл .env")
sys.exit(1)
logger = logging.getLogger("WeatherApp")
async def chat_with_deepseek() -> None:
"""
Интерактивный чат с Deepseek о погоде.
Позволяет пользователю задавать вопросы о погоде на естественном языке.
Deepseek автоматически вызывает инструменты для получения реальных данных
о погоде из OpenWeatherMap API.
"""
print("\n" + "=" * 60)
print("🌤️ ПОМОЩНИК ПО ПОГОДЕ - DEEPSEEK")
print("=" * 60)
print("\nВаш интерактивный помощник для получения информации о погоде.")
print("Спрашивайте о текущей погоде, прогнозе или рекомендациях по одежде.")
print("\nКоманды: 'выход' или 'exit' для завершения\n")
print("=" * 60 + "\n")
while True:
try:
user_input = input("👤 Вы: ").strip()
# Проверяем команды для выхода
if user_input.lower() in ["выход", "exit", "quit", "q"]:
print("\n" + "=" * 60)
print("👋 Спасибо за использование помощника по погоде!")
print("=" * 60 + "\n")
break
if not user_input:
continue
print("\n⏳ Обработка запроса...\n")
response = await get_weather_response(user_input)
print(f"🤖 Deepseek:\n{response}\n")
print("-" * 60 + "\n")
except KeyboardInterrupt:
print("\n\n" + "=" * 60)
print("👋 Приложение завершено пользователем")
print("=" * 60 + "\n")
break
except Exception as e:
logger.error(f"Ошибка в цикле чата: {e}")
print(f"❌ Ошибка: {e}\n")
async def main():
"""
Главная функция приложения.
Инициализирует конфигурацию и запускает интерактивный чат с Deepseek.
"""
try:
logger.info("🚀 Запуск приложения Weather Helper")
logger.info("=" * 60)
# Выводим информацию о конфигурации
print(Config.get_config_summary())
# Запускаем интерактивный чат
await chat_with_deepseek()
logger.info("✅ Приложение завершено успешно")
except Exception as e:
logger.critical(f"❌ Критическая ошибка: {e}")
print(f"\n❌ Критическая ошибка: {e}")
sys.exit(1)
if __name__ == "__main__":
try:
asyncio.run(main())
except KeyboardInterrupt:
print("\n\n👋 Программа прервана пользователем")
sys.exit(0)