Releases: PrefectHQ/marvin
there's no "Team" in "marvin"
What's Changed
- slackbot fix by @zzstoatzz in #1145
- expose Team as suggested by docs by @zzstoatzz in #1154
- Readme and docs by @zzstoatzz in #1155
Full Changelog: v3.1.1...v3.1.2
double trouble
fixes an issue with duplicate tool discover in MCP support for agents, see #1142
What's Changed
New Features π
- fastmcp adapter by @zzstoatzz in #1141
Other Changes π¦Ύ
- fix mcp wrapping by @zzstoatzz in #1143
Full Changelog: v3.1.0...v3.1.1
I have so much stuff in my repo. Structured outputs, agents, MCP, obviously. A scary goose server, obviously. Obviously a Deepseek example. I have no problem being in my repo for hours and hours.
https://www.youtube.com/shorts/4qi7MsXyP8E
This release includes MCP support for agents.
example
import asyncio
from pathlib import Path
from typing import Annotated, TypedDict
from pydantic import Field
from pydantic_ai.mcp import MCPServerStdio
from rich import print as pprint
import marvin
class Reflection(TypedDict):
score: Annotated[int, Field(ge=0, le=100)]
areas_for_improvement: list[str]
# Requires Deno: `deno install -A ... jsr:@pydantic/mcp-run-python`
run_python_server = MCPServerStdio(
command="deno",
args=["run", "-A", "jsr:@pydantic/mcp-run-python", "stdio"],
)
# Requires uv: `uvx mcp-server-git`
git_server = MCPServerStdio(
command="uvx",
args=["mcp-server-git"],
)
def write_summary_of_work(description: str, file_path: str) -> str:
"""log your efforts in your own style"""
Path(file_path).write_text(description)
return f"Summary written to {file_path}"
linus = marvin.Agent(
name="Linus",
instructions="Use the available tools as needed to accomplish the user's goal.",
mcp_servers=[run_python_server, git_server],
tools=[write_summary_of_work],
)
async def main():
with marvin.Thread():
pprint("\n--- Starting Agent Run ---")
result = await linus.run_async(
(
"1. Get the latest commit hash from this repo using the git_log tool\n"
"2. Report how many characters long the commit hash is\n"
"3. Calculate the square root of that number with python\n"
"finish with a haiku about your experience"
)
)
pprint("\n--- Final Result ---")
pprint(result)
pprint("\n--- Reflection ---")
pprint(
await linus.run_async(
"reflect on your work and write a short `summary.txt` file",
result_type=Reflection,
)
)
if Path("summary.txt").exists():
input("\n--- As expected, summary.txt exists - hit enter to remove it")
Path("summary.txt").unlink()
else:
raise RuntimeError("agent did not write summary.txt")
if __name__ == "__main__":
asyncio.run(main())
What's Changed
New Features π
- config cli by @zzstoatzz in #1128
- add mcp support to agents by @zzstoatzz in #1129
- improve mcp impl by @zzstoatzz in #1134
Fixes π
- smol fix to mcp by @zzstoatzz in #1135
Breaking Changes π«
- ignore unprefixed
DATABASE_URL
by @zzstoatzz in #1137
Docs π
- tweak readme by @zzstoatzz in #1130
- add test for 1131 by @zzstoatzz in #1132
- Fix mcp by @zzstoatzz in #1133
Other Changes π¦Ύ
- [bug fix] in tasks executed by team by @eformica in #1131
- rm by @zzstoatzz in #1138
New Contributors
Full Changelog: v3.0.6...v3.1.0
Not Everybody Knows How To Do Everything, MCP isn't the only thing
https://youtu.be/CaIH2KuCIXY?si=qdBPFHkn3dLtdxF_&t=13
What's Changed
fixes
- Fix mcp by @zzstoatzz in #1133
- tasks executed by team by @eformica in #1131
docs
- tweak readme by @zzstoatzz in #1130
other
- add test for 1131 by @zzstoatzz in #1132
New Contributors
Full Changelog: v3.1.0-alpha...v3.1.0-alpha.1
alphabet soup
this alpha release contains experimental MCP support, please comment here if you have thoughts or suggestions for this
changes
- config cli by @zzstoatzz in #1128
- add mcp support to agents by @zzstoatzz in #1129
Full Changelog: v3.0.6...v3.1.0-alpha
gotta respect the prompt
this is a patch release to fix a bug with the generate_schema
functions where a passed prompt
would not be used
Fixes
- fix test and prompt passthrough by @zzstoatzz in #1126
Full Changelog: v3.0.5...v3.0.6
handled promptly
What's Changed
New Features π
- Azure example by @zzstoatzz in #1123
- allow custom handlers and prompts in functions by @zzstoatzz in #1125
Docs π
New Contributors
Full Changelog: v3.0.4...v3.0.5
License to Chill
adds back unintentionally removed apache 2 license
What's Changed
- add back license by @zzstoatzz in #1121
Full Changelog: v3.0.3...v3.0.4
Living life down the stream
this release resolves an upstream breaking change pydantic/pydantic-ai#1248
What's Changed
New Features π
- migrate slackbot from 2.x by @zzstoatzz in #1104
- add note by @zzstoatzz in #1107
- add api ref by @zzstoatzz in #1113
- clean up examples by @zzstoatzz in #1115
Fixes π
- fast temp fix by @zzstoatzz in #1117
Other Changes π¦Ύ
- add
py.typed
by @zzstoatzz in #1112
Full Changelog: v3.0.2...v3.0.3
Give me threads or give me death
What's Changed
New Features π
- update readme by @zzstoatzz in #1074
- update readme by @zzstoatzz in #1075
- oops by @zzstoatzz in #1077
- add example by @zzstoatzz in #1078
- docs and cursor rules by @zzstoatzz in #1079
- Stream responses token-by-token by @jlowin in #1081
- Json cli by @zzstoatzz in #1080
- Add docs by @jlowin in #1082
- Add full support for automatic/manual db migrations by @jlowin in #1083
- Improve guard for missing instruction by @jlowin in #1085
- Add verbosity controls for adding info messages by @jlowin in #1086
- rm breakpoint and minor docs update by @zzstoatzz in #1087
- Add LLM Call tracking by @jlowin in #1089
- Start event tests by @jlowin in #1090
- Add support for user content / images / audio / binary by @jlowin in #1091
- Improve error handling for handlers by @jlowin in #1095
- Add streaming run functions by @jlowin in #1099
- rebase audio example on simpler serialization by @zzstoatzz in #1097
- forgot
classify
readme example by @zzstoatzz in #1101
Fixes π
Breaking Changes π«
Docs π
- add summarize bsky thread example by @zzstoatzz in #1088
Other Changes π¦Ύ
- Serialize bytes to/from base64 when serializing to the DB by @jlowin in #1096
- fix db init by @zzstoatzz in #1105
Full Changelog: v3.0.1...v3.0.2