marvin 3.2.2__tar.gz → 3.2.3__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 (310) hide show
  1. {marvin-3.2.2 → marvin-3.2.3}/PKG-INFO +2 -2
  2. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/api.py +1 -6
  3. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/models.py +1 -1
  4. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/research_agent.py +1 -1
  5. {marvin-3.2.2 → marvin-3.2.3}/examples/timeseries.py +19 -7
  6. {marvin-3.2.2 → marvin-3.2.3}/pyproject.toml +1 -1
  7. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/streaming.py +8 -0
  8. marvin-3.2.3/uv.lock +7237 -0
  9. marvin-3.2.2/.cursor/rules/docs.mdc +0 -14
  10. marvin-3.2.2/.cursor/rules/general.mdc +0 -12
  11. marvin-3.2.2/.cursor/rules/python.mdc +0 -35
  12. marvin-3.2.2/uv.lock +0 -6310
  13. {marvin-3.2.2 → marvin-3.2.3}/.github/labeler.yml +0 -0
  14. {marvin-3.2.2 → marvin-3.2.3}/.github/release.yml +0 -0
  15. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/deploy-cloudrun-revision-community.yaml +0 -0
  16. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/deploy-cloudrun-revision-internal.yaml +0 -0
  17. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/image-build-and-push-community.yaml +0 -0
  18. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/image-build-and-push-internal.yaml +0 -0
  19. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/labeler.yml +0 -0
  20. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/publish.yml +0 -0
  21. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/run-tests.yml +0 -0
  22. {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/static-analysis.yml +0 -0
  23. {marvin-3.2.2 → marvin-3.2.3}/.gitignore +0 -0
  24. {marvin-3.2.2 → marvin-3.2.3}/.pre-commit-config.yaml +0 -0
  25. {marvin-3.2.2 → marvin-3.2.3}/CLAUDE.md +0 -0
  26. {marvin-3.2.2 → marvin-3.2.3}/LICENSE +0 -0
  27. {marvin-3.2.2 → marvin-3.2.3}/README.md +0 -0
  28. {marvin-3.2.2 → marvin-3.2.3}/alembic.ini +0 -0
  29. {marvin-3.2.2 → marvin-3.2.3}/docs/README.md +0 -0
  30. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-actor.mdx +0 -0
  31. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-agent.mdx +0 -0
  32. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-names.mdx +0 -0
  33. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-team.mdx +0 -0
  34. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents.mdx +0 -0
  35. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-beta.mdx +0 -0
  36. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-config.mdx +0 -0
  37. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-dev.mdx +0 -0
  38. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-main.mdx +0 -0
  39. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-migrations.mdx +0 -0
  40. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli.mdx +0 -0
  41. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-database.mdx +0 -0
  42. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-defaults.mdx +0 -0
  43. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-end_turn.mdx +0 -0
  44. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-events.mdx +0 -0
  45. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-llm.mdx +0 -0
  46. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-orchestrator.mdx +0 -0
  47. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-streaming.mdx +0 -0
  48. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine.mdx +0 -0
  49. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-cast.mdx +0 -0
  50. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-classify.mdx +0 -0
  51. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-extract.mdx +0 -0
  52. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-fn.mdx +0 -0
  53. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-generate.mdx +0 -0
  54. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-plan.mdx +0 -0
  55. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-run.mdx +0 -0
  56. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-say.mdx +0 -0
  57. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-summarize.mdx +0 -0
  58. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns.mdx +0 -0
  59. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-handlers.mdx +0 -0
  60. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-print_handler.mdx +0 -0
  61. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-queue_handler.mdx +0 -0
  62. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers.mdx +0 -0
  63. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-instructions.mdx +0 -0
  64. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-memory.mdx +0 -0
  65. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-chroma.mdx +0 -0
  66. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-lance.mdx +0 -0
  67. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-postgres.mdx +0 -0
  68. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-qdrant.mdx +0 -0
  69. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers.mdx +0 -0
  70. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory.mdx +0 -0
  71. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-prompts.mdx +0 -0
  72. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-settings.mdx +0 -0
  73. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tasks-task.mdx +0 -0
  74. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tasks.mdx +0 -0
  75. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-thread.mdx +0 -0
  76. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tools-thread.mdx +0 -0
  77. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tools.mdx +0 -0
  78. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-asyncio.mdx +0 -0
  79. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-jinja.mdx +0 -0
  80. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-jsonschema.mdx +0 -0
  81. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-logging.mdx +0 -0
  82. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-models.mdx +0 -0
  83. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-testing.mdx +0 -0
  84. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-tools.mdx +0 -0
  85. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-types.mdx +0 -0
  86. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities.mdx +0 -0
  87. {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin.mdx +0 -0
  88. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/brand/marvin_mascot.jpeg +0 -0
  89. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/code.css +0 -0
  90. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/ai_model.png +0 -0
  91. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/dont_panic.png +0 -0
  92. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/it_hates_me.png +0 -0
  93. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/life_the_universe_and_ai.png +0 -0
  94. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/pip_install_marvin_hero.png +0 -0
  95. {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/sort_of_thing_you_enjoy.png +0 -0
  96. {marvin-3.2.2 → marvin-3.2.3}/docs/community.mdx +0 -0
  97. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/agents.mdx +0 -0
  98. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/memory.mdx +0 -0
  99. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/tasks.mdx +0 -0
  100. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/teams.mdx +0 -0
  101. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/threads.mdx +0 -0
  102. {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/tools-and-context.mdx +0 -0
  103. {marvin-3.2.2 → marvin-3.2.3}/docs/docs.json +0 -0
  104. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/cast.mdx +0 -0
  105. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/classify.mdx +0 -0
  106. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/extract.mdx +0 -0
  107. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/fn.mdx +0 -0
  108. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/generate.mdx +0 -0
  109. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/plan.mdx +0 -0
  110. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/run.mdx +0 -0
  111. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/say.mdx +0 -0
  112. {marvin-3.2.2 → marvin-3.2.3}/docs/functions/summarize.mdx +0 -0
  113. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/building-a-chatbot.mdx +0 -0
  114. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/cli.mdx +0 -0
  115. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/configuration.mdx +0 -0
  116. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/configure-llms.mdx +0 -0
  117. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/database-migrations.mdx +0 -0
  118. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/mcp.mdx +0 -0
  119. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/migration-guide.mdx +0 -0
  120. {marvin-3.2.2 → marvin-3.2.3}/docs/guides/multi-step-workflow.mdx +0 -0
  121. {marvin-3.2.2 → marvin-3.2.3}/docs/installation.mdx +0 -0
  122. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/instructions.mdx +0 -0
  123. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/interactivity.mdx +0 -0
  124. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/memory.mdx +0 -0
  125. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/running-tasks.mdx +0 -0
  126. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/task-results.mdx +0 -0
  127. {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/tools.mdx +0 -0
  128. {marvin-3.2.2 → marvin-3.2.3}/docs/quickstart.mdx +0 -0
  129. {marvin-3.2.2 → marvin-3.2.3}/docs/snippets/version-badge.mdx +0 -0
  130. {marvin-3.2.2 → marvin-3.2.3}/docs/style.css +0 -0
  131. {marvin-3.2.2 → marvin-3.2.3}/docs/welcome.mdx +0 -0
  132. {marvin-3.2.2 → marvin-3.2.3}/examples/agent_mcp.py +0 -0
  133. {marvin-3.2.2 → marvin-3.2.3}/examples/custom_handler.py +0 -0
  134. {marvin-3.2.2 → marvin-3.2.3}/examples/custom_prompt.py +0 -0
  135. {marvin-3.2.2 → marvin-3.2.3}/examples/deepseek_chat.py +0 -0
  136. {marvin-3.2.2 → marvin-3.2.3}/examples/english_to_schema.py +0 -0
  137. {marvin-3.2.2 → marvin-3.2.3}/examples/fastmcp/hello.py +0 -0
  138. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_agent.py +0 -0
  139. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_cast.py +0 -0
  140. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_classify.py +0 -0
  141. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_extract.py +0 -0
  142. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_fn.py +0 -0
  143. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_generate.py +0 -0
  144. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_marvin.py +0 -0
  145. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_run.py +0 -0
  146. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_task.py +0 -0
  147. {marvin-3.2.2 → marvin-3.2.3}/examples/hello_team.py +0 -0
  148. {marvin-3.2.2 → marvin-3.2.3}/examples/pandas/data.csv +0 -0
  149. {marvin-3.2.2 → marvin-3.2.3}/examples/pandas/dataframe.py +0 -0
  150. {marvin-3.2.2 → marvin-3.2.3}/examples/provider_specific/azure/run_agent.py +0 -0
  151. {marvin-3.2.2 → marvin-3.2.3}/examples/provider_specific/openai/run_agent.py +0 -0
  152. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/.dockerignore +0 -0
  153. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/CLAUDE.md +0 -0
  154. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/Dockerfile.slackbot +0 -0
  155. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/README.md +0 -0
  156. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/pyproject.toml +0 -0
  157. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/__init__.py +0 -0
  158. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/__main__.py +0 -0
  159. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/__init__.py +0 -0
  160. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/constants.py +0 -0
  161. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/monkey_patch.py +0 -0
  162. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/templates.py +0 -0
  163. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/thread_status.py +0 -0
  164. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/tool_tracking.py +0 -0
  165. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/assets.py +0 -0
  166. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/core.py +0 -0
  167. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/__init__.py +0 -0
  168. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/client.py +0 -0
  169. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/discussions.py +0 -0
  170. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/exceptions.py +0 -0
  171. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/issues.py +0 -0
  172. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/prompts.py +0 -0
  173. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/py.typed +0 -0
  174. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/search.py +0 -0
  175. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/settings.py +0 -0
  176. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/slack.py +0 -0
  177. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/strings.py +0 -0
  178. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/types.py +0 -0
  179. {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/wrap.py +0 -0
  180. {marvin-3.2.2 → marvin-3.2.3}/examples/talk_to_marvin.py +0 -0
  181. {marvin-3.2.2 → marvin-3.2.3}/examples/task_retries.py +0 -0
  182. {marvin-3.2.2 → marvin-3.2.3}/examples/you_have_been_goosed/README.md +0 -0
  183. {marvin-3.2.2 → marvin-3.2.3}/examples/you_have_been_goosed/goose_em.py +0 -0
  184. {marvin-3.2.2 → marvin-3.2.3}/justfile +0 -0
  185. {marvin-3.2.2 → marvin-3.2.3}/migrations/README.md +0 -0
  186. {marvin-3.2.2 → marvin-3.2.3}/migrations/env.py +0 -0
  187. {marvin-3.2.2 → marvin-3.2.3}/migrations/script.py.mako +0 -0
  188. {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250301_141903_initial_schema.py +0 -0
  189. {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250302_123716_improve_message_tracking.py +0 -0
  190. {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250302_135101_add_llmcall_message_tracking.py +0 -0
  191. {marvin-3.2.2 → marvin-3.2.3}/scripts/check_for_breakpoints.py +0 -0
  192. {marvin-3.2.2 → marvin-3.2.3}/scripts/create_mintlify_api_ref.py +0 -0
  193. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/__init__.py +0 -0
  194. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/deprecation.py +0 -0
  195. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/README.md +0 -0
  196. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/fastmcp.py +0 -0
  197. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/mcp.py +0 -0
  198. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/CLAUDE.md +0 -0
  199. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/__init__.py +0 -0
  200. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/actor.py +0 -0
  201. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/agent.py +0 -0
  202. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/names.py +0 -0
  203. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/team.py +0 -0
  204. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/beta/__init__.py +0 -0
  205. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/__init__.py +0 -0
  206. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/config.py +0 -0
  207. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/dev.py +0 -0
  208. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/main.py +0 -0
  209. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/migrations.py +0 -0
  210. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/database.py +0 -0
  211. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/defaults.py +0 -0
  212. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/CLAUDE.md +0 -0
  213. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/__init__.py +0 -0
  214. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/end_turn.py +0 -0
  215. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/events.py +0 -0
  216. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/llm.py +0 -0
  217. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/orchestrator.py +0 -0
  218. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/__init__.py +0 -0
  219. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/cast.py +0 -0
  220. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/classify.py +0 -0
  221. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/extract.py +0 -0
  222. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/fn.py +0 -0
  223. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/generate.py +0 -0
  224. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/plan.py +0 -0
  225. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/run.py +0 -0
  226. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/say.py +0 -0
  227. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/summarize.py +0 -0
  228. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/__init__.py +0 -0
  229. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/handlers.py +0 -0
  230. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/print_handler.py +0 -0
  231. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/queue_handler.py +0 -0
  232. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/instructions.md +0 -0
  233. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/instructions.py +0 -0
  234. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/__init__.py +0 -0
  235. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/memory.py +0 -0
  236. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/__init__.py +0 -0
  237. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/chroma.py +0 -0
  238. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/lance.py +0 -0
  239. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/postgres.py +0 -0
  240. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/qdrant.py +0 -0
  241. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/prompts.py +0 -0
  242. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/py.typed +0 -0
  243. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/settings.py +0 -0
  244. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/CLAUDE.md +0 -0
  245. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/__init__.py +0 -0
  246. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/task.py +0 -0
  247. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/agent.jinja +0 -0
  248. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/memory.jinja +0 -0
  249. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/system.jinja +0 -0
  250. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/task.jinja +0 -0
  251. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/team.jinja +0 -0
  252. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/thread.py +0 -0
  253. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/CLAUDE.md +0 -0
  254. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/__init__.py +0 -0
  255. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/interactive/cli.py +0 -0
  256. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/thread.py +0 -0
  257. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/__init__.py +0 -0
  258. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/asyncio.py +0 -0
  259. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/jinja.py +0 -0
  260. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/jsonschema.py +0 -0
  261. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/logging.py +0 -0
  262. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/models.py +0 -0
  263. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/testing.py +0 -0
  264. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/tools.py +0 -0
  265. {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/types.py +0 -0
  266. {marvin-3.2.2 → marvin-3.2.3}/tests/__init__.py +0 -0
  267. {marvin-3.2.2 → marvin-3.2.3}/tests/agents/test_mcp_integration.py +0 -0
  268. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/README.md +0 -0
  269. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/__init__.py +0 -0
  270. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/__init__.py +0 -0
  271. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_cast.py +0 -0
  272. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_classify.py +0 -0
  273. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_customization.py +0 -0
  274. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_extract.py +0 -0
  275. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_fn.py +0 -0
  276. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_generate.py +0 -0
  277. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_run.py +0 -0
  278. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_say.py +0 -0
  279. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_summarize.py +0 -0
  280. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/memory/__init__.py +0 -0
  281. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/memory/test_memory.py +0 -0
  282. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/tasks/__init__.py +0 -0
  283. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/tasks/test_tasks.py +0 -0
  284. {marvin-3.2.2 → marvin-3.2.3}/tests/ai/test_mcp.py +0 -0
  285. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/README.md +0 -0
  286. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/__init__.py +0 -0
  287. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/__init__.py +0 -0
  288. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/test_agent.py +0 -0
  289. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/test_team.py +0 -0
  290. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/conftest.py +0 -0
  291. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/__init__.py +0 -0
  292. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_database.py +0 -0
  293. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_events.py +0 -0
  294. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_orchestrator.py +0 -0
  295. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_streaming.py +0 -0
  296. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_threads.py +0 -0
  297. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/memory/__init__.py +0 -0
  298. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/memory/test_memory.py +0 -0
  299. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/tasks/__init__.py +0 -0
  300. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/tasks/test_tasks.py +0 -0
  301. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/test_instructions.py +0 -0
  302. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/test_run.py +0 -0
  303. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/__init__.py +0 -0
  304. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_jsonschema.py +0 -0
  305. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_tools.py +0 -0
  306. {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_types.py +0 -0
  307. {marvin-3.2.2 → marvin-3.2.3}/tests/conftest.py +0 -0
  308. {marvin-3.2.2 → marvin-3.2.3}/tests/data/youre-funny.wav +0 -0
  309. {marvin-3.2.2 → marvin-3.2.3}/tests/settings/test_settings_object.py +0 -0
  310. {marvin-3.2.2 → marvin-3.2.3}/tests/test_concurrent_execution.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: marvin
3
- Version: 3.2.2
3
+ Version: 3.2.3
4
4
  Summary: a simple and powerful tool to get things done with AI
5
5
  License: Apache License
6
6
  Version 2.0, January 2004
@@ -209,7 +209,7 @@ Requires-Dist: aiosqlite>=0.20.0
209
209
  Requires-Dist: alembic>=1.12.0
210
210
  Requires-Dist: jinja2>=3.1.4
211
211
  Requires-Dist: partial-json-parser>=0.2.1.1.post5
212
- Requires-Dist: pydantic-ai>=0.7.2
212
+ Requires-Dist: pydantic-ai>=1.9.0
213
213
  Requires-Dist: pydantic-settings>=2.6.1
214
214
  Requires-Dist: pydantic[email]>=2.10.6
215
215
  Requires-Dist: rich>=13.9.4
@@ -279,12 +279,7 @@ async def handle_message(payload: SlackPayload, db: Database):
279
279
  channel_id=event.channel,
280
280
  thread_ts=thread_ts,
281
281
  )
282
- # Still return completed so we don't retry
283
- return Completed(
284
- message="Error during agent execution",
285
- name="ERROR_HANDLED",
286
- data=dict(error=str(e), user_context=user_context),
287
- )
282
+ raise
288
283
  finally:
289
284
  try:
290
285
  await mark_thread_completed(db, message_ts)
@@ -18,7 +18,7 @@ class GitHubLabel(BaseModel):
18
18
 
19
19
  name: str = Field(default="")
20
20
  color: str = Field(default="")
21
- description: str = Field(default="")
21
+ description: str | None = Field(default="")
22
22
 
23
23
 
24
24
  class GitHubComment(BaseModel):
@@ -42,7 +42,7 @@ def create_research_agent(
42
42
  """Create a specialized research agent for thorough information gathering."""
43
43
 
44
44
  agent = Agent[ResearchContext, ResearchFindings](
45
- model=model or "openai:gpt-4o",
45
+ model=model or "anthropic:claude-haiku-4-5",
46
46
  deps_type=ResearchContext,
47
47
  output_type=ResearchFindings,
48
48
  system_prompt="""You are a specialized research agent for Prefect documentation and knowledge.
@@ -2,9 +2,9 @@ import json
2
2
  import re
3
3
  from typing import Any, TypedDict
4
4
 
5
- from atproto import Client
5
+ from atproto import Client, models
6
6
  from atproto.exceptions import BadRequestError
7
- from atproto_client.models.app.bsky.feed.defs import ThreadViewPost
7
+ from pydantic import field_validator
8
8
  from pydantic_ai import ImageUrl
9
9
  from pydantic_settings import BaseSettings, SettingsConfigDict
10
10
 
@@ -21,6 +21,15 @@ class Settings(BaseSettings):
21
21
 
22
22
  bsky_handle: str
23
23
  bsky_password: str
24
+ atproto_pds_url: str = "https://bsky.social"
25
+
26
+ @field_validator("atproto_pds_url")
27
+ @classmethod
28
+ def ensure_url_protocol(cls, v: str) -> str:
29
+ """Ensure the PDS URL has a protocol"""
30
+ if not v.startswith(("http://", "https://")):
31
+ return f"https://{v}"
32
+ return v
24
33
 
25
34
 
26
35
  class Snapshot(TypedDict):
@@ -48,7 +57,7 @@ def extract_post_id(bluesky_url: str) -> tuple[str, str]:
48
57
  return match.group(1), match.group(2)
49
58
 
50
59
 
51
- def build_context(thread: ThreadViewPost) -> dict[str, Any]:
60
+ def build_context(thread: models.AppBskyFeedDefs.ThreadViewPost) -> dict[str, Any]:
52
61
  context: dict[str, Any] = {}
53
62
  if thread and thread.post:
54
63
  context["bsky post"] = {
@@ -65,7 +74,7 @@ def build_context(thread: ThreadViewPost) -> dict[str, Any]:
65
74
  image_description_result = visual_extraction_agent.run(
66
75
  [
67
76
  "summarize this image concisely, include direct quotes from the image",
68
- ImageUrl(url=img.fullsize),
77
+ ImageUrl(url=img.fullsize, media_type="image/jpeg"),
69
78
  ]
70
79
  )
71
80
  context["bsky post"]["embed"] = image_description_result
@@ -80,7 +89,10 @@ def build_context(thread: ThreadViewPost) -> dict[str, Any]:
80
89
  "embed": visual_extraction_agent.run(
81
90
  "summarize this image concisely, include direct quotes from the image",
82
91
  attachments=[
83
- ImageUrl(url=reply_post.embed.images[0].fullsize),
92
+ ImageUrl(
93
+ url=reply_post.embed.images[0].fullsize,
94
+ media_type="image/jpeg",
95
+ ),
84
96
  ],
85
97
  )
86
98
  }
@@ -99,7 +111,7 @@ def build_context(thread: ThreadViewPost) -> dict[str, Any]:
99
111
  def explain_bsky_post(
100
112
  bsky_post_url: str, details: dict[str, Any] | None = None
101
113
  ) -> None:
102
- client = Client()
114
+ client = Client(base_url=settings.atproto_pds_url)
103
115
  client.login(settings.bsky_handle, settings.bsky_password)
104
116
 
105
117
  try:
@@ -111,7 +123,7 @@ def explain_bsky_post(
111
123
  logger.error(f"Error fetching thread: {e}")
112
124
  return
113
125
 
114
- assert isinstance(thread, ThreadViewPost)
126
+ assert isinstance(thread, models.AppBskyFeedDefs.ThreadViewPost)
115
127
  context = build_context(thread)
116
128
 
117
129
  if details:
@@ -10,7 +10,7 @@ dependencies = [
10
10
  "alembic>=1.12.0",
11
11
  "jinja2>=3.1.4",
12
12
  "partial-json-parser>=0.2.1.1.post5",
13
- "pydantic-ai>=0.7.2",
13
+ "pydantic-ai>=1.9.0",
14
14
  "pydantic-settings>=2.6.1",
15
15
  "pydantic[email]>=2.10.6",
16
16
  "rich>=13.9.4",
@@ -10,6 +10,7 @@ from pydantic_ai.messages import (
10
10
  FunctionToolResultEvent,
11
11
  ModelResponsePart,
12
12
  PartDeltaEvent,
13
+ PartEndEvent,
13
14
  PartStartEvent,
14
15
  RetryPromptPart,
15
16
  TextPartDelta,
@@ -236,6 +237,13 @@ def _process_pydantic_event(
236
237
  tool_call_id=snapshot.tool_call_id if snapshot else None,
237
238
  tool=tools_map.get(event.part.tool_name),
238
239
  )
240
+ # Handle Part End Events
241
+ elif isinstance(event, PartEndEvent):
242
+ # Part end events signal that a part is complete. We don't need to
243
+ # emit a Marvin event for this since we handle completion via other
244
+ # events (FunctionToolCallEvent, FinalResultEvent, etc.)
245
+ return None
246
+
239
247
  # Handle Part Delta Events
240
248
  elif isinstance(event, PartDeltaEvent):
241
249
  # Process a delta update to an existing part