Spaces:
Sleeping
Sleeping
| import mimetypes | |
| from transformers import pipeline | |
| from tools.asr_tool import transcribe_audio | |
| from tools.excel_tool import analyze_excel | |
| from tools.search_tool import search_duckduckgo | |
| class GaiaAgent: | |
| def __init__(self): | |
| print("Loading model...") | |
| self.llm = pipeline("text-generation", model="mistralai/Mistral-7B-Instruct-v0.2", max_new_tokens=512, device="cpu") | |
| def __call__(self, question: str, files: list = None): | |
| trace = [] | |
| context = "" | |
| if files: | |
| for file in files: | |
| mime, _ = mimetypes.guess_type(file.name) | |
| if mime and mime.startswith("audio"): | |
| transcription = transcribe_audio(file.name) | |
| trace.append(f"Transcribed audio: {transcription}") | |
| context += f"\nTranscription: {transcription}" | |
| elif mime and ("spreadsheet" in mime or file.name.endswith(".xlsx")): | |
| result = analyze_excel(file.name) | |
| trace.append(f"Excel analysis: {result}") | |
| context += f"\nSpreadsheet data: {result}" | |
| if "http" in question or "Wikipedia" in question or "YouTube" in question or "search" in question.lower(): | |
| trace.append("Performing DuckDuckGo search...") | |
| search_result = search_duckduckgo(question) | |
| trace.append(f"Summary from search: {search_result}") | |
| context += f"\nSearch Result: {search_result}" | |
| # Include the original question | |
| prompt = f""" | |
| Answer the question based on the context below. | |
| Context: {context} | |
| Question: {question} | |
| Answer: | |
| """ | |
| response = self.llm(prompt)[0]['generated_text'].split("Answer:")[-1].strip() | |
| trace.append(response) | |
| return response, "\n".join(trace) | |