{"library":"marvin","title":"Marvin (PrefectHQ)","description":"AI functions and agentic workflow library by PrefectHQ. Provides decorator-based AI functions (marvin.fn, marvin.classify, marvin.extract, marvin.cast) and agent/task orchestration. v3.0 released 2024 — merged with ControlFlow, switched LLM backend from OpenAI-only to Pydantic AI (multi-provider). Current version: 3.2.7 (Mar 2026). WARNING: 'marvin' on PyPI is PrefectHQ's AI library — not the SDSS astronomy Marvin library (sdss-marvin on PyPI).","language":"python","status":"active","last_verified":"Tue May 12","install":{"commands":["pip install marvin"],"cli":{"name":"marvin","version":"Usage: marvin [OPTIONS] COMMAND [ARGS]..."}},"imports":["import marvin\n\nresult = marvin.extract(\n    'i found $30 on the ground and bought 5 bagels for $10',\n    int,\n    instructions='only USD amounts'\n)\nprint(result)  # [30, 10]","import marvin\n\n@marvin.fn\ndef sentiment(text: str) -> float:\n    \"\"\"Returns sentiment score from -1.0 (negative) to 1.0 (positive).\"\"\"\n\nscore = sentiment('I love this product!')\nprint(score)  # ~0.9","import marvin\n\nwith marvin.Thread() as thread:\n    marvin.run('What is quantum computing?')\n    marvin.run('How does that relate to AI?')"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"# pip install marvin\nimport marvin\nimport os\n\n# Set OPENAI_API_KEY env var — marvin uses OpenAI by default\n\n# Structured extraction\nnumbers = marvin.extract(\n    'I paid $45 for lunch and $12 for coffee',\n    int,\n    instructions='USD amounts only'\n)\nprint(numbers)  # [45, 12]\n\n# Classification\ncategory = marvin.classify(\n    'The new iPhone has great camera features',\n    labels=['tech', 'sports', 'politics']\n)\nprint(category)  # 'tech'\n\n# AI function\n@marvin.fn\ndef translate(text: str, language: str) -> str:\n    \"\"\"Translates text to the given language.\"\"\"\n\nprint(translate('Hello world', 'Spanish'))  # 'Hola mundo'","lang":"python","description":"Core marvin 3.x structured output functions.","tag":"draft","tag_description":"notable failures across runtimes","last_tested":"2026-04-23","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]},"compatibility":{"tag":"stale","tag_description":"widespread failures or data too old to trust","last_tested":"2026-05-12","installed_version":null,"pypi_latest":null,"is_stale":null,"summary":{"python_range":"3.10–3.9","success_rate":60,"avg_install_s":null,"avg_import_s":8.07,"wheel_type":null},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"marvin","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":6.23,"mem_mb":77.8,"disk_size":"367M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"marvin","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.13,"mem_mb":84.5,"disk_size":"399M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"marvin","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":9.05,"mem_mb":82.9,"disk_size":"385M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"marvin","exit_code":1,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.55,"mem_mb":85.7,"disk_size":"384M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":8.8,"mem_mb":77.9,"disk_size":"80.5M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"marvin","exit_code":0,"wheel_type":null,"failure_reason":null,"import_side_effects":null,"install_time_s":null,"import_time_s":7.63,"mem_mb":77.9,"disk_size":"80M"}]}}