SYMBOL INDEX (822 symbols across 119 files) FILE: .github/scripts/check_pr_title.py class CheckResult (line 36) | class CheckResult: method to_markdown (line 41) | def to_markdown(self) -> str: function check_pr_title (line 48) | def check_pr_title(title: str) -> CheckResult: function main (line 87) | def main() -> None: FILE: config/__init__.py function load_config (line 13) | def load_config(config_path: str, *overrides) -> omegaconf.DictConfig: FILE: config/prompts/base_agent_prompt.py class BaseAgentPrompt (line 7) | class BaseAgentPrompt(ABC): method __init__ (line 15) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 19) | def generate_system_prompt_with_mcp_tools( method generate_summarize_prompt (line 41) | def generate_summarize_prompt( method expose_agent_as_tool (line 66) | def expose_agent_as_tool(self, subagent_name: str, **kwargs) -> dict: FILE: config/prompts/main_agent_prompt_deepseek.py class MainAgentPromptBoxedDeepSeek (line 5) | class MainAgentPromptBoxedDeepSeek: method __init__ (line 10) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 14) | def generate_system_prompt_with_mcp_tools(self, mcp_servers: list[Any]... method generate_summarize_prompt (line 81) | def generate_summarize_prompt( FILE: config/prompts/main_agent_prompt_gaia.py class MainAgentPrompt_GAIA (line 6) | class MainAgentPrompt_GAIA(BaseAgentPrompt): method __init__ (line 12) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 16) | def generate_system_prompt_with_mcp_tools(self, mcp_servers: list[Any]... method generate_summarize_prompt (line 116) | def generate_summarize_prompt( FILE: config/prompts/main_boxed_answer.py class MainAgentPromptBoxedAnswer (line 6) | class MainAgentPromptBoxedAnswer(BaseAgentPrompt): method __init__ (line 12) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 16) | def generate_system_prompt_with_mcp_tools(self, mcp_servers: list[Any]... method generate_summarize_prompt (line 116) | def generate_summarize_prompt( FILE: config/prompts/sub_worker.py class SubAgentWorkerPrompt (line 6) | class SubAgentWorkerPrompt(BaseAgentPrompt): method __init__ (line 12) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 16) | def generate_system_prompt_with_mcp_tools(self, mcp_servers: list[Any]... method generate_summarize_prompt (line 140) | def generate_summarize_prompt( method expose_agent_as_tool (line 179) | def expose_agent_as_tool(self, subagent_name: str) -> dict: class SubAgentWorkerPromptDeepSeek (line 200) | class SubAgentWorkerPromptDeepSeek(SubAgentWorkerPrompt): method __init__ (line 201) | def __init__(self, *args, **kwargs): method generate_system_prompt_with_mcp_tools (line 205) | def generate_system_prompt_with_mcp_tools(self, mcp_servers: list[Any]... FILE: miroflow/agents/base.py class BaseAgent (line 25) | class BaseAgent(ABC): method __init_subclass__ (line 31) | def __init_subclass__(cls, **kwargs): method get_instance_count (line 35) | def get_instance_count(cls): method get_instance_name (line 39) | def get_instance_name(cls, cfg): method create_sub_module (line 45) | def create_sub_module(self, sub_agent_cfg: DictConfig | dict, name: st... method __init__ (line 59) | def __init__(self, cfg: Optional[DictConfig | dict] = None, parent=None): method _parse_tool_blacklist (line 82) | def _parse_tool_blacklist(self, blacklist_cfg) -> set: method run_internal (line 107) | async def run_internal(self, ctx: AgentContext) -> AgentContext: method run (line 111) | async def run(self, ctx: AgentContext) -> AgentContext: method run_as_mcp_tool (line 116) | async def run_as_mcp_tool( method post_initialize (line 131) | async def post_initialize(self): method get_mcp_server_definitions_from_tool_definitions (line 135) | def get_mcp_server_definitions_from_tool_definitions( method init_tool_definitions (line 153) | async def init_tool_definitions(self): method run_sub_agents_as_mcp_tools (line 205) | async def run_sub_agents_as_mcp_tools( method build (line 228) | def build(cls, cfg: DictConfig | dict): method __repr__ (line 232) | def __repr__(self): FILE: miroflow/agents/context.py class AgentContext (line 10) | class AgentContext(dict): method __init__ (line 18) | def __init__(self, **kwargs): FILE: miroflow/agents/factory.py function build_agent_from_config (line 26) | def build_agent_from_config(cfg: Union[DictConfig, dict]) -> BaseAgent: function build_agent (line 35) | def build_agent(cfg: Union[DictConfig, dict], sequential: bool = False) ... FILE: miroflow/agents/iterative_agent_with_rollback.py class IterativeAgentWithToolAndRollback (line 50) | class IterativeAgentWithToolAndRollback(BaseAgent): method __init__ (line 53) | def __init__(self, cfg: DictConfig): method _get_query_key (line 75) | def _get_query_key(tool_call: dict) -> str: method _check_duplicate_tool_calls (line 82) | def _check_duplicate_tool_calls( method _should_rollback (line 99) | def _should_rollback( method run_internal (line 149) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/agents/sequential_agent.py class SequentialAgent (line 17) | class SequentialAgent(BaseAgent): method __init__ (line 20) | def __init__( method run_internal (line 51) | async def run_internal( method __repr__ (line 59) | def __repr__(self): FILE: miroflow/benchmark/calculate_average_score.py function detect_pass_at_k (line 14) | def detect_pass_at_k(results_dir: str) -> tuple: function calculate_average_scores (line 48) | def calculate_average_scores(results_dir: str) -> dict: function print_results (line 93) | def print_results(stats: dict): function main (line 110) | def main(results_dir: str): FILE: miroflow/benchmark/eval_utils.py function is_valid_box (line 61) | def is_valid_box(final_boxed_answer: str) -> bool: class Task (line 74) | class Task: method to_dict (line 83) | def to_dict(self) -> Dict[str, Any]: method from_dict (line 94) | def from_dict(cls, data: Dict[str, Any]) -> "Task": class AttemptResult (line 105) | class AttemptResult: method __init__ (line 108) | def __init__( method to_dict (line 140) | def to_dict(self) -> Dict[str, Any]: method from_dict (line 159) | def from_dict(cls, data: Dict[str, Any], task: Task) -> "AttemptResult": method update_from_response (line 177) | def update_from_response(self, response: Dict[str, Any], log_path: Path): method update_with_evaluation (line 186) | async def update_with_evaluation( method update_log_with_evaluation (line 196) | async def update_log_with_evaluation( class TaskResult (line 224) | class TaskResult: method __init__ (line 227) | def __init__(self, task: Task): method to_dict (line 240) | def to_dict(self) -> Dict[str, Any]: method update_with_attempt (line 269) | def update_with_attempt(self, attempt_result: AttemptResult): method from_dict (line 285) | def from_dict(cls, data: Dict[str, Any]) -> "TaskResult": class Evaluator (line 315) | class Evaluator: method __init__ (line 318) | def __init__(self, cfg: DictConfig, parse_func: Optional[TaskParser] =... method load_tasks (line 335) | def load_tasks(self) -> List[Task]: method _validate_load_requirements (line 347) | def _validate_load_requirements(self) -> None: method _download_gaia_val (line 361) | def _download_gaia_val(self) -> None: method _should_include_task (line 409) | def _should_include_task(self, task: Task) -> bool: method _parse_tasks_from_file (line 414) | def _parse_tasks_from_file(self) -> List[Task]: method _apply_task_limit (line 427) | def _apply_task_limit(self, tasks: List[Task]) -> List[Task]: method save_results (line 435) | def save_results(self, results: List["TaskResult"], output_path: Path)... method evaluate_accuracy (line 444) | async def evaluate_accuracy(self, results: List["TaskResult"]) -> float: method _print_task_result (line 464) | def _print_task_result(self, result: TaskResult) -> None: method _print_attempt_details (line 478) | def _print_attempt_details(self, attempt: AttemptResult) -> None: method _get_status_icon (line 487) | def _get_status_icon(is_correct: bool, judge_result: str) -> str: method _print_accuracy_summary (line 493) | def _print_accuracy_summary( method verify_attempt_result (line 501) | async def verify_attempt_result( function get_verifier (line 546) | def get_verifier( function verify_answer_for_benchmark (line 583) | async def verify_answer_for_benchmark( FILE: miroflow/benchmark/run_benchmark.py function _main_signal_handler (line 29) | def _main_signal_handler(signum, frame): function test_benchmark (line 42) | async def test_benchmark(cfg: DictConfig) -> float: FILE: miroflow/benchmark/task_runner.py function _set_pdeathsig (line 45) | def _set_pdeathsig(): function _cleanup_executor (line 61) | def _cleanup_executor(): function _signal_handler (line 102) | def _signal_handler(signum, frame): function _worker_signal_handler (line 121) | def _worker_signal_handler(signum, frame): function _worker_initializer (line 126) | def _worker_initializer(): function _task_worker (line 136) | def _task_worker(task_dict, cfg_dict, pass_at_k, max_retry, exceed_max_t... function _build_exceed_max_turn_summary_text (line 206) | def _build_exceed_max_turn_summary_text( function run_single_retry (line 245) | async def run_single_retry( function run_single_task (line 338) | async def run_single_task( function run_tasks (line 443) | def run_tasks( FILE: miroflow/benchmark/verifiers/base_verifier.py class BaseVerifier (line 35) | class BaseVerifier: method __init__ (line 38) | def __init__(self, openai_client: Optional[AsyncOpenAI] = None): method verify (line 41) | async def verify( FILE: miroflow/benchmark/verifiers/browsecomp_en_verifier.py class BrowseCompEnVerifier (line 101) | class BrowseCompEnVerifier(BaseVerifier): method verify (line 114) | async def verify( FILE: miroflow/benchmark/verifiers/browsecomp_zh_verifier.py class BrowseCompZhVerifier (line 102) | class BrowseCompZhVerifier(BaseVerifier): method verify (line 115) | async def verify( FILE: miroflow/benchmark/verifiers/finsearchcomp_verifier.py class FinSearchCompVerifier (line 24) | class FinSearchCompVerifier(BaseVerifier): method verify (line 33) | async def verify( method _parse_response (line 77) | def _parse_response(content: str) -> str: FILE: miroflow/benchmark/verifiers/gaia_common_verifier.py class GAIACommonVerifier (line 24) | class GAIACommonVerifier(BaseVerifier): method _normalize_number_str (line 39) | def _normalize_number_str(number_str: str) -> float: method _normalize_str (line 49) | def _normalize_str(input_str: str, remove_punct: bool = True) -> str: method _is_float (line 58) | def _is_float(element: Any) -> bool: method _split_string (line 67) | def _split_string(s: str, char_list: List[str] = None) -> List[str]: method _compare_as_number (line 74) | def _compare_as_number(self, model_answer: str, ground_truth: str) -> ... method _compare_as_list (line 78) | def _compare_as_list(self, model_answer: str, ground_truth: str) -> bool: method _compare_as_string (line 100) | def _compare_as_string(self, model_answer: str, ground_truth: str) -> ... method _exact_match (line 104) | def _exact_match(self, model_answer: str, ground_truth: str) -> bool: method verify (line 119) | async def verify( FILE: miroflow/benchmark/verifiers/gaia_verifier.py class GAIAVerifier (line 15) | class GAIAVerifier(BaseVerifier): method verify (line 18) | async def verify( method _normalize_number_str (line 34) | def _normalize_number_str(number_str: str) -> float: method _split_string (line 45) | def _split_string(s: str, char_list: List[str] = None) -> List[str]: method _normalize_str (line 53) | def _normalize_str(input_str: str, remove_punct: bool = True) -> str: method _is_float (line 62) | def _is_float(element: Any) -> bool: method _compare_as_number (line 70) | def _compare_as_number(self, model_answer: str, ground_truth: str) -> ... method _compare_as_list (line 75) | def _compare_as_list(self, model_answer: str, ground_truth: str) -> bool: method _compare_as_string (line 100) | def _compare_as_string(self, model_answer: str, ground_truth: str) -> ... method _score_answer (line 105) | def _score_answer(self, model_answer: str, ground_truth: str) -> bool: FILE: miroflow/benchmark/verifiers/hle_verifier.py class HLEVerifier (line 22) | class HLEVerifier(BaseVerifier): class ExtractedAnswer (line 45) | class ExtractedAnswer(BaseModel): method verify (line 57) | async def verify( FILE: miroflow/benchmark/verifiers/simpleqa_verifier.py class SimpleQAVerifier (line 24) | class SimpleQAVerifier(BaseVerifier): method _normalize_number_str (line 109) | def _normalize_number_str(number_str: str) -> float: method _normalize_str (line 119) | def _normalize_str(input_str: str, remove_punct: bool = True) -> str: method _is_float (line 128) | def _is_float(element: Any) -> bool: method _split_string (line 137) | def _split_string(s: str, char_list: List[str] = None) -> List[str]: method _compare_as_number (line 144) | def _compare_as_number(self, model_answer: str, ground_truth: str) -> ... method _compare_as_list (line 148) | def _compare_as_list(self, model_answer: str, ground_truth: str) -> bool: method _compare_as_string (line 170) | def _compare_as_string(self, model_answer: str, ground_truth: str) -> ... method _exact_match (line 174) | def _exact_match(self, model_answer: str, ground_truth: str) -> bool: method verify (line 189) | async def verify( FILE: miroflow/benchmark/verifiers/xbench_verifier.py class XBenchVerifier (line 23) | class XBenchVerifier(BaseVerifier): method _parse_match_result (line 50) | def _parse_match_result(match): method verify (line 64) | async def verify( FILE: miroflow/io_processor/base.py class BaseIOProcessor (line 15) | class BaseIOProcessor(BaseAgent): FILE: miroflow/io_processor/exceed_max_turn_summary_generator.py class ExceedMaxTurnSummaryGenerator (line 35) | class ExceedMaxTurnSummaryGenerator(BaseIOProcessor): method _extract_failure_experience_summary (line 44) | def _extract_failure_experience_summary(text: str) -> str: method run_internal (line 78) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/file_content_preprocessor.py class FileContentPreprocessor (line 21) | class FileContentPreprocessor(BaseIOProcessor): method run_internal (line 35) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/final_answer_extractor.py class FinalAnswerExtractor (line 19) | class FinalAnswerExtractor(BaseIOProcessor): method _extract_boxed_content (line 25) | def _extract_boxed_content(text: str) -> str: method _format_final_summary_and_log (line 75) | def _format_final_summary_and_log(extracted_answer): method run_internal (line 99) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/input_hint_generator.py class InputHintGenerator (line 15) | class InputHintGenerator(BaseIOProcessor): method run_internal (line 20) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/input_message_generator.py class InputMessageGenerator (line 19) | class InputMessageGenerator(BaseIOProcessor): method run_internal (line 24) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/regex_boxed_extractor.py class RegexBoxedExtractor (line 20) | class RegexBoxedExtractor(BaseIOProcessor): method _extract_boxed_content (line 24) | def _extract_boxed_content(text: str) -> str: method _extract_boxed_from_message_history (line 67) | def _extract_boxed_from_message_history(message_history: list) -> str: method run_internal (line 91) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/io_processor/summary_generator.py class SummaryGenerator (line 16) | class SummaryGenerator(BaseIOProcessor): method run_internal (line 21) | async def run_internal(self, ctx: AgentContext) -> AgentContext: FILE: miroflow/llm/base.py class ContextLimitError (line 30) | class ContextLimitError(Exception): class LLMOutput (line 37) | class LLMOutput(ABC): class LLMClientBase (line 46) | class LLMClientBase(ABC): method __init__ (line 49) | def __init__(self, cfg: DictConfig): method _create_client (line 82) | def _create_client(self, config: DictConfig) -> Any: method _create_message (line 87) | async def _create_message( method process_llm_response (line 98) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 115) | def extract_tool_calls_info( method _strip_think_from_messages (line 121) | def _strip_think_from_messages(self, messages: List[Dict]) -> List[Dict]: method _remove_tool_result_from_messages (line 131) | def _remove_tool_result_from_messages( method create_message (line 200) | async def create_message( method convert_tool_definition_to_tool_call (line 249) | async def convert_tool_definition_to_tool_call(tools_definitions): method close (line 269) | def close(self): method _format_response_for_log (line 287) | def _format_response_for_log(self, response) -> Dict: method update_message_history (line 345) | def update_message_history( method handle_max_turns_reached_summary_prompt (line 354) | def handle_max_turns_reached_summary_prompt( method _inject_message_ids (line 359) | def _inject_message_ids(self, message_history: list[dict]) -> None: method _estimate_tokens (line 380) | def _estimate_tokens(self, text: str) -> int: method ensure_summary_context (line 384) | def ensure_summary_context( method __repr__ (line 448) | def __repr__(self): FILE: miroflow/llm/claude_anthropic.py class ClaudeAnthropicClient (line 22) | class ClaudeAnthropicClient(LLMClientBase): method __post_init__ (line 23) | def __post_init__(self): method _create_client (line 26) | def _create_client(self, config: DictConfig): method _create_message (line 42) | async def _create_message( method process_llm_response (line 107) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 146) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method update_message_history (line 153) | def update_message_history( method handle_max_turns_reached_summary_prompt (line 171) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... method _apply_cache_control (line 183) | def _apply_cache_control(self, messages): FILE: miroflow/llm/claude_openrouter.py class ClaudeOpenRouterClient (line 24) | class ClaudeOpenRouterClient(LLMClientBase): method _create_client (line 25) | def _create_client(self, config: DictConfig): method _create_message (line 45) | async def _create_message( method _create_completion (line 205) | async def _create_completion(self, params: Dict[str, Any], is_async: b... method _clean_user_content_from_response (line 212) | def _clean_user_content_from_response(self, text: str) -> str: method process_llm_response (line 220) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 264) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method update_message_history (line 271) | def update_message_history( method parse_llm_response (line 332) | def parse_llm_response(self, llm_response) -> str: method _estimate_tokens (line 338) | def _estimate_tokens(self, text: str) -> int: method handle_max_turns_reached_summary_prompt (line 354) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... method _apply_cache_control (line 366) | def _apply_cache_control(self, messages): FILE: miroflow/llm/factory.py function build_llm_client (line 17) | def build_llm_client( FILE: miroflow/llm/gpt5_openai.py class GPT5OpenAIClient (line 26) | class GPT5OpenAIClient(LLMClientBase): method _create_client (line 27) | def _create_client(self, config: DictConfig): method _create_message (line 47) | async def _create_message( method _create_completion_with_service_tier_fallback (line 208) | async def _create_completion_with_service_tier_fallback( method _clean_user_content_from_response (line 241) | def _clean_user_content_from_response(self, text: str) -> str: method process_llm_response (line 249) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 301) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method get_user_msg_from_tool_call (line 308) | def get_user_msg_from_tool_call(self, tool_call_info, tool_calls_excee... method update_message_history (line 357) | def update_message_history( method parse_llm_response (line 418) | def parse_llm_response(self, llm_response) -> str: method _estimate_tokens (line 424) | def _estimate_tokens(self, text: str) -> int: method handle_max_turns_reached_summary_prompt (line 440) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... method _apply_cache_control (line 452) | def _apply_cache_control(self, messages): FILE: miroflow/llm/gpt_openai.py class GPTOpenAIClient (line 24) | class GPTOpenAIClient(LLMClientBase): method __init__ (line 25) | def __init__(self, cfg: DictConfig): method _create_client (line 29) | def _create_client(self, config: DictConfig): method _create_message (line 45) | async def _create_message( method _create_completion (line 149) | async def _create_completion(self, params: Dict[str, Any], is_async: b... method _handle_oai_tool_thinking (line 156) | async def _handle_oai_tool_thinking( method process_llm_response (line 182) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 247) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method update_message_history (line 259) | def update_message_history( method handle_max_turns_reached_summary_prompt (line 275) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... FILE: miroflow/llm/mirothinker_sglang.py class MiroThinkerSGLangClient (line 26) | class MiroThinkerSGLangClient(LLMClientBase): method __post_init__ (line 27) | def __post_init__(self): method _create_client (line 30) | def _create_client(self, config: DictConfig): method _create_message (line 55) | async def _create_message( method _create_completion (line 237) | async def _create_completion(self, params: Dict[str, Any], is_async: b... method _clean_user_content_from_response (line 252) | def _clean_user_content_from_response(self, text: str) -> str: method process_llm_response (line 260) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 312) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method get_user_msg_from_tool_call (line 319) | def get_user_msg_from_tool_call(self, tool_call_info, tool_calls_excee... method update_message_history (line 369) | def update_message_history( method parse_llm_response (line 430) | def parse_llm_response(self, llm_response) -> str: method _estimate_tokens (line 436) | def _estimate_tokens(self, text: str) -> int: method handle_max_turns_reached_summary_prompt (line 452) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... FILE: miroflow/llm/openai_client.py class UnifiedOpenAIClient (line 30) | class UnifiedOpenAIClient(LLMClientBase): method __init__ (line 47) | def __init__(self, cfg: DictConfig): method _create_client (line 58) | def _create_client(self, config: DictConfig): method _create_message (line 81) | async def _create_message( method _decide_tool_mode (line 158) | def _decide_tool_mode(self, tools_definitions) -> str: method _is_oai_new_model (line 177) | def _is_oai_new_model(self) -> bool: method _inject_system_prompt (line 188) | def _inject_system_prompt( method _build_messages (line 210) | def _build_messages( method _build_params (line 234) | def _build_params( method _create_completion (line 278) | async def _create_completion(self, params: Dict[str, Any], is_async: b... method _handle_oai_tool_thinking (line 284) | async def _handle_oai_tool_thinking( method _validate_response_or_raise (line 319) | def _validate_response_or_raise(self, response, params: Dict[str, Any]... method _maybe_raise_context_limit (line 340) | def _maybe_raise_context_limit(self, e: Exception) -> None: method _clean_user_content_from_response (line 357) | def _clean_user_content_from_response(self, text: str) -> str: method process_llm_response (line 365) | def process_llm_response(self, llm_response) -> Tuple[str, bool, dict]: method extract_tool_calls_info (line 435) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method update_message_history (line 461) | def update_message_history( method parse_llm_response (line 543) | def parse_llm_response(self, llm_response) -> str: method _estimate_tokens (line 548) | def _estimate_tokens(self, text: str) -> int: method handle_max_turns_reached_summary_prompt (line 561) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... method _apply_cache_control (line 572) | def _apply_cache_control(self, messages): FILE: miroflow/llm/openrouter.py class OpenRouterClient (line 41) | class OpenRouterClient(LLMClientBase): method __init__ (line 42) | def __init__(self, cfg: DictConfig): method _create_client (line 54) | def _create_client(self, config: DictConfig): method _create_message (line 74) | async def _create_message( method _create_completion (line 248) | async def _create_completion(self, params: Dict[str, Any], is_async: b... method _clean_user_content_from_response (line 255) | def _clean_user_content_from_response(self, text: str) -> str: method process_llm_response (line 263) | def process_llm_response(self, llm_response) -> tuple[str, bool, dict]: method extract_tool_calls_info (line 344) | def extract_tool_calls_info(self, llm_response, assistant_response_text): method update_message_history (line 358) | def update_message_history( method get_user_msg_from_tool_call (line 419) | def get_user_msg_from_tool_call(self, tool_call_info, tool_calls_excee... method parse_llm_response (line 473) | def parse_llm_response(self, llm_response) -> str: method _estimate_tokens (line 479) | def _estimate_tokens(self, text: str) -> int: method handle_max_turns_reached_summary_prompt (line 495) | def handle_max_turns_reached_summary_prompt(self, message_history, sum... method _apply_cache_control (line 507) | def _apply_cache_control(self, messages): FILE: miroflow/llm/util.py function with_timeout (line 12) | def with_timeout( FILE: miroflow/logging/decorators.py function _default_span_name (line 24) | def _default_span_name(func: Callable[..., Any], args: tuple[Any, ...]) ... function span (line 31) | def span( function span_decorator (line 166) | def span_decorator(*args, **kwargs): FILE: miroflow/logging/span.py function new_id (line 13) | def new_id(prefix: str = "") -> str: class Span (line 19) | class Span: method end (line 33) | def end(self) -> None: method duration_ms (line 37) | def duration_ms(self) -> Optional[int]: FILE: miroflow/logging/task_tracer.py function utc_iso (line 24) | def utc_iso(ts: Optional[float] = None) -> str: function _ensure_jsonable (line 31) | def _ensure_jsonable(x: Any) -> Any: class TaskContextVar (line 49) | class TaskContextVar: method __repr__ (line 54) | def __repr__(self) -> str: function set_current_task_context_var (line 66) | def set_current_task_context_var(task_context_var: TaskContextVar): function reset_current_task_context_var (line 70) | def reset_current_task_context_var(token): function get_current_task_context_var (line 74) | def get_current_task_context_var() -> TaskContextVar: class TaskMeta (line 83) | class TaskMeta(BaseModel): class AgentStateEntry (line 110) | class AgentStateEntry(BaseModel): class TaskLogFile (line 115) | class TaskLogFile(BaseModel): class TaskTracer (line 129) | class TaskTracer: method __init__ (line 134) | def __init__(self, log_path: str | Path = "./logs"): method set_log_path (line 153) | def set_log_path(self, log_path: Path | str) -> None: method _get_context_key (line 160) | def _get_context_key(self) -> str: method _get_or_create_log (line 165) | def _get_or_create_log(self, key: str) -> TaskLogFile: method _flush_to_disk (line 174) | def _flush_to_disk(self, key: str, log_obj: TaskLogFile): method flush (line 196) | def flush(self): method start (line 219) | def start(self) -> None: method finish (line 230) | def finish( method update_task_meta (line 263) | def update_task_meta(self, patch: Dict[str, Any]) -> None: method save_agent_states (line 273) | def save_agent_states(self, node_name: str, states: Dict[str, Any]) ->... method set_current_span (line 283) | def set_current_span(self, current_span: Span) -> None: method append_step_event (line 295) | def append_step_event(self, event: Dict[str, Any]) -> None: method log (line 314) | def log( method debug (line 340) | def debug(self, msg: str, **kwargs) -> None: method info (line 343) | def info(self, msg: str, **kwargs) -> None: method warning (line 346) | def warning(self, msg: str, **kwargs) -> None: method error (line 349) | def error(self, msg: str, **kwargs) -> None: function set_tracer (line 361) | def set_tracer(log_path: Path): function get_tracer (line 370) | def get_tracer() -> TaskTracer: FILE: miroflow/logging/tool_logging.py function _find_available_port (line 7) | def _find_available_port( function _extract_port_from_address (line 23) | def _extract_port_from_address(addr: str) -> int: FILE: miroflow/registry.py class ComponentType (line 29) | class ComponentType(str, Enum): function _lazy_import_modules (line 62) | def _lazy_import_modules(component_type: ComponentType): function register (line 87) | def register(component_type: ComponentType, name: str) -> Callable[[Type... function get_registered_components (line 110) | def get_registered_components(component_type: ComponentType) -> Dict[str... function get_component_class (line 116) | def get_component_class(component_type: ComponentType, name: str) -> Type: function register_module (line 131) | def register_module(name: str) -> Callable[[Type], Type]: function get_registered_modules (line 160) | def get_registered_modules() -> Dict[str, Type]: function safe_get_module_class (line 171) | def safe_get_module_class(cls_name: str) -> Type: FILE: miroflow/skill/manager.py class SkillMeta (line 13) | class SkillMeta: class SkillError (line 21) | class SkillError(Exception): function _parse_frontmatter (line 28) | def _parse_frontmatter(md_text: str) -> Tuple[Dict[str, Any], str]: class SkillManager (line 89) | class SkillManager: method __init__ (line 90) | def __init__( method get_all_skills_definitions (line 106) | def get_all_skills_definitions(self) -> List[SkillMeta]: method discover (line 133) | def discover(self) -> Dict[str, SkillMeta]: method list (line 170) | def list(self) -> List[SkillMeta]: method get (line 173) | def get(self, skill_id: str) -> SkillMeta: method load (line 178) | def load(self, skill_id: str) -> str: method execute_skill_command (line 195) | def execute_skill_command(self, skill_id: str, run_command: str) -> Di... method execute_skill_calls_batch (line 198) | async def execute_skill_calls_batch( FILE: miroflow/tool/factory.py function get_mcp_server_configs_from_tool_cfg_paths (line 18) | def get_mcp_server_configs_from_tool_cfg_paths( FILE: miroflow/tool/manager.py function update_server_params_with_context_var (line 31) | def update_server_params_with_context_var( function with_timeout (line 45) | def with_timeout(timeout_s: float = 300.0): class ToolManager (line 65) | class ToolManager: method __init__ (line 66) | def __init__( method _is_huggingface_dataset_or_space_url (line 94) | def _is_huggingface_dataset_or_space_url(self, url): method _should_block_hf_scraping (line 104) | def _should_block_hf_scraping(self, tool_name, arguments): method get_server_params (line 117) | def get_server_params(self, server_name): method _find_servers_with_tool (line 121) | async def _find_servers_with_tool(self, tool_name): method get_all_tool_definitions (line 182) | async def get_all_tool_definitions(self) -> list[dict]: method execute_tool_call (line 267) | async def execute_tool_call(self, server_name, tool_name, arguments) -... method execute_tool_calls_batch (line 531) | async def execute_tool_calls_batch( method format_tool_results (line 572) | def format_tool_results(self, results): FILE: miroflow/tool/mcp_servers/audio_mcp_server.py function _get_audio_extension (line 32) | def _get_audio_extension(url: str, content_type: str = None) -> str: function _get_audio_duration (line 73) | def _get_audio_duration(audio_path: str) -> float: function _encode_audio_file (line 105) | def _encode_audio_file(audio_path: str) -> tuple[str, str]: function audio_transcription (line 130) | async def audio_transcription(audio_path_or_url: str) -> str: function audio_question_answering (line 201) | async def audio_question_answering(audio_path_or_url: str, question: str... FILE: miroflow/tool/mcp_servers/audio_mcp_server_os.py function _get_audio_extension (line 37) | def _get_audio_extension(url: str, content_type: str = None) -> str: function _get_audio_duration (line 78) | def _get_audio_duration(audio_path: str) -> float: function _encode_audio_file (line 110) | def _encode_audio_file(audio_path: str) -> tuple[str, str]: function audio_transcription (line 135) | async def audio_transcription(audio_path_or_url: str) -> str: FILE: miroflow/tool/mcp_servers/browser_session.py class PlaywrightSession (line 14) | class PlaywrightSession: method __init__ (line 17) | def __init__(self, server_params): method connect (line 24) | async def connect(self): method call_tool (line 37) | async def call_tool(self, tool_name, arguments=None): method close (line 47) | async def close(self): function test_persistent_session (line 62) | async def test_persistent_session(): FILE: miroflow/tool/mcp_servers/code_sandbox.py function looks_like_dir (line 66) | def looks_like_dir(path: str) -> bool: function truncate_result (line 79) | def truncate_result(result: str) -> str: function create_sandbox (line 95) | async def create_sandbox(timeout: int = DEFAULT_TIMEOUT) -> str: function run_command (line 135) | async def run_command(command: str, sandbox_id: str) -> str: function run_python_code (line 181) | async def run_python_code(code_block: str, sandbox_id: str) -> str: function upload_file_from_local_to_sandbox (line 220) | async def upload_file_from_local_to_sandbox( function download_file_from_internet_to_sandbox (line 280) | async def download_file_from_internet_to_sandbox( function download_file_from_sandbox_to_local (line 368) | async def download_file_from_sandbox_to_local( FILE: miroflow/tool/mcp_servers/jina_scrape.py function scrape_and_extract_info (line 29) | async def scrape_and_extract_info( function _is_huggingface_dataset_or_space_url (line 123) | def _is_huggingface_dataset_or_space_url(url): function scrape_url_with_jina (line 134) | async def scrape_url_with_jina( function scrape_url_with_python (line 372) | async def scrape_url_with_python( function get_prompt_with_truncation (line 578) | def get_prompt_with_truncation( function extract_info_with_llm (line 589) | async def extract_info_with_llm( FILE: miroflow/tool/mcp_servers/miroapi_serper_mcp_server.py function make_serper_request (line 49) | def make_serper_request( function _is_huggingface_dataset_or_space_url (line 58) | def _is_huggingface_dataset_or_space_url(url): function google_search (line 70) | def google_search( FILE: miroflow/tool/mcp_servers/reading_mcp_server.py function read_file (line 24) | async def read_file(uri: str) -> str: FILE: miroflow/tool/mcp_servers/reasoning_mcp_server.py function reasoning (line 27) | async def reasoning(question: str) -> str: FILE: miroflow/tool/mcp_servers/reasoning_mcp_server_os.py function post_with_retry (line 38) | def post_with_retry(url, json, headers): function reasoning (line 68) | async def reasoning(question: str) -> str: FILE: miroflow/tool/mcp_servers/scrape_website_v1.py function smart_split_content (line 100) | def smart_split_content(text: str, chunk_size: int, overlap: int) -> Lis... function _is_huggingface_dataset_or_space_url (line 148) | def _is_huggingface_dataset_or_space_url(url: str) -> bool: function check_content_quality (line 155) | def check_content_quality(text: str) -> Dict[str, Any]: function get_content_score (line 183) | def get_content_score(res: Dict[str, Any], query: str = "") -> int: function get_prompt_with_truncation (line 281) | def get_prompt_with_truncation( function scrape_url_with_jina (line 299) | async def scrape_url_with_jina( function scrape_url_with_firecrawl (line 489) | async def scrape_url_with_firecrawl( function scrape_url_with_playwright (line 606) | async def scrape_url_with_playwright( function scrape_url_with_python (line 703) | async def scrape_url_with_python( function call_robust_llm (line 754) | async def call_robust_llm( function scrape_and_extract_info (line 889) | async def scrape_and_extract_info( FILE: miroflow/tool/mcp_servers/searching_mcp_server.py function filter_google_search_result (line 43) | def filter_google_search_result(result_content: str) -> str: function google_search (line 87) | async def google_search( function wiki_get_page_content (line 174) | async def wiki_get_page_content(entity: str, first_sentences: int = 10) ... function search_wiki_revision (line 283) | async def search_wiki_revision( function search_archived_webpage (line 447) | async def search_archived_webpage(url: str, year: int, month: int, day: ... function scrape_website (line 679) | async def scrape_website(url: str) -> str: FILE: miroflow/tool/mcp_servers/serper_search.py function make_serper_request (line 50) | async def make_serper_request( function _is_huggingface_dataset_or_space_url (line 64) | def _is_huggingface_dataset_or_space_url(url): function google_search (line 76) | async def google_search( FILE: miroflow/tool/mcp_servers/serper_sogou_search.py function _get_sogou_semaphore (line 46) | def _get_sogou_semaphore() -> asyncio.Semaphore: function _contains_chinese (line 58) | def _contains_chinese(text: str) -> bool: function _normalize_url (line 63) | def _normalize_url(url: str) -> str: function _clean_sogou_query (line 76) | def _clean_sogou_query(query: str) -> str: function _dedup_and_interleave (line 83) | def _dedup_and_interleave(serper_results: list, sogou_results: list) -> ... function make_serper_request (line 108) | async def make_serper_request( function _is_huggingface_dataset_or_space_url (line 122) | def _is_huggingface_dataset_or_space_url(url): function _sogou_search_sync (line 133) | def _sogou_search_sync(query: str, num_results: int = 10) -> list: function _sogou_search_async (line 194) | async def _sogou_search_async(query: str, num_results: int = 10) -> list: function _serper_search (line 204) | async def _serper_search( function google_search (line 266) | async def google_search( FILE: miroflow/tool/mcp_servers/utils/smart_request.py function request_to_json (line 18) | def request_to_json(content: str) -> dict: function smart_request (line 25) | async def smart_request(url: str, params: dict = None, env: dict = None)... function scrape_jina (line 108) | async def scrape_jina( function scrape_serper (line 156) | async def scrape_serper(url: str, serper_api_key: str) -> tuple[str, str]: function scrape_request (line 187) | def scrape_request(url: str) -> tuple[str, str]: FILE: miroflow/tool/mcp_servers/utils/url_unquote.py function safe_unquote (line 45) | def safe_unquote(url: str) -> str: function decode_http_urls_in_dict (line 105) | def decode_http_urls_in_dict(data): function strip_markdown_links (line 129) | def strip_markdown_links(markdown: str) -> str: FILE: miroflow/tool/mcp_servers/vision_mcp_server.py function detect_image_format (line 38) | async def detect_image_format(file_path: str) -> str: function guess_mime_media_type_from_extension (line 56) | async def guess_mime_media_type_from_extension(file_path: str) -> str: function call_claude_vision (line 72) | async def call_claude_vision(image_path_or_url: str, question: str) -> str: function call_openai_vision (line 147) | async def call_openai_vision(image_path_or_url: str, question: str) -> str: function call_gemini_vision (line 196) | async def call_gemini_vision(image_path_or_url: str, question: str) -> str: function visual_question_answering (line 285) | async def visual_question_answering(image_path_or_url: str, question: st... function visual_audio_youtube_analyzing (line 355) | async def visual_audio_youtube_analyzing( FILE: miroflow/tool/mcp_servers/vision_mcp_server_os.py function guess_mime_media_type_from_extension (line 30) | def guess_mime_media_type_from_extension(file_path: str) -> str: function visual_question_answering (line 45) | async def visual_question_answering(image_path_or_url: str, question: st... FILE: miroflow/utils/file_content_utils.py function _generate_image_caption (line 52) | def _generate_image_caption( function _generate_audio_caption (line 125) | def _generate_audio_caption( function _generate_video_caption (line 165) | def _generate_video_caption( function _extract_task_relevant_info_from_image (line 238) | def _extract_task_relevant_info_from_image( function _extract_task_relevant_info_from_audio (line 317) | def _extract_task_relevant_info_from_audio( function _extract_task_relevant_info_from_video (line 398) | def _extract_task_relevant_info_from_video( class _CustomMarkdownify (line 477) | class _CustomMarkdownify(markdownify.MarkdownConverter): method __init__ (line 487) | def __init__(self, **options: Any): method convert_hn (line 491) | def convert_hn(self, n: int, el: Any, text: str, convert_as_inline: bo... method convert_a (line 499) | def convert_a(self, el: Any, text: str, convert_as_inline: bool): method convert_img (line 541) | def convert_img(self, el: Any, text: str, convert_as_inline: bool) -> ... method convert_soup (line 560) | def convert_soup(self, soup: Any) -> str: class DocumentConverterResult (line 564) | class DocumentConverterResult: method __init__ (line 567) | def __init__(self, title: Union[str, None] = None, text_content: str =... function _convert_html_to_md (line 572) | def _convert_html_to_md(html_content: str) -> DocumentConverterResult: function _html_converter (line 602) | def _html_converter(local_path: str) -> DocumentConverterResult: function _docx_converter (line 617) | def _docx_converter(local_path: str) -> DocumentConverterResult: function _xlsx_converter (line 636) | def _xlsx_converter(local_path: str) -> DocumentConverterResult: function _pptx_converter (line 881) | def _pptx_converter(local_path: str) -> DocumentConverterResult: function _zip_converter (line 980) | def _zip_converter( function process_file_content (line 1146) | def process_file_content( FILE: miroflow/utils/io_utils.py function get_file_type (line 12) | def get_file_type(file_name: str) -> str: function process_input (line 34) | def process_input(task_description, task_file_name): class OutputFormatter (line 89) | class OutputFormatter: method _extract_boxed_content (line 90) | def _extract_boxed_content(self, text: str) -> str: method format_final_summary_and_log (line 139) | def format_final_summary_and_log(self, final_answer_text, client=None): FILE: miroflow/utils/parsing_utils.py function _smart_json_truncate (line 15) | def _smart_json_truncate(json_str): function _fix_unterminated_string_values (line 65) | def _fix_unterminated_string_values(json_str): function preprocess_json_string (line 159) | def preprocess_json_string(json_str): function robust_json_loads (line 185) | def robust_json_loads(json_str, apply_preprocessing=True): function escape_string_content (line 220) | def escape_string_content(content, key_name=None): function fix_python_syntax (line 287) | def fix_python_syntax(content): function fix_shell_syntax (line 306) | def fix_shell_syntax(content): function fix_json_syntax (line 324) | def fix_json_syntax(content): function parse_escaped_json_string (line 337) | def parse_escaped_json_string(raw_str): function _try_direct_parse (line 382) | def _try_direct_parse(raw_str): function _try_line_start_pattern (line 391) | def _try_line_start_pattern(raw_str): function _try_negative_lookbehind_pattern (line 396) | def _try_negative_lookbehind_pattern(raw_str): function _try_legacy_method (line 401) | def _try_legacy_method(raw_str): function _try_parse_with_pattern (line 411) | def _try_parse_with_pattern(raw_str, pattern): function _find_value_end_position (line 482) | def _find_value_end_position(raw_str, start_pos, search_limit): function _legacy_escape_method (line 496) | def _legacy_escape_method(raw_str): function _escape_for_json (line 546) | def _escape_for_json(value: str) -> str: function _conservative_escape_fallback (line 556) | def _conservative_escape_fallback(raw_str): function parse_llm_response_for_tool_calls (line 581) | def parse_llm_response_for_tool_calls(llm_response_content_text): function main (line 802) | def main(): FILE: miroflow/utils/prepare_benchmark/common.py class Task (line 11) | class Task: method to_json (line 20) | def to_json(self) -> bytes: method from_json (line 24) | def from_json(cls, b: bytes): FILE: miroflow/utils/prepare_benchmark/gen_browsecomp.py function derive_key (line 20) | def derive_key(password: str, length: int) -> bytes: function decrypt (line 28) | def decrypt(ciphertext_b64: str, password: str) -> str: function gen_browsecomp_test (line 36) | def gen_browsecomp_test(hf_token: str) -> Generator[Task, None, None]: function gen_browsecomp_zh_test (line 58) | def gen_browsecomp_zh_test(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_finsearchcomp.py function gen_finsearchcomp (line 12) | def gen_finsearchcomp(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_frames.py function gen_frames_test (line 12) | def gen_frames_test(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_futurex.py function gen_futurex (line 12) | def gen_futurex(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_gaia.py function download_file (line 15) | def download_file(hf_token: str, file_path: str, data_dir: str, task_id:... function gen_gaia_validation (line 60) | def gen_gaia_validation(hf_token: str, data_dir: str) -> Generator[Task,... FILE: miroflow/utils/prepare_benchmark/gen_gaia_text_only.py function gen_gaia_text_only (line 17) | def gen_gaia_text_only() -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_hle.py function save_image (line 15) | def save_image(image, data_dir: str, task_id: str) -> str: function gen_hle_test (line 68) | def gen_hle_test(hf_token: str, data_dir: str) -> Generator[Task, None, ... FILE: miroflow/utils/prepare_benchmark/gen_hle_text_only.py function gen_hle_text_only (line 14) | def gen_hle_text_only(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_webwalkerqa.py function gen_webwalkerqa (line 12) | def gen_webwalkerqa(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/gen_xbench_ds.py function xor_decrypt (line 13) | def xor_decrypt(data, key): function gen_xbench_ds (line 22) | def gen_xbench_ds(hf_token: str) -> Generator[Task, None, None]: FILE: miroflow/utils/prepare_benchmark/main.py class _Env (line 27) | class _Env: method from_dotenv (line 46) | def from_dotenv(cls): function _prepare_filesystem (line 57) | def _prepare_filesystem(env: _Env): function _prepare_dataset (line 65) | def _prepare_dataset(env: _Env, dataset: str): function rm (line 143) | def rm(): function ls (line 155) | def ls(): function get (line 171) | def get(dataset: str): FILE: miroflow/utils/prompt_utils.py class PromptManager (line 5) | class PromptManager: method __init__ (line 6) | def __init__(self, config_path: str = None): method from_config (line 23) | def from_config(cls, cfg, instance=None): method _validate_required_context (line 40) | def _validate_required_context( method _render_components (line 51) | def _render_components( method render_prompt (line 76) | def render_prompt(self, prompt_name: str, context: dict) -> str: method render_prompt_component (line 88) | def render_prompt_component( FILE: miroflow/utils/summary_utils.py function _generate_message_id (line 13) | def _generate_message_id() -> str: function _reraise_with_log (line 19) | def _reraise_with_log(retry_state): function extract_hints (line 34) | async def extract_hints( function get_gaia_answer_type (line 91) | async def get_gaia_answer_type(task_description: str, llm_client: LLMCli... function extract_gaia_final_answer (line 128) | async def extract_gaia_final_answer( function extract_browsecomp_zh_final_answer (line 440) | async def extract_browsecomp_zh_final_answer( # TODO Gaia is implemente... FILE: miroflow/utils/tool_utils.py function _load_agent_prompt_class (line 12) | def _load_agent_prompt_class(prompt_class_name: str): function expose_sub_agents_as_tools (line 50) | def expose_sub_agents_as_tools(sub_agent_names): function format_tool_result (line 84) | def format_tool_result(tool_call_execution_result): FILE: scripts/benchmark/check_progress/check_progress_browsecomp-en-200.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_browsecomp-en.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_browsecomp-zh.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 390) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 396) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 487) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 501) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 644) | def main(): FILE: scripts/benchmark/check_progress/check_progress_frames-test.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_gaia-validation-165.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_gaia-validation-text-103.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_hle-text-only.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_hle.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_webwalkerqa.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/benchmark/check_progress/check_progress_xbench-ds.py function create_progress_bar (line 42) | def create_progress_bar(percentage: float, width: int = PROGRESS_BAR_WID... function parse_task_filename (line 60) | def parse_task_filename(filename: str) -> Optional[Tuple[str, int, int]]: function parse_timestamp (line 73) | def parse_timestamp(time_str: str) -> Optional[datetime]: function format_duration (line 86) | def format_duration(minutes: float) -> str: class RetryResult (line 99) | class RetryResult: class AttemptResult (line 113) | class AttemptResult: class TaskResult (line 125) | class TaskResult: class RunStats (line 143) | class RunStats: method accuracy (line 184) | def accuracy(self) -> float: method avg_turns (line 188) | def avg_turns(self) -> float: function find_task_files (line 196) | def find_task_files(log_folder: Path) -> Dict[str, Dict[str, List[Path]]]: function load_task_meta_fast (line 225) | def load_task_meta_fast(file_path: Path) -> Optional[Dict[str, Any]]: function count_turns_fast (line 275) | def count_turns_fast(file_path: Path) -> int: function analyze_task_attempts (line 297) | def analyze_task_attempts(task_id: str, attempt_files: List[Path]) -> Ta... function _analyze_task_wrapper (line 389) | def _analyze_task_wrapper(args: Tuple[str, List[Path]]) -> TaskResult: function analyze_run (line 395) | def analyze_run(task_files: Dict[str, List[Path]], parallel: bool = True... function display_run_summary (line 486) | def display_run_summary(run_id: str, stats: RunStats) -> None: function display_overall_summary (line 499) | def display_overall_summary(all_results: Dict[str, RunStats], num_runs: ... function main (line 642) | def main(): FILE: scripts/run_single_task.py function parse_task_from_json (line 28) | def parse_task_from_json(x: str) -> Task: function test_single_task (line 40) | def test_single_task(cfg: DictConfig, task: Task): function main (line 120) | def main(): FILE: web_app/api/dependencies.py function get_config (line 16) | def get_config() -> AppConfig: function get_session_manager (line 21) | def get_session_manager() -> SessionManager: function get_task_executor (line 29) | def get_task_executor() -> TaskExecutor: function init_dependencies (line 37) | def init_dependencies() -> None: FILE: web_app/api/routes/configs.py function list_configs (line 17) | async def list_configs( FILE: web_app/api/routes/health.py function health_check (line 13) | async def health_check() -> dict[str, str]: FILE: web_app/api/routes/tasks.py function create_task (line 27) | async def create_task( function list_tasks (line 76) | async def list_tasks( function get_task (line 92) | async def get_task( function get_task_status (line 113) | async def get_task_status( function delete_task (line 160) | async def delete_task( FILE: web_app/api/routes/uploads.py function upload_file (line 37) | async def upload_file( FILE: web_app/core/config.py class AppConfig (line 13) | class AppConfig: method __post_init__ (line 68) | def __post_init__(self): FILE: web_app/core/session_manager.py class SessionManager (line 17) | class SessionManager: method __init__ (line 20) | def __init__(self, sessions_dir: Path): method _get_session_path (line 25) | def _get_session_path(self, task_id: str) -> Path: method _read_session (line 29) | def _read_session(self, task_id: str) -> dict[str, Any] | None: method _write_session (line 38) | def _write_session(self, task_id: str, data: dict[str, Any]) -> None: method create_task (line 47) | def create_task( method get_task (line 77) | def get_task(self, task_id: str) -> TaskResponse | None: method list_tasks (line 84) | def list_tasks( method update_task (line 107) | def update_task(self, task_id: str, updates: dict[str, Any]) -> TaskRe... method delete_task (line 118) | def delete_task(self, task_id: str) -> bool: method task_exists (line 127) | def task_exists(self, task_id: str) -> bool: FILE: web_app/core/task_executor.py class TaskExecutor (line 24) | class TaskExecutor: method __init__ (line 27) | def __init__(self, config: AppConfig, session_manager: SessionManager): method submit_task (line 34) | def submit_task( method _run_task_sync (line 50) | def _run_task_sync( method _run_task (line 60) | async def _run_task( method _get_all_messages_from_tracer (line 172) | def _get_all_messages_from_tracer(self, tracer: Any) -> list[dict]: method get_task_progress (line 190) | def get_task_progress(self, task_id: str) -> dict[str, Any]: method _format_recent_logs (line 239) | def _format_recent_logs(self, logs: list[dict]) -> list[dict]: method _format_messages (line 305) | def _format_messages(self, messages: list[dict]) -> list[dict]: method _truncate_output (line 350) | def _truncate_output(self, output: Any) -> Any: method cancel_task (line 358) | def cancel_task(self, task_id: str) -> bool: method is_task_running (line 371) | def is_task_running(self, task_id: str) -> bool: FILE: web_app/frontend/src/App.tsx function App (line 9) | function App() { type ParsedContent (line 528) | interface ParsedContent { function parseMessageContent (line 534) | function parseMessageContent(content: string): ParsedContent { function ThinkingSection (line 610) | function ThinkingSection({ content, defaultExpanded = false }: { content... function SummaryHeader (line 641) | function SummaryHeader() { function CompletedView (line 651) | function CompletedView({ function MessageBubble (line 763) | function MessageBubble({ role, content, isAnswer, fileInfo, isRunning }:... function SmartTextContent (line 822) | function SmartTextContent({ content }: { content: string }) { function ToolCallDisplay (line 922) | function ToolCallDisplay({ tool }: { tool: { name: string; args: string;... function LogItem (line 1103) | function LogItem({ log }: { log: Record }) { FILE: web_app/frontend/src/api/client.ts constant API_BASE_URL (line 3) | const API_BASE_URL = import.meta.env.VITE_API_URL || ''; FILE: web_app/frontend/src/api/tasks.ts function createTask (line 11) | async function createTask(data: TaskCreate): Promise { function listTasks (line 16) | async function listTasks(page = 1, pageSize = 20): Promise { function getTaskStatus (line 28) | async function getTaskStatus(taskId: string): Promise { function deleteTask (line 33) | async function deleteTask(taskId: string): Promise { function listConfigs (line 37) | async function listConfigs(): Promise { function uploadFile (line 42) | async function uploadFile(file: File): Promise { FILE: web_app/frontend/src/components/common/FileUpload.tsx type FileUploadProps (line 6) | interface FileUploadProps { function FileUpload (line 11) | function FileUpload({ onFileUploaded, uploadedFile }: FileUploadProps) { FILE: web_app/frontend/src/components/common/LoadingSpinner.tsx type LoadingSpinnerProps (line 1) | interface LoadingSpinnerProps { function LoadingSpinner (line 5) | function LoadingSpinner({ size = 'md' }: LoadingSpinnerProps) { FILE: web_app/frontend/src/components/common/MarkdownRenderer.tsx type MarkdownRendererProps (line 3) | interface MarkdownRendererProps { function MarkdownRenderer (line 7) | function MarkdownRenderer({ content }: MarkdownRendererProps) { FILE: web_app/frontend/src/components/task/TaskForm.tsx type TaskFormProps (line 8) | interface TaskFormProps { function TaskForm (line 12) | function TaskForm({ onTaskCreated }: TaskFormProps) { FILE: web_app/frontend/src/components/task/TaskHistory.tsx type TaskHistoryProps (line 6) | interface TaskHistoryProps { function truncateTitle (line 12) | function truncateTitle(title: string, maxTokens: number = 20): string { function formatTimestamp (line 18) | function formatTimestamp(dateStr: string): string { function TaskHistory (line 29) | function TaskHistory({ onSelectTask, selectedTaskId, refreshKey }: TaskH... function StatusIcon (line 97) | function StatusIcon({ status }: { status: string }) { FILE: web_app/frontend/src/components/task/TaskStatus.tsx type TaskStatusProps (line 9) | interface TaskStatusProps { function TaskStatus (line 14) | function TaskStatus({ task, onStatusUpdate }: TaskStatusProps) { function MessageBubble (line 182) | function MessageBubble({ message }: { message: Message }) { function LogEntry (line 210) | function LogEntry({ log }: { log: Record }) { function StatusBadge (line 322) | function StatusBadge({ status }: { status: string }) { FILE: web_app/frontend/src/hooks/usePolling.ts type UsePollingOptions (line 3) | interface UsePollingOptions { function usePolling (line 11) | function usePolling({ FILE: web_app/frontend/src/types/task.ts type TaskStatus (line 1) | type TaskStatus = 'pending' | 'running' | 'completed' | 'failed' | 'canc... type FileInfo (line 3) | interface FileInfo { type Task (line 10) | interface Task { type TaskCreate (line 27) | interface TaskCreate { type Message (line 33) | interface Message { type TaskStatusUpdate (line 38) | interface TaskStatusUpdate { type TaskListResponse (line 50) | interface TaskListResponse { type ConfigListResponse (line 57) | interface ConfigListResponse { type UploadResponse (line 62) | interface UploadResponse { FILE: web_app/frontend/src/vite-env.d.ts type ImportMetaEnv (line 3) | interface ImportMetaEnv { type ImportMeta (line 7) | interface ImportMeta { FILE: web_app/main.py function lifespan (line 28) | async def lifespan(app: FastAPI): function root (line 73) | async def root(): FILE: web_app/models/task.py class FileInfo (line 16) | class FileInfo(BaseModel): class TaskCreate (line 25) | class TaskCreate(BaseModel): class TaskResponse (line 37) | class TaskResponse(BaseModel): class TaskListResponse (line 64) | class TaskListResponse(BaseModel): class Message (line 73) | class Message(BaseModel): class TaskStatusUpdate (line 80) | class TaskStatusUpdate(BaseModel): class UploadResponse (line 94) | class UploadResponse(BaseModel): class ConfigListResponse (line 103) | class ConfigListResponse(BaseModel):