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.
- {marvin-3.2.2 → marvin-3.2.3}/PKG-INFO +2 -2
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/api.py +1 -6
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/models.py +1 -1
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/research_agent.py +1 -1
- {marvin-3.2.2 → marvin-3.2.3}/examples/timeseries.py +19 -7
- {marvin-3.2.2 → marvin-3.2.3}/pyproject.toml +1 -1
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/streaming.py +8 -0
- marvin-3.2.3/uv.lock +7237 -0
- marvin-3.2.2/.cursor/rules/docs.mdc +0 -14
- marvin-3.2.2/.cursor/rules/general.mdc +0 -12
- marvin-3.2.2/.cursor/rules/python.mdc +0 -35
- marvin-3.2.2/uv.lock +0 -6310
- {marvin-3.2.2 → marvin-3.2.3}/.github/labeler.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/release.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/deploy-cloudrun-revision-community.yaml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/deploy-cloudrun-revision-internal.yaml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/image-build-and-push-community.yaml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/image-build-and-push-internal.yaml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/labeler.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/publish.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/run-tests.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.github/workflows/static-analysis.yml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.gitignore +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/.pre-commit-config.yaml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/LICENSE +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/alembic.ini +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-actor.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-agent.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-names.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents-team.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-agents.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-beta.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-config.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-dev.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-main.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli-migrations.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-cli.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-database.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-defaults.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-end_turn.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-events.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-llm.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-orchestrator.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine-streaming.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-engine.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-cast.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-classify.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-extract.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-fn.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-generate.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-plan.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-run.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-say.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns-summarize.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-fns.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-handlers.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-print_handler.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers-queue_handler.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-handlers.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-instructions.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-memory.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-chroma.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-lance.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-postgres.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers-qdrant.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory-providers.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-memory.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-prompts.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-settings.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tasks-task.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tasks.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-thread.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tools-thread.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-tools.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-asyncio.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-jinja.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-jsonschema.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-logging.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-models.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-testing.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-tools.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities-types.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin-utilities.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/api-reference/marvin.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/brand/marvin_mascot.jpeg +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/code.css +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/ai_model.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/dont_panic.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/it_hates_me.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/life_the_universe_and_ai.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/pip_install_marvin_hero.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/assets/img/quotes/sort_of_thing_you_enjoy.png +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/community.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/agents.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/memory.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/tasks.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/teams.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/threads.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/concepts/tools-and-context.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/docs.json +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/cast.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/classify.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/extract.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/fn.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/generate.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/plan.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/run.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/say.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/functions/summarize.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/building-a-chatbot.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/cli.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/configuration.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/configure-llms.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/database-migrations.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/mcp.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/migration-guide.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/guides/multi-step-workflow.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/installation.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/instructions.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/interactivity.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/memory.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/running-tasks.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/task-results.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/patterns/tools.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/quickstart.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/snippets/version-badge.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/style.css +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/docs/welcome.mdx +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/agent_mcp.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/custom_handler.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/custom_prompt.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/deepseek_chat.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/english_to_schema.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/fastmcp/hello.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_agent.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_cast.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_classify.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_extract.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_fn.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_generate.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_marvin.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_run.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_task.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/hello_team.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/pandas/data.csv +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/pandas/dataframe.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/provider_specific/azure/run_agent.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/provider_specific/openai/run_agent.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/.dockerignore +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/Dockerfile.slackbot +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/pyproject.toml +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/__main__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/constants.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/monkey_patch.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/templates.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/thread_status.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/_internal/tool_tracking.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/assets.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/core.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/client.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/discussions.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/exceptions.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/github/issues.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/prompts.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/py.typed +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/search.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/settings.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/slack.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/strings.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/types.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/slackbot/src/slackbot/wrap.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/talk_to_marvin.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/task_retries.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/you_have_been_goosed/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/examples/you_have_been_goosed/goose_em.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/justfile +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/env.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/script.py.mako +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250301_141903_initial_schema.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250302_123716_improve_message_tracking.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/migrations/versions/20250302_135101_add_llmcall_message_tracking.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/scripts/check_for_breakpoints.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/scripts/create_mintlify_api_ref.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/deprecation.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/fastmcp.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/_internal/integrations/mcp.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/actor.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/agent.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/names.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/agents/team.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/beta/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/config.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/dev.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/main.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/cli/migrations.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/database.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/defaults.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/end_turn.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/events.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/llm.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/engine/orchestrator.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/cast.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/classify.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/extract.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/fn.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/generate.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/plan.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/run.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/say.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/fns/summarize.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/handlers.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/print_handler.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/handlers/queue_handler.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/instructions.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/instructions.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/memory.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/chroma.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/lance.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/postgres.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/memory/providers/qdrant.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/prompts.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/py.typed +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/settings.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tasks/task.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/agent.jinja +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/memory.jinja +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/system.jinja +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/task.jinja +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/templates/team.jinja +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/thread.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/CLAUDE.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/interactive/cli.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/tools/thread.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/asyncio.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/jinja.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/jsonschema.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/logging.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/models.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/testing.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/tools.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/src/marvin/utilities/types.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/agents/test_mcp_integration.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_cast.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_classify.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_customization.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_extract.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_fn.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_generate.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_run.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_say.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/fns/test_summarize.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/memory/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/memory/test_memory.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/tasks/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/tasks/test_tasks.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/ai/test_mcp.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/README.md +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/test_agent.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/actors/test_team.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/conftest.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_database.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_events.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_orchestrator.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_streaming.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/engine/test_threads.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/memory/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/memory/test_memory.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/tasks/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/tasks/test_tasks.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/test_instructions.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/test_run.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/__init__.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_jsonschema.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_tools.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/basic/utilities/test_types.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/conftest.py +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/data/youre-funny.wav +0 -0
- {marvin-3.2.2 → marvin-3.2.3}/tests/settings/test_settings_object.py +0 -0
- {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.
|
|
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>=
|
|
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
|
-
|
|
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)
|
|
@@ -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 "
|
|
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
|
|
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(
|
|
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,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
|