char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
566059a26
char/aliceai-t5-moe
1{% macro render_extra_keys ( json_dict , handled_keys ) %} 2{%- if json_dict is mapping %} 3{%- for json_key in json_dict if json_key not in handled_keys %} 4{%- if json_dict [ json_key ] is mapping or ( json_dict [ json_key ] is sequence and json_dict [ json_key ] is not string ) %} 5{{ - '\n<' ~ json_key ~ '>' ~ ( json_dict [ json_key ] | tojson | safe ) ~ '</' ~ json_key ~ '>' }} 6{%- else %} 7{{ - '\n<' ~ json_key ~ '>' ~ ( json_dict [ json_key ] | string ) ~ '</' ~ json_key ~ '>' }} 8{%- endif %} 9{%- endfor %} 10{%- endif %} 11{% endmacro %} 12 13{%- if messages [ 0 ][ "role" ] == "system" %} 14{%- set system_message = messages [ 0 ][ "content" ] %} 15{%- set loop_messages = messages [ 1 :] %} 16{%- else %} 17{%- set loop_messages = messages %} 18{%- endif %} 19 20{%- if not tools is defined %} 21{%- set tools = [] %} 22{%- endif %} 23 24{%- if system_message is defined %} 25{{ - "<|im_start|>system\n" + system_message }} 26{%- else %} 27{%- if tools is iterable and tools | length > 0 %} 28{{ - "<|im_start|>system\nYou are Qwen, a helpful AI assistant that can interact with a computer to solve tasks." }} 29{%- endif %} 30{%- endif %} 31{%- if tools is iterable and tools | length > 0 %} 32{{ - "\n\n# Tools\n\nYou have access to the following tools:\n\n" }} 33{{ - "<tools>" }} 34{%- for tool in tools %} 35{%- if tool . function is defined %} 36{%- set tool = tool . function %} 37{%- endif %} 38{{ - "\n<function>\n<name>" ~ tool . name ~ "</name>" }} 39{%- if tool . description is defined %} 40{{ - '\n<description>' ~ ( tool . description | trim ) ~ '</description>' }} 41{%- endif %} 42{{ - '\n<parameters>' }} 43{%- if tool . parameters is defined and tool . parameters is mapping and tool . parameters . properties is defined and tool . parameters . properties is mapping %} 44{%- for param_name , param_fields in tool . parameters . properties | items %} 45{{ - '\n<parameter>' }} 46{{ - '\n<name>' ~ param_name ~ '</name>' }} 47{%- if param_fields . type is defined %} 48{{ - '\n<type>' ~ ( param_fields . type | string ) ~ '</type>' }} 49{%- endif %} 50{%- if param_fields . description is defined %} 51{{ - '\n<description>' ~ ( param_fields . description | trim ) ~ '</description>' }} 52{%- endif %} 53{%- set handled_keys = [ 'name' , 'type' , 'description' ] %} 54{{ - render_extra_keys ( param_fields , handled_keys ) }} 55{{ - '\n</parameter>' }} 56{%- endfor %} 57{%- endif %} 58{% set handled_keys = [ 'type' , 'properties' ] %} 59{{ - render_extra_keys ( tool . parameters , handled_keys ) }} 60{{ - '\n</parameters>' }} 61{%- set handled_keys = [ 'type' , 'name' , 'description' , 'parameters' ] %} 62{{ - render_extra_keys ( tool , handled_keys ) }} 63{{ - '\n</function>' }} 64{%- endfor %} 65{{ - "\n</tools>" }} 66{{ - '\n\nIf you choose to call a tool ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nvalue_2\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: the tool calling block MUST begin with an opening <tool_call> tag and end with a closing </tool_call> tag.\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }} 67{%- endif %} 68{%- if system_message is defined %} 69{{ - '<|im_end|>\n' }} 70{%- else %} 71{%- if tools is iterable and tools | length > 0 %} 72{{ - '<|im_end|>\n' }} 73{%- endif %} 74{%- endif %} 75{%- for message in loop_messages %} 76{%- if message . role == "assistant" and message . tool_calls is defined and message . tool_calls is iterable and message . tool_calls | length > 0 %} 77{{ - '<|im_start|>' + message . role }} 78{%- if message . content is defined and message . content is string and message . content | trim | length > 0 %} 79{{ - '\n' + message . content | trim + '\n' }} 80{%- endif %} 81{%- for tool_call in message . tool_calls %} 82{%- if tool_call . function is defined %} 83{%- set tool_call = tool_call . function %} 84{%- endif %} 85{{ - '\n<tool_call>\n<function=' + tool_call . name + '>\n' }} 86{%- if tool_call . arguments is defined %} 87{%- for args_name , args_value in tool_call . arguments | items %} 88{{ - '<parameter=' + args_name + '>\n' }} 89{%- set args_value = args_value | tojson | safe if args_value is mapping or ( args_value is sequence and args_value is not string ) else args_value | string %} 90{{ - args_value }} 91{{ - '\n</parameter>\n' }} 92{%- endfor %} 93{%- endif %} 94{{ - '</function>\n</tool_call>' }} 95{%- endfor %} 96{{ - '<|im_end|>\n' }} 97{%- elif message . role == "user" or message . role == "system" or message . role == "assistant" %} 98{{ - '<|im_start|>' + message . role + '\n' + message . content + '<|im_end|>' + '\n' }} 99{%- elif message . role == "tool" %} 100{%- if loop . previtem and loop . previtem . role != "tool" %} 101{{ - '<|im_start|>user\n' }} 102{%- endif %} 103{{ - '<tool_response>\n' }} 104{{ - message . content }} 105{{ - '\n</tool_response>\n' }} 106{%- if not loop . last and loop . nextitem . role != "tool" %} 107{{ - '<|im_end|>\n' }} 108{%- elif loop . last %} 109{{ - '<|im_end|>\n' }} 110{%- endif %} 111{%- else %} 112{{ - '<|im_start|>' + message . role + '\n' + message . content + '<|im_end|>\n' }} 113{%- endif %} 114{%- endfor %} 115{%- if add_generation_prompt %} 116{{ - '<|im_start|>assistant\n' }} 117{%- endif %}