Squash Odysseus development history

This commit is contained in:
pewdiepie-archdaemon
2026-09-11 06:04:19 +00:00
parent e5c99a5eee
commit 6ee6502010
2050 changed files with 538359 additions and 57745 deletions
+63 -13
View File
@@ -1,11 +1,16 @@
# services/research/service.py
"""Research service — deep research with LLM-in-the-loop."""
import re
from dataclasses import dataclass, field
from typing import List, Optional, Callable
from .research_handler import ResearchHandler
# Markdown source links emitted by ResearchHandler._format_research_report,
# e.g. "- [Some Title](https://example.com/page)".
_SOURCE_LINK_RE = re.compile(r"^\s*-\s*\[(?P<title>[^\]]*)\]\((?P<url>[^)]+)\)\s*$")
@dataclass
class ResearchSource:
@@ -75,26 +80,71 @@ class ResearchService:
duration = time.time() - start
# Parse result into structured format
sources = [
ResearchSource(
url=s.get("url", ""),
title=s.get("title", ""),
snippet=s.get("snippet", ""),
relevance=s.get("relevance", 0.0),
# call_research_service returns a formatted markdown report string
# (see ResearchHandler.call_research_service -> _format_research_report),
# not a dict. Treat it as such; tolerate an unexpected dict/None defensively.
if isinstance(result, dict):
sources = [
ResearchSource(
url=s.get("url", ""),
title=s.get("title", ""),
snippet=s.get("snippet", ""),
relevance=s.get("relevance", 0.0),
)
for s in result.get("sources", [])
if isinstance(s, dict)
]
return ResearchResult(
query=topic,
summary=result.get("summary", result.get("answer", "")),
sources=sources,
sections=result.get("sections", []),
tokens_used=result.get("tokens_used", 0),
duration_seconds=duration,
)
for s in result.get("sources", [])
]
report = result if isinstance(result, str) else ""
return ResearchResult(
query=topic,
summary=result.get("summary", result.get("answer", "")),
sources=sources,
sections=result.get("sections", []),
tokens_used=result.get("tokens_used", 0),
summary=report,
sources=self._parse_sources(report),
duration_seconds=duration,
)
@staticmethod
def _parse_sources(report: str) -> List[ResearchSource]:
"""Extract sources from the markdown ### Sources section of a report.
ResearchHandler emits one ``- [title](url)`` link per deduplicated
finding under a ``### Sources`` heading. Parse only that section so
inline links elsewhere in the body are not mistaken for sources.
"""
if not report:
return []
sources: List[ResearchSource] = []
seen = set()
in_sources = False
for line in report.splitlines():
stripped = line.strip()
if stripped.startswith("###") or stripped.startswith("##"):
in_sources = stripped.lower().lstrip("#").strip() == "sources"
continue
if not in_sources:
continue
match = _SOURCE_LINK_RE.match(line)
if not match:
continue
url = match.group("url").strip()
if not url or url in seen:
continue
seen.add(url)
sources.append(
# snippet is required on ResearchSource; markdown source links
# carry no snippet, so default to empty (matches the dict path).
ResearchSource(url=url, title=match.group("title").strip(), snippet="")
)
return sources
def start_background(
self,
session_id: str,