@@ -592,6 +592,7 @@ const char * common_chat_format_name(common_chat_format format) {
592592 case COMMON_CHAT_FORMAT_FUNCTIONARY_V3_1_LLAMA_3_1: return " Functionary v3.1 Llama 3.1" ;
593593 case COMMON_CHAT_FORMAT_HERMES_2_PRO: return " Hermes 2 Pro" ;
594594 case COMMON_CHAT_FORMAT_COMMAND_R7B: return " Command R7B" ;
595+ case COMMON_CHAT_FORMAT_GPT_OSS: return " GPT-OSS" ;
595596 default :
596597 throw std::runtime_error (" Unknown chat format" );
597598 }
@@ -1289,6 +1290,26 @@ static void common_chat_parse_deepseek_r1(common_chat_msg_parser & builder) {
12891290 tool_calls_end);
12901291}
12911292
1293+ static common_chat_params common_chat_params_init_gpt_oss (const common_chat_template & tmpl, const struct templates_params & inputs) {
1294+ common_chat_params data;
1295+ auto prompt = apply (tmpl, inputs);
1296+
1297+ data.prompt = prompt;
1298+ data.format = COMMON_CHAT_FORMAT_GPT_OSS;
1299+
1300+ // TODO: support tool calls in GPT-OSS?
1301+
1302+ return data;
1303+ }
1304+ static void common_chat_parse_gpt_oss (common_chat_msg_parser & builder) {
1305+ // TODO @ngxson : this won't work with --special enabled, we should fix that
1306+ builder.try_parse_reasoning (" <|channel|>analysis<|message|>" , " <|start|>assistant<|channel|>final<|message|>" );
1307+ if (!builder.syntax ().parse_tool_calls ) {
1308+ builder.add_content (builder.consume_rest ());
1309+ return ;
1310+ }
1311+ }
1312+
12921313static common_chat_params common_chat_params_init_firefunction_v2 (const common_chat_template & tmpl, const struct templates_params & inputs) {
12931314 LOG_DBG (" %s\n " , __func__);
12941315 common_chat_params data;
@@ -1774,6 +1795,11 @@ static common_chat_params common_chat_templates_apply_jinja(
17741795 return common_chat_params_init_hermes_2_pro (tmpl, params);
17751796 }
17761797
1798+ // GPT-OSS
1799+ if (src.find (" <|channel|>" ) != std::string::npos && params.json_schema .is_null ()) {
1800+ return common_chat_params_init_gpt_oss (tmpl, params);
1801+ }
1802+
17771803 // Use generic handler when mixing tools + JSON schema.
17781804 // TODO: support that mix in handlers below.
17791805 if ((params.tools .is_array () && params.json_schema .is_object ())) {
@@ -1925,6 +1951,9 @@ static void common_chat_parse(common_chat_msg_parser & builder) {
19251951 case COMMON_CHAT_FORMAT_COMMAND_R7B:
19261952 common_chat_parse_command_r7b (builder);
19271953 break ;
1954+ case COMMON_CHAT_FORMAT_GPT_OSS:
1955+ common_chat_parse_gpt_oss (builder);
1956+ break ;
19281957 default :
19291958 throw std::runtime_error (std::string (" Unsupported format: " ) + common_chat_format_name (builder.syntax ().format ));
19301959 }
0 commit comments