Chrunos commited on
Commit
3862a20
·
verified ·
1 Parent(s): ebb5e1e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +48 -2
app.py CHANGED
@@ -69,11 +69,15 @@ app = FastAPI(
69
  def is_video_url_for_gemini(url: Optional[str]) -> bool:
70
  if not url:
71
  return False
 
72
  youtube_regex = (
73
  r'(https_?://)?(www\.)?'
74
- '(youtube|youtu|youtube-nocookie)\.(com|be)/'
75
- '(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})')
 
 
76
  googleusercontent_youtube_regex = r'https_?://googleusercontent\.com/youtube\.com/\w+'
 
77
  return re.match(youtube_regex, url) is not None or \
78
  re.match(googleusercontent_youtube_regex, url) is not None
79
 
@@ -227,6 +231,48 @@ async def direct_chat(payload: ChatPayload):
227
  }
228
  )
229
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
 
231
  @app.get("/gemini/task/{task_id}", response_model=TaskStatusResponse)
232
  async def get_gemini_task_status(task_id: str = Path(..., description="The ID of the task to retrieve")):
 
69
  def is_video_url_for_gemini(url: Optional[str]) -> bool:
70
  if not url:
71
  return False
72
+ # Use raw strings (r"...") for regular expressions to avoid SyntaxWarnings
73
  youtube_regex = (
74
  r'(https_?://)?(www\.)?'
75
+ r'(youtube|youtu|youtube-nocookie)\.(com|be)/' # Changed to raw string
76
+ r'(watch\?v=|embed/|v/|.+\?v=)?([^&=%\?]{11})' # Changed to raw string
77
+ )
78
+ # This regex was likely fine as it didn't have ambiguous escapes, but good practice to make it raw too
79
  googleusercontent_youtube_regex = r'https_?://googleusercontent\.com/youtube\.com/\w+'
80
+
81
  return re.match(youtube_regex, url) is not None or \
82
  re.match(googleusercontent_youtube_regex, url) is not None
83
 
 
231
  }
232
  )
233
 
234
+ @app.post("/gemini/submit_task", response_model=TaskSubmissionResponse)
235
+ async def submit_gemini_task(request: GeminiTaskRequest, background_tasks: BackgroundTasks):
236
+ task_id = str(uuid.uuid4())
237
+ logger.info(f"Received Gemini task submission. Assigning Task ID: {task_id}. Message: '{request.message[:50]}...'")
238
+
239
+ gemini_api_key_from_request = request.api_key
240
+ gemini_api_key_secret = os.getenv("GEMINI_API_KEY")
241
+ key_to_use = gemini_api_key_from_request or gemini_api_key_secret
242
+
243
+ if not key_to_use:
244
+ logger.error(f"[Task {task_id}] Gemini API Key missing for task submission.")
245
+ raise HTTPException(status_code=400, detail="Gemini API Key required.")
246
+
247
+ requested_model = request.gemini_model or DEFAULT_GEMINI_MODEL
248
+
249
+ current_time = datetime.now(timezone.utc)
250
+ tasks_db[task_id] = {
251
+ "status": "PENDING",
252
+ "result": None,
253
+ "error": None,
254
+ "submitted_at": current_time,
255
+ "last_updated_at": current_time,
256
+ "request_params": request.model_dump() # Store original request
257
+ }
258
+
259
+ background_tasks.add_task(
260
+ process_gemini_request_background,
261
+ task_id,
262
+ request.message,
263
+ request.url,
264
+ requested_model,
265
+ key_to_use
266
+ )
267
+
268
+ logger.info(f"[Task {task_id}] Task submitted to background processing.")
269
+ return TaskSubmissionResponse(
270
+ task_id=task_id,
271
+ status="PENDING",
272
+ task_detail_url=f"/gemini/task/{task_id}" # Provide the URL to poll
273
+ )
274
+
275
+
276
 
277
  @app.get("/gemini/task/{task_id}", response_model=TaskStatusResponse)
278
  async def get_gemini_task_status(task_id: str = Path(..., description="The ID of the task to retrieve")):