File size: 3,338 Bytes
2e6775a
 
 
 
 
 
 
71a8799
9b5b26a
2e6775a
82728a0
bb8d29a
2e6775a
bb8d29a
2e6775a
 
bb8d29a
2e6775a
 
 
 
bb8d29a
2e6775a
 
 
 
 
 
 
bb8d29a
 
2e6775a
 
bb8d29a
2e6775a
 
bb8d29a
2e6775a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71a8799
041eef2
bb8d29a
 
82728a0
bb8d29a
 
 
 
 
 
 
 
71a8799
 
 
 
 
 
 
 
 
9b5b26a
bb8d29a
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
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 = 1) -> list:
    """Fetches the latest research papers from Google Scholar based on provided keywords."""
    try:
        print(f"DEBUG: Searching papers with keywords: {keywords}")  # Debug input
        query = " ".join(keywords)
        search_results = scholarly.search_pubs(query)
        
        papers = []
        for i in range(num_results):
            paper = next(search_results, None)
            if paper:
                print(f"DEBUG: Found paper - {paper['bib'].get('title', 'No Title')}")  # Debug result
                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')
                })
        if not papers:
            print("DEBUG: No papers found.")
        return papers
    except Exception as e:
        print(f"ERROR: {str(e)}")  # Debug errors
        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
    print(f"DEBUG: Received input keywords - {keywords}")  # Debug user input
    
    results = fetch_latest_research_papers(keywords, num_results=1)
    print(f"DEBUG: Results received - {results}")  # Debug function output
    
    if isinstance(results, list) and results:
        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])
    
    print("DEBUG: No results found.")
    return "No results found. Try different keywords."


# 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])

    

    print("DEBUG: Gradio UI is running. Waiting for user input...")


demo.launch()