CB commited on
Commit
f93879b
·
verified ·
1 Parent(s): 5febd15

Update streamlit_app.py

Browse files
Files changed (1) hide show
  1. streamlit_app.py +18 -45
streamlit_app.py CHANGED
@@ -297,70 +297,56 @@ def get_runtime_api_key():
297
  return key
298
  return os.getenv("GOOGLE_API_KEY", "").strip() or None
299
 
300
- # Robust responses caller: SDK preferred, then attempt HTTP fallback via requests
301
- # --- REPLACE/ADD START ---
302
  import json
303
  import requests
304
 
305
  def responses_generate(model, messages, files, max_output_tokens, api_key):
306
  if not api_key:
307
  raise RuntimeError("No API key for responses_generate")
308
- # If genai SDK present and has responses.generate, prefer it
309
  if HAS_GENAI and genai is not None:
310
  try:
311
  genai.configure(api_key=api_key)
312
  if hasattr(genai, "responses") and getattr(genai, "responses") is not None:
313
  return genai.responses.generate(model=model, messages=messages, files=files, max_output_tokens=max_output_tokens)
314
  except Exception as e:
315
- # allow fallback to HTTP and surface SDK error in debug later
316
  sdk_err = str(e)
317
- else:
318
- sdk_err = "SDK not available"
319
 
320
- # HTTP fallback using requests with retries
321
- url = "https://gen-ai.googleapis.com/v1/responses"
322
- payload = {"model": model, "messages": messages, "max_output_tokens": max_output_tokens}
 
 
 
 
 
323
  headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
324
  last_exc = None
325
- for attempt in range(3):
326
  try:
327
- resp = requests.post(url, json=payload, headers=headers, timeout=30)
328
- # Try to parse JSON on success
329
- if resp.status_code == 200:
330
  try:
331
- return resp.json()
332
  except Exception:
333
- return {"text": resp.text}
334
- else:
335
- last_exc = RuntimeError(f"HTTP {resp.status_code}: {resp.text}")
336
- time.sleep(1 + attempt)
337
  except Exception as e:
338
  last_exc = e
339
- time.sleep(1 + attempt)
340
-
341
- # If we get here, both SDK and HTTP failed. Provide diagnostic info.
342
- diag = {
343
- "sdk_error": sdk_err if 'sdk_err' in locals() else None,
344
- "http_error": str(last_exc),
345
- "http_url": url,
346
- "payload_sample": json.dumps(payload)[:1000],
347
- "note": "See Streamlit 'Debug (compact)' output for response keys/body"
348
- }
349
  raise RuntimeError(f"genai.responses not available and HTTP fallback failed: {diag}")
350
 
351
- # call wrapper that returns response or raises; replace the previous call_responses_once with this:
352
  def call_responses_once(model_used, system_msg, user_msg, fname, max_tokens):
353
  files = [{"name": fname}] if fname else None
354
  for attempt in range(2):
355
  try:
356
  return responses_generate(model_used, [system_msg, user_msg], files, max_tokens, api_key=get_runtime_api_key())
357
- except Exception as e:
358
  if attempt == 0:
359
  time.sleep(1.0)
360
  continue
361
  raise
362
- # --- REPLACE/ADD END ---
363
-
364
 
365
  if (st.session_state.get("busy") is False) and ('generate_now' in locals() and generate_now):
366
  if not st.session_state.get("videos"):
@@ -412,7 +398,6 @@ if (st.session_state.get("busy") is False) and ('generate_now' in locals() and g
412
  st.session_state["last_loaded_path"] = current_path
413
  st.session_state["file_hash"] = current_hash
414
  else:
415
- # no SDK upload support: continue without upload and try HTTP responses with no file reference
416
  uploaded = None
417
  processed = None
418
  st.session_state["uploaded_file"] = None
@@ -432,18 +417,6 @@ if (st.session_state.get("busy") is False) and ('generate_now' in locals() and g
432
  system_msg = {"role": "system", "content": "You are a helpful assistant that summarizes videos concisely in vivid detail."}
433
  user_msg = {"role": "user", "content": prompt_text}
434
 
435
- def call_responses_once(model_used, system_msg, user_msg, fname, max_tokens):
436
- for attempt in range(2):
437
- try:
438
- files = [{"name": fname}] if fname else None
439
- resp = responses_generate(model_used, [system_msg, user_msg], files, max_tokens, api_key=runtime_key)
440
- return resp
441
- except Exception:
442
- if attempt == 0:
443
- time.sleep(1.0)
444
- continue
445
- raise
446
-
447
  fname = file_name_or_id(processed) or file_name_or_id(uploaded)
448
  response = call_responses_once(model_used, system_msg, user_msg, fname, max_tokens)
449
 
 
297
  return key
298
  return os.getenv("GOOGLE_API_KEY", "").strip() or None
299
 
300
+ # responses caller: prefer SDK responses, fallback to generativelanguage generate endpoints
 
301
  import json
302
  import requests
303
 
304
  def responses_generate(model, messages, files, max_output_tokens, api_key):
305
  if not api_key:
306
  raise RuntimeError("No API key for responses_generate")
307
+ sdk_err = None
308
  if HAS_GENAI and genai is not None:
309
  try:
310
  genai.configure(api_key=api_key)
311
  if hasattr(genai, "responses") and getattr(genai, "responses") is not None:
312
  return genai.responses.generate(model=model, messages=messages, files=files, max_output_tokens=max_output_tokens)
313
  except Exception as e:
 
314
  sdk_err = str(e)
 
 
315
 
316
+ host = "https://generativelanguage.googleapis.com"
317
+ candidates = [
318
+ f"{host}/v1/models/{model}:generate",
319
+ f"{host}/v1beta3/models/{model}:generate",
320
+ f"{host}/v1beta2/models/{model}:generate",
321
+ ]
322
+ # adapt messages to a simple prompt wrapper expected by generate
323
+ payload = {"prompt": {"messages": messages}, "maxOutputTokens": int(max_output_tokens or 512)}
324
  headers = {"Authorization": f"Bearer {api_key}", "Content-Type": "application/json"}
325
  last_exc = None
326
+ for url in candidates:
327
  try:
328
+ r = requests.post(url, json=payload, headers=headers, timeout=60)
329
+ if r.status_code == 200:
 
330
  try:
331
+ return r.json()
332
  except Exception:
333
+ return {"text": r.text}
334
+ last_exc = RuntimeError(f"HTTP {r.status_code}: {r.text}")
 
 
335
  except Exception as e:
336
  last_exc = e
337
+ diag = {"sdk_error": sdk_err, "http_error": str(last_exc), "tried_urls": candidates}
 
 
 
 
 
 
 
 
 
338
  raise RuntimeError(f"genai.responses not available and HTTP fallback failed: {diag}")
339
 
 
340
  def call_responses_once(model_used, system_msg, user_msg, fname, max_tokens):
341
  files = [{"name": fname}] if fname else None
342
  for attempt in range(2):
343
  try:
344
  return responses_generate(model_used, [system_msg, user_msg], files, max_tokens, api_key=get_runtime_api_key())
345
+ except Exception:
346
  if attempt == 0:
347
  time.sleep(1.0)
348
  continue
349
  raise
 
 
350
 
351
  if (st.session_state.get("busy") is False) and ('generate_now' in locals() and generate_now):
352
  if not st.session_state.get("videos"):
 
398
  st.session_state["last_loaded_path"] = current_path
399
  st.session_state["file_hash"] = current_hash
400
  else:
 
401
  uploaded = None
402
  processed = None
403
  st.session_state["uploaded_file"] = None
 
417
  system_msg = {"role": "system", "content": "You are a helpful assistant that summarizes videos concisely in vivid detail."}
418
  user_msg = {"role": "user", "content": prompt_text}
419
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  fname = file_name_or_id(processed) or file_name_or_id(uploaded)
421
  response = call_responses_once(model_used, system_msg, user_msg, fname, max_tokens)
422