Import source: axon/routers/research
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -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),
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user