tool-calling
SkillAI & modelsUse 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.
No other account needed.
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.argumentsis a JSON string — parse it before use.- Append each tool result as a message with
role="tool"and the matchingtool_call_id, then callchatagain 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