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)
}