nharshavardhana commited on
Commit
816fb5a
·
1 Parent(s): 4e4f624
Files changed (2) hide show
  1. app.py +73 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Optional
2
+ from smolagents import CodeAgent, HfApiModel, tool
3
+ import os
4
+ import requests
5
+ import gradio as gr
6
+
7
+ # Define tool for fetching book recommendations
8
+ @tool
9
+ def get_book_recommendations(prompt: str) -> str:
10
+ """Fetches book recommendations based on user prompt.
11
+ Args:
12
+ prompt: the user's query, e.g., "book about Mars"
13
+ """
14
+ print(f"Received prompt: {prompt}")
15
+ api_key = os.getenv("GOOGLE_BOOKS_API_KEY")
16
+ print(f"Using API Key: {api_key}")
17
+ search_query = prompt
18
+
19
+ url = f"https://www.googleapis.com/books/v1/volumes?q={search_query}&key={api_key}"
20
+ print(f"Request URL: {url}")
21
+ response = requests.get(url)
22
+ print(f"API Response Status Code: {response.status_code}")
23
+
24
+ if response.status_code == 200:
25
+ books = parse_google_books_response(response.json())
26
+ print(f"Parsed Books: {books}")
27
+ top_books = books[:5] # Get top 5 books
28
+ return format_book_recommendations(top_books)
29
+ else:
30
+ return "Error fetching book recommendations."
31
+
32
+ def parse_google_books_response(json_content):
33
+ books = []
34
+ for item in json_content.get('items', []):
35
+ volume_info = item.get('volumeInfo', {})
36
+ title = volume_info.get('title', 'No title available')
37
+ authors = ", ".join(volume_info.get('authors', ['No author available']))
38
+
39
+ books.append({
40
+ "title": title,
41
+ "author": authors
42
+ })
43
+ return books
44
+
45
+ def format_book_recommendations(books):
46
+ formatted_books = []
47
+ for index, book in enumerate(books, start=1):
48
+ formatted_books.append(f"{index}. **{book['title']}** by {book['author']}")
49
+ return "\n".join(formatted_books)
50
+
51
+ # Create the AI agent
52
+ agent = CodeAgent(tools=[get_book_recommendations], model=HfApiModel(), additional_authorized_imports=["requests"])
53
+
54
+ # Define Gradio interface
55
+ def generate_recommendations(query: str) -> str:
56
+ return agent.run(query)
57
+
58
+ description_md = """
59
+ Get top 5 book recommendations based on your query. Simply enter a topic or keyword, and receive a list of books with their names, authors, and links.
60
+ """
61
+ # Create Gradio UI
62
+ iface = gr.Interface(
63
+ fn=generate_recommendations,
64
+ inputs=[
65
+ gr.Textbox(lines=1, placeholder="Enter a topic or keyword", label="Book Topic")
66
+ ],
67
+ outputs="text",
68
+ title="Book Recommendation Engine",
69
+ description=description_md
70
+ )
71
+
72
+ # Launch Gradio UI
73
+ iface.launch(share=True)
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ requests
2
+ gradio
3
+ smolagents