NVIDIA's NOOA turns an AI agent into one Python class
NVIDIA Labs open-sourced NOOA (NVIDIA Object-Oriented Agents) this week, and the pitch is unusually simple: an agent is a Python class. Not a graph, not a chain, not a YAML pipeline. A class. I cloned it and got it running the same day. Here's what it actually looks like, what broke, and why I think the core idea matters more than the framework itself.
The whole idea in one code block
from nooa import Agent
class InventoryAgent(Agent, llm=llm):
"""You are an agent that checks inventory using deterministic helper methods."""
# Plain Python - automatically available as a tool for the LLM
def get_stock(self, item: str) -> int:
"""Get current stock for an item."""
return self.inventory.get(item, {}).get("stock", 0)
# `...` body - the LLM implements this at runtime, calling the methods above
async def can_fulfill_order(self, items: list[str], budget: float) -> Result:
"""Check if order can be fulfilled within budget."""
...
That's from the repo's quickstart, lightly trimmed. The mapping is:
- Fields are agent state
- Methods with real bodies are deterministic tools
- Methods with
...bodies are implemented by an LLM loop at runtime - Docstrings are the prompts
- Type annotations are contracts the runtime enforces, with auto-retry on mismatch
No separate tool-schema JSON. No registration step. The model acts by writing Python in a REPL with access to self, so your method signatures are the tool definitions.
Two install gotchas before you try it
The README says pip install nooa. Two things I hit on a clean machine:
It's not on PyPI yet. As of today,
pip install nooareturnsNo matching distribution found. Install from source instead:git clone https://github.com/NVIDIA-NeMo/labs-OO-Agents.git uv venv --python 3.13 && uv pip install ./labs-OO-AgentsNo Python 3.14 support. The package pins
>=3.12,<3.14. My default interpreter is 3.14, and the install fails with a version error. Use 3.12 or 3.13.
After that, everything imported cleanly and defining an Agent subclass with a generation method worked first try (version installed: `0.0
Comments
No comments yet. Start the discussion.