Liquid AI
Liquid AI's LFM2.5-24B-A2B is called on LLMTR through /v1/chat/completions. It is a mixture-of-experts model with 24B total and about 2B active parameters per token, trained for tool calling and multi-step agent tasks.
| Model | Context | Input / Cache read / Output ($/1M) | Input |
|---|---|---|---|
liquid/lfm-2.5-24b-a2b |
128,000 | 0.05 / 0.025 / 0.7 | Text |
No platform margin is added to model prices; the margin applies only when you top up credits.
curl "$LLMTR_BASE_URL/v1/chat/completions" \ -H "Authorization: Bearer llmtr-your_key" \ -H "Content-Type: application/json" \ -d '{ "model": "liquid/lfm-2.5-24b-a2b", "messages": [ { "role": "system", "content": "Answer briefly and clearly." }, { "role": "user", "content": "Find the root cause in this error log and suggest a fix." } ], "max_tokens": 4096 }'from openai import OpenAI
client = OpenAI(base_url="https://llmtr.com/v1", api_key="llmtr-your_key")
response = client.chat.completions.create( model="liquid/lfm-2.5-24b-a2b", messages=[{"role": "user", "content": "Rank these three items by priority and explain why."}], max_tokens=4096,)print(response.choices[0].message.content)print(response.usage)Reasoning
Section titled “Reasoning”The model reasons before every answer and this cannot be turned off. The reasoning trace arrives in message.reasoning_content (delta.reasoning_content when streaming); the answer itself is in content.
- A request that sends
reasoning: falseorreasoning: { "enabled": false }is refused with400. - The reasoning depth cannot be chosen: a request that sends
reasoning_effortis refused with400. - Reasoning tokens are counted in
usage.completion_tokensand billed at the output price.
Output limit
Section titled “Output limit”One response can be at most 8,192 tokens, reasoning included. A larger max_tokens or max_completion_tokens is refused with 400.
Because reasoning is spent from this budget, on a long task the model can reach the limit before it writes the answer, and finish_reason: "length" is returned. Treat that response as incomplete: in a non-streaming call content is not empty but carries the cut-off reasoning text. Split long work into smaller steps and ask for one output per step.
Tool calling
Section titled “Tool calling”The model supports tool/function calling. When the model calls a tool, finish_reason is tool_calls and the call arrives in message.tool_calls.
curl "$LLMTR_BASE_URL/v1/chat/completions" \ -H "Authorization: Bearer llmtr-your_key" \ -H "Content-Type: application/json" \ -d '{ "model": "liquid/lfm-2.5-24b-a2b", "messages": [{ "role": "user", "content": "What is the weather in Istanbul?" }], "tools": [{ "type": "function", "function": { "name": "get_weather", "description": "Returns the current weather for a city", "parameters": { "type": "object", "properties": { "city": { "type": "string" } }, "required": ["city"] } } }], "max_tokens": 2048 }'Return the tool result in a second turn with a role: "tool" message. For the general flow see the tool calling page.
Structured output
Section titled “Structured output”When you pass a json_schema in response_format, the model produces JSON that follows the schema:
{ "model": "liquid/lfm-2.5-24b-a2b", "messages": [{ "role": "user", "content": "Give the capital of France and its population in millions." }], "response_format": { "type": "json_schema", "json_schema": { "name": "city", "strict": true, "schema": { "type": "object", "properties": { "city": { "type": "string" }, "population_millions": { "type": "number" } }, "required": ["city", "population_millions"], "additionalProperties": false } } }, "max_tokens": 2048}Prompt cache
Section titled “Prompt cache”Repeated prompt prefixes are cached automatically; you do not need to mark anything in the request. The number of tokens served from the cache is returned in usage.prompt_tokens_details.cached_tokens, and those tokens are billed at the cache read price. There is no separate charge for writing to the cache. The cache is a discount, not a guarantee: putting the long, fixed part (system message, document, tool definitions) at the start of the prompt raises the chance of a hit.
Streaming
Section titled “Streaming”The model streams for real with stream: true; the last chunk of the stream carries exact usage. See the streaming page for details.
Language support
Section titled “Language support”Turkish is not among the languages Liquid officially supports. For Turkish workflows, check the output against your own examples.
Data use
Section titled “Data use”This model is served through a third-party provider. The text you send may be retained by the provider and used to train Liquid's models. Do not send sensitive, personal or customer data.