Skip to main content

A modular and extensible Python library for building AI agents.

Project description

Vantage

Vantage Logo

A lightweight, protocol-first Python library for building AI agents.

CI PyPI version Python Version License: MIT Code Style: Ruff

Vantage is a modular Python library for building AI agents. It follows SOLID principles and defines every component — LLMs, tools, and memory — as an abstract interface, making each one independently replaceable without changing agent logic.

Features

  • Simple YAML configuration: Define agents, models, and tools in a flat, human-readable YAML file. No boilerplate.
  • Swappable components: Implement LLMBase, ToolBase, or MemoryBase to replace any layer transparently.
  • Multi-agent flows: Route requests between specialised agents with HandoverTool.
  • Sync and async: Full async support with token streaming alongside the synchronous API.
  • Execution tracing: Export a PNG diagram of every step in an agent's execution via save_trace_png.
  • Structured output: Request JSON-schema-validated responses with a one-line field shorthand.

Installation

pip install vantage-agents

Quick Start

Python API

from vantage.core import Agent
from vantage.llms import OpenAIModel
from vantage.memory import LocalMemory
from vantage.tools import Calculator

agent = Agent(
    llm=OpenAIModel(model="gpt-4o-mini"),
    tools=[Calculator()],
    memory=LocalMemory(),
    system_prompt="You are a math assistant.",
)

response = agent.run("What is (12 + 8) / 5?")
print(response.content)

YAML configuration

Define agents in a YAML file — the model key sets both the provider and the model in one line:

agents:
  calc_bot:
    model: groq/llama-3.3-70b-versatile
    system_prompt: "You are a math assistant. Use the calculator tool for arithmetic."
    tools: [calculator]
    response_schema:
      result: number
      explanation: string
from vantage import run_yaml_agent
from vantage.tools import Calculator

resp = run_yaml_agent("agents.yaml", "calc_bot", "What is 15 * 12?", tools=[Calculator()])
print(resp.content)

response_schema accepts a flat {field: type} shorthand that is automatically expanded to a full JSON Schema. Supported types: string, number, integer, boolean, array, object.

Async and streaming

import asyncio
from vantage.core import AsyncAgent
from vantage.llms import AsyncOpenAIModel

agent = AsyncAgent(
    llm=AsyncOpenAIModel(model="gpt-4o-mini"),
    system_prompt="You are helpful.",
)

async def main() -> None:
    async for token in agent.stream("Explain gradient descent briefly."):
        print(token, end="", flush=True)

asyncio.run(main())

Architecture

graph TD
    A[Agent / AsyncAgent] --> B[LLMBase]
    A --> C[MemoryBase]
    A --> D[ToolBase]
    B --> B1[OpenAIModel / AsyncOpenAIModel]
    B --> B2[GroqModel / AsyncGroqModel]
    C --> C1[LocalMemory]
    D --> D1[Calculator]
    D --> D2[HandoverTool]
    D --> D3[Custom Tools]

Every arrow in the diagram is an interface boundary — swap any node without touching the others.

Extending Vantage

Custom tool

from vantage.core import ToolBase

class WeatherTool(ToolBase):
    @property
    def name(self) -> str:
        return "get_weather"

    @property
    def description(self) -> str:
        return "Return the current weather for a city."

    def input_schema(self):
        return {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
            "additionalProperties": False,
        }

    def execute(self, **kwargs) -> str:
        city = kwargs["city"]
        return f"Sunny, 22 C in {city}"   # replace with a real API call

Custom LLM backend

from vantage.core import LLMBase
from vantage.core.models import Message, Role

class MyLLM(LLMBase):
    def generate(self, messages, tools, response_schema=None) -> Message:
        # call your backend here
        return Message(role=Role.ASSISTANT, content="...")

Multi-agent flows

from vantage import run_yaml_agent, Calculator
from vantage.core.handovers import HandoverTool

tools = [
    Calculator(),
    HandoverTool("math_expert", "Transfer to the math expert."),
    HandoverTool("word_expert", "Transfer to the word expert."),
]

resp = run_yaml_agent("agents.yaml", "gatekeeper", "What is 6 * 7?", tools=tools)
print(resp.content)

Execution tracing

Every AgentResponse carries a trace list. Render it as a PNG:

from vantage import save_trace_png

save_trace_png(resp.trace, "trace.png")

The diagram shows every step — user input, LLM reasoning, tool calls, tool results, and the final answer — with the actual content of each step.

Running the examples

git clone https://github.com/saqlain2204/vantage.git
cd vantage
pip install -e ".[dev]"
cp .env.example .env          # add your API keys

python -m examples.calculator_agent.run
python -m examples.custom_tool_agent.run
python -m examples.multi_agent_flow.run

Contributing

Contributions are welcome. See CONTRIBUTING.md for the development setup, coding conventions, and how to submit a pull request.

Changelog

See CHANGELOG.md for the version history.

License

Vantage is released under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vantage_agents-0.1.1.tar.gz (372.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vantage_agents-0.1.1-py3-none-any.whl (28.1 kB view details)

Uploaded Python 3

File details

Details for the file vantage_agents-0.1.1.tar.gz.

File metadata

  • Download URL: vantage_agents-0.1.1.tar.gz
  • Upload date:
  • Size: 372.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for vantage_agents-0.1.1.tar.gz
Algorithm Hash digest
SHA256 fa5d2ebd52a885463de2e2480660b8b7bd9bbe78d851e789899487921ca600e1
MD5 67f8e385768bb78a04e7f9295c924054
BLAKE2b-256 f54f951d22ec8f1a562d1d9db02da5f4ef1bf54284ecac5e435ebbcf7e83d047

See more details on using hashes here.

File details

Details for the file vantage_agents-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: vantage_agents-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 28.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.7

File hashes

Hashes for vantage_agents-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 23dfc2341c7d6e142ca8fbfef308691bad8c530c9ad061c09f2f6bd394a7c390
MD5 154aaf1ae94c78c6f27e6f1791916c7c
BLAKE2b-256 f18f5b7926968a1d5e2619d6515e7e37c918c5e308de691a5b53cd9ecc040efb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page