RafaelAgreda commited on
Commit
3ce2e03
·
verified ·
1 Parent(s): 0bbdf93

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -25
app.py CHANGED
@@ -18,10 +18,13 @@ import uuid
18
  # Google Books API setup with Service Account
19
  json_key_path: str = "/home/user/app/audiobookagent-aaf910cd6329.json"
20
  os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_key_path
21
- credentials = service_account.Credentials.from_service_account_file(
22
- json_key_path,
23
- scopes=["https://www.googleapis.com/auth/books"]
24
- )
 
 
 
25
  books_service = build("books", "v1", credentials=credentials)
26
 
27
 
@@ -40,7 +43,7 @@ def search_audiobooks(topic: str, limit: int = 3) -> list[dict[str, any]]:
40
  List[Dict[str, Any]]: List of audiobook metadata dictionaries.
41
  """
42
  audiobooks: list[dict[str, any]] = []
43
- queries: list[str] = [f"audiobook {topic}", f"{topic}", f"subject:{topic} audiobook"] # Broader queries
44
 
45
  for query in queries:
46
  try:
@@ -50,37 +53,43 @@ def search_audiobooks(topic: str, limit: int = 3) -> list[dict[str, any]]:
50
  printType="books"
51
  )
52
  response: dict[str, any] = request.execute()
53
- print(f"API response for query '{query}': {response.get('items', [])}") # Debug output
 
54
 
55
  for item in response.get("items", []):
56
  volume_info: dict[str, any] = item.get("volumeInfo", {})
57
  categories: list[str] = volume_info.get("categories", [])
58
- title: str = volume_info.get("title", "").lower()
59
- description: str = volume_info.get("description", "").lower()
60
- # Check if audiobook (based on categories, title, or description)
61
- if ("audiobook" in title or
62
- "audiobook" in description or
63
- any("audiobook" in cat.lower() for cat in categories)):
64
- audiobooks.append({
65
- "title": volume_info.get("title", "Unknown"),
66
- "author": ", ".join(volume_info.get("authors", ["Unknown"])),
67
- "categories": ", ".join(categories or ["Unknown"]),
68
- "url": volume_info.get("canonicalVolumeLink", "#"),
69
- "estimated_minutes": volume_info.get("pageCount", 180) # Estimate: 1 page ≈ 1 minute
70
- })
 
71
  if audiobooks:
72
- print(f"Found {len(audiobooks)} audiobooks for query '{query}'") # Debug output
73
- break # Exit if results found
 
74
  except HttpError as e:
75
- print(f"Google Books API error for query '{query}': {e}")
 
76
  continue
77
  except Exception as e:
78
- print(f"Unexpected error in search_audiobooks for query '{query}': {e}")
 
79
  continue
80
 
81
  if not audiobooks:
82
- print(f"No audiobooks found for topic: {topic} across all queries")
83
- return audiobooks[:limit] # Ensure no more than limit results
 
84
 
85
 
86
  @tool
 
18
  # Google Books API setup with Service Account
19
  json_key_path: str = "/home/user/app/audiobookagent-aaf910cd6329.json"
20
  os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = json_key_path
21
+ try:
22
+ credentials = service_account.Credentials.from_service_account_file(
23
+ json_key_path,
24
+ scopes=["https://www.googleapis.com/auth/books"]
25
+ )
26
+ except FileNotFoundError:
27
+ raise FileNotFoundError(f"JSON key file not found at {json_key_path}. Please upload it to /app/.")
28
  books_service = build("books", "v1", credentials=credentials)
29
 
30
 
 
43
  List[Dict[str, Any]]: List of audiobook metadata dictionaries.
44
  """
45
  audiobooks: list[dict[str, any]] = []
46
+ queries: list[str] = [f"{topic}", f"audiobook {topic}", "fiction audiobook"] # Broad queries
47
 
48
  for query in queries:
49
  try:
 
53
  printType="books"
54
  )
55
  response: dict[str, any] = request.execute()
56
+ with open("debug_log.txt", "a") as f:
57
+ f.write(f"API response for query '{query}': {json.dumps(response.get('items', []), indent=2)}\n")
58
 
59
  for item in response.get("items", []):
60
  volume_info: dict[str, any] = item.get("volumeInfo", {})
61
  categories: list[str] = volume_info.get("categories", [])
62
+ title: str = volume_info.get("title", "")
63
+ description: str = volume_info.get("description", "")
64
+ with open("debug_log.txt", "a") as f:
65
+ f.write(f"Item: title='{title}', categories={categories}, description='{description[:100]}...'\n")
66
+
67
+ # No filtering: return all results for debugging
68
+ audiobooks.append({
69
+ "title": title or "Unknown",
70
+ "author": ", ".join(volume_info.get("authors", ["Unknown"])),
71
+ "categories": ", ".join(categories or ["Unknown"]),
72
+ "url": volume_info.get("canonicalVolumeLink", "#"),
73
+ "estimated_minutes": volume_info.get("pageCount", 180)
74
+ })
75
+
76
  if audiobooks:
77
+ with open("debug_log.txt", "a") as f:
78
+ f.write(f"Found {len(audiobooks)} audiobooks for query '{query}'\n")
79
+ break
80
  except HttpError as e:
81
+ with open("debug_log.txt", "a") as f:
82
+ f.write(f"Google Books API error for query '{query}': {e}\n")
83
  continue
84
  except Exception as e:
85
+ with open("debug_log.txt", "a") as f:
86
+ f.write(f"Unexpected error in search_audiobooks for query '{query}': {e}\n")
87
  continue
88
 
89
  if not audiobooks:
90
+ with open("debug_log.txt", "a") as f:
91
+ f.write(f"No audiobooks found for topic: {topic} across all queries\n")
92
+ return audiobooks[:limit]
93
 
94
 
95
  @tool