tool-calling

SkillAI & models

Use when defining functions/tools for an LLM to call through liter-llm, or requesting structured JSON outputs. Covers tool schemas, tool_calls handling, and response formats.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the tool-calling skill

What this skill tells your AI

The instructions your AI receives, as published by xberg-io/liter-llm in plugin/skills/tool-calling/SKILL.md and read by ahel’s review.

Tool Calling

Pass a tools array of function definitions; the model may respond with tool_calls instead of (or alongside) text. Execute the named function and feed the result back as a tool message.

Python

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

payload = {
    "model": "openai/gpt-4o",
    "messages": [{"role": "user", "content": "What is the weather in Berlin?"}],
    "tools": [
        {
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get the current weather for a location",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "location": {"type": "string", "description": "City name"},
                    },
                    "required": ["location"],
                },
            },
        }
    ],
    "tool_choice": "auto",
}

async def main() -> None:
    client = create_client(api_key=os.environ["OPENAI_API_KEY"])
    request = ChatCompletionRequest.from_json(json.dumps(payload))
    response = await client.chat(request)
    for call in response.choices[0].message.tool_calls or []:
        print(call.function.name, call.function.arguments)  # arguments is a JSON string

asyncio.run(main())

Structured outputs

Request strict JSON with response_format:

request = ChatCompletionRequest.from_json(json.dumps({
    "model": "openai/gpt-4o",
    "messages": [{"role": "user", "content": "Extract name and age as JSON."}],
    "response_format": {"type": "json_object"},
}))
response = await client.chat(request)

Notes

  • function.arguments is a JSON string — parse it before use.
  • Append each tool result as a message with role="tool" and the matching tool_call_id, then call chat again to let the model continue.
  • Tool support and JSON-mode availability vary by provider; check the provider reference if a model ignores tools.

Signals

GitHub stars
252
Forks
21
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
tool-calling
Source
github.com/xberg-io/liter-llm