Skip to content
Back to skills

Calling Llms

ASecurity

Use when sending chat completions through liter-llm and routing to a specific provider via the `provider/model` prefix. Covers the chat call shape, provider routing, model_hint, message roles, and error categories.

  • 260 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
developmentpythonrustgoapibackend

Works with

  • cli
  • api

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add xberg-io/liter-llm --skill calling-llms --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Calling Llms?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Calling Llms
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/xberg-io-calling-llms/badge)](https://www.skillsdirectory.com/skills/xberg-io-calling-llms)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: calling-llms
description: Use when sending chat completions through liter-llm and routing to a specific provider via the `provider/model` prefix. Covers the chat call shape, provider routing, model_hint, message roles, and error categories.
---

# Calling LLMs

Build a `ChatCompletionRequest` and send it with `client.chat(request)`. Create
the client with `create_client(...)`. The model string is `provider/model`; the
prefix selects the backend.

```python
import asyncio, json, os
from liter_llm import create_client
from liter_llm._internal_bindings import ChatCompletionRequest

async def main() -> None:
    client = create_client(api_key=os.environ["OPENAI_API_KEY"])
    request = ChatCompletionRequest.from_json(json.dumps({
        "model": "openai/gpt-4o",
        "messages": [
            {"role": "system", "content": "You are concise."},
            {"role": "user", "content": "Name three Rust crates for HTTP."},
        ],
    }))
    response = await client.chat(request)
    print(response.choices[0].message.content)

asyncio.run(main())
```

## Provider routing

The model string's prefix selects the provider; build a request per backend:

```python
ChatCompletionRequest.from_json('{"model":"anthropic/claude-sonnet-4-20250514","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"google/gemini-2.0-flash","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"groq/llama3-70b","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"mistral/mistral-large-latest","messages":[...]}')
ChatCompletionRequest.from_json('{"model":"bedrock/anthropic.claude-v2","messages":[...]}')
```

Set `model_hint` at construction to drop the prefix on every call:

```python
client = create_client(api_key="sk-...", model_hint="openai")
# the request model can now omit the provider prefix:
request = ChatCompletionRequest.from_json('{"model":"gpt-4o","messages":[...]}')
await client.chat(request)  # routes to OpenAI
```

## Notes

- Keys come from env vars (`OPENAI_API_KEY`, `ANTHROPIC_API_KEY`, …); never
  hardcode them.
- Without a prefix and without `model_hint`, routing fails.
- Python errors are typed exceptions exported from `liter_llm`:
  `AuthenticationError`, `RateLimitedError`, `BadRequestError`,
  `ContextWindowExceededError`, `ContentPolicyError`, `NotFoundError`,
  `ServerError`, `ServiceUnavailableError`, `LiterLlmTimeoutError`,
  `BudgetExceededError` — all subclasses of `LiterLlmError`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.