Files
elmer/web/app.py
T
Repinoid 2db6cb68a8 refactor: архитектура сервера — obd/ brain/ api/
- obd/protocol.py — ELM327 стейт-машина AndrOBD (подробные докстринги)
- brain/client.py — LLM-клиент Diagnoser
- brain/prompts.py — системные промпты
- api/db.py — SQLite (sessions + старые таблицы)
- api/scripts.py — сборка диагностических скриптов
- api/parser.py — парсинг ответов ELM327
- api/routes.py — все REST-эндпоинты
- api/config.py — загрузка конфига
- web/app.py — точка входа Flask (упрощена)

Удалено: elmer/elm.py, elmer/elm_proto.py, web/raw_endpoint.py
2026-05-29 17:24:33 +03:00

46 lines
1.3 KiB
Python

"""elmAI — точка входа Flask-приложения.
Запуск через gunicorn:
gunicorn -w 4 -b 127.0.0.1:8000 web.app:app
Структура модулей:
api/ — REST-эндпоинты, БД, скрипты
brain/ — LLM-клиент, промпты
obd/ — ELM327-протокол (AndrOBD)
"""
import sys
import logging
from pathlib import Path
# Добавляем корень проекта в PYTHONPATH для импорта api/, brain/, obd/
sys.path.insert(0, str(Path(__file__).parent.parent))
from flask import Flask, jsonify, redirect, render_template, request, send_from_directory
from api.config import load
from api.routes import register as register_api
logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(name)s] %(message)s")
app = Flask(__name__)
config = load()
register_api(app)
@app.route("/")
def index():
"""Главная страница."""
return render_template("index.html")
@app.route("/elmer.apk")
def download_apk():
"""Прямая ссылка на APK."""
return send_from_directory("static", "app-debug.apk", as_attachment=True, download_name="elmer.apk")
if __name__ == "__main__":
print(f"🌐 elmAI Web: http://localhost:5005")
app.run(host="0.0.0.0", port=5005, debug=False)