@@ -143,8 +143,9 @@ std::optional<rapidjson::Document> OutputParser::parseReasoningChunk(ov::genai::
143143 return result;
144144}
145145
146- OutputParser::OutputParser (ov::genai::Tokenizer& tokenizer, const std::string toolParserName, const std::string reasoningParserName) :
146+ OutputParser::OutputParser (ov::genai::Tokenizer& tokenizer, const std::string toolParserName, const std::string reasoningParserName, const ToolsSchemas_t& toolNameSchemaMap ) :
147147 tokenizer (tokenizer) {
148+ SPDLOG_ERROR (" OutputParser created with toolNameSchemaMap of size: {}" , toolNameSchemaMap.size ());
148149 if (toolParserName == " llama3" ) {
149150 toolParser = std::make_unique<Llama3ToolParser>(tokenizer);
150151 } else if (toolParserName == " hermes3" ) {
@@ -156,7 +157,7 @@ OutputParser::OutputParser(ov::genai::Tokenizer& tokenizer, const std::string to
156157 } else if (toolParserName == " gptoss" ) {
157158 toolParser = std::make_unique<GptOssToolParser>(tokenizer);
158159 } else if (toolParserName == " qwen3coder" ) {
159- toolParser = std::make_unique<Qwen3CoderToolParser>(tokenizer);
160+ toolParser = std::make_unique<Qwen3CoderToolParser>(tokenizer, toolNameSchemaMap );
160161 } else if (!toolParserName.empty ()) {
161162 throw std::runtime_error (" Unsupported tool parser: " + toolParserName);
162163 }
@@ -201,7 +202,7 @@ std::string OutputParser::getToolParserStartTag() const {
201202 }
202203}
203204
204- ParsedOutput OutputParser::parse (const std::vector<int64_t >& generatedTokens, const bool toolsAvailable, const ToolsSchemas_t& toolNameSchemaMap ) {
205+ ParsedOutput OutputParser::parse (const std::vector<int64_t >& generatedTokens, const bool toolsAvailable) {
205206 // Model output is processed by the chain of parsers. Each parser extracts relevant part of the output and fills the ParsedOutput structure.
206207 // At the beginning, the content field of ParsedOutput is already filled with decoded content from generatedTokens.
207208 // When parser extracts relevant information, it should remove it from the content field, so we don't duplicate it in the final output.
@@ -212,11 +213,11 @@ ParsedOutput OutputParser::parse(const std::vector<int64_t>& generatedTokens, co
212213 ParsedOutput parsedOutput;
213214 parsedOutput.content = tokenizer.decode (generatedTokens);
214215 if (reasoningParser) {
215- reasoningParser->parse (parsedOutput, generatedTokens, toolNameSchemaMap );
216+ reasoningParser->parse (parsedOutput, generatedTokens);
216217 }
217218 // We run tool parser only if the parser is available and tools have been provided in the request.
218219 if (toolParser && toolsAvailable) {
219- toolParser->parse (parsedOutput, generatedTokens, toolNameSchemaMap );
220+ toolParser->parse (parsedOutput, generatedTokens);
220221 }
221222 return parsedOutput;
222223}
@@ -231,7 +232,7 @@ std::optional<rapidjson::Document> OutputParser::parseChunk(const std::string& c
231232 */
232233
233234 bool reasoningParserExistsAndSupportsStreaming = reasoningParser && !reasoningParser->getParsingStartTag ().empty () && !reasoningParser->getParsingEndTag ().empty ();
234- bool toolParserExistsAndSupportsStreaming = toolParser && !toolParser->getParsingStartTag ().empty ();
235+ bool toolParserExistsAndSupportsStreaming = toolParser && !toolParser->getParsingStartTag ().empty (); // FIXME why not check for parsingEntTag not empty?
235236 bool applyToolParser = toolParserExistsAndSupportsStreaming && toolsAvailable;
236237
237238 if (applyToolParser && toolParser->isImmediateParsingEnabled () && processingPhase == UNKNOWN) {
0 commit comments