| from typing import List | |
| from openai import OpenAI | |
| def generate_answer(community_summaries: List[str], query: str, client: OpenAI) -> str: | |
| """ | |
| Generate a final answer by combining the answers from different communities. | |
| Args: | |
| community_summaries: List of summaries for each community | |
| query: Query to be answered | |
| Returns: | |
| str: Final answer generated by combining the answers from different communities.""" | |
| intermediate_answers = [] | |
| for index, summary in enumerate(community_summaries): | |
| print(f"Answering community {index+1}/{len(community_summaries)}:") | |
| response = client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": "Answer the following query based on the provided summary.", | |
| }, | |
| {"role": "user", "content": f"Query: {query} Summary: {summary}"}, | |
| ], | |
| ) | |
| print("Intermediate answer:", response.choices[0].message.content) | |
| intermediate_answers.append(response.choices[0].message.content) | |
| final_response = client.chat.completions.create( | |
| model="gpt-4o", | |
| messages=[ | |
| { | |
| "role": "system", | |
| "content": "Combine these answers into a final response with important details and examples from these answers.", | |
| }, | |
| { | |
| "role": "user", | |
| "content": f"Intermediate answers: {intermediate_answers}", | |
| }, | |
| ], | |
| ) | |
| final_answer = final_response.choices[0].message.content | |
| return final_answer | |