fn build_retrieve_and_generate_configuration(
    knowledge_base_id: &str,
    model_arn: &str,
    query: &Query,
) -> Result<RetrieveAndGenerateConfiguration, Error> {
    let q = query.clone();

    let filter = RetrievalFilter::Equals(
        FilterAttribute::builder()
            .key("topic")
            .value(q.topic.into())
            .build()?,
    );

    let vector_search_config = KnowledgeBaseVectorSearchConfiguration::builder()
        .filter(filter)
        .build();

    let retrieval_config = KnowledgeBaseRetrievalConfiguration::builder()
        .vector_search_configuration(vector_search_config)
        .build();

    let rng_config = KnowledgeBaseRetrieveAndGenerateConfiguration::builder()
        .retrieval_configuration(retrieval_config)
        .knowledge_base_id(knowledge_base_id)
        .model_arn(model_arn)
        .build()
        .map_err(Box::new)?;

    let configuration = RetrieveAndGenerateConfiguration::builder()
        .r#type(RetrieveAndGenerateType::KnowledgeBase)
        .knowledge_base_configuration(rng_config)
        .build()
        .map_err(Box::new)?;

    Ok(configuration)
}