DEV Community

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:

  1. It's not on PyPI yet. As of today, pip install nooa returns No 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-Agents
    
  2. No 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

Read on DEV Community ↗ ← Back to News

Comments

No comments yet. Start the discussion.