Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import asyncio | |
| from smolagents import CodeAgent, tool, InferenceClientModel | |
| from bs4 import BeautifulSoup | |
| import duckduckgo_search | |
| import os | |
| token = os.environ.get("HUGGINGFACE_TOKEN", "") | |
| def web_search_duckduckgo(query: str) -> list: | |
| """ | |
| Выполняет поиск через DuckDuckGo. | |
| Args: | |
| query (str): поисковый запрос. | |
| Returns: | |
| list: список найденных URL. | |
| """ | |
| results = duckduckgo_search.DDGS().text(query) | |
| urls = [r["href"] for r in results] | |
| return urls | |
| def fetch_html(url: str) -> str: | |
| """ | |
| Загружает HTML по URL. | |
| Args: | |
| url (str): адрес страницы. | |
| Returns: | |
| str: HTML-текст страницы. | |
| """ | |
| import requests | |
| resp = requests.get(url, timeout=10) | |
| resp.raise_for_status() | |
| return resp.text | |
| def extract_text_from_html(html: str) -> str: | |
| """ | |
| Извлекает текст из HTML. | |
| Args: | |
| html (str): HTML-документ. | |
| Returns: | |
| str: текстовое содержимое документа. | |
| """ | |
| from bs4 import BeautifulSoup | |
| soup = BeautifulSoup(html, "html.parser") | |
| return soup.get_text("\n") | |
| def summarize_and_extract_architecture(text: str) -> str: | |
| """ | |
| Анализирует текст статьи и извлекает архитектуру описанной системы. | |
| Args: | |
| text (str): Полный текст статьи или её фрагмент, в котором описана система. | |
| Returns: | |
| str: Структурированное текстовое описание архитектуры системы | |
| (компоненты, связи, потоки данных, этапы обработки). | |
| """ | |
| model = InferenceClientModel(model_id="facebook/bart-large-cnn") | |
| prompt = f""" | |
| Ты — эксперт по анализу научных статей. | |
| Текст статьи: | |
| {text} | |
| Создай краткое содержание, в которое будет входит анализ публикаци – научное направление, цель исследования, использованные методы, полученные результаты | |
| """ | |
| return model(prompt) | |
| model = InferenceClientModel(model_id="Qwen/Qwen2.5-7B-Instruct", token = token) | |
| agent = CodeAgent( | |
| model=model, | |
| tools=[web_search_duckduckgo, fetch_html, extract_text_from_html, summarize_and_extract_architecture], | |
| add_base_tools=False, | |
| ) | |
| def process_article(article_title): | |
| """ | |
| Функция для обработки запроса статьи. | |
| Вызывает мультиагента для поиска и суммаризации. | |
| """ | |
| try: | |
| # Если ваш агент использует асинхронные вызовы | |
| if hasattr(agent, 'run_async'): | |
| # Создаем новую event loop для асинхронного вызова | |
| loop = asyncio.new_event_loop() | |
| asyncio.set_event_loop(loop) | |
| result = loop.run_until_complete(agent.run_async(article_title)) | |
| loop.close() | |
| else: | |
| # Если агент синхронный | |
| result = agent.run(article_title) | |
| return result | |
| except Exception as e: | |
| return f"Произошла ошибка: {str(e)}" | |
| # Альтернативный более простой интерфейс (если нужен минималистичный вариант) | |
| def create_simple_interface(): | |
| """Простой интерфейс для быстрого тестирования""" | |
| def simple_process(article_title): | |
| if not article_title.strip(): | |
| return "Пожалуйста, введите название статьи." | |
| return process_article(article_title) | |
| interface = gr.Interface( | |
| fn=simple_process, | |
| inputs=gr.Textbox( | |
| label="Название статьи", | |
| placeholder="Например: 'Deep Learning in Computer Vision'", | |
| lines=2 | |
| ), | |
| outputs=gr.Textbox( | |
| label="Результат", | |
| lines=15, | |
| placeholder="Результат появится здесь..." | |
| ), | |
| title="📄 Поиск и суммаризация статей", | |
| description="Введите название статьи, и агент найдет ее и создаст краткое содержание.", | |
| examples=[ | |
| ["Neural Networks and Deep Learning"], | |
| ["Renewable Energy Technologies Review"], | |
| ["COVID-19 Vaccines Development and Efficacy"] | |
| ], | |
| theme=gr.themes.Soft() | |
| ) | |
| return interface | |
| if __name__ == "__main__": | |
| demo = create_simple_interface() | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=7860, | |
| share=False, | |
| debug=True | |
| ) | |