From 9d0c5768c3dbed5f36579967b07522493401680e Mon Sep 17 00:00:00 2001 From: arsam Date: Fri, 18 Sep 2026 23:06:25 +0330 Subject: [PATCH] Import source: axon/routers/research Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality. --- axon/routers/research.py | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 axon/routers/research.py diff --git a/axon/routers/research.py b/axon/routers/research.py new file mode 100644 index 0000000..e4a83e3 --- /dev/null +++ b/axon/routers/research.py @@ -0,0 +1,49 @@ +import logging +import time + +from fastapi import APIRouter + +from axon.models import ResearchRequest, ResearchResponse, SearchRequest +from axon.routers.search import deduplicate_results, search +from axon.services.synthesizer import generate_sub_queries, synthesize_report + +router = APIRouter() +logger = logging.getLogger(__name__) + + +@router.post("/research", response_model=ResearchResponse) +async def research(request: ResearchRequest) -> ResearchResponse: + start = time.monotonic() + sub_query_count = 5 if request.depth == "deep" else 3 + sub_queries = await generate_sub_queries(request.query, sub_query_count) + + search_requests = [ + SearchRequest( + query=sub_query, + max_results=request.max_results_per_query, + search_depth=request.search_depth, + include_answer=False, + include_raw_content=True, + topic="general", + ) + for sub_query in sub_queries + ] + + all_results = [] + for search_request in search_requests: + try: + response = await search(search_request) + all_results.extend(response.results) + except Exception as exc: + logger.warning("Research sub-search failed: %s", exc) + + sources = deduplicate_results(all_results) + report = await synthesize_report(request.query, sources, request.output_format) + + return ResearchResponse( + query=request.query, + report=report, + sources=sources, + sub_queries=sub_queries, + response_time=round(time.monotonic() - start, 3), + )