open-data-sci 0.1.0__tar.gz → 0.2.1__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.1}/.env.example +1 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/PKG-INFO +136 -46
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/README.md +110 -21
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/dev/scripts/test_pypi_install.sh +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/dev/scripts/test_pypi_publish.sh +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/agent.md +44 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/config.md +17 -19
- open_data_sci-0.2.1/docs/api/index.md +43 -0
- open_data_sci-0.2.1/docs/api/memory.md +103 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/open_data_sci.md +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/session.md +16 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/session_manager.md +10 -18
- open_data_sci-0.2.1/docs/api/skills.md +86 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/types.md +17 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/getting-started.md +41 -20
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/index.md +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/README.md +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_anthropic.yaml +5 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_azure.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_bedrock.yaml +4 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_gemini.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_ollama.yaml +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_openai.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_openai_compatible_server.yaml +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_vertexai.yaml +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/030_notebook_anthropic.ipynb +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/031_notebook_openai_compatible_server.ipynb +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/032_notebook_bedrock.ipynb +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/021_script_openai_compatible_server.py +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/022_script_bedrock.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/010_tui_anthropic.md +8 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/011_tui_openai_compatible_server.md +17 -14
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/012_tui_bedrock.md +7 -5
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/mkdocs.yaml +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/__init__.py +6 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/adapter.py +14 -5
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/app.py +48 -14
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/commands.py +10 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/controller.py +213 -99
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/file_refs.py +6 -2
- open_data_sci-0.2.1/opendatasci/_tui/message_queue.py +49 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/presenter.py +56 -34
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/service.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/styles.tcss +46 -49
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/theme.py +39 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/tools_display.py +51 -17
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/widgets.py +341 -195
- open_data_sci-0.2.1/opendatasci/_utils/async_utils.py +22 -0
- open_data_sci-0.2.1/opendatasci/_utils/casing_utils.py +8 -0
- open_data_sci-0.2.1/opendatasci/_utils/datetime_utils.py +10 -0
- open_data_sci-0.2.1/opendatasci/_utils/graph_utils.py +8 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/hash_utils.py +1 -2
- open_data_sci-0.2.1/opendatasci/_utils/message_utils.py +92 -0
- open_data_sci-0.2.1/opendatasci/_utils/mixins.py +21 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/__init__.py +1 -7
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/agents.py +130 -132
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/agents_factory.py +15 -6
- open_data_sci-0.2.1/opendatasci/agents/chat_history.py +198 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/graphs.py +12 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/nodes.py +18 -14
- open_data_sci-0.2.1/opendatasci/agents/states.py +87 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/configs.py +51 -38
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/__init__.py +1 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/base.py +20 -9
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/local.py +33 -45
- open_data_sci-0.2.1/opendatasci/context/plans.py +17 -0
- open_data_sci-0.2.1/opendatasci/human_inputs/__init__.py +15 -0
- open_data_sci-0.2.1/opendatasci/human_inputs/human_approval.py +162 -0
- open_data_sci-0.2.1/opendatasci/memory/chat_memory.py +256 -0
- open_data_sci-0.2.1/opendatasci/memory/messages.py +179 -0
- {open_data_sci-0.1.0/opendatasci/agents → open_data_sci-0.2.1/opendatasci/memory}/turn_memory.py +2 -1
- open_data_sci-0.2.1/opendatasci/models/__init__.py +3 -0
- open_data_sci-0.2.1/opendatasci/models/anthropic.py +80 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/aws.py +17 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/google.py +35 -21
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/local.py +2 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/__init__.py +1 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/builders.py +20 -34
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/prompt_templates.py +14 -9
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/competitive_data_science/manifest.md +67 -0
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/data_science/manifest.md +51 -0
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/data_science_education/manifest.md +45 -0
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/deep_learning/manifest.md +69 -0
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/machine_learning/manifest.md +57 -0
- open_data_sci-0.2.1/opendatasci/resources/skill_domains/quantitative_analysis/manifest.md +45 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/baseline.md +21 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/eda.md +26 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/ensembling.md +31 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/feature_engineering.md +38 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/final_submission.md +23 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/hyperparameter_tuning.md +23 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/model_development.md +29 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/phase_wiring.md +19 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/reconnaissance.md +26 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/validation.md +31 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/causality_confounding.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/communicating_findings.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/data_quality_preparation.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/exploratory_analysis.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/framing_the_problem.md +9 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/granularity_aggregation.md +9 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/modeling_evaluation.md +13 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science/statistical_testing.md +12 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/building_intuition.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/calibrating_depth.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/connecting_concepts.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/diagnosing_understanding.md +9 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/feedback_correction.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/structuring_explanations.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/worked_examples_code.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/architecture_selection.md +27 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/evaluation.md +14 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/flax_nnx.md +29 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/hyperparameter_tuning.md +17 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/jax_fundamentals.md +23 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/library_stack.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/optax.md +38 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/regularisation_overfitting.md +25 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/sklearn_mlp.md +12 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/training_loop.md +29 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/when_to_use.md +13 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/class_imbalance.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/evaluation_diagnostics.md +12 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/feature_engineering_selection.md +12 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/hyperparameter_tuning.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/interpretability.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/model_selection_complexity.md +16 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/overfitting_regularisation.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/problem_framing.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/splitting_strategy.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/backtesting_empirical_validation.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/communicating_results.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/mathematical_statistical_foundations.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/optimisation.md +10 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/problem_formulation.md +9 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/risk_uncertainty_quantification.md +11 -0
- open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/time_series_signal_analysis.md +11 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/srt.py +5 -1
- open_data_sci-0.2.1/opendatasci/session/__init__.py +4 -0
- open_data_sci-0.2.1/opendatasci/session/session_manager.py +113 -0
- open_data_sci-0.2.1/opendatasci/session/threads.py +17 -0
- open_data_sci-0.2.1/opendatasci/skills/__init__.py +4 -0
- open_data_sci-0.2.1/opendatasci/skills/base.py +71 -0
- open_data_sci-0.2.1/opendatasci/skills/local.py +143 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/__init__.py +3 -3
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/events.py +17 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/processors.py +112 -30
- open_data_sci-0.2.1/opendatasci/tools/__init__.py +4 -0
- open_data_sci-0.2.1/opendatasci/tools/base.py +85 -0
- open_data_sci-0.2.1/opendatasci/tools/coding.py +393 -0
- open_data_sci-0.2.1/opendatasci/tools/critic.py +172 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/dataset_info.py +142 -82
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/factory.py +33 -59
- open_data_sci-0.2.1/opendatasci/tools/planning.py +121 -0
- open_data_sci-0.2.1/opendatasci/tools/skills.py +215 -0
- open_data_sci-0.2.1/opendatasci/tools/user_interaction.py +82 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/web.py +101 -58
- open_data_sci-0.2.1/opendatasci/tools/workers.py +244 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/workspace.py +33 -16
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/__init__.py +1 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/pyproject.toml +47 -34
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/conftest.py +8 -6
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_agent_integrations.py +46 -30
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_cli_controller.py +288 -22
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_lifecycle.py +0 -1
- open_data_sci-0.2.1/tests/component/test_model_factories.py +450 -0
- open_data_sci-0.2.1/tests/component/test_sandbox_runner.py +189 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_service.py +17 -27
- open_data_sci-0.2.1/tests/component/test_tui_app.py +474 -0
- open_data_sci-0.2.1/tests/component/test_tui_widgets.py +817 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/conftest.py +3 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_app.py +112 -4
- open_data_sci-0.2.1/tests/unit/_tui/test_commands.py +235 -0
- open_data_sci-0.2.1/tests/unit/_tui/test_completion.py +364 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_controller.py +236 -31
- open_data_sci-0.2.1/tests/unit/_tui/test_file_refs.py +402 -0
- open_data_sci-0.2.1/tests/unit/_tui/test_message_queue.py +259 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_presenter.py +149 -90
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_tools_display.py +29 -23
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_widgets.py +818 -411
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_async_utils.py +1 -1
- open_data_sci-0.2.1/tests/unit/_utils/test_graph_utils.py +49 -0
- open_data_sci-0.2.1/tests/unit/_utils/test_message_utils.py +273 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_agents.py +187 -57
- open_data_sci-0.2.1/tests/unit/agents/test_chat_messages.py +194 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_graphs.py +3 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_nodes.py +51 -71
- open_data_sci-0.2.1/tests/unit/agents/test_states.py +46 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/context/test_local_context_store.py +82 -39
- open_data_sci-0.2.1/tests/unit/human_inputs/test_human_approval.py +192 -0
- open_data_sci-0.2.1/tests/unit/memory/test_chat_memory.py +353 -0
- {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.1/tests/unit/memory}/test_turn_memory.py +32 -31
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_anthropic.py +20 -10
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_aws.py +1 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_local.py +4 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/prompts/test_builders.py +56 -108
- open_data_sci-0.2.1/tests/unit/sandbox/__init__.py +0 -0
- open_data_sci-0.2.1/tests/unit/session/__init__.py +0 -0
- open_data_sci-0.2.1/tests/unit/session/test_session_manager.py +124 -0
- open_data_sci-0.2.1/tests/unit/skills/__init__.py +0 -0
- open_data_sci-0.2.1/tests/unit/skills/test_local.py +314 -0
- open_data_sci-0.2.1/tests/unit/streaming/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/streaming/test_processors.py +137 -4
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/test_configs.py +6 -5
- open_data_sci-0.2.1/tests/unit/tools/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_coding.py +142 -44
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_critic.py +5 -5
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_dataset_info.py +19 -21
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_factory.py +70 -14
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_planning.py +32 -29
- open_data_sci-0.2.1/tests/unit/tools/test_skills.py +249 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_user_interaction.py +9 -2
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_workers.py +41 -30
- open_data_sci-0.2.1/uv.lock +3887 -0
- 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/uv.lock +0 -3554
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/.gitignore +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/LICENSE +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/Makefile +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/workbench.md +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/requirements.txt +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/020_script_anthropic.py +0 -0
- {open_data_sci-0.1.0/opendatasci/_utils → open_data_sci-0.2.1/opendatasci/_tui}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/completion.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/models.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/session.py +0 -0
- {open_data_sci-0.1.0/tests → open_data_sci-0.2.1/opendatasci/_utils}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/data_formats.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/streaming_utils.py +0 -0
- {open_data_sci-0.1.0/tests/component → open_data_sci-0.2.1/opendatasci/memory}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/factory.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/microsoft.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/openai.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/providers.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/caching.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/__init__.py +1 -1
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/_runner.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/base.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/mcp.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/base.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/local.py +0 -0
- {open_data_sci-0.1.0/tests/unit → open_data_sci-0.2.1/tests}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/_tui → open_data_sci-0.2.1/tests/component}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_real_streaming.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_streaming.py +0 -0
- {open_data_sci-0.1.0/tests/unit/_utils → open_data_sci-0.2.1/tests/unit}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.1/tests/unit/_tui}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_service.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_session.py +0 -0
- {open_data_sci-0.1.0/tests/unit/context → open_data_sci-0.2.1/tests/unit/_utils}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_data_formats.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_hash_utils.py +0 -0
- {open_data_sci-0.1.0/tests/unit/models → open_data_sci-0.2.1/tests/unit/agents}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_agents_factory.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/conftest.py +0 -0
- {open_data_sci-0.1.0/tests/unit/prompts → open_data_sci-0.2.1/tests/unit/context}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/context/test_local_work_context.py +0 -0
- {open_data_sci-0.1.0/tests/unit/sandbox → open_data_sci-0.2.1/tests/unit/human_inputs}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/skills → open_data_sci-0.2.1/tests/unit/memory}/__init__.py +0 -0
- {open_data_sci-0.1.0/tests/unit/streaming → open_data_sci-0.2.1/tests/unit/models}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_google.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_microsoft.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_openai.py +0 -0
- {open_data_sci-0.1.0/tests/unit/tools → open_data_sci-0.2.1/tests/unit/prompts}/__init__.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/prompts/test_caching.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_cli_validation.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_exec_result.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_runner.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_srt.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_mcp.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_web.py +0 -0
- {open_data_sci-0.1.0 → open_data_sci-0.2.1}/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.1
|
|
3
|
+
Version: 0.2.1
|
|
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,70 +218,71 @@ 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:
|
|
222
|
-
Requires-Dist: duckduckgo-search<
|
|
221
|
+
Requires-Dist: duckdb<2.0.0,>=1.0.0
|
|
222
|
+
Requires-Dist: duckduckgo-search<9.0.0,>=8.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
|
|
225
|
-
Requires-Dist: langchain-anthropic<
|
|
226
|
-
Requires-Dist: langchain-core<
|
|
227
|
-
Requires-Dist: langchain-openai<
|
|
228
|
-
Requires-Dist: langgraph<
|
|
225
|
+
Requires-Dist: langchain-anthropic<2.0.0,>=1.0.0
|
|
226
|
+
Requires-Dist: langchain-core<2.0.0,>=1.0.0
|
|
227
|
+
Requires-Dist: langchain-openai<2.0.0,>=1.0.0
|
|
228
|
+
Requires-Dist: langgraph<2.0.0,>=1.0.0
|
|
229
229
|
Requires-Dist: lightgbm<5.0.0,>=4.0.0
|
|
230
230
|
Requires-Dist: lxml<7.0.0,>=6.1.0
|
|
231
231
|
Requires-Dist: matplotlib<4.0.0,>=3.7.0
|
|
232
232
|
Requires-Dist: networkx<4.0.0,>=3.0.0
|
|
233
|
-
Requires-Dist: numpy<2.
|
|
234
|
-
Requires-Dist: optuna<
|
|
235
|
-
Requires-Dist: pandas[excel,feather,parquet]<
|
|
236
|
-
Requires-Dist: plotly<
|
|
233
|
+
Requires-Dist: numpy<2.5.0,>=2.0.0
|
|
234
|
+
Requires-Dist: optuna<5.0.0,>=4.0.0
|
|
235
|
+
Requires-Dist: pandas[excel,feather,parquet]<4.0.0,>=3.0.0
|
|
236
|
+
Requires-Dist: plotly<7.0.0,>=6.0.0
|
|
237
237
|
Requires-Dist: polars[calamine]<2.0.0,>=1.0.0
|
|
238
238
|
Requires-Dist: prophet<2.0.0,>=1.1.0
|
|
239
239
|
Requires-Dist: pydantic-settings<3.0.0,>=2.0.0
|
|
240
240
|
Requires-Dist: pydantic<3.0.0,>=2.0.0
|
|
241
|
-
Requires-Dist: pyod<
|
|
241
|
+
Requires-Dist: pyod<4.0.0,>=3.0.0
|
|
242
242
|
Requires-Dist: python-dotenv<2.0.0,>=1.0.0
|
|
243
243
|
Requires-Dist: pyyaml<7.0,>=6.0
|
|
244
|
-
Requires-Dist: rich<
|
|
244
|
+
Requires-Dist: rich<16.0.0,>=15.0.0
|
|
245
245
|
Requires-Dist: sandbox-runtime<1.0.0,>=0.2.0
|
|
246
246
|
Requires-Dist: scikit-learn<2.0.0,>=1.5.0
|
|
247
247
|
Requires-Dist: scipy<2.0.0,>=1.14.0
|
|
248
248
|
Requires-Dist: seaborn<1.0.0,>=0.12.0
|
|
249
249
|
Requires-Dist: shap<1.0.0,>=0.46.0
|
|
250
250
|
Requires-Dist: statsmodels<1.0.0,>=0.14.0
|
|
251
|
-
Requires-Dist: textual<0.
|
|
251
|
+
Requires-Dist: textual<9.0.0,>=8.0.0
|
|
252
252
|
Requires-Dist: umap-learn<1.0.0,>=0.5.0
|
|
253
|
-
Requires-Dist: xgboost<
|
|
253
|
+
Requires-Dist: xgboost<4.0.0,>=3.0.0
|
|
254
254
|
Requires-Dist: xxhash<4.0.0,>=3.5.0
|
|
255
255
|
Provides-Extra: aws
|
|
256
256
|
Requires-Dist: boto3<2.0.0,>=1.34.0; extra == 'aws'
|
|
257
|
-
Requires-Dist: langchain-aws<
|
|
257
|
+
Requires-Dist: langchain-aws<2.0.0,>=1.0.0; extra == 'aws'
|
|
258
258
|
Provides-Extra: azure
|
|
259
259
|
Requires-Dist: azure-identity<2.0.0,>=1.15.0; extra == 'azure'
|
|
260
260
|
Provides-Extra: dev
|
|
261
|
-
Requires-Dist: kaggle<
|
|
262
|
-
Requires-Dist: mypy<
|
|
263
|
-
Requires-Dist: pandas-stubs<
|
|
264
|
-
Requires-Dist:
|
|
261
|
+
Requires-Dist: kaggle<3.0.0,>=2.0.0; extra == 'dev'
|
|
262
|
+
Requires-Dist: mypy<3.0.0,>=2.0.0; extra == 'dev'
|
|
263
|
+
Requires-Dist: pandas-stubs<4.0.0,>=3.0.0; extra == 'dev'
|
|
264
|
+
Requires-Dist: pyright<2.0.0,>=1.1.390; extra == 'dev'
|
|
265
|
+
Requires-Dist: pytest-asyncio<2.0.0,>=0.23.0; extra == 'dev'
|
|
265
266
|
Requires-Dist: pytest-cov<5.0.0,>=4.0.0; extra == 'dev'
|
|
266
267
|
Requires-Dist: pytest-xdist<4.0.0,>=3.0.0; extra == 'dev'
|
|
267
|
-
Requires-Dist: pytest<
|
|
268
|
+
Requires-Dist: pytest<10.0.0,>=9.0.0; extra == 'dev'
|
|
268
269
|
Requires-Dist: ruff<1.0.0,>=0.8.0; extra == 'dev'
|
|
269
270
|
Requires-Dist: types-openpyxl<4.0.0,>=3.1.0; extra == 'dev'
|
|
270
271
|
Requires-Dist: vulture<3.0.0,>=2.0.0; extra == 'dev'
|
|
271
272
|
Provides-Extra: docs
|
|
272
273
|
Requires-Dist: mkdocs-material<10.0.0,>=9.5.0; extra == 'docs'
|
|
273
274
|
Requires-Dist: mkdocs<2.0.0,>=1.6.0; extra == 'docs'
|
|
274
|
-
Requires-Dist: mkdocstrings[python]<
|
|
275
|
+
Requires-Dist: mkdocstrings[python]<2.0.0,>=1.0.0; extra == 'docs'
|
|
275
276
|
Provides-Extra: gcp
|
|
276
|
-
Requires-Dist: langchain-google-vertexai<
|
|
277
|
+
Requires-Dist: langchain-google-vertexai<4.0.0,>=3.0.0; extra == 'gcp'
|
|
277
278
|
Provides-Extra: gemini
|
|
278
|
-
Requires-Dist: langchain-google-genai<
|
|
279
|
+
Requires-Dist: langchain-google-genai<5.0.0,>=4.0.0; extra == 'gemini'
|
|
279
280
|
Provides-Extra: jax
|
|
280
281
|
Requires-Dist: flax<1.0.0,>=0.8.0; extra == 'jax'
|
|
281
282
|
Requires-Dist: jax[cpu]<1.0.0,>=0.4.0; extra == 'jax'
|
|
282
283
|
Requires-Dist: optax<1.0.0,>=0.2.0; extra == 'jax'
|
|
283
284
|
Provides-Extra: ollama
|
|
284
|
-
Requires-Dist: langchain-ollama<
|
|
285
|
+
Requires-Dist: langchain-ollama<2.0.0,>=1.0.0; extra == 'ollama'
|
|
285
286
|
Description-Content-Type: text/markdown
|
|
286
287
|
|
|
287
288
|
# OpenDataSci
|
|
@@ -300,6 +301,7 @@ A production-grade AI agent for data science and machine learning. See the [proj
|
|
|
300
301
|
- [Python SDK](#python-sdk)
|
|
301
302
|
- [Models](#models)
|
|
302
303
|
- [Configuration](#configuration)
|
|
304
|
+
- [Custom Skills](#custom-skills)
|
|
303
305
|
- [Environment Variables](#environment-variables)
|
|
304
306
|
|
|
305
307
|
---
|
|
@@ -384,7 +386,7 @@ To use a different provider, pass `--provider`:
|
|
|
384
386
|
|
|
385
387
|
```bash
|
|
386
388
|
opendatasci data.csv --provider openai --api-key sk-...
|
|
387
|
-
opendatasci data.csv --provider ollama --model
|
|
389
|
+
opendatasci data.csv --provider ollama --model qwen3.5:9b # local, no key needed
|
|
388
390
|
```
|
|
389
391
|
|
|
390
392
|
### Setup with a config file
|
|
@@ -394,11 +396,10 @@ For a reusable configuration across projects, create a YAML file and pass it wit
|
|
|
394
396
|
```yaml
|
|
395
397
|
# datasci.yaml
|
|
396
398
|
provider: anthropic
|
|
397
|
-
model: claude-sonnet-
|
|
399
|
+
model: claude-sonnet-5
|
|
398
400
|
secondary_provider: openai
|
|
399
|
-
secondary_model: gpt-
|
|
401
|
+
secondary_model: gpt-5.6-luna
|
|
400
402
|
temperature: 0.1
|
|
401
|
-
thinking_budget: 8000
|
|
402
403
|
```
|
|
403
404
|
|
|
404
405
|
```bash
|
|
@@ -445,7 +446,6 @@ opendatasci PATH [OPTIONS]
|
|
|
445
446
|
| `--secondary-model` | *(provider default)* | Secondary model name for lightweight tasks (summarisation, etc.) |
|
|
446
447
|
| `--api-key` | *(env var)* | API key for the primary provider. Falls back to the standard env var for the selected provider |
|
|
447
448
|
| `--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
449
|
| `--config` | *(none)* | Path to a YAML file containing `OpenDataSciConfig` fields; explicit TUI flags take precedence |
|
|
450
450
|
| `--list-providers` | | Print all supported providers and their default models, then exit |
|
|
451
451
|
| `--version` | | Print the installed version, then exit |
|
|
@@ -457,7 +457,7 @@ opendatasci PATH [OPTIONS]
|
|
|
457
457
|
opendatasci data.xlsx
|
|
458
458
|
|
|
459
459
|
# Switch provider and primary model
|
|
460
|
-
opendatasci data.csv --provider openai --model gpt-
|
|
460
|
+
opendatasci data.csv --provider openai --model gpt-5.6-sol
|
|
461
461
|
|
|
462
462
|
# Bedrock with a region
|
|
463
463
|
REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
@@ -466,7 +466,7 @@ REGION=us-west-2 opendatasci ./project/ --provider bedrock
|
|
|
466
466
|
opendatasci data.parquet --theme accessible
|
|
467
467
|
|
|
468
468
|
# Mix providers — heavy model on one, lightweight secondary on another
|
|
469
|
-
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.
|
|
469
|
+
opendatasci data.csv --provider anthropic --secondary-provider openai --secondary-model gpt-5.6-luna
|
|
470
470
|
|
|
471
471
|
# See all available providers
|
|
472
472
|
opendatasci --list-providers
|
|
@@ -480,6 +480,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
480
480
|
|
|
481
481
|
| Command | Description |
|
|
482
482
|
|---------|-------------|
|
|
483
|
+
| `/cancel-all-messages` | Cancel all messages queued while the agent was busy |
|
|
484
|
+
| `/cancel-message` | Cancel the most recently queued message |
|
|
483
485
|
| `/clear` | Clear conversation context (preserves session variables and loaded data) |
|
|
484
486
|
| `/compact` | Summarise and compress conversation history to free up context |
|
|
485
487
|
| `/help` | Show all available commands |
|
|
@@ -490,6 +492,8 @@ Type `/` in the input box to trigger autocomplete. All commands are available at
|
|
|
490
492
|
| `/themes` | List available colour themes with descriptions |
|
|
491
493
|
| `/exit` | Quit OpenDataSci |
|
|
492
494
|
|
|
495
|
+
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.
|
|
496
|
+
|
|
493
497
|
---
|
|
494
498
|
|
|
495
499
|
## File Attachments
|
|
@@ -554,7 +558,7 @@ from opendatasci import OpenDataSciConfig, create_agent
|
|
|
554
558
|
|
|
555
559
|
config = OpenDataSciConfig(
|
|
556
560
|
provider="openai",
|
|
557
|
-
model="gpt-
|
|
561
|
+
model="gpt-5.6-sol",
|
|
558
562
|
openai_api_key="sk-...",
|
|
559
563
|
temperature=0.2,
|
|
560
564
|
)
|
|
@@ -580,7 +584,18 @@ async with create_agent("data.parquet", config=config) as agent:
|
|
|
580
584
|
| `google_cloud_project` | GCP project ID for Vertex AI (env: `GOOGLE_CLOUD_PROJECT`) |
|
|
581
585
|
| `google_cloud_location` | Vertex AI region (env: `GOOGLE_CLOUD_LOCATION`) |
|
|
582
586
|
| `azure_endpoint` | Azure OpenAI resource endpoint URL (env: `AZURE_OPENAI_ENDPOINT`) |
|
|
587
|
+
| `azure_api_version` | Azure OpenAI API version — defaults to `2025-01-01-preview` (env: `AZURE_OPENAI_API_VERSION`) |
|
|
583
588
|
| `llm_server_base_url` | Custom API base URL — required for `ollama` and `openai_compatible_server` (env: `LLM_SERVER_BASE_URL`) |
|
|
589
|
+
| `temperature` | Sampling temperature — not sent to Claude 4.6+ / Sonnet 5 models, which use adaptive thinking (env: `TEMPERATURE`) |
|
|
590
|
+
| `name` | Display name for the agent — defaults to `"Sai"` (env: `NAME`) |
|
|
591
|
+
| `mcp_servers` | List of MCP server URLs the agent may connect to (env: `MCP_SERVERS`) |
|
|
592
|
+
| `extra_web_domains` | Additional hostnames the `fetch_url` tool may retrieve, on top of the built-in allowlist (env: `EXTRA_FETCH_DOMAINS`) |
|
|
593
|
+
| `override_web_domains` | When set, replaces the built-in domain allowlist entirely — `extra_web_domains` is still applied on top |
|
|
594
|
+
| `skills_directory` | Path to a directory of custom skill files loaded in addition to built-ins (env: `SKILLS_DIRECTORY`) |
|
|
595
|
+
| `builtin_skills_directory` | Path to the built-in skills directory — override only to replace defaults entirely (env: `BUILTIN_SKILLS_DIRECTORY`) |
|
|
596
|
+
| `worker_timeout_seconds` | Max seconds to wait for spawned workers to finish — `null` disables the timeout, default `300` (env: `WORKER_TIMEOUT_SECONDS`) |
|
|
597
|
+
| `midturn_compaction_threshold` | Token count at which context is compacted mid-turn — default `96000` (env: `MIDTURN_COMPACTION_THRESHOLD`) |
|
|
598
|
+
| `local_code_exec_timeout` | Max seconds for a single sandboxed code-execution run — default `1800` (env: `CODE_EXEC_TIMEOUT`) |
|
|
584
599
|
|
|
585
600
|
---
|
|
586
601
|
|
|
@@ -590,14 +605,14 @@ OpenDataSci supports every major LLM provider. Pass `--provider` to the TUI or s
|
|
|
590
605
|
|
|
591
606
|
| Provider | Flag | Extra required | Default model |
|
|
592
607
|
|----------|------|----------------|---------------|
|
|
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]` | `
|
|
608
|
+
| Anthropic | `anthropic` | *(none — default)* | `claude-sonnet-5` |
|
|
609
|
+
| OpenAI | `openai` | *(none)* | `gpt-5.6-sol` |
|
|
610
|
+
| OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `Qwen/Qwen3.5-4B` |
|
|
611
|
+
| AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-5` |
|
|
612
|
+
| Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-3.5-flash` |
|
|
613
|
+
| Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-3.5-flash` |
|
|
614
|
+
| Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-5.6-sol` |
|
|
615
|
+
| Ollama | `ollama` | `open-data-sci[ollama]` | `qwen3.5:9b` |
|
|
601
616
|
|
|
602
617
|
Pass `--list-providers` to print this table from the TUI at any time.
|
|
603
618
|
|
|
@@ -611,19 +626,94 @@ Place these files inside your workspace's `.opendatasci/` directory:
|
|
|
611
626
|
|
|
612
627
|
| Path | Purpose |
|
|
613
628
|
|------|---------|
|
|
614
|
-
| `.opendatasci/mcp.json` | MCP server
|
|
629
|
+
| `.opendatasci/mcp.json` | MCP server definitions — connects the agent to external tool servers |
|
|
615
630
|
| `.opendatasci/plans/` | Persisted plan files — auto-managed, one file per planning session |
|
|
616
631
|
|
|
632
|
+
`mcp.json` uses the same convention as Cursor:
|
|
633
|
+
|
|
634
|
+
```json
|
|
635
|
+
{
|
|
636
|
+
"mcpServers": {
|
|
637
|
+
"my-server": { "url": "http://localhost:8080" },
|
|
638
|
+
"another": { "url": "http://localhost:9000" }
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
---
|
|
644
|
+
|
|
645
|
+
## Custom Skills
|
|
646
|
+
|
|
647
|
+
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.
|
|
648
|
+
|
|
649
|
+
### Workspace skills (recommended)
|
|
650
|
+
|
|
651
|
+
Place skill files inside `.opendatasci/skills/` in your workspace directory — they are picked up automatically, no configuration needed:
|
|
652
|
+
|
|
653
|
+
```
|
|
654
|
+
<workspace>/
|
|
655
|
+
└── .opendatasci/
|
|
656
|
+
├── skills/
|
|
657
|
+
│ ├── my_skill.md # standalone skill named "my_skill"
|
|
658
|
+
│ └── my_domain/
|
|
659
|
+
│ └── specialist.md # domain-scoped skill: "my_domain::specialist"
|
|
660
|
+
└── skill_domains/
|
|
661
|
+
└── my_domain/
|
|
662
|
+
└── manifest.md # optional domain manifest
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
Subdirectories create *domain-scoped* skills. The agent refers to them with the `domain::skill` naming convention (e.g. `my_domain::specialist`).
|
|
666
|
+
|
|
667
|
+
### File format
|
|
668
|
+
|
|
669
|
+
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.
|
|
670
|
+
|
|
671
|
+
```markdown
|
|
672
|
+
<!-- .opendatasci/skills/forecasting.md -->
|
|
673
|
+
You are a time-series forecasting specialist. When analysing data, always...
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
### Global skills directory
|
|
677
|
+
|
|
678
|
+
To share skills across workspaces, set `SKILLS_DIRECTORY` in your environment or `.env` file:
|
|
679
|
+
|
|
680
|
+
```bash
|
|
681
|
+
SKILLS_DIRECTORY=/home/user/my-skills
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
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`).
|
|
685
|
+
|
|
686
|
+
You can also pass `skills_directory` directly when using the Python SDK:
|
|
687
|
+
|
|
688
|
+
```python
|
|
689
|
+
from opendatasci import OpenDataSciConfig, create_agent
|
|
690
|
+
|
|
691
|
+
config = OpenDataSciConfig(skills_directory="/home/user/my-skills")
|
|
692
|
+
|
|
693
|
+
async with create_agent("data.csv", config=config) as agent:
|
|
694
|
+
...
|
|
695
|
+
```
|
|
696
|
+
|
|
617
697
|
### Environment variables
|
|
618
698
|
|
|
619
699
|
| Variable | Description |
|
|
620
700
|
|----------|-------------|
|
|
621
701
|
| `ANTHROPIC_API_KEY` | API key for the Anthropic provider |
|
|
622
|
-
| `OPENAI_API_KEY` | API key for the OpenAI provider |
|
|
623
|
-
| `
|
|
702
|
+
| `OPENAI_API_KEY` | API key for the OpenAI / OpenAI-compatible server provider |
|
|
703
|
+
| `GOOGLE_API_KEY` | API key for the Google Gemini provider |
|
|
704
|
+
| `AZURE_OPENAI_API_KEY` | API key for the Azure OpenAI provider |
|
|
705
|
+
| `REGION` | AWS region for Bedrock |
|
|
706
|
+
| `GOOGLE_CLOUD_PROJECT` | GCP project ID for Vertex AI |
|
|
707
|
+
| `GOOGLE_CLOUD_LOCATION` | Vertex AI region / location |
|
|
708
|
+
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI resource endpoint URL |
|
|
709
|
+
| `AZURE_OPENAI_API_VERSION` | Azure OpenAI API version (default: `2025-01-01-preview`) |
|
|
624
710
|
| `LLM_SERVER_BASE_URL` | Custom API base URL — used by `ollama` and `openai_compatible_server` providers |
|
|
625
|
-
| `
|
|
626
|
-
| `
|
|
711
|
+
| `TEMPERATURE` | LLM sampling temperature |
|
|
712
|
+
| `MCP_SERVERS` | Comma-separated list of MCP server URLs |
|
|
713
|
+
| `SKILLS_DIRECTORY` | Path to a directory of user-defined skill files |
|
|
714
|
+
| `BUILTIN_SKILLS_DIRECTORY` | Path to the built-in skills directory (defaults to the bundled skills) |
|
|
715
|
+
| `WORKER_TIMEOUT_SECONDS` | Max seconds to wait for spawned workers (default: `300`) |
|
|
716
|
+
| `MIDTURN_COMPACTION_THRESHOLD` | Token count at which context is compacted mid-turn (default: `96000`) |
|
|
627
717
|
| `CODE_EXEC_TIMEOUT` | Max seconds for a single sandboxed code execution (default: `1800`) |
|
|
628
718
|
|
|
629
719
|
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
|