osa_tool 0.3.1__tar.gz → 0.3.2__tar.gz
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.
- {osa_tool-0.3.1 → osa_tool-0.3.2}/PKG-INFO +70 -51
- {osa_tool-0.3.1 → osa_tool-0.3.2}/README.md +64 -49
- osa_tool-0.3.2/osa_tool/assets/notosans-sc-black.ttf +0 -0
- osa_tool-0.3.2/osa_tool/assets/notosans-sc-bold.ttf +0 -0
- osa_tool-0.3.2/osa_tool/assets/notosans-sc.ttf +0 -0
- osa_tool-0.3.2/osa_tool/config/locales/english.toml +168 -0
- osa_tool-0.3.2/osa_tool/config/locales/russian.toml +168 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/about_section.toml +2 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/analysis.toml +4 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/settings/arguments.yaml +119 -4
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/settings/config.toml +10 -4
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/settings.py +45 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/pep8.yml +2 -1
- osa_tool-0.3.2/osa_tool/config/templates/workflow/github_gitverse/ruff.yml +18 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/unit_test.yml +4 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/autopep8.yml +2 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/black.yml +2 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/fix_pep8.yml +2 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/pep8.yml +2 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/unit_test.yml +2 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/git/git_agent.py +161 -7
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/git/metadata.py +3 -1
- osa_tool-0.3.2/osa_tool/core/llm/host.py +667 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/llm/llm.py +117 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/analyzer.py +6 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/models.py +5 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/report_maker.py +79 -41
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_analysis/models.py +9 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_analysis/pipeline.py +102 -14
- osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/__init__.py +73 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_validation.py +1 -1
- osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/io.py +162 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/marker_converter.py +5 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/models.py +14 -0
- osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/openrouter_converter.py +251 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/pipeline.py +111 -86
- osa_tool-0.3.2/osa_tool/operations/analysis/paper_claims/section_extractor.py +68 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/report_generator.py +9 -1
- osa_tool-0.3.2/osa_tool/operations/analysis/repository_report/report_localization.py +80 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/report_maker.py +165 -59
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/python_adapter.py +7 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/typescript_adapter.py +8 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/core/osa_parser.py +20 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docgen.py +2 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docstring_generation.py +0 -3
- osa_tool-0.3.2/osa_tool/operations/codebase/docstring_generation/insert/ts_js_augmentor.py +360 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/workflow_executor.py +6 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/workflow_generator.py +207 -16
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/about_generation/about_generator.py +1 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/operations_catalog.py +2 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/run.py +59 -11
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/run_chat.py +5 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/scheduler/plan.py +4 -4
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/scheduler/scheduler.py +3 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/scheduler/workflow_manager.py +8 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_analysis/cli.py +38 -2
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/README.md +19 -6
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/batch.py +24 -3
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/scorecard.py +55 -26
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/ui/plan_editor.py +178 -34
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/arguments_parser.py +64 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/prompts_builder.py +33 -14
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/utils.py +51 -1
- {osa_tool-0.3.1 → osa_tool-0.3.2}/pyproject.toml +8 -3
- osa_tool-0.3.1/osa_tool/operations/analysis/paper_claims/__init__.py +0 -28
- osa_tool-0.3.1/osa_tool/operations/codebase/docstring_generation/insert/ts_js_augmentor.py +0 -217
- osa_tool-0.3.1/osa_tool/operations/codebase/docstring_generation/osa_treesitter.py +0 -808
- {osa_tool-0.3.1 → osa_tool-0.3.2}/LICENSE +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/osa_config.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/docstring_generation.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/osa_agent.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/paper_analysis.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/paper_claims.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/readme/prompts.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/readme/system_messages.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/readme.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/repo_organization.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/repository_quality.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/requirements.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/scheduler.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/prompts/system_messages.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/template.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/autopep8.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/black.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/fix_pep8.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/pypi_publish.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/github_gitverse/slash_command_dispatch.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/pypi_publish.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/config/templates/workflow/gitlab/slash_command_dispatch.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/git/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/git/request_utils.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/llm/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/models/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/models/agent_status.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/models/event.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/models/llm_output_models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/core/models/task.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/images/osa_logo.PNG +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/images/osa_logo_transparent.PNG +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/templates/ci_config.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/templates/community.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/templates/contributing.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/templates/licenses.toml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/docs/templates/mkdocs.yml +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/artifacts.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/notebook_report/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_analysis/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_analysis/data_context.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_analysis/verifier.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_deduplicator.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_extractor.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_input_planner.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/claim_schemas.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/exceptions.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/pdf_splitter.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/paper_claims/section_parser.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_quality/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_quality/checks.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_quality/repository_quality_scorer.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_quality/scoring_engine.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/analysis/repository_report/response_validation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/directory_translation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/directory_translation/dirs_and_files_translator.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/base.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/adapters/javascript_adapter.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/core/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/core/source_view.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/docstring_transformer.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/base_augmentor.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/factory.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/insert/python_augmentor.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/docstring_generation/topology.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/notebook_conversion/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/notebook_conversion/notebook_converter.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/base.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/cpp.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/csharp.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/factory.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/generic.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/go.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/java.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/javascript.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/kotlin.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/latex.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/python.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/ruby.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/rust.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/analyzers/swift.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/executor/action_executor.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/executor/batch_updater.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/health_checker.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/planning_manager.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/snapshot_manager.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/core/utils.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/organization/organize.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/requirements_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/requirements_generation/requirements_generation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/README.md +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/codebase/workflow_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/about_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/codemeta_generator.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/community.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/contributing.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/docs_run.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/community_docs_generation/license_generation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/article_content.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/article_path.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/inputs/pypi_status_checker.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/graph.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/llm_schemas.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/assembler.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/context_collector.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/deterministic_builder.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/intent_analyzer.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/readme_patch.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/section_generator.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/section_planner.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/self_eval.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/nodes/writer.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/runtime_context.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/section_catalog.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/section_catalog_entries.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/pipeline/state.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/readme_agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/readme_utils.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/header.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/icons/shieldsio_icons.json +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_generation/sections/installation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_translation/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/docs/readme_translation/readme_translator.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/operations/registry.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/executor/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/executor/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/finalizer/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/finalizer/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/finalizer/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/intent_router/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/intent_router/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/intent_router/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/planner/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/planner/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/planner/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/repo_analysis/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/repo_analysis/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/reviewer/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/reviewer/agent.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/agents/reviewer/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/base.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/context.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/graph.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/osa_agent/state.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/run_multi_process.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/scheduler/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/scheduler/response_validation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/focused_cli.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_analysis/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_analysis/__main__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/aggregate.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/paper_claims/evaluate.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/progress.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/dependencies.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/documentation.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/models.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/repo_analyzer.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/repo_graph.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/sourcerank.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_analysis/testing.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_quality/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/tools/repository_quality/__main__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/ui/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/ui/input_for_chat.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/__init__.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/logger.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/response_cleaner.py +0 -0
- {osa_tool-0.3.1 → osa_tool-0.3.2}/osa_tool/utils/token_counter.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: osa_tool
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Tool that just makes your open source project better!
|
|
5
5
|
License-Expression: BSD-3-Clause
|
|
6
6
|
License-File: LICENSE
|
|
@@ -12,7 +12,10 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.14
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
15
16
|
Provides-Extra: paper-claims
|
|
17
|
+
Provides-Extra: paper-claims-lite
|
|
18
|
+
Provides-Extra: paper-claims-marker
|
|
16
19
|
Requires-Dist: GitPython (>=3.1.40)
|
|
17
20
|
Requires-Dist: Pygments (>=2.18.0)
|
|
18
21
|
Requires-Dist: aiofiles (>=24.1.0)
|
|
@@ -22,7 +25,7 @@ Requires-Dist: docx2txt (>=0.9)
|
|
|
22
25
|
Requires-Dist: json-repair[schema] (>=0.60.0,<0.61.0)
|
|
23
26
|
Requires-Dist: libcst (>=1.8.6)
|
|
24
27
|
Requires-Dist: markdown-it-py (>=3.0.0) ; extra == "paper-claims"
|
|
25
|
-
Requires-Dist: marker-pdf (>=1.10.2,<2.0.0) ; (python_version < "3.15") and (extra == "paper-claims")
|
|
28
|
+
Requires-Dist: marker-pdf (>=1.10.2,<2.0.0) ; (python_version < "3.15") and (extra == "paper-claims-marker")
|
|
26
29
|
Requires-Dist: mkdocs (>=1.6.0)
|
|
27
30
|
Requires-Dist: mkdocs-material (>=9.6.0)
|
|
28
31
|
Requires-Dist: mkdocstrings-python (>=1.16.0)
|
|
@@ -40,6 +43,7 @@ Requires-Dist: pydantic (>=2.9.0,<3.0.0)
|
|
|
40
43
|
Requires-Dist: pypdf (>=5.0.0) ; extra == "paper-claims"
|
|
41
44
|
Requires-Dist: qrcode (>=7.4.0)
|
|
42
45
|
Requires-Dist: rapidfuzz (>=3.14.0) ; extra == "paper-claims"
|
|
46
|
+
Requires-Dist: rapidfuzz (>=3.14.0) ; extra == "paper-claims-lite"
|
|
43
47
|
Requires-Dist: reportlab (>=4.2.0,<5.0.0)
|
|
44
48
|
Requires-Dist: scipy (>=1.13.0,<2.0.0) ; extra == "paper-claims"
|
|
45
49
|
Requires-Dist: sentence-transformers (>=3.0.0,<6.0.0) ; extra == "paper-claims"
|
|
@@ -135,18 +139,12 @@ Here is a short video:
|
|
|
135
139
|
including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
|
|
136
140
|
|
|
137
141
|
6. **Repository-quality score**: Evaluates a repository against formal criteria such as a non-empty README and
|
|
138
|
-
license file.
|
|
139
|
-
`python -m osa_tool.tools.repository_quality` or as part of paper analysis.
|
|
142
|
+
license file. The score is available as part of paper analysis with `--include-repository-quality`.
|
|
140
143
|
|
|
141
|
-
7. **
|
|
142
|
-
`paper_claims` operation and batch utilities. This pipeline is available as a separate module and is not registered
|
|
143
|
-
in the scheduler yet.
|
|
144
|
-
|
|
145
|
-
8. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
|
|
144
|
+
7. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
|
|
146
145
|
claims and verifies them against a repository. Formal repository-quality scoring is optional through
|
|
147
|
-
`--include-repository-quality
|
|
148
|
-
|
|
149
|
-
entry points remove only a remote clone created by that invocation, never a user-supplied local repository.
|
|
146
|
+
`--include-repository-quality`. With `--delete-dir`, the command removes only a remote clone created by that
|
|
147
|
+
invocation, never a user-supplied local repository.
|
|
150
148
|
|
|
151
149
|
---
|
|
152
150
|
|
|
@@ -165,10 +163,13 @@ Install optional features when needed:
|
|
|
165
163
|
```sh
|
|
166
164
|
# PDF-to-claims extraction and evaluation utilities
|
|
167
165
|
pip install "osa_tool[paper-claims]"
|
|
166
|
+
|
|
167
|
+
# Add the optional local Marker parser
|
|
168
|
+
pip install "osa_tool[paper-claims,paper-claims-marker]"
|
|
168
169
|
```
|
|
169
170
|
|
|
170
|
-
The core package
|
|
171
|
-
|
|
171
|
+
The core package and remote PDF parsers support Python 3.11 and later. The optional Marker parser requires Python
|
|
172
|
+
3.11--3.14 because its dependency stack is not available for Python 3.15+.
|
|
172
173
|
|
|
173
174
|
**Build from source:**
|
|
174
175
|
|
|
@@ -221,31 +222,29 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
|
|
|
221
222
|
|
|
222
223
|
OSA requires Python 3.11 or higher.
|
|
223
224
|
|
|
224
|
-
|
|
225
|
-
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
226
|
-
--no-fork option).
|
|
227
|
-
|
|
228
|
-
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
229
|
-
Gitverse respectively.
|
|
230
|
-
|
|
231
|
-
When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
|
|
225
|
+
OSA can be configured in two common ways:
|
|
232
226
|
|
|
233
227
|
```sh
|
|
234
|
-
#
|
|
235
|
-
export
|
|
228
|
+
# Subscription-backed Host LLM provider (api = "host")
|
|
229
|
+
export HOST_LLM_COMMAND=codex
|
|
236
230
|
export GIT_TOKEN=<your_git_token>
|
|
237
231
|
|
|
238
|
-
#
|
|
239
|
-
|
|
240
|
-
|
|
232
|
+
# OpenAI-compatible API provider (--api openai)
|
|
233
|
+
export OPENAI_API_KEY=<your_api_key>
|
|
234
|
+
export GIT_TOKEN=<your_git_token>
|
|
241
235
|
```
|
|
242
236
|
|
|
237
|
+
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
238
|
+
--no-fork option). Instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab,
|
|
239
|
+
and Gitverse respectively. `AUTHORIZATION_KEY` is only needed when using Gigachat.
|
|
240
|
+
|
|
243
241
|
### Tokens
|
|
244
242
|
|
|
245
243
|
| Token name | Description | Mandatory |
|
|
246
244
|
|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
|
|
247
245
|
| `GIT_TOKEN` | Personal GitHub/GitLab/Gitverse token used to clone private repositories, access metadata, and interact with its API. | Yes |
|
|
248
|
-
| `
|
|
246
|
+
| `HOST_LLM_COMMAND` | Logged-in Codex CLI command used by the subscription-backed `api = "host"` provider (`codex`). | No |
|
|
247
|
+
| `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API), and [openrouter](https://openrouter.ai/) providers through `--api openai`. | No |
|
|
249
248
|
| `AUTHORIZATION_KEY` | API key for [gigachat](https://developers.sber.ru/portal/products/gigachat-api) provider | No |
|
|
250
249
|
| `X-API-Key` | API key for the [pepy.tech](https://pepy.tech/pepy-api) REST API, used to fetch Python package download statistics | No |
|
|
251
250
|
|
|
@@ -267,6 +266,8 @@ python -m osa_tool.run -r {repository} [--api {api}] [--base-url {base_url}] [--
|
|
|
267
266
|
docker run --env-file .env {image-name} -r {repository} [--api {api}] [--base-url {base_url}] [--model {model_name}] [--attachment {article}] [--convert-notebooks {notebook_paths}]
|
|
268
267
|
```
|
|
269
268
|
|
|
269
|
+
Docker runs default to the OpenAI-compatible API-key provider because the container cannot inherit a logged-in host command from the user's machine. Pass `--api host` only when the container has access to a host command or bridge.
|
|
270
|
+
|
|
270
271
|
The --attachment option enables you to choose a README template for a repository based on an article. You can provide
|
|
271
272
|
either a link to a PDF file of the article or a path to a local PDF file after the --attachment option. If you are using
|
|
272
273
|
Docker, ensure that you upload the PDF file to the OSA folder before building the image, then, specify the path as
|
|
@@ -277,30 +278,34 @@ documentation, see the [Workflow Generator README](./osa_tool/operations/codebas
|
|
|
277
278
|
|
|
278
279
|
### Configuration
|
|
279
280
|
|
|
280
|
-
| Flag
|
|
281
|
-
|
|
282
|
-
| `-r`, `--repository`
|
|
283
|
-
| `-b`, `--branch`
|
|
284
|
-
|
|
|
285
|
-
| `--
|
|
286
|
-
| `--
|
|
287
|
-
| `--
|
|
288
|
-
| `--
|
|
289
|
-
| `--
|
|
290
|
-
| `--
|
|
291
|
-
| `--
|
|
292
|
-
| `--
|
|
293
|
-
|
|
|
294
|
-
| `--
|
|
295
|
-
| `--
|
|
296
|
-
| `--no-
|
|
281
|
+
| Flag | Description | Default |
|
|
282
|
+
|------------------------|-------------------------------------------------------------------------------------|--------------------------------|
|
|
283
|
+
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
|
|
284
|
+
| `-b`, `--branch` | Branch name of the repository | Default branch |
|
|
285
|
+
| `--based-on-date` | Analyse the repository version closest to the given date (forces no fork / no PR) | `None` |
|
|
286
|
+
| `-o`, `--output` | Path to the output directory | Current working directory |
|
|
287
|
+
| `--api` | LLM API service provider | `openai` |
|
|
288
|
+
| `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
|
|
289
|
+
| `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
|
|
290
|
+
| `--top-p` | Nucleus sampling probability | `0.95` |
|
|
291
|
+
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
|
|
292
|
+
| `--max-tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
|
|
293
|
+
| `--context-window` | Total number of model context (Input + Output) | `16385` |
|
|
294
|
+
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
|
|
295
|
+
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
|
|
296
|
+
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
|
|
297
|
+
| `--no-fork` | Avoid create fork for target repository | `False` |
|
|
298
|
+
| `--no-pull-request` | Avoid create pull request for target repository | `False` |
|
|
299
|
+
| `--artefacts-language` | Language for report generation | `English` |
|
|
297
300
|
|
|
298
301
|
Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom
|
|
299
302
|
configuration file. If no custom configuration file is provided, OSA will use the default configuration.
|
|
300
303
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
+
OSA uses the shared `[llm]` model settings unless a task-specific profile is configured. Task profiles fall back to the
|
|
305
|
+
shared settings when they do not override a value. The `--use-single-model` flag forces all tasks to use the shared
|
|
306
|
+
`[llm]` settings; omit it to allow task-specific profiles and model flags. Supported task model flags include
|
|
307
|
+
`--model-docstring`, `--model-readme`, `--model-general`, `--model-repository-quality`, `--model-paper-claims`, and
|
|
308
|
+
`--model-paper-verification`. There is no `--model-validation` option in the current CLI.
|
|
304
309
|
|
|
305
310
|
To learn how to work with the interactive CLI and view descriptions of all available keys, visit
|
|
306
311
|
the [CLI usage guide](./docs/scheduler/index.md).
|
|
@@ -314,9 +319,23 @@ Examples of generated README files are available in [examples](./examples).
|
|
|
314
319
|
URL of the GitHub/GitLab/Gitverse repository, LLM API service provider (*optional*) and Specific LLM model to use
|
|
315
320
|
(*optional*) are required to use the generator.
|
|
316
321
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
full list.
|
|
322
|
+
OSA supports the subscription-backed Host LLM provider directly. `HOST_LLM_COMMAND` currently expects the Codex CLI protocol; use the bridge or an API-backed provider when custom generation controls are required. Other LLM providers are available as part of the
|
|
323
|
+
[ProtoLLM](https://github.com/aimclub/ProtoLLM/) ecosystem. See the
|
|
324
|
+
[connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the full list.
|
|
325
|
+
|
|
326
|
+
Subscription-backed Host LLM:
|
|
327
|
+
|
|
328
|
+
```sh
|
|
329
|
+
export HOST_LLM_COMMAND=codex
|
|
330
|
+
python -m osa_tool.run -r https://github.com/aimclub/OSA --api host
|
|
331
|
+
```
|
|
332
|
+
|
|
333
|
+
OpenAI-compatible API key:
|
|
334
|
+
|
|
335
|
+
```sh
|
|
336
|
+
export OPENAI_API_KEY=<your_api_key>
|
|
337
|
+
python -m osa_tool.run -r https://github.com/aimclub/OSA --api openai --base-url https://api.openai.com/v1 --model gpt-4o
|
|
338
|
+
```
|
|
320
339
|
|
|
321
340
|
Local ITMO model:
|
|
322
341
|
|
|
@@ -78,18 +78,12 @@ Here is a short video:
|
|
|
78
78
|
including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
|
|
79
79
|
|
|
80
80
|
6. **Repository-quality score**: Evaluates a repository against formal criteria such as a non-empty README and
|
|
81
|
-
license file.
|
|
82
|
-
`python -m osa_tool.tools.repository_quality` or as part of paper analysis.
|
|
81
|
+
license file. The score is available as part of paper analysis with `--include-repository-quality`.
|
|
83
82
|
|
|
84
|
-
7. **
|
|
85
|
-
`paper_claims` operation and batch utilities. This pipeline is available as a separate module and is not registered
|
|
86
|
-
in the scheduler yet.
|
|
87
|
-
|
|
88
|
-
8. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
|
|
83
|
+
7. **Paper repository analysis**: The canonical `osa-tool --paper-analysis` mode extracts or resumes typed paper
|
|
89
84
|
claims and verifies them against a repository. Formal repository-quality scoring is optional through
|
|
90
|
-
`--include-repository-quality
|
|
91
|
-
|
|
92
|
-
entry points remove only a remote clone created by that invocation, never a user-supplied local repository.
|
|
85
|
+
`--include-repository-quality`. With `--delete-dir`, the command removes only a remote clone created by that
|
|
86
|
+
invocation, never a user-supplied local repository.
|
|
93
87
|
|
|
94
88
|
---
|
|
95
89
|
|
|
@@ -108,10 +102,13 @@ Install optional features when needed:
|
|
|
108
102
|
```sh
|
|
109
103
|
# PDF-to-claims extraction and evaluation utilities
|
|
110
104
|
pip install "osa_tool[paper-claims]"
|
|
105
|
+
|
|
106
|
+
# Add the optional local Marker parser
|
|
107
|
+
pip install "osa_tool[paper-claims,paper-claims-marker]"
|
|
111
108
|
```
|
|
112
109
|
|
|
113
|
-
The core package
|
|
114
|
-
|
|
110
|
+
The core package and remote PDF parsers support Python 3.11 and later. The optional Marker parser requires Python
|
|
111
|
+
3.11--3.14 because its dependency stack is not available for Python 3.15+.
|
|
115
112
|
|
|
116
113
|
**Build from source:**
|
|
117
114
|
|
|
@@ -164,31 +161,29 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
|
|
|
164
161
|
|
|
165
162
|
OSA requires Python 3.11 or higher.
|
|
166
163
|
|
|
167
|
-
|
|
168
|
-
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
169
|
-
--no-fork option).
|
|
170
|
-
|
|
171
|
-
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
172
|
-
Gitverse respectively.
|
|
173
|
-
|
|
174
|
-
When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
|
|
164
|
+
OSA can be configured in two common ways:
|
|
175
165
|
|
|
176
166
|
```sh
|
|
177
|
-
#
|
|
178
|
-
export
|
|
167
|
+
# Subscription-backed Host LLM provider (api = "host")
|
|
168
|
+
export HOST_LLM_COMMAND=codex
|
|
179
169
|
export GIT_TOKEN=<your_git_token>
|
|
180
170
|
|
|
181
|
-
#
|
|
182
|
-
|
|
183
|
-
|
|
171
|
+
# OpenAI-compatible API provider (--api openai)
|
|
172
|
+
export OPENAI_API_KEY=<your_api_key>
|
|
173
|
+
export GIT_TOKEN=<your_git_token>
|
|
184
174
|
```
|
|
185
175
|
|
|
176
|
+
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
177
|
+
--no-fork option). Instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab,
|
|
178
|
+
and Gitverse respectively. `AUTHORIZATION_KEY` is only needed when using Gigachat.
|
|
179
|
+
|
|
186
180
|
### Tokens
|
|
187
181
|
|
|
188
182
|
| Token name | Description | Mandatory |
|
|
189
183
|
|---------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|
|
|
190
184
|
| `GIT_TOKEN` | Personal GitHub/GitLab/Gitverse token used to clone private repositories, access metadata, and interact with its API. | Yes |
|
|
191
|
-
| `
|
|
185
|
+
| `HOST_LLM_COMMAND` | Logged-in Codex CLI command used by the subscription-backed `api = "host"` provider (`codex`). | No |
|
|
186
|
+
| `OPENAI_API_KEY` | API key for accessing [OpenAI](https://platform.openai.com/docs/api-reference/introduction), [vsegpt](https://vsegpt.ru/Docs/API), and [openrouter](https://openrouter.ai/) providers through `--api openai`. | No |
|
|
192
187
|
| `AUTHORIZATION_KEY` | API key for [gigachat](https://developers.sber.ru/portal/products/gigachat-api) provider | No |
|
|
193
188
|
| `X-API-Key` | API key for the [pepy.tech](https://pepy.tech/pepy-api) REST API, used to fetch Python package download statistics | No |
|
|
194
189
|
|
|
@@ -210,6 +205,8 @@ python -m osa_tool.run -r {repository} [--api {api}] [--base-url {base_url}] [--
|
|
|
210
205
|
docker run --env-file .env {image-name} -r {repository} [--api {api}] [--base-url {base_url}] [--model {model_name}] [--attachment {article}] [--convert-notebooks {notebook_paths}]
|
|
211
206
|
```
|
|
212
207
|
|
|
208
|
+
Docker runs default to the OpenAI-compatible API-key provider because the container cannot inherit a logged-in host command from the user's machine. Pass `--api host` only when the container has access to a host command or bridge.
|
|
209
|
+
|
|
213
210
|
The --attachment option enables you to choose a README template for a repository based on an article. You can provide
|
|
214
211
|
either a link to a PDF file of the article or a path to a local PDF file after the --attachment option. If you are using
|
|
215
212
|
Docker, ensure that you upload the PDF file to the OSA folder before building the image, then, specify the path as
|
|
@@ -220,30 +217,34 @@ documentation, see the [Workflow Generator README](./osa_tool/operations/codebas
|
|
|
220
217
|
|
|
221
218
|
### Configuration
|
|
222
219
|
|
|
223
|
-
| Flag
|
|
224
|
-
|
|
225
|
-
| `-r`, `--repository`
|
|
226
|
-
| `-b`, `--branch`
|
|
227
|
-
|
|
|
228
|
-
| `--
|
|
229
|
-
| `--
|
|
230
|
-
| `--
|
|
231
|
-
| `--
|
|
232
|
-
| `--
|
|
233
|
-
| `--
|
|
234
|
-
| `--
|
|
235
|
-
| `--
|
|
236
|
-
|
|
|
237
|
-
| `--
|
|
238
|
-
| `--
|
|
239
|
-
| `--no-
|
|
220
|
+
| Flag | Description | Default |
|
|
221
|
+
|------------------------|-------------------------------------------------------------------------------------|--------------------------------|
|
|
222
|
+
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
|
|
223
|
+
| `-b`, `--branch` | Branch name of the repository | Default branch |
|
|
224
|
+
| `--based-on-date` | Analyse the repository version closest to the given date (forces no fork / no PR) | `None` |
|
|
225
|
+
| `-o`, `--output` | Path to the output directory | Current working directory |
|
|
226
|
+
| `--api` | LLM API service provider | `openai` |
|
|
227
|
+
| `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
|
|
228
|
+
| `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
|
|
229
|
+
| `--top-p` | Nucleus sampling probability | `0.95` |
|
|
230
|
+
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
|
|
231
|
+
| `--max-tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
|
|
232
|
+
| `--context-window` | Total number of model context (Input + Output) | `16385` |
|
|
233
|
+
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
|
|
234
|
+
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
|
|
235
|
+
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
|
|
236
|
+
| `--no-fork` | Avoid create fork for target repository | `False` |
|
|
237
|
+
| `--no-pull-request` | Avoid create pull request for target repository | `False` |
|
|
238
|
+
| `--artefacts-language` | Language for report generation | `English` |
|
|
240
239
|
|
|
241
240
|
Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom
|
|
242
241
|
configuration file. If no custom configuration file is provided, OSA will use the default configuration.
|
|
243
242
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
243
|
+
OSA uses the shared `[llm]` model settings unless a task-specific profile is configured. Task profiles fall back to the
|
|
244
|
+
shared settings when they do not override a value. The `--use-single-model` flag forces all tasks to use the shared
|
|
245
|
+
`[llm]` settings; omit it to allow task-specific profiles and model flags. Supported task model flags include
|
|
246
|
+
`--model-docstring`, `--model-readme`, `--model-general`, `--model-repository-quality`, `--model-paper-claims`, and
|
|
247
|
+
`--model-paper-verification`. There is no `--model-validation` option in the current CLI.
|
|
247
248
|
|
|
248
249
|
To learn how to work with the interactive CLI and view descriptions of all available keys, visit
|
|
249
250
|
the [CLI usage guide](./docs/scheduler/index.md).
|
|
@@ -257,9 +258,23 @@ Examples of generated README files are available in [examples](./examples).
|
|
|
257
258
|
URL of the GitHub/GitLab/Gitverse repository, LLM API service provider (*optional*) and Specific LLM model to use
|
|
258
259
|
(*optional*) are required to use the generator.
|
|
259
260
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
full list.
|
|
261
|
+
OSA supports the subscription-backed Host LLM provider directly. `HOST_LLM_COMMAND` currently expects the Codex CLI protocol; use the bridge or an API-backed provider when custom generation controls are required. Other LLM providers are available as part of the
|
|
262
|
+
[ProtoLLM](https://github.com/aimclub/ProtoLLM/) ecosystem. See the
|
|
263
|
+
[connectors directory](https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors) for the full list.
|
|
264
|
+
|
|
265
|
+
Subscription-backed Host LLM:
|
|
266
|
+
|
|
267
|
+
```sh
|
|
268
|
+
export HOST_LLM_COMMAND=codex
|
|
269
|
+
python -m osa_tool.run -r https://github.com/aimclub/OSA --api host
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
OpenAI-compatible API key:
|
|
273
|
+
|
|
274
|
+
```sh
|
|
275
|
+
export OPENAI_API_KEY=<your_api_key>
|
|
276
|
+
python -m osa_tool.run -r https://github.com/aimclub/OSA --api openai --base-url https://api.openai.com/v1 --model gpt-4o
|
|
277
|
+
```
|
|
263
278
|
|
|
264
279
|
Local ITMO model:
|
|
265
280
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
language = "English"
|
|
2
|
+
|
|
3
|
+
[translations]
|
|
4
|
+
report_header = "Repository Analysis Report"
|
|
5
|
+
statistics = "Statistics"
|
|
6
|
+
values = "Values"
|
|
7
|
+
stars_count = "Stars Count"
|
|
8
|
+
forks_count = "Forks Count"
|
|
9
|
+
issues_count = "Issues Count"
|
|
10
|
+
metric = "Metric"
|
|
11
|
+
readme_presence = "README Presence"
|
|
12
|
+
license_presence = "License Presence"
|
|
13
|
+
documentation_presence = "Documentation Presence"
|
|
14
|
+
examples_presence = "Examples Presence"
|
|
15
|
+
requirements_presence = "Requirements Presence"
|
|
16
|
+
tests_presence = "Tests Presence"
|
|
17
|
+
description_presence = "Description Presence"
|
|
18
|
+
repository_name = "Repository Name"
|
|
19
|
+
owner = "Owner"
|
|
20
|
+
created_at = "Created at"
|
|
21
|
+
repository_structure = "Repository Structure"
|
|
22
|
+
compliance = "Compliance"
|
|
23
|
+
missing_files = "Missing Files"
|
|
24
|
+
organization = "Organization"
|
|
25
|
+
readme_analysis = "README Analysis"
|
|
26
|
+
quality = "Quality"
|
|
27
|
+
documentation = "Documentation"
|
|
28
|
+
test_present = "Test present"
|
|
29
|
+
documentation_quality = "Document quality"
|
|
30
|
+
outdated_content = "Outdated content"
|
|
31
|
+
key_shortcomings = "Key Shortcomings"
|
|
32
|
+
recommendations = "Recommendations"
|
|
33
|
+
readme_quality = "text"
|
|
34
|
+
project_description = "Project description"
|
|
35
|
+
installation = "Installation"
|
|
36
|
+
usage_examples = "Usage examples"
|
|
37
|
+
contribution_guidelines = "Contribution guidelines"
|
|
38
|
+
license_specified = "License specified"
|
|
39
|
+
badges_present = "Badges present"
|
|
40
|
+
summary_header = "OSA Work Summary"
|
|
41
|
+
what_have_been_done = "What have been done"
|
|
42
|
+
report_by_tasks = "Report by tasks"
|
|
43
|
+
yes = "Yes"
|
|
44
|
+
no = "No"
|
|
45
|
+
partial = "Partial"
|
|
46
|
+
report = "Report"
|
|
47
|
+
translate_dirs = "Translate dirs"
|
|
48
|
+
convert_notebooks = "Convert notebooks"
|
|
49
|
+
translate_readme = "Translate readme"
|
|
50
|
+
ensure_license = "Ensure license"
|
|
51
|
+
community_docs = "Community docs"
|
|
52
|
+
docstring = "Docstring"
|
|
53
|
+
ignore_list = "Ignore list"
|
|
54
|
+
incremental = "Incremental"
|
|
55
|
+
target_files = "Target files"
|
|
56
|
+
readme = "Readme"
|
|
57
|
+
refine_readme = "Refine readme"
|
|
58
|
+
requirements = "Requirements"
|
|
59
|
+
organize = "Organize"
|
|
60
|
+
about = "About"
|
|
61
|
+
validate_paper = "Validate paper"
|
|
62
|
+
validate_doc = "Validate doc"
|
|
63
|
+
author = "Author"
|
|
64
|
+
generate_workflows = "Generate workflows"
|
|
65
|
+
include_tests = "Include tests"
|
|
66
|
+
include_black = "Include black"
|
|
67
|
+
include_pep8 = "Include pep8"
|
|
68
|
+
include_autopep8 = "Include autopep8"
|
|
69
|
+
include_fix_pep8 = "Include fix pep8"
|
|
70
|
+
include_pypi = "Include pypi"
|
|
71
|
+
python_versions = "Python versions"
|
|
72
|
+
pep8_tool = "Pep8 tool"
|
|
73
|
+
use_poetry = "Use poetry"
|
|
74
|
+
include_codecov = "Include codecov"
|
|
75
|
+
unknown = "Unknown"
|
|
76
|
+
for = "for"
|
|
77
|
+
|
|
78
|
+
# Notebook Analysis Report
|
|
79
|
+
notebook_report_header = "Notebook Analysis Report"
|
|
80
|
+
notebook_summary = "Notebook Summary"
|
|
81
|
+
value = "Value"
|
|
82
|
+
quality_signals = "Quality Signals"
|
|
83
|
+
total_notebooks_scanned = "Total notebooks scanned"
|
|
84
|
+
total_findings = "Total findings"
|
|
85
|
+
successfully_analyzed = "Successfully analyzed"
|
|
86
|
+
invalid_syntax_notebooks = "Invalid syntax notebooks"
|
|
87
|
+
read_or_parse_failures = "Read or parse failures"
|
|
88
|
+
fully_non_executed_notebooks = "Fully non-executed notebooks"
|
|
89
|
+
notebooks_with_findings = "Notebooks with findings"
|
|
90
|
+
analysis_scope = "Analysis scope"
|
|
91
|
+
repository_wide = "Repository-wide"
|
|
92
|
+
overview = "Overview"
|
|
93
|
+
notebook_overview_text = "This report reviewed <b>{total_notebooks}</b> notebook(s) and recorded <b>{total_issues}</b> finding(s) across structure, execution, and readability."
|
|
94
|
+
notebook_explicit_targets = "Selected targets were provided explicitly: <b>{count}</b> path(s)."
|
|
95
|
+
notebook_full_scan = "Scope: full repository notebook scan."
|
|
96
|
+
most_frequent_findings = "Most Frequent Findings"
|
|
97
|
+
notebook_details = "Notebook Details"
|
|
98
|
+
status_label = "Status"
|
|
99
|
+
analysis_errors_present = "analysis errors present"
|
|
100
|
+
finding_count = "{count} finding(s)"
|
|
101
|
+
no_findings_detected = "no findings detected"
|
|
102
|
+
cells_line = "Cells: total <b>{total}</b>, code {code}, markdown {markdown}, raw {raw}"
|
|
103
|
+
markdown_line = "Markdown lines {lines}, titles {titles}, functions {functions}, classes {classes}"
|
|
104
|
+
analysis_error_line = "Analysis error: {error}"
|
|
105
|
+
no_notebook_issues = "No notebook issues detected."
|
|
106
|
+
recommendation_label = "Recommendation"
|
|
107
|
+
|
|
108
|
+
# Notebook issue catalog (keyed by NotebookReportAnalyzer's slug).
|
|
109
|
+
# NOTE: the "notebook-too-long" text below bakes in the current _MAX_CELLS_IN_NOTEBOOK
|
|
110
|
+
# threshold (50); update both locales together if that constant ever changes.
|
|
111
|
+
"notebook_issue_non-linear-execution_description" = "Notebook cells were executed in a non-linear order."
|
|
112
|
+
"notebook_issue_non-linear-execution_recommendation" = "Re-run your notebook top to bottom to ensure it is reproducible."
|
|
113
|
+
"notebook_issue_notebook-too-long_description" = "Notebook contains more than 50 cells."
|
|
114
|
+
"notebook_issue_notebook-too-long_recommendation" = "Split this notebook into two or more notebooks."
|
|
115
|
+
"notebook_issue_imports-beyond-first-cell_description" = "Import statements were found beyond the first code cell."
|
|
116
|
+
"notebook_issue_imports-beyond-first-cell_recommendation" = "Move import statements to the first code cell to make your notebook dependencies more explicit."
|
|
117
|
+
"notebook_issue_missing-h1-heading_description" = "Initial cells do not contain an H1 markdown heading."
|
|
118
|
+
"notebook_issue_missing-h1-heading_recommendation" = "Clarify the notebook subject by writing an H1 Markdown heading in one of the initial cells of your notebook."
|
|
119
|
+
"notebook_issue_missing-opening-markdown_description" = "Initial notebook cells do not contain descriptive markdown text."
|
|
120
|
+
"notebook_issue_missing-opening-markdown_recommendation" = "Begin your notebook by describing what you intend to do in one or more introductory Markdown cells."
|
|
121
|
+
"notebook_issue_missing-closing-markdown_description" = "Final notebook cells do not contain descriptive markdown text."
|
|
122
|
+
"notebook_issue_missing-closing-markdown_recommendation" = "Conclude your notebook by describing what you have accomplished in one or more concluding Markdown cells."
|
|
123
|
+
"notebook_issue_too-few-markdown-cells_description" = "Notebook contains too few markdown cells relative to code cells."
|
|
124
|
+
"notebook_issue_too-few-markdown-cells_recommendation" = "Describe the steps of your computation by adding a few more Markdown cells."
|
|
125
|
+
"notebook_issue_invalid-python-syntax_description" = "Notebook contains invalid Python syntax in exported code."
|
|
126
|
+
"notebook_issue_invalid-python-syntax_recommendation" = "Fix syntax errors in the notebook code cells."
|
|
127
|
+
"notebook_issue_non-executed-notebook_description" = "All code cells appear to be non-executed."
|
|
128
|
+
"notebook_issue_non-executed-notebook_recommendation" = "Before committing, run your notebook top to bottom to ensure that all cells are executed."
|
|
129
|
+
"notebook_issue_non-executed-cells_description" = "Notebook contains non-executed code cells."
|
|
130
|
+
"notebook_issue_non-executed-cells_recommendation" = "Re-run your notebook top to bottom to ensure that all cells are executed."
|
|
131
|
+
"notebook_issue_empty-cells_description" = "Notebook contains empty code cells."
|
|
132
|
+
"notebook_issue_empty-cells_recommendation" = "Keep your notebook clean by deleting unused cells."
|
|
133
|
+
"notebook_issue_long-multiline-python-comment_description" = "Notebook contains long multiline Python comments inside code cells."
|
|
134
|
+
"notebook_issue_long-multiline-python-comment_recommendation" = "For improved notebook readability, prefer using Markdown formatted text to long multiline Python comments."
|
|
135
|
+
"notebook_issue_cell-too-long_description" = "Notebook contains long code cells."
|
|
136
|
+
"notebook_issue_cell-too-long_recommendation" = "Consider consolidating your code outside the notebook by moving utility functions to a structured and tested codebase.\nUse notebooks to display results, not to compute them."
|
|
137
|
+
"notebook_issue_untitled-notebook_description" = "Notebook still uses a default Untitled name."
|
|
138
|
+
"notebook_issue_untitled-notebook_recommendation" = "Give it a meaningful title to make it easy to recognize."
|
|
139
|
+
"notebook_issue_non-portable-chars-in-name_description" = "Notebook filename contains non-portable characters."
|
|
140
|
+
"notebook_issue_non-portable-chars-in-name_recommendation" = "Rename your notebook by using characters contained in the following portable charset: [A-Za-z0-9_.-]."
|
|
141
|
+
"notebook_issue_duplicate-notebook-not-renamed_description" = "Notebook looks like a duplicate copy that was not renamed."
|
|
142
|
+
"notebook_issue_duplicate-notebook-not-renamed_recommendation" = "Give it a meaningful title to make it easy to recognize."
|
|
143
|
+
|
|
144
|
+
# Notebook issue short labels (used in the "Most Frequent Findings" list).
|
|
145
|
+
"notebook_issue_non-linear-execution_label" = "Non-linear execution"
|
|
146
|
+
"notebook_issue_notebook-too-long_label" = "Notebook too long"
|
|
147
|
+
"notebook_issue_imports-beyond-first-cell_label" = "Imports beyond first cell"
|
|
148
|
+
"notebook_issue_missing-h1-heading_label" = "Missing H1 heading"
|
|
149
|
+
"notebook_issue_missing-opening-markdown_label" = "Missing opening markdown"
|
|
150
|
+
"notebook_issue_missing-closing-markdown_label" = "Missing closing markdown"
|
|
151
|
+
"notebook_issue_too-few-markdown-cells_label" = "Too few markdown cells"
|
|
152
|
+
"notebook_issue_invalid-python-syntax_label" = "Invalid Python syntax"
|
|
153
|
+
"notebook_issue_non-executed-notebook_label" = "Non-executed notebook"
|
|
154
|
+
"notebook_issue_non-executed-cells_label" = "Non-executed cells"
|
|
155
|
+
"notebook_issue_empty-cells_label" = "Empty cells"
|
|
156
|
+
"notebook_issue_long-multiline-python-comment_label" = "Long multiline Python comment"
|
|
157
|
+
"notebook_issue_cell-too-long_label" = "Cell too long"
|
|
158
|
+
"notebook_issue_untitled-notebook_label" = "Untitled notebook"
|
|
159
|
+
"notebook_issue_non-portable-chars-in-name_label" = "Non-portable characters in name"
|
|
160
|
+
"notebook_issue_duplicate-notebook-not-renamed_label" = "Duplicate notebook not renamed"
|
|
161
|
+
|
|
162
|
+
# Notebook issue "details" fragments (only slugs that carry dynamic details_kwargs).
|
|
163
|
+
"notebook_issue_notebook-too-long_details" = "Detected {count} cells."
|
|
164
|
+
"notebook_issue_too-few-markdown-cells_details" = "Markdown/code ratio is {ratio:.2f}."
|
|
165
|
+
"notebook_issue_non-executed-cells_details" = "{count} code cell(s) are non-executed."
|
|
166
|
+
"notebook_issue_empty-cells_details" = "{count} empty code cell(s) detected."
|
|
167
|
+
"notebook_issue_long-multiline-python-comment_details" = "{count} code cell(s) contain long comment blocks."
|
|
168
|
+
"notebook_issue_cell-too-long_details" = "{count} code cell(s) exceed {limit} lines."
|