Spaces:
Running
Running
File size: 3,402 Bytes
9ab539a bccaf50 9ab539a ca72b36 fbd403a ca72b36 9ab539a bccaf50 fbd403a bccaf50 fbd403a bccaf50 92edcfa bccaf50 9ab539a bccaf50 9ab539a bccaf50 fbd403a bccaf50 fbd403a bccaf50 fbd403a bccaf50 fbd403a bccaf50 fbd403a bccaf50 fbd403a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
import json
import os
import uuid
from datetime import datetime
from pathlib import Path
from src.display.utils import LibraryType
from src.display.formatting import styled_error, styled_warning, styled_message
from src.envs import API, EVAL_REQUESTS_PATH, QUEUE_REPO, LOCAL_MODE
from src.submission.check_validity import is_repository_valid
def add_new_eval(
library_name,
library_version,
repository_url,
language,
framework,
library_type_str,
) -> str:
"""
Adds a new library to the assessment queue.
Args:
library_name: Name of the library (org/repo format)
library_version: Version of the library
repository_url: URL to the repository
language: Programming language
framework: Related framework/ecosystem
library_type_str: Type of AI library
Returns:
A message indicating the status of the submission
"""
# Check if valid repository
is_valid, validity_message, library_info = is_repository_valid(library_name, repository_url)
if not is_valid:
return styled_error(f"Invalid submission: {validity_message}")
# Parse library type
library_type = LibraryType.from_str(library_type_str)
if library_type == LibraryType.Unknown:
return styled_error("Please select a valid library type.")
# Create a unique identifier for the submission
uid = uuid.uuid4().hex[:6]
timestamp = datetime.now().isoformat()
request_filename = f"{library_name.replace('/', '_')}_eval_request_{timestamp}_{uid}.json"
# Stars count and license info from library_info if available
stars = library_info.get("stars", 0)
license_name = library_info.get("license", "unknown")
# Create the assessment request JSON
assessment_request = {
"library": library_name,
"version": library_version,
"repository_url": repository_url,
"language": "/".join(language) if isinstance(language, list) else language,
"framework": framework,
"library_type": library_type.value.name,
"license": license_name,
"stars": stars,
"status": "PENDING",
"submitted_time": timestamp,
"last_updated": timestamp,
"assessment_id": uid
}
# Ensure directory exists
os.makedirs(EVAL_REQUESTS_PATH, exist_ok=True)
# Save the request locally
request_file_path = os.path.join(EVAL_REQUESTS_PATH, request_filename)
with open(request_file_path, "w") as f:
json.dump(assessment_request, f, indent=2)
# If in local mode, don't try to upload to HF
if LOCAL_MODE:
return styled_message(f"Library '{library_name}' (version {library_version}) has been added to the local assessment queue! Assessment ID: {uid}")
# Try to upload to HF if not in local mode
try:
# Push the file to the HF repo
path = Path(request_file_path)
API.upload_file(
path_or_fileobj=path,
path_in_repo=request_filename,
repo_id=QUEUE_REPO,
repo_type="dataset",
)
return styled_message(f"Library '{library_name}' (version {library_version}) has been added to the assessment queue! Assessment ID: {uid}")
except Exception as e:
return styled_warning(f"Saved locally but failed to upload to Hugging Face: {str(e)}")
|