classPromptComponent(QueryComponent):"""Prompt component."""prompt:BasePromptTemplate=Field(...,description="Prompt")llm:Optional[BaseLLM]=Field(default=None,description="LLM to use for formatting prompt.")format_messages:bool=Field(default=False,description="Whether to format the prompt into a list of chat messages.",)classConfig:arbitrary_types_allowed=Truedefset_callback_manager(self,callback_manager:Any)->None:"""Set callback manager."""def_validate_component_inputs(self,input:Dict[str,Any])->Dict[str,Any]:"""Validate component inputs during run_component."""keys=list(input.keys())forkinkeys:input[k]=validate_and_convert_stringable(input[k])returninputdef_run_component(self,**kwargs:Any)->Any:"""Run component."""ifself.format_messages:output:Union[str,List[ChatMessage]]=self.prompt.format_messages(llm=self.llm,**kwargs)else:output=self.prompt.format(llm=self.llm,**kwargs)return{"prompt":output}asyncdef_arun_component(self,**kwargs:Any)->Any:"""Run component."""# NOTE: no native async for promptreturnself._run_component(**kwargs)@propertydefinput_keys(self)->InputKeys:"""Input keys."""returnInputKeys.from_keys(set(self.prompt.template_vars)-set(self.prompt.kwargs))@propertydefoutput_keys(self)->OutputKeys:"""Output keys."""returnOutputKeys.from_keys({"prompt"})