@@ -612,7 +612,47 @@ TEST_F(Qwen3CoderOutputParserTest, StreamingSimpleToolCall) {
612612 {" value1</parameter></function></tool_call>" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"index":3,"function":{"arguments":"{\"arg1\": \"value1\"}"}}]}})" },
613613 {" NOTHING IMPORTANT HERE" , ov::genai::GenerationFinishReason::NONE, std::nullopt },
614614 {" part of bfcl 'draft'.\n\n <function=cd>\n " , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"id":"XXXXXXXXX","type":"function","index":4,"function":{"name":"cd"}}]}})" },
615- {" \n <parameter=folder>\n ResearchDocs\n </parameter>\n </function>\n </tool_call>" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"index":4,"function":{"arguments":"{\"folder\": \"ResearchDocs\"}"}}]}})" }};
615+ {" \n <parameter=folder>\n ResearchDocs\n </parameter>\n </function>\n </tool_call>" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"index":4,"function":{"arguments":"{\"folder\": \"ResearchDocs\"}"}}]}})" },
616+ // example from cds:
617+ {R"(
618+ <tool_call>
619+ <function=string_tool>
620+ <parameter=arg1>
621+ )" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"id":"XXXXXXXXX","type":"function","index":5,"function":{"name":"string_tool"}}]}})" },
622+ {R"( FUNCTION FC_CreateJsonPayload : STRING
623+ VAR_INPUT
624+ Value1 : REAL;
625+ Value2 : INT;
626+ Value3 : BOOL;
627+ Value4 : STRING(100);
628+ END_VAR
629+ VAR_OUTPUT
630+ JsonPayload : STRING(1000);
631+ END_VAR
632+ VAR
633+ TempStr : STRING(100);
634+ END_VAR
635+
636+ JsonPayload := '{';
637+ JsonPayload := JsonPayload + '"value1":' + REAL_TO_STRING(Value1, '', 2) + ',';
638+ JsonPayload := JsonPayload + '"value2":' + INT_TO_STRING(Value2) + ',';
639+ JsonPayload := JsonPayload + '"value3":' + BOOL_TO_STRING(Value3) + ',';
640+ JsonPayload := JsonPayload + '"value4":"' + Value4 + '"';
641+ JsonPayload := JsonPayload + '}';
642+
643+ END_FUNCTION</parameter>
644+ </function>
645+ </tool_call>)" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"index":5,"function":{"arguments":"{\"arg1\": \"FUNCTION FC_CreateJsonPayload : STRING\\nVAR_INPUT\\n Value1 : REAL;\\n Value2 : INT;\\n Value3 : BOOL;\\n Value4 : STRING(100);\\nEND_VAR\\nVAR_OUTPUT\\n JsonPayload : STRING(1000);\\nEND_VAR\\nVAR\\n TempStr : STRING(100);\\nEND_VAR\\n\\n JsonPayload := '{';\\n JsonPayload := JsonPayload + '\"value1\":' + REAL_TO_STRING(Value1, '', 2) + ',';\\n JsonPayload := JsonPayload + '\"value2\":' + INT_TO_STRING(Value2) + ',';\\n JsonPayload := JsonPayload + '\"value3\":' + BOOL_TO_STRING(Value3) + ',';\\n JsonPayload := JsonPayload + '\"value4\":\"' + Value4 + '\"';\\n JsonPayload := JsonPayload + '}';\\n\\nEND_FUNCTION\"}"}}]}})" },
646+ {" <tool_call><function=string_tool><parameter=arg1>" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"id":"XXXXXXXXX","type":"function","index":6,"function":{"name":"string_tool"}}]}})" },
647+ {R"(
648+ if __name__ == "__main__":
649+ addresses = {}
650+ addresses["Hodor"] = """The door"""
651+ addresses["Arya"] = "Winterfell"
652+ for name, address in addresses.items():
653+ print(f'{name} lives at {address}')
654+ </parameter></function></tool_call>)" , ov::genai::GenerationFinishReason::NONE, R"( {"delta":{"tool_calls":[{"index":6,"function":{"arguments":"{\"arg1\": \"if __name__ == \"__main__\":\\n addresses = {}\\n addresses[\"Hodor\"] = \"\"\"The door\"\"\"\\n addresses[\"Arya\"] = \"Winterfell\"\\n for name, address in addresses.items():\\n print(f'{name} lives at {address}')\"}"}}]}})" }
655+ };
616656 for (const auto & [chunk, finishReason, expectedDelta] : chunkToDeltaVec) {
617657 i++;
618658 std::optional<rapidjson::Document> doc = outputParser->parseChunk (chunk, true , ov::genai::GenerationFinishReason::NONE);
0 commit comments