diff --git a/telegram-agy-bot/bot.py b/telegram-agy-bot/bot.py
index 689a8a4..0b475ca 100644
--- a/telegram-agy-bot/bot.py
+++ b/telegram-agy-bot/bot.py
@@ -45,6 +45,7 @@ from formatters import (
format_thought,
format_tool_call,
format_context_stats,
+ get_model_display_name,
format_git_info,
format_git_commits_page,
format_commit_detail_view,
@@ -2744,12 +2745,15 @@ async def process_agent_turn_by_chat_id(
if initial_status_text:
initial_status = initial_status_text
else:
+ model_to_use = getattr(curr_proj, "model", None) or getattr(session, "model", None) or settings.default_model or "gemini-3.7-flash-auto"
+ effort_to_use = getattr(curr_proj, "reasoning_effort", None) or getattr(session, "reasoning_effort", None)
+ model_display = get_model_display_name(model_to_use, effort_to_use)
initial_status = (
f"📁 پروژه: {escape_html(curr_proj.name)}\n\n"
- f"💭 در حال تفکر روی پروژه {escape_html(curr_proj.name)}..."
+ f"💭 در حال تفکر با مدل {escape_html(model_display)}..."
if is_fa else
f"📁 Project: {escape_html(curr_proj.name)}\n\n"
- f"💭 Thinking on project {escape_html(curr_proj.name)}..."
+ f"💭 Thinking with model {escape_html(model_display)}..."
)
status_msg = await app.bot.send_message(
chat_id=chat_id,
@@ -6450,19 +6454,23 @@ async def process_agent_turn(
session_manager.cancel_active_task(chat_id)
- # Initial thinking status message clearly stating which project is active
+ model_to_use = getattr(curr_proj, "model", None) or getattr(session, "model", None) or settings.default_model or "gemini-3.7-flash-auto"
+ effort_to_use = getattr(curr_proj, "reasoning_effort", None) or getattr(session, "reasoning_effort", None)
+ model_display = get_model_display_name(model_to_use, effort_to_use)
+
+ # Initial thinking status message clearly stating which project and model are active
if status_msg_to_reuse:
status_msg = status_msg_to_reuse
else:
if is_fa:
initial_status = (
f"📁 پروژه: {escape_html(curr_proj.name)}\n\n"
- f"💭 در حال تفکر روی پروژه {escape_html(curr_proj.name)}..."
+ f"💭 در حال تفکر با مدل {escape_html(model_display)}..."
)
else:
initial_status = (
f"📁 Project: {escape_html(curr_proj.name)}\n\n"
- f"💭 Thinking on project {escape_html(curr_proj.name)}..."
+ f"💭 Thinking with model {escape_html(model_display)}..."
)
status_msg = await update.effective_message.reply_html(
@@ -6508,21 +6516,21 @@ async def process_agent_turn(
# Suffix at the BOTTOM of the message
bottom_parts = []
- # 1. Thinking blockquote at the bottom with project name
+ # 1. Thinking blockquote at the bottom with model name
if settings.enable_thinking_display and thoughts:
thought_content = "\n".join(thoughts[-3:])
- bottom_parts.append(format_thought(thought_content, project_name=curr_proj.name, lang=session.language).strip())
+ bottom_parts.append(format_thought(thought_content, model_name=model_display, lang=session.language).strip())
# 2. Active tools at the bottom
if settings.enable_tool_notifications and tools:
bottom_parts.append("\n".join(tools[-2:]).strip())
- # 3. Status indicator at the bottom stating which project is being thought on
+ # 3. Status indicator at the bottom stating which model is being used
if not final:
if is_fa:
- bottom_parts.append(f"💭 در حال تفکر روی پروژه {escape_html(curr_proj.name)}... ▌")
+ bottom_parts.append(f"💭 در حال تفکر با مدل {escape_html(model_display)}... ▌")
else:
- bottom_parts.append(f"💭 Thinking on project {escape_html(curr_proj.name)}... ▌")
+ bottom_parts.append(f"💭 Thinking with model {escape_html(model_display)}... ▌")
if raw_text.strip():
formatted_body = markdown_to_telegram_html(raw_text)
@@ -6536,7 +6544,7 @@ async def process_agent_turn(
if bottom_parts:
full_html = proj_header + "\n\n" + "\n\n".join(bottom_parts)
else:
- thinking_msg = f"💭 در حال تفکر روی پروژه {escape_html(curr_proj.name)}... ▌" if is_fa else f"💭 Thinking on project {escape_html(curr_proj.name)}... ▌"
+ thinking_msg = f"💭 در حال تفکر با مدل {escape_html(model_display)}... ▌" if is_fa else f"💭 Thinking with model {escape_html(model_display)}... ▌"
full_html = proj_header + "\n\n" + thinking_msg
if len(full_html) > settings.max_message_length:
diff --git a/telegram-agy-bot/formatters.py b/telegram-agy-bot/formatters.py
index 841a5b3..0745414 100644
--- a/telegram-agy-bot/formatters.py
+++ b/telegram-agy-bot/formatters.py
@@ -33,6 +33,40 @@ def format_duration_compact(seconds: float) -> str:
return f"{m}:{s:02d}"
+def get_model_display_name(model: Optional[str] = None, effort: Optional[str] = None) -> str:
+ """Returns a clean user-friendly display name for the model and reasoning effort."""
+ if not model:
+ return "Gemini 3.7 Flash Auto"
+
+ m_clean = model.lower().strip()
+ eff_clean = (effort or "").lower().strip()
+
+ if "flash-auto" in m_clean or m_clean == "gemini-3.7-flash-auto":
+ if eff_clean == "high":
+ return "Gemini 3.7 Flash Auto [High]"
+ elif eff_clean == "medium":
+ return "Gemini 3.7 Flash Auto [Med]"
+ elif eff_clean == "low":
+ return "Gemini 3.7 Flash Auto [Low]"
+ return "Gemini 3.7 Flash Auto"
+ elif "flash-high" in m_clean:
+ return "Gemini 3.7 Flash [High]"
+ elif "3.7-flash" in m_clean:
+ return f"Gemini 3.7 Flash [{eff_clean.capitalize()}]" if eff_clean else "Gemini 3.7 Flash"
+ elif "3.6-flash" in m_clean:
+ return f"Gemini 3.6 Flash [{eff_clean.capitalize()}]" if eff_clean else "Gemini 3.6 Flash"
+ elif "3.1-pro" in m_clean or "pro" in m_clean:
+ return f"Gemini 3.1 Pro [{eff_clean.capitalize()}]" if eff_clean else "Gemini 3.1 Pro"
+ elif "opus" in m_clean:
+ return "Claude Opus 4.6 Thinking"
+ elif "sonnet" in m_clean or "claude" in m_clean:
+ return "Claude Sonnet 4.6 Thinking"
+ elif "gpt" in m_clean:
+ return "GPT-120B"
+ else:
+ return model
+
+
def format_context_stats(
usage: Optional[Dict[str, Any]] = None,
duration: float = 0.0,
@@ -115,16 +149,22 @@ def format_context_stats(
def format_thought(
thought_text: str,
project_name: Optional[str] = None,
+ model_name: Optional[str] = None,
lang: str = "fa",
) -> str:
- """Formats model reasoning / thinking process with project context."""
+ """Formats model reasoning / thinking process with model context."""
if not thought_text.strip():
return ""
escaped = escape_html(thought_text.strip())
is_fa = (lang or "").lower() in ("fa", "farsi", "persian", "🇮🇷 persian / farsi (فارسی)")
- if project_name:
- proj_badge = escape_html(project_name)
- header = f"💭 تفکر و استدلال (پروژه: {proj_badge}):" if is_fa else f"💭 Reasoning / Thinking (Project: {proj_badge}):"
+
+ label = model_name or project_name
+ if label:
+ badge = escape_html(label)
+ if model_name:
+ header = f"💭 تفکر و استدلال (مدل: {badge}):" if is_fa else f"💭 Reasoning / Thinking (Model: {badge}):"
+ else:
+ header = f"💭 تفکر و استدلال ({badge}):" if is_fa else f"💭 Reasoning / Thinking ({badge}):"
else:
header = "💭 تفکر و استدلال:" if is_fa else "💭 Reasoning / Thinking:"
return f"
{header}\n{escaped}\n" diff --git a/telegram-agy-bot/sessions.json b/telegram-agy-bot/sessions.json index 42ab63e..77b8fef 100644 --- a/telegram-agy-bot/sessions.json +++ b/telegram-agy-bot/sessions.json @@ -52,9 +52,9 @@ "model": "gemini-3.7-flash-auto", "effort": "high", "language": "fa", - "last_context_length": 5323, - "last_total_tokens": 46412, - "last_response": "\u0645\u062a\u0646\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u0632\u0646\u062f\u0647 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u0645 \u062a\u0644\u06af\u0631\u0627\u0645 \u06cc\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0622\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c \u0634\u0627\u0645\u0644 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0634\u062e\u0635 \u0632\u06cc\u0631 \u062f\u0631 \u0633\u0648\u0631\u0633\u200c\u06a9\u062f \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0647\u0633\u062a\u0646\u062f:\n\n---\n\n### \u06f1. \u0645\u062a\u0646 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0646\u0634\u0627\u0646\u06af\u0631 \u0644\u0627\u06cc\u0648 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u0633\u062a\u0631\u06cc\u0645 (Live Status & Cursor)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6458-L6541)\n* **\u0645\u062a\u0646 \u0627\u0648\u0644\u06cc\u0647 (\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u067e\u0627\u0633\u062e):**\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647:
{curr_proj.name}\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 {curr_proj.name}...\n ```\n *(\u062e\u0637\u0648\u0637 \u06f6\u06f4\u06f5\u06f8 \u062a\u0627 \u06f6\u06f4\u06f6\u06f6 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6458-L6466))*\n\n* **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0644\u06cc\u062f \u067e\u0627\u0633\u062e (\u0632\u06cc\u0631 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0631\u06cc\u0645):**\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 {curr_proj.name}... \u258c\n ```\n *(\u062e\u0637\u0648\u0637 \u06f6\u06f5\u06f2\u06f3 \u0648 \u06f6\u06f5\u06f3\u06f9 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6523))*\n\n* **\u0646\u0634\u0627\u0646\u06af\u0631 \u0627\u062f\u0627\u0645\u0647 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0628\u0639\u062f\u06cc (\u062f\u0631 \u0635\u0648\u0631\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u0634\u062f\u0646 \u0645\u062a\u0646):**\n ```html\n ...\n (\u0627\u062f\u0627\u0645\u0647 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0628\u0639\u062f\u06cc...)\n ```\n *(\u062e\u0637 \u06f6\u06f5\u06f4\u06f7 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6547))*\n\n---\n\n### \u06f2. \u0628\u0627\u06a9\u0633 \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0645\u062f\u0644 (Thinking Blockquote)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L115-L130) (\u062a\u0627\u0628\u0639 `format_thought`)\n* **\u0645\u062a\u0646 \u062a\u06cc\u062a\u0631 \u0628\u0627\u06a9\u0633 \u062a\u0641\u06a9\u0631 \u062c\u0645\u0639\u200c\u0634\u0648\u0646\u062f\u0647:**\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u067e\u0631\u0648\u0698\u0647: {proj_badge}):\n ```\n\n---\n\n### \u06f3. \u0627\u0639\u0644\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0627\u0628\u0632\u0627\u0631\u0647\u0627 (Active Tool Calls)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L132-L180) (\u062a\u0627\u0628\u0639 `format_tool_call`)\n* **\u0645\u062a\u0646 \u0648 \u0628\u0631\u0686\u0633\u0628 \u0627\u0628\u0632\u0627\u0631\u0647\u0627:** \u0645\u062b\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0627\u0645 \u0627\u0628\u0632\u0627\u0631\u060c \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u06cc\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0634\u062f\u0647.\n\n---\n\n### \u06f4. \u0641\u0648\u062a\u0631 \u0622\u0645\u0627\u0631\u06cc \u067e\u0633 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u067e\u0627\u0633\u062e (Stats Footer)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L110-L113) (\u062a\u0627\u0628\u0639 `format_stats_footer`)\n* **\u0641\u0631\u0645\u062a \u062f\u0648 \u062e\u0637\u06cc \u0648\u0636\u0639\u06cc\u062a:**\n ```text\n [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647] [\u0646\u0627\u0645 \u0645\u062f\u0644]\n CL: [\u062f\u0631\u0635\u062f \u06a9\u0627\u0646\u062a\u06a9\u0633\u062a] T: [\u062a\u0639\u062f\u0627\u062f \u062a\u0648\u06a9\u0646] D: [\u0645\u062f\u062a \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627]\n ```\n\n---\n\n\u0627\u06af\u0631 \u0645\u062a\u0646 \u06cc\u0627 \u0639\u0628\u0627\u0631\u062a \u062e\u0627\u0635\u06cc \u0645\u062f\u0646\u0638\u0631\u062a\u0627\u0646 \u0627\u0633\u062a\u060c \u0628\u0641\u0631\u0645\u0627\u06cc\u06cc\u062f \u062a\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0622\u0646 \u0631\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u0631\u0648\u06cc \u0631\u0628\u0627\u062a \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u0645.\n",
+ "last_context_length": 22551,
+ "last_total_tokens": 188557,
+ "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0642\u062a \u062f\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647:\n1. **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u0631\u06cc\u0645 \u062a\u0641\u06a9\u0631 (Live Thinking Indicator):**\n - \u062f\u0631 \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6520-L6545)\u060c \u0639\u0628\u0627\u0631\u062a \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647]...\u00bb \u062d\u0630\u0641 \u0648 \u0628\u0647 \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 **[\u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644]**...\u00bb \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a:\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto... \u258c\n ```\n2. **\u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634:**\n - \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u062a\u0648\u06a9\u0646 \u067e\u0627\u0633\u062e\u060c \u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644 \u062f\u0631\u062c \u0634\u062f:\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647: \u0646\u0627\u0645_\u067e\u0631\u0648\u0698\u0647\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto...\n ```\n3. **\u0628\u0627\u06a9\u0633 \u0628\u0627\u0632\u0634\u0648\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 (Expandable Thought Blockquote):**\n - \u062f\u0631 \u062a\u0627\u0628\u0639 [`format_thought`](file:///root/telegram-agy-bot/formatters.py#L115-L135) \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py)\u060c \u062a\u06cc\u062a\u0631 \u062a\u0641\u06a9\u0631 \u0645\u062f\u0644 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f:\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u0645\u062f\u0644: Gemini 3.7 Flash Auto):\n ```\n4. **\u062a\u0627\u0628\u0639 \u062a\u0628\u062f\u06cc\u0644 \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u0646\u0627\u0645 \u0645\u062f\u0644\u200c\u0647\u0627 (`get_model_display_name`):**\n - \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0645\u06cc\u0632 \u0648 \u062e\u0648\u0627\u0646\u0627\u06cc \u0645\u062f\u0644\u200c\u0647\u0627 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0633\u0637\u062d Reasoning Effort \u0645\u0627\u0646\u0646\u062f `[High]`, `[Med]`)\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0645\u0627\u0698\u0648\u0644\u0627\u0631 \u0648 \u0628\u0647\u06cc\u0646\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f.\n\n\u0633\u0631\u0648\u06cc\u0633 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u062a\u06af \u0632\u06cc\u0631 \u067e\u0633 \u0627\u0632 \u062a\u062d\u0648\u06cc\u0644 \u067e\u06cc\u0627\u0645 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f.\n\n[[RESTART_BOT]]\n\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n",
"created_at": 1787995349.975879,
"description": ""
},
@@ -99,19 +99,19 @@
}
},
"turn_in_progress": false,
- "last_prompt": "\u0632\u0645\u0627\u0646 \u06a9\u0627\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc\n\u06cc\u06a9 \u0645\u062a\u0646 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u0645 \u0632\u0646\u062f\u0647 \u0645\u06cc\u0646\u0648\u06cc\u0633\u06cc\n\u0627\u0648\u0646 \u0686\u06cc\u0633\u062a \u0628\u0647\u0645 \u0628\u06af\u0648 \u06a9\u0647 \u0645\u06cc\u062e\u0648\u0627\u0645 \u0648\u06cc\u0631\u0627\u06cc\u0634\u0634 \u06a9\u0646\u0645",
- "last_response": "\u0645\u062a\u0646\u200c\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0632\u0645\u0627\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u0632\u0646\u062f\u0647 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062f\u0631 \u0632\u06cc\u0631 \u067e\u06cc\u0627\u0645 \u062a\u0644\u06af\u0631\u0627\u0645 \u06cc\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0622\u0646 \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f\u060c \u0634\u0627\u0645\u0644 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0634\u062e\u0635 \u0632\u06cc\u0631 \u062f\u0631 \u0633\u0648\u0631\u0633\u200c\u06a9\u062f \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0647\u0633\u062a\u0646\u062f:\n\n---\n\n### \u06f1. \u0645\u062a\u0646 \u0648\u0636\u0639\u06cc\u062a \u0648 \u0646\u0634\u0627\u0646\u06af\u0631 \u0644\u0627\u06cc\u0648 \u062f\u0631 \u0632\u0645\u0627\u0646 \u0627\u0633\u062a\u0631\u06cc\u0645 (Live Status & Cursor)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6458-L6541)\n* **\u0645\u062a\u0646 \u0627\u0648\u0644\u06cc\u0647 (\u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639 \u067e\u0627\u0633\u062e):**\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647: {curr_proj.name}\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 {curr_proj.name}...\n ```\n *(\u062e\u0637\u0648\u0637 \u06f6\u06f4\u06f5\u06f8 \u062a\u0627 \u06f6\u06f4\u06f6\u06f6 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6458-L6466))*\n\n* **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 \u062f\u0631 \u062d\u06cc\u0646 \u062a\u0648\u0644\u06cc\u062f \u067e\u0627\u0633\u062e (\u0632\u06cc\u0631 \u0645\u062a\u0646 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0633\u062a\u0631\u06cc\u0645):**\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 {curr_proj.name}... \u258c\n ```\n *(\u062e\u0637\u0648\u0637 \u06f6\u06f5\u06f2\u06f3 \u0648 \u06f6\u06f5\u06f3\u06f9 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6523))*\n\n* **\u0646\u0634\u0627\u0646\u06af\u0631 \u0627\u062f\u0627\u0645\u0647 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0628\u0639\u062f\u06cc (\u062f\u0631 \u0635\u0648\u0631\u062a \u0637\u0648\u0644\u0627\u0646\u06cc \u0634\u062f\u0646 \u0645\u062a\u0646):**\n ```html\n ...\n (\u0627\u062f\u0627\u0645\u0647 \u062f\u0631 \u067e\u06cc\u0627\u0645 \u0628\u0639\u062f\u06cc...)\n ```\n *(\u062e\u0637 \u06f6\u06f5\u06f4\u06f7 \u0641\u0627\u06cc\u0644 [`bot.py`](file:///root/telegram-agy-bot/bot.py#L6547))*\n\n---\n\n### \u06f2. \u0628\u0627\u06a9\u0633 \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 \u0645\u062f\u0644 (Thinking Blockquote)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L115-L130) (\u062a\u0627\u0628\u0639 `format_thought`)\n* **\u0645\u062a\u0646 \u062a\u06cc\u062a\u0631 \u0628\u0627\u06a9\u0633 \u062a\u0641\u06a9\u0631 \u062c\u0645\u0639\u200c\u0634\u0648\u0646\u062f\u0647:**\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u067e\u0631\u0648\u0698\u0647: {proj_badge}):\n ```\n\n---\n\n### \u06f3. \u0627\u0639\u0644\u0627\u0646 \u0627\u062c\u0631\u0627\u06cc \u0627\u0628\u0632\u0627\u0631\u0647\u0627 (Active Tool Calls)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L132-L180) (\u062a\u0627\u0628\u0639 `format_tool_call`)\n* **\u0645\u062a\u0646 \u0648 \u0628\u0631\u0686\u0633\u0628 \u0627\u0628\u0632\u0627\u0631\u0647\u0627:** \u0645\u062b\u0644 \u0646\u0645\u0627\u06cc\u0634 \u0646\u0627\u0645 \u0627\u0628\u0632\u0627\u0631\u060c \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u06cc\u0627 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc \u0648\u06cc\u0631\u0627\u06cc\u0634\u200c\u0634\u062f\u0647.\n\n---\n\n### \u06f4. \u0641\u0648\u062a\u0631 \u0622\u0645\u0627\u0631\u06cc \u067e\u0633 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u067e\u0627\u0633\u062e (Stats Footer)\n* **\u0645\u0633\u06cc\u0631 \u0641\u0627\u06cc\u0644:** [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py#L110-L113) (\u062a\u0627\u0628\u0639 `format_stats_footer`)\n* **\u0641\u0631\u0645\u062a \u062f\u0648 \u062e\u0637\u06cc \u0648\u0636\u0639\u06cc\u062a:**\n ```text\n [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647] [\u0646\u0627\u0645 \u0645\u062f\u0644]\n CL: [\u062f\u0631\u0635\u062f \u06a9\u0627\u0646\u062a\u06a9\u0633\u062a] T: [\u062a\u0639\u062f\u0627\u062f \u062a\u0648\u06a9\u0646] D: [\u0645\u062f\u062a \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627]\n ```\n\n---\n\n\u0627\u06af\u0631 \u0645\u062a\u0646 \u06cc\u0627 \u0639\u0628\u0627\u0631\u062a \u062e\u0627\u0635\u06cc \u0645\u062f\u0646\u0638\u0631\u062a\u0627\u0646 \u0627\u0633\u062a\u060c \u0628\u0641\u0631\u0645\u0627\u06cc\u06cc\u062f \u062a\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0622\u0646 \u0631\u0627 \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u0631\u0648\u06cc \u0631\u0628\u0627\u062a \u0627\u0639\u0645\u0627\u0644 \u06a9\u0646\u0645.\n",
+ "last_prompt": "\u062e\u0628 \u0631\u0648\u06cc \u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 \u0627\u0633\u0645 \u067e\u0631\u0648\u0698\u0647 \u0631\u0648 \u0646\u0646\u0648\u06cc\u0633 \u0648 \u0628\u0647 \u062c\u0627\u0634 \u0628\u06af\u0648 \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0638\u0631 \u062f\u0627\u0631\u0647 \u0627\u0632 \u0686\u0647 \u0645\u062f\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u06a9\u0646\u0647\n\u0627\u06cc\u0646 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0686\u0646\u062f \u062c\u0627 \u0628\u0627\u0634\u062f",
+ "last_response": "\u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0634\u0645\u0627 \u0628\u0627 \u062f\u0642\u062a \u062f\u0631 \u062a\u0645\u0627\u0645 \u0628\u062e\u0634\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637\u0647 \u0627\u0639\u0645\u0627\u0644 \u0634\u062f:\n\n### \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a \u0627\u0646\u062c\u0627\u0645 \u0634\u062f\u0647:\n1. **\u0646\u0634\u0627\u0646\u06af\u0631 \u0632\u0646\u062f\u0647 \u0627\u0633\u062a\u0631\u06cc\u0645 \u062a\u0641\u06a9\u0631 (Live Thinking Indicator):**\n - \u062f\u0631 \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/bot.py`](file:///root/telegram-agy-bot/bot.py#L6520-L6545)\u060c \u0639\u0628\u0627\u0631\u062a \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0631\u0648\u06cc \u067e\u0631\u0648\u0698\u0647 [\u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647]...\u00bb \u062d\u0630\u0641 \u0648 \u0628\u0647 \u00ab\u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 **[\u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644]**...\u00bb \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a:\n ```html\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto... \u258c\n ```\n2. **\u067e\u06cc\u0627\u0645 \u0627\u0648\u0644\u06cc\u0647 \u0634\u0631\u0648\u0639 \u067e\u0631\u062f\u0627\u0632\u0634:**\n - \u062f\u0631 \u0648\u0636\u0639\u06cc\u062a \u0627\u0648\u0644\u06cc\u0647 \u067e\u06cc\u0627\u0645 \u0642\u0628\u0644 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u0627\u0648\u0644\u06cc\u0646 \u062a\u0648\u06a9\u0646 \u067e\u0627\u0633\u062e\u060c \u0646\u0627\u0645 \u0645\u062f\u0644 \u0641\u0639\u0627\u0644 \u062f\u0631\u062c \u0634\u062f:\n ```html\n \ud83d\udcc1 \u067e\u0631\u0648\u0698\u0647: \u0646\u0627\u0645_\u067e\u0631\u0648\u0698\u0647\n\n \ud83d\udcad \u062f\u0631 \u062d\u0627\u0644 \u062a\u0641\u06a9\u0631 \u0628\u0627 \u0645\u062f\u0644 Gemini 3.7 Flash Auto...\n ```\n3. **\u0628\u0627\u06a9\u0633 \u0628\u0627\u0632\u0634\u0648\u0646\u062f\u0647 \u062a\u0641\u06a9\u0631 (Expandable Thought Blockquote):**\n - \u062f\u0631 \u062a\u0627\u0628\u0639 [`format_thought`](file:///root/telegram-agy-bot/formatters.py#L115-L135) \u0641\u0627\u06cc\u0644 [`/root/telegram-agy-bot/formatters.py`](file:///root/telegram-agy-bot/formatters.py)\u060c \u062a\u06cc\u062a\u0631 \u062a\u0641\u06a9\u0631 \u0645\u062f\u0644 \u0628\u0647 \u0635\u0648\u0631\u062a \u0632\u06cc\u0631 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0634\u062f:\n ```html\n \ud83d\udcad \u062a\u0641\u06a9\u0631 \u0648 \u0627\u0633\u062a\u062f\u0644\u0627\u0644 (\u0645\u062f\u0644: Gemini 3.7 Flash Auto):\n ```\n4. **\u062a\u0627\u0628\u0639 \u062a\u0628\u062f\u06cc\u0644 \u0648 \u0627\u0633\u062a\u0627\u0646\u062f\u0627\u0631\u062f\u0633\u0627\u0632\u06cc \u0646\u0627\u0645 \u0645\u062f\u0644\u200c\u0647\u0627 (`get_model_display_name`):**\n - \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u062a\u0645\u06cc\u0632 \u0648 \u062e\u0648\u0627\u0646\u0627\u06cc \u0645\u062f\u0644\u200c\u0647\u0627 (\u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0633\u0637\u062d Reasoning Effort \u0645\u0627\u0646\u0646\u062f `[High]`, `[Med]`)\u060c \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0645\u0627\u0698\u0648\u0644\u0627\u0631 \u0648 \u0628\u0647\u06cc\u0646\u0647 \u0628\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0631\u0645\u062a\u200c\u062f\u0647\u06cc \u0627\u0641\u0632\u0648\u062f\u0647 \u0634\u062f.\n\n\u0633\u0631\u0648\u06cc\u0633 \u0631\u0628\u0627\u062a \u062a\u0644\u06af\u0631\u0627\u0645 \u0628\u0647 \u0635\u0648\u0631\u062a \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0627 \u062a\u06af \u0632\u06cc\u0631 \u067e\u0633 \u0627\u0632 \u062a\u062d\u0648\u06cc\u0644 \u067e\u06cc\u0627\u0645 \u0631\u06cc\u200c\u0627\u0633\u062a\u0627\u0631\u062a \u0648 \u0641\u0639\u0627\u0644 \u0645\u06cc\u200c\u0634\u0648\u062f.\n\n[[RESTART_BOT]]\n\n\u2022 \u0646\u0627\u0645 \u067e\u0631\u0648\u0698\u0647: default\n\u2022 \u0622\u062f\u0631\u0633 \u0645\u062e\u0632\u0646: https://git.msa.artacloud.ir/root/default\n",
"last_status_msg_id": null,
"restart_pending": false,
"last_delivered": true,
- "last_update_time": 1788081424.6915243,
+ "last_update_time": 1788081635.6170475,
"workspace": "/root",
"conversation_id": "b07a79ef-8da0-4688-b71a-86c8629803f5",
"model": "gemini-3.7-flash-auto",
"effort": "high",
"language": "fa",
- "last_context_length": 5323,
- "last_total_tokens": 46412
+ "last_context_length": 22551,
+ "last_total_tokens": 188557
},
"232801087": {
"chat_id": 232801087,