Last active
July 22, 2026 00:45
-
-
Save chuyqa/49c4d4f85b399e66de4a7e838cbf8504 to your computer and use it in GitHub Desktop.
inkling chat templat jinja With Fixed developer role mapping for Hermes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {%- set effort_map = {"none": 0.0, "minimal": 0.1, "low": 0.2, "medium": 0.7, "high": 0.9, "max": 0.99} -%} | |
| {%- set role_token = {"user": "<|message_user|>", "assistant": "<|message_model|>", "system": "<|message_system|>", "developer": "<|message_system|>","tool": "<|message_tool|>"} -%} | |
| {%- macro emit_thinking_effort() -%} | |
| {%- set eff = reasoning_effort if reasoning_effort is defined and reasoning_effort is not none else 0.9 -%} | |
| {%- if eff is string -%} | |
| {%- set key = eff | trim -%} | |
| {%- if key not in effort_map -%} | |
| {{- raise_exception("Unknown reasoning_effort: " ~ eff) -}} | |
| {%- endif -%} | |
| {%- set num = effort_map[key] -%} | |
| {%- else -%} | |
| {%- set num = eff | float -%} | |
| {%- endif -%} | |
| {%- if num < 0.0 or num > 0.99 -%} | |
| {{- raise_exception("reasoning_effort must be in [0.0, 0.99]") -}} | |
| {%- endif -%} | |
| {{- "<|message_system|><|content_text|>Thinking effort level: " -}} | |
| {%- if num == 0.0 -%}0{%- else -%}{{ num }}{%- endif -%} | |
| {{- "<|end_message|>" -}} | |
| {%- endmacro -%} | |
| {%- if tools -%} | |
| {%- set tool_state = namespace(specs=[]) -%} | |
| {%- for tool in tools -%} | |
| {%- set fn = tool.function if tool.function is defined else tool -%} | |
| {%- set spec = { | |
| "description": (fn.description if fn.description is defined and fn.description else ""), | |
| "name": fn.name, | |
| "parameters": (fn.parameters if fn.parameters is defined and fn.parameters else {}), | |
| "type": (tool.type if tool.type is defined and tool.type else "function"), | |
| } -%} | |
| {%- set tool_state.specs = tool_state.specs + [spec] -%} | |
| {%- endfor -%} | |
| {{- "<|message_system|>tool_declare<|content_xml|>" -}} | |
| {{- tool_state.specs | tojson(sort_keys=true, separators=(",", ":")) -}} | |
| {{- "<|end_message|>" -}} | |
| {%- endif -%} | |
| {%- set state = namespace(effort_emitted=false) -%} | |
| {%- for message in messages -%} | |
| {%- if message.role not in role_token -%} | |
| {{- raise_exception("Unknown message role: " ~ message.role) -}} | |
| {%- endif -%} | |
| {%- if not state.effort_emitted and message.role not in ("system", "developer") -%} | |
| {{- emit_thinking_effort() -}} | |
| {%- set state.effort_emitted = true -%} | |
| {%- endif -%} | |
| {%- set rtok = role_token[message.role] -%} | |
| {%- if message.role == "tool" -%} | |
| {%- set tool_name_state = namespace(name="") -%} | |
| {%- if message.name is defined and message.name -%} | |
| {%- set tool_name_state.name = message.name -%} | |
| {%- elif message.tool_call_id is defined and message.tool_call_id -%} | |
| {%- for prev in messages -%} | |
| {%- if prev.role == "assistant" and prev.tool_calls -%} | |
| {%- for tc in prev.tool_calls -%} | |
| {%- if tc.id is defined and tc.id == message.tool_call_id and tc.function.name is defined -%} | |
| {%- set tool_name_state.name = tc.function.name -%} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- endif -%} | |
| {{- rtok -}} | |
| {%- if tool_name_state.name -%}{{- tool_name_state.name -}}{%- endif -%} | |
| {{- "<|content_text|>" -}} | |
| {%- if message.content is string -%}{{- message.content -}}{%- endif -%} | |
| {{- "<|end_message|>" -}} | |
| {%- else -%} | |
| {%- if message.role == "assistant" and message.reasoning_content is defined and message.reasoning_content -%} | |
| {{- "<|message_model|><|content_thinking|>" ~ message.reasoning_content ~ "<|end_message|>" -}} | |
| {%- endif -%} | |
| {%- if message.content is string and message.content -%} | |
| {{- rtok ~ "<|content_text|>" ~ message.content ~ "<|end_message|>" -}} | |
| {%- elif message.content -%} | |
| {%- for part in message.content -%} | |
| {%- if part is string -%} | |
| {{- rtok ~ "<|content_text|>" ~ part ~ "<|end_message|>" -}} | |
| {%- elif part.type is not defined or part.type in ("text", "input_text") -%} | |
| {%- set text_part = (part.text if part.text is defined and part.text is string else "") -%} | |
| {{- rtok ~ "<|content_text|>" ~ text_part ~ "<|end_message|>" -}} | |
| {%- elif part.type in ("image", "input_image", "image_url") -%} | |
| {{- rtok ~ "<|content_image|><|unused_200054|><|end_message|>" -}} | |
| {%- elif part.type in ("audio", "input_audio", "audio_url") -%} | |
| {{- rtok ~ "<|content_audio_input|><|unused_200053|><|audio_end|><|end_message|>" -}} | |
| {%- else -%} | |
| {{- raise_exception("Unsupported content part type: " ~ part.type) -}} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- endif -%} | |
| {%- if message.role == "assistant" and message.tool_calls -%} | |
| {%- for tc in message.tool_calls -%} | |
| {%- set fn = tc.function -%} | |
| {%- if fn.name is not defined or fn.name is not string -%} | |
| {{- raise_exception("tool call function name must be a string") -}} | |
| {%- endif -%} | |
| {%- set args = fn.arguments if fn.arguments is defined and fn.arguments else {} -%} | |
| {%- if args is string -%} | |
| {{- raise_exception("tool call arguments must be a parsed object, not a JSON string; canonicalize upstream") -}} | |
| {%- endif -%} | |
| {%- if args is not mapping -%} | |
| {{- raise_exception("tool call arguments must be an object") -}} | |
| {%- endif -%} | |
| {{- "<|message_model|>" ~ fn.name ~ "<|content_invoke_tool_json|>" -}} | |
| {{- '{"name":' ~ (fn.name | tojson(sort_keys=true, separators=(",", ":"))) ~ ',"args":' -}} | |
| {{- (args | tojson(sort_keys=true, separators=(",", ":"))) -}} | |
| {{- "}<|end_message|>" -}} | |
| {%- endfor -%} | |
| {%- endif -%} | |
| {%- if message.role == "assistant" -%} | |
| {{- "<|content_model_end_sampling|>" -}} | |
| {%- endif -%} | |
| {%- endif -%} | |
| {%- endfor -%} | |
| {%- if not state.effort_emitted -%} | |
| {{- emit_thinking_effort() -}} | |
| {%- endif -%} | |
| {%- if add_generation_prompt -%} | |
| {{- "<|message_model|>" -}} | |
| {%- endif -%} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment