[docs]asyncdeflist_active_queries_for_task(task_id:int)->List[SearchQuery]:"""List active search queries for a task. :param task_id: Task ID :returns: List of SearchQuery instances """asyncwithSessionLocal()assession:result=awaitsession.execute(select(SearchQuery).where(and_(SearchQuery.task_id==task_id,SearchQuery.status=="active")).order_by(SearchQuery.last_run_at.is_(None).desc(),SearchQuery.last_run_at.asc()))returnlist(result.scalars().all())
[docs]asyncdefcreate_search_query(*,task_id:int,query_text:str,rationale:Optional[str]=None,categories:Optional[List[str]]=None,time_from:Optional[str]=None,time_to:Optional[str]=None,status:str="active",)->SearchQuery:"""Create a new search query. :param task_id: Task ID :param query_text: Search query text :param rationale: Query rationale :param categories: Search categories :param time_from: Time from :param time_to: Time to :param status: Query status :returns: SearchQuery instance """asyncwithSessionLocal()assession:q=SearchQuery(task_id=task_id,query_text=query_text,rationale=rationale,categories=json.dumps(categoriesor[]),time_from=time_from,time_to=time_to,status=status,)session.add(q)awaitsession.commit()awaitsession.refresh(q)returnq
[docs]asyncdefrecord_finding(task_id:int,paper_id:int,relevance:float,summary:Optional[str])->Finding:"""Record a research finding. :param task_id: Task ID :param paper_id: Paper ID :param relevance: Relevance score :param summary: Finding summary :returns: Finding instance """asyncwithSessionLocal()assession:f=Finding(task_id=task_id,paper_id=paper_id,relevance=relevance,summary=summary)session.add(f)awaitsession.commit()awaitsession.refresh(f)returnf