Ferocious0xide commited on
Commit
df2f655
·
verified ·
1 Parent(s): 48f0e6a

Update tools/book_tool.py

Browse files
Files changed (1) hide show
  1. tools/book_tool.py +37 -17
tools/book_tool.py CHANGED
@@ -6,9 +6,9 @@ class BookSearchTool(Tool):
6
  name = "search_books"
7
  description = "Search for books using the Open Library API"
8
  inputs = {'query': {'type': 'string', 'description': 'The search query to find books.'}}
9
- output_type = List[Dict]
10
 
11
- def forward(self, query: str) -> List[Dict]:
12
  try:
13
  url = f"https://openlibrary.org/search.json?q={query}&limit=5"
14
  response = requests.get(url)
@@ -25,32 +25,52 @@ class BookSearchTool(Tool):
25
  'key': book.get('key', '')
26
  }
27
  results.append(result)
28
- return results
 
 
 
 
 
 
 
 
 
 
29
  except Exception as e:
30
- return [{"error": f"Error searching books: {str(e)}"}]
31
 
32
  class BookDetailsTool(Tool):
33
  name = "get_book_details"
34
  description = "Get detailed information about a specific book from Open Library"
35
  inputs = {'book_key': {'type': 'string', 'description': 'The Open Library key for the book.'}}
36
- output_type = Dict
37
 
38
- def forward(self, book_key: str) -> Dict:
39
  try:
40
  url = f"https://openlibrary.org{book_key}.json"
41
  response = requests.get(url)
42
  response.raise_for_status()
43
  data = response.json()
44
 
45
- return {
46
- 'title': data.get('title', 'Unknown Title'),
47
- 'description': data.get('description', {}).get('value', 'No description available')
48
- if isinstance(data.get('description'), dict)
49
- else data.get('description', 'No description available'),
50
- 'subjects': data.get('subjects', [])[:5],
51
- 'first_sentence': data.get('first_sentence', {}).get('value', 'Not available')
52
- if isinstance(data.get('first_sentence'), dict)
53
- else data.get('first_sentence', 'Not available')
54
- }
 
 
 
 
 
 
 
 
 
 
55
  except Exception as e:
56
- return {"error": f"Error fetching book details: {str(e)}"}
 
6
  name = "search_books"
7
  description = "Search for books using the Open Library API"
8
  inputs = {'query': {'type': 'string', 'description': 'The search query to find books.'}}
9
+ output_type = "string"
10
 
11
+ def forward(self, query: str) -> str:
12
  try:
13
  url = f"https://openlibrary.org/search.json?q={query}&limit=5"
14
  response = requests.get(url)
 
25
  'key': book.get('key', '')
26
  }
27
  results.append(result)
28
+
29
+ # Format results as a string
30
+ formatted_results = "## Book Search Results\n\n"
31
+ for book in results:
32
+ formatted_results += f"### {book['title']}\n"
33
+ formatted_results += f"- Author: {book['author']}\n"
34
+ formatted_results += f"- Year: {book['first_publish_year']}\n"
35
+ formatted_results += f"- Subjects: {', '.join(book['subject'])}\n\n"
36
+
37
+ return formatted_results
38
+
39
  except Exception as e:
40
+ return f"Error searching books: {str(e)}"
41
 
42
  class BookDetailsTool(Tool):
43
  name = "get_book_details"
44
  description = "Get detailed information about a specific book from Open Library"
45
  inputs = {'book_key': {'type': 'string', 'description': 'The Open Library key for the book.'}}
46
+ output_type = "string"
47
 
48
+ def forward(self, book_key: str) -> str:
49
  try:
50
  url = f"https://openlibrary.org{book_key}.json"
51
  response = requests.get(url)
52
  response.raise_for_status()
53
  data = response.json()
54
 
55
+ description = data.get('description', {}).get('value', 'No description available') \
56
+ if isinstance(data.get('description'), dict) \
57
+ else data.get('description', 'No description available')
58
+
59
+ subjects = data.get('subjects', [])[:5]
60
+ first_sentence = data.get('first_sentence', {}).get('value', 'Not available') \
61
+ if isinstance(data.get('first_sentence'), dict) \
62
+ else data.get('first_sentence', 'Not available')
63
+
64
+ # Format as a string
65
+ details = f"## {data.get('title', 'Unknown Title')}\n\n"
66
+ details += "### Description\n"
67
+ details += f"{description}\n\n"
68
+ details += "### Subjects\n"
69
+ details += ', '.join(subjects) + "\n\n"
70
+ details += "### First Sentence\n"
71
+ details += f"{first_sentence}\n"
72
+
73
+ return details
74
+
75
  except Exception as e:
76
+ return f"Error fetching book details: {str(e)}"