elmAI rebrand: визуальные названия Elmer → elmAI

This commit is contained in:
Repinoid
2026-05-28 18:25:14 +03:00
parent f40918d07b
commit 0d1cf026dc
4 changed files with 170 additions and 19 deletions
+42 -13
View File
@@ -5,6 +5,7 @@ POST /api/v1/session/upload — приём батча, LLM-анализ, воз
"""
import logging
import time
from web.script_builder import build_default_script, build_full_script
from web.script_parser import parse_batch, format_no_llm
@@ -63,6 +64,7 @@ def register(app):
def upload_session():
from flask import request, jsonify
from elmer.config import load
from elmer.db import Database
from elmer.diagnose import Diagnoser
from elmer.prompts import SYSTEM_PROMPT
@@ -72,30 +74,57 @@ def register(app):
responses = data["responses"]
logger.info(f"Upload: {len(responses)} responses")
# ── Информация о клиенте ──────────────────────
client_info = data.get("client_info", {})
client_info["client_ip"] = request.remote_addr
client_info["real_ip"] = request.headers.get("X-Real-IP", "")
client_info["user_agent"] = request.headers.get("User-Agent", "")
client_info["content_length"] = request.content_length
parsed = parse_batch(responses)
cfg = load()
api_key = cfg["llm"]["api_key"]
model = cfg["llm"].get("model", "gpt-oss-120b")
llm_start = time.time()
llm_success = False
diagnosis = ""
if not api_key:
return jsonify({
"diagnosis": format_no_llm(parsed),
"parsed": _summary(parsed),
})
diagnosis = format_no_llm(parsed)
else:
diagnoser = Diagnoser(
api_key=api_key,
model=model,
base_url=cfg["llm"].get("base_url", "https://api.aillm.ru/v1"),
)
try:
diagnosis = diagnoser.diagnose(SYSTEM_PROMPT, _build_diagnosis_prompt(parsed))
llm_success = True
except Exception as e:
logger.warning(f"LLM failed: {e}")
diagnosis = format_no_llm(parsed) + f"\n\n(LLM недоступен: {e})"
diagnoser = Diagnoser(
api_key=api_key,
model=cfg["llm"].get("model", "gpt-oss-120b"),
base_url=cfg["llm"].get("base_url", "https://api.aillm.ru/v1"),
)
llm_duration_ms = int((time.time() - llm_start) * 1000)
# ── Сохранение в БД ───────────────────────────
try:
answer = diagnoser.diagnose(SYSTEM_PROMPT, _build_diagnosis_prompt(parsed))
db = Database()
db.save_session(
client_info=client_info,
responses=responses,
diagnosis=diagnosis,
llm_model=model,
llm_duration_ms=llm_duration_ms,
llm_success=llm_success,
)
except Exception as e:
logger.warning(f"LLM failed: {e}")
answer = format_no_llm(parsed) + f"\n\n(LLM недоступен: {e})"
logger.error(f"DB save failed: {e}")
return jsonify({
"diagnosis": answer,
"diagnosis": diagnosis,
"parsed": _summary(parsed),
})
+5 -5
View File
@@ -4,22 +4,22 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Elmer — Диагностика авто</title>
<title>elmAI — Диагностика авто</title>
<link rel="stylesheet" href="/static/style.css">
</head>
<body>
<div class="container">
<h1>🔧 Elmer</h1>
<h1>🔧 elmAI</h1>
<p class="subtitle">Диагностика авто через ELM327 + ИИ</p>
<p class="subtitle" style="font-size:12px;opacity:0.7;">v0.16.0-dev — 28 мая 2026</p>
<p class="subtitle" style="font-size:12px;opacity:0.7;">v0.18.0-dev — 28 мая 2026</p>
<div class="card" style="text-align:center;margin-bottom:20px;">
<p style="margin:0 0 10px 0;">📱 Скачай приложение на телефон:</p>
<a href="/static/app-debug.apk" style="color:#ff6b35;font-size:18px;font-weight:bold;text-decoration:none;">
⬇️ Скачать Elmer APK
⬇️ Скачать elmAI APK
</a>
<p style="font-size:11px;opacity:0.6;margin:4px 0 0 0;">v0.16.0-dev • нажмите чтобы скачать</p>
<p style="font-size:11px;opacity:0.6;margin:4px 0 0 0;">v0.18.0-dev • нажмите чтобы скачать</p>
</div>
<!-- Кнопка десктоп-диагностики скрыта — только для разработчика с прямым ELM327 -->