qwen-sci 0.2.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (549) hide show
  1. qwen_sci-0.2.2.dist-info/METADATA +492 -0
  2. qwen_sci-0.2.2.dist-info/RECORD +549 -0
  3. qwen_sci-0.2.2.dist-info/WHEEL +4 -0
  4. qwen_sci-0.2.2.dist-info/entry_points.txt +6 -0
  5. qwen_sci-0.2.2.dist-info/licenses/LICENSE +21 -0
  6. src/1.txt +1 -0
  7. src/__init__.py +1 -0
  8. src/__main__.py +5 -0
  9. src/agents/__init__.py +1 -0
  10. src/agents/experiment_design_agent/__init__.py +268 -0
  11. src/agents/experiment_design_agent/artifacts.py +747 -0
  12. src/agents/experiment_design_agent/cache.py +319 -0
  13. src/agents/experiment_design_agent/completeness.py +130 -0
  14. src/agents/experiment_design_agent/contracts.py +771 -0
  15. src/agents/experiment_design_agent/counterexample_analyzer.py +187 -0
  16. src/agents/experiment_design_agent/design_evidence_paper_screener.py +470 -0
  17. src/agents/experiment_design_agent/discipline_catalog.py +178 -0
  18. src/agents/experiment_design_agent/evidence_cards.py +338 -0
  19. src/agents/experiment_design_agent/evidence_planner.py +452 -0
  20. src/agents/experiment_design_agent/formal_reasoning_planner.py +884 -0
  21. src/agents/experiment_design_agent/fulltext_acquisition.py +863 -0
  22. src/agents/experiment_design_agent/idea_adapter.py +100 -0
  23. src/agents/experiment_design_agent/idea_intake.py +87 -0
  24. src/agents/experiment_design_agent/llm_json.py +328 -0
  25. src/agents/experiment_design_agent/orchestrator.py +1220 -0
  26. src/agents/experiment_design_agent/reasoning_context.py +183 -0
  27. src/agents/experiment_design_agent/reasoning_validation.py +546 -0
  28. src/agents/experiment_design_agent/run.py +481 -0
  29. src/agents/experiment_design_agent/run_logging.py +292 -0
  30. src/agents/experiment_design_agent/scope_gate.py +198 -0
  31. src/agents/experiment_design_agent/study_type_composer.py +1360 -0
  32. src/agents/experiment_design_agent/survey_evidence.py +1381 -0
  33. src/agents/experiment_design_agent/template_router.py +195 -0
  34. src/agents/experiment_design_agent/variable_claim_extractor.py +93 -0
  35. src/agents/idea_agent/__init__.py +1 -0
  36. src/agents/idea_agent/agent/__init__.py +6 -0
  37. src/agents/idea_agent/agent/artifacts.py +308 -0
  38. src/agents/idea_agent/agent/base.py +122 -0
  39. src/agents/idea_agent/agent/ligagent.py +488 -0
  40. src/agents/idea_agent/agent/mcts.py +2060 -0
  41. src/agents/idea_agent/agent/prompts/__init__.py +48 -0
  42. src/agents/idea_agent/agent/prompts/advanced_analysis.py +235 -0
  43. src/agents/idea_agent/agent/prompts/algorithm_alignment.py +55 -0
  44. src/agents/idea_agent/agent/prompts/algorithm_structuring.py +48 -0
  45. src/agents/idea_agent/agent/prompts/component_extraction.py +62 -0
  46. src/agents/idea_agent/agent/prompts/component_novelty_evaluation.py +54 -0
  47. src/agents/idea_agent/agent/prompts/experiment_findings_extraction.py +39 -0
  48. src/agents/idea_agent/agent/prompts/idea_fusion.py +295 -0
  49. src/agents/idea_agent/agent/prompts/idea_introduction.py +30 -0
  50. src/agents/idea_agent/agent/prompts/idea_result_alignment.py +39 -0
  51. src/agents/idea_agent/agent/prompts/input_interpreter.py +52 -0
  52. src/agents/idea_agent/agent/prompts/keynote_ops.py +78 -0
  53. src/agents/idea_agent/agent/prompts/mcts_evaluation.py +235 -0
  54. src/agents/idea_agent/agent/prompts/mcts_generation.py +140 -0
  55. src/agents/idea_agent/agent/prompts/mechanism_commit_query.py +99 -0
  56. src/agents/idea_agent/agent/prompts/memory_selection.py +0 -0
  57. src/agents/idea_agent/agent/prompts/prompt_modes.py +16 -0
  58. src/agents/idea_agent/agent/prompts/rag_query.py +34 -0
  59. src/agents/idea_agent/agent/prompts/re_analysis_replan.py +48 -0
  60. src/agents/idea_agent/agent/prompts/reference_grounding.py +34 -0
  61. src/agents/idea_agent/agent/prompts/root_domain_classification.py +32 -0
  62. src/agents/idea_agent/agent/prompts/scientific_debate.py +88 -0
  63. src/agents/idea_agent/agent/prompts/scientific_materialization.py +45 -0
  64. src/agents/idea_agent/agent/prompts/skill_instantiation.py +193 -0
  65. src/agents/idea_agent/agent/prompts/theory_transfer_query.py +93 -0
  66. src/agents/idea_agent/agent/prompts/topic_background.py +15 -0
  67. src/agents/idea_agent/agent/skills/DEFAULT_SKILL_TEMPLATES.json +263 -0
  68. src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/SKILL.md +40 -0
  69. src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/references/contrast_patterns.md +22 -0
  70. src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/SKILL.md +40 -0
  71. src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/references/mechanism_cards.md +24 -0
  72. src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/SKILL.md +39 -0
  73. src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/references/hierarchy_patterns.md +22 -0
  74. src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/SKILL.md +39 -0
  75. src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/references/mechanism_commit_patterns.md +24 -0
  76. src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/SKILL.md +39 -0
  77. src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/references/coordination_patterns.md +22 -0
  78. src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/SKILL.md +41 -0
  79. src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/references/speculation_patterns.md +22 -0
  80. src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/SKILL.md +39 -0
  81. src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/references/modularity_patterns.md +22 -0
  82. src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/SKILL.md +40 -0
  83. src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/references/transfer_patterns.md +24 -0
  84. src/agents/idea_agent/example/idea_result.json +900 -0
  85. src/agents/idea_agent/run.py +276 -0
  86. src/agents/idea_agent/tests/test_advanced_analysis_contract.py +90 -0
  87. src/agents/idea_agent/tests/test_gap_hypothesis_bridge.py +166 -0
  88. src/agents/idea_agent/tests/test_idea_debate.py +480 -0
  89. src/agents/idea_agent/tests/test_idea_result_v5.py +99 -0
  90. src/agents/idea_agent/tests/test_idea_synthesis.py +92 -0
  91. src/agents/idea_agent/tests/test_mature_idea_sources.py +27 -0
  92. src/agents/idea_agent/tests/test_multimodal_idea_integration.py +386 -0
  93. src/agents/idea_agent/tests/test_profile_materialization_and_scoring.py +219 -0
  94. src/agents/idea_agent/tests/test_profile_native_skill_rendering.py +122 -0
  95. src/agents/idea_agent/tests/test_result_persistence.py +183 -0
  96. src/agents/idea_agent/tests/test_scientific_intervention_profiles.py +241 -0
  97. src/agents/idea_agent/tests/test_scientific_rubric_and_prompts.py +559 -0
  98. src/agents/idea_agent/tests/test_strict_json_object_responses.py +48 -0
  99. src/agents/idea_agent/utils/core/__init__.py +1 -0
  100. src/agents/idea_agent/utils/core/ablation_inputs.py +60 -0
  101. src/agents/idea_agent/utils/core/chat_errors.py +95 -0
  102. src/agents/idea_agent/utils/core/chat_router.py +130 -0
  103. src/agents/idea_agent/utils/core/chat_transport.py +188 -0
  104. src/agents/idea_agent/utils/core/config_loader.py +166 -0
  105. src/agents/idea_agent/utils/core/json_utils.py +28 -0
  106. src/agents/idea_agent/utils/core/logger.py +287 -0
  107. src/agents/idea_agent/utils/core/progress.py +58 -0
  108. src/agents/idea_agent/utils/core/response_parsing.py +57 -0
  109. src/agents/idea_agent/utils/core/run_inputs.py +198 -0
  110. src/agents/idea_agent/utils/mcts/__init__.py +1 -0
  111. src/agents/idea_agent/utils/mcts/component_novelty.py +342 -0
  112. src/agents/idea_agent/utils/mcts/defect_registry.py +302 -0
  113. src/agents/idea_agent/utils/mcts/idea_routes.py +61 -0
  114. src/agents/idea_agent/utils/mcts/idea_taste_presets.py +312 -0
  115. src/agents/idea_agent/utils/mcts/mcts_helpers.py +738 -0
  116. src/agents/idea_agent/utils/mcts/mcts_runtime.py +3000 -0
  117. src/agents/idea_agent/utils/mcts/scientific_intervention_ontology.py +1561 -0
  118. src/agents/idea_agent/utils/mcts/scientific_rubric.py +211 -0
  119. src/agents/idea_agent/utils/mcts/skill_parsing.py +92 -0
  120. src/agents/idea_agent/utils/papers/__init__.py +1 -0
  121. src/agents/idea_agent/utils/papers/paper_graph_vector_store.py +499 -0
  122. src/agents/idea_agent/utils/papers/paper_repository.py +372 -0
  123. src/agents/idea_agent/utils/prompting/__init__.py +1 -0
  124. src/agents/idea_agent/utils/prompting/prompt_views.py +637 -0
  125. src/agents/idea_agent/utils/workflow/__init__.py +1 -0
  126. src/agents/idea_agent/utils/workflow/advanced_analysis_contract.py +244 -0
  127. src/agents/idea_agent/utils/workflow/gap_hypothesis_bridge.py +461 -0
  128. src/agents/idea_agent/utils/workflow/idea_contract.py +426 -0
  129. src/agents/idea_agent/utils/workflow/idea_debate.py +1238 -0
  130. src/agents/idea_agent/utils/workflow/idea_diversity.py +163 -0
  131. src/agents/idea_agent/utils/workflow/idea_fusion.py +889 -0
  132. src/agents/idea_agent/utils/workflow/idea_helpers.py +478 -0
  133. src/agents/idea_agent/utils/workflow/idea_portfolio.py +422 -0
  134. src/agents/idea_agent/utils/workflow/idea_synthesis.py +482 -0
  135. src/agents/idea_agent/utils/workflow/ligagent_flow.py +581 -0
  136. src/agents/idea_agent/utils/workflow/ligagent_handlers.py +1836 -0
  137. src/agents/idea_agent/utils/workflow/ligagent_helpers.py +1331 -0
  138. src/agents/idea_agent/utils/workflow/ligagent_utils.py +322 -0
  139. src/agents/idea_agent/utils/workflow/mature_idea_sources.py +648 -0
  140. src/agents/idea_agent/utils/workflow/multimodal_data_anchoring.py +578 -0
  141. src/agents/idea_agent/utils/workflow/result_persistence.py +774 -0
  142. src/agents/idea_agent/utils/workflow/stage_contract.py +76 -0
  143. src/agents/idea_agent/utils/workflow/workflow_runtime.py +288 -0
  144. src/agents/research_plan_author/__init__.py +50 -0
  145. src/agents/research_plan_author/artifacts.py +270 -0
  146. src/agents/research_plan_author/authoring_blueprint.py +1246 -0
  147. src/agents/research_plan_author/bibtex_renderer.py +252 -0
  148. src/agents/research_plan_author/contract_repair.py +131 -0
  149. src/agents/research_plan_author/contracts.py +745 -0
  150. src/agents/research_plan_author/cross_section_editor.py +232 -0
  151. src/agents/research_plan_author/document_quality.py +987 -0
  152. src/agents/research_plan_author/idea_evolution.py +223 -0
  153. src/agents/research_plan_author/input_loader.py +76 -0
  154. src/agents/research_plan_author/latex_compiler.py +260 -0
  155. src/agents/research_plan_author/latex_safety.py +159 -0
  156. src/agents/research_plan_author/llm_json.py +74 -0
  157. src/agents/research_plan_author/markdown_renderer.py +275 -0
  158. src/agents/research_plan_author/pdf_validator.py +149 -0
  159. src/agents/research_plan_author/render.py +166 -0
  160. src/agents/research_plan_author/render_artifacts.py +187 -0
  161. src/agents/research_plan_author/run.py +765 -0
  162. src/agents/research_plan_author/run_logging.py +209 -0
  163. src/agents/research_plan_author/section_cache.py +184 -0
  164. src/agents/research_plan_author/section_composer.py +1764 -0
  165. src/agents/research_plan_author/section_router.py +209 -0
  166. src/agents/research_plan_author/semantic_validator.py +254 -0
  167. src/agents/research_plan_author/source_bundle.py +46 -0
  168. src/agents/research_plan_author/source_registry.py +208 -0
  169. src/agents/research_plan_author/survey_source_loader.py +137 -0
  170. src/agents/research_plan_author/template_adapter.py +173 -0
  171. src/agents/research_plan_author/template_profile.py +204 -0
  172. src/agents/research_plan_author/tex_renderer.py +496 -0
  173. src/agents/research_plan_author/theory_presentation.py +134 -0
  174. src/agents/research_plan_author/theory_spine.py +703 -0
  175. src/agents/survey_agent/Dockerfile +54 -0
  176. src/agents/survey_agent/README.md +350 -0
  177. src/agents/survey_agent/config/deep_survey.yaml +217 -0
  178. src/agents/survey_agent/config/deep_survey_batch.yaml +176 -0
  179. src/agents/survey_agent/config/deep_survey_fast.yaml +183 -0
  180. src/agents/survey_agent/config/evaluate_baseline.yaml +197 -0
  181. src/agents/survey_agent/config/outcomeRAG.yaml +159 -0
  182. src/agents/survey_agent/env_report.md +348 -0
  183. src/agents/survey_agent/modules/__init__.py +0 -0
  184. src/agents/survey_agent/modules/code_collector.py +2194 -0
  185. src/agents/survey_agent/modules/code_report_generator.py +1282 -0
  186. src/agents/survey_agent/modules/data_manager.py +1713 -0
  187. src/agents/survey_agent/modules/database.py +167 -0
  188. src/agents/survey_agent/modules/fulltext_download_cache.py +462 -0
  189. src/agents/survey_agent/modules/fulltext_http.py +134 -0
  190. src/agents/survey_agent/modules/fulltext_resolution.py +749 -0
  191. src/agents/survey_agent/modules/judge.py +434 -0
  192. src/agents/survey_agent/modules/outcome_RAG.py +236 -0
  193. src/agents/survey_agent/modules/paper_graph_retriever.py +1075 -0
  194. src/agents/survey_agent/modules/pe.py +1729 -0
  195. src/agents/survey_agent/modules/pseudo_creator.py +782 -0
  196. src/agents/survey_agent/modules/pseudo_reviser.py +537 -0
  197. src/agents/survey_agent/modules/refine_agent.py +1952 -0
  198. src/agents/survey_agent/modules/survey_generator.py +5691 -0
  199. src/agents/survey_agent/modules/survey_visualizer.py +1817 -0
  200. src/agents/survey_agent/modules/visual_prompts.py +327 -0
  201. src/agents/survey_agent/modules/work_analyzer.py +2750 -0
  202. src/agents/survey_agent/modules/work_collector.py +5649 -0
  203. src/agents/survey_agent/scripts/baseline_evaluation.py +411 -0
  204. src/agents/survey_agent/scripts/run_deep_survey.py +224 -0
  205. src/agents/survey_agent/scripts/run_deep_survey_adapter.py +407 -0
  206. src/agents/survey_agent/scripts/run_deep_survey_adapter_with_input.py +409 -0
  207. src/agents/survey_agent/scripts/run_deep_survey_batch.py +228 -0
  208. src/agents/survey_agent/scripts/run_deep_survey_batch_arg.py +243 -0
  209. src/agents/survey_agent/scripts/run_deep_survey_batch_settings.py +218 -0
  210. src/agents/survey_agent/scripts/run_keynotes_gen.py +128 -0
  211. src/agents/survey_agent/scripts/run_work_clusters.py +140 -0
  212. src/agents/survey_agent/utils/__init__.py +0 -0
  213. src/agents/survey_agent/utils/ablation_utils.py +317 -0
  214. src/agents/survey_agent/utils/api_call.py +2518 -0
  215. src/agents/survey_agent/utils/chat_utils.py +82 -0
  216. src/agents/survey_agent/utils/config_utils.py +70 -0
  217. src/agents/survey_agent/utils/convert_to_md.py +29 -0
  218. src/agents/survey_agent/utils/err_info.py +24 -0
  219. src/agents/survey_agent/utils/file_utils.py +176 -0
  220. src/agents/survey_agent/utils/gpu_utils.py +145 -0
  221. src/agents/survey_agent/utils/graph_visualizer.py +279 -0
  222. src/agents/survey_agent/utils/html_utils.py +181 -0
  223. src/agents/survey_agent/utils/latex_generator_intra_cluster.py +529 -0
  224. src/agents/survey_agent/utils/latex_generator_relation_table.py +193 -0
  225. src/agents/survey_agent/utils/mineru_section_packer.py +334 -0
  226. src/agents/survey_agent/utils/mineru_utils.py +396 -0
  227. src/agents/survey_agent/utils/paper.py +144 -0
  228. src/agents/survey_agent/utils/read_yaml.py +15 -0
  229. src/agents/survey_agent/utils/repo_utils.py +167 -0
  230. src/agents/survey_agent/utils/rich_logger.py +77 -0
  231. src/agents/survey_agent/utils/step2v2.py +874 -0
  232. src/agents/survey_agent/utils/step2v2_extractor.py +856 -0
  233. src/agents/survey_agent/utils/topic_survey_storage.py +309 -0
  234. src/agents/survey_agent/utils/utils.py +118 -0
  235. src/agents/survey_agent/utils/work.py +2 -0
  236. src/cli.py +1611 -0
  237. src/config/__init__.py +213 -0
  238. src/config/default.yaml +1122 -0
  239. src/harness/LICENSE +21 -0
  240. src/harness/VENDORED.md +14 -0
  241. src/harness/src/__init__.py +0 -0
  242. src/harness/src/openharness/__init__.py +0 -0
  243. src/harness/src/openharness/__main__.py +6 -0
  244. src/harness/src/openharness/api/__init__.py +21 -0
  245. src/harness/src/openharness/api/client.py +281 -0
  246. src/harness/src/openharness/api/codex_client.py +407 -0
  247. src/harness/src/openharness/api/copilot_auth.py +240 -0
  248. src/harness/src/openharness/api/copilot_client.py +134 -0
  249. src/harness/src/openharness/api/errors.py +19 -0
  250. src/harness/src/openharness/api/openai_client.py +577 -0
  251. src/harness/src/openharness/api/provider.py +186 -0
  252. src/harness/src/openharness/api/registry.py +437 -0
  253. src/harness/src/openharness/api/usage.py +17 -0
  254. src/harness/src/openharness/auth/__init__.py +29 -0
  255. src/harness/src/openharness/auth/external.py +610 -0
  256. src/harness/src/openharness/auth/flows.py +189 -0
  257. src/harness/src/openharness/auth/manager.py +482 -0
  258. src/harness/src/openharness/auth/storage.py +269 -0
  259. src/harness/src/openharness/autopilot/__init__.py +23 -0
  260. src/harness/src/openharness/autopilot/service.py +2239 -0
  261. src/harness/src/openharness/autopilot/types.py +91 -0
  262. src/harness/src/openharness/bridge/__init__.py +20 -0
  263. src/harness/src/openharness/bridge/manager.py +106 -0
  264. src/harness/src/openharness/bridge/session_runner.py +46 -0
  265. src/harness/src/openharness/bridge/types.py +37 -0
  266. src/harness/src/openharness/bridge/work_secret.py +41 -0
  267. src/harness/src/openharness/channels/UPSTREAM +6 -0
  268. src/harness/src/openharness/channels/__init__.py +22 -0
  269. src/harness/src/openharness/channels/adapter.py +131 -0
  270. src/harness/src/openharness/channels/bus/__init__.py +6 -0
  271. src/harness/src/openharness/channels/bus/events.py +38 -0
  272. src/harness/src/openharness/channels/bus/queue.py +44 -0
  273. src/harness/src/openharness/channels/impl/__init__.py +6 -0
  274. src/harness/src/openharness/channels/impl/base.py +141 -0
  275. src/harness/src/openharness/channels/impl/dingtalk.py +445 -0
  276. src/harness/src/openharness/channels/impl/discord.py +311 -0
  277. src/harness/src/openharness/channels/impl/email.py +410 -0
  278. src/harness/src/openharness/channels/impl/feishu.py +1342 -0
  279. src/harness/src/openharness/channels/impl/manager.py +257 -0
  280. src/harness/src/openharness/channels/impl/matrix.py +700 -0
  281. src/harness/src/openharness/channels/impl/mochat.py +897 -0
  282. src/harness/src/openharness/channels/impl/qq.py +141 -0
  283. src/harness/src/openharness/channels/impl/slack.py +284 -0
  284. src/harness/src/openharness/channels/impl/telegram.py +525 -0
  285. src/harness/src/openharness/channels/impl/whatsapp.py +159 -0
  286. src/harness/src/openharness/cli.py +2551 -0
  287. src/harness/src/openharness/commands/__init__.py +21 -0
  288. src/harness/src/openharness/commands/registry.py +2783 -0
  289. src/harness/src/openharness/config/__init__.py +34 -0
  290. src/harness/src/openharness/config/paths.py +160 -0
  291. src/harness/src/openharness/config/schema.py +119 -0
  292. src/harness/src/openharness/config/settings.py +1104 -0
  293. src/harness/src/openharness/coordinator/__init__.py +12 -0
  294. src/harness/src/openharness/coordinator/agent_definitions.py +975 -0
  295. src/harness/src/openharness/coordinator/coordinator_mode.py +520 -0
  296. src/harness/src/openharness/engine/__init__.py +80 -0
  297. src/harness/src/openharness/engine/cost_tracker.py +24 -0
  298. src/harness/src/openharness/engine/messages.py +222 -0
  299. src/harness/src/openharness/engine/query.py +1188 -0
  300. src/harness/src/openharness/engine/query_engine.py +313 -0
  301. src/harness/src/openharness/engine/stream_events.py +90 -0
  302. src/harness/src/openharness/hooks/__init__.py +50 -0
  303. src/harness/src/openharness/hooks/events.py +20 -0
  304. src/harness/src/openharness/hooks/executor.py +242 -0
  305. src/harness/src/openharness/hooks/hot_reload.py +31 -0
  306. src/harness/src/openharness/hooks/loader.py +68 -0
  307. src/harness/src/openharness/hooks/schemas.py +66 -0
  308. src/harness/src/openharness/hooks/types.py +38 -0
  309. src/harness/src/openharness/keybindings/__init__.py +14 -0
  310. src/harness/src/openharness/keybindings/default_bindings.py +11 -0
  311. src/harness/src/openharness/keybindings/loader.py +22 -0
  312. src/harness/src/openharness/keybindings/parser.py +18 -0
  313. src/harness/src/openharness/keybindings/resolver.py +13 -0
  314. src/harness/src/openharness/mcp/__init__.py +79 -0
  315. src/harness/src/openharness/mcp/client.py +298 -0
  316. src/harness/src/openharness/mcp/config.py +16 -0
  317. src/harness/src/openharness/mcp/types.py +76 -0
  318. src/harness/src/openharness/memory/__init__.py +25 -0
  319. src/harness/src/openharness/memory/agent.py +91 -0
  320. src/harness/src/openharness/memory/manager.py +183 -0
  321. src/harness/src/openharness/memory/memdir.py +52 -0
  322. src/harness/src/openharness/memory/migrate.py +137 -0
  323. src/harness/src/openharness/memory/paths.py +22 -0
  324. src/harness/src/openharness/memory/relevance.py +145 -0
  325. src/harness/src/openharness/memory/scan.py +116 -0
  326. src/harness/src/openharness/memory/schema.py +443 -0
  327. src/harness/src/openharness/memory/search.py +71 -0
  328. src/harness/src/openharness/memory/team.py +90 -0
  329. src/harness/src/openharness/memory/types.py +33 -0
  330. src/harness/src/openharness/memory/usage.py +153 -0
  331. src/harness/src/openharness/output_styles/__init__.py +5 -0
  332. src/harness/src/openharness/output_styles/loader.py +42 -0
  333. src/harness/src/openharness/permissions/__init__.py +26 -0
  334. src/harness/src/openharness/permissions/checker.py +200 -0
  335. src/harness/src/openharness/permissions/modes.py +13 -0
  336. src/harness/src/openharness/personalization/__init__.py +6 -0
  337. src/harness/src/openharness/personalization/extractor.py +138 -0
  338. src/harness/src/openharness/personalization/rules.py +64 -0
  339. src/harness/src/openharness/personalization/session_hook.py +65 -0
  340. src/harness/src/openharness/platforms.py +86 -0
  341. src/harness/src/openharness/plugins/__init__.py +53 -0
  342. src/harness/src/openharness/plugins/bundled/__init__.py +0 -0
  343. src/harness/src/openharness/plugins/installer.py +39 -0
  344. src/harness/src/openharness/plugins/loader.py +730 -0
  345. src/harness/src/openharness/plugins/schemas.py +24 -0
  346. src/harness/src/openharness/plugins/types.py +59 -0
  347. src/harness/src/openharness/prompts/__init__.py +14 -0
  348. src/harness/src/openharness/prompts/claudemd.py +48 -0
  349. src/harness/src/openharness/prompts/context.py +187 -0
  350. src/harness/src/openharness/prompts/environment.py +135 -0
  351. src/harness/src/openharness/prompts/system_prompt.py +109 -0
  352. src/harness/src/openharness/sandbox/Dockerfile +6 -0
  353. src/harness/src/openharness/sandbox/__init__.py +33 -0
  354. src/harness/src/openharness/sandbox/adapter.py +148 -0
  355. src/harness/src/openharness/sandbox/docker_backend.py +232 -0
  356. src/harness/src/openharness/sandbox/docker_image.py +103 -0
  357. src/harness/src/openharness/sandbox/path_validator.py +37 -0
  358. src/harness/src/openharness/sandbox/session.py +63 -0
  359. src/harness/src/openharness/services/__init__.py +30 -0
  360. src/harness/src/openharness/services/autodream/__init__.py +34 -0
  361. src/harness/src/openharness/services/autodream/backup.py +104 -0
  362. src/harness/src/openharness/services/autodream/lock.py +138 -0
  363. src/harness/src/openharness/services/autodream/prompt.py +128 -0
  364. src/harness/src/openharness/services/autodream/service.py +313 -0
  365. src/harness/src/openharness/services/compact/__init__.py +1725 -0
  366. src/harness/src/openharness/services/cron.py +137 -0
  367. src/harness/src/openharness/services/cron_scheduler.py +595 -0
  368. src/harness/src/openharness/services/lsp/__init__.py +216 -0
  369. src/harness/src/openharness/services/memory_extract/__init__.py +261 -0
  370. src/harness/src/openharness/services/oauth/__init__.py +0 -0
  371. src/harness/src/openharness/services/session_backend.py +97 -0
  372. src/harness/src/openharness/services/session_memory/__init__.py +139 -0
  373. src/harness/src/openharness/services/session_storage.py +230 -0
  374. src/harness/src/openharness/services/token_estimation.py +15 -0
  375. src/harness/src/openharness/services/tool_outputs.py +55 -0
  376. src/harness/src/openharness/skills/__init__.py +44 -0
  377. src/harness/src/openharness/skills/_frontmatter.py +97 -0
  378. src/harness/src/openharness/skills/bundled/__init__.py +75 -0
  379. src/harness/src/openharness/skills/bundled/content/commit.md +25 -0
  380. src/harness/src/openharness/skills/bundled/content/debug.md +25 -0
  381. src/harness/src/openharness/skills/bundled/content/diagnose.md +35 -0
  382. src/harness/src/openharness/skills/bundled/content/plan.md +39 -0
  383. src/harness/src/openharness/skills/bundled/content/review.md +33 -0
  384. src/harness/src/openharness/skills/bundled/content/simplify.md +26 -0
  385. src/harness/src/openharness/skills/bundled/content/skill-creator.md +175 -0
  386. src/harness/src/openharness/skills/bundled/content/test.md +38 -0
  387. src/harness/src/openharness/skills/loader.py +229 -0
  388. src/harness/src/openharness/skills/registry.py +29 -0
  389. src/harness/src/openharness/skills/types.py +24 -0
  390. src/harness/src/openharness/state/__init__.py +6 -0
  391. src/harness/src/openharness/state/app_state.py +30 -0
  392. src/harness/src/openharness/state/store.py +40 -0
  393. src/harness/src/openharness/swarm/__init__.py +70 -0
  394. src/harness/src/openharness/swarm/in_process.py +693 -0
  395. src/harness/src/openharness/swarm/lockfile.py +24 -0
  396. src/harness/src/openharness/swarm/mailbox.py +522 -0
  397. src/harness/src/openharness/swarm/permission_sync.py +1168 -0
  398. src/harness/src/openharness/swarm/registry.py +410 -0
  399. src/harness/src/openharness/swarm/spawn_utils.py +229 -0
  400. src/harness/src/openharness/swarm/subprocess_backend.py +171 -0
  401. src/harness/src/openharness/swarm/team_lifecycle.py +910 -0
  402. src/harness/src/openharness/swarm/types.py +398 -0
  403. src/harness/src/openharness/swarm/worktree.py +315 -0
  404. src/harness/src/openharness/tasks/__init__.py +18 -0
  405. src/harness/src/openharness/tasks/local_agent_task.py +28 -0
  406. src/harness/src/openharness/tasks/local_shell_task.py +17 -0
  407. src/harness/src/openharness/tasks/manager.py +475 -0
  408. src/harness/src/openharness/tasks/stop_task.py +11 -0
  409. src/harness/src/openharness/tasks/types.py +32 -0
  410. src/harness/src/openharness/themes/__init__.py +21 -0
  411. src/harness/src/openharness/themes/builtin.py +89 -0
  412. src/harness/src/openharness/themes/loader.py +55 -0
  413. src/harness/src/openharness/themes/schema.py +54 -0
  414. src/harness/src/openharness/tools/__init__.py +107 -0
  415. src/harness/src/openharness/tools/agent_tool.py +141 -0
  416. src/harness/src/openharness/tools/ask_user_question_tool.py +46 -0
  417. src/harness/src/openharness/tools/base.py +80 -0
  418. src/harness/src/openharness/tools/bash_tool.py +259 -0
  419. src/harness/src/openharness/tools/brief_tool.py +33 -0
  420. src/harness/src/openharness/tools/config_tool.py +54 -0
  421. src/harness/src/openharness/tools/cron_create_tool.py +105 -0
  422. src/harness/src/openharness/tools/cron_delete_tool.py +32 -0
  423. src/harness/src/openharness/tools/cron_list_tool.py +69 -0
  424. src/harness/src/openharness/tools/cron_toggle_tool.py +37 -0
  425. src/harness/src/openharness/tools/enter_plan_mode_tool.py +28 -0
  426. src/harness/src/openharness/tools/enter_worktree_tool.py +80 -0
  427. src/harness/src/openharness/tools/exit_plan_mode_tool.py +28 -0
  428. src/harness/src/openharness/tools/exit_worktree_tool.py +42 -0
  429. src/harness/src/openharness/tools/file_edit_tool.py +95 -0
  430. src/harness/src/openharness/tools/file_read_tool.py +72 -0
  431. src/harness/src/openharness/tools/file_write_tool.py +87 -0
  432. src/harness/src/openharness/tools/glob_tool.py +175 -0
  433. src/harness/src/openharness/tools/grep_tool.py +374 -0
  434. src/harness/src/openharness/tools/image_generation_tool.py +447 -0
  435. src/harness/src/openharness/tools/image_to_text_tool.py +237 -0
  436. src/harness/src/openharness/tools/list_mcp_resources_tool.py +36 -0
  437. src/harness/src/openharness/tools/lsp_tool.py +154 -0
  438. src/harness/src/openharness/tools/mcp_auth_tool.py +71 -0
  439. src/harness/src/openharness/tools/mcp_tool.py +72 -0
  440. src/harness/src/openharness/tools/notebook_edit_tool.py +97 -0
  441. src/harness/src/openharness/tools/read_mcp_resource_tool.py +38 -0
  442. src/harness/src/openharness/tools/remote_trigger_tool.py +74 -0
  443. src/harness/src/openharness/tools/send_message_tool.py +58 -0
  444. src/harness/src/openharness/tools/skill_tool.py +43 -0
  445. src/harness/src/openharness/tools/sleep_tool.py +32 -0
  446. src/harness/src/openharness/tools/task_create_tool.py +56 -0
  447. src/harness/src/openharness/tools/task_get_tool.py +33 -0
  448. src/harness/src/openharness/tools/task_list_tool.py +35 -0
  449. src/harness/src/openharness/tools/task_output_tool.py +35 -0
  450. src/harness/src/openharness/tools/task_stop_tool.py +30 -0
  451. src/harness/src/openharness/tools/task_update_tool.py +50 -0
  452. src/harness/src/openharness/tools/team_create_tool.py +31 -0
  453. src/harness/src/openharness/tools/team_delete_tool.py +30 -0
  454. src/harness/src/openharness/tools/todo_write_tool.py +46 -0
  455. src/harness/src/openharness/tools/tool_search_tool.py +38 -0
  456. src/harness/src/openharness/tools/web_fetch_tool.py +117 -0
  457. src/harness/src/openharness/tools/web_search_tool.py +119 -0
  458. src/harness/src/openharness/ui/__init__.py +5 -0
  459. src/harness/src/openharness/ui/app.py +320 -0
  460. src/harness/src/openharness/ui/backend_host.py +941 -0
  461. src/harness/src/openharness/ui/coordinator_drain.py +198 -0
  462. src/harness/src/openharness/ui/input.py +32 -0
  463. src/harness/src/openharness/ui/output.py +265 -0
  464. src/harness/src/openharness/ui/permission_dialog.py +14 -0
  465. src/harness/src/openharness/ui/protocol.py +247 -0
  466. src/harness/src/openharness/ui/react_launcher.py +179 -0
  467. src/harness/src/openharness/ui/runtime.py +799 -0
  468. src/harness/src/openharness/ui/textual_app.py +495 -0
  469. src/harness/src/openharness/utils/__init__.py +0 -0
  470. src/harness/src/openharness/utils/file_lock.py +86 -0
  471. src/harness/src/openharness/utils/fs.py +98 -0
  472. src/harness/src/openharness/utils/helpers.py +77 -0
  473. src/harness/src/openharness/utils/network_guard.py +340 -0
  474. src/harness/src/openharness/utils/shell.py +147 -0
  475. src/harness/src/openharness/vim/__init__.py +5 -0
  476. src/harness/src/openharness/vim/transitions.py +8 -0
  477. src/harness/src/openharness/voice/__init__.py +7 -0
  478. src/harness/src/openharness/voice/keyterms.py +10 -0
  479. src/harness/src/openharness/voice/stream_stt.py +8 -0
  480. src/harness/src/openharness/voice/voice_mode.py +44 -0
  481. src/llm/__init__.py +29 -0
  482. src/llm/image_generation.py +402 -0
  483. src/llm/provider_registry.py +419 -0
  484. src/llm/runtime_env.py +64 -0
  485. src/llm/structured_output.py +131 -0
  486. src/llm/vision.py +198 -0
  487. src/memory/__init__.py +2 -0
  488. src/memory/api/__init__.py +1 -0
  489. src/memory/api/base_memory_system_api.py +98 -0
  490. src/memory/api/base_symbolic_memory_system_api.py +190 -0
  491. src/memory/api/base_vector_memory_system_api.py +116 -0
  492. src/memory/api/faiss_memory_system_api.py +228 -0
  493. src/memory/api/slot_process_api.py +827 -0
  494. src/memory/api/symbolic_memory_system_api.py +572 -0
  495. src/memory/memory_system/__init__.py +48 -0
  496. src/memory/memory_system/component_taxonomy.py +430 -0
  497. src/memory/memory_system/llm.py +437 -0
  498. src/memory/memory_system/models.py +168 -0
  499. src/memory/memory_system/user_prompt.py +418 -0
  500. src/memory/memory_system/utils.py +282 -0
  501. src/memory/memory_system/vectorstore.py +311 -0
  502. src/memory/memory_system/working_slot.py +99 -0
  503. src/pipeline/__init__.py +129 -0
  504. src/pipeline/contracts.py +531 -0
  505. src/pipeline/discipline_taxonomy.py +916 -0
  506. src/pipeline/evidence_coverage_ledger.py +1150 -0
  507. src/pipeline/evidence_refinement.py +620 -0
  508. src/pipeline/experiment_to_symbolic.py +137 -0
  509. src/pipeline/multimodal_evidence/__init__.py +28 -0
  510. src/pipeline/multimodal_evidence/capabilities.py +107 -0
  511. src/pipeline/multimodal_evidence/claims.py +135 -0
  512. src/pipeline/multimodal_evidence/contract.py +291 -0
  513. src/pipeline/multimodal_evidence/data_sh_compiler.py +505 -0
  514. src/pipeline/multimodal_evidence/handoff_binding.py +135 -0
  515. src/pipeline/multimodal_evidence/manifest.py +254 -0
  516. src/pipeline/multimodal_evidence/native_analysis.py +479 -0
  517. src/pipeline/multimodal_evidence/perception.py +277 -0
  518. src/pipeline/multimodal_evidence/query_binding.py +65 -0
  519. src/pipeline/multimodal_evidence/rendering.py +120 -0
  520. src/pipeline/multimodal_evidence/safety.py +42 -0
  521. src/pipeline/multimodal_evidence/sampling.py +69 -0
  522. src/pipeline/multimodal_evidence/service.py +148 -0
  523. src/pipeline/multimodal_evidence/survey_integration.py +460 -0
  524. src/pipeline/paper_identity.py +52 -0
  525. src/pipeline/research_design_inventory.py +338 -0
  526. src/pipeline/research_domain_resolution.py +669 -0
  527. src/pipeline/research_identity.py +548 -0
  528. src/pipeline/research_question_contract.py +646 -0
  529. src/pipeline/retrieval_lanes.py +889 -0
  530. src/pipeline/run_loop.py +862 -0
  531. src/pipeline/science_events.py +30 -0
  532. src/pipeline/science_manifests.py +602 -0
  533. src/pipeline/science_run.py +918 -0
  534. src/pipeline/science_stages.py +709 -0
  535. src/pipeline/science_workflow.py +807 -0
  536. src/pipeline/sh_cluster_projection.py +306 -0
  537. src/pipeline/sh_graph_provenance.py +648 -0
  538. src/pipeline/subhypothesis_decomposition.py +392 -0
  539. src/pipeline/subhypothesis_evidence.py +856 -0
  540. src/pipeline/survey_evidence_plan.py +858 -0
  541. src/pipeline/survey_gap_adjudication.py +647 -0
  542. src/pipeline/survey_gap_candidates.py +840 -0
  543. src/pipeline/survey_gap_ledger.py +683 -0
  544. src/pipeline/survey_gap_triage.py +401 -0
  545. src/pipeline/survey_handoff_persistence.py +481 -0
  546. src/pipeline/survey_handoff_projection.py +457 -0
  547. src/pipeline/survey_idea_handoff.py +1112 -0
  548. src/pipeline/survey_idea_loader.py +289 -0
  549. src/research_run_ids.py +11 -0
