Skip to content

[Bug]: Search memory failed with Qwen3.5-xxx thinking mode (default enabled) #1265

Description

@pengfeiz901

Describe the bug

Thinking mode is enabled by default since Qwen3.5-xxx (qwen3.5-plus, qwen3.5-flash) and memmachine search memory could not handle section in Pydantic model_validate_json()

2026-03-25 03:05:22,890 [ERROR] memmachine_server.semantic_memory.semantic_ingestion - Failed to process message 5 for semantic type profile
Traceback (most recent call last):
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_ingestion.py", line 163, in process_semantic_type
    commands = await llm_feature_update(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/pydantic/_internal/_validate_call.py", line 34, in wrapper_function
    return await wrapper(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_llm.py", line 88, in llm_feature_update
    parsed_output = await model.generate_parsed_response(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/common/language_model/openai_responses_language_model.py", line 157, in generate_parsed_response
    response = await self._client.with_options(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/resources/responses/responses.py", line 2825, in parse
    return await self._post(
           ^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1674, in request
    return await self._process_response(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1763, in _process_response
    return await api_response.parse()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_response.py", line 432, in parse
    parsed = self._options.post_parser(parsed)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/resources/responses/responses.py", line 2819, in parser
    return parse_response(
           ^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_responses.py", line 74, in parse_response
    "parsed": parse_text(item.text, text_format=text_format),
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_responses.py", line 139, in parse_text
    return cast(TextFormatT, model_parse_json(text_format, text))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_compat.py", line 171, in model_parse_json
    return model.model_validate_json(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/pydantic/main.py", line 766, in model_validate_json
    return cls.__pydantic_validator__.validate_json(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for _SemanticFeatureUpdateRes
  Invalid JSON: expected value at line 1 column 1 [type=json_invalid, input_value='<think>\nThe user is sha...atabase work"\n    }\n]', input_type=str]
    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid
2026-03-25 03:05:45,040 [INFO] httpx - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/responses "HTTP/1.1 200 OK"
2026-03-25 03:05:45,041 [ERROR] memmachine_server.semantic_memory.semantic_ingestion - Failed to process message 6 for semantic type profile
Traceback (most recent call last):
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_ingestion.py", line 163, in process_semantic_type
    commands = await llm_feature_update(
               ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/pydantic/_internal/_validate_call.py", line 34, in wrapper_function
    return await wrapper(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_llm.py", line 88, in llm_feature_update
    parsed_output = await model.generate_parsed_response(
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/memmachine_server/common/language_model/openai_responses_language_model.py", line 157, in generate_parsed_response
    response = await self._client.with_options(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/resources/responses/responses.py", line 2825, in parse
    return await self._post(
           ^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
    return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1674, in request
    return await self._process_response(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1763, in _process_response
    return await api_response.parse()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_response.py", line 432, in parse
    parsed = self._options.post_parser(parsed)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/resources/responses/responses.py", line 2819, in parser
    return parse_response(
           ^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_responses.py", line 74, in parse_response
    "parsed": parse_text(item.text, text_format=text_format),
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_responses.py", line 139, in parse_text
    return cast(TextFormatT, model_parse_json(text_format, text))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/openai/_compat.py", line 171, in model_parse_json
    return model.model_validate_json(data)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/app/.venv/lib/python3.12/site-packages/pydantic/main.py", line 766, in model_validate_json
    return cls.__pydantic_validator__.validate_json(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pydantic_core._pydantic_core.ValidationError: 1 validation error for _SemanticFeatureUpdateRes
  Invalid JSON: expected value at line 1 column 1 [type=json_invalid, input_value='<think>\nLooking at this...Third Board)"\n    }\n]', input_type=str]
    For further information visit https://errors.pydantic.dev/2.12/v/json_invalid

Steps to reproduce

From Qwen official document, Thinking mode is enabled by default since qwen3.5

https://www.alibabacloud.com/help/en/model-studio/deep-thinking#19a4c1988fp6d

Expected behavior

Search memory may report such error and add memory works well.

Environment

MemMachine version 0.3.2

Additional context

No response

Activity

  1. added theissue type on Mar 25, 2026
  2. pengfeiz901 commented on Mar 26, 2026

    @pengfeiz901
    Author

    When I reproduce this issue in local lab environment, I get another similar errors. This means we have issue to parse Qwen3.5 response.

    2026-03-26 06:00:30,508 [INFO] httpx - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"
    2026-03-26 06:00:30,511 [ERROR] memmachine_server.semantic_memory.semantic_ingestion - Failed to process message 46 for semantic type profile
    Traceback (most recent call last):
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_ingestion.py", line 163, in process_semantic_type
        commands = await llm_feature_update(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/pydantic/_internal/_validate_call.py", line 34, in wrapper_function
        return await wrapper(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_llm.py", line 88, in llm_feature_update
        parsed_output = await model.generate_parsed_response(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/common/language_model/openai_chat_completions_language_model.py", line 130, in generate_parsed_response
        response = await self._client.with_options(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions/completions.py", line 1668, in parse
        return await self._post(
               ^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
        return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1674, in request
        return await self._process_response(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1763, in _process_response
        return await api_response.parse()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_response.py", line 432, in parse
        parsed = self._options.post_parser(parsed)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions/completions.py", line 1662, in parser
        return _parse_chat_completion(
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 146, in parse_chat_completion
        "parsed": maybe_parse_content(
                  ^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 196, in maybe_parse_content
        return _parse_content(response_format, message.content)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 245, in _parse_content
        return cast(ResponseFormatT, model_parse_json(response_format, content))
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_compat.py", line 171, in model_parse_json
        return model.model_validate_json(data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/pydantic/main.py", line 766, in model_validate_json
        return cls.__pydantic_validator__.validate_json(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    pydantic_core._pydantic_core.ValidationError: 1 validation error for _SemanticFeatureUpdateRes
      Input should be an object [type=model_type, input_value=[], input_type=list]
        For further information visit https://errors.pydantic.dev/2.12/v/model_type
    2026-03-26 06:00:36,661 [INFO] httpx - HTTP Request: POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions "HTTP/1.1 200 OK"
    2026-03-26 06:00:36,664 [ERROR] memmachine_server.semantic_memory.semantic_ingestion - Failed to process message 48 for semantic type profile
    Traceback (most recent call last):
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_ingestion.py", line 163, in process_semantic_type
        commands = await llm_feature_update(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/pydantic/_internal/_validate_call.py", line 34, in wrapper_function
        return await wrapper(*args, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/semantic_memory/semantic_llm.py", line 88, in llm_feature_update
        parsed_output = await model.generate_parsed_response(
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/memmachine_server/common/language_model/openai_chat_completions_language_model.py", line 130, in generate_parsed_response
        response = await self._client.with_options(
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions/completions.py", line 1668, in parse
        return await self._post(
               ^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1884, in post
        return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1674, in request
        return await self._process_response(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_base_client.py", line 1763, in _process_response
        return await api_response.parse()
               ^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_response.py", line 432, in parse
        parsed = self._options.post_parser(parsed)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/resources/chat/completions/completions.py", line 1662, in parser
        return _parse_chat_completion(
               ^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 146, in parse_chat_completion
        "parsed": maybe_parse_content(
                  ^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 196, in maybe_parse_content
        return _parse_content(response_format, message.content)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/lib/_parsing/_completions.py", line 245, in _parse_content
        return cast(ResponseFormatT, model_parse_json(response_format, content))
                                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/openai/_compat.py", line 171, in model_parse_json
        return model.model_validate_json(data)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "/app/.venv/lib/python3.12/site-packages/pydantic/main.py", line 766, in model_validate_json
        return cls.__pydantic_validator__.validate_json(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    pydantic_core._pydantic_core.ValidationError: 1 validation error for _SemanticFeatureUpdateRes
      Input should be an object [type=model_type, input_value=[], input_type=list]
        For further information visit https://errors.pydantic.dev/2.12/v/model_type
  3. JiwaniZakir commented on Apr 3, 2026

    @JiwaniZakir

    The root cause is that Qwen3.5 models with thinking mode enabled prepend a <think>...</think> block to their output before the actual JSON, so when generate_parsed_response in openai_responses_language_model.py passes the raw response content to Pydantic's model_validate_json(), the string is no longer valid JSON and the parse fails. The fix would need to strip the <think>...</think> section from the response content before attempting JSON validation — something like extracting only the text after the closing </think> tag, or using a regex to remove the thinking block entirely. This would need to be handled in generate_parsed_response (around line 157) or as a post-processing step on the raw response string before it reaches Pydantic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions