logo
Kurashizu Blogwhere ideas flow
  • Home
  • News
  • Blog
  • About
  • Home
  • News
  • Blog
  • About

© 2026 Kurashizu. All rights reserved.

Admin·New Post·Service Status
Powered by Cloudflare·01.11.26
← Back to news

LFM2.5 2.6B model competitive with 4x larger models

Original article
huggingface.co|139 points|36 comments|by nateb2022|Aug 4, 2026

LFM2.5-2.6B: A Compact Powerhouse from LiquidAI

LiquidAI has introduced the LFM2.5-2.6B, a model designed to challenge the status quo of LLM scaling. Despite its modest size, this model is engineered to be highly competitive with architectures that are roughly 4x larger, proving that efficiency can rival raw parameter count.

Liquid AI


🛠️ Technical Specifications

The model is hosted on Hugging Face and utilizes the transformers library with safetensor weights for optimized loading.

Model Metadata

AttributeValue
Model IDLiquidAI/LFM2.5-2.6B
Pipeline Tagtext-generation
Creation Date2026-07-28
Last Updated2026-08-07
Total Downloads93,668
Community Likes535

Token Configuration

The model employs specific tokens to manage conversation boundaries and padding:

  • End of Sentence (EOS): |im_end|>
  • Padding Token: |pad|>
  • Default System Prompt: Enabled →\rightarrow→ false

🧠 Chat Template & Logic

The LFM2.5-2.6B uses a sophisticated Jinja2 chat template to handle complex interactions, including multi-modal inputs and tool integration.

Template Workflow

The following diagram illustrates how the template processes a conversation:

Implementation Details

The template is designed to preserve "thinking" blocks and handle tool arguments as mappings. Below is the raw logic used for generation:

{{- bos_token -}}
{%- set preserve_thinking = preserve_thinking | default(false) -%}

{%- macro format_arg_value(arg_value) -%}
 {%- if arg_value is string -%}
 {{- ' ' + (arg_value | replace('\\', '\\\\') | replace('\'', '\\\'') | replace('\n', '\\n') | replace('\r', '\\r')) + ' ' -}}
 {%- elif arg_value is mapping or arg_value is iterable -%}
 {{- arg_value | tojson -}}
 {%- else -%}
 {{- arg_value | string -}}
 {%- endif -%}
{%- endmacro -%}

{%- macro parse_content(content) -%}
 {%- if content is string -%}
 {{- content -}}
 {%- elif content is mapping -%}
 {{- content | tojson -}}
 {%- elif content is iterable -%}
 {%- set _ns = namespace(result= ) -%}
 {%- for item in content -%}
 {%- if item is string -%}
 {%- set _ns.result = _ns.result + item -%}
 {%- elif item is mapping and item.get('type') == 'image' -%}
 {%- set _ns.result = _ns.result + <image> -%}
 {%- elif item is mapping and item.get('type') == 'text' -%}
 {%- set _ns.result = _ns.result + ((item.get('text') or ' ') | string) -%}
 {%- else -%}
 {%- set _ns.result = _ns.result + (item | tojson) -%}
 {%- endif -%}
 {%- endfor -%}
 {{- _ns.result -}}
 {%- endif -%}
{%- endmacro -%}

{%- macro render_tool_calls(tool_calls) -%}
 {%- set tool_calls_ns = namespace(tool_calls=[]) -%}
 {%- for tool_call in tool_calls -%}
 {%- set func = tool_call['function'] if 'function' in tool_call else tool_call -%}
 {%- set func_name = func['name'] -%}
 {%- set func_args = func.get('arguments') -%}
 {%- set args_ns = namespace(arg_strings=[]) -%}
 {%- if func_args is mapping -%}
 {%- for arg_name, arg_value in func_args.items() -%}
 {%- set args_ns.arg_strings = args_ns.arg_strings + [arg_name + ' = ' + format_arg_value(arg_value)] -%}
 {%- endfor -%}
 {%- elif func_args is string and (func_args | trim) not in [' ', '{}', 'null'] -%}
 {{- raise_exception('Tool call arguments must be a mapping, got a JSON-encoded string: parse arguments with json.loads() before applying the chat template') -}}
 {%- endif -%}
 {%- set tool_calls_ns.tool_calls = tool_calls_ns.tool_calls + [func_name + '(' + (args_ns.arg_strings | join(', ')) + ')' ] -%}
 {%- endfor -%}
 {{- ' |tool_call_start|>[' + (tool_calls_ns.tool_calls | join(', ')) + '] |tool_call_end|>' -}}
{%- endmacro -%}

