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.
- qwen_sci-0.2.2.dist-info/METADATA +492 -0
- qwen_sci-0.2.2.dist-info/RECORD +549 -0
- qwen_sci-0.2.2.dist-info/WHEEL +4 -0
- qwen_sci-0.2.2.dist-info/entry_points.txt +6 -0
- qwen_sci-0.2.2.dist-info/licenses/LICENSE +21 -0
- src/1.txt +1 -0
- src/__init__.py +1 -0
- src/__main__.py +5 -0
- src/agents/__init__.py +1 -0
- src/agents/experiment_design_agent/__init__.py +268 -0
- src/agents/experiment_design_agent/artifacts.py +747 -0
- src/agents/experiment_design_agent/cache.py +319 -0
- src/agents/experiment_design_agent/completeness.py +130 -0
- src/agents/experiment_design_agent/contracts.py +771 -0
- src/agents/experiment_design_agent/counterexample_analyzer.py +187 -0
- src/agents/experiment_design_agent/design_evidence_paper_screener.py +470 -0
- src/agents/experiment_design_agent/discipline_catalog.py +178 -0
- src/agents/experiment_design_agent/evidence_cards.py +338 -0
- src/agents/experiment_design_agent/evidence_planner.py +452 -0
- src/agents/experiment_design_agent/formal_reasoning_planner.py +884 -0
- src/agents/experiment_design_agent/fulltext_acquisition.py +863 -0
- src/agents/experiment_design_agent/idea_adapter.py +100 -0
- src/agents/experiment_design_agent/idea_intake.py +87 -0
- src/agents/experiment_design_agent/llm_json.py +328 -0
- src/agents/experiment_design_agent/orchestrator.py +1220 -0
- src/agents/experiment_design_agent/reasoning_context.py +183 -0
- src/agents/experiment_design_agent/reasoning_validation.py +546 -0
- src/agents/experiment_design_agent/run.py +481 -0
- src/agents/experiment_design_agent/run_logging.py +292 -0
- src/agents/experiment_design_agent/scope_gate.py +198 -0
- src/agents/experiment_design_agent/study_type_composer.py +1360 -0
- src/agents/experiment_design_agent/survey_evidence.py +1381 -0
- src/agents/experiment_design_agent/template_router.py +195 -0
- src/agents/experiment_design_agent/variable_claim_extractor.py +93 -0
- src/agents/idea_agent/__init__.py +1 -0
- src/agents/idea_agent/agent/__init__.py +6 -0
- src/agents/idea_agent/agent/artifacts.py +308 -0
- src/agents/idea_agent/agent/base.py +122 -0
- src/agents/idea_agent/agent/ligagent.py +488 -0
- src/agents/idea_agent/agent/mcts.py +2060 -0
- src/agents/idea_agent/agent/prompts/__init__.py +48 -0
- src/agents/idea_agent/agent/prompts/advanced_analysis.py +235 -0
- src/agents/idea_agent/agent/prompts/algorithm_alignment.py +55 -0
- src/agents/idea_agent/agent/prompts/algorithm_structuring.py +48 -0
- src/agents/idea_agent/agent/prompts/component_extraction.py +62 -0
- src/agents/idea_agent/agent/prompts/component_novelty_evaluation.py +54 -0
- src/agents/idea_agent/agent/prompts/experiment_findings_extraction.py +39 -0
- src/agents/idea_agent/agent/prompts/idea_fusion.py +295 -0
- src/agents/idea_agent/agent/prompts/idea_introduction.py +30 -0
- src/agents/idea_agent/agent/prompts/idea_result_alignment.py +39 -0
- src/agents/idea_agent/agent/prompts/input_interpreter.py +52 -0
- src/agents/idea_agent/agent/prompts/keynote_ops.py +78 -0
- src/agents/idea_agent/agent/prompts/mcts_evaluation.py +235 -0
- src/agents/idea_agent/agent/prompts/mcts_generation.py +140 -0
- src/agents/idea_agent/agent/prompts/mechanism_commit_query.py +99 -0
- src/agents/idea_agent/agent/prompts/memory_selection.py +0 -0
- src/agents/idea_agent/agent/prompts/prompt_modes.py +16 -0
- src/agents/idea_agent/agent/prompts/rag_query.py +34 -0
- src/agents/idea_agent/agent/prompts/re_analysis_replan.py +48 -0
- src/agents/idea_agent/agent/prompts/reference_grounding.py +34 -0
- src/agents/idea_agent/agent/prompts/root_domain_classification.py +32 -0
- src/agents/idea_agent/agent/prompts/scientific_debate.py +88 -0
- src/agents/idea_agent/agent/prompts/scientific_materialization.py +45 -0
- src/agents/idea_agent/agent/prompts/skill_instantiation.py +193 -0
- src/agents/idea_agent/agent/prompts/theory_transfer_query.py +93 -0
- src/agents/idea_agent/agent/prompts/topic_background.py +15 -0
- src/agents/idea_agent/agent/skills/DEFAULT_SKILL_TEMPLATES.json +263 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/SKILL.md +40 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/alternative-path-contrast/references/contrast_patterns.md +22 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/SKILL.md +40 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/feedback-closed-loop/references/mechanism_cards.md +24 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/SKILL.md +39 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/hierarchical-decomposition/references/hierarchy_patterns.md +22 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/SKILL.md +39 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/mechanism-commit-innovation/references/mechanism_commit_patterns.md +24 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/SKILL.md +39 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/multi-scale-coordinator/references/coordination_patterns.md +22 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/SKILL.md +41 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/speculative-execution-with-repair/references/speculation_patterns.md +22 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/SKILL.md +39 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/surgical-modularity/references/modularity_patterns.md +22 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/SKILL.md +40 -0
- src/agents/idea_agent/agent/skills/edit_operator_skills/theory-transfer-injection/references/transfer_patterns.md +24 -0
- src/agents/idea_agent/example/idea_result.json +900 -0
- src/agents/idea_agent/run.py +276 -0
- src/agents/idea_agent/tests/test_advanced_analysis_contract.py +90 -0
- src/agents/idea_agent/tests/test_gap_hypothesis_bridge.py +166 -0
- src/agents/idea_agent/tests/test_idea_debate.py +480 -0
- src/agents/idea_agent/tests/test_idea_result_v5.py +99 -0
- src/agents/idea_agent/tests/test_idea_synthesis.py +92 -0
- src/agents/idea_agent/tests/test_mature_idea_sources.py +27 -0
- src/agents/idea_agent/tests/test_multimodal_idea_integration.py +386 -0
- src/agents/idea_agent/tests/test_profile_materialization_and_scoring.py +219 -0
- src/agents/idea_agent/tests/test_profile_native_skill_rendering.py +122 -0
- src/agents/idea_agent/tests/test_result_persistence.py +183 -0
- src/agents/idea_agent/tests/test_scientific_intervention_profiles.py +241 -0
- src/agents/idea_agent/tests/test_scientific_rubric_and_prompts.py +559 -0
- src/agents/idea_agent/tests/test_strict_json_object_responses.py +48 -0
- src/agents/idea_agent/utils/core/__init__.py +1 -0
- src/agents/idea_agent/utils/core/ablation_inputs.py +60 -0
- src/agents/idea_agent/utils/core/chat_errors.py +95 -0
- src/agents/idea_agent/utils/core/chat_router.py +130 -0
- src/agents/idea_agent/utils/core/chat_transport.py +188 -0
- src/agents/idea_agent/utils/core/config_loader.py +166 -0
- src/agents/idea_agent/utils/core/json_utils.py +28 -0
- src/agents/idea_agent/utils/core/logger.py +287 -0
- src/agents/idea_agent/utils/core/progress.py +58 -0
- src/agents/idea_agent/utils/core/response_parsing.py +57 -0
- src/agents/idea_agent/utils/core/run_inputs.py +198 -0
- src/agents/idea_agent/utils/mcts/__init__.py +1 -0
- src/agents/idea_agent/utils/mcts/component_novelty.py +342 -0
- src/agents/idea_agent/utils/mcts/defect_registry.py +302 -0
- src/agents/idea_agent/utils/mcts/idea_routes.py +61 -0
- src/agents/idea_agent/utils/mcts/idea_taste_presets.py +312 -0
- src/agents/idea_agent/utils/mcts/mcts_helpers.py +738 -0
- src/agents/idea_agent/utils/mcts/mcts_runtime.py +3000 -0
- src/agents/idea_agent/utils/mcts/scientific_intervention_ontology.py +1561 -0
- src/agents/idea_agent/utils/mcts/scientific_rubric.py +211 -0
- src/agents/idea_agent/utils/mcts/skill_parsing.py +92 -0
- src/agents/idea_agent/utils/papers/__init__.py +1 -0
- src/agents/idea_agent/utils/papers/paper_graph_vector_store.py +499 -0
- src/agents/idea_agent/utils/papers/paper_repository.py +372 -0
- src/agents/idea_agent/utils/prompting/__init__.py +1 -0
- src/agents/idea_agent/utils/prompting/prompt_views.py +637 -0
- src/agents/idea_agent/utils/workflow/__init__.py +1 -0
- src/agents/idea_agent/utils/workflow/advanced_analysis_contract.py +244 -0
- src/agents/idea_agent/utils/workflow/gap_hypothesis_bridge.py +461 -0
- src/agents/idea_agent/utils/workflow/idea_contract.py +426 -0
- src/agents/idea_agent/utils/workflow/idea_debate.py +1238 -0
- src/agents/idea_agent/utils/workflow/idea_diversity.py +163 -0
- src/agents/idea_agent/utils/workflow/idea_fusion.py +889 -0
- src/agents/idea_agent/utils/workflow/idea_helpers.py +478 -0
- src/agents/idea_agent/utils/workflow/idea_portfolio.py +422 -0
- src/agents/idea_agent/utils/workflow/idea_synthesis.py +482 -0
- src/agents/idea_agent/utils/workflow/ligagent_flow.py +581 -0
- src/agents/idea_agent/utils/workflow/ligagent_handlers.py +1836 -0
- src/agents/idea_agent/utils/workflow/ligagent_helpers.py +1331 -0
- src/agents/idea_agent/utils/workflow/ligagent_utils.py +322 -0
- src/agents/idea_agent/utils/workflow/mature_idea_sources.py +648 -0
- src/agents/idea_agent/utils/workflow/multimodal_data_anchoring.py +578 -0
- src/agents/idea_agent/utils/workflow/result_persistence.py +774 -0
- src/agents/idea_agent/utils/workflow/stage_contract.py +76 -0
- src/agents/idea_agent/utils/workflow/workflow_runtime.py +288 -0
- src/agents/research_plan_author/__init__.py +50 -0
- src/agents/research_plan_author/artifacts.py +270 -0
- src/agents/research_plan_author/authoring_blueprint.py +1246 -0
- src/agents/research_plan_author/bibtex_renderer.py +252 -0
- src/agents/research_plan_author/contract_repair.py +131 -0
- src/agents/research_plan_author/contracts.py +745 -0
- src/agents/research_plan_author/cross_section_editor.py +232 -0
- src/agents/research_plan_author/document_quality.py +987 -0
- src/agents/research_plan_author/idea_evolution.py +223 -0
- src/agents/research_plan_author/input_loader.py +76 -0
- src/agents/research_plan_author/latex_compiler.py +260 -0
- src/agents/research_plan_author/latex_safety.py +159 -0
- src/agents/research_plan_author/llm_json.py +74 -0
- src/agents/research_plan_author/markdown_renderer.py +275 -0
- src/agents/research_plan_author/pdf_validator.py +149 -0
- src/agents/research_plan_author/render.py +166 -0
- src/agents/research_plan_author/render_artifacts.py +187 -0
- src/agents/research_plan_author/run.py +765 -0
- src/agents/research_plan_author/run_logging.py +209 -0
- src/agents/research_plan_author/section_cache.py +184 -0
- src/agents/research_plan_author/section_composer.py +1764 -0
- src/agents/research_plan_author/section_router.py +209 -0
- src/agents/research_plan_author/semantic_validator.py +254 -0
- src/agents/research_plan_author/source_bundle.py +46 -0
- src/agents/research_plan_author/source_registry.py +208 -0
- src/agents/research_plan_author/survey_source_loader.py +137 -0
- src/agents/research_plan_author/template_adapter.py +173 -0
- src/agents/research_plan_author/template_profile.py +204 -0
- src/agents/research_plan_author/tex_renderer.py +496 -0
- src/agents/research_plan_author/theory_presentation.py +134 -0
- src/agents/research_plan_author/theory_spine.py +703 -0
- src/agents/survey_agent/Dockerfile +54 -0
- src/agents/survey_agent/README.md +350 -0
- src/agents/survey_agent/config/deep_survey.yaml +217 -0
- src/agents/survey_agent/config/deep_survey_batch.yaml +176 -0
- src/agents/survey_agent/config/deep_survey_fast.yaml +183 -0
- src/agents/survey_agent/config/evaluate_baseline.yaml +197 -0
- src/agents/survey_agent/config/outcomeRAG.yaml +159 -0
- src/agents/survey_agent/env_report.md +348 -0
- src/agents/survey_agent/modules/__init__.py +0 -0
- src/agents/survey_agent/modules/code_collector.py +2194 -0
- src/agents/survey_agent/modules/code_report_generator.py +1282 -0
- src/agents/survey_agent/modules/data_manager.py +1713 -0
- src/agents/survey_agent/modules/database.py +167 -0
- src/agents/survey_agent/modules/fulltext_download_cache.py +462 -0
- src/agents/survey_agent/modules/fulltext_http.py +134 -0
- src/agents/survey_agent/modules/fulltext_resolution.py +749 -0
- src/agents/survey_agent/modules/judge.py +434 -0
- src/agents/survey_agent/modules/outcome_RAG.py +236 -0
- src/agents/survey_agent/modules/paper_graph_retriever.py +1075 -0
- src/agents/survey_agent/modules/pe.py +1729 -0
- src/agents/survey_agent/modules/pseudo_creator.py +782 -0
- src/agents/survey_agent/modules/pseudo_reviser.py +537 -0
- src/agents/survey_agent/modules/refine_agent.py +1952 -0
- src/agents/survey_agent/modules/survey_generator.py +5691 -0
- src/agents/survey_agent/modules/survey_visualizer.py +1817 -0
- src/agents/survey_agent/modules/visual_prompts.py +327 -0
- src/agents/survey_agent/modules/work_analyzer.py +2750 -0
- src/agents/survey_agent/modules/work_collector.py +5649 -0
- src/agents/survey_agent/scripts/baseline_evaluation.py +411 -0
- src/agents/survey_agent/scripts/run_deep_survey.py +224 -0
- src/agents/survey_agent/scripts/run_deep_survey_adapter.py +407 -0
- src/agents/survey_agent/scripts/run_deep_survey_adapter_with_input.py +409 -0
- src/agents/survey_agent/scripts/run_deep_survey_batch.py +228 -0
- src/agents/survey_agent/scripts/run_deep_survey_batch_arg.py +243 -0
- src/agents/survey_agent/scripts/run_deep_survey_batch_settings.py +218 -0
- src/agents/survey_agent/scripts/run_keynotes_gen.py +128 -0
- src/agents/survey_agent/scripts/run_work_clusters.py +140 -0
- src/agents/survey_agent/utils/__init__.py +0 -0
- src/agents/survey_agent/utils/ablation_utils.py +317 -0
- src/agents/survey_agent/utils/api_call.py +2518 -0
- src/agents/survey_agent/utils/chat_utils.py +82 -0
- src/agents/survey_agent/utils/config_utils.py +70 -0
- src/agents/survey_agent/utils/convert_to_md.py +29 -0
- src/agents/survey_agent/utils/err_info.py +24 -0
- src/agents/survey_agent/utils/file_utils.py +176 -0
- src/agents/survey_agent/utils/gpu_utils.py +145 -0
- src/agents/survey_agent/utils/graph_visualizer.py +279 -0
- src/agents/survey_agent/utils/html_utils.py +181 -0
- src/agents/survey_agent/utils/latex_generator_intra_cluster.py +529 -0
- src/agents/survey_agent/utils/latex_generator_relation_table.py +193 -0
- src/agents/survey_agent/utils/mineru_section_packer.py +334 -0
- src/agents/survey_agent/utils/mineru_utils.py +396 -0
- src/agents/survey_agent/utils/paper.py +144 -0
- src/agents/survey_agent/utils/read_yaml.py +15 -0
- src/agents/survey_agent/utils/repo_utils.py +167 -0
- src/agents/survey_agent/utils/rich_logger.py +77 -0
- src/agents/survey_agent/utils/step2v2.py +874 -0
- src/agents/survey_agent/utils/step2v2_extractor.py +856 -0
- src/agents/survey_agent/utils/topic_survey_storage.py +309 -0
- src/agents/survey_agent/utils/utils.py +118 -0
- src/agents/survey_agent/utils/work.py +2 -0
- src/cli.py +1611 -0
- src/config/__init__.py +213 -0
- src/config/default.yaml +1122 -0
- src/harness/LICENSE +21 -0
- src/harness/VENDORED.md +14 -0
- src/harness/src/__init__.py +0 -0
- src/harness/src/openharness/__init__.py +0 -0
- src/harness/src/openharness/__main__.py +6 -0
- src/harness/src/openharness/api/__init__.py +21 -0
- src/harness/src/openharness/api/client.py +281 -0
- src/harness/src/openharness/api/codex_client.py +407 -0
- src/harness/src/openharness/api/copilot_auth.py +240 -0
- src/harness/src/openharness/api/copilot_client.py +134 -0
- src/harness/src/openharness/api/errors.py +19 -0
- src/harness/src/openharness/api/openai_client.py +577 -0
- src/harness/src/openharness/api/provider.py +186 -0
- src/harness/src/openharness/api/registry.py +437 -0
- src/harness/src/openharness/api/usage.py +17 -0
- src/harness/src/openharness/auth/__init__.py +29 -0
- src/harness/src/openharness/auth/external.py +610 -0
- src/harness/src/openharness/auth/flows.py +189 -0
- src/harness/src/openharness/auth/manager.py +482 -0
- src/harness/src/openharness/auth/storage.py +269 -0
- src/harness/src/openharness/autopilot/__init__.py +23 -0
- src/harness/src/openharness/autopilot/service.py +2239 -0
- src/harness/src/openharness/autopilot/types.py +91 -0
- src/harness/src/openharness/bridge/__init__.py +20 -0
- src/harness/src/openharness/bridge/manager.py +106 -0
- src/harness/src/openharness/bridge/session_runner.py +46 -0
- src/harness/src/openharness/bridge/types.py +37 -0
- src/harness/src/openharness/bridge/work_secret.py +41 -0
- src/harness/src/openharness/channels/UPSTREAM +6 -0
- src/harness/src/openharness/channels/__init__.py +22 -0
- src/harness/src/openharness/channels/adapter.py +131 -0
- src/harness/src/openharness/channels/bus/__init__.py +6 -0
- src/harness/src/openharness/channels/bus/events.py +38 -0
- src/harness/src/openharness/channels/bus/queue.py +44 -0
- src/harness/src/openharness/channels/impl/__init__.py +6 -0
- src/harness/src/openharness/channels/impl/base.py +141 -0
- src/harness/src/openharness/channels/impl/dingtalk.py +445 -0
- src/harness/src/openharness/channels/impl/discord.py +311 -0
- src/harness/src/openharness/channels/impl/email.py +410 -0
- src/harness/src/openharness/channels/impl/feishu.py +1342 -0
- src/harness/src/openharness/channels/impl/manager.py +257 -0
- src/harness/src/openharness/channels/impl/matrix.py +700 -0
- src/harness/src/openharness/channels/impl/mochat.py +897 -0
- src/harness/src/openharness/channels/impl/qq.py +141 -0
- src/harness/src/openharness/channels/impl/slack.py +284 -0
- src/harness/src/openharness/channels/impl/telegram.py +525 -0
- src/harness/src/openharness/channels/impl/whatsapp.py +159 -0
- src/harness/src/openharness/cli.py +2551 -0
- src/harness/src/openharness/commands/__init__.py +21 -0
- src/harness/src/openharness/commands/registry.py +2783 -0
- src/harness/src/openharness/config/__init__.py +34 -0
- src/harness/src/openharness/config/paths.py +160 -0
- src/harness/src/openharness/config/schema.py +119 -0
- src/harness/src/openharness/config/settings.py +1104 -0
- src/harness/src/openharness/coordinator/__init__.py +12 -0
- src/harness/src/openharness/coordinator/agent_definitions.py +975 -0
- src/harness/src/openharness/coordinator/coordinator_mode.py +520 -0
- src/harness/src/openharness/engine/__init__.py +80 -0
- src/harness/src/openharness/engine/cost_tracker.py +24 -0
- src/harness/src/openharness/engine/messages.py +222 -0
- src/harness/src/openharness/engine/query.py +1188 -0
- src/harness/src/openharness/engine/query_engine.py +313 -0
- src/harness/src/openharness/engine/stream_events.py +90 -0
- src/harness/src/openharness/hooks/__init__.py +50 -0
- src/harness/src/openharness/hooks/events.py +20 -0
- src/harness/src/openharness/hooks/executor.py +242 -0
- src/harness/src/openharness/hooks/hot_reload.py +31 -0
- src/harness/src/openharness/hooks/loader.py +68 -0
- src/harness/src/openharness/hooks/schemas.py +66 -0
- src/harness/src/openharness/hooks/types.py +38 -0
- src/harness/src/openharness/keybindings/__init__.py +14 -0
- src/harness/src/openharness/keybindings/default_bindings.py +11 -0
- src/harness/src/openharness/keybindings/loader.py +22 -0
- src/harness/src/openharness/keybindings/parser.py +18 -0
- src/harness/src/openharness/keybindings/resolver.py +13 -0
- src/harness/src/openharness/mcp/__init__.py +79 -0
- src/harness/src/openharness/mcp/client.py +298 -0
- src/harness/src/openharness/mcp/config.py +16 -0
- src/harness/src/openharness/mcp/types.py +76 -0
- src/harness/src/openharness/memory/__init__.py +25 -0
- src/harness/src/openharness/memory/agent.py +91 -0
- src/harness/src/openharness/memory/manager.py +183 -0
- src/harness/src/openharness/memory/memdir.py +52 -0
- src/harness/src/openharness/memory/migrate.py +137 -0
- src/harness/src/openharness/memory/paths.py +22 -0
- src/harness/src/openharness/memory/relevance.py +145 -0
- src/harness/src/openharness/memory/scan.py +116 -0
- src/harness/src/openharness/memory/schema.py +443 -0
- src/harness/src/openharness/memory/search.py +71 -0
- src/harness/src/openharness/memory/team.py +90 -0
- src/harness/src/openharness/memory/types.py +33 -0
- src/harness/src/openharness/memory/usage.py +153 -0
- src/harness/src/openharness/output_styles/__init__.py +5 -0
- src/harness/src/openharness/output_styles/loader.py +42 -0
- src/harness/src/openharness/permissions/__init__.py +26 -0
- src/harness/src/openharness/permissions/checker.py +200 -0
- src/harness/src/openharness/permissions/modes.py +13 -0
- src/harness/src/openharness/personalization/__init__.py +6 -0
- src/harness/src/openharness/personalization/extractor.py +138 -0
- src/harness/src/openharness/personalization/rules.py +64 -0
- src/harness/src/openharness/personalization/session_hook.py +65 -0
- src/harness/src/openharness/platforms.py +86 -0
- src/harness/src/openharness/plugins/__init__.py +53 -0
- src/harness/src/openharness/plugins/bundled/__init__.py +0 -0
- src/harness/src/openharness/plugins/installer.py +39 -0
- src/harness/src/openharness/plugins/loader.py +730 -0
- src/harness/src/openharness/plugins/schemas.py +24 -0
- src/harness/src/openharness/plugins/types.py +59 -0
- src/harness/src/openharness/prompts/__init__.py +14 -0
- src/harness/src/openharness/prompts/claudemd.py +48 -0
- src/harness/src/openharness/prompts/context.py +187 -0
- src/harness/src/openharness/prompts/environment.py +135 -0
- src/harness/src/openharness/prompts/system_prompt.py +109 -0
- src/harness/src/openharness/sandbox/Dockerfile +6 -0
- src/harness/src/openharness/sandbox/__init__.py +33 -0
- src/harness/src/openharness/sandbox/adapter.py +148 -0
- src/harness/src/openharness/sandbox/docker_backend.py +232 -0
- src/harness/src/openharness/sandbox/docker_image.py +103 -0
- src/harness/src/openharness/sandbox/path_validator.py +37 -0
- src/harness/src/openharness/sandbox/session.py +63 -0
- src/harness/src/openharness/services/__init__.py +30 -0
- src/harness/src/openharness/services/autodream/__init__.py +34 -0
- src/harness/src/openharness/services/autodream/backup.py +104 -0
- src/harness/src/openharness/services/autodream/lock.py +138 -0
- src/harness/src/openharness/services/autodream/prompt.py +128 -0
- src/harness/src/openharness/services/autodream/service.py +313 -0
- src/harness/src/openharness/services/compact/__init__.py +1725 -0
- src/harness/src/openharness/services/cron.py +137 -0
- src/harness/src/openharness/services/cron_scheduler.py +595 -0
- src/harness/src/openharness/services/lsp/__init__.py +216 -0
- src/harness/src/openharness/services/memory_extract/__init__.py +261 -0
- src/harness/src/openharness/services/oauth/__init__.py +0 -0
- src/harness/src/openharness/services/session_backend.py +97 -0
- src/harness/src/openharness/services/session_memory/__init__.py +139 -0
- src/harness/src/openharness/services/session_storage.py +230 -0
- src/harness/src/openharness/services/token_estimation.py +15 -0
- src/harness/src/openharness/services/tool_outputs.py +55 -0
- src/harness/src/openharness/skills/__init__.py +44 -0
- src/harness/src/openharness/skills/_frontmatter.py +97 -0
- src/harness/src/openharness/skills/bundled/__init__.py +75 -0
- src/harness/src/openharness/skills/bundled/content/commit.md +25 -0
- src/harness/src/openharness/skills/bundled/content/debug.md +25 -0
- src/harness/src/openharness/skills/bundled/content/diagnose.md +35 -0
- src/harness/src/openharness/skills/bundled/content/plan.md +39 -0
- src/harness/src/openharness/skills/bundled/content/review.md +33 -0
- src/harness/src/openharness/skills/bundled/content/simplify.md +26 -0
- src/harness/src/openharness/skills/bundled/content/skill-creator.md +175 -0
- src/harness/src/openharness/skills/bundled/content/test.md +38 -0
- src/harness/src/openharness/skills/loader.py +229 -0
- src/harness/src/openharness/skills/registry.py +29 -0
- src/harness/src/openharness/skills/types.py +24 -0
- src/harness/src/openharness/state/__init__.py +6 -0
- src/harness/src/openharness/state/app_state.py +30 -0
- src/harness/src/openharness/state/store.py +40 -0
- src/harness/src/openharness/swarm/__init__.py +70 -0
- src/harness/src/openharness/swarm/in_process.py +693 -0
- src/harness/src/openharness/swarm/lockfile.py +24 -0
- src/harness/src/openharness/swarm/mailbox.py +522 -0
- src/harness/src/openharness/swarm/permission_sync.py +1168 -0
- src/harness/src/openharness/swarm/registry.py +410 -0
- src/harness/src/openharness/swarm/spawn_utils.py +229 -0
- src/harness/src/openharness/swarm/subprocess_backend.py +171 -0
- src/harness/src/openharness/swarm/team_lifecycle.py +910 -0
- src/harness/src/openharness/swarm/types.py +398 -0
- src/harness/src/openharness/swarm/worktree.py +315 -0
- src/harness/src/openharness/tasks/__init__.py +18 -0
- src/harness/src/openharness/tasks/local_agent_task.py +28 -0
- src/harness/src/openharness/tasks/local_shell_task.py +17 -0
- src/harness/src/openharness/tasks/manager.py +475 -0
- src/harness/src/openharness/tasks/stop_task.py +11 -0
- src/harness/src/openharness/tasks/types.py +32 -0
- src/harness/src/openharness/themes/__init__.py +21 -0
- src/harness/src/openharness/themes/builtin.py +89 -0
- src/harness/src/openharness/themes/loader.py +55 -0
- src/harness/src/openharness/themes/schema.py +54 -0
- src/harness/src/openharness/tools/__init__.py +107 -0
- src/harness/src/openharness/tools/agent_tool.py +141 -0
- src/harness/src/openharness/tools/ask_user_question_tool.py +46 -0
- src/harness/src/openharness/tools/base.py +80 -0
- src/harness/src/openharness/tools/bash_tool.py +259 -0
- src/harness/src/openharness/tools/brief_tool.py +33 -0
- src/harness/src/openharness/tools/config_tool.py +54 -0
- src/harness/src/openharness/tools/cron_create_tool.py +105 -0
- src/harness/src/openharness/tools/cron_delete_tool.py +32 -0
- src/harness/src/openharness/tools/cron_list_tool.py +69 -0
- src/harness/src/openharness/tools/cron_toggle_tool.py +37 -0
- src/harness/src/openharness/tools/enter_plan_mode_tool.py +28 -0
- src/harness/src/openharness/tools/enter_worktree_tool.py +80 -0
- src/harness/src/openharness/tools/exit_plan_mode_tool.py +28 -0
- src/harness/src/openharness/tools/exit_worktree_tool.py +42 -0
- src/harness/src/openharness/tools/file_edit_tool.py +95 -0
- src/harness/src/openharness/tools/file_read_tool.py +72 -0
- src/harness/src/openharness/tools/file_write_tool.py +87 -0
- src/harness/src/openharness/tools/glob_tool.py +175 -0
- src/harness/src/openharness/tools/grep_tool.py +374 -0
- src/harness/src/openharness/tools/image_generation_tool.py +447 -0
- src/harness/src/openharness/tools/image_to_text_tool.py +237 -0
- src/harness/src/openharness/tools/list_mcp_resources_tool.py +36 -0
- src/harness/src/openharness/tools/lsp_tool.py +154 -0
- src/harness/src/openharness/tools/mcp_auth_tool.py +71 -0
- src/harness/src/openharness/tools/mcp_tool.py +72 -0
- src/harness/src/openharness/tools/notebook_edit_tool.py +97 -0
- src/harness/src/openharness/tools/read_mcp_resource_tool.py +38 -0
- src/harness/src/openharness/tools/remote_trigger_tool.py +74 -0
- src/harness/src/openharness/tools/send_message_tool.py +58 -0
- src/harness/src/openharness/tools/skill_tool.py +43 -0
- src/harness/src/openharness/tools/sleep_tool.py +32 -0
- src/harness/src/openharness/tools/task_create_tool.py +56 -0
- src/harness/src/openharness/tools/task_get_tool.py +33 -0
- src/harness/src/openharness/tools/task_list_tool.py +35 -0
- src/harness/src/openharness/tools/task_output_tool.py +35 -0
- src/harness/src/openharness/tools/task_stop_tool.py +30 -0
- src/harness/src/openharness/tools/task_update_tool.py +50 -0
- src/harness/src/openharness/tools/team_create_tool.py +31 -0
- src/harness/src/openharness/tools/team_delete_tool.py +30 -0
- src/harness/src/openharness/tools/todo_write_tool.py +46 -0
- src/harness/src/openharness/tools/tool_search_tool.py +38 -0
- src/harness/src/openharness/tools/web_fetch_tool.py +117 -0
- src/harness/src/openharness/tools/web_search_tool.py +119 -0
- src/harness/src/openharness/ui/__init__.py +5 -0
- src/harness/src/openharness/ui/app.py +320 -0
- src/harness/src/openharness/ui/backend_host.py +941 -0
- src/harness/src/openharness/ui/coordinator_drain.py +198 -0
- src/harness/src/openharness/ui/input.py +32 -0
- src/harness/src/openharness/ui/output.py +265 -0
- src/harness/src/openharness/ui/permission_dialog.py +14 -0
- src/harness/src/openharness/ui/protocol.py +247 -0
- src/harness/src/openharness/ui/react_launcher.py +179 -0
- src/harness/src/openharness/ui/runtime.py +799 -0
- src/harness/src/openharness/ui/textual_app.py +495 -0
- src/harness/src/openharness/utils/__init__.py +0 -0
- src/harness/src/openharness/utils/file_lock.py +86 -0
- src/harness/src/openharness/utils/fs.py +98 -0
- src/harness/src/openharness/utils/helpers.py +77 -0
- src/harness/src/openharness/utils/network_guard.py +340 -0
- src/harness/src/openharness/utils/shell.py +147 -0
- src/harness/src/openharness/vim/__init__.py +5 -0
- src/harness/src/openharness/vim/transitions.py +8 -0
- src/harness/src/openharness/voice/__init__.py +7 -0
- src/harness/src/openharness/voice/keyterms.py +10 -0
- src/harness/src/openharness/voice/stream_stt.py +8 -0
- src/harness/src/openharness/voice/voice_mode.py +44 -0
- src/llm/__init__.py +29 -0
- src/llm/image_generation.py +402 -0
- src/llm/provider_registry.py +419 -0
- src/llm/runtime_env.py +64 -0
- src/llm/structured_output.py +131 -0
- src/llm/vision.py +198 -0
- src/memory/__init__.py +2 -0
- src/memory/api/__init__.py +1 -0
- src/memory/api/base_memory_system_api.py +98 -0
- src/memory/api/base_symbolic_memory_system_api.py +190 -0
- src/memory/api/base_vector_memory_system_api.py +116 -0
- src/memory/api/faiss_memory_system_api.py +228 -0
- src/memory/api/slot_process_api.py +827 -0
- src/memory/api/symbolic_memory_system_api.py +572 -0
- src/memory/memory_system/__init__.py +48 -0
- src/memory/memory_system/component_taxonomy.py +430 -0
- src/memory/memory_system/llm.py +437 -0
- src/memory/memory_system/models.py +168 -0
- src/memory/memory_system/user_prompt.py +418 -0
- src/memory/memory_system/utils.py +282 -0
- src/memory/memory_system/vectorstore.py +311 -0
- src/memory/memory_system/working_slot.py +99 -0
- src/pipeline/__init__.py +129 -0
- src/pipeline/contracts.py +531 -0
- src/pipeline/discipline_taxonomy.py +916 -0
- src/pipeline/evidence_coverage_ledger.py +1150 -0
- src/pipeline/evidence_refinement.py +620 -0
- src/pipeline/experiment_to_symbolic.py +137 -0
- src/pipeline/multimodal_evidence/__init__.py +28 -0
- src/pipeline/multimodal_evidence/capabilities.py +107 -0
- src/pipeline/multimodal_evidence/claims.py +135 -0
- src/pipeline/multimodal_evidence/contract.py +291 -0
- src/pipeline/multimodal_evidence/data_sh_compiler.py +505 -0
- src/pipeline/multimodal_evidence/handoff_binding.py +135 -0
- src/pipeline/multimodal_evidence/manifest.py +254 -0
- src/pipeline/multimodal_evidence/native_analysis.py +479 -0
- src/pipeline/multimodal_evidence/perception.py +277 -0
- src/pipeline/multimodal_evidence/query_binding.py +65 -0
- src/pipeline/multimodal_evidence/rendering.py +120 -0
- src/pipeline/multimodal_evidence/safety.py +42 -0
- src/pipeline/multimodal_evidence/sampling.py +69 -0
- src/pipeline/multimodal_evidence/service.py +148 -0
- src/pipeline/multimodal_evidence/survey_integration.py +460 -0
- src/pipeline/paper_identity.py +52 -0
- src/pipeline/research_design_inventory.py +338 -0
- src/pipeline/research_domain_resolution.py +669 -0
- src/pipeline/research_identity.py +548 -0
- src/pipeline/research_question_contract.py +646 -0
- src/pipeline/retrieval_lanes.py +889 -0
- src/pipeline/run_loop.py +862 -0
- src/pipeline/science_events.py +30 -0
- src/pipeline/science_manifests.py +602 -0
- src/pipeline/science_run.py +918 -0
- src/pipeline/science_stages.py +709 -0
- src/pipeline/science_workflow.py +807 -0
- src/pipeline/sh_cluster_projection.py +306 -0
- src/pipeline/sh_graph_provenance.py +648 -0
- src/pipeline/subhypothesis_decomposition.py +392 -0
- src/pipeline/subhypothesis_evidence.py +856 -0
- src/pipeline/survey_evidence_plan.py +858 -0
- src/pipeline/survey_gap_adjudication.py +647 -0
- src/pipeline/survey_gap_candidates.py +840 -0
- src/pipeline/survey_gap_ledger.py +683 -0
- src/pipeline/survey_gap_triage.py +401 -0
- src/pipeline/survey_handoff_persistence.py +481 -0
- src/pipeline/survey_handoff_projection.py +457 -0
- src/pipeline/survey_idea_handoff.py +1112 -0
- src/pipeline/survey_idea_loader.py +289 -0
- src/research_run_ids.py +11 -0
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"""Prompts for evidence-bounded, post-draft survey visualisation.
|
|
2
|
+
|
|
3
|
+
The image model is deliberately given a compact ``VisualBrief`` instead of the
|
|
4
|
+
whole survey. This keeps generated figures tied to an auditable part of the
|
|
5
|
+
finished manuscript and prevents the image model from inventing a second,
|
|
6
|
+
untraced narrative.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
import json
|
|
12
|
+
from typing import Any, Mapping
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
FIGURE_TYPE_LAYOUT_INSTRUCTIONS = {
|
|
16
|
+
"overview_framework": (
|
|
17
|
+
"Build a polished scientific visual abstract with one central thesis or system "
|
|
18
|
+
"anchor, surrounding evidence and process modules, and a visually distinct "
|
|
19
|
+
"outcome or interface region. Use nested regions, varied module scales, "
|
|
20
|
+
"symbolic icons, structured connectors, and a compact semantic strip. Avoid "
|
|
21
|
+
"a flat row of identical boxes."
|
|
22
|
+
),
|
|
23
|
+
"mechanism": (
|
|
24
|
+
"Build a visually rich causal systems map rather than a simple linear flowchart. "
|
|
25
|
+
"Place the dominant mechanism or outcome as a central anchor, arrange upstream "
|
|
26
|
+
"drivers as an asymmetric evidence cluster, and place intermediate processes "
|
|
27
|
+
"as layered or nested modules. Use solid connectors for direct support, dashed "
|
|
28
|
+
"or translucent connectors for qualified or unresolved relations, and include "
|
|
29
|
+
"one restrained inset, symbolic icon, or uncertainty region when supported by "
|
|
30
|
+
"the supplied content. Avoid repeated equal-sized cards."
|
|
31
|
+
),
|
|
32
|
+
"causal_pathway": "Arrange supplied drivers, mediators, and outcomes into a readable causal pathway; keep qualified or unresolved links visibly distinct.",
|
|
33
|
+
"evidence_to_inference": "Organize three levels: source observations or cited evidence, intermediate analysis or theory, and survey-level inference; never turn background context into direct evidence.",
|
|
34
|
+
"method_comparison": "Use balanced parallel panels or converging pathways for the supplied approaches; show inputs, analytical focus, contribution, and stated limitation without unsupported ranking.",
|
|
35
|
+
"multiscale_synthesis": "Show supplied scales, levels, stages, or system layers in a clear nested or progressive arrangement; connect levels only where explicitly supported.",
|
|
36
|
+
"conceptual_workflow": "Arrange supplied conceptual stages into a practical workflow with a clear beginning, intermediate steps, and outcome.",
|
|
37
|
+
"research_landscape": "Map supplied approaches, themes, or evidence clusters as a conceptual landscape, not a quantitative ranking or bibliometric chart.",
|
|
38
|
+
"future_roadmap": "Organize established foundations, present limitations, and explicitly stated future directions into a forward-looking roadmap; show open questions as muted or dashed elements.",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
VISUAL_CANDIDATE_PLANNER = """You are the visual editor for a completed academic survey.
|
|
43
|
+
|
|
44
|
+
Choose only the sections where a conceptual scientific figure would materially improve
|
|
45
|
+
reader understanding. This is a multidisciplinary task: do not assume a specific field.
|
|
46
|
+
Prefer a small, diverse figure set over an image after every heading.
|
|
47
|
+
|
|
48
|
+
Allowed figure types:
|
|
49
|
+
{allowed_figure_types}
|
|
50
|
+
|
|
51
|
+
Survey title:
|
|
52
|
+
{survey_title}
|
|
53
|
+
|
|
54
|
+
Approved outline context:
|
|
55
|
+
{outline_context}
|
|
56
|
+
|
|
57
|
+
Sections (paragraph indices restart at 1 inside each section):
|
|
58
|
+
{sections}
|
|
59
|
+
|
|
60
|
+
Task:
|
|
61
|
+
Aim for {min_figures} to {max_figures} candidates when the survey has enough eligible
|
|
62
|
+
material; never force a weak candidate merely to hit the target. A candidate is allowed only when it can
|
|
63
|
+
integrate multiple supplied paragraphs or at least three supplied entities/processes.
|
|
64
|
+
Choose distinct knowledge functions across the survey where possible. Do not select the
|
|
65
|
+
references section. Do not select a section that only lists papers, definitions, or
|
|
66
|
+
unsupported speculation. Do not choose a data chart when exact data are required.
|
|
67
|
+
{numeric_chart_policy}
|
|
68
|
+
|
|
69
|
+
Return exactly one JSON object in this schema:
|
|
70
|
+
{schema}
|
|
71
|
+
|
|
72
|
+
Use English for every reader-facing string. Do not add scientific facts absent from the
|
|
73
|
+
supplied section excerpts. ``source_paragraph_indices`` must identify the supplied
|
|
74
|
+
paragraphs that justify the proposed figure."""
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
VISUAL_BRIEF_BUILDER = """You are preparing a tightly evidence-bounded visual brief for a
|
|
78
|
+
publication-ready conceptual scientific figure in an academic survey.
|
|
79
|
+
|
|
80
|
+
Survey title: {survey_title}
|
|
81
|
+
Section title: {section_title}
|
|
82
|
+
Selected figure type: {figure_type}
|
|
83
|
+
Proposed purpose: {proposed_message}
|
|
84
|
+
|
|
85
|
+
Approved outline context for this section:
|
|
86
|
+
{outline_context}
|
|
87
|
+
|
|
88
|
+
The only survey paragraphs that may supply scientific content are below:
|
|
89
|
+
{source_paragraphs}
|
|
90
|
+
|
|
91
|
+
Evidence-plan context (this gives permitted evidence boundaries, not extra facts):
|
|
92
|
+
{evidence_context}
|
|
93
|
+
|
|
94
|
+
Task:
|
|
95
|
+
Create one concise but visually specific art-direction brief. It must explain
|
|
96
|
+
relationships already present in the supplied paragraphs, and it must make explicit
|
|
97
|
+
uncertainty, qualification, or evidence gaps when the paragraphs state them. It must
|
|
98
|
+
never introduce new measurements, numerical values, causal links, instruments,
|
|
99
|
+
entities, biological structures, physical processes, or comparative rankings.
|
|
100
|
+
|
|
101
|
+
The composition_en field must be an actionable visual blueprint, not a generic sentence
|
|
102
|
+
such as "Use a left-to-right layout." Specify:
|
|
103
|
+
1. the dominant focal anchor;
|
|
104
|
+
2. the main spatial arrangement;
|
|
105
|
+
3. the hierarchy between primary, secondary, and uncertain relationships;
|
|
106
|
+
4. at least one supported visual motif, such as an inset panel, symbolic icon,
|
|
107
|
+
layered region, loop, bridge, scale transition, or localized zoom;
|
|
108
|
+
5. the connector language: solid, dashed, translucent, branching, converging, or looping;
|
|
109
|
+
6. how colour and depth distinguish the major semantic roles;
|
|
110
|
+
7. a controlled label budget using short English labels only.
|
|
111
|
+
|
|
112
|
+
Prefer a visually rich editorial infographic or systems map over a generic three-column
|
|
113
|
+
flowchart. Avoid equal-width repeated cards and avoid an empty canvas. Keep the layout
|
|
114
|
+
readable and evidence-bounded.
|
|
115
|
+
|
|
116
|
+
All reader-facing content must be English. Write a concise English caption and English
|
|
117
|
+
alt text. Caption text will be placed beneath the image, not drawn into the image.
|
|
118
|
+
|
|
119
|
+
For every relation, include an exact contiguous quote from the supplied source paragraphs,
|
|
120
|
+
retaining the source language, and the paragraph index containing that quote. The program, not you, derives
|
|
121
|
+
the evidence support kind from the evidence plan and claim trace. Do not return a relation
|
|
122
|
+
that cannot be grounded by an exact supplied quote.
|
|
123
|
+
|
|
124
|
+
Return exactly one JSON object in this schema:
|
|
125
|
+
{schema}"""
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
VISUAL_BRIEF_REPAIR = """Repair one rejected visual brief for a completed academic survey.
|
|
129
|
+
|
|
130
|
+
Survey title: {survey_title}
|
|
131
|
+
Section title: {section_title}
|
|
132
|
+
Selected figure type: {figure_type}
|
|
133
|
+
|
|
134
|
+
Source paragraphs (the only permitted scientific source):
|
|
135
|
+
{source_paragraphs}
|
|
136
|
+
|
|
137
|
+
Evidence-plan context:
|
|
138
|
+
{evidence_context}
|
|
139
|
+
|
|
140
|
+
Original brief response:
|
|
141
|
+
{original_payload}
|
|
142
|
+
|
|
143
|
+
Deterministic validation findings:
|
|
144
|
+
{rejection_reasons}
|
|
145
|
+
|
|
146
|
+
Return one corrected JSON object using this schema:
|
|
147
|
+
{schema}
|
|
148
|
+
|
|
149
|
+
Repair format and grounding only. Preserve the supplied scientific meaning. Every
|
|
150
|
+
relation must use an exact contiguous quote from one supplied paragraph and the correct
|
|
151
|
+
paragraph index. Do not invent entities, mechanisms, measurements, citations, or causal
|
|
152
|
+
links. Reader-facing fields must be concise English; source_quote must retain the source
|
|
153
|
+
paragraph language. The composition_en field must be an actionable art-direction
|
|
154
|
+
blueprint: name the focal anchor, spatial arrangement, visual hierarchy, connector
|
|
155
|
+
styles, one supported visual motif, and a short-label budget. Do not replace it with a
|
|
156
|
+
generic phrase such as "Use a left-to-right layout." Caption, alt text, and overlay
|
|
157
|
+
labels may be minimal, because the program supplies safe English fallbacks when they
|
|
158
|
+
are absent."""
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
ARTICLE_STYLE_PLANNER = """You are the art director for one multidisciplinary academic
|
|
162
|
+
survey. Create a single coherent visual style profile for polished scientific
|
|
163
|
+
infographics and systems maps that every figure in this survey will reuse.
|
|
164
|
+
|
|
165
|
+
Survey title: {survey_title}
|
|
166
|
+
Planned figures:
|
|
167
|
+
{figure_summaries}
|
|
168
|
+
|
|
169
|
+
Choose a palette appropriate to the topic, suitable for a rigorous, high-impact
|
|
170
|
+
scientific visual abstract: print-friendly, colour-blind-aware, layered enough to
|
|
171
|
+
support visual hierarchy, and readable on a light background. The palette must have
|
|
172
|
+
exactly these semantic roles:
|
|
173
|
+
background, ink, primary, secondary, accent, uncertainty. Return six valid #RRGGBB
|
|
174
|
+
hex colours. Do not choose a palette per figure; this one palette will be locked for the
|
|
175
|
+
whole survey.
|
|
176
|
+
|
|
177
|
+
The visual language should support controlled density, asymmetric but balanced layouts,
|
|
178
|
+
varied module scales, nested regions, symbolic icons, inset details, and distinct
|
|
179
|
+
connector styles. It should feel like an editorial scientific infographic rather than a
|
|
180
|
+
generic slide-deck flowchart. Keep the style coherent across figures without forcing
|
|
181
|
+
every figure into the same geometry.
|
|
182
|
+
|
|
183
|
+
Return exactly one JSON object in this schema:
|
|
184
|
+
{schema}
|
|
185
|
+
|
|
186
|
+
All prose values must be English."""
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
IMAGE_PROMPT = """Create a publication-ready conceptual scientific figure for an academic survey.
|
|
190
|
+
|
|
191
|
+
Figure type:
|
|
192
|
+
{figure_type}
|
|
193
|
+
|
|
194
|
+
Central message:
|
|
195
|
+
{main_message}
|
|
196
|
+
|
|
197
|
+
Scientific content that must be represented:
|
|
198
|
+
{relations}
|
|
199
|
+
|
|
200
|
+
Relationship rendering guidance:
|
|
201
|
+
{relation_guidance}
|
|
202
|
+
|
|
203
|
+
Entities or modules to include:
|
|
204
|
+
{entities}
|
|
205
|
+
|
|
206
|
+
Exact visible label inventory:
|
|
207
|
+
{exact_visible_labels}
|
|
208
|
+
|
|
209
|
+
Typography and layout protocol:
|
|
210
|
+
The inventory above is the only permitted reader-facing text. Copy each supplied label
|
|
211
|
+
character-for-character, including spelling, capitalization, hyphens, apostrophes, slashes,
|
|
212
|
+
underscores, and scientific symbols. Do not paraphrase, translate, abbreviate, pluralize,
|
|
213
|
+
correct, or merge labels. Do not render the surrounding JSON/list punctuation or quotation
|
|
214
|
+
marks. Do not render the full relation sentences, uncertainty sentences, evidence metadata,
|
|
215
|
+
Paper IDs, SH IDs, or any other prompt text. The entities/modules list is semantic guidance
|
|
216
|
+
only; render an entity name only when the exact same string appears in the inventory. If a
|
|
217
|
+
label cannot be rendered clearly, omit that label rather than inventing a replacement.
|
|
218
|
+
|
|
219
|
+
Use one short label per module, with a consistent readable sans-serif typeface, generous
|
|
220
|
+
letter spacing, strong contrast, and sufficient size for 100% PDF readability. Keep labels
|
|
221
|
+
inside their module boundaries with ample padding; never overlap labels, connectors, icons,
|
|
222
|
+
or panel borders. Do not create a legend, title, paragraph, axis, table, footnote, or caption
|
|
223
|
+
unless its exact text appears in the inventory.
|
|
224
|
+
|
|
225
|
+
Uncertainties or evidence boundaries to show:
|
|
226
|
+
{uncertainties}
|
|
227
|
+
|
|
228
|
+
Composition:
|
|
229
|
+
{composition}
|
|
230
|
+
|
|
231
|
+
Figure-type layout requirements:
|
|
232
|
+
{figure_type_layout}
|
|
233
|
+
|
|
234
|
+
Article-wide visual style:
|
|
235
|
+
{visual_language}
|
|
236
|
+
|
|
237
|
+
Locked article palette:
|
|
238
|
+
- Background: {background}
|
|
239
|
+
- Linework: {ink}
|
|
240
|
+
- Primary evidence-supported pathway: {primary}
|
|
241
|
+
- Secondary process or comparison group: {secondary}
|
|
242
|
+
- Key focal entity: {accent}
|
|
243
|
+
- Uncertainty or qualified relation: {uncertainty}
|
|
244
|
+
|
|
245
|
+
Visual language:
|
|
246
|
+
A visually rich editorial scientific infographic suitable for a high-impact
|
|
247
|
+
multidisciplinary research journal. Make it feel like a polished visual abstract or
|
|
248
|
+
systems-map poster, not a basic flowchart or presentation slide.
|
|
249
|
+
|
|
250
|
+
Create a clear focal hierarchy: one dominant visual anchor, two to four secondary
|
|
251
|
+
modules with different visual weights, and one restrained uncertainty or limitation
|
|
252
|
+
region. Build hierarchy through scale, position, layered panels, subtle tonal
|
|
253
|
+
backgrounds, symbolic icons, selective accent colour, and different connector weights.
|
|
254
|
+
|
|
255
|
+
Prefer an asymmetric but balanced composition. Combine grouped modules, inset details,
|
|
256
|
+
nested regions, branching or converging pathways, feedback loops, scale transitions, or
|
|
257
|
+
a compact semantic strip whenever supported by the supplied content. Use controlled
|
|
258
|
+
density: information-rich, visually layered, and detailed, while remaining readable at
|
|
259
|
+
50% scale in a PDF.
|
|
260
|
+
|
|
261
|
+
Do not repeat identical rounded rectangles and do not use a default three-column layout.
|
|
262
|
+
|
|
263
|
+
Text constraints:
|
|
264
|
+
Render only the exact labels from the inventory, preferably as 1–5 word labels. Never add
|
|
265
|
+
decorative pseudo-text or plausible-looking terminology. Before finalizing, perform an
|
|
266
|
+
internal character-by-character check against the inventory; if any character is uncertain,
|
|
267
|
+
leave that label out. Keep all reader-facing text sparse and subordinate to the visual
|
|
268
|
+
structure. Leave clean visual space for the separate English caption and programmatic labels.
|
|
269
|
+
|
|
270
|
+
Scientific constraints:
|
|
271
|
+
This is a conceptual synthesis of the supplied survey content, not a new empirical result.
|
|
272
|
+
Do not invent quantitative data, experimental measurements, causal mechanisms, instruments,
|
|
273
|
+
model properties, or conclusions. Use solid prominent pathways only for directly supported
|
|
274
|
+
relationships. Use restrained secondary pathways for qualified contributions. Use muted,
|
|
275
|
+
dashed, or translucent elements for explicit uncertainty, evidence gaps, or background context.
|
|
276
|
+
|
|
277
|
+
Negative prompt:
|
|
278
|
+
No photorealistic laboratory scene, no stock-photo appearance, no science-fiction aesthetic,
|
|
279
|
+
no neon palette, no rainbow gradient, no illegible text, no fake chart, no invented numerical
|
|
280
|
+
data, no fictional equation, no paper citation, no journal logo, no misspelled words, no
|
|
281
|
+
invented labels, no text outside the exact label inventory, no fake legend, and no tiny or
|
|
282
|
+
overlapping text.
|
|
283
|
+
|
|
284
|
+
Layout requirements:
|
|
285
|
+
- Do not use a flat sequence of equal-width boxes.
|
|
286
|
+
- Do not use a default left-to-right three-column flowchart.
|
|
287
|
+
- Establish one dominant anchor near the visual center or upper center.
|
|
288
|
+
- Use an asymmetric but balanced arrangement.
|
|
289
|
+
- Combine at least three of the following when scientifically appropriate: grouped
|
|
290
|
+
modules, nested regions, inset detail, symbolic icons, branching pathways, converging
|
|
291
|
+
pathways, feedback loops, layered backgrounds, scale transitions, or a compact
|
|
292
|
+
semantic strip.
|
|
293
|
+
- Use solid primary-colour pathways for direct evidence-supported relations.
|
|
294
|
+
- Use thinner, dashed, or translucent pathways for qualified, indirect, contextual, or
|
|
295
|
+
uncertain relations.
|
|
296
|
+
- Use the accent colour sparingly for the key focal entity or conclusion.
|
|
297
|
+
- Reserve muted grey-blue tones for context and uncertainty.
|
|
298
|
+
- Keep the figure readable at 50% scale in a PDF.
|
|
299
|
+
|
|
300
|
+
Output: landscape 4:3, high resolution, balanced margins, suitable for PDF and Markdown.
|
|
301
|
+
"""
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
VISION_QC_PROMPT = """Review this generated academic figure against the supplied figure brief.
|
|
305
|
+
The assessment is advisory: accept the image unless there is a clear factual, readability,
|
|
306
|
+
or style failure.
|
|
307
|
+
|
|
308
|
+
Figure brief:
|
|
309
|
+
{brief}
|
|
310
|
+
|
|
311
|
+
Locked article palette:
|
|
312
|
+
{palette}
|
|
313
|
+
|
|
314
|
+
Return exactly one JSON object with this schema:
|
|
315
|
+
{schema}
|
|
316
|
+
|
|
317
|
+
Reject only if the image has a major issue such as invented numerical data, fake readable
|
|
318
|
+
citations, an unsupported central relation, dense or garbled visible text, an obviously
|
|
319
|
+
incompatible palette, watermark/logo, or an unusable composition. Minor artistic variation
|
|
320
|
+
is acceptable. Do not reject merely because the image does not contain labels; labels are
|
|
321
|
+
added separately."""
|
|
322
|
+
|
|
323
|
+
|
|
324
|
+
def json_schema_text(schema: Mapping[str, Any]) -> str:
|
|
325
|
+
"""Render schemas consistently without introducing markdown fences."""
|
|
326
|
+
|
|
327
|
+
return json.dumps(schema, ensure_ascii=False, sort_keys=True, indent=2)
|