Spaces:
				
			
			
	
			
			
					
		Running
		
			on 
			
			CPU Upgrade
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
			on 
			
			CPU Upgrade
	check_chat_template
#984
by
						
alozowski
	
							HF Staff
						- opened
							
					
- src/submission/check_validity.py +22 -1
- src/submission/submit.py +10 -2
    	
        src/submission/check_validity.py
    CHANGED
    
    | @@ -6,7 +6,7 @@ from collections import defaultdict | |
| 6 | 
             
            from datetime import datetime, timedelta, timezone
         | 
| 7 |  | 
| 8 | 
             
            import huggingface_hub
         | 
| 9 | 
            -
            from huggingface_hub import ModelCard
         | 
| 10 | 
             
            from huggingface_hub.hf_api import ModelInfo, get_safetensors_metadata, parse_safetensors_file_metadata
         | 
| 11 | 
             
            from transformers import AutoConfig, AutoTokenizer
         | 
| 12 |  | 
| @@ -179,7 +179,28 @@ def already_submitted_models(requested_models_dir: str) -> set[str]: | |
| 179 |  | 
| 180 | 
             
                return set(file_names), users_to_submission_dates
         | 
| 181 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 182 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 183 | 
             
            def get_model_tags(model_card, model: str):
         | 
| 184 | 
             
                is_merge_from_metadata = False
         | 
| 185 | 
             
                is_moe_from_metadata = False
         | 
|  | |
| 6 | 
             
            from datetime import datetime, timedelta, timezone
         | 
| 7 |  | 
| 8 | 
             
            import huggingface_hub
         | 
| 9 | 
            +
            from huggingface_hub import ModelCard, hf_hub_download
         | 
| 10 | 
             
            from huggingface_hub.hf_api import ModelInfo, get_safetensors_metadata, parse_safetensors_file_metadata
         | 
| 11 | 
             
            from transformers import AutoConfig, AutoTokenizer
         | 
| 12 |  | 
|  | |
| 179 |  | 
| 180 | 
             
                return set(file_names), users_to_submission_dates
         | 
| 181 |  | 
| 182 | 
            +
            def check_chat_template(model: str, revision: str) -> tuple[bool, str]:
         | 
| 183 | 
            +
                try:
         | 
| 184 | 
            +
                    # Attempt to download only the tokenizer_config.json file
         | 
| 185 | 
            +
                    config_file = hf_hub_download(
         | 
| 186 | 
            +
                        repo_id=model,
         | 
| 187 | 
            +
                        filename="tokenizer_config.json",
         | 
| 188 | 
            +
                        revision=revision,
         | 
| 189 | 
            +
                        repo_type="model"
         | 
| 190 | 
            +
                    )
         | 
| 191 | 
            +
             | 
| 192 | 
            +
                    # Read and parse the tokenizer_config.json file
         | 
| 193 | 
            +
                    with open(config_file, 'r') as f:
         | 
| 194 | 
            +
                        tokenizer_config = json.load(f)
         | 
| 195 |  | 
| 196 | 
            +
                    # Check if chat_template exists in the tokenizer configuration
         | 
| 197 | 
            +
                    if 'chat_template' not in tokenizer_config:
         | 
| 198 | 
            +
                        return False, f"The model {model} doesn't have a chat_template in its tokenizer_config.json. Please add a chat_template before submitting or submit without it."
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                    return True, ""
         | 
| 201 | 
            +
                except Exception as e:
         | 
| 202 | 
            +
                    return False, f"Error checking chat_template for model {model}: {str(e)}"
         | 
| 203 | 
            +
                
         | 
| 204 | 
             
            def get_model_tags(model_card, model: str):
         | 
| 205 | 
             
                is_merge_from_metadata = False
         | 
| 206 | 
             
                is_moe_from_metadata = False
         | 
    	
        src/submission/submit.py
    CHANGED
    
    | @@ -24,6 +24,7 @@ from src.submission.check_validity import ( | |
| 24 | 
             
                get_model_size,
         | 
| 25 | 
             
                is_model_on_hub,
         | 
| 26 | 
             
                user_submission_permission,
         | 
|  | |
| 27 | 
             
            )
         | 
| 28 |  | 
| 29 | 
             
            from src.voting.vote_system import VoteManager
         | 
