Skip to content
Betav0.62.0

Move from LiteLLM

This guide is for teams that run a LiteLLM proxy between their apps or AI coding tools and the model providers, and want SpanDock in its place. You can do it yourself with the importer, or ask us to do it with you.

Update SpanDock to version 0.62 or later first: the importer, key and team limits, rate limits, aliases, retries and backups, and translation between API formats arrived in 0.59 to 0.62.

Before you start: rotate the keys LiteLLM held

LiteLLM 1.107.0 was compromised on 21 October 2026: for about two hours its PyPI package and container images ran a credential stealer. If any machine installed LiteLLM that day without a pinned version, treat it and every key it could read as exposed. Either way, moving is a good moment to rotate every provider key LiteLLM held, and to enter only the new keys in SpanDock. The importer never carries keys across.

The phases

  1. Assess. List what LiteLLM does for you today: its config.yaml, its keys, teams and users, and the apps and tools that call it.

  2. Deploy beside it. Install a SpanDock Server (getting started, deploy in the cloud) without touching LiteLLM. Add the provider keys under Settings → AI models.

  3. Map with the importer. On the server, open Settings → Import from another gateway and work through its four steps:

    • paste config.yaml and, if you use them, the JSON from LiteLLM's /key/list, /team/list and /user/list;
    • review every item: what it becomes in SpanDock, or why it doesn't;
    • choose Apply: nothing changes before it;
    • then create the planned service keys (each new key is shown once);
    • optionally, bring LiteLLM's spend logs (/spend/logs/v2 as JSON, or a CSV of LiteLLM_SpendLogs) as imported records, so dashboards show one history. They count toward budgets only if you choose so, and prompts in the logs are never read (spandock import litellm-spend FILE on the command line).

    The command line does the same planning: spandock import litellm config.yaml -out settings.json -report report.md.

  4. Run both in parallel. Point one team, or one app, at SpanDock, and compare cost and errors with LiteLLM for a few days.

  5. Cut over team by team. Move each team's tools and apps (below), and watch Activity and Model routing → Budgets.

  6. Decommission. When nothing calls LiteLLM any more, turn it off, and revoke its keys at the providers.

What maps to what

LiteLLMSpanDock
model_list with a model_nameA routing rule: the name is an alias callers can ask for, and the models lists show it
Several deployments of one model_nameThe rule's target and backups (spreading load across them isn't in SpanDock yet)
num_retries, timeout, allowed_fails, cooldown_timeRetries, timeouts and cooldowns (Model routing → Rules)
fallbacks, context_window_fallbacks, content_policy_fallbacksA rule's backups; "Takes longer prompts" for context-window fallbacks
model_info costsPrice overrides
Users, with budgetsPeople (by email), with budgets per day, week or month
Teams, with budgetsAccess groups with a team budget
Virtual keysService keys, with their models, budget, requests and tokens a minute and calls at once (new keys: LiteLLM's can't be moved)
rpm, tpm, max_parallel_requestsRate limits per person, team, key and model
Claude Code on GPT or Gemini through LiteLLMA rule with Allow translation to another API
success_callback: Datadog, LangfuseDestinations (enter their keys again)
Caching, guardrail vendors, Slack alertsNot in SpanDock yet; the importer's report lists each one

Cutting over each tool

  • Apps on the OpenAI SDK. Change the base URL to your server's public endpoint, https://<server>/llm/openai/v1, and the API key to the app's new service key.
  • Apps on the Anthropic SDK. Use the base URL https://<server>/llm/anthropic with the service key.
  • Claude Code, Codex and other tools on people's computers. Pair the computers with SpanDock (pairing) and turn the model proxy on for them: SpanDock points the tools at it, and keys stay on the server.
  • CI and cloud agents. Use service keys through the public endpoint.

Model names your apps use keep working where the importer made an alias for them.

Risks, and going back

  • Spend may rise if you relied on LiteLLM's response cache: SpanDock doesn't cache answers yet.
  • Load balancing across deployments isn't in SpanDock yet: the first deployment of a name serves it and the others are its backups.
  • Going back is changing a base URL and key back: during the parallel run LiteLLM keeps working unchanged.

A SpanDock-assisted migration

If you'd rather not do it alone, we can do it with you: assess your LiteLLM setup, run the importer, plan the cutover team by team, and stay with you through the parallel run. Write to support@spandock.com; scope and price are agreed per team.

Cookie categories

Details: Cookie Policy.