t0-0
fix bug
2d8e1d1
import json
from datetime import datetime, timezone
import torch
from src.display.formatting import styled_error, styled_message, styled_warning
from src.display.utils import EvalQueuedModel, LLMJpEvalVersion, VllmVersion
from src.envs import API, EVAL_REQUESTS_PATH, HF_TOKEN, QUEUE_REPO
from src.submission.check_validity import already_submitted_models, check_model_card, is_model_on_hub
REQUESTED_MODELS: set[EvalQueuedModel] = set()
LLM_JP_EVAL_VERSION = LLMJpEvalVersion.current.value.name
VLLM_VERSION = VllmVersion.current.value.name
def add_new_eval(
model_id: str,
revision: str,
precision: str,
model_type: str,
add_special_tokens: str,
):
global REQUESTED_MODELS
if not REQUESTED_MODELS:
REQUESTED_MODELS = already_submitted_models(EVAL_REQUESTS_PATH)
revision = revision or "main"
# Is the model on the hub?
model_on_hub, error, config = is_model_on_hub(
model_name=model_id, revision=revision, token=HF_TOKEN, test_tokenizer=True
)
if not model_on_hub:
return styled_error(f'Model "{model_id}" {error}')
if precision == "auto":
dtype = ""
if hasattr(config, "torch_dtype"):
dtype = config.torch_dtype
if dtype == torch.float16:
precision = "float16"
elif dtype == torch.bfloat16:
precision = "bfloat16"
elif dtype == torch.float32:
precision = "float32"
else:
return styled_error(
"Unable to retrieve a valid dtype from config.json. Please select an appropriate one from fp16/fp32/bf16 and resubmit."
)
model_data = EvalQueuedModel(
model=model_id,
revision=revision,
precision=precision,
add_special_tokens=add_special_tokens,
llm_jp_eval_version=LLM_JP_EVAL_VERSION,
vllm_version=VLLM_VERSION,
)
if model_data in REQUESTED_MODELS:
return styled_warning("This model has already been submitted with the same configuration.")
if "/" in model_id:
user_or_org, model_name = model_id.split("/")
else:
user_or_org, model_name = "", model_id
current_time = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ")
if model_type is None or model_type == "":
return styled_error("Please select a model type.")
# Is the model info correctly filled?
try:
model_info = API.model_info(repo_id=model_id, revision=revision)
except Exception:
return styled_error("Could not get your model information. Please fill it up properly.")
# Were the model card and license filled?
try:
_ = model_info.cardData["license"]
except Exception:
return styled_error("Please select a license for your model")
modelcard_OK, error_msg = check_model_card(model_id)
if not modelcard_OK:
return styled_error(error_msg)
# Seems good, creating the eval
print("Adding new eval")
eval_entry = {
"model_type": model_type,
"model": model_id,
"precision": precision,
"revision": revision,
"add_special_tokens": add_special_tokens,
"llm_jp_eval_version": LLM_JP_EVAL_VERSION,
"vllm_version": VLLM_VERSION,
"status": "PENDING",
"submitted_time": current_time,
}
print("Creating eval file")
OUT_DIR = EVAL_REQUESTS_PATH / user_or_org
OUT_DIR.mkdir(parents=True, exist_ok=True)
out_file_name = f"{model_name}_{current_time.replace(':','-')}.json"
out_path = OUT_DIR / out_file_name
with out_path.open("w") as f:
f.write(json.dumps(eval_entry))
print("Uploading eval file")
API.upload_file(
path_or_fileobj=out_path,
path_in_repo=out_path.relative_to(EVAL_REQUESTS_PATH).as_posix(),
repo_id=QUEUE_REPO,
repo_type="dataset",
commit_message=f"Add {model_id} to eval queue",
)
REQUESTED_MODELS.add(model_data)
# Remove the local file
out_path.unlink()
return styled_message(
"Your request has been submitted to the evaluation queue!\nPlease wait for up to an hour for the model to show in the PENDING list."
)