| @@ -114,6 +115,7 @@ def add_new_eval( | |
| 114 | 
             
                except Exception as e:
         | 
| 115 | 
             
                    return styled_error("Could not get your model information. Please fill it up properly.")
         | 
| 116 |  | 
|  | |
| 117 | 
             
                model_key = f"{model}_{model_info.sha}_{precision}"
         | 
| 118 | 
             
                if model_key in requested_models:
         | 
| 119 | 
             
                    return styled_error(f"The model '{model}' with revision '{model_info.sha}' and precision '{precision}' has already been submitted.")
         | 
| @@ -123,12 +125,12 @@ def add_new_eval( | |
| 123 | 
             
                if model_size is None:
         | 
| 124 | 
             
                    return styled_error(error_text)
         | 
| 125 |  | 
| 126 | 
            -
                #  | 
| 127 | 
             
                if precision in ["float16", "bfloat16"] and model_size > 100:
         | 
| 128 | 
             
                    return styled_error(f"Sadly, models larger than 100B parameters cannot be submitted in {precision} precision at this time. "
         | 
| 129 | 
             
                                        f"Your model size: {model_size:.2f}B parameters.")
         | 
| 130 |  | 
| 131 | 
            -
                #  | 
| 132 | 
             
                if precision in ["8bit", "4bit", "GPTQ"]:
         | 
| 133 | 
             
                    size_checker = ModelSizeChecker(model=model, precision=precision, model_size_in_b=model_size)
         | 
| 134 |  | 
| @@ -163,6 +165,12 @@ def add_new_eval( | |
| 163 | 
             
                modelcard_OK, error_msg, model_card = check_model_card(model)
         | 
| 164 | 
             
                if not modelcard_OK:
         | 
| 165 | 
             
                    return styled_error(error_msg)
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 166 |  | 
| 167 | 
             
                # Seems good, creating the eval
         | 
| 168 | 
             
                print("Adding new eval")
         | 
|  | |
| 24 | 
             
                get_model_size,
         | 
| 25 | 
             
                is_model_on_hub,
         | 
| 26 | 
             
                user_submission_permission,
         | 
| 27 | 
            +
                check_chat_template,
         | 
| 28 | 
             
            )
         | 
| 29 |  | 
| 30 | 
             
            from src.voting.vote_system import VoteManager
         | 
|  | |
| 115 | 
             
                except Exception as e:
         | 
| 116 | 
             
                    return styled_error("Could not get your model information. Please fill it up properly.")
         | 
| 117 |  | 
| 118 | 
            +
                # Has it been submitted already?
         | 
| 119 | 
             
                model_key = f"{model}_{model_info.sha}_{precision}"
         | 
| 120 | 
             
                if model_key in requested_models:
         | 
| 121 | 
             
                    return styled_error(f"The model '{model}' with revision '{model_info.sha}' and precision '{precision}' has already been submitted.")
         | 
|  | |
| 125 | 
             
                if model_size is None:
         | 
| 126 | 
             
                    return styled_error(error_text)
         | 
| 127 |  | 
| 128 | 
            +
                # Absolute size limit for float16 and bfloat16
         | 
| 129 | 
             
                if precision in ["float16", "bfloat16"] and model_size > 100:
         | 
| 130 | 
             
                    return styled_error(f"Sadly, models larger than 100B parameters cannot be submitted in {precision} precision at this time. "
         | 
| 131 | 
             
                                        f"Your model size: {model_size:.2f}B parameters.")
         | 
| 132 |  | 
| 133 | 
            +
                # Precision-adjusted size limit for 8bit, 4bit, and GPTQ
         | 
| 134 | 
             
                if precision in ["8bit", "4bit", "GPTQ"]:
         | 
| 135 | 
             
                    size_checker = ModelSizeChecker(model=model, precision=precision, model_size_in_b=model_size)
         | 
| 136 |  | 
|  | |
| 165 | 
             
                modelcard_OK, error_msg, model_card = check_model_card(model)
         | 
| 166 | 
             
                if not modelcard_OK:
         | 
| 167 | 
             
                    return styled_error(error_msg)
         | 
| 168 | 
            +
                
         | 
| 169 | 
            +
                # Check the chat template submission
         | 
| 170 | 
            +
                if use_chat_template:
         | 
| 171 | 
            +
                    chat_template_valid, chat_template_error = check_chat_template(model, revision)
         | 
| 172 | 
            +
                    if not chat_template_valid:
         | 
| 173 | 
            +
                        return styled_error(chat_template_error)
         | 
| 174 |  | 
| 175 | 
             
                # Seems good, creating the eval
         | 
| 176 | 
             
                print("Adding new eval")
         | 
