fix: strip <think> reasoning blocks from thesis LLM output
ci/woodpecker/push/test Pipeline was successful
ci/woodpecker/push/build-3 Pipeline was successful
ci/woodpecker/push/build-1 Pipeline was successful
ci/woodpecker/push/build-2 Pipeline was successful
ci/woodpecker/push/finalize Pipeline was successful
Build and Push / lint-and-test (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.adapters.broker_adapter name:broker-adapter]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.aggregation.worker name:aggregation]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.extractor.worker name:extractor]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.ingestion.worker name:ingestion]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.lake_publisher.worker name:lake-publisher]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.parser.worker name:parser]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.recommendation.worker name:recommendation]) (push) Has been cancelled
Build and Push / build-services (map[cmd:python -m services.scheduler.app name:scheduler]) (push) Has been cancelled
Build and Push / build-services (map[cmd:uvicorn services.api.app:app --host 0.0.0.0 --port 8000 name:query-api]) (push) Has been cancelled
Build and Push / build-services (map[cmd:uvicorn services.risk.app:app --host 0.0.0.0 --port 8000 name:risk]) (push) Has been cancelled
Build and Push / build-services (map[cmd:uvicorn services.symbol_registry.app:app --host 0.0.0.0 --port 8000 name:symbol-registry]) (push) Has been cancelled
Build and Push / build-services (map[cmd:uvicorn services.trading.app:app --host 0.0.0.0 --port 8000 name:trading-engine]) (push) Has been cancelled
Build and Push / build-dashboard (push) Has been cancelled
Build and Push / build-superset (push) Has been cancelled
Build and Push / integration-test (push) Has been cancelled
Build and Push / beta-gate (push) Has been cancelled

Qwen3.5 in thinking mode emits <think>...</think> chain-of-thought
before the actual response. The thesis rewriter was returning the raw
output including the entire reasoning block. Now strips thinking tags
from both Ollama and vLLM response paths.
This commit is contained in:
Celes Renata
2026-04-29 15:25:04 +00:00
parent ac29e62033
commit f9ee1532dc
+17 -2
View File
@@ -336,7 +336,22 @@ async def _call_ollama_thesis(
len(content), len(content),
) )
return content.strip() return _strip_thinking_block(content.strip())
def _strip_thinking_block(text: str) -> str:
"""Remove <think>...</think> reasoning blocks from model output.
Some models (e.g. Qwen) emit chain-of-thought in <think> tags before
the actual response. This strips that prefix to return only the final
thesis text.
"""
import re
# Remove <think>...</think> blocks (greedy, handles multiline)
cleaned = re.sub(r"<think>.*?</think>\s*", "", text, flags=re.DOTALL)
# Also handle unclosed <think> tag (model cut off mid-thought)
cleaned = re.sub(r"<think>.*", "", cleaned, flags=re.DOTALL)
return cleaned.strip()
async def _call_vllm_thesis( async def _call_vllm_thesis(
@@ -388,4 +403,4 @@ async def _call_vllm_thesis(
len(content), len(content),
) )
return content.strip() return _strip_thinking_block(content.strip())