Multi-Label Text Classifier
Let's build a multi-label text classifier that tags a piece of text with any subset of a fixed label set. We'll tag restaurant reviews by the aspects the reviewer commented on: food, service, value, atmosphere, cleanliness.
| Task | Multi-label classification |
| Input | Text |
| Output | List of tags from a fixed set |
| Label set | food, service, value, atmosphere, cleanliness |
| Model | Gemini 3.5 Flash |
| Schema | Pydantic with Literal[...] constraint |
"""
Text Multilabel Classification - Basic
======================================
Assign any subset of a fixed tag set to a piece of text. Multiple tags may
apply to the same input.
This example tags restaurant reviews by which aspects the reviewer commented
on.
"""
from typing import List, Literal
from agno.agent import Agent, RunOutput
from agno.models.google import Gemini
from pydantic import BaseModel, Field
from rich.pretty import pprint
Aspect = Literal["food", "service", "value", "atmosphere", "cleanliness"]
class Tagging(BaseModel):
tags: List[Aspect] = Field(
..., description="All aspects the reviewer commented on; empty if none"
)
instructions = """\
Tag the review with every aspect the reviewer commented on. Include an
aspect only when the text actually addresses it. An aspect can be mentioned
positively or negatively - both count.
"""
agent = Agent(
model=Gemini(id="gemini-3.5-flash"),
instructions=instructions,
output_schema=Tagging,
)
if __name__ == "__main__":
samples = [
"Pasta was excellent and our server was attentive. A bit pricey but worth it.",
"Place was filthy. Floors sticky, bathroom unusable.",
"Came for the vibes, stayed for the cocktails. The space is gorgeous.",
]
for text in samples:
run: RunOutput = agent.run(text)
pprint({"input": text, "result": run.content})