harry-lu-0708 commited on
Commit
c6ec446
·
1 Parent(s): 49d295e

added claude api login page

Browse files
Files changed (1) hide show
  1. streamlit-client/app.py +38 -8
streamlit-client/app.py CHANGED
@@ -334,6 +334,8 @@ def save_chat_history(messages: list, workflow_type: str, metadata: dict = None)
334
 
335
  if "api_key" not in st.session_state:
336
  st.session_state.api_key = os.getenv("GEMINI_API_KEY") or os.getenv("OPENAI_API_KEY") or ""
 
 
337
  if "default_model" not in st.session_state:
338
  st.session_state.default_model = os.getenv(
339
  "SCIEVO_DEFAULT_MODEL", "gemini/gemini-2.5-flash-lite"
@@ -342,8 +344,9 @@ if "default_model" not in st.session_state:
342
  if not st.session_state.api_key:
343
  st.title("SciEvo Research Assistant")
344
  st.warning("API Key Required")
345
- st.markdown("Please provide an API key to use the SciEvo Research Assistant.")
346
 
 
347
  col1, col2 = st.columns(2)
348
  with col1:
349
  model_option = st.selectbox(
@@ -354,19 +357,39 @@ if not st.session_state.api_key:
354
 
355
  with col2:
356
  api_key_input = st.text_input(
357
- "API Key", type="password", placeholder="Enter your API key here", value=""
 
 
 
 
358
  )
359
 
360
- if st.button("Save API Key", type="primary"):
 
 
 
 
 
 
 
 
 
 
361
  if api_key_input:
362
  st.session_state.api_key = api_key_input
363
  if model_option == "Gemini":
364
  st.session_state.default_model = "gemini/gemini-2.5-flash-lite"
365
  else:
366
  st.session_state.default_model = "gpt-4o-mini"
 
 
 
 
 
 
367
  st.rerun()
368
  else:
369
- st.error("Please enter a valid API key")
370
  st.stop()
371
 
372
  col_title, col_reset = st.columns([5, 1])
@@ -383,6 +406,7 @@ with col_reset:
383
  ]
384
  if "selected_workflow" in st.session_state:
385
  st.session_state.selected_workflow = None
 
386
  st.rerun()
387
 
388
  if "initialized" not in st.session_state:
@@ -403,10 +427,16 @@ if "initialized" not in st.session_state:
403
 
404
  # Ensure ANTHROPIC_API_KEY is available for Claude Agent SDK
405
  if not os.getenv("ANTHROPIC_API_KEY"):
406
- # Try to get from user's API key if it's an Anthropic key
407
- user_key = st.session_state.get("api_key", "")
408
- if user_key and ("anthropic" in user_key.lower() or user_key.startswith("sk-ant-")):
409
- os.environ["ANTHROPIC_API_KEY"] = user_key
 
 
 
 
 
 
410
 
411
  if not os.getenv("BRAIN_DIR"):
412
  os.environ["BRAIN_DIR"] = str(Path.cwd() / "tmp_brain")
 
334
 
335
  if "api_key" not in st.session_state:
336
  st.session_state.api_key = os.getenv("GEMINI_API_KEY") or os.getenv("OPENAI_API_KEY") or ""
337
+ if "anthropic_api_key" not in st.session_state:
338
+ st.session_state.anthropic_api_key = os.getenv("ANTHROPIC_API_KEY") or ""
339
  if "default_model" not in st.session_state:
340
  st.session_state.default_model = os.getenv(
341
  "SCIEVO_DEFAULT_MODEL", "gemini/gemini-2.5-flash-lite"
 
344
  if not st.session_state.api_key:
345
  st.title("SciEvo Research Assistant")
346
  st.warning("API Key Required")
347
+ st.markdown("Please provide API keys to use the SciEvo Research Assistant.")
348
 
349
+ # Model provider selection
350
  col1, col2 = st.columns(2)
351
  with col1:
352
  model_option = st.selectbox(
 
357
 
358
  with col2:
359
  api_key_input = st.text_input(
360
+ f"{model_option} API Key",
361
+ type="password",
362
+ placeholder=f"Enter your {model_option} API key here",
363
+ value="",
364
+ help=f"Required for {model_option} models used in data analysis and ideation",
365
  )
366
 
367
+ # Claude API Key input (separate, always shown)
368
+ st.divider()
369
+ anthropic_api_key_input = st.text_input(
370
+ "Anthropic (Claude) API Key",
371
+ type="password",
372
+ placeholder="Enter your Anthropic API key here (optional but recommended)",
373
+ value=st.session_state.anthropic_api_key,
374
+ help="Required for Claude Agent SDK (coding agent v3). Used for code generation tasks.",
375
+ )
376
+
377
+ if st.button("Save API Keys", type="primary"):
378
  if api_key_input:
379
  st.session_state.api_key = api_key_input
380
  if model_option == "Gemini":
381
  st.session_state.default_model = "gemini/gemini-2.5-flash-lite"
382
  else:
383
  st.session_state.default_model = "gpt-4o-mini"
384
+
385
+ # Save Anthropic API key if provided
386
+ if anthropic_api_key_input:
387
+ st.session_state.anthropic_api_key = anthropic_api_key_input
388
+ os.environ["ANTHROPIC_API_KEY"] = anthropic_api_key_input
389
+
390
  st.rerun()
391
  else:
392
+ st.error("Please enter a valid API key for the selected model provider")
393
  st.stop()
394
 
395
  col_title, col_reset = st.columns([5, 1])
 
406
  ]
407
  if "selected_workflow" in st.session_state:
408
  st.session_state.selected_workflow = None
409
+ # Note: API keys are preserved on reset (user doesn't need to re-enter them)
410
  st.rerun()
411
 
412
  if "initialized" not in st.session_state:
 
427
 
428
  # Ensure ANTHROPIC_API_KEY is available for Claude Agent SDK
429
  if not os.getenv("ANTHROPIC_API_KEY"):
430
+ # First try to get from session state (user input)
431
+ anthropic_key = st.session_state.get("anthropic_api_key", "")
432
+ if anthropic_key:
433
+ os.environ["ANTHROPIC_API_KEY"] = anthropic_key
434
+ else:
435
+ # Fallback: try to get from user's main API key if it's an Anthropic key
436
+ user_key = st.session_state.get("api_key", "")
437
+ if user_key and ("anthropic" in user_key.lower() or user_key.startswith("sk-ant-")):
438
+ os.environ["ANTHROPIC_API_KEY"] = user_key
439
+ st.session_state.anthropic_api_key = user_key
440
 
441
  if not os.getenv("BRAIN_DIR"):
442
  os.environ["BRAIN_DIR"] = str(Path.cwd() / "tmp_brain")