File size: 2,786 Bytes
71a8799
9b5b26a
 
 
c19d193
6aae614
71a8799
 
9b5b26a
 
71a8799
 
9b5b26a
71a8799
 
9b5b26a
 
71a8799
 
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
71a8799
8c01ffb
6aae614
ae7a494
e121372
71a8799
 
 
 
13d500a
8c01ffb
861422e
 
9b5b26a
8c01ffb
8fe992b
71a8799
8c01ffb
 
 
 
71a8799
 
861422e
8fe992b
 
71a8799
 
 
 
 
 
 
 
 
 
 
 
 
9b5b26a
71a8799
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
from smolagents import CodeAgent, HfApiModel, load_tool, tool
import datetime
import requests
import pytz
import yaml
from tools.final_answer import FinalAnswerTool
from scholarly import scholarly
import gradio as gr

@tool
def fetch_latest_research_papers(keywords: list, num_results: int = 5) -> list:
    """Fetches the latest research papers from Google Scholar based on provided keywords.
    Args:
        keywords: A list of keywords to search for relevant papers.
        num_results: The number of papers to fetch (default is 5).
    """
    try:
        query = " ".join(keywords)
        search_results = scholarly.search_pubs(query)
        papers = []
        for i in range(num_results):
            paper = next(search_results, None)
            if paper:
                papers.append({
                    "title": paper['bib'].get('title', 'No Title'),
                    "authors": paper['bib'].get('author', 'Unknown Authors'),
                    "year": paper['bib'].get('pub_year', 'Unknown Year'),
                    "abstract": paper['bib'].get('abstract', 'No Abstract Available'),
                    "link": paper.get('pub_url', 'No Link Available')
                })
        return papers
    except Exception as e:
        return [f"Error fetching research papers: {str(e)}"]

final_answer = FinalAnswerTool()

model = HfApiModel(
    max_tokens=2096,
    temperature=0.5,
    model_id='Qwen/Qwen2.5-Coder-32B-Instruct',
    custom_role_conversions=None,
)

with open("prompts.yaml", 'r') as stream:
    prompt_templates = yaml.safe_load(stream)
    
agent = CodeAgent(
    model=model,
    tools=[final_answer, fetch_latest_research_papers],
    max_steps=6,
    verbosity_level=1,
    grammar=None,
    planning_interval=None,
    name="ScholarAgent",
    description="An AI agent that fetches the latest research papers from Google Scholar based on user-defined keywords and filters.",
    prompt_templates=prompt_templates
)

def search_papers(user_input):
    keywords = user_input.split(",")  # Split input by commas for multiple keywords
    results = fetch_latest_research_papers(keywords, num_results=5)
    return "\n\n".join([f"**Title:** {paper['title']}\n**Authors:** {paper['authors']}\n**Year:** {paper['year']}\n**Abstract:** {paper['abstract']}\n[Read More]({paper['link']})" for paper in results])

# Create a simple Gradio interface
with gr.Blocks() as demo:
    gr.Markdown("# Google Scholar Research Paper Fetcher")
    keyword_input = gr.Textbox(label="Enter keywords (comma-separated)", placeholder="e.g., deep learning, reinforcement learning")
    output_display = gr.Markdown()
    search_button = gr.Button("Search")
    
    search_button.click(search_papers, inputs=[keyword_input], outputs=[output_display])

demo.launch()