CB commited on
Commit
f1f7841
·
verified ·
1 Parent(s): 44f1bd9

Update streamlit_app.py

Browse files
Files changed (1) hide show
  1. streamlit_app.py +32 -17
streamlit_app.py CHANGED
@@ -54,6 +54,9 @@ st.session_state.setdefault("preferred_model", "gemini-2.0-flash-lite")
54
  st.session_state.setdefault("compression_threshold_mb", 200)
55
  st.session_state.setdefault("model_select", st.session_state.get("preferred_model"))
56
  st.session_state.setdefault("custom_model", "")
 
 
 
57
 
58
  MODEL_OPTIONS = [
59
  "gemini-2.5-flash",
@@ -191,6 +194,7 @@ def wait_for_processed(file_obj, timeout: int = None, progress_callback=None):
191
  backoff = min(backoff * 2, 8.0)
192
 
193
  def _normalize_genai_response(response):
 
194
  if response is None:
195
  return ""
196
  try:
@@ -372,29 +376,40 @@ st.sidebar.header("Video Input")
372
  st.sidebar.text_input("Video URL", key="url_input", placeholder="https://", value=st.session_state.get("url_input", ""))
373
 
374
  settings_exp = st.sidebar.expander("Settings", expanded=False)
375
- st.session_state["model_select"] = settings_exp.selectbox("Gemini model", MODEL_OPTIONS, index=MODEL_OPTIONS.index(st.session_state.get("model_select", "gemini-2.0-flash-lite")), key="model_select")
376
- if st.session_state.get("model_select") == "custom":
377
- st.session_state["custom_model"] = settings_exp.text_input("Custom model name", value=st.session_state.get("custom_model", ""), key="custom_model")
378
- model_input_value = (st.session_state.get("custom_model") or st.session_state.get("model_select")).strip()
379
 
380
- st.session_state["api_key"] = settings_exp.text_input("Google API Key", key="api_key_input", value=st.session_state.get("api_key", ""), type="password")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
381
 
382
- default_prompt = (
383
- "Watch the video and provide a detailed behavioral report focusing on human actions, interactions, posture, movement, and apparent intent. Keep language professional. Include a list of observations for notable events."
384
- )
385
- st.session_state["analysis_prompt"] = settings_exp.text_area("Enter analysis prompt", value=st.session_state.get("analysis_prompt", default_prompt), height=140, key="analysis_prompt")
386
 
387
- st.session_state["video_password"] = settings_exp.text_input("Video Password (if needed)", key="video_password_input", placeholder="password", type="password")
388
 
389
- st.session_state["processing_timeout"] = settings_exp.number_input("Processing timeout (s)", min_value=60, max_value=3600, value=st.session_state.get("processing_timeout", 900), step=30, key="processing_timeout_input")
390
- st.session_state["generation_timeout"] = settings_exp.number_input("Generation timeout (s)", min_value=30, max_value=1800, value=st.session_state.get("generation_timeout", 300), step=10, key="generation_timeout_input")
391
- st.session_state["compression_threshold_mb"] = settings_exp.number_input("Compression threshold (MB)", min_value=10, max_value=2000, value=st.session_state.get("compression_threshold_mb", 200), step=10, key="compression_threshold_input")
392
 
393
- key_source = "session" if st.session_state.get("api_key") else ".env" if os.getenv("GOOGLE_API_KEY") else "none"
394
- settings_exp.caption(f"Using API key from: {key_source}")
395
 
396
- if not get_effective_api_key():
397
- settings_exp.warning("No Google API key provided; upload/generation disabled.", icon="⚠️")
398
 
399
  col1, col2 = st.columns([1, 3])
400
  with col1:
 
54
  st.session_state.setdefault("compression_threshold_mb", 200)
55
  st.session_state.setdefault("model_select", st.session_state.get("preferred_model"))
56
  st.session_state.setdefault("custom_model", "")
57
+ st.session_state.setdefault("url_input", "")
58
+ st.session_state.setdefault("video_password", "")
59
+ st.session_state.setdefault("analysis_prompt", "")
60
 
61
  MODEL_OPTIONS = [
62
  "gemini-2.5-flash",
 
194
  backoff = min(backoff * 2, 8.0)
195
 
196
  def _normalize_genai_response(response):
197
+ import json
198
  if response is None:
199
  return ""
200
  try:
 
376
  st.sidebar.text_input("Video URL", key="url_input", placeholder="https://", value=st.session_state.get("url_input", ""))
377
 
378
  settings_exp = st.sidebar.expander("Settings", expanded=False)
 
 
 
 
379
 
380
+ # compute initial index safely
381
+ initial_index = 0
382
+ try:
383
+ cur = st.session_state.get("model_select", st.session_state.get("preferred_model"))
384
+ initial_index = MODEL_OPTIONS.index(cur) if cur in MODEL_OPTIONS else MODEL_OPTIONS.index(st.session_state.get("preferred_model"))
385
+ except Exception:
386
+ initial_index = 0
387
+
388
+ # let the widget own st.session_state["model_select"]; do not assign into it later
389
+ with settings_exp:
390
+ st.selectbox("Gemini model", MODEL_OPTIONS, index=initial_index, key="model_select")
391
+ if st.session_state.get("model_select") == "custom":
392
+ st.text_input("Custom model name", value=st.session_state.get("custom_model", ""), key="custom_model")
393
+ model_input_value = (st.session_state.get("custom_model") or st.session_state.get("model_select")).strip()
394
+
395
+ st.text_input("Google API Key", key="api_key_input", value=st.session_state.get("api_key", ""), type="password")
396
 
397
+ default_prompt = (
398
+ "Watch the video and provide a detailed behavioral report focusing on human actions, interactions, posture, movement, and apparent intent. Keep language professional. Include a list of observations for notable events."
399
+ )
400
+ st.text_area("Enter analysis prompt", value=st.session_state.get("analysis_prompt", default_prompt), height=140, key="analysis_prompt")
401
 
402
+ st.text_input("Video Password (if needed)", key="video_password_input", placeholder="password", type="password")
403
 
404
+ st.number_input("Processing timeout (s)", min_value=60, max_value=3600, value=st.session_state.get("processing_timeout", 900), step=30, key="processing_timeout_input")
405
+ st.number_input("Generation timeout (s)", min_value=30, max_value=1800, value=st.session_state.get("generation_timeout", 300), step=10, key="generation_timeout_input")
406
+ st.number_input("Compression threshold (MB)", min_value=10, max_value=2000, value=st.session_state.get("compression_threshold_mb", 200), step=10, key="compression_threshold_input")
407
 
408
+ key_source = "session" if st.session_state.get("api_key") else ".env" if os.getenv("GOOGLE_API_KEY") else "none"
409
+ st.caption(f"Using API key from: {key_source}")
410
 
411
+ if not get_effective_api_key():
412
+ st.warning("No Google API key provided; upload/generation disabled.", icon="⚠️")
413
 
414
  col1, col2 = st.columns([1, 3])
415
  with col1: