| 1872 | } |
| 1873 | |
| 1874 | static void common_chat_parse(common_chat_msg_parser & builder) { |
| 1875 | LOG_DBG("Parsing input with format %s: %s\n", common_chat_format_name(builder.syntax().format), builder.input().c_str()); |
| 1876 | |
| 1877 | switch (builder.syntax().format) { |
| 1878 | case COMMON_CHAT_FORMAT_CONTENT_ONLY: |
| 1879 | common_chat_parse_content_only(builder); |
| 1880 | break; |
| 1881 | case COMMON_CHAT_FORMAT_GENERIC: |
| 1882 | common_chat_parse_generic(builder); |
| 1883 | break; |
| 1884 | case COMMON_CHAT_FORMAT_MISTRAL_NEMO: |
| 1885 | common_chat_parse_mistral_nemo(builder); |
| 1886 | break; |
| 1887 | case COMMON_CHAT_FORMAT_LLAMA_3_X: |
| 1888 | common_chat_parse_llama_3_1(builder); |
| 1889 | break; |
| 1890 | case COMMON_CHAT_FORMAT_LLAMA_3_X_WITH_BUILTIN_TOOLS: |
| 1891 | common_chat_parse_llama_3_1(builder, /* with_builtin_tools= */ true); |
| 1892 | break; |
| 1893 | case COMMON_CHAT_FORMAT_DEEPSEEK_R1: |
| 1894 | common_chat_parse_deepseek_r1(builder); |
| 1895 | break; |
| 1896 | case COMMON_CHAT_FORMAT_FUNCTIONARY_V3_2: |
| 1897 | common_chat_parse_functionary_v3_2(builder); |
| 1898 | break; |
| 1899 | case COMMON_CHAT_FORMAT_FUNCTIONARY_V3_1_LLAMA_3_1: |
| 1900 | common_chat_parse_functionary_v3_1_llama_3_1(builder); |
| 1901 | break; |
| 1902 | case COMMON_CHAT_FORMAT_HERMES_2_PRO: |
| 1903 | common_chat_parse_hermes_2_pro(builder); |
| 1904 | break; |
| 1905 | case COMMON_CHAT_FORMAT_FIREFUNCTION_V2: |
| 1906 | common_chat_parse_firefunction_v2(builder); |
| 1907 | break; |
| 1908 | case COMMON_CHAT_FORMAT_COMMAND_R7B: |
| 1909 | common_chat_parse_command_r7b(builder); |
| 1910 | break; |
| 1911 | default: |
| 1912 | throw std::runtime_error(std::string("Unsupported format: ") + common_chat_format_name(builder.syntax().format)); |
| 1913 | } |
| 1914 | builder.finish(); |
| 1915 | } |
| 1916 | |
| 1917 | common_chat_msg common_chat_parse(const std::string & input, bool is_partial, const common_chat_syntax & syntax) { |
| 1918 | common_chat_msg_parser builder(input, is_partial, syntax); |