plano/demos/getting_started/llm_gateway
Adil Hafeez 5a4f8cb321
Standardize demo configs and CLI templates to v0.3.0
- Update all demo config files to version v0.3.0
- Rename llm_providers → model_providers across all configs
- Modernize listener format from object to array style
  (e.g. listeners: [{type: model, name:, port:}])
- Replace chatbot_ui with AnythingLLM in 6 docker-compose files
- Remove prometheus/grafana services from llm_gateway and
  preference_based_routing docker-compose files
- Add tracing: random_sampling: 100 to configs that lacked it
- Update 3 CLI init templates (coding_agent_routing,
  preference_aware_routing, conversational_state_v1_responses)
- Fix test_init.py assertion for model_providers key

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 01:43:59 -08:00
..
config.yaml Clean up dead demos and restructure directory layout 2026-02-15 01:43:31 -08:00
docker-compose.yaml Standardize demo configs and CLI templates to v0.3.0 2026-02-15 01:43:59 -08:00
jaeger_tracing_llm_routing.png Clean up dead demos and restructure directory layout 2026-02-15 01:43:31 -08:00
llm_routing_demo.png Clean up dead demos and restructure directory layout 2026-02-15 01:43:31 -08:00
README.md Clean up dead demos and restructure directory layout 2026-02-15 01:43:31 -08:00
run_demo.sh Clean up dead demos and restructure directory layout 2026-02-15 01:43:31 -08:00

LLM Routing

This demo shows how you can use Plano gateway to manage keys and route to upstream LLM.

Starting the demo

  1. Please make sure the pre-requisites are installed correctly
  2. Start Plano
    sh run_demo.sh
    
  3. Navigate to http://localhost:18080/

Following screen shows an example of interaction with Plano gateway showing dynamic routing. You can select between different LLMs using "override model" option in the chat UI.

LLM Routing Demo

You can also pass in a header to override model when sending prompt. Following example shows how you can use x-arch-llm-provider-hint header to override model selection,


$ curl --header 'Content-Type: application/json' \
  --header 'x-arch-llm-provider-hint: mistral/ministral-3b' \
  --data '{"messages": [{"role": "user","content": "hello"}], "model": "gpt-4o"}' \
  http://localhost:12000/v1/chat/completions 2> /dev/null | jq .
{
  "id": "xxx",
  "object": "chat.completion",
  "created": 1737760394,
  "model": "ministral-3b-latest",
  "choices": [
    {
      "index": 0,
      "messages": {
        "role": "assistant",
        "tool_calls": null,
        "content": "Hello! How can I assist you today? Let's chat about anything you'd like. 😊"
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 4,
    "total_tokens": 25,
    "completion_tokens": 21
  }
}

Observability

Plano gateway publishes stats endpoint at http://localhost:19901/stats. In this demo we are using prometheus to pull stats from Plano and we are using grafana to visualize the stats in dashboard. To see grafana dashboard follow instructions below,

  1. Navigate to http://localhost:3000/ to open grafana UI (use admin/grafana as credentials)
  2. From grafana left nav click on dashboards and select "Intelligent Gateway Overview" to view Plano gateway stats
  3. For tracing you can head over to http://localhost:16686/ to view recent traces.

Following is a screenshot of tracing UI showing call received by Plano gateway and making upstream call to LLM,

Jaeger Tracing