open-data-sci 0.1.0__tar.gz → 0.2.0__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.
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/.env.example +1 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/PKG-INFO +112 -23
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/README.md +110 -21
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/dev/scripts/test_pypi_install.sh +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/dev/scripts/test_pypi_publish.sh +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/agent.md +44 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/config.md +17 -19
- open_data_sci-0.2.0/docs/api/index.md +43 -0
- open_data_sci-0.2.0/docs/api/memory.md +103 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/open_data_sci.md +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/session.md +16 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/session_manager.md +10 -18
- open_data_sci-0.2.0/docs/api/skills.md +86 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/types.md +17 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/getting-started.md +41 -20
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/index.md +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/README.md +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_anthropic.yaml +5 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_azure.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_bedrock.yaml +4 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_gemini.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_ollama.yaml +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_openai.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_openai_compatible_server.yaml +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/configs/config_vertexai.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/notebooks/030_notebook_anthropic.ipynb +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/notebooks/031_notebook_openai_compatible_server.ipynb +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/notebooks/032_notebook_bedrock.ipynb +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/scripts/021_script_openai_compatible_server.py +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/scripts/022_script_bedrock.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/tui/010_tui_anthropic.md +8 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/tui/011_tui_openai_compatible_server.md +17 -14
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/tui/012_tui_bedrock.md +7 -5
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/mkdocs.yaml +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/__init__.py +6 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/adapter.py +11 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/app.py +45 -11
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/commands.py +10 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/controller.py +159 -47
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/file_refs.py +6 -2
- open_data_sci-0.2.0/opendatasci/_tui/message_queue.py +49 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/presenter.py +41 -22
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/service.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/styles.tcss +46 -49
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/theme.py +39 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/tools_display.py +50 -16
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/widgets.py +267 -91
- open_data_sci-0.2.0/opendatasci/_utils/async_utils.py +22 -0
- open_data_sci-0.2.0/opendatasci/_utils/casing_utils.py +8 -0
- open_data_sci-0.2.0/opendatasci/_utils/datetime_utils.py +10 -0
- open_data_sci-0.2.0/opendatasci/_utils/graph_utils.py +8 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_utils/hash_utils.py +1 -2
- open_data_sci-0.2.0/opendatasci/_utils/message_utils.py +92 -0
- open_data_sci-0.2.0/opendatasci/_utils/mixins.py +21 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/agents/__init__.py +1 -7
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/agents/agents.py +126 -127
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/agents/agents_factory.py +15 -6
- open_data_sci-0.2.0/opendatasci/agents/chat_history.py +198 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/agents/graphs.py +6 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/agents/nodes.py +18 -14
- open_data_sci-0.2.0/opendatasci/agents/states.py +87 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/configs.py +46 -34
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/context/__init__.py +1 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/context/base.py +20 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/context/local.py +33 -45
- open_data_sci-0.2.0/opendatasci/context/plans.py +17 -0
- open_data_sci-0.2.0/opendatasci/human_inputs/__init__.py +15 -0
- open_data_sci-0.2.0/opendatasci/human_inputs/human_approval.py +162 -0
- open_data_sci-0.2.0/opendatasci/memory/chat_memory.py +256 -0
- open_data_sci-0.2.0/opendatasci/memory/messages.py +179 -0
- {open_data_sci-0.1.0/opendatasci/agents → open_data_sci-0.2.0/opendatasci/memory}/turn_memory.py +2 -1
- open_data_sci-0.2.0/opendatasci/models/__init__.py +3 -0
- open_data_sci-0.2.0/opendatasci/models/anthropic.py +80 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/aws.py +11 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/local.py +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/prompts/__init__.py +1 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/prompts/builders.py +20 -34
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/prompts/prompt_templates.py +14 -9
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/competitive_data_science/manifest.md +67 -0
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/data_science/manifest.md +51 -0
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/data_science_education/manifest.md +45 -0
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/deep_learning/manifest.md +69 -0
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/machine_learning/manifest.md +57 -0
- open_data_sci-0.2.0/opendatasci/resources/skill_domains/quantitative_analysis/manifest.md +45 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/baseline.md +21 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/eda.md +26 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/ensembling.md +31 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/feature_engineering.md +38 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/final_submission.md +23 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/hyperparameter_tuning.md +23 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/model_development.md +29 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/phase_wiring.md +19 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/reconnaissance.md +26 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/competitive_data_science/validation.md +31 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/causality_confounding.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/communicating_findings.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/data_quality_preparation.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/exploratory_analysis.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/framing_the_problem.md +9 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/granularity_aggregation.md +9 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/modeling_evaluation.md +13 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science/statistical_testing.md +12 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/building_intuition.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/calibrating_depth.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/connecting_concepts.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/diagnosing_understanding.md +9 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/feedback_correction.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/structuring_explanations.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/data_science_education/worked_examples_code.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/architecture_selection.md +27 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/evaluation.md +14 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/flax_nnx.md +29 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/hyperparameter_tuning.md +17 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/jax_fundamentals.md +23 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/library_stack.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/optax.md +38 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/regularisation_overfitting.md +25 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/sklearn_mlp.md +12 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/training_loop.md +29 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/deep_learning/when_to_use.md +13 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/class_imbalance.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/evaluation_diagnostics.md +12 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/feature_engineering_selection.md +12 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/hyperparameter_tuning.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/interpretability.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/model_selection_complexity.md +16 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/overfitting_regularisation.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/problem_framing.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/machine_learning/splitting_strategy.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/backtesting_empirical_validation.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/communicating_results.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/mathematical_statistical_foundations.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/optimisation.md +10 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/problem_formulation.md +9 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/risk_uncertainty_quantification.md +11 -0
- open_data_sci-0.2.0/opendatasci/resources/skills/quantitative_analysis/time_series_signal_analysis.md +11 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/sandbox/srt.py +5 -1
- open_data_sci-0.2.0/opendatasci/session/__init__.py +4 -0
- open_data_sci-0.2.0/opendatasci/session/session_manager.py +113 -0
- open_data_sci-0.2.0/opendatasci/session/threads.py +17 -0
- open_data_sci-0.2.0/opendatasci/skills/__init__.py +4 -0
- open_data_sci-0.2.0/opendatasci/skills/base.py +71 -0
- open_data_sci-0.2.0/opendatasci/skills/local.py +143 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/streaming/__init__.py +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/streaming/events.py +17 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/streaming/processors.py +112 -30
- open_data_sci-0.2.0/opendatasci/tools/__init__.py +4 -0
- open_data_sci-0.2.0/opendatasci/tools/base.py +85 -0
- open_data_sci-0.2.0/opendatasci/tools/coding.py +393 -0
- open_data_sci-0.2.0/opendatasci/tools/critic.py +172 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/tools/dataset_info.py +142 -82
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/tools/factory.py +33 -59
- open_data_sci-0.2.0/opendatasci/tools/planning.py +121 -0
- open_data_sci-0.2.0/opendatasci/tools/skills.py +215 -0
- open_data_sci-0.2.0/opendatasci/tools/user_interaction.py +82 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/tools/web.py +101 -58
- open_data_sci-0.2.0/opendatasci/tools/workers.py +244 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/tools/workspace.py +33 -16
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/workspace/__init__.py +1 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/pyproject.toml +4 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/conftest.py +8 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_agent_integrations.py +46 -30
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_cli_controller.py +278 -12
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_lifecycle.py +0 -1
- open_data_sci-0.2.0/tests/component/test_model_factories.py +460 -0
- open_data_sci-0.2.0/tests/component/test_sandbox_runner.py +189 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_service.py +17 -27
- open_data_sci-0.2.0/tests/component/test_tui_app.py +474 -0
- open_data_sci-0.2.0/tests/component/test_tui_widgets.py +737 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/conftest.py +0 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_app.py +111 -3
- open_data_sci-0.2.0/tests/unit/_tui/test_commands.py +235 -0
- open_data_sci-0.2.0/tests/unit/_tui/test_completion.py +364 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_controller.py +208 -5
- open_data_sci-0.2.0/tests/unit/_tui/test_file_refs.py +402 -0
- open_data_sci-0.2.0/tests/unit/_tui/test_message_queue.py +259 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_presenter.py +76 -20
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_tools_display.py +25 -19
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_widgets.py +679 -112
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_utils/test_async_utils.py +1 -1
- open_data_sci-0.2.0/tests/unit/_utils/test_graph_utils.py +48 -0
- open_data_sci-0.2.0/tests/unit/_utils/test_message_utils.py +273 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/agents/test_agents.py +187 -57
- open_data_sci-0.2.0/tests/unit/agents/test_chat_messages.py +194 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/agents/test_graphs.py +3 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/agents/test_nodes.py +51 -71
- open_data_sci-0.2.0/tests/unit/agents/test_states.py +46 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/context/test_local_context_store.py +82 -39
- open_data_sci-0.2.0/tests/unit/human_inputs/test_human_approval.py +192 -0
- open_data_sci-0.2.0/tests/unit/memory/test_chat_memory.py +353 -0
- {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.0/tests/unit/memory}/test_turn_memory.py +32 -31
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_anthropic.py +20 -10
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_local.py +4 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/prompts/test_builders.py +56 -108
- open_data_sci-0.2.0/tests/unit/sandbox/__init__.py +0 -0
- open_data_sci-0.2.0/tests/unit/session/__init__.py +0 -0
- open_data_sci-0.2.0/tests/unit/session/test_session_manager.py +124 -0
- open_data_sci-0.2.0/tests/unit/skills/__init__.py +0 -0
- open_data_sci-0.2.0/tests/unit/skills/test_local.py +314 -0
- open_data_sci-0.2.0/tests/unit/streaming/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/streaming/test_processors.py +137 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/test_configs.py +6 -5
- open_data_sci-0.2.0/tests/unit/tools/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_coding.py +142 -44
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_critic.py +5 -5
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_dataset_info.py +10 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_factory.py +70 -14
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_planning.py +32 -29
- open_data_sci-0.2.0/tests/unit/tools/test_skills.py +249 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_user_interaction.py +9 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_workers.py +41 -30
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/uv.lock +18 -14
- open_data_sci-0.1.0/docs/api/index.md +0 -57
- open_data_sci-0.1.0/docs/api/memory.md +0 -62
- open_data_sci-0.1.0/opendatasci/_tui/__init__.py +0 -1
- open_data_sci-0.1.0/opendatasci/_tui/styles_visible.tcss +0 -245
- open_data_sci-0.1.0/opendatasci/_utils/async_utils.py +0 -11
- open_data_sci-0.1.0/opendatasci/_utils/langchain_utils.py +0 -155
- open_data_sci-0.1.0/opendatasci/agents/chat_memory.py +0 -397
- open_data_sci-0.1.0/opendatasci/agents/states.py +0 -36
- open_data_sci-0.1.0/opendatasci/models/__init__.py +0 -7
- open_data_sci-0.1.0/opendatasci/models/anthropic.py +0 -40
- open_data_sci-0.1.0/opendatasci/prompts/message_templates.py +0 -7
- open_data_sci-0.1.0/opendatasci/resources/skills/competitive_data_science.md +0 -241
- open_data_sci-0.1.0/opendatasci/resources/skills/data_science.md +0 -55
- open_data_sci-0.1.0/opendatasci/resources/skills/data_science_education.md +0 -42
- open_data_sci-0.1.0/opendatasci/resources/skills/deep_learning.md +0 -205
- open_data_sci-0.1.0/opendatasci/resources/skills/machine_learning.md +0 -68
- open_data_sci-0.1.0/opendatasci/resources/skills/quantitative_analysis.md +0 -45
- open_data_sci-0.1.0/opendatasci/skills/__init__.py +0 -9
- open_data_sci-0.1.0/opendatasci/skills/base.py +0 -28
- open_data_sci-0.1.0/opendatasci/skills/local.py +0 -131
- open_data_sci-0.1.0/opendatasci/tools/__init__.py +0 -58
- open_data_sci-0.1.0/opendatasci/tools/coding.py +0 -261
- open_data_sci-0.1.0/opendatasci/tools/critic.py +0 -136
- open_data_sci-0.1.0/opendatasci/tools/planning.py +0 -88
- open_data_sci-0.1.0/opendatasci/tools/skills.py +0 -90
- open_data_sci-0.1.0/opendatasci/tools/user_interaction.py +0 -54
- open_data_sci-0.1.0/opendatasci/tools/workers.py +0 -237
- open_data_sci-0.1.0/tests/unit/_utils/test_langchain_utils.py +0 -382
- open_data_sci-0.1.0/tests/unit/agents/test_chat_memory.py +0 -187
- open_data_sci-0.1.0/tests/unit/skills/test_local.py +0 -213
- open_data_sci-0.1.0/tests/unit/tools/test_skills.py +0 -152
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/.gitignore +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/LICENSE +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/Makefile +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/api/workbench.md +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/docs/requirements.txt +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/examples/scripts/020_script_anthropic.py +0 -0
- {open_data_sci-0.1.0/opendatasci/_utils → open_data_sci-0.2.0/opendatasci/_tui}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/completion.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/models.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_tui/session.py +0 -0
- {open_data_sci-0.1.0/tests → open_data_sci-0.2.0/opendatasci/_utils}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_utils/data_formats.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/_utils/streaming_utils.py +0 -0
- {open_data_sci-0.1.0/tests/component → open_data_sci-0.2.0/opendatasci/memory}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/factory.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/google.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/microsoft.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/openai.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/models/providers.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/prompts/caching.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/sandbox/__init__.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/sandbox/_runner.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/sandbox/base.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/tools/mcp.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/workspace/base.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/opendatasci/workspace/local.py +0 -0
- {open_data_sci-0.1.0/tests/unit → open_data_sci-0.2.0/tests}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/_tui → open_data_sci-0.2.0/tests/component}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_real_streaming.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/component/test_streaming.py +0 -0
- {open_data_sci-0.1.0/tests/unit/_utils → open_data_sci-0.2.0/tests/unit}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.0/tests/unit/_tui}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_service.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_tui/test_session.py +0 -0
- {open_data_sci-0.1.0/tests/unit/context → open_data_sci-0.2.0/tests/unit/_utils}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_utils/test_data_formats.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/_utils/test_hash_utils.py +0 -0
- {open_data_sci-0.1.0/tests/unit/models → open_data_sci-0.2.0/tests/unit/agents}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/agents/test_agents_factory.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/conftest.py +0 -0
- {open_data_sci-0.1.0/tests/unit/prompts → open_data_sci-0.2.0/tests/unit/context}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/context/test_local_work_context.py +0 -0
- {open_data_sci-0.1.0/tests/unit/sandbox → open_data_sci-0.2.0/tests/unit/human_inputs}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/skills → open_data_sci-0.2.0/tests/unit/memory}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/streaming → open_data_sci-0.2.0/tests/unit/models}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_aws.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_google.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_microsoft.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/models/test_openai.py +0 -0
- {open_data_sci-0.1.0/tests/unit/tools → open_data_sci-0.2.0/tests/unit/prompts}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/prompts/test_caching.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/sandbox/test_cli_validation.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/sandbox/test_exec_result.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/sandbox/test_runner.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/sandbox/test_srt.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_mcp.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_web.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.0}/tests/unit/tools/test_workspace.py +0 -0
|
@@ -78,9 +78,8 @@ LLM_SERVER_BASE_URL=
|
|
|
78
78
|
# (falls back to "EMPTY" when unset, which works for most local servers):
|
|
79
79
|
# OPENAI_API_KEY=
|
|
80
80
|
|
|
81
|
-
# ── Sampling
|
|
81
|
+
# ── Sampling ───────────────────────────────────────────
|
|
82
82
|
TEMPERATURE=
|
|
83
|
-
THINKING_BUDGET=
|
|
84
83
|
|
|
85
84
|
# ── Agent customization ────────────────────────────────
|
|
86
85
|
NAME=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: open-data-sci
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: AI agent for data science and machine learning
|
|
5
5
|
Project-URL: Homepage, https://github.com/f4roukb/open-data-sci
|
|
6
6
|
Project-URL: Repository, https://github.com/f4roukb/open-data-sci
|
|
@@ -218,7 +218,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
218
218
|
Requires-Python: <3.13,>=3.12
|
|
219
219
|
Requires-Dist: catboost<2.0.0,>=1.2.0
|
|
220
220
|
Requires-Dist: category-encoders<3.0.0,>=2.6.0
|
|
221
|
-
Requires-Dist:
|
|
221
|
+
Requires-Dist: duckdb<2.0.0,>=1.0.0
|
|
222
222
|
Requires-Dist: duckduckgo-search<7.0.0,>=6.0.0
|
|
223
223
|
Requires-Dist: httpx<1.0.0,>=0.27.0
|
|
224
224
|
Requires-Dist: imbalanced-learn<1.0.0,>=0.12.0
|
|
@@ -300,6 +300,7 @@ A production-grade AI agent for data science and machine learning. See the [proj
|
|
|
300
300
|
- [Python SDK](#python-sdk)
|
|
301
301
|
- [Models](#models)
|
|
302
302
|
- [Configuration](#configuration)
|
|
303
|
+
- [Custom Skills](#custom-skills)
|
|
303
304
|
- [Environment Variables](#environment-variables)
|
|
304
305
|
|
|
305
306
|
---
|
|
@@ -384,7 +385,7 @@ To use a different provider, pass `--provider`:
|
|
|
384
385
|
|
|
385
386
|
```bash
|
|
386
387
|
opendatasci data.csv --provider openai --api-key sk-...
|
|
387
|
-
opendatasci data.csv --provider ollama --model
|
|
388
|
+
opendatasci data.csv --provider ollama --model qwen3.5:9b # local, no key needed
|
|
388
389
|
```
|
|
389
390
|
|
|
390
391
|
### Setup with a config file
|
|
@@ -394,11 +395,10 @@ For a reusable configuration across projects, create a YAML file and pass it wit
|
|
|
394
395
|
```yaml
|
|
395
396
|
# datasci.yaml
|
|
396
397
|
provider: anthropic
|
|
397
|
-
model: claude-sonnet-
|
|
398
|
+
model: claude-sonnet-5
|
|
398
399
|
secondary_provider: openai
|
|
399
|
-
secondary_model: gpt-
|
|
400
|
+
secondary_model: gpt-5.6-luna
|
|
400
401
|
temperature: 0.1
|
|
401
|
-
thinking_budget: 8000
|
|
402
402
|
```
|
|
403
403
|
|
|
404
404
|
```bash
|
|
@@ -445,7 +445,6 @@ opendatasci PATH [OPTIONS]
|
|
|
445
445
|
| `--secondary-model` | *(provider default)* | Secondary model name for lightweight tasks (summarisation, etc.) |
|
|
446
446
|
| `--api-key` | *(env var)* | API key for the primary provider. Falls back to the standard env var for the selected provider |
|
|
447
447
|
| `--theme` | `default` | Colour palette. Choices: `default`, `accessible`, `light`, `solarized`, `dracula`. Run `/themes` inside the TUI for descriptions |
|
|
448
|
-
| `--debug` | `false` | Enable debug output — writes a detailed `opendatasci_debug.log` |
|
|
449
448
|
| `--config` | *(none)* | Path to a YAML file containing `OpenDataSciConfig` fields; explicit TUI flags take precedence |
|
|
450
449
|
| `--list-providers` | | Print all supported providers and their default models, then exit |
|
|
451
450
|
| `--version` | | Print the installed version, then exit |
|
|
@@ -457,7 +456,7 @@ opendatasci PATH [OPTIONS]
|
|
|
457
456
|
opendatasci data.xlsx
|
|
458
457
|
|
|
459
458
|
# Switch provider and primary model
|
|
460
|
-
opendatasci data.csv --provider openai --model gpt-
|
|
459
|
+
opendatasci data.csv --provider openai --model gpt-5.6-sol
|
|
461
460
|
|
|
462
461
|
# Bedrock with a region
|
|
463
462
|
REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
@@ -466,7 +465,7 @@ REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
|
466
465
|
opendatasci data.parquet --theme accessible
|
|
467
466
|
|
|
468
467
|
# Mix providers — heavy model on one, lightweight secondary on another
|
|
469
|
-
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.
|
|
468
|
+
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.6-luna
|
|
470
469
|
|
|
471
470
|
# See all available providers
|
|
472
471
|
opendatasci --list-providers
|
|
@@ -480,6 +479,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
480
479
|
|
|
481
480
|
| Command | Description |
|
|
482
481
|
|---------|-------------|
|
|
482
|
+
| `/cancel-all-messages` | Cancel all messages queued while the agent was busy |
|
|
483
|
+
| `/cancel-message` | Cancel the most recently queued message |
|
|
483
484
|
| `/clear` | Clear conversation context (preserves session variables and loaded data) |
|
|
484
485
|
| `/compact` | Summarise and compress conversation history to free up context |
|
|
485
486
|
| `/help` | Show all available commands |
|
|
@@ -490,6 +491,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
490
491
|
| `/themes` | List available colour themes with descriptions |
|
|
491
492
|
| `/exit` | Quit OpenDataSci |
|
|
492
493
|
|
|
494
|
+
Sending a message while the agent is still working doesn't reject it — it's pinned above the input box as a queued message and run automatically, in order, once the agent finishes (unless the agent is waiting on your answer to a question). Use `/cancel-message` or `/cancel-all-messages` to discard queued messages instead of waiting for them to run.
|
|
495
|
+
|
|
493
496
|
---
|
|
494
497
|
|
|
495
498
|
## File Attachments
|
|
@@ -554,7 +557,7 @@ from opendatasci import OpenDataSciConfig, create_agent
|
|
|
554
557
|
|
|
555
558
|
config = OpenDataSciConfig(
|
|
556
559
|
provider="openai",
|
|
557
|
-
model="gpt-
|
|
560
|
+
model="gpt-5.6-sol",
|
|
558
561
|
openai_api_key="sk-...",
|
|
559
562
|
temperature=0.2,
|
|
560
563
|
)
|
|
@@ -580,7 +583,18 @@ async with create_agent("data.parquet", config=config) as agent:
|
|
|
580
583
|
| `google_cloud_project` | GCP project ID for Vertex AI (env: `GOOGLE_CLOUD_PROJECT`) |
|
|
581
584
|
| `google_cloud_location` | Vertex AI region (env: `GOOGLE_CLOUD_LOCATION`) |
|
|
582
585
|
| `azure_endpoint` | Azure OpenAI resource endpoint URL (env: `AZURE_OPENAI_ENDPOINT`) |
|
|
586
|
+
| `azure_api_version` | Azure OpenAI API version — defaults to `2025-01-01-preview` (env: `AZURE_OPENAI_API_VERSION`) |
|
|
583
587
|
| `llm_server_base_url` | Custom API base URL — required for `ollama` and `openai_compatible_server` (env: `LLM_SERVER_BASE_URL`) |
|
|
588
|
+
| `temperature` | Sampling temperature — not sent to Claude 4.6+ / Sonnet 5 models, which use adaptive thinking (env: `TEMPERATURE`) |
|
|
589
|
+
| `name` | Display name for the agent — defaults to `"Sai"` (env: `NAME`) |
|
|
590
|
+
| `mcp_servers` | List of MCP server URLs the agent may connect to (env: `MCP_SERVERS`) |
|
|
591
|
+
| `extra_web_domains` | Additional hostnames the `fetch_url` tool may retrieve, on top of the built-in allowlist (env: `EXTRA_FETCH_DOMAINS`) |
|
|
592
|
+
| `override_web_domains` | When set, replaces the built-in domain allowlist entirely — `extra_web_domains` is still applied on top |
|
|
593
|
+
| `skills_directory` | Path to a directory of custom skill files loaded in addition to built-ins (env: `SKILLS_DIRECTORY`) |
|
|
594
|
+
| `builtin_skills_directory` | Path to the built-in skills directory — override only to replace defaults entirely (env: `BUILTIN_SKILLS_DIRECTORY`) |
|
|
595
|
+
| `worker_timeout_seconds` | Max seconds to wait for spawned workers to finish — `null` disables the timeout, default `300` (env: `WORKER_TIMEOUT_SECONDS`) |
|
|
596
|
+
| `midturn_compaction_threshold` | Token count at which context is compacted mid-turn — default `96000` (env: `MIDTURN_COMPACTION_THRESHOLD`) |
|
|
597
|
+
| `local_code_exec_timeout` | Max seconds for a single sandboxed code-execution run — default `1800` (env: `CODE_EXEC_TIMEOUT`) |
|
|
584
598
|
|
|
585
599
|
---
|
|
586
600
|
|
|
@@ -590,14 +604,14 @@ OpenDataSci supports every major LLM provider. Pass `--provider` to the TUI or s
|
|
|
590
604
|
|
|
591
605
|
| Provider | Flag | Extra required | Default model |
|
|
592
606
|
|----------|------|----------------|---------------|
|
|
593
|
-
| Anthropic | `anthropic` | *(none — default)* | `claude-sonnet-
|
|
594
|
-
| OpenAI | `openai` | *(none)* | `gpt-5.
|
|
595
|
-
| OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `
|
|
596
|
-
| AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-
|
|
597
|
-
| Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-
|
|
598
|
-
| Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-
|
|
599
|
-
| Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-
|
|
600
|
-
| Ollama | `ollama` | `open-data-sci[ollama]` | `
|
|
607
|
+
| Anthropic | `anthropic` | *(none — default)* | `claude-sonnet-5` |
|
|
608
|
+
| OpenAI | `openai` | *(none)* | `gpt-5.6-sol` |
|
|
609
|
+
| OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `Qwen/Qwen3.5-4B` |
|
|
610
|
+
| AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-5` |
|
|
611
|
+
| Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-3.5-flash` |
|
|
612
|
+
| Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-3.5-flash` |
|
|
613
|
+
| Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-5.6-sol` |
|
|
614
|
+
| Ollama | `ollama` | `open-data-sci[ollama]` | `qwen3.5:9b` |
|
|
601
615
|
|
|
602
616
|
Pass `--list-providers` to print this table from the TUI at any time.
|
|
603
617
|
|
|
@@ -611,19 +625,94 @@ Place these files inside your workspace's `.opendatasci/` directory:
|
|
|
611
625
|
|
|
612
626
|
| Path | Purpose |
|
|
613
627
|
|------|---------|
|
|
614
|
-
| `.opendatasci/mcp.json` | MCP server
|
|
628
|
+
| `.opendatasci/mcp.json` | MCP server definitions — connects the agent to external tool servers |
|
|
615
629
|
| `.opendatasci/plans/` | Persisted plan files — auto-managed, one file per planning session |
|
|
616
630
|
|
|
631
|
+
`mcp.json` uses the same convention as Cursor:
|
|
632
|
+
|
|
633
|
+
```json
|
|
634
|
+
{
|
|
635
|
+
"mcpServers": {
|
|
636
|
+
"my-server": { "url": "http://localhost:8080" },
|
|
637
|
+
"another": { "url": "http://localhost:9000" }
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
```
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
644
|
+
## Custom Skills
|
|
645
|
+
|
|
646
|
+
Skills are Markdown (or YAML/JSON) files that give the agent a specialised persona and instruction set. OpenDataSci ships several built-in skills; you can add your own at the workspace level or point the agent at any directory you choose.
|
|
647
|
+
|
|
648
|
+
### Workspace skills (recommended)
|
|
649
|
+
|
|
650
|
+
Place skill files inside `.opendatasci/skills/` in your workspace directory — they are picked up automatically, no configuration needed:
|
|
651
|
+
|
|
652
|
+
```
|
|
653
|
+
<workspace>/
|
|
654
|
+
└── .opendatasci/
|
|
655
|
+
├── skills/
|
|
656
|
+
│ ├── my_skill.md # standalone skill named "my_skill"
|
|
657
|
+
│ └── my_domain/
|
|
658
|
+
│ └── specialist.md # domain-scoped skill: "my_domain::specialist"
|
|
659
|
+
└── skill_domains/
|
|
660
|
+
└── my_domain/
|
|
661
|
+
└── manifest.md # optional domain manifest
|
|
662
|
+
```
|
|
663
|
+
|
|
664
|
+
Subdirectories create *domain-scoped* skills. The agent refers to them with the `domain::skill` naming convention (e.g. `my_domain::specialist`).
|
|
665
|
+
|
|
666
|
+
### File format
|
|
667
|
+
|
|
668
|
+
Skill files must be `.md`. The filename stem becomes the skill name and the file body is the prompt content. Files with any other extension are silently ignored.
|
|
669
|
+
|
|
670
|
+
```markdown
|
|
671
|
+
<!-- .opendatasci/skills/forecasting.md -->
|
|
672
|
+
You are a time-series forecasting specialist. When analysing data, always...
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### Global skills directory
|
|
676
|
+
|
|
677
|
+
To share skills across workspaces, set `SKILLS_DIRECTORY` in your environment or `.env` file:
|
|
678
|
+
|
|
679
|
+
```bash
|
|
680
|
+
SKILLS_DIRECTORY=/home/user/my-skills
|
|
681
|
+
```
|
|
682
|
+
|
|
683
|
+
This directory is scanned *in addition to* the workspace `.opendatasci/skills/` directory and the built-in skills. When two sources define a skill with the same name, the later source wins (built-ins → workspace → `SKILLS_DIRECTORY`).
|
|
684
|
+
|
|
685
|
+
You can also pass `skills_directory` directly when using the Python SDK:
|
|
686
|
+
|
|
687
|
+
```python
|
|
688
|
+
from opendatasci import OpenDataSciConfig, create_agent
|
|
689
|
+
|
|
690
|
+
config = OpenDataSciConfig(skills_directory="/home/user/my-skills")
|
|
691
|
+
|
|
692
|
+
async with create_agent("data.csv", config=config) as agent:
|
|
693
|
+
...
|
|
694
|
+
```
|
|
695
|
+
|
|
617
696
|
### Environment variables
|
|
618
697
|
|
|
619
698
|
| Variable | Description |
|
|
620
699
|
|----------|-------------|
|
|
621
700
|
| `ANTHROPIC_API_KEY` | API key for the Anthropic provider |
|
|
622
|
-
| `OPENAI_API_KEY` | API key for the OpenAI provider |
|
|
623
|
-
| `
|
|
701
|
+
| `OPENAI_API_KEY` | API key for the OpenAI / OpenAI-compatible server provider |
|
|
702
|
+
| `GOOGLE_API_KEY` | API key for the Google Gemini provider |
|
|
703
|
+
| `AZURE_OPENAI_API_KEY` | API key for the Azure OpenAI provider |
|
|
704
|
+
| `REGION` | AWS region for Bedrock |
|
|
705
|
+
| `GOOGLE_CLOUD_PROJECT` | GCP project ID for Vertex AI |
|
|
706
|
+
| `GOOGLE_CLOUD_LOCATION` | Vertex AI region / location |
|
|
707
|
+
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI resource endpoint URL |
|
|
708
|
+
| `AZURE_OPENAI_API_VERSION` | Azure OpenAI API version (default: `2025-01-01-preview`) |
|
|
624
709
|
| `LLM_SERVER_BASE_URL` | Custom API base URL — used by `ollama` and `openai_compatible_server` providers |
|
|
625
|
-
| `
|
|
626
|
-
| `
|
|
710
|
+
| `TEMPERATURE` | LLM sampling temperature |
|
|
711
|
+
| `MCP_SERVERS` | Comma-separated list of MCP server URLs |
|
|
712
|
+
| `SKILLS_DIRECTORY` | Path to a directory of user-defined skill files |
|
|
713
|
+
| `BUILTIN_SKILLS_DIRECTORY` | Path to the built-in skills directory (defaults to the bundled skills) |
|
|
714
|
+
| `WORKER_TIMEOUT_SECONDS` | Max seconds to wait for spawned workers (default: `300`) |
|
|
715
|
+
| `MIDTURN_COMPACTION_THRESHOLD` | Token count at which context is compacted mid-turn (default: `96000`) |
|
|
627
716
|
| `CODE_EXEC_TIMEOUT` | Max seconds for a single sandboxed code execution (default: `1800`) |
|
|
628
717
|
|
|
629
718
|
A `.env` file in the working directory is loaded automatically at startup.
|
|
@@ -14,6 +14,7 @@ A production-grade AI agent for data science and machine learning. See the [proj
|
|
|
14
14
|
- [Python SDK](#python-sdk)
|
|
15
15
|
- [Models](#models)
|
|
16
16
|
- [Configuration](#configuration)
|
|
17
|
+
- [Custom Skills](#custom-skills)
|
|
17
18
|
- [Environment Variables](#environment-variables)
|
|
18
19
|
|
|
19
20
|
---
|
|
@@ -98,7 +99,7 @@ To use a different provider, pass `--provider`:
|
|
|
98
99
|
|
|
99
100
|
```bash
|
|
100
101
|
opendatasci data.csv --provider openai --api-key sk-...
|
|
101
|
-
opendatasci data.csv --provider ollama --model
|
|
102
|
+
opendatasci data.csv --provider ollama --model qwen3.5:9b # local, no key needed
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
### Setup with a config file
|
|
@@ -108,11 +109,10 @@ For a reusable configuration across projects, create a YAML file and pass it wit
|
|
|
108
109
|
```yaml
|
|
109
110
|
# datasci.yaml
|
|
110
111
|
provider: anthropic
|
|
111
|
-
model: claude-sonnet-
|
|
112
|
+
model: claude-sonnet-5
|
|
112
113
|
secondary_provider: openai
|
|
113
|
-
secondary_model: gpt-
|
|
114
|
+
secondary_model: gpt-5.6-luna
|
|
114
115
|
temperature: 0.1
|
|
115
|
-
thinking_budget: 8000
|
|
116
116
|
```
|
|
117
117
|
|
|
118
118
|
```bash
|
|
@@ -159,7 +159,6 @@ opendatasci PATH [OPTIONS]
|
|
|
159
159
|
| `--secondary-model` | *(provider default)* | Secondary model name for lightweight tasks (summarisation, etc.) |
|
|
160
160
|
| `--api-key` | *(env var)* | API key for the primary provider. Falls back to the standard env var for the selected provider |
|
|
161
161
|
| `--theme` | `default` | Colour palette. Choices: `default`, `accessible`, `light`, `solarized`, `dracula`. Run `/themes` inside the TUI for descriptions |
|
|
162
|
-
| `--debug` | `false` | Enable debug output — writes a detailed `opendatasci_debug.log` |
|
|
163
162
|
| `--config` | *(none)* | Path to a YAML file containing `OpenDataSciConfig` fields; explicit TUI flags take precedence |
|
|
164
163
|
| `--list-providers` | | Print all supported providers and their default models, then exit |
|
|
165
164
|
| `--version` | | Print the installed version, then exit |
|
|
@@ -171,7 +170,7 @@ opendatasci PATH [OPTIONS]
|
|
|
171
170
|
opendatasci data.xlsx
|
|
172
171
|
|
|
173
172
|
# Switch provider and primary model
|
|
174
|
-
opendatasci data.csv --provider openai --model gpt-
|
|
173
|
+
opendatasci data.csv --provider openai --model gpt-5.6-sol
|
|
175
174
|
|
|
176
175
|
# Bedrock with a region
|
|
177
176
|
REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
@@ -180,7 +179,7 @@ REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
|
180
179
|
opendatasci data.parquet --theme accessible
|
|
181
180
|
|
|
182
181
|
# Mix providers — heavy model on one, lightweight secondary on another
|
|
183
|
-
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.
|
|
182
|
+
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.6-luna
|
|
184
183
|
|
|
185
184
|
# See all available providers
|
|
186
185
|
opendatasci --list-providers
|
|
@@ -194,6 +193,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
194
193
|
|
|
195
194
|
| Command | Description |
|
|
196
195
|
|---------|-------------|
|
|
196
|
+
| `/cancel-all-messages` | Cancel all messages queued while the agent was busy |
|
|
197
|
+
| `/cancel-message` | Cancel the most recently queued message |
|
|
197
198
|
| `/clear` | Clear conversation context (preserves session variables and loaded data) |
|
|
198
199
|
| `/compact` | Summarise and compress conversation history to free up context |
|
|
199
200
|
| `/help` | Show all available commands |
|
|
@@ -204,6 +205,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
204
205
|
| `/themes` | List available colour themes with descriptions |
|
|
205
206
|
| `/exit` | Quit OpenDataSci |
|
|
206
207
|
|
|
208
|
+
Sending a message while the agent is still working doesn't reject it — it's pinned above the input box as a queued message and run automatically, in order, once the agent finishes (unless the agent is waiting on your answer to a question). Use `/cancel-message` or `/cancel-all-messages` to discard queued messages instead of waiting for them to run.
|
|
209
|
+
|
|
207
210
|
---
|
|
208
211
|
|
|
209
212
|
## File Attachments
|
|
@@ -268,7 +271,7 @@ from opendatasci import OpenDataSciConfig, create_agent
|
|
|
268
271
|
|
|
269
272
|
config = OpenDataSciConfig(
|
|
270
273
|
provider="openai",
|
|
271
|
-
model="gpt-
|
|
274
|
+
model="gpt-5.6-sol",
|
|
272
275
|
openai_api_key="sk-...",
|
|
273
276
|
temperature=0.2,
|
|
274
277
|
)
|
|
@@ -294,7 +297,18 @@ async with create_agent("data.parquet", config=config) as agent:
|
|
|
294
297
|
| `google_cloud_project` | GCP project ID for Vertex AI (env: `GOOGLE_CLOUD_PROJECT`) |
|
|
295
298
|
| `google_cloud_location` | Vertex AI region (env: `GOOGLE_CLOUD_LOCATION`) |
|
|
296
299
|
| `azure_endpoint` | Azure OpenAI resource endpoint URL (env: `AZURE_OPENAI_ENDPOINT`) |
|
|
300
|
+
| `azure_api_version` | Azure OpenAI API version — defaults to `2025-01-01-preview` (env: `AZURE_OPENAI_API_VERSION`) |
|
|
297
301
|
| `llm_server_base_url` | Custom API base URL — required for `ollama` and `openai_compatible_server` (env: `LLM_SERVER_BASE_URL`) |
|
|
302
|
+
| `temperature` | Sampling temperature — not sent to Claude 4.6+ / Sonnet 5 models, which use adaptive thinking (env: `TEMPERATURE`) |
|
|
303
|
+
| `name` | Display name for the agent — defaults to `"Sai"` (env: `NAME`) |
|
|
304
|
+
| `mcp_servers` | List of MCP server URLs the agent may connect to (env: `MCP_SERVERS`) |
|
|
305
|
+
| `extra_web_domains` | Additional hostnames the `fetch_url` tool may retrieve, on top of the built-in allowlist (env: `EXTRA_FETCH_DOMAINS`) |
|
|
306
|
+
| `override_web_domains` | When set, replaces the built-in domain allowlist entirely — `extra_web_domains` is still applied on top |
|
|
307
|
+
| `skills_directory` | Path to a directory of custom skill files loaded in addition to built-ins (env: `SKILLS_DIRECTORY`) |
|
|
308
|
+
| `builtin_skills_directory` | Path to the built-in skills directory — override only to replace defaults entirely (env: `BUILTIN_SKILLS_DIRECTORY`) |
|
|
309
|
+
| `worker_timeout_seconds` | Max seconds to wait for spawned workers to finish — `null` disables the timeout, default `300` (env: `WORKER_TIMEOUT_SECONDS`) |
|
|
310
|
+
| `midturn_compaction_threshold` | Token count at which context is compacted mid-turn — default `96000` (env: `MIDTURN_COMPACTION_THRESHOLD`) |
|
|
311
|
+
| `local_code_exec_timeout` | Max seconds for a single sandboxed code-execution run — default `1800` (env: `CODE_EXEC_TIMEOUT`) |
|
|
298
312
|
|
|
299
313
|
---
|
|
300
314
|
|
|
@@ -304,14 +318,14 @@ OpenDataSci supports every major LLM provider. Pass `--provider` to the TUI or s
|
|
|
304
318
|
|
|
305
319
|
| Provider | Flag | Extra required | Default model |
|
|
306
320
|
|----------|------|----------------|---------------|
|
|
307
|
-
| Anthropic | `anthropic` | *(none — default)* | `claude-sonnet-
|
|
308
|
-
| OpenAI | `openai` | *(none)* | `gpt-5.
|
|
309
|
-
| OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `
|
|
310
|
-
| AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-
|
|
311
|
-
| Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-
|
|
312
|
-
| Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-
|
|
313
|
-
| Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-
|
|
314
|
-
| Ollama | `ollama` | `open-data-sci[ollama]` | `
|
|
321
|
+
| Anthropic | `anthropic` | *(none — default)* | `claude-sonnet-5` |
|
|
322
|
+
| OpenAI | `openai` | *(none)* | `gpt-5.6-sol` |
|
|
323
|
+
| OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `Qwen/Qwen3.5-4B` |
|
|
324
|
+
| AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-5` |
|
|
325
|
+
| Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-3.5-flash` |
|
|
326
|
+
| Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-3.5-flash` |
|
|
327
|
+
| Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-5.6-sol` |
|
|
328
|
+
| Ollama | `ollama` | `open-data-sci[ollama]` | `qwen3.5:9b` |
|
|
315
329
|
|
|
316
330
|
Pass `--list-providers` to print this table from the TUI at any time.
|
|
317
331
|
|
|
@@ -325,19 +339,94 @@ Place these files inside your workspace's `.opendatasci/` directory:
|
|
|
325
339
|
|
|
326
340
|
| Path | Purpose |
|
|
327
341
|
|------|---------|
|
|
328
|
-
| `.opendatasci/mcp.json` | MCP server
|
|
342
|
+
| `.opendatasci/mcp.json` | MCP server definitions — connects the agent to external tool servers |
|
|
329
343
|
| `.opendatasci/plans/` | Persisted plan files — auto-managed, one file per planning session |
|
|
330
344
|
|
|
345
|
+
`mcp.json` uses the same convention as Cursor:
|
|
346
|
+
|
|
347
|
+
```json
|
|
348
|
+
{
|
|
349
|
+
"mcpServers": {
|
|
350
|
+
"my-server": { "url": "http://localhost:8080" },
|
|
351
|
+
"another": { "url": "http://localhost:9000" }
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## Custom Skills
|
|
359
|
+
|
|
360
|
+
Skills are Markdown (or YAML/JSON) files that give the agent a specialised persona and instruction set. OpenDataSci ships several built-in skills; you can add your own at the workspace level or point the agent at any directory you choose.
|
|
361
|
+
|
|
362
|
+
### Workspace skills (recommended)
|
|
363
|
+
|
|
364
|
+
Place skill files inside `.opendatasci/skills/` in your workspace directory — they are picked up automatically, no configuration needed:
|
|
365
|
+
|
|
366
|
+
```
|
|
367
|
+
<workspace>/
|
|
368
|
+
└── .opendatasci/
|
|
369
|
+
├── skills/
|
|
370
|
+
│ ├── my_skill.md # standalone skill named "my_skill"
|
|
371
|
+
│ └── my_domain/
|
|
372
|
+
│ └── specialist.md # domain-scoped skill: "my_domain::specialist"
|
|
373
|
+
└── skill_domains/
|
|
374
|
+
└── my_domain/
|
|
375
|
+
└── manifest.md # optional domain manifest
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
Subdirectories create *domain-scoped* skills. The agent refers to them with the `domain::skill` naming convention (e.g. `my_domain::specialist`).
|
|
379
|
+
|
|
380
|
+
### File format
|
|
381
|
+
|
|
382
|
+
Skill files must be `.md`. The filename stem becomes the skill name and the file body is the prompt content. Files with any other extension are silently ignored.
|
|
383
|
+
|
|
384
|
+
```markdown
|
|
385
|
+
<!-- .opendatasci/skills/forecasting.md -->
|
|
386
|
+
You are a time-series forecasting specialist. When analysing data, always...
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
### Global skills directory
|
|
390
|
+
|
|
391
|
+
To share skills across workspaces, set `SKILLS_DIRECTORY` in your environment or `.env` file:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
SKILLS_DIRECTORY=/home/user/my-skills
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
This directory is scanned *in addition to* the workspace `.opendatasci/skills/` directory and the built-in skills. When two sources define a skill with the same name, the later source wins (built-ins → workspace → `SKILLS_DIRECTORY`).
|
|
398
|
+
|
|
399
|
+
You can also pass `skills_directory` directly when using the Python SDK:
|
|
400
|
+
|
|
401
|
+
```python
|
|
402
|
+
from opendatasci import OpenDataSciConfig, create_agent
|
|
403
|
+
|
|
404
|
+
config = OpenDataSciConfig(skills_directory="/home/user/my-skills")
|
|
405
|
+
|
|
406
|
+
async with create_agent("data.csv", config=config) as agent:
|
|
407
|
+
...
|
|
408
|
+
```
|
|
409
|
+
|
|
331
410
|
### Environment variables
|
|
332
411
|
|
|
333
412
|
| Variable | Description |
|
|
334
413
|
|----------|-------------|
|
|
335
414
|
| `ANTHROPIC_API_KEY` | API key for the Anthropic provider |
|
|
336
|
-
| `OPENAI_API_KEY` | API key for the OpenAI provider |
|
|
337
|
-
| `
|
|
415
|
+
| `OPENAI_API_KEY` | API key for the OpenAI / OpenAI-compatible server provider |
|
|
416
|
+
| `GOOGLE_API_KEY` | API key for the Google Gemini provider |
|
|
417
|
+
| `AZURE_OPENAI_API_KEY` | API key for the Azure OpenAI provider |
|
|
418
|
+
| `REGION` | AWS region for Bedrock |
|
|
419
|
+
| `GOOGLE_CLOUD_PROJECT` | GCP project ID for Vertex AI |
|
|
420
|
+
| `GOOGLE_CLOUD_LOCATION` | Vertex AI region / location |
|
|
421
|
+
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI resource endpoint URL |
|
|
422
|
+
| `AZURE_OPENAI_API_VERSION` | Azure OpenAI API version (default: `2025-01-01-preview`) |
|
|
338
423
|
| `LLM_SERVER_BASE_URL` | Custom API base URL — used by `ollama` and `openai_compatible_server` providers |
|
|
339
|
-
| `
|
|
340
|
-
| `
|
|
424
|
+
| `TEMPERATURE` | LLM sampling temperature |
|
|
425
|
+
| `MCP_SERVERS` | Comma-separated list of MCP server URLs |
|
|
426
|
+
| `SKILLS_DIRECTORY` | Path to a directory of user-defined skill files |
|
|
427
|
+
| `BUILTIN_SKILLS_DIRECTORY` | Path to the built-in skills directory (defaults to the bundled skills) |
|
|
428
|
+
| `WORKER_TIMEOUT_SECONDS` | Max seconds to wait for spawned workers (default: `300`) |
|
|
429
|
+
| `MIDTURN_COMPACTION_THRESHOLD` | Token count at which context is compacted mid-turn (default: `96000`) |
|
|
341
430
|
| `CODE_EXEC_TIMEOUT` | Max seconds for a single sandboxed code execution (default: `1800`) |
|
|
342
431
|
|
|
343
432
|
A `.env` file in the working directory is loaded automatically at startup.
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Agent
|
|
2
2
|
|
|
3
|
-
`Agent` is the core conversational AI agent. It
|
|
3
|
+
`Agent` is the core conversational AI agent. It orchestrates LLM calls, tool execution, concurrent workers, and rolling memory automatically, so you only need to send queries and consume the resulting stream.
|
|
4
4
|
|
|
5
5
|
## Lifecycle
|
|
6
6
|
|
|
@@ -55,8 +55,8 @@ async for event in agent.astream(query):
|
|
|
55
55
|
| Method | Description |
|
|
56
56
|
|--------|-------------|
|
|
57
57
|
| `clear_chat_history()` | Remove all messages and rolling memory summaries. Preserves sandbox state. |
|
|
58
|
-
| `rewind_turn()` | Remove only the last turn (user message + agent response) from the
|
|
59
|
-
| `compact_chat_history()` |
|
|
58
|
+
| `rewind_turn()` | Remove only the last turn (user message + agent response) from the conversation. |
|
|
59
|
+
| `compact_chat_history()` | Fold all turn summaries and any existing compaction into a single `ChatHistoryCompaction` record. Returns the compaction text. Use this instead of `clear_chat_history` when you want to preserve context across a long session. |
|
|
60
60
|
|
|
61
61
|
```python
|
|
62
62
|
# After many turns, compact instead of clearing:
|
|
@@ -72,11 +72,49 @@ print("Compacted:", summary)
|
|
|
72
72
|
show_source: false
|
|
73
73
|
members:
|
|
74
74
|
- astream
|
|
75
|
-
- resume_with_input
|
|
76
75
|
- rewind_turn
|
|
77
76
|
- clear_chat_history
|
|
78
77
|
- compact_chat_history
|
|
79
|
-
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Session manager
|
|
82
|
+
|
|
83
|
+
A session manager tracks the mapping from a session to its conversation threads in the graph checkpointer. Clearing the conversation (`clear_chat_history`) creates a new thread, so no prior state is visible to the LLM on the next turn.
|
|
84
|
+
|
|
85
|
+
The default `LocalSessionManager` persists this mapping to `.opendatasci/session.json` inside the workspace. For cloud or multi-process deployments — where two agent instances must share a conversation — replace it with a custom `BaseSessionManager` backed by shared storage:
|
|
86
|
+
|
|
87
|
+
```python
|
|
88
|
+
import uuid
|
|
89
|
+
from opendatasci.session.session_manager import BaseSessionManager
|
|
90
|
+
|
|
91
|
+
class RedisSessionManager(BaseSessionManager):
|
|
92
|
+
def get_or_create_thread(self) -> uuid.UUID: ...
|
|
93
|
+
def create_thread(self) -> uuid.UUID: ...
|
|
94
|
+
def get_current_thread(self) -> uuid.UUID: ...
|
|
95
|
+
|
|
96
|
+
from opendatasci.agents.agents import Agent
|
|
97
|
+
from opendatasci import LocalWorkspace, OpenDataSciConfig
|
|
98
|
+
|
|
99
|
+
async with Agent(
|
|
100
|
+
workspace=LocalWorkspace("data/"),
|
|
101
|
+
session_manager=RedisSessionManager(),
|
|
102
|
+
config=OpenDataSciConfig(),
|
|
103
|
+
) as agent:
|
|
104
|
+
...
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
::: opendatasci.session.session_manager.BaseSessionManager
|
|
108
|
+
options:
|
|
109
|
+
show_root_heading: true
|
|
110
|
+
show_source: false
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
::: opendatasci.session.session_manager.LocalSessionManager
|
|
115
|
+
options:
|
|
116
|
+
show_root_heading: true
|
|
117
|
+
show_source: false
|
|
80
118
|
|
|
81
119
|
---
|
|
82
120
|
|
|
@@ -89,4 +127,4 @@ print("Compacted:", summary)
|
|
|
89
127
|
show_root_heading: true
|
|
90
128
|
show_source: false
|
|
91
129
|
members:
|
|
92
|
-
-
|
|
130
|
+
- ainvoke
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OpenDataSciConfig
|
|
2
2
|
|
|
3
|
-
`OpenDataSciConfig` is the single configuration object accepted by `create_agent` and `Agent`.
|
|
3
|
+
`OpenDataSciConfig` is the single configuration object accepted by `create_agent` and `Agent`. Every field can be set via:
|
|
4
4
|
|
|
5
5
|
1. Direct constructor argument
|
|
6
6
|
2. Environment variable (see the alias column below)
|
|
@@ -14,13 +14,13 @@ TUI flags always take precedence over all of the above.
|
|
|
14
14
|
```python
|
|
15
15
|
from opendatasci import OpenDataSciConfig
|
|
16
16
|
|
|
17
|
-
# Defaults — uses Anthropic with claude-sonnet-
|
|
17
|
+
# Defaults — uses Anthropic with claude-sonnet-5
|
|
18
18
|
config = OpenDataSciConfig()
|
|
19
19
|
|
|
20
20
|
# OpenAI with custom temperature
|
|
21
21
|
config = OpenDataSciConfig(
|
|
22
22
|
provider="openai",
|
|
23
|
-
model="gpt-
|
|
23
|
+
model="gpt-5.6-sol",
|
|
24
24
|
openai_api_key="sk-...",
|
|
25
25
|
temperature=0.2,
|
|
26
26
|
)
|
|
@@ -29,7 +29,7 @@ config = OpenDataSciConfig(
|
|
|
29
29
|
config = OpenDataSciConfig(
|
|
30
30
|
provider="anthropic",
|
|
31
31
|
secondary_provider="openai",
|
|
32
|
-
secondary_model="gpt-
|
|
32
|
+
secondary_model="gpt-5.6-luna",
|
|
33
33
|
openai_api_key="sk-...",
|
|
34
34
|
)
|
|
35
35
|
|
|
@@ -72,15 +72,14 @@ config = OpenDataSciConfig.from_yaml("opendatasci_config.yaml")
|
|
|
72
72
|
|
|
73
73
|
| Field | Env var | Default | Description |
|
|
74
74
|
|-------|---------|---------|-------------|
|
|
75
|
-
| `temperature` | `TEMPERATURE` | `0.0` | LLM sampling temperature |
|
|
76
|
-
| `thinking_budget` | `THINKING_BUDGET` | `8192` | Extended-thinking token budget (Anthropic / Bedrock) |
|
|
75
|
+
| `temperature` | `TEMPERATURE` | `0.0` | LLM sampling temperature (not sent to Claude 4.6+ / Sonnet 5 models) |
|
|
77
76
|
|
|
78
77
|
### Agent behaviour
|
|
79
78
|
|
|
80
79
|
| Field | Env var | Default | Description |
|
|
81
80
|
|-------|---------|---------|-------------|
|
|
82
81
|
| `name` | `NAME` | `"Sai"` | Agent display name, injected into all system prompts |
|
|
83
|
-
| `midturn_compaction_threshold` | `MIDTURN_COMPACTION_THRESHOLD` | `
|
|
82
|
+
| `midturn_compaction_threshold` | `MIDTURN_COMPACTION_THRESHOLD` | `96000` | Token count after which the agent's context is compacted mid-turn |
|
|
84
83
|
| `worker_timeout_seconds` | `WORKER_TIMEOUT_SECONDS` | `300.0` | Max seconds for all spawned workers to finish (`null` = no timeout) |
|
|
85
84
|
|
|
86
85
|
### Web access
|
|
@@ -115,14 +114,14 @@ config = OpenDataSciConfig.from_yaml("opendatasci_config.yaml")
|
|
|
115
114
|
|
|
116
115
|
| Provider | Primary model | Secondary model |
|
|
117
116
|
|----------|--------------|-----------------|
|
|
118
|
-
| `anthropic` | `claude-sonnet-
|
|
119
|
-
| `openai` | `gpt-5.
|
|
120
|
-
| `bedrock` | `us.anthropic.claude-sonnet-
|
|
121
|
-
| `gemini` | `gemini-
|
|
122
|
-
| `vertexai` | `gemini-
|
|
123
|
-
| `azure` | `gpt-
|
|
124
|
-
| `ollama` | `
|
|
125
|
-
| `openai_compatible_server` | `
|
|
117
|
+
| `anthropic` | `claude-sonnet-5` | `claude-haiku-4-5` |
|
|
118
|
+
| `openai` | `gpt-5.6-sol` | `gpt-5.6-luna` |
|
|
119
|
+
| `bedrock` | `us.anthropic.claude-sonnet-5` | `us.anthropic.claude-haiku-4-5-20251001-v1:0` |
|
|
120
|
+
| `gemini` | `gemini-3.5-flash` | `gemini-3.1-flash-lite` |
|
|
121
|
+
| `vertexai` | `gemini-3.5-flash` | `gemini-3.1-flash-lite` |
|
|
122
|
+
| `azure` | `gpt-5.6-sol` | `gpt-5.6-luna` |
|
|
123
|
+
| `ollama` | `qwen3.5:9b` | `qwen3.5:9b` |
|
|
124
|
+
| `openai_compatible_server` | `Qwen/Qwen3.5-4B` | `Qwen/Qwen3.5-4B` |
|
|
126
125
|
|
|
127
126
|
---
|
|
128
127
|
|
|
@@ -131,13 +130,12 @@ config = OpenDataSciConfig.from_yaml("opendatasci_config.yaml")
|
|
|
131
130
|
```yaml
|
|
132
131
|
# opendatasci_config.yaml
|
|
133
132
|
provider: anthropic
|
|
134
|
-
model: claude-sonnet-
|
|
133
|
+
model: claude-sonnet-5
|
|
135
134
|
|
|
136
135
|
secondary_provider: openai
|
|
137
|
-
secondary_model: gpt-
|
|
136
|
+
secondary_model: gpt-5.6-luna
|
|
138
137
|
|
|
139
138
|
temperature: 0.1
|
|
140
|
-
thinking_budget: 8000
|
|
141
139
|
|
|
142
140
|
name: Sai
|
|
143
141
|
|
|
@@ -153,7 +151,7 @@ midturn_compaction_threshold: 80000
|
|
|
153
151
|
config = OpenDataSciConfig.from_yaml("opendatasci_config.yaml")
|
|
154
152
|
```
|
|
155
153
|
|
|
156
|
-
Unknown keys in the YAML file
|
|
154
|
+
Unknown keys in the YAML file are ignored, so config files written for other versions keep loading.
|
|
157
155
|
|
|
158
156
|
---
|
|
159
157
|
|