vibesecurityguy commited on
Commit
db47186
·
verified ·
1 Parent(s): db9fff5

Upload app.py with huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +30 -13
app.py CHANGED
@@ -305,7 +305,6 @@ EXAMPLES_QA = [
305
  # ---------------------------------------------------------------------------
306
  ZEROGPU_QUEUE_HINT = "No GPU was available after"
307
  SPACES_PAGE_URL = "https://huggingface.co/spaces/vibesecurityguy/veris-classifier"
308
- HF_LOGIN_URL = "https://huggingface.co/login?next=%2Fspaces%2Fvibesecurityguy%2Fveris-classifier"
309
 
310
 
311
  def _is_zerogpu_queue_timeout(err: Exception) -> bool:
@@ -313,11 +312,22 @@ def _is_zerogpu_queue_timeout(err: Exception) -> bool:
313
  return ZEROGPU_QUEUE_HINT in str(err)
314
 
315
 
316
- def _spaces_user_logged_in(request: gr.Request | None) -> bool:
 
 
 
317
  """True when a Spaces OAuth user is attached to this request."""
 
 
318
  if request is None:
319
  return False
320
- return bool(getattr(request, "username", None))
 
 
 
 
 
 
321
 
322
 
323
 
@@ -330,11 +340,16 @@ def _use_hf_model() -> bool:
330
  return os.getenv("VERIS_USE_HF", "").lower() in ("1", "true", "yes")
331
 
332
 
333
- def classify(description: str, api_key: str, request: gr.Request | None = None) -> str:
 
 
 
 
 
334
  """Classify an incident — uses HF model on Spaces, OpenAI otherwise."""
335
  if not description.strip():
336
  return "Please enter an incident description."
337
- if IS_SPACES and not _spaces_user_logged_in(request):
338
  return json.dumps(
339
  {
340
  "error": (
@@ -383,11 +398,16 @@ def classify(description: str, api_key: str, request: gr.Request | None = None)
383
  return json.dumps({"error": str(e)}, indent=2)
384
 
385
 
386
- def ask(question: str, api_key: str, request: gr.Request | None = None) -> str:
 
 
 
 
 
387
  """Answer a VERIS question — uses HF model on Spaces, OpenAI otherwise."""
388
  if not question.strip():
389
  return "*Please enter a question.*"
390
- if IS_SPACES and not _spaces_user_logged_in(request):
391
  return (
392
  "**Error:** Please log in on Hugging Face and open this app from "
393
  f"{SPACES_PAGE_URL}. ZeroGPU quota is per logged-in user."
@@ -576,12 +596,9 @@ def build_app() -> gr.Blocks:
576
  "**Required:** Log in with Hugging Face so ZeroGPU usage "
577
  "counts against your account quota."
578
  )
579
- gr.HTML(
580
- f'<a href="{HF_LOGIN_URL}" target="_self" '
581
- 'style="display:inline-block;padding:10px 14px;border-radius:8px;'
582
- 'background:#2563eb;color:#fff;text-decoration:none;font-weight:600;">'
583
- "Sign in with Hugging Face</a>"
584
- )
585
  else:
586
  gr.HTML("""
587
  <div class="model-banner">
 
305
  # ---------------------------------------------------------------------------
306
  ZEROGPU_QUEUE_HINT = "No GPU was available after"
307
  SPACES_PAGE_URL = "https://huggingface.co/spaces/vibesecurityguy/veris-classifier"
 
308
 
309
 
310
  def _is_zerogpu_queue_timeout(err: Exception) -> bool:
 
312
  return ZEROGPU_QUEUE_HINT in str(err)
313
 
314
 
315
+ def _spaces_user_logged_in(
316
+ request: gr.Request | None,
317
+ profile: gr.OAuthProfile | None = None,
318
+ ) -> bool:
319
  """True when a Spaces OAuth user is attached to this request."""
320
+ if profile is not None:
321
+ return True
322
  if request is None:
323
  return False
324
+ if getattr(request, "username", None):
325
+ return True
326
+ # Gradio/HF OAuth stores profile info in session; use it as fallback signal.
327
+ session = getattr(request, "session", None)
328
+ if isinstance(session, dict) and session.get("oauth_info"):
329
+ return True
330
+ return False
331
 
332
 
333
 
 
340
  return os.getenv("VERIS_USE_HF", "").lower() in ("1", "true", "yes")
341
 
342
 
343
+ def classify(
344
+ description: str,
345
+ api_key: str,
346
+ request: gr.Request | None = None,
347
+ profile: gr.OAuthProfile | None = None,
348
+ ) -> str:
349
  """Classify an incident — uses HF model on Spaces, OpenAI otherwise."""
350
  if not description.strip():
351
  return "Please enter an incident description."
352
+ if IS_SPACES and not _spaces_user_logged_in(request, profile):
353
  return json.dumps(
354
  {
355
  "error": (
 
398
  return json.dumps({"error": str(e)}, indent=2)
399
 
400
 
401
+ def ask(
402
+ question: str,
403
+ api_key: str,
404
+ request: gr.Request | None = None,
405
+ profile: gr.OAuthProfile | None = None,
406
+ ) -> str:
407
  """Answer a VERIS question — uses HF model on Spaces, OpenAI otherwise."""
408
  if not question.strip():
409
  return "*Please enter a question.*"
410
+ if IS_SPACES and not _spaces_user_logged_in(request, profile):
411
  return (
412
  "**Error:** Please log in on Hugging Face and open this app from "
413
  f"{SPACES_PAGE_URL}. ZeroGPU quota is per logged-in user."
 
596
  "**Required:** Log in with Hugging Face so ZeroGPU usage "
597
  "counts against your account quota."
598
  )
599
+ login_btn = gr.LoginButton("Sign in with Hugging Face")
600
+ # Gradio 4.44 can miss auto-activation in some Spaces contexts.
601
+ login_btn.activate()
 
 
 
602
  else:
603
  gr.HTML("""
604
  <div class="model-banner">