(self)
| 350 | raise |
| 351 | |
| 352 | async def prepare(self): |
| 353 | tasks = [] |
| 354 | |
| 355 | tasks.append(asyncio.create_task(self.decontextualizeQuery().do())) |
| 356 | tasks.append(asyncio.create_task(fastTrack.FastTrack(self).do())) |
| 357 | tasks.append(asyncio.create_task(query_rewrite.QueryRewrite(self).do())) |
| 358 | |
| 359 | # Check if a specific tool is requested via the 'tool' parameter |
| 360 | requested_tool = get_param(self.query_params, "tool", str, None) |
| 361 | if requested_tool: |
| 362 | # Skip tool selection and use the requested tool directly |
| 363 | # Set tool_routing_results to use the specified tool |
| 364 | self.tool_routing_results = [{ |
| 365 | "tool": type('Tool', (), {'name': requested_tool, 'handler_class': None})(), |
| 366 | "score": 100, |
| 367 | "result": {"score": 100, "justification": f"Tool {requested_tool} specified in request"} |
| 368 | }] |
| 369 | else: |
| 370 | # Normal tool selection |
| 371 | tasks.append(asyncio.create_task(router.ToolSelector(self).do())) |
| 372 | |
| 373 | # tasks.append(asyncio.create_task(analyze_query.DetectItemType(self).do())) |
| 374 | # tasks.append(asyncio.create_task(analyze_query.DetectMultiItemTypeQuery(self).do())) |
| 375 | # tasks.append(asyncio.create_task(analyze_query.DetectQueryType(self).do())) |
| 376 | # tasks.append(asyncio.create_task(relevance_detection.RelevanceDetection(self).do())) |
| 377 | # tasks.append(asyncio.create_task(memory.Memory(self).do())) |
| 378 | # tasks.append(asyncio.create_task(required_info.RequiredInfo(self).do())) |
| 379 | |
| 380 | try: |
| 381 | if CONFIG.should_raise_exceptions(): |
| 382 | # In testing/development mode, raise exceptions to fail tests properly |
| 383 | await asyncio.gather(*tasks) |
| 384 | else: |
| 385 | # In production mode, catch exceptions to avoid crashing |
| 386 | await asyncio.gather(*tasks, return_exceptions=True) |
| 387 | except Exception: |
| 388 | if CONFIG.should_raise_exceptions(): |
| 389 | raise # Re-raise in testing/development mode |
| 390 | finally: |
| 391 | self.pre_checks_done_event.set() # Signal completion regardless of errors |
| 392 | self.state.set_pre_checks_done() |
| 393 | |
| 394 | # Wait for retrieval to be done |
| 395 | if not self.retrieval_done_event.is_set(): |
| 396 | # Skip retrieval for sites without embeddings |
| 397 | if not site_supports_standard_retrieval(self.site): |
| 398 | self.final_retrieved_items = [] |
| 399 | self.retrieval_done_event.set() |
| 400 | else: |
| 401 | items = await search( |
| 402 | self.decontextualized_query, |
| 403 | self.site, |
| 404 | query_params=self.query_params, |
| 405 | handler=self |
| 406 | ) |
| 407 | self.final_retrieved_items = items |
| 408 | self.retrieval_done_event.set() |
| 409 |
no test coverage detected