smart tdee
This commit is contained in:
@@ -20,7 +20,7 @@ from app.chat.notices import (
|
||||
)
|
||||
from app.fitness.context import format_fitness_context, get_fitness_snapshot
|
||||
from app.homelab.context import format_datetime_context
|
||||
from app.homelab.openmeteo import format_weather_snapshot
|
||||
from app.homelab.openmeteo import OpenMeteoClient, format_weather_snapshot
|
||||
from app.memory.context import (
|
||||
format_identity_hint,
|
||||
format_memory_context,
|
||||
@@ -34,6 +34,7 @@ from app.db.models import ChatSession, Message
|
||||
from app.llm.client import LLMClient
|
||||
from app.pomodoro.service import PomodoroService
|
||||
from app.tools.registry import TOOL_DEFINITIONS, execute_tool
|
||||
from app.vision.analyze import format_vision_turn_hint
|
||||
|
||||
MAX_TOOL_ROUNDS = 5
|
||||
MAX_HISTORY_MESSAGES = 40
|
||||
@@ -45,6 +46,11 @@ _DOMAIN_KEYWORDS: dict[str, tuple[str, ...]] = {
|
||||
"shopping": ("покуп", "магазин", "список", "shopping", "корзин"),
|
||||
"reminders": ("напомин", "календар", "событи", "дедлайн", "встреч", "план"),
|
||||
"projects": ("taiga", "gitea", "задач", "проект", "git", "issue", "коммит", "ветк"),
|
||||
"weather": (
|
||||
"погод", "дожд", "снег", "ветер", "температур", "градус", "мороз", "жар",
|
||||
"на улице", "одеть", "зонт", "прогноз", "завтра", "послезавтра", "выходн",
|
||||
"weather", "rain", "forecast", "umbrella", "outside",
|
||||
),
|
||||
}
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -186,7 +192,12 @@ class ChatService:
|
||||
self._optional_domain("fitness", user_query, lambda: fitness_snapshot, format_fitness_context),
|
||||
self._optional_domain("shopping", user_query, lambda: shopping_snapshot, format_shopping_context),
|
||||
self._optional_domain("reminders", user_query, lambda: reminders_snapshot, format_reminders_context),
|
||||
format_weather_snapshot(),
|
||||
self._optional_domain(
|
||||
"weather",
|
||||
user_query,
|
||||
lambda: OpenMeteoClient().fetch_forecast(hours_ahead=6, days_ahead=7),
|
||||
lambda snap: format_weather_snapshot(snap, include_daily=True),
|
||||
),
|
||||
format_pomodoro_context(status),
|
||||
self._optional_domain("projects", user_query, lambda: projects_snapshot, format_projects_context),
|
||||
]
|
||||
@@ -201,6 +212,9 @@ class ChatService:
|
||||
identity_hint = format_identity_hint(memory_snapshot, last_user)
|
||||
if identity_hint:
|
||||
system_prompt += f"\n\n{identity_hint}"
|
||||
vision_hint = format_vision_turn_hint(last_user)
|
||||
if vision_hint:
|
||||
system_prompt += f"\n\n{vision_hint}"
|
||||
if len(all_chat) > MAX_HISTORY_MESSAGES:
|
||||
system_prompt += (
|
||||
f"\n\n[История чата: в контексте последние {MAX_HISTORY_MESSAGES} "
|
||||
|
||||
Reference in New Issue
Block a user