Edmond7 commited on
Commit
dcdcd81
·
verified ·
1 Parent(s): e00783e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +80 -1
app.py CHANGED
@@ -11,6 +11,7 @@ import random
11
  import textract
12
  import boto3
13
  from botocore.exceptions import NoCredentialsError
 
14
 
15
  app = FastAPI()
16
 
@@ -181,4 +182,82 @@ async def extract_text(file: UploadFile, api_key: str = Depends(verify_api_key))
181
  if not result['success']:
182
  raise HTTPException(status_code=500, detail=result['error'])
183
  return {"extracted_text": result['extracted_text']}
184
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
11
  import textract
12
  import boto3
13
  from botocore.exceptions import NoCredentialsError
14
+ from duckduckgo_search import DDGS
15
 
16
  app = FastAPI()
17
 
 
182
  if not result['success']:
183
  raise HTTPException(status_code=500, detail=result['error'])
184
  return {"extracted_text": result['extracted_text']}
185
+
186
+ def web_search(query: str, num_results: int = 5) -> dict:
187
+ """
188
+ Perform a web search using DuckDuckGo and return the results.
189
+ Args:
190
+ query (str): The search query.
191
+ num_results (int, optional): The number of results to return. Defaults to 5.
192
+ Returns:
193
+ dict: A dictionary containing the success status and either the search results or an error message.
194
+ """
195
+ try:
196
+ with DDGS() as ddgs:
197
+ results = list(ddgs.text(query, max_results=num_results))
198
+ formatted_results = [
199
+ {
200
+ 'title': result['title'],
201
+ 'body': result['body'],
202
+ 'href': result['href']
203
+ }
204
+ for result in results
205
+ ]
206
+ return {
207
+ 'success': True,
208
+ 'results': formatted_results
209
+ }
210
+ except Exception as e:
211
+ logger.error(f"Error performing web search: {e}")
212
+ return {
213
+ 'success': False,
214
+ 'error': f"Error performing web search: {str(e)}"
215
+ }
216
+
217
+ def image_search(query: str, num_results: int = 5) -> dict:
218
+ """
219
+ Perform an image search using DuckDuckGo and return the results.
220
+ Args:
221
+ query (str): The search query.
222
+ num_results (int, optional): The number of results to return. Defaults to 5.
223
+ Returns:
224
+ dict: A dictionary containing the success status and either the image search results or an error message.
225
+ """
226
+ try:
227
+ with DDGS() as ddgs:
228
+ results = list(ddgs.images(query, max_results=num_results))
229
+ formatted_results = [
230
+ {
231
+ 'title': result['title'],
232
+ 'image_url': result['image'],
233
+ 'thumbnail_url': result['thumbnail'],
234
+ 'source_url': result['url'],
235
+ 'width': result['width'],
236
+ 'height': result['height']
237
+ }
238
+ for result in results
239
+ ]
240
+ return {
241
+ 'success': True,
242
+ 'results': formatted_results
243
+ }
244
+ except Exception as e:
245
+ logger.error(f"Error performing image search: {e}")
246
+ return {
247
+ 'success': False,
248
+ 'error': f"Error performing image search: {str(e)}"
249
+ }
250
+
251
+ @app.get("/web-search/")
252
+ async def web_search_endpoint(query: str, num_results: int = 5, api_key: str = Depends(verify_api_key)):
253
+ result = web_search(query, num_results)
254
+ if not result['success']:
255
+ raise HTTPException(status_code=500, detail=result['error'])
256
+ return result
257
+
258
+ @app.get("/image-search/")
259
+ async def image_search_endpoint(query: str, num_results: int = 5, api_key: str = Depends(verify_api_key)):
260
+ result = image_search(query, num_results)
261
+ if not result['success']:
262
+ raise HTTPException(status_code=500, detail=result['error'])
263
+ return result