Spaces:
Sleeping
Sleeping
| import logging | |
| from textwrap import dedent | |
| from agno.models.openai import OpenAILike | |
| from agno.tools.arxiv import ArxivTools | |
| from agno.tools.pubmed import PubmedTools | |
| from agno.agent import Agent | |
| import os | |
| import random | |
| API_KEYS = [ | |
| os.getenv("SK1"), | |
| os.getenv("SK2"), | |
| os.getenv("SK3"), | |
| os.getenv("SK4"), | |
| os.getenv("SK5") | |
| ] | |
| class ModelHandler: | |
| def __init__(self): | |
| """Initialize the model handler""" | |
| self.model = None | |
| self.tokenizer = None | |
| self.translator = None | |
| self.researcher = None | |
| self.summarizer = None | |
| self.presenter = None | |
| self._initialize_model() | |
| def _initialize_model(self): | |
| """Initialize model and tokenizer""" | |
| self.translator = Agent( | |
| name="Translator", | |
| role="You will translate the query to English", | |
| model=OpenAILike( | |
| api_key=str(random.choice(API_KEYS)), | |
| base_url="https://api.moonshot.cn/v1", | |
| id="moonshot-v1-8k", | |
| instructions=dedent("""\ | |
| Translate the query to English | |
| """) | |
| ) | |
| ) | |
| self.researcher = Agent( | |
| name="Researcher", | |
| role="You are a research scholar who specializes in autism research.", | |
| model=OpenAILike( | |
| api_key=str(random.choice(API_KEYS)), | |
| base_url="https://api.moonshot.cn/v1", | |
| id="moonshot-v1-8k", | |
| instructions=dedent("""\ | |
| - You have ArxivTools and PubmedTools at your disposal. Use them to find relevant papers for the question. | |
| - You need to understand the context of the question to provide the best answer based on your tools. | |
| - Be precise and provide just enough information to be useful. | |
| - You must cite the sources used in your answer. | |
| - You must create an accessible summary. | |
| - The content must be for people without autism knowledge. | |
| - Focus in the main findings of the paper taking in consideration the question. | |
| - The answer must be brief. | |
| """), | |
| show_tool_calls=True | |
| ), | |
| tools=[ArxivTools(), PubmedTools()] | |
| ) | |
| self.summarizer = Agent( | |
| name="Summarizer", | |
| role="You are a specialist in summarizing research papers for people without autism knowledge.", | |
| model=OpenAILike( | |
| api_key=str(random.choice(API_KEYS)), | |
| base_url="https://api.moonshot.cn/v1", | |
| id="moonshot-v1-8k", | |
| instructions=dedent("""\ | |
| - You must provide just enough information to be useful | |
| - You must cite the sources used in your answer. | |
| - You must be clear and concise. | |
| - You must create an accessible summary. | |
| - The content must be for people without autism knowledge. | |
| - Focus in the main findings of the paper taking in consideration the question. | |
| - The answer must be brief. | |
| - Remove everything related to the run itself like: 'Running: transfer_' just use plain text | |
| - You must use the language provided by the user to present the results. | |
| - Add references to the sources used in the answer. | |
| - Add emojis to make the presentation more interactive. | |
| - Translate the answer to Portuguese. | |
| """), | |
| ) | |
| ) | |
| self.presenter = Agent( | |
| name="Presenter", | |
| role="You are a professional researcher who presents the results of the research.", | |
| model=OpenAILike( | |
| api_key=str(random.choice(API_KEYS)), | |
| base_url="https://api.moonshot.cn/v1", | |
| id="moonshot-v1-8k", | |
| instructions=dedent("""\ | |
| - You are multilingual | |
| - You must present the results in a clear and concise manner. | |
| - Clean up the presentation to make it more readable. | |
| - Remove unnecessary information. | |
| - Remove everything related to the run itself like: 'Running: transfer_', just use plain text | |
| - You must use the language provided by the user to present the results. | |
| - Add references to the sources used in the answer. | |
| - Add emojis to make the presentation more interactive. | |
| - Translate the answer to Portuguese. | |
| """), | |
| ) | |
| ) | |
| def generate_answer(self, query: str) -> str: | |
| try: | |
| translator = self.translator.run(query, stream=False) | |
| logging.info(f"Translated query") | |
| research = self.researcher.run(translator.content, stream=False) | |
| logging.info(f"Generated research") | |
| summary = self.summarizer.run(research.content, stream=False) | |
| logging.info(f"Generated summary") | |
| presentation = self.presenter.run(summary.content, stream=False) | |
| logging.info(f"Generated presentation") | |
| if not presentation.content: | |
| return self._get_fallback_response() | |
| return presentation.content | |
| except Exception as e: | |
| logging.error(f"Error generating answer: {str(e)}") | |
| return self._get_fallback_response() | |
| def _get_fallback_response() -> str: | |
| """Provide a friendly, helpful fallback response""" | |
| return """ | |
| Peço descula, mas encontrei um erro ao gerar a resposta. Tente novamente ou refaça a sua pergunta. | |
| """ |