async fn query_knowledge_base( event: Request, bedrock_agent_runtime_client: &aws_sdk_bedrockagentruntime::Client, knowledge_base_id: &str, model_arn: &str, ) -> Result<Response<Body>, Error> { //request validation, redacted... let configuration = build_retrieve_and_generate_configuration(knowledge_base_id, model_arn, &query)?; let input = RetrieveAndGenerateInput::builder() .text(query.input) .build()?; let result = bedrock_agent_runtime_client .retrieve_and_generate() .retrieve_and_generate_configuration(configuration) .input(input) .send() .await?; if result.output.is_none() { return Ok(Response::builder() .status(404) .header("content-type", "application/json") .body("Not found".into()) .map_err(Box::new)?); } let (output_text, sources) = unwrap_result(result); let resp = Response::builder() .status(200) .header("content-type", "application/json") .body( json!({ "output": output_text, "sources": sources }) .to_string() .into(), ) .map_err(Box::new)?; Ok(resp) }