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.
Files changed (302) hide show
  1. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/.env.example +1 -2
  2. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/PKG-INFO +136 -46
  3. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/README.md +110 -21
  4. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/dev/scripts/test_pypi_install.sh +0 -0
  5. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/dev/scripts/test_pypi_publish.sh +0 -0
  6. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/agent.md +44 -6
  7. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/config.md +17 -19
  8. open_data_sci-0.2.1/docs/api/index.md +43 -0
  9. open_data_sci-0.2.1/docs/api/memory.md +103 -0
  10. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/open_data_sci.md +1 -1
  11. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/session.md +16 -2
  12. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/session_manager.md +10 -18
  13. open_data_sci-0.2.1/docs/api/skills.md +86 -0
  14. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/types.md +17 -6
  15. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/getting-started.md +41 -20
  16. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/index.md +2 -2
  17. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/README.md +1 -1
  18. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_anthropic.yaml +5 -9
  19. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_azure.yaml +2 -2
  20. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_bedrock.yaml +4 -4
  21. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_gemini.yaml +2 -2
  22. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_ollama.yaml +3 -3
  23. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_openai.yaml +2 -2
  24. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_openai_compatible_server.yaml +3 -3
  25. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/configs/config_vertexai.yaml +2 -2
  26. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/030_notebook_anthropic.ipynb +1 -1
  27. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/031_notebook_openai_compatible_server.ipynb +2 -2
  28. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/notebooks/032_notebook_bedrock.ipynb +1 -1
  29. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/021_script_openai_compatible_server.py +2 -2
  30. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/022_script_bedrock.py +1 -1
  31. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/010_tui_anthropic.md +8 -4
  32. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/011_tui_openai_compatible_server.md +17 -14
  33. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/tui/012_tui_bedrock.md +7 -5
  34. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/mkdocs.yaml +1 -1
  35. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/__init__.py +6 -9
  36. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/adapter.py +14 -5
  37. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/app.py +48 -14
  38. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/commands.py +10 -3
  39. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/controller.py +213 -99
  40. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/file_refs.py +6 -2
  41. open_data_sci-0.2.1/opendatasci/_tui/message_queue.py +49 -0
  42. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/presenter.py +56 -34
  43. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/service.py +1 -1
  44. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/styles.tcss +46 -49
  45. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/theme.py +39 -4
  46. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/tools_display.py +51 -17
  47. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/widgets.py +341 -195
  48. open_data_sci-0.2.1/opendatasci/_utils/async_utils.py +22 -0
  49. open_data_sci-0.2.1/opendatasci/_utils/casing_utils.py +8 -0
  50. open_data_sci-0.2.1/opendatasci/_utils/datetime_utils.py +10 -0
  51. open_data_sci-0.2.1/opendatasci/_utils/graph_utils.py +8 -0
  52. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/hash_utils.py +1 -2
  53. open_data_sci-0.2.1/opendatasci/_utils/message_utils.py +92 -0
  54. open_data_sci-0.2.1/opendatasci/_utils/mixins.py +21 -0
  55. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/__init__.py +1 -7
  56. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/agents.py +130 -132
  57. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/agents_factory.py +15 -6
  58. open_data_sci-0.2.1/opendatasci/agents/chat_history.py +198 -0
  59. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/graphs.py +12 -6
  60. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/agents/nodes.py +18 -14
  61. open_data_sci-0.2.1/opendatasci/agents/states.py +87 -0
  62. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/configs.py +51 -38
  63. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/__init__.py +1 -4
  64. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/base.py +20 -9
  65. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/context/local.py +33 -45
  66. open_data_sci-0.2.1/opendatasci/context/plans.py +17 -0
  67. open_data_sci-0.2.1/opendatasci/human_inputs/__init__.py +15 -0
  68. open_data_sci-0.2.1/opendatasci/human_inputs/human_approval.py +162 -0
  69. open_data_sci-0.2.1/opendatasci/memory/chat_memory.py +256 -0
  70. open_data_sci-0.2.1/opendatasci/memory/messages.py +179 -0
  71. {open_data_sci-0.1.0/opendatasci/agents → open_data_sci-0.2.1/opendatasci/memory}/turn_memory.py +2 -1
  72. open_data_sci-0.2.1/opendatasci/models/__init__.py +3 -0
  73. open_data_sci-0.2.1/opendatasci/models/anthropic.py +80 -0
  74. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/aws.py +17 -6
  75. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/google.py +35 -21
  76. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/local.py +2 -2
  77. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/__init__.py +1 -3
  78. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/builders.py +20 -34
  79. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/prompt_templates.py +14 -9
  80. open_data_sci-0.2.1/opendatasci/resources/skill_domains/competitive_data_science/manifest.md +67 -0
  81. open_data_sci-0.2.1/opendatasci/resources/skill_domains/data_science/manifest.md +51 -0
  82. open_data_sci-0.2.1/opendatasci/resources/skill_domains/data_science_education/manifest.md +45 -0
  83. open_data_sci-0.2.1/opendatasci/resources/skill_domains/deep_learning/manifest.md +69 -0
  84. open_data_sci-0.2.1/opendatasci/resources/skill_domains/machine_learning/manifest.md +57 -0
  85. open_data_sci-0.2.1/opendatasci/resources/skill_domains/quantitative_analysis/manifest.md +45 -0
  86. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/baseline.md +21 -0
  87. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/eda.md +26 -0
  88. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/ensembling.md +31 -0
  89. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/feature_engineering.md +38 -0
  90. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/final_submission.md +23 -0
  91. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/hyperparameter_tuning.md +23 -0
  92. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/model_development.md +29 -0
  93. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/phase_wiring.md +19 -0
  94. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/reconnaissance.md +26 -0
  95. open_data_sci-0.2.1/opendatasci/resources/skills/competitive_data_science/validation.md +31 -0
  96. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/causality_confounding.md +10 -0
  97. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/communicating_findings.md +10 -0
  98. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/data_quality_preparation.md +11 -0
  99. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/exploratory_analysis.md +11 -0
  100. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/framing_the_problem.md +9 -0
  101. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/granularity_aggregation.md +9 -0
  102. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/modeling_evaluation.md +13 -0
  103. open_data_sci-0.2.1/opendatasci/resources/skills/data_science/statistical_testing.md +12 -0
  104. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/building_intuition.md +10 -0
  105. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/calibrating_depth.md +10 -0
  106. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/connecting_concepts.md +10 -0
  107. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/diagnosing_understanding.md +9 -0
  108. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/feedback_correction.md +10 -0
  109. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/structuring_explanations.md +10 -0
  110. open_data_sci-0.2.1/opendatasci/resources/skills/data_science_education/worked_examples_code.md +10 -0
  111. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/architecture_selection.md +27 -0
  112. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/evaluation.md +14 -0
  113. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/flax_nnx.md +29 -0
  114. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/hyperparameter_tuning.md +17 -0
  115. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/jax_fundamentals.md +23 -0
  116. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/library_stack.md +10 -0
  117. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/optax.md +38 -0
  118. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/regularisation_overfitting.md +25 -0
  119. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/sklearn_mlp.md +12 -0
  120. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/training_loop.md +29 -0
  121. open_data_sci-0.2.1/opendatasci/resources/skills/deep_learning/when_to_use.md +13 -0
  122. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/class_imbalance.md +10 -0
  123. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/evaluation_diagnostics.md +12 -0
  124. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/feature_engineering_selection.md +12 -0
  125. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/hyperparameter_tuning.md +11 -0
  126. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/interpretability.md +10 -0
  127. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/model_selection_complexity.md +16 -0
  128. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/overfitting_regularisation.md +11 -0
  129. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/problem_framing.md +10 -0
  130. open_data_sci-0.2.1/opendatasci/resources/skills/machine_learning/splitting_strategy.md +11 -0
  131. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/backtesting_empirical_validation.md +10 -0
  132. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/communicating_results.md +10 -0
  133. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/mathematical_statistical_foundations.md +11 -0
  134. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/optimisation.md +10 -0
  135. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/problem_formulation.md +9 -0
  136. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/risk_uncertainty_quantification.md +11 -0
  137. open_data_sci-0.2.1/opendatasci/resources/skills/quantitative_analysis/time_series_signal_analysis.md +11 -0
  138. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/srt.py +5 -1
  139. open_data_sci-0.2.1/opendatasci/session/__init__.py +4 -0
  140. open_data_sci-0.2.1/opendatasci/session/session_manager.py +113 -0
  141. open_data_sci-0.2.1/opendatasci/session/threads.py +17 -0
  142. open_data_sci-0.2.1/opendatasci/skills/__init__.py +4 -0
  143. open_data_sci-0.2.1/opendatasci/skills/base.py +71 -0
  144. open_data_sci-0.2.1/opendatasci/skills/local.py +143 -0
  145. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/__init__.py +3 -3
  146. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/events.py +17 -0
  147. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/streaming/processors.py +112 -30
  148. open_data_sci-0.2.1/opendatasci/tools/__init__.py +4 -0
  149. open_data_sci-0.2.1/opendatasci/tools/base.py +85 -0
  150. open_data_sci-0.2.1/opendatasci/tools/coding.py +393 -0
  151. open_data_sci-0.2.1/opendatasci/tools/critic.py +172 -0
  152. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/dataset_info.py +142 -82
  153. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/factory.py +33 -59
  154. open_data_sci-0.2.1/opendatasci/tools/planning.py +121 -0
  155. open_data_sci-0.2.1/opendatasci/tools/skills.py +215 -0
  156. open_data_sci-0.2.1/opendatasci/tools/user_interaction.py +82 -0
  157. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/web.py +101 -58
  158. open_data_sci-0.2.1/opendatasci/tools/workers.py +244 -0
  159. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/workspace.py +33 -16
  160. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/__init__.py +1 -4
  161. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/pyproject.toml +47 -34
  162. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/conftest.py +8 -6
  163. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_agent_integrations.py +46 -30
  164. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_cli_controller.py +288 -22
  165. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_lifecycle.py +0 -1
  166. open_data_sci-0.2.1/tests/component/test_model_factories.py +450 -0
  167. open_data_sci-0.2.1/tests/component/test_sandbox_runner.py +189 -0
  168. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_service.py +17 -27
  169. open_data_sci-0.2.1/tests/component/test_tui_app.py +474 -0
  170. open_data_sci-0.2.1/tests/component/test_tui_widgets.py +817 -0
  171. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/conftest.py +3 -4
  172. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_app.py +112 -4
  173. open_data_sci-0.2.1/tests/unit/_tui/test_commands.py +235 -0
  174. open_data_sci-0.2.1/tests/unit/_tui/test_completion.py +364 -0
  175. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_controller.py +236 -31
  176. open_data_sci-0.2.1/tests/unit/_tui/test_file_refs.py +402 -0
  177. open_data_sci-0.2.1/tests/unit/_tui/test_message_queue.py +259 -0
  178. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_presenter.py +149 -90
  179. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_tools_display.py +29 -23
  180. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_widgets.py +818 -411
  181. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_async_utils.py +1 -1
  182. open_data_sci-0.2.1/tests/unit/_utils/test_graph_utils.py +49 -0
  183. open_data_sci-0.2.1/tests/unit/_utils/test_message_utils.py +273 -0
  184. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_agents.py +187 -57
  185. open_data_sci-0.2.1/tests/unit/agents/test_chat_messages.py +194 -0
  186. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_graphs.py +3 -4
  187. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_nodes.py +51 -71
  188. open_data_sci-0.2.1/tests/unit/agents/test_states.py +46 -0
  189. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/context/test_local_context_store.py +82 -39
  190. open_data_sci-0.2.1/tests/unit/human_inputs/test_human_approval.py +192 -0
  191. open_data_sci-0.2.1/tests/unit/memory/test_chat_memory.py +353 -0
  192. {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.1/tests/unit/memory}/test_turn_memory.py +32 -31
  193. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_anthropic.py +20 -10
  194. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_aws.py +1 -2
  195. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_local.py +4 -4
  196. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/prompts/test_builders.py +56 -108
  197. open_data_sci-0.2.1/tests/unit/sandbox/__init__.py +0 -0
  198. open_data_sci-0.2.1/tests/unit/session/__init__.py +0 -0
  199. open_data_sci-0.2.1/tests/unit/session/test_session_manager.py +124 -0
  200. open_data_sci-0.2.1/tests/unit/skills/__init__.py +0 -0
  201. open_data_sci-0.2.1/tests/unit/skills/test_local.py +314 -0
  202. open_data_sci-0.2.1/tests/unit/streaming/__init__.py +0 -0
  203. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/streaming/test_processors.py +137 -4
  204. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/test_configs.py +6 -5
  205. open_data_sci-0.2.1/tests/unit/tools/__init__.py +0 -0
  206. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_coding.py +142 -44
  207. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_critic.py +5 -5
  208. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_dataset_info.py +19 -21
  209. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_factory.py +70 -14
  210. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_planning.py +32 -29
  211. open_data_sci-0.2.1/tests/unit/tools/test_skills.py +249 -0
  212. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_user_interaction.py +9 -2
  213. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_workers.py +41 -30
  214. open_data_sci-0.2.1/uv.lock +3887 -0
  215. open_data_sci-0.1.0/docs/api/index.md +0 -57
  216. open_data_sci-0.1.0/docs/api/memory.md +0 -62
  217. open_data_sci-0.1.0/opendatasci/_tui/__init__.py +0 -1
  218. open_data_sci-0.1.0/opendatasci/_tui/styles_visible.tcss +0 -245
  219. open_data_sci-0.1.0/opendatasci/_utils/async_utils.py +0 -11
  220. open_data_sci-0.1.0/opendatasci/_utils/langchain_utils.py +0 -155
  221. open_data_sci-0.1.0/opendatasci/agents/chat_memory.py +0 -397
  222. open_data_sci-0.1.0/opendatasci/agents/states.py +0 -36
  223. open_data_sci-0.1.0/opendatasci/models/__init__.py +0 -7
  224. open_data_sci-0.1.0/opendatasci/models/anthropic.py +0 -40
  225. open_data_sci-0.1.0/opendatasci/prompts/message_templates.py +0 -7
  226. open_data_sci-0.1.0/opendatasci/resources/skills/competitive_data_science.md +0 -241
  227. open_data_sci-0.1.0/opendatasci/resources/skills/data_science.md +0 -55
  228. open_data_sci-0.1.0/opendatasci/resources/skills/data_science_education.md +0 -42
  229. open_data_sci-0.1.0/opendatasci/resources/skills/deep_learning.md +0 -205
  230. open_data_sci-0.1.0/opendatasci/resources/skills/machine_learning.md +0 -68
  231. open_data_sci-0.1.0/opendatasci/resources/skills/quantitative_analysis.md +0 -45
  232. open_data_sci-0.1.0/opendatasci/skills/__init__.py +0 -9
  233. open_data_sci-0.1.0/opendatasci/skills/base.py +0 -28
  234. open_data_sci-0.1.0/opendatasci/skills/local.py +0 -131
  235. open_data_sci-0.1.0/opendatasci/tools/__init__.py +0 -58
  236. open_data_sci-0.1.0/opendatasci/tools/coding.py +0 -261
  237. open_data_sci-0.1.0/opendatasci/tools/critic.py +0 -136
  238. open_data_sci-0.1.0/opendatasci/tools/planning.py +0 -88
  239. open_data_sci-0.1.0/opendatasci/tools/skills.py +0 -90
  240. open_data_sci-0.1.0/opendatasci/tools/user_interaction.py +0 -54
  241. open_data_sci-0.1.0/opendatasci/tools/workers.py +0 -237
  242. open_data_sci-0.1.0/tests/unit/_utils/test_langchain_utils.py +0 -382
  243. open_data_sci-0.1.0/tests/unit/agents/test_chat_memory.py +0 -187
  244. open_data_sci-0.1.0/tests/unit/skills/test_local.py +0 -213
  245. open_data_sci-0.1.0/tests/unit/tools/test_skills.py +0 -152
  246. open_data_sci-0.1.0/uv.lock +0 -3554
  247. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/.gitignore +0 -0
  248. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/LICENSE +0 -0
  249. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/Makefile +0 -0
  250. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/api/workbench.md +0 -0
  251. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/docs/requirements.txt +0 -0
  252. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/examples/scripts/020_script_anthropic.py +0 -0
  253. {open_data_sci-0.1.0/opendatasci/_utils → open_data_sci-0.2.1/opendatasci/_tui}/__init__.py +0 -0
  254. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/completion.py +0 -0
  255. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/models.py +0 -0
  256. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_tui/session.py +0 -0
  257. {open_data_sci-0.1.0/tests → open_data_sci-0.2.1/opendatasci/_utils}/__init__.py +0 -0
  258. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/data_formats.py +0 -0
  259. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/_utils/streaming_utils.py +0 -0
  260. {open_data_sci-0.1.0/tests/component → open_data_sci-0.2.1/opendatasci/memory}/__init__.py +0 -0
  261. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/factory.py +0 -0
  262. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/microsoft.py +0 -0
  263. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/openai.py +0 -0
  264. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/models/providers.py +0 -0
  265. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/prompts/caching.py +0 -0
  266. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/__init__.py +1 -1
  267. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/_runner.py +0 -0
  268. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/sandbox/base.py +0 -0
  269. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/tools/mcp.py +0 -0
  270. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/base.py +0 -0
  271. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/opendatasci/workspace/local.py +0 -0
  272. {open_data_sci-0.1.0/tests/unit → open_data_sci-0.2.1/tests}/__init__.py +0 -0
  273. {open_data_sci-0.1.0/tests/unit/_tui → open_data_sci-0.2.1/tests/component}/__init__.py +0 -0
  274. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_real_streaming.py +0 -0
  275. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/component/test_streaming.py +0 -0
  276. {open_data_sci-0.1.0/tests/unit/_utils → open_data_sci-0.2.1/tests/unit}/__init__.py +0 -0
  277. {open_data_sci-0.1.0/tests/unit/agents → open_data_sci-0.2.1/tests/unit/_tui}/__init__.py +0 -0
  278. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_service.py +0 -0
  279. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_tui/test_session.py +0 -0
  280. {open_data_sci-0.1.0/tests/unit/context → open_data_sci-0.2.1/tests/unit/_utils}/__init__.py +0 -0
  281. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_data_formats.py +0 -0
  282. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/_utils/test_hash_utils.py +0 -0
  283. {open_data_sci-0.1.0/tests/unit/models → open_data_sci-0.2.1/tests/unit/agents}/__init__.py +0 -0
  284. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/agents/test_agents_factory.py +0 -0
  285. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/conftest.py +0 -0
  286. {open_data_sci-0.1.0/tests/unit/prompts → open_data_sci-0.2.1/tests/unit/context}/__init__.py +0 -0
  287. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/context/test_local_work_context.py +0 -0
  288. {open_data_sci-0.1.0/tests/unit/sandbox → open_data_sci-0.2.1/tests/unit/human_inputs}/__init__.py +0 -0
  289. {open_data_sci-0.1.0/tests/unit/skills → open_data_sci-0.2.1/tests/unit/memory}/__init__.py +0 -0
  290. {open_data_sci-0.1.0/tests/unit/streaming → open_data_sci-0.2.1/tests/unit/models}/__init__.py +0 -0
  291. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_google.py +0 -0
  292. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_microsoft.py +0 -0
  293. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/models/test_openai.py +0 -0
  294. {open_data_sci-0.1.0/tests/unit/tools → open_data_sci-0.2.1/tests/unit/prompts}/__init__.py +0 -0
  295. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/prompts/test_caching.py +0 -0
  296. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_cli_validation.py +0 -0
  297. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_exec_result.py +0 -0
  298. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_runner.py +0 -0
  299. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/sandbox/test_srt.py +0 -0
  300. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_mcp.py +0 -0
  301. {open_data_sci-0.1.0 → open_data_sci-0.2.1}/tests/unit/tools/test_web.py +0 -0
  302. {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 & reasoning ───────────────────────────────
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.0
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: connectorx<1.0.0,>=0.3.0
222
- Requires-Dist: duckduckgo-search<7.0.0,>=6.0.0
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<1.0.0,>=0.2.0
226
- Requires-Dist: langchain-core<1.0.0,>=0.3.0
227
- Requires-Dist: langchain-openai<1.0.0,>=0.2.0
228
- Requires-Dist: langgraph<1.0.0,>=0.2.0
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.0.0,>=1.26.0
234
- Requires-Dist: optuna<4.0.0,>=3.6.0
235
- Requires-Dist: pandas[excel,feather,parquet]<3.0.0,>=2.0.0
236
- Requires-Dist: plotly<6.0.0,>=5.15.0
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<3.0.0,>=2.0.0
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<14.0.0,>=13.0.0
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.48.0,>=0.47.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<3.0.0,>=2.0.0
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<1.0.0,>=0.2.0; extra == '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<2.0.0,>=1.6.0; extra == 'dev'
262
- Requires-Dist: mypy<2.0.0,>=1.13.0; extra == 'dev'
263
- Requires-Dist: pandas-stubs<3.0.0,>=2.0.0; extra == 'dev'
264
- Requires-Dist: pytest-asyncio<1.0.0,>=0.23.0; extra == 'dev'
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<8.0.0,>=7.0.0; extra == 'dev'
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]<1.0.0,>=0.26.0; extra == 'docs'
275
+ Requires-Dist: mkdocstrings[python]<2.0.0,>=1.0.0; extra == 'docs'
275
276
  Provides-Extra: gcp
