Run plano natively by default (#744)

This commit is contained in:
Adil Hafeez 2026-03-05 07:35:25 -08:00 committed by GitHub
parent 198c912202
commit f63d5de02c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
56 changed files with 1557 additions and 256 deletions

View file

@ -54,6 +54,6 @@ endpoints:
# value could be ip address or a hostname with port
# this could also be a list of endpoints for load balancing
# for example endpoint: [ ip1:port, ip2:port ]
endpoint: host.docker.internal:18083
endpoint: localhost:18083
# max time to wait for a connection to be established
connect_timeout: 0.005s

View file

@ -32,7 +32,7 @@ Basic Configuration
access_key: $ANTHROPIC_API_KEY
- model: ollama/llama3.1
base_url: http://host.docker.internal:11434
base_url: http://localhost:11434
# Define aliases that map to the models above
model_aliases:

View file

@ -598,9 +598,9 @@ Ollama
- model: ollama/llama3.1
base_url: http://localhost:11434
# Ollama in Docker (from host)
# Ollama running locally
- model: ollama/codellama
base_url: http://host.docker.internal:11434
base_url: http://localhost:11434
OpenAI-Compatible Providers

View file

@ -17,11 +17,17 @@ Follow this guide to learn how to quickly set up Plano and integrate it into you
Prerequisites
-------------
Before you begin, ensure you have the following:
Plano runs **natively** by default — no Docker or Rust toolchain required. Pre-compiled binaries are downloaded automatically on first run.
1. `Python <https://www.python.org/downloads/>`_ (v3.10+)
2. Supported platforms: Linux (x86_64, aarch64), macOS (Apple Silicon)
**Docker mode** (optional):
If you prefer to run inside Docker, add ``--docker`` to ``planoai up`` / ``planoai down``. This requires:
1. `Docker System <https://docs.docker.com/get-started/get-docker/>`_ (v24)
2. `Docker Compose <https://docs.docker.com/compose/install/>`_ (v2.29)
3. `Python <https://www.python.org/downloads/>`_ (v3.10+)
Plano's CLI allows you to manage and interact with the Plano efficiently. To install the CLI, simply run the following command:
@ -84,17 +90,20 @@ Step 2. Start plano
Once the config file is created, ensure that you have environment variables set up for ``ANTHROPIC_API_KEY`` and ``OPENAI_API_KEY`` (or these are defined in a ``.env`` file).
Start Plano:
.. code-block:: console
$ planoai up plano_config.yaml
# Or if installed with uv tool: uvx planoai up plano_config.yaml
2024-12-05 11:24:51,288 - planoai.main - INFO - Starting plano cli version: 0.4.9
2024-12-05 11:24:51,825 - planoai.utils - INFO - Schema validation successful!
2024-12-05 11:24:51,825 - planoai.main - INFO - Starting plano
...
2024-12-05 11:25:16,131 - planoai.core - INFO - Container is healthy!
On the first run, Plano automatically downloads Envoy, WASM plugins, and brightstaff and caches them at ``~/.plano/``.
To stop Plano, run ``planoai down``.
**Docker mode** (optional):
.. code-block:: console
$ planoai up plano_config.yaml --docker
$ planoai down --docker
Step 3: Interact with LLM
~~~~~~~~~~~~~~~~~~~~~~~~~
@ -185,9 +194,9 @@ Here is a minimal configuration that wires Plano-Orchestrator to two HTTP servic
agents:
- id: flight_agent
url: http://host.docker.internal:10520 # your flights service
url: http://localhost:10520 # your flights service
- id: hotel_agent
url: http://host.docker.internal:10530 # your hotels service
url: http://localhost:10530 # your hotels service
model_providers:
- model: openai/gpt-4o

View file

@ -59,7 +59,7 @@ are some sample configuration files for both, respectively.
scheme: http
static_configs:
- targets:
- host.docker.internal:19901
- localhost:19901
params:
format: ["prometheus"]

View file

@ -3,7 +3,47 @@
Deployment
==========
This guide shows how to deploy Plano directly using Docker without the ``plano`` CLI, including basic runtime checks for routing and health monitoring.
Plano can be deployed in two ways: **natively** on the host (default) or inside a **Docker container**.
Native Deployment (Default)
---------------------------
Plano runs natively by default. Pre-compiled binaries (Envoy, WASM plugins, brightstaff) are automatically downloaded on the first run and cached at ``~/.plano/``.
Supported platforms: Linux (x86_64, aarch64), macOS (Apple Silicon).
Start Plano
~~~~~~~~~~~~
.. code-block:: bash
planoai up plano_config.yaml
Options:
- ``--foreground`` — stay attached and stream logs (Ctrl+C to stop)
- ``--with-tracing`` — start a local OTLP trace collector
Runtime files (rendered configs, logs, PID file) are stored in ``~/.plano/run/``.
Stop Plano
~~~~~~~~~~
.. code-block:: bash
planoai down
Build from Source (Developer)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you want to build from source instead of using pre-compiled binaries, you need:
- `Rust <https://rustup.rs>`_ with the ``wasm32-wasip1`` target
- OpenSSL dev headers (``libssl-dev`` on Debian/Ubuntu, ``openssl`` on macOS)
.. code-block:: bash
planoai build --native
Docker Deployment
-----------------
@ -53,6 +93,13 @@ Check container health and logs:
docker compose ps
docker compose logs -f plano
You can also use the CLI with Docker mode:
.. code-block:: bash
planoai up plano_config.yaml --docker
planoai down --docker
Runtime Tests
-------------

View file

@ -2,9 +2,9 @@ version: v0.3.0
agents:
- id: weather_agent
url: http://host.docker.internal:10510
url: http://localhost:10510
- id: flight_agent
url: http://host.docker.internal:10520
url: http://localhost:10520
model_providers:
- model: openai/gpt-4o

View file

@ -2,16 +2,16 @@ version: v0.3.0
agents:
- id: rag_agent
url: http://host.docker.internal:10505
url: http://localhost:10505
filters:
- id: query_rewriter
url: http://host.docker.internal:10501
url: http://localhost:10501
# type: mcp # default is mcp
# transport: streamable-http # default is streamable-http
# tool: query_rewriter # default name is the filter id
- id: context_builder
url: http://host.docker.internal:10502
url: http://localhost:10502
model_providers:
- model: openai/gpt-4o-mini

View file

@ -4,15 +4,15 @@ version: v0.3.0
# External HTTP agents - API type is controlled by request path (/v1/responses, /v1/messages, /v1/chat/completions)
agents:
- id: weather_agent # Example agent for weather
url: http://host.docker.internal:10510
url: http://localhost:10510
- id: flight_agent # Example agent for flights
url: http://host.docker.internal:10520
url: http://localhost:10520
# MCP filters applied to requests/responses (e.g., input validation, query rewriting)
filters:
- id: input_guards # Example filter for input validation
url: http://host.docker.internal:10500
url: http://localhost:10500
# type: mcp (default)
# transport: streamable-http (default)
# tool: input_guards (default - same as filter id)

View file

@ -1,31 +1,31 @@
agents:
- id: weather_agent
url: http://host.docker.internal:10510
url: http://localhost:10510
- id: flight_agent
url: http://host.docker.internal:10520
url: http://localhost:10520
endpoints:
app_server:
connect_timeout: 0.005s
endpoint: 127.0.0.1
port: 80
flight_agent:
endpoint: host.docker.internal
endpoint: localhost
port: 10520
protocol: http
input_guards:
endpoint: host.docker.internal
endpoint: localhost
port: 10500
protocol: http
mistral_local:
endpoint: 127.0.0.1
port: 8001
weather_agent:
endpoint: host.docker.internal
endpoint: localhost
port: 10510
protocol: http
filters:
- id: input_guards
url: http://host.docker.internal:10500
url: http://localhost:10500
listeners:
- address: 0.0.0.0
agents:
@ -130,6 +130,6 @@ prompt_targets:
required: true
type: int
tracing:
opentracing_grpc_endpoint: http://host.docker.internal:4317
opentracing_grpc_endpoint: http://localhost:4317
random_sampling: 100
version: v0.3.0