| {%- set ns = namespace( |
| has_system=false, |
| has_images=false, |
| has_tools=false, |
| message_count=0, |
| image_count=0, |
| tool_call_count=0 |
| ) -%} |
| |
| {%- if messages[0]['role'] == 'system' -%} |
| {%- set system_message = messages[0]['content'] -%} |
| {%- set loop_messages = messages[1:] -%} |
| {%- set ns.has_system = true -%} |
| {%- else -%} |
| {%- set system_message = 'You are Helion, an advanced AI assistant with the following capabilities: |
| |
| 1. Vision Understanding: You can analyze images, charts, diagrams, documents, and screenshots. Use the <image> token to reference visual inputs. |
| |
| 2. Tool Use: You can call functions and use tools by responding with valid JSON in the format: {"tool": "tool_name", "parameters": {...}} |
| |
| 3. Long Context: You can process and remember up to 200,000 tokens of conversation history. |
| |
| 4. Reasoning: You excel at step-by-step logical reasoning, mathematical problem-solving, and code generation. |
| |
| 5. Multilingual: You can communicate in 12+ languages with strong performance. |
| |
| Guidelines: |
| - Always be helpful, respectful, and honest |
| - Provide accurate, well-reasoned responses |
| - Cite sources when referencing external information |
| - Admit uncertainty when appropriate |
| - Refuse harmful or inappropriate requests |
| - Use tools when they would be helpful |
| - Break down complex problems into steps |
| - Consider multiple perspectives' -%} |
| {%- set loop_messages = messages -%} |
| {%- endif -%} |
| |
| {{- bos_token -}} |
| |
| {%- if system_message and system_message|length > 0 -%} |
| <|system|> |
| {{- system_message }} |
| </s> |
| {%- endif -%} |
| |
| {%- for message in loop_messages -%} |
| {%- set ns.message_count = ns.message_count + 1 -%} |
| |
| {%- if message['role'] == 'user' -%} |
| <|user|> |
| |
| {%- if message.get('images') -%} |
| {%- set ns.has_images = true -%} |
| {%- if message['images'] is iterable and message['images'] is not string -%} |
| {%- for image in message['images'] -%} |
| {%- set ns.image_count = ns.image_count + 1 -%} |
| <image> |
| {%- endfor -%} |
| {%- else -%} |
| {%- set ns.image_count = ns.image_count + 1 -%} |
| <image> |
| {%- endif -%} |
| {%- endif -%} |
| |
| {%- if message.get('documents') -%} |
| <documents> |
| {%- for doc in message['documents'] -%} |
| <document id="{{ doc.get('id', loop.index) }}" title="{{ doc.get('title', 'Document ' ~ loop.index) }}"> |
| {{ doc.get('content', '') }} |
| </document> |
| {%- endfor -%} |
| </documents> |
| {%- endif -%} |
| |
| {%- if message.get('context') -%} |
| <context> |
| {{ message['context'] }} |
| </context> |
| {%- endif -%} |
| |
| {{- message['content'] -}} |
| |
| {%- if message.get('constraints') -%} |
| |
| <constraints> |
| {{ message['constraints'] }} |
| </constraints> |
| {%- endif -%} |
| </s> |
| |
| {%- elif message['role'] == 'assistant' -%} |
| <|assistant|> |
| |
| {%- if message.get('reasoning') -%} |
| <reasoning> |
| {{ message['reasoning'] }} |
| </reasoning> |
| |
| {%- endif -%} |
| |
| {%- if message.get('tool_calls') -%} |
| {%- set ns.has_tools = true -%} |
| {%- for tool_call in message['tool_calls'] -%} |
| {%- set ns.tool_call_count = ns.tool_call_count + 1 -%} |
| <tool_call id="{{ tool_call.get('id', 'call_' ~ ns.tool_call_count) }}"> |
| {"tool": "{{ tool_call.get('name', tool_call.get('tool', 'unknown')) }}", "parameters": {{ tool_call.get('parameters', tool_call.get('arguments', '{}')) | tojson }}} |
| </tool_call> |
| {%- endfor -%} |
| |
| {%- endif -%} |
| |
| {{- message['content'] -}} |
| |
| {%- if message.get('code_execution') -%} |
| |
| <code_execution language="{{ message['code_execution'].get('language', 'python') }}"> |
| {{ message['code_execution'].get('code', '') }} |
| </code_execution> |
| {%- endif -%} |
| |
| {%- if message.get('citations') -%} |
| |
| <citations> |
| {%- for citation in message['citations'] -%} |
| - [{{ loop.index }}] {{ citation.get('source', 'Unknown source') }}{% if citation.get('url') %}: {{ citation['url'] }}{% endif %} |
| {%- endfor -%} |
| </citations> |
| {%- endif -%} |
| </s> |
| |
| {%- elif message['role'] == 'tool' -%} |
| <|tool|> |
| {%- if message.get('tool_call_id') -%} |
| <tool_result id="{{ message['tool_call_id'] }}"> |
| {%- else -%} |
| <tool_result> |
| {%- endif -%} |
| |
| {%- if message.get('result') -%} |
| {{ message['result'] | tojson if message['result'] is mapping else message['result'] }} |
| {%- else -%} |
| {{ message['content'] }} |
| {%- endif -%} |
| |
| {%- if message.get('error') -%} |
| |
| <error> |
| {{ message['error'] }} |
| </error> |
| {%- endif -%} |
| </tool_result> |
| </s> |
| |
| {%- elif message['role'] == 'function' -%} |
| <|function|> |
| <function_response name="{{ message.get('name', 'unknown') }}"> |
| {{ message['content'] }} |
| </function_response> |
| </s> |
| |
| {%- elif message['role'] == 'thought' -%} |
| <|thought|> |
| {{ message['content'] }} |
| </s> |
| |
| {%- elif message['role'] == 'observation' -%} |
| <|observation|> |
| {{ message['content'] }} |
| </s> |
| |
| {%- else -%} |
| <|{{ message['role'] }}|> |
| {{ message['content'] }} |
| </s> |
| {%- endif -%} |
| |
| {%- endfor -%} |
| |
| {%- if add_generation_prompt -%} |
| {%- if ns.has_tools -%} |
| <|assistant|> |
| {%- else -%} |
| <|assistant|> |
| {%- endif -%} |
| {%- endif -%} |