seonglae-holistic's picture
feat: multi programming language select
92edcfa
raw
history blame
3.4 kB
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)}")