| 
							 | 
						{%- macro render_typescript_type(param_spec, required_params, is_nullable=false) -%} | 
					
					
						
						| 
							 | 
						    {%- if param_spec.type == "array" -%} | 
					
					
						
						| 
							 | 
						        {%- if param_spec['items'] -%} | 
					
					
						
						| 
							 | 
						            {%- if param_spec['items']['type'] == "string" -%} | 
					
					
						
						| 
							 | 
						                {{- "string[]" }} | 
					
					
						
						| 
							 | 
						            {%- elif param_spec['items']['type'] == "number" -%} | 
					
					
						
						| 
							 | 
						                {{- "number[]" }} | 
					
					
						
						| 
							 | 
						            {%- elif param_spec['items']['type'] == "integer" -%} | 
					
					
						
						| 
							 | 
						                {{- "number[]" }} | 
					
					
						
						| 
							 | 
						            {%- elif param_spec['items']['type'] == "boolean" -%} | 
					
					
						
						| 
							 | 
						                {{- "boolean[]" }} | 
					
					
						
						| 
							 | 
						            {%- else -%} | 
					
					
						
						| 
							 | 
						                {%- set inner_type = render_typescript_type(param_spec['items'], required_params) -%} | 
					
					
						
						| 
							 | 
						                {%- if inner_type == "object | object" or inner_type|length > 50 -%} | 
					
					
						
						| 
							 | 
						                    {{- "any[]" }} | 
					
					
						
						| 
							 | 
						                {%- else -%} | 
					
					
						
						| 
							 | 
						                    {{- inner_type + "[]" }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						            {%- if param_spec.nullable -%} | 
					
					
						
						| 
							 | 
						                {{- " | null" }} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- "any[]" }} | 
					
					
						
						| 
							 | 
						            {%- if param_spec.nullable -%} | 
					
					
						
						| 
							 | 
						                {{- " | null" }} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type is defined and param_spec.type is iterable and param_spec.type is not string and param_spec.type is not mapping and param_spec.type[0] is defined -%} | 
					
					
						
						| 
							 | 
						         | 
					
					
						
						| 
							 | 
						        {%- if param_spec.type | length > 1 -%} | 
					
					
						
						| 
							 | 
						            {{- param_spec.type | join(" | ") }} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- param_spec.type[0] }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.oneOf -%} | 
					
					
						
						| 
							 | 
						         | 
					
					
						
						| 
							 | 
						        {%- set has_object_variants = false -%} | 
					
					
						
						| 
							 | 
						        {%- for variant in param_spec.oneOf -%} | 
					
					
						
						| 
							 | 
						            {%- if variant.type == "object" -%} | 
					
					
						
						| 
							 | 
						                {%- set has_object_variants = true -%} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- endfor -%} | 
					
					
						
						| 
							 | 
						        {%- if has_object_variants and param_spec.oneOf|length > 1 -%} | 
					
					
						
						| 
							 | 
						            {{- "any" }} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {%- for variant in param_spec.oneOf -%} | 
					
					
						
						| 
							 | 
						                {{- render_typescript_type(variant, required_params) -}} | 
					
					
						
						| 
							 | 
						                {%- if variant.description %} | 
					
					
						
						| 
							 | 
						                    {{- "// " + variant.description }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- if variant.default is defined %} | 
					
					
						
						| 
							 | 
						                    {{ "// default: " + variant.default|tojson }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- if not loop.last %} | 
					
					
						
						| 
							 | 
						                    {{- " | " }} | 
					
					
						
						| 
							 | 
						                {% endif -%} | 
					
					
						
						| 
							 | 
						            {%- endfor -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type == "string" -%} | 
					
					
						
						| 
							 | 
						        {%- if param_spec.enum -%} | 
					
					
						
						| 
							 | 
						            {{- '"' + param_spec.enum|join('" | "') + '"' -}} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- "string" }} | 
					
					
						
						| 
							 | 
						            {%- if param_spec.nullable %} | 
					
					
						
						| 
							 | 
						                {{- " | null" }} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type == "number" -%} | 
					
					
						
						| 
							 | 
						        {{- "number" }} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type == "integer" -%} | 
					
					
						
						| 
							 | 
						        {{- "number" }} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type == "boolean" -%} | 
					
					
						
						| 
							 | 
						        {{- "boolean" }} | 
					
					
						
						| 
							 | 
						    {%- elif param_spec.type == "object" -%} | 
					
					
						
						| 
							 | 
						        {%- if param_spec.properties -%} | 
					
					
						
						| 
							 | 
						            {{- "{\n" }} | 
					
					
						
						| 
							 | 
						            {%- for prop_name, prop_spec in param_spec.properties.items() -%} | 
					
					
						
						| 
							 | 
						                {{- prop_name -}} | 
					
					
						
						| 
							 | 
						                {%- if prop_name not in (param_spec.required or []) -%} | 
					
					
						
						| 
							 | 
						                    {{- "?" }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {{- ": " }} | 
					
					
						
						| 
							 | 
						                {{ render_typescript_type(prop_spec, param_spec.required or []) }} | 
					
					
						
						| 
							 | 
						                {%- if not loop.last -%} | 
					
					
						
						| 
							 | 
						                    {{-", " }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						            {%- endfor -%} | 
					
					
						
						| 
							 | 
						            {{- "}" }} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- "object" }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- else -%} | 
					
					
						
						| 
							 | 
						        {{- "any" }} | 
					
					
						
						| 
							 | 
						    {%- endif -%} | 
					
					
						
						| 
							 | 
						{%- endmacro -%} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{%- macro render_tools(tools) -%} | 
					
					
						
						| 
							 | 
						    {%- for tool in tools %} | 
					
					
						
						| 
							 | 
						        {{- "// " + tool.description + "\n" }} | 
					
					
						
						| 
							 | 
						        {{- "type "+ tool.name + " = " }} | 
					
					
						
						| 
							 | 
						        {%- if tool.parameters and tool.parameters.properties %} | 
					
					
						
						| 
							 | 
						            {{- "(_: {\n" }} | 
					
					
						
						| 
							 | 
						            {%- for param_name, param_spec in tool.parameters.properties.items() %} | 
					
					
						
						| 
							 | 
						                {%- if param_spec.description %} | 
					
					
						
						| 
							 | 
						                    {{- "// " + param_spec.description + "\n" }} | 
					
					
						
						| 
							 | 
						                {%- endif %} | 
					
					
						
						| 
							 | 
						                {{- param_name }} | 
					
					
						
						| 
							 | 
						                {%- if param_name not in (tool.parameters.required or []) -%} | 
					
					
						
						| 
							 | 
						                    {{- "?" }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {{- ": " }} | 
					
					
						
						| 
							 | 
						                {{- render_typescript_type(param_spec, tool.parameters.required or []) }} | 
					
					
						
						| 
							 | 
						                {%- if param_spec.default is defined -%} | 
					
					
						
						| 
							 | 
						                    {%- if param_spec.enum %} | 
					
					
						
						| 
							 | 
						                        {{- ", // default: " + param_spec.default }} | 
					
					
						
						| 
							 | 
						                    {%- elif param_spec.oneOf %} | 
					
					
						
						| 
							 | 
						                        {{- "// default: " + param_spec.default }} | 
					
					
						
						| 
							 | 
						                    {%- else %} | 
					
					
						
						| 
							 | 
						                        {{- ", // default: " + param_spec.default|tojson }} | 
					
					
						
						| 
							 | 
						                    {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- if not loop.last %} | 
					
					
						
						| 
							 | 
						                    {{- ",\n" }} | 
					
					
						
						| 
							 | 
						                {%- else %} | 
					
					
						
						| 
							 | 
						                    {{- "\n" }} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						            {%- endfor %} | 
					
					
						
						| 
							 | 
						            {{- "}) => any;" }} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- "() => any;" }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if not loop.last -%} | 
					
					
						
						| 
							 | 
						            {{- "\n" }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- endfor %} | 
					
					
						
						| 
							 | 
						{%- endmacro -%} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{{ bos_token }} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{%- set system_token = '<|system_start|>' -%} | 
					
					
						
						| 
							 | 
						{%- set end_system_token = '<|system_end|>' -%} | 
					
					
						
						| 
							 | 
						{%- set developer_token = '<|developer_start|>' -%} | 
					
					
						
						| 
							 | 
						{%- set end_developer_token = '<|developer_end|>' -%} | 
					
					
						
						| 
							 | 
						{%- set user_token = '<|user_start|>' -%} | 
					
					
						
						| 
							 | 
						{%- set end_user_token = '<|user_end|>' -%} | 
					
					
						
						| 
							 | 
						{%- set assistant_token = '<|assistant_start|>' -%} | 
					
					
						
						| 
							 | 
						{%- set end_assistant_token = '<|assistant_end|>' -%} | 
					
					
						
						| 
							 | 
						{%- set inner_token = '<|inner_prefix|>' -%} | 
					
					
						
						| 
							 | 
						{%- set outer_token = '<|inner_suffix|>' -%} | 
					
					
						
						| 
							 | 
						{%- set tool_calls_token = '<|tools_prefix|>' -%} | 
					
					
						
						| 
							 | 
						{%- set end_tool_calls_token = '<|tools_suffix|>' -%} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{%- set ns = namespace(in_assistant=false, in_tool=false, in_inner=false, assistant_format=none) -%} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{%- if messages and messages[0].role == 'system' -%} | 
					
					
						
						| 
							 | 
						    {%- if "content" in messages[0] -%} | 
					
					
						
						| 
							 | 
						        {%- if messages[0].content is string -%} | 
					
					
						
						| 
							 | 
						            {{ system_token + messages[0].content + end_system_token }} | 
					
					
						
						| 
							 | 
						        {%- elif messages[0].content is mapping and "text" in messages[0].content -%} | 
					
					
						
						| 
							 | 
						            {{ system_token + messages[0].content.text + end_system_token }} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- raise_exception("Invalid system message") -}} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- else -%} | 
					
					
						
						| 
							 | 
						        {{- raise_exception("Invalid system message") -}} | 
					
					
						
						| 
							 | 
						    {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- set loop_messages = messages[1:] -%} | 
					
					
						
						| 
							 | 
						{%- else -%} | 
					
					
						
						| 
							 | 
						    {{ system_token + 'You are Apertus, a helpful assistant created by the SwissAI initiative.\nKnowledge cutoff: 2024-04\nCurrent date: ' + strftime_now('%Y-%m-%d') + end_system_token }} | 
					
					
						
						| 
							 | 
						    {%- set loop_messages = messages -%} | 
					
					
						
						| 
							 | 
						{%- endif -%} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{{ developer_token + 'Deliberation: ' }} | 
					
					
						
						| 
							 | 
						{%- if enable_thinking is defined and enable_thinking -%} | 
					
					
						
						| 
							 | 
						    {{ 'enabled\n' }} | 
					
					
						
						| 
							 | 
						{%- else -%} | 
					
					
						
						| 
							 | 
						    {{ 'disabled\n' }} | 
					
					
						
						| 
							 | 
						{%- endif -%} | 
					
					
						
						| 
							 | 
						{%- if tools is defined and tools -%} | 
					
					
						
						| 
							 | 
						    {{ 'Tool Capabilities:\n' + render_tools(tools) }} | 
					
					
						
						| 
							 | 
						{%- else -%} | 
					
					
						
						| 
							 | 
						    {{ 'Tool Capabilities: disabled' }} | 
					
					
						
						| 
							 | 
						{%- endif -%} | 
					
					
						
						| 
							 | 
						{{ end_developer_token }} | 
					
					
						
						| 
							 | 
						 | 
					
					
						
						| 
							 | 
						{%- for message in loop_messages -%} | 
					
					
						
						| 
							 | 
						    {%- if message.role == 'user' -%} | 
					
					
						
						| 
							 | 
						        {%- set ns.in_inner = false -%} | 
					
					
						
						| 
							 | 
						        {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						            {{ ']' }} | 
					
					
						
						| 
							 | 
						            {%- set ns.in_tool = false -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if ns.in_assistant -%} | 
					
					
						
						| 
							 | 
						            {{ end_assistant_token }} | 
					
					
						
						| 
							 | 
						            {%- set ns.in_assistant = false -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if "content" in message -%} | 
					
					
						
						| 
							 | 
						            {{ user_token }} | 
					
					
						
						| 
							 | 
						            {%- if message.content is string -%} | 
					
					
						
						| 
							 | 
						                {{ message.content }} | 
					
					
						
						| 
							 | 
						            {%- elif message.content is mapping and "parts" in message.content -%} | 
					
					
						
						| 
							 | 
						                {%- set parts = message.content.parts -%} | 
					
					
						
						| 
							 | 
						                {%- for part in parts -%} | 
					
					
						
						| 
							 | 
						                    {%- if part.type == "text" -%} | 
					
					
						
						| 
							 | 
						                        {{ part.text }} | 
					
					
						
						| 
							 | 
						                    {%- else -%} | 
					
					
						
						| 
							 | 
						                        {{- raise_exception("Invalid user part: " + part.type) -}} | 
					
					
						
						| 
							 | 
						                    {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- endfor -%} | 
					
					
						
						| 
							 | 
						            {%- else -%} | 
					
					
						
						| 
							 | 
						                {{- raise_exception("Invalid user message: " + message.role) -}} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						            {{ end_user_token }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif message.role == 'assistant' -%} | 
					
					
						
						| 
							 | 
						        {%- if not ns.in_assistant -%} | 
					
					
						
						| 
							 | 
						            {{ assistant_token }} | 
					
					
						
						| 
							 | 
						            {%- set ns.in_assistant = true -%} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if "content" in message -%} | 
					
					
						
						| 
							 | 
						            {%- if message.content is string and (ns.assistant_format is none or ns.assistant_format == "string") -%} | 
					
					
						
						| 
							 | 
						                {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						                    {{ ']' }} | 
					
					
						
						| 
							 | 
						                    {%- set ns.in_tool = false -%} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- set ns.assistant_format = "string" -%} | 
					
					
						
						| 
							 | 
						                {{ message.content }} | 
					
					
						
						| 
							 | 
						            {%- elif message.content is mapping and "blocks" in message.content and (ns.assistant_format is none or ns.assistant_format == "mapping") -%} | 
					
					
						
						| 
							 | 
						                {%- set ns.assistant_format = "mapping" -%} | 
					
					
						
						| 
							 | 
						                {%- set blocks = message.content.blocks -%} | 
					
					
						
						| 
							 | 
						                {%- for block in blocks -%} | 
					
					
						
						| 
							 | 
						                    {%- if block.type == 'thoughts' -%} | 
					
					
						
						| 
							 | 
						                        {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						                            {{ ']' }} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_tool = false -%} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {%- if not ns.in_inner -%} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_inner = true -%} | 
					
					
						
						| 
							 | 
						                            {{ inner_token }} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {{ block.text }} | 
					
					
						
						| 
							 | 
						                    {%- elif block.type == 'tool_calls' -%} | 
					
					
						
						| 
							 | 
						                        {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						                            {{ ']' }} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_tool = false -%} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {%- if ns.in_inner and not loop.first and block.calls|length == 1 and block.calls[0].name == 'display_answers' -%} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_inner = false -%} | 
					
					
						
						| 
							 | 
						                            {{ outer_token }} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {{ tool_calls_token + '[' }} | 
					
					
						
						| 
							 | 
						                        {%- for tool_call in block.calls -%} | 
					
					
						
						| 
							 | 
						                            {{- '{"' + tool_call.name + '": ' + tool_call.arguments + '}' }} | 
					
					
						
						| 
							 | 
						                            {%- if not loop.last -%} | 
					
					
						
						| 
							 | 
						                                {{- ", " }} | 
					
					
						
						| 
							 | 
						                            {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {%- endfor -%} | 
					
					
						
						| 
							 | 
						                        {{ ']' + end_tool_calls_token }} | 
					
					
						
						| 
							 | 
						                    {%- elif block.type == 'tool_outputs' -%} | 
					
					
						
						| 
							 | 
						                        {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						                            {{- raise_exception("Cannot have both tool outputs as separate messages and tool outputs as blocks") -}} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {{ '[' }} | 
					
					
						
						| 
							 | 
						                        {%- for tool_output in block.outputs -%} | 
					
					
						
						| 
							 | 
						                            {{- tool_output.output }} | 
					
					
						
						| 
							 | 
						                            {%- if not loop.last -%} | 
					
					
						
						| 
							 | 
						                                {{- ", " }} | 
					
					
						
						| 
							 | 
						                            {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {%- endfor -%} | 
					
					
						
						| 
							 | 
						                        {{- ']' }} | 
					
					
						
						| 
							 | 
						                    {%- elif block.type == 'response' -%} | 
					
					
						
						| 
							 | 
						                        {%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						                            {{ ']' }} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_tool = false -%} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {%- if (not loop.first and ns.in_inner) or (ns.in_assistant and ns.in_inner) -%} | 
					
					
						
						| 
							 | 
						                            {%- set ns.in_inner = false -%} | 
					
					
						
						| 
							 | 
						                            {{ outer_token }} | 
					
					
						
						| 
							 | 
						                        {%- endif -%} | 
					
					
						
						| 
							 | 
						                        {{ block.text }} | 
					
					
						
						| 
							 | 
						                    {%- else -%} | 
					
					
						
						| 
							 | 
						                        {{- raise_exception("Invalid assistant block type: " + block.type) -}} | 
					
					
						
						| 
							 | 
						                    {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- endfor -%} | 
					
					
						
						| 
							 | 
						            {%- else -%} | 
					
					
						
						| 
							 | 
						                {{- raise_exception("Invalid assistant content") -}} | 
					
					
						
						| 
							 | 
						            {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{- raise_exception("Invalid assistant message") -}} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if "tool_calls" in message and message.tool_calls -%} | 
					
					
						
						| 
							 | 
						            {{ tool_calls_token + '[' }} | 
					
					
						
						| 
							 | 
						            {%- for tool_call in message.tool_calls -%} | 
					
					
						
						| 
							 | 
						                {%- if tool_call.type == 'function' -%} | 
					
					
						
						| 
							 | 
						                    {%- set function = tool_call.function -%} | 
					
					
						
						| 
							 | 
						                    {{- '{"' + function.name + '": ' + function.arguments + '}' }} | 
					
					
						
						| 
							 | 
						                    {%- if not loop.last -%} | 
					
					
						
						| 
							 | 
						                        {{- ", " }} | 
					
					
						
						| 
							 | 
						                    {%- endif -%} | 
					
					
						
						| 
							 | 
						                {%- else -%} | 
					
					
						
						| 
							 | 
						                    {{- raise_exception("Invalid tool call type: " + tool_call.type) -}} | 
					
					
						
						| 
							 | 
						                {%- endif -%} | 
					
					
						
						| 
							 | 
						            {%- endfor -%} | 
					
					
						
						| 
							 | 
						            {{ ']' + end_tool_calls_token }} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						    {%- elif message.role == 'tool' -%} | 
					
					
						
						| 
							 | 
						        {%- if not ns.in_assistant -%} | 
					
					
						
						| 
							 | 
						            {{- raise_exception("Tool message outside of assistant") -}} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {%- if not ns.in_tool -%} | 
					
					
						
						| 
							 | 
						            {{ '[' }} | 
					
					
						
						| 
							 | 
						            {%- set ns.in_tool = true -%} | 
					
					
						
						| 
							 | 
						        {%- else -%} | 
					
					
						
						| 
							 | 
						            {{ ", "}} | 
					
					
						
						| 
							 | 
						        {%- endif -%} | 
					
					
						
						| 
							 | 
						        {{ message.content }} | 
					
					
						
						| 
							 | 
						    {%- else -%} | 
					
					
						
						| 
							 | 
						        {{- raise_exception("Invalid message role") -}} | 
					
					
						
						| 
							 | 
						    {%- endif -%} | 
					
					
						
						| 
							 | 
						{%- endfor -%} | 
					
					
						
						| 
							 | 
						{%- if ns.in_tool -%} | 
					
					
						
						| 
							 | 
						    {{ ']' }} | 
					
					
						
						| 
							 | 
						{%- endif -%} | 
					
					
						
						| 
							 | 
						{%- if add_generation_prompt -%} | 
					
					
						
						| 
							 | 
						    {{ assistant_token }} | 
					
					
						
						| 
							 | 
						{%- endif -%} | 
					
					
						
						| 
							 | 
						 |