The classify function turns any input into clear categories. It transforms str → L where L is your set of labels, making it easy to identify:

  • Sentiment (“Great product!” → Positive)
  • Topics (“AI in healthcare” → [Technology, Healthcare])
  • Priority (“URGENT: System down” → Critical)
  • Status (“All tests passing” → Success)

For complex classification needs, consider creating a custom task. The classify function is a convenient wrapper around Marvin’s task system - see Tasks for more details.

Usage

Classify text into predefined categories:

import marvin

sentiment = marvin.classify(
    "This product is amazing!",
    ["positive", "negative", "neutral"]
)
print(sentiment)
"positive"

Parameters

  • data: The input data to classify (any type)
  • labels: Either a sequence of labels or an Enum class
  • multi_label: Whether to return multiple labels (defaults to False)
  • instructions: Optional instructions to guide classification
  • agent: Optional custom agent to use
  • thread: Optional thread for conversation context
  • context: Optional additional context

Async Support

The function is also available in an async version:

import marvin
import asyncio

async def main():
    result = await marvin.classify_async(
        "The weather is sunny and warm",
        ["sunny", "rainy", "cloudy"]
    )
    print(result)  # "sunny"

asyncio.run(main())

Examples

Basic Classification

Use simple string labels to categorize content:

import marvin

priority = marvin.classify(
    "Critical system failure",
    ["low", "medium", "high", "critical"]
)
print(priority)
"critical"

Using Enums

Add type safety with Python enums:

import marvin
from enum import Enum

class Priority(Enum):
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    CRITICAL = "critical"

priority = marvin.classify(
    "Minor UI bug in non-critical component",
    Priority
)
print(priority)
print(priority.value)
Priority.LOW
"low"

Multi-label Classification

Identify multiple applicable categories:

import marvin

genres = marvin.classify(
    "A romantic comedy about AI",
    ["comedy", "romance", "sci-fi", "drama", "action"],
    multi_label=True
)
print(genres)
["comedy", "romance", "sci-fi"]

Custom Instructions

Guide the classification with specific criteria:

import marvin

sentiment = marvin.classify(
    "This product is okay",
    ["positive", "negative"],
    instructions="Classify as positive only if explicitly enthusiastic"
)
print(sentiment)
"negative"