integrate fast solver into pipeline: run_pipeline.py now fully automated
- solve_task.py: add fetch_todo_tasks(), _parse_todo_tasks(), run_all() - run_all() auto-fetches all todo tasks from BroJS and solves each one - run_pipeline.py: rewrite to just call run_all() from solve_task - supports: python run_pipeline.py (auto), run_pipeline.py <id...> (targeted) - TARGET_IDS list for hardcoded targets without CLI args - no deepagents imports = no double MCP load on startup Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+22
-58
@@ -1,70 +1,34 @@
|
||||
"""Запуск пайплайна для выполнения заданий курса."""
|
||||
"""Запуск пайплайна для автоматического выполнения заданий курса.
|
||||
|
||||
Использование:
|
||||
python run_pipeline.py # решить все todo-задания автоматически
|
||||
python run_pipeline.py <id1> <id2> # решить конкретные задания по ID
|
||||
"""
|
||||
import asyncio
|
||||
import os
|
||||
import traceback
|
||||
import sys
|
||||
|
||||
os.environ["PYTHONIOENCODING"] = "utf-8"
|
||||
# Обходим локальный прокси для OpenRouter (иначе SSL-ошибка)
|
||||
os.environ["NO_PROXY"] = "openrouter.ai,platform.brojs.ru,git.brojs.ru," + os.environ.get("NO_PROXY", "")
|
||||
os.environ["PYTHONUNBUFFERED"] = "1"
|
||||
os.environ["NO_PROXY"] = (
|
||||
"openrouter.ai,platform.brojs.ru,git.brojs.ru,"
|
||||
+ os.environ.get("NO_PROXY", "")
|
||||
)
|
||||
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
from src.agent.graph.pipeline import pipeline, TaskInfo, process_one_task, route, PipelineState
|
||||
|
||||
# Целевые задания (None = все todo-задания автоматически)
|
||||
TARGET_IDS = [
|
||||
"6a1864f78a94f887e50d46da", # Экзамен: RAG-агент с ChromaDB и веб-поиском
|
||||
]
|
||||
from solve_task import run_all
|
||||
|
||||
# Задания из командной строки или жёстко заданный список.
|
||||
# Оставь пустым [] — тогда агент сам возьмёт все todo-задания с BroJS.
|
||||
TARGET_IDS: list[str] = []
|
||||
|
||||
async def main():
|
||||
print("=== Запуск пайплайна BroJS ===")
|
||||
# Командная строка имеет приоритет над TARGET_IDS
|
||||
cli_ids = sys.argv[1:] if len(sys.argv) > 1 else None
|
||||
ids = cli_ids or TARGET_IDS or None # None = автоматически все todo
|
||||
await run_all(target_ids=ids)
|
||||
|
||||
if TARGET_IDS:
|
||||
tasks = [TaskInfo(id=tid, title="", status="todo") for tid in TARGET_IDS]
|
||||
print(f"Целевые задания: {TARGET_IDS}")
|
||||
initial_state = {
|
||||
"tasks": tasks,
|
||||
"current_index": 0,
|
||||
"results": [],
|
||||
"errors": [],
|
||||
}
|
||||
from langgraph.graph import StateGraph, START
|
||||
builder = StateGraph(PipelineState)
|
||||
builder.add_node("process_one_task", process_one_task)
|
||||
builder.add_edge(START, "process_one_task")
|
||||
builder.add_conditional_edges(
|
||||
"process_one_task", route,
|
||||
{"process_one_task": "process_one_task", "__end__": "__end__"}
|
||||
)
|
||||
targeted_pipeline = builder.compile()
|
||||
try:
|
||||
result = await targeted_pipeline.ainvoke(
|
||||
initial_state,
|
||||
{"configurable": {"thread_id": "pipeline-targeted"}},
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"КРИТИЧЕСКАЯ ОШИБКА: {e}")
|
||||
traceback.print_exc()
|
||||
return
|
||||
else:
|
||||
try:
|
||||
result = await pipeline.ainvoke(
|
||||
{"tasks": [], "current_index": 0, "results": [], "errors": []},
|
||||
{"configurable": {"thread_id": "pipeline-main"}},
|
||||
)
|
||||
except Exception as e:
|
||||
print(f"КРИТИЧЕСКАЯ ОШИБКА: {e}")
|
||||
traceback.print_exc()
|
||||
return
|
||||
|
||||
print("\n=== Результат пайплайна ===")
|
||||
for r in result.get("results", []):
|
||||
print(f" Task {r['task_id'][:8]}: {r['status']} (mode={r['mode']}, retries={r['retries']})")
|
||||
for e in result.get("errors", []):
|
||||
print(f" ОШИБКА: {e}")
|
||||
print("=== Готово ===")
|
||||
|
||||
|
||||
asyncio.run(main())
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
|
||||
Reference in New Issue
Block a user