276
- Requires-Dist: langchain-google-vertexai<3.0.0,>=2.0.0; extra == 'gcp'
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<3.0.0,>=2.0.0; extra == 'gemini'
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<1.0.0,>=0.2.0; extra == '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 llama3.2:3b # local, no key needed
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-4-6
399
+ model: claude-sonnet-5
398
400
  secondary_provider: openai
399
- secondary_model: gpt-4o-mini
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-4o
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.4-mini
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-4o",
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-4-6` |
594
- | OpenAI | `openai` | *(none)* | `gpt-5.5` |
595
- | OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `meta-llama/Llama-3.2-3B-Instruct` |
596
- | AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-4-6` |
597
- | Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-2.5-pro` |
598
- | Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-2.5-pro` |
599
- | Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-4o` |
600
- | Ollama | `ollama` | `open-data-sci[ollama]` | `llama3.2:3b` |
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 URLs — connects the agent to external tool servers |
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
- | `REGION` | Cloud provider region |
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
- | `SKILLS_DIRECTORY` | Path to a directory of user-defined skill files (overrides none by default) |
626
- | `BUILTIN_SKILLS_DIRECTORY` | Path to the built-in skills directory (defaults to the bundled `resources/skills`) |
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 llama3.2:3b # local, no key needed
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-4-6
112
+ model: claude-sonnet-5
112
113
  secondary_provider: openai
113
- secondary_model: gpt-4o-mini
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-4o
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.4-mini
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-4o",
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-4-6` |
308
- | OpenAI | `openai` | *(none)* | `gpt-5.5` |
309
- | OpenAI-compatible server (e.g. vLLM) | `openai_compatible_server` | *(none)* | `meta-llama/Llama-3.2-3B-Instruct` |
310
- | AWS Bedrock | `bedrock` | `open-data-sci[aws]` | `us.anthropic.claude-sonnet-4-6` |
311
- | Google Gemini | `gemini` | `open-data-sci[gemini]` | `gemini-2.5-pro` |
312
- | Google Vertex AI | `vertexai` | `open-data-sci[gcp]` | `gemini-2.5-pro` |
313
- | Azure OpenAI | `azure` | `open-data-sci[azure]` | `gpt-4o` |
314
- | Ollama | `ollama` | `open-data-sci[ollama]` | `llama3.2:3b` |
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 URLs — connects the agent to external tool servers |
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
- | `REGION` | Cloud provider region |
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
- | `SKILLS_DIRECTORY` | Path to a directory of user-defined skill files (overrides none by default) |
340
- | `BUILTIN_SKILLS_DIRECTORY` | Path to the built-in skills directory (defaults to the bundled `resources/skills`) |
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.
@@ -1,6 +1,6 @@
1
1
  # Agent
2
2
 
3
- `Agent` is the core conversational AI agent. It wraps a LangGraph state machine that orchestrates LLM calls, tool execution, concurrent workers, and rolling memory.
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 graph state. |
59
- | `compact_chat_history()` | Use the LLM to summarise old turns, then discard them. Returns the summary text. Use this instead of `clear_chat_history` when you want to keep context across a long session without blowing up the context window. |
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
- - graph
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
- - run
130
+ - ainvoke