@@ -0,0 +1,54 @@
1
+ # Use the official vllm image for gpu with Ampere architecture and above (Compute Capability>=8.0)
2
+ # Compute Capability version query (https://developer.nvidia.com/cuda-gpus)
3
+ FROM vllm/vllm-openai:v0.10.1.1
4
+
5
+ # Use the official vllm image for gpu with Turing architecture and below (Compute Capability<8.0)
6
+ # FROM vllm/vllm-openai:v0.10.2
7
+
8
+ # Install libgl for opencv support & Noto fonts for Chinese characters
9
+ RUN apt-get update && \
10
+ apt-get install -y \
11
+ fonts-noto-core \
12
+ fonts-noto-cjk \
13
+ fontconfig \
14
+ libgl1 && \
15
+ fc-cache -fv && \
16
+ apt-get clean && \
17
+ rm -rf /var/lib/apt/lists/*
18
+
19
+ # Install mineru latest
20
+ RUN python3 -m pip install -U 'mineru[core]' --break-system-packages && \
21
+ python3 -m pip cache purge
22
+
23
+ # Install some other packages
24
+ RUN python3 -m pip install -U \
25
+ hydra-core \
26
+ asciinet \
27
+ tenacity \
28
+ trafilatura \
29
+ readability-lxml \
30
+ html2text
31
+
32
+ # Install java
33
+ RUN wget https://mirrors.huaweicloud.com/openjdk/25/openjdk-25_linux-x64_bin.tar.gz -O /tmp/jdk-25.tar.gz && \
34
+ mkdir -p /opt/jdk-25 && \
35
+ tar -xzf /tmp/jdk-25.tar.gz -C /opt/jdk-25 --strip-components=1 && \
36
+ rm /tmp/jdk-25.tar.gz
37
+
38
+ ENV JAVA_HOME=/opt/jdk-25
39
+ ENV PATH=$JAVA_HOME/bin:$PATH
40
+
41
+ # for deepsurvey
42
+ RUN pip install hydra-core && \
43
+ pip install rich && \
44
+ pip install loguru && \
45
+ pip install tenacity && \
46
+ pip install -U sentence-transformers && \
47
+ pip install hdbscan && \
48
+
49
+ ENV HF_ENDPOINT=https://hf-mirror.com
50
+ # Download models and update the configuration file
51
+ RUN /bin/bash -c "mineru-models-download -s huggingface -m all"
52
+
53
+ # Set the entry point to activate the virtual environment and run the command line tool
54
+ ENTRYPOINT ["/bin/bash", "-c", "export MINERU_MODEL_SOURCE=local && exec \"$@\"", "--"]
@@ -0,0 +1,350 @@
1
+ # Deep Survey
2
+
3
+ Deep Survey is an automated academic survey generation pipeline. Given a research topic, it collects related papers, expands the paper set through references and citations, reads and analyzes papers with LLMs, clusters related work, optionally builds relation/code analysis artifacts, generates a survey draft, revises it, refines citations, and optionally evaluates the final survey.
4
+
5
+ ## Repository layout
6
+
7
+ ```text
8
+ .
9
+ ├── Dockerfile # Container environment for Deep Survey and MinerU
10
+ ├── config/ # Hydra/YAML runtime configurations
11
+ │ ├── evaluation/ # Evaluation experiment configs
12
+ │ └── *.yaml # Default and task-specific configs
13
+ ├── scripts/ # Main runnable entry points
14
+ ├── modules/ # Core pipeline modules
15
+ ├── utils/ # API, logging, file, PDF, markdown and helper utilities
16
+ ├── topics/ # Topic lists and benchmark topic definitions
17
+ ├── baselines/ # Baseline systems and baseline outputs
18
+ ├── tests/ # Development tests and scratch files
19
+ ├── logs/ # Runtime logs, ignored by git
20
+ ├── outputs/ # Generated surveys and artifacts, ignored by git
21
+ └── database/ # Local paper/cache/database artifacts, ignored by git
22
+ ```
23
+
24
+ `logs/`, `outputs/`, and `database/` are generated/runtime directories and are ignored by git. The `logs/` directory can usually be ignored when reading the codebase.
25
+
26
+ ## Pipeline overview
27
+
28
+ The main Deep Survey pipeline follows these stages:
29
+
30
+ 1. Related work collection
31
+ - Searches seed papers for the target topic.
32
+ - Expands papers through references and citations.
33
+ - Can use local graph/cache data when configured.
34
+ 2. Paper database construction
35
+ - Builds an embedding/database view over collected papers.
36
+ 3. Paper comprehension
37
+ - Reads papers or abstracts.
38
+ - Writes reusable paper keynotes into cache.
39
+ 4. Clustering and analysis
40
+ - Clusters related papers.
41
+ - Optionally performs intra-cluster and inter-cluster analysis.
42
+ - Optionally generates relation graphs and relation tables.
43
+ 5. Optional code/environment report generation
44
+ - Collects and analyzes code repositories linked to papers.
45
+ - Generates code and environment reports when enabled.
46
+ 6. Survey generation
47
+ - Generates an outline.
48
+ - Drafts sections/subsections.
49
+ - Reviews and revises the draft.
50
+ - Refines final paper text and references.
51
+ 7. Optional evaluation
52
+ - Evaluates generated survey quality and citation quality when enabled.
53
+
54
+ ## Core modules
55
+
56
+ - `modules/work_collector.py`: collects seed papers and expands them via references/citations.
57
+ - `modules/database.py`: builds retrieval databases over collected papers.
58
+ - `modules/work_analyzer.py`: reads papers, extracts keynotes, clusters papers, and performs relation/cluster analysis.
59
+ - `modules/survey_generator.py`: generates outlines, drafts survey sections, reviews/revises drafts, and saves final survey outputs.
60
+ - `modules/judge.py`: evaluates survey outputs when evaluation is enabled.
61
+ - `modules/code_collector.py`: collects code repository information.
62
+ - `modules/code_report_generator.py`: generates code/environment reports from collected repositories.
63
+ - `modules/paper_graph_retriever.py`: retrieves papers from local graph/database resources.
64
+
65
+ ## Important scripts
66
+
67
+ ### Single-topic Hydra entry point
68
+
69
+ ```bash
70
+ python3 scripts/run_deep_survey.py
71
+ ```
72
+
73
+ This uses Hydra with the default config declared in the script:
74
+
75
+ ```text
76
+ config/deep_survey_fast.yaml
77
+ ```
78
+
79
+ You can override Hydra config values from the command line, for example:
80
+
81
+ ```bash
82
+ python3 scripts/run_deep_survey.py BasicInfo.topic="Graph Neural Networks"
83
+ ```
84
+
85
+ ### Batch entry point with explicit YAML config
86
+
87
+ ```bash
88
+ python3 scripts/run_deep_survey_batch_arg.py --config ./config/personal/deep_survey_batch_0514.yaml
89
+ ```
90
+
91
+ This is the most explicit batch runner. It reads a YAML file, loads topics according to `BasicInfo`, and runs the pipeline for each topic. For example, `config/personal/deep_survey_batch_0514.yaml` uses:
92
+
93
+ - `BasicInfo.user_defiend_benchmarks: True`
94
+ - `BasicInfo.topic_path: ./topics/human_compare_topics.txt`
95
+ - `BasicInfo.output_base_dir: ./outputs/0514_mimo_pro_human_test`
96
+ - `BasicInfo.skip_exist: True`
97
+
98
+ ### Adapter entry point
99
+
100
+ ```bash
101
+ python3 scripts/run_deep_survey_adapter.py --workspace /workspace --config /workspace/config/runtime.yaml
102
+ ```
103
+
104
+ The adapter is designed for external orchestration. It writes standardized artifacts such as:
105
+
106
+ ```text
107
+ /workspace/survey/output/survey.md
108
+ /workspace/survey/output/survey.json
109
+ /workspace/survey/output/evaluation.txt
110
+ /workspace/logs/relation_graph.json
111
+ /workspace/logs/relation_table.json
112
+ /workspace/logs/clustering_result.json
113
+ /workspace/logs/draft.json
114
+ /workspace/logs/deep_survey.log
115
+ ```
116
+
117
+ ### Baseline evaluation
118
+
119
+ ```bash
120
+ python3 scripts/baseline_evaluation.py
121
+ ```
122
+
123
+ This script evaluates outputs from Deep Survey and baseline systems such as AutoSurvey, SurveyForge, LiRA, and human-written surveys according to the configured benchmark/evaluation settings.
124
+
125
+ ### Other utility scripts
126
+
127
+ - `scripts/run_keynotes_gen.py`: pre-generate paper keynotes.
128
+ - `scripts/run_work_clusters.py`: run work clustering utilities.
129
+ - `scripts/memory_monitor.sh`: monitor memory usage during long-running jobs.
130
+ - `scripts/run_model_ablation.sh`: run model ablation experiments.
131
+
132
+ ## Configuration
133
+
134
+ Configurations live under `config/`. The common top-level sections are:
135
+
136
+ ```yaml
137
+ BasicInfo:
138
+ topic: ""
139
+ topic_path: ./topics/human_compare_topics.txt
140
+ output_base_dir: ./outputs/example
141
+ cache_path: ./database
142
+ topic_max_retry: 5
143
+ skip_exist: True
144
+
145
+ APIInfo:
146
+ llm_api_key: "..."
147
+ llm_api_base_url: "..."
148
+ llm_model_name: "..."
149
+ # Required for OpenAlex literature retrieval; do not commit the literal key.
150
+ openalex_api_key: "${oc.env:OPENALEX_API_KEY,''}"
151
+ batch_chat_agent_worker: 2
152
+ chat_timeout: 3600
153
+ batch_chat_timeout: 1800
154
+
155
+ ModuleInfo:
156
+ WorkCollector:
157
+ max_seed_paper_num: 15
158
+ reference_graph_depth: 1
159
+ WorkAnalyzer:
160
+ abstract_only_mode: False
161
+ paper_reading_max_retry: 6
162
+ SurveyGenerator:
163
+ include_initial_analysis: True
164
+ include_relation_graph: False
165
+ include_relation_table: False
166
+ include_code_report: False
167
+ enable_review_and_revise: True
168
+ Judge:
169
+ skip_evaluation: True
170
+ ```
171
+
172
+ Before running experiments, check at least these fields:
173
+
174
+ - `BasicInfo.topic` or `BasicInfo.topic_path`
175
+ - `BasicInfo.output_base_dir`
176
+ - `BasicInfo.cache_path`
177
+ - `APIInfo.llm_api_key`
178
+ - `APIInfo.llm_api_base_url`
179
+ - `APIInfo.llm_model_name`
180
+ - `APIInfo.openalex_api_key` (or the `OPENALEX_API_KEY` environment variable)
181
+ - `APIInfo.batch_chat_agent_worker`
182
+ - `ModuleInfo.Judge.skip_evaluation`
183
+
184
+ Avoid committing real API keys. Prefer using environment variables or local-only config files for secrets.
185
+
186
+ ## Topics
187
+
188
+ Topic lists are stored in `topics/`. Batch runs can use:
189
+
190
+ ```yaml
191
+ BasicInfo:
192
+ user_defiend_benchmarks: True
193
+ topic_path: ./topics/human_compare_topics.txt
194
+ ```
195
+
196
+ Benchmark topic dictionaries are defined in:
197
+
198
+ ```text
199
+ topics/Benchmark_topics.py
200
+ ```
201
+
202
+ Relevant switches include:
203
+
204
+ - `BasicInfo.AutoSurvey_benchmark`
205
+ - `BasicInfo.SurveyGen_benchmark`
206
+ - `BasicInfo.sub_benchmark_test`
207
+ - `BasicInfo.user_defiend_benchmarks`
208
+
209
+ ## Outputs
210
+
211
+ Generated files are typically written under `BasicInfo.output_base_dir`. A batch run stores per-domain/per-topic results and may produce:
212
+
213
+ - Markdown survey files
214
+ - JSON survey files with paper text and references
215
+ - Evaluation result files
216
+ - Analysis artifacts such as clustering results, relation graphs, relation tables, draft files, code reports, and environment reports
217
+
218
+ The exact outputs depend on `ModuleInfo.SurveyGenerator` and `ModuleInfo.Judge` switches.
219
+
220
+ ## Docker environment
221
+
222
+ The repository includes a Dockerfile at `Dockerfile`. It is the intended environment configuration for Deep Survey and PDF parsing utilities.
223
+
224
+ The image is based on:
225
+
226
+ ```dockerfile
227
+ FROM vllm/vllm-openai:v0.10.1.1
228
+ ```
229
+
230
+ It installs:
231
+
232
+ - Noto fonts and fontconfig for Chinese text rendering
233
+ - `libgl1` for OpenCV support
234
+ - `mineru[core]` for PDF parsing
235
+ - `hydra-core`, `asciinet`, `tenacity`, `trafilatura`, `readability-lxml`, `html2text`
236
+ - OpenJDK 25
237
+ - `rich`, `loguru`, `sentence-transformers`, `hdbscan`
238
+
239
+ It also sets:
240
+
241
+ ```dockerfile
242
+ ENV HF_ENDPOINT=https://hf-mirror.com
243
+ ENTRYPOINT ["/bin/bash", "-c", "export MINERU_MODEL_SOURCE=local && exec \"$@\"", "--"]
244
+ ```
245
+
246
+ and downloads MinerU models during image build:
247
+
248
+ ```bash
249
+ mineru-models-download -s huggingface -m all
250
+ ```
251
+
252
+ Build example:
253
+
254
+ ```bash
255
+ docker build -t deep-survey:latest .
256
+ ```
257
+
258
+ Run example:
259
+
260
+ ```bash
261
+ docker run --gpus all --rm -it \
262
+ -v /path/to/deep-survey:/workspace/deep-survey \
263
+ -w /workspace/deep-survey \
264
+ deep-survey:latest \
265
+ python3 scripts/run_deep_survey_batch_arg.py --config ./config/personal/deep_survey_batch_0514.yaml
266
+ ```
267
+
268
+ If building fails around the final Python package installation block, check the trailing shell continuation after `pip install hdbscan`. The last command in a chained `RUN` block should not leave a dangling `&& \` before the next Docker instruction.
269
+
270
+ ## PDF and MinerU utilities
271
+
272
+ PDF/markdown related utilities are under `utils/`, especially:
273
+
274
+ ```text
275
+ utils/mineru_utils.py
276
+ utils/convert_to_md.py
277
+ utils/html_utils.py
278
+ ```
279
+
280
+ `utils/mineru_utils.py` contains MinerU-based parsing helpers for converting PDFs into markdown-like outputs. The Dockerfile installs MinerU and pre-downloads its models so PDF parsing can run with local MinerU model sources.
281
+
282
+ ## Recommended run patterns
283
+
284
+ ### Foreground run
285
+
286
+ ```bash
287
+ CUDA_VISIBLE_DEVICES=0 python3 scripts/run_deep_survey_batch_arg.py \
288
+ --config ./config/personal/deep_survey_batch_0514.yaml
289
+ ```
290
+
291
+ ### Background run with log capture
292
+
293
+ ```bash
294
+ mkdir -p logs
295
+ nohup bash -lc 'CUDA_VISIBLE_DEVICES=0 python3 scripts/run_deep_survey_batch_arg.py --config ./config/personal/deep_survey_batch_0514.yaml' \
296
+ > ./logs/deep_survey_batch.log 2>&1 &
297
+ ```
298
+
299
+ ### Memory monitoring
300
+
301
+ ```bash
302
+ bash scripts/memory_monitor.sh
303
+ ```
304
+
305
+ For long experiments on remote/HPC machines, prefer using `tmux`, `screen`, or a job scheduler so the process is not interrupted by SSH session disconnection.
306
+
307
+ ## Troubleshooting
308
+
309
+ ### `Killed`
310
+
311
+ `Killed` can be caused by OOM, scheduler limits, or external signals. Check:
312
+
313
+ - system/job scheduler logs
314
+ - shell/session disconnection
315
+ - memory logs
316
+ - GPU/CPU memory usage
317
+ - custom signal traps if enabled
318
+
319
+ ### `ProxyError` or API timeout
320
+
321
+ In this project, repeated `ProxyError` can also indicate upstream API timeout, connection reset, gateway failure, or too much concurrent traffic. Consider reducing:
322
+
323
+ ```yaml
324
+ APIInfo:
325
+ batch_chat_agent_worker: 1
326
+ low_flow_mode: True
327
+ low_flow_latency: 2
328
+ exponential_backoff: True
329
+ ```
330
+
331
+ ### Hugging Face network issues
332
+
333
+ The Dockerfile sets:
334
+
335
+ ```bash
336
+ HF_ENDPOINT=https://hf-mirror.com
337
+ ```
338
+
339
+ If the environment cannot access Hugging Face, use a mirror, pre-download models, or configure offline cache paths.
340
+
341
+ ### Logs directory
342
+
343
+ `logs/` is runtime-only and ignored by git. It is useful for debugging local runs but should not be treated as source code.
344
+
345
+ ## Development notes
346
+
347
+ - The codebase is Python-based and uses Hydra/OmegaConf-style YAML configs.
348
+ - Most modules are initialized from the selected config, so behavior is usually controlled by YAML rather than command-line flags.
349
+ - Long-running batch jobs depend heavily on API stability, retry settings, and concurrency settings.
350
+ - Generated caches under `database/` can speed up later runs but are not source files.
@@ -0,0 +1,217 @@
1
+ BasicInfo:
2
+ topic: Multimodal Large Language Models
3
+ base_dir: ./outputs
4
+ cache_path: ./database
5
+ save_path: ./outputs/test/survey.md
6
+ save_json_path: ./outputs/test/survey.json
7
+ evaluation_save_path: ./outputs/test/eval.txt
8
+ debug: True
9
+ error_conservatism_mode: False
10
+ skip_exist: True
11
+ adapter_mode: False
12
+ APIInfo:
13
+ llm_provider: qwen
14
+ llm_api_key: "${oc.env:DASHSCOPE_API_KEY,''}"
15
+ llm_api_base_url: "${oc.env:DASHSCOPE_BASE_URL,'https://dashscope.aliyuncs.com/compatible-mode/v1'}"
16
+ llm_model_name: qwen3.6-flash
17
+ llm_max_context_length: 880000
18
+ use_stream_mode: False
19
+ batch_chat_agent_worker: 4
20
+ chat_timeout: 600
21
+ batch_chat_timeout: 1800
22
+ openalex_api_key: "${oc.env:OPENALEX_API_KEY,''}"
23
+ semantic_scholar_api_key:
24
+ low_flow_mode: False
25
+ low_flow_latency: 0
26
+ exponential_backoff: True
27
+ exponential_backoff_time: 1
28
+ exponential_backoff_max_time: 60
29
+ arxiv_api_max_retry: 3
30
+ semantic_scholar_api_max_retry: 3
31
+ ModuleInfo:
32
+ WorkCollector:
33
+ download_safe_mode: False
34
+ download_timeout: 60
35
+ download_in_parallel: True
36
+ download_parallel_workers: 4
37
+ pdf_parse_batch_size: 1
38
+ fulltext_per_host_concurrency: 2
39
+ fulltext_access_context_generation: "anonymous-v1"
40
+ fulltext_provenance_enabled: true
41
+ cache_enabled: True
42
+ # OpenAlex is the literature-discovery provider; do not emit arXiv lanes.
43
+ enable_arxiv_discovery: false
44
+ max_seed_paper_num: 18
45
+ use_seed_filter_LLM: True
46
+ LLM_seed_threshold: 4
47
+ reference_graph_depth: 1
48
+ sentence_transformer_model: sentence-transformers/all-MiniLM-L6-v2
49
+ sentence_transformer_batch_size: 32
50
+ expand_in_local_paper_graph: True
51
+ use_ds_when_graph_fail: True
52
+ advanced_filter_in_local_paper_graph_expansion: True
53
+ related_work_top_k: 30 # for debug
54
+ log_related_work_num: -1 # set to -1 to log all
55
+ related_work_threshold: 0.5
56
+ related_work_threshold_for_llm: 4 # 1-5 scale
57
+ relatedness_temperature: 1.0
58
+ RAG_source_use_embedding_filter: True
59
+ RAG_source_use_LLM_filter: False
60
+ RAG_source_downloadable_only: False
61
+ enable_fulltext_expanded_promotion: true
62
+ expanded_fulltext_promotion_candidate_multiplier: 2
63
+ expanded_fulltext_promotion_max_candidates_per_sh: 40
64
+ Database:
65
+ default_top_k: 20
66
+ PaperGraphRetriever:
67
+ db_path: data/processed/graph.db
68
+ WorkAnalyzer:
69
+ abstract_only_mode: False
70
+ cache_enabled: True
71
+ # Citation-expanded papers can be promoted only after the complete-section
72
+ # reader succeeds; local graph keynotes cannot prove that condition.
73
+ use_local_paper_graph_keynotes: false
74
+ use_ds_keynotes_when_graph_fail: True
75
+ graph_keynote_extraction_batch_retry: 7
76
+ graph_graph_keynote_extraction_temperature: 0.1
77
+ paper_reading_temperature: 1.0
78
+ paper_reading_max_retry: 5
79
+ llm_max_context_overhead_length_in_paper_reading: 20000
80
+ clustering_batch_size: 16
81
+ clustering_temperature: 0.5
82
+ clustering_in_steps: True
83
+ clustering_batch_size_in_creation: 6
84
+ clustering_batch_size_in_assignment: 8
85
+ cluster_assign_fast_mode: True
86
+ paper_clustering_max_retry: 10
87
+ paper_clustering_creation_max_retry: 3
88
+ paper_clustering_assignment_max_retry: 10
89
+ propose_question_temperature: 1.0
90
+ anwer_question_temperature: 1.0
91
+ intra_cluster_analysis_max_retry: 10
92
+ intra_cluster_analysis_temperature: 1.0
93
+ intra_clustering_probelm_proposing_max_retry: 10
94
+ SurveyGenerator:
95
+ include_initial_analysis: False
96
+ include_relation_graph: True
97
+ include_relation_table: True
98
+ include_code_report: False
99
+ include_env_report: False
100
+ omit_error_preserve_retry_time: 2
101
+ outline_generation_in_steps: True
102
+ outline_generation_draft_max_retry: 3
103
+ outline_generation_draft_batch_size: 20
104
+ outline_generation_draft_max_iterations: 5
105
+ outline_generation_draft_empty_keynotes_iteration: 1
106
+ outline_draft_RAG_topk: 60
107
+ outline_generation_assign_max_retry: 10
108
+ outline_generation_assign_batch_size: 10
109
+ outline_assign_RAG_topk: 20
110
+ outline_assign_fast_mode: True
111
+ outline_generation_temperature: 0.5
112
+ # Outline prompts use a compact SH-plan projection and must fit before a
113
+ # request is sent; never rely on request-layer prefix truncation.
114
+ outline_prompt_max_input_tokens: 160000
115
+ outline_max_output_tokens: 16000
116
+ outline_evidence_plan_max_input_tokens: 100000
117
+ outline_current_outline_max_input_tokens: 20000
118
+ outline_keynotes_max_input_tokens: 70000
119
+ outline_analysis_max_input_tokens: 12000
120
+ outline_rag_max_input_tokens: 12000
121
+ outline_repair_previous_response_max_input_tokens: 8000
122
+ outline_repair_current_outline_max_input_tokens: 8000
123
+ # The outline sees a SH-covering representative set. Assignment still
124
+ # considers every admitted paper after the outline shape is fixed.
125
+ outline_representative_papers_per_sh: 4
126
+ outline_representative_max_papers: 30
127
+ outline_representative_include_context_papers: true
128
+ # Whole-survey contract. Per-section/subsection prompts are derived from
129
+ # the accepted outline; the 33.3k/40k total budget permits up to 2k words
130
+ # per subsection for the target outline.
131
+ survey_target_words: 32000
132
+ survey_max_words: 40000
133
+ writing_max_papers_per_sh: 20
134
+ outline_min_sections: 5
135
+ outline_target_sections: 6
136
+ outline_max_sections: 7
137
+ outline_min_subsections_per_section: 1
138
+ outline_target_subsections_per_section: 3
139
+ outline_max_subsections_per_section: 3
140
+ subsection_target_min_words: 875
141
+ subsection_target_max_words: 2000
142
+ subsection_target_citations: 3
143
+ subsection_max_citations: 5
144
+ section_preamble_target_words: 250
145
+ section_preamble_max_words: 400
146
+ section_preamble_target_citations: 1
147
+ section_preamble_max_citations: 2
148
+ outline_generation_batch_size: 16
149
+ outline_generation_max_retry: 3
150
+ outline_generation_max_retry_in_generation_loop: 6
151
+ subsection_draft_temperature: 1.0
152
+ subsection_draft_max_retry: 5
153
+ # Temporary operational bypass: keep visible citation checks, but do not
154
+ # block drafting on LLM-generated claim-trace metadata.
155
+ claim_trace_validation_enabled: false
156
+ claim_trace_repair_max_attempts: 2
157
+ claim_trace_repair_max_output_tokens: 2048
158
+ section_draft_max_retry: 5
159
+ always_omit_error_in_draft_validation: True
160
+ section_draft_temperature: 1.0
161
+ draft_refinement_temperature: 1.0
162
+ section_draft_max_error_info_length: 500
163
+ subsection_draft_max_error_info_length: 500
164
+ outline_max_error_info_length: 500
165
+ llm_max_context_overhead_length_generation: 20000
166
+ llm_max_context_overhead_length_outline_generation: 10000
167
+ # Legacy keys retained for external overrides; new drafting uses the
168
+ # whole-survey budget above rather than these per-unit hard minima.
169
+ subsection_least_words: 875
170
+ subsection_least_citations: 3
171
+ section_least_words: 4250
172
+ section_preamble_least_words: 250
173
+ section_preamble_least_citations: 3
174
+ draft_length_relax_ratio: 0.1
175
+ use_full_text_in_survey_generation: False
176
+ include_other_relevant_papers_RAG_in_outline: True
177
+ outline_RAG_topk: 200
178
+ include_other_relevant_papers_RAG: True
179
+ section_RAG_topk: 60
180
+ subsection_RAG_topk: 60
181
+ use_title_in_draft: True
182
+ enable_review_and_revise: True
183
+ agentic_refine_section: True
184
+ section_review_temperature: 1.0
185
+ section_review_retry: 3
186
+ reviewer_max_suggestions: 5
187
+ section_revision_RAG_topk: 30
188
+ section_revise_temperature: 0.5
189
+ section_revise_retry: 5
190
+ no_suggestion_run_each_iteration: 1
191
+ max_review_revise_iterations: 5
192
+ revise_section_in_parallel: 1
193
+ draft_refinement_in_parts: True
194
+ refine_in_parts_mode: 2
195
+ draft_refinement_max_retry: 7
196
+ review_and_revise_whole_survey_in_refinement: True
197
+ agentic_refine_survey: True
198
+ review_and_revise_whole_survey_max_iteration: 5
199
+ valid_title_min_similarity: 0.5
200
+ CodeAnalysis:
201
+ PseudoCreator:
202
+ planner_temperature: 0.5
203
+ planner_max_retry: 3
204
+ Judge:
205
+ skip_evaluation: False
206
+ use_different_api_for_judge: False
207
+ model: qwen3.7-plus
208
+ judge_llm_api_key:
209
+ judge_llm_api_base_url:
210
+ nli_temperature: 0.1
211
+ citation_quality_threshold: 0.5
212
+ remove_failed_citation_in_eval: True
213
+ rubrics_eval_10_dimensions: True
214
+ rubrics_eval_4_dimensions: False
215
+ rubrics_deep_survey_eval: False
216
+ explanation_in_rubric: True
217
+ citation_eval: False