Files
agentSber/run_universal.py
T

105 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import asyncio, sys, time
sys.path.insert(0, '.')
print("[1/3] Импортируем агента (MCP init ~20-60с)...")
from langchain_core.messages import HumanMessage
from src.agent.agent import homework_direct_agent
from src.agent.graph.pipeline import _invoke_with_retry, _get_journal_tool, _parse_text
print("[2/3] Агент готов, запускаем задание...")
TASK_ID = "6a1855055db1b0a5ea224b8b"
OWNER = "KirillKutlakhmetov"
REPO = f"task-{TASK_ID}"
URL = f"https://git.brojs.ru/{OWNER}/{REPO}"
def _was_submitted(msgs: list) -> bool:
for m in msgs:
for tc in getattr(m, "tool_calls", []):
if "task_submit" in tc.get("name", ""):
return True
return False
async def _force_submit(task_id: str):
update = _get_journal_tool("task_update_answer")
submit = _get_journal_tool("task_submit")
if not update or not submit:
print("[!] journal-инструменты недоступны")
return
for attempt in range(1, 6):
try:
print(f"[AUTO] task_update_answer (попытка {attempt})")
r1 = await update.ainvoke({"taskId": task_id, "answerType": "link", "content": URL})
print(f"[AUTO] update: {_parse_text(r1)[:120]}")
await asyncio.sleep(3)
print(f"[AUTO] task_submit")
r2 = await submit.ainvoke({"taskId": task_id, "confirmSubmit": True})
print(f"[AUTO] submit: {_parse_text(r2)[:120]}")
return
except BaseException as e:
full = repr(e)
if hasattr(e, 'exceptions'):
full += " ".join(repr(sub) for sub in e.exceptions)
if "429" in full and attempt < 5:
print(f"[AUTO] Rate limit, жду 70с...")
await asyncio.sleep(70)
else:
raise
async def main():
prompt = f"""Выполни задание из курса BroJS.
taskId: {TASK_ID}
owner: {OWNER}
repo: {REPO}
ШАГ 1. Прочитай задание полностью:
mcp__journal-bh-professor__task_text(taskId='{TASK_ID}')
ШАГ 2. Создай репозиторий:
gitea_create_repo(name='{REPO}')
ШАГ 3. Напиши и загрузи все нужные файлы через gitea_write_file.
- Пиши полный рабочий код, без заглушек и TODO
- Минимум 4 файла: main.py, requirements.txt, README.md + модули по заданию
- Читай файлы репозитория только через gitea_get_file, не read_file
ШАГ 4. Отправь ответ:
mcp__journal-bh-professor__task_update_answer(
taskId='{TASK_ID}',
answerType='link',
content='{URL}'
)
ШАГ 5. Сдай задание (ОБЯЗАТЕЛЬНО):
mcp__journal-bh-professor__task_submit(
taskId='{TASK_ID}',
confirmSubmit=True
)"""
config = {"configurable": {"thread_id": f"hw-{TASK_ID}-{int(time.time())}"}}
print(f"[3/3] Агент работает...")
result = await _invoke_with_retry(
homework_direct_agent,
{"messages": [HumanMessage(content=prompt)]},
config,
)
print("[ГОТОВО] Агент завершил работу.")
msgs = result.get("messages", [])
print(f"[{len(msgs)} сообщений]")
for i, m in enumerate(msgs):
role = type(m).__name__
tcs = getattr(m, "tool_calls", [])
content_str = str(getattr(m, "content", ""))
if tcs:
for tc in tcs:
print(f" [{i}] {role} -> {tc['name']}({str(tc.get('args',''))[:120]})")
elif content_str.strip():
print(f" [{i}] {role}: {content_str[:200]}")
if not _was_submitted(msgs):
print("\n[!] Агент не вызвал task_submit — сдаю автоматически...")
await _force_submit(TASK_ID)
else:
print("\n[OK] Задание сдано агентом самостоятельно.")
asyncio.run(main())