Spaces:
Sleeping
Sleeping
File size: 5,100 Bytes
c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 078f638 29dbcf6 a1af291 c5fcc79 29dbcf6 fc945a3 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 c5fcc79 29dbcf6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
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", "")
@tool
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
@tool
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
@tool
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")
@tool
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
)
|