classCustomQueryEngine(BaseModel,BaseQueryEngine):""" Custom query engine. Subclasses can define additional attributes as Pydantic fields. Subclasses must implement the `custom_query` method, which takes a query string and returns either a Response object or a string as output. They can optionally implement the `acustom_query` method for async support. """model_config=ConfigDict(arbitrary_types_allowed=True)callback_manager:CallbackManager=Field(default_factory=lambda:CallbackManager([]),exclude=True)def_get_prompt_modules(self)->PromptMixinType:"""Get prompt sub-modules."""return{}defquery(self,str_or_query_bundle:QueryType)->RESPONSE_TYPE:withself.callback_manager.as_trace("query"):# if query bundle, just run the queryifisinstance(str_or_query_bundle,QueryBundle):query_str=str_or_query_bundle.query_strelse:query_str=str_or_query_bundleraw_response=self.custom_query(query_str)return(Response(raw_response)ifisinstance(raw_response,str)elseraw_response)asyncdefaquery(self,str_or_query_bundle:QueryType)->RESPONSE_TYPE:withself.callback_manager.as_trace("query"):ifisinstance(str_or_query_bundle,QueryBundle):query_str=str_or_query_bundle.query_strelse:query_str=str_or_query_bundleraw_response=awaitself.acustom_query(query_str)return(Response(raw_response)ifisinstance(raw_response,str)elseraw_response)@abstractmethoddefcustom_query(self,query_str:str)->STR_OR_RESPONSE_TYPE:"""Run a custom query."""asyncdefacustom_query(self,query_str:str)->STR_OR_RESPONSE_TYPE:"""Run a custom query asynchronously."""# by default, just run the synchronous versionreturnself.custom_query(query_str)def_query(self,query_bundle:QueryBundle)->RESPONSE_TYPE:raiseNotImplementedError("This query engine does not support _query.")asyncdef_aquery(self,query_bundle:QueryBundle)->RESPONSE_TYPE:raiseNotImplementedError("This query engine does not support _aquery.")
Source code in llama-index-core/llama_index/core/query_engine/custom.py
68697071
asyncdefacustom_query(self,query_str:str)->STR_OR_RESPONSE_TYPE:"""Run a custom query asynchronously."""# by default, just run the synchronous versionreturnself.custom_query(query_str)