Spaces:
Configuration error
Configuration error
Upload app.py with huggingface_hub
Browse files
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(
|
|
|
|
|
|
|
|
|
|
| 317 |
"""True when a Spaces OAuth user is attached to this request."""
|
|
|
|
|
|
|
| 318 |
if request is None:
|
| 319 |
return False
|
| 320 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
| 580 |
-
|
| 581 |
-
|
| 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">
|