{%- set ns = namespace(system_prompt= , last_user_index=-1) -%}
{%- if messages and messages[0]['role'] == 'system' -%}
 {%- if messages[0].get('content') -%}
 {%- set ns.system_prompt = parse_content(messages[0]['content']) -%}
 {%- endif -%}
 {%- set messages = messages[1:] -%}
{%- endif -%}
{%- if tools -%}
 {%- set ns.system_prompt = ns.system_prompt + ('\n' if ns.system_prompt else ' ') + 'List of tools: [' -%}
 {%- for tool in tools -%}
 {%- if tool is not string -%}
 {%- set tool = tool | tojson -%}
 {%- endif -%}
 {%- set ns.system_prompt = ns.system_prompt + tool -%}
 {%- if not loop.last -%}
 {%- set ns.system_prompt = ns.system_prompt + ', ' -%}
 {%- endif -%}
 {%- endfor -%}
 {%- set ns.system_prompt = ns.system_prompt + ']' -%}
{%- endif -%}
{%- if ns.system_prompt -%}
 {{- ' |im_start|>system\n' + ns.system_prompt + ' |im_end|>\n' -}}
{%- endif -%}
{%- for message in messages -%}
 {%- if message['role'] == 'user' -%}
 {%- set ns.last_user_index = loop.index0 -%}
 {%- endif -%}
{%- endfor -%}
{%- for message in messages -%}
 {{- ' |im_start|>' + message.role + '\n' -}}
 {%- if message.role == 'assistant' -%}
 {%- generation -%}
 {%- set keep_thinking = preserve_thinking or loop.index0 > ns.last_user_index -%}
 {%- set thinking = message.thinking or message.reasoning or message.reasoning_content -%}
 {%- set thinking = thinking if thinking is string else ' ' -%}
 {%- if thinking and keep_thinking -%}
 {{- ' <think>' + thinking + '</think>' -}}
 {%- endif -%}
 {%- set _cfm_tag = 'CONTINUE_FINAL_MESSAGE_TAG' -%}
 {%- set _has_cfm = false -%}
 {%- set content = ' ' -%}
 {%- if message.get('content') -%}
 {%- set content = parse_content(message.content) -%}
 {%- endif -%}
 {%- if not keep_thinking and '</think>' in content -%}
 {%- set content = content.split('</think>')[-1] | trim -%}
 {%- endif -%}
 {%- if content.endswith(_cfm_tag) -%}
 {%- set _has_cfm = true -%}
 {%- set _trunc_len = (content | length) - (_cfm_tag | length) -%}
 {%- set content = content[:_trunc_len] -%}
 {%- endif -%}
 {{- content -}}
 {%- if message.tool_calls -%}
 {{- render_tool_calls(message.tool_calls) -}}
 {%- endif -%}
 {%- if _has_cfm -%}
 {{- _cfm_tag -}}
 {%- endif -%}
 {{- ' |im_end|>\n' -}}
 {%- endgeneration -%}
 {%- else %}\n {%- if message.get('content') -%}
 {{- parse_content(message['content']) -}}
 {%- endif -%}
 {{- ' |im_end|>\n' -}}
 {%- endif %}\n{%- endfor -%}
{%- if add_generation_prompt -%}
 {{- ' |im_start|>assistant\n <think>' -}}
{%- endif -%}

📈 Performance & Evaluation

The model has been rigorously tested against industry benchmarks to validate its efficiency.

Benchmark Result: On the ifstruct-v1.0 dataset (Task ID: ifstruct_v1), the LFM2.5-2.6B achieved a score of: Score=85.49\text{Score} = 85.49Score=85.49

This result is sourced from the official Liquid AI Blog.


🚀 Getting Started

To utilize this model, ensure you have the following requirements met:

  • transformers library installed
  • safetensors support
  • Access to a GPU for optimal inference
  • Review the Colab implementation

Quick Links & Resources

Below are the visual assets and notebooks associated with the project:

Try it in Google Colab: Colab link