Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -84,81 +84,60 @@ html, body, [class*="css"] { font-family: 'Inter', sans-serif; }
|
|
| 84 |
""", unsafe_allow_html=True)
|
| 85 |
|
| 86 |
# βββββββββββββββββββββββ CONSTANTS βββββββββββββββββββββββββββββββββββββββββββ
|
| 87 |
-
|
| 88 |
-
BASE_MODEL
|
| 89 |
-
MAX_LEN
|
| 90 |
-
DEVICE
|
| 91 |
|
| 92 |
# βββββββββββββββββββββββ MODEL LOADING βββββββββββββββββββββββββββββββββββββββ
|
| 93 |
@st.cache_resource(show_spinner=False)
|
| 94 |
def load_model():
|
|
|
|
|
|
|
|
|
|
| 95 |
"""
|
| 96 |
-
|
| 97 |
-
- Tokenizer: xlm-roberta-base (notebook Cell 22)
|
| 98 |
-
- Model: fine_tuned_roberta_model folder (notebook Cell 45)
|
| 99 |
-
|
| 100 |
-
The notebook only saves the MODEL (model.save_pretrained), not the tokenizer.
|
| 101 |
-
So we always load the tokenizer from xlm-roberta-base.
|
| 102 |
-
To also save the tokenizer, add to your notebook after training:
|
| 103 |
-
tokenizer.save_pretrained("/content/fine_tuned_roberta_model")
|
| 104 |
-
"""
|
| 105 |
load_log = []
|
|
|
|
| 106 |
|
| 107 |
-
# Tokenizer
|
| 108 |
-
|
| 109 |
-
Path(MODEL_PATH).exists() and
|
| 110 |
-
(Path(MODEL_PATH) / "tokenizer.json").exists()
|
| 111 |
-
)
|
| 112 |
-
if tokenizer_in_folder:
|
| 113 |
-
tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)
|
| 114 |
-
load_log.append("Tokenizer: loaded from saved model folder")
|
| 115 |
-
else:
|
| 116 |
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
|
| 117 |
-
load_log.append("Tokenizer: loaded from xlm-roberta-base
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
model_vocab_size
|
| 136 |
-
|
| 137 |
-
if tokenizer_vocab_size != model_vocab_size:
|
| 138 |
-
load_log.append(f"Resizing model embeddings: {model_vocab_size} β {tokenizer_vocab_size}")
|
| 139 |
-
model.resize_token_embeddings(tokenizer_vocab_size)
|
| 140 |
-
|
| 141 |
-
# Load the fine-tuned weights
|
| 142 |
-
if (Path(MODEL_PATH) / "model.safetensors").exists():
|
| 143 |
-
from safetensors.torch import load_file
|
| 144 |
-
state_dict = load_file(Path(MODEL_PATH) / "model.safetensors")
|
| 145 |
-
model.load_state_dict(state_dict, strict=False)
|
| 146 |
-
else:
|
| 147 |
-
model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH, num_labels=2)
|
| 148 |
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
|
|
|
| 156 |
source = "base-NOT-fine-tuned"
|
| 157 |
-
load_log.append("Model: WARNING β using base model. Fine-tuned weights not found!")
|
| 158 |
|
| 159 |
model.to(DEVICE)
|
| 160 |
model.eval()
|
| 161 |
return model, tokenizer, source, load_log
|
|
|
|
| 162 |
|
| 163 |
|
| 164 |
# βββββββββββββββββββββββ NOTEBOOK FUNCTIONS ββββββββββββββββββββββββββββββββββ
|
|
|
|
| 84 |
""", unsafe_allow_html=True)
|
| 85 |
|
| 86 |
# βββββββββββββββββββββββ CONSTANTS βββββββββββββββββββββββββββββββββββββββββββ
|
| 87 |
+
FINETUNED_REPO = "PrachiSandipkumar/Taana-Tracker-Sarcasm"
|
| 88 |
+
BASE_MODEL = "xlm-roberta-base"
|
| 89 |
+
MAX_LEN = 256
|
| 90 |
+
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
| 91 |
|
| 92 |
# βββββββββββββββββββββββ MODEL LOADING βββββββββββββββββββββββββββββββββββββββ
|
| 93 |
@st.cache_resource(show_spinner=False)
|
| 94 |
def load_model():
|
| 95 |
+
"""
|
| 96 |
+
Loads tokenizer from xlm-roberta-base and fine-tuned weights
|
| 97 |
+
from the dedicated Hugging Face model repository.
|
| 98 |
"""
|
| 99 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 100 |
load_log = []
|
| 101 |
+
source = "base-NOT-fine-tuned"
|
| 102 |
|
| 103 |
+
# 1. Tokenizer β Always pull from xlm-roberta-base as per Cell 22
|
| 104 |
+
try:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 105 |
tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL)
|
| 106 |
+
load_log.append("Tokenizer: Successfully loaded from xlm-roberta-base")
|
| 107 |
+
except Exception as e:
|
| 108 |
+
st.error(f"Failed to load base tokenizer: {e}")
|
| 109 |
+
raise e
|
| 110 |
+
|
| 111 |
+
# 2. Model β Pull configuration and weights from your fine-tuned repo
|
| 112 |
+
try:
|
| 113 |
+
# Load model with weights from your fine-tuned repository
|
| 114 |
+
model = AutoModelForSequenceClassification.from_pretrained(
|
| 115 |
+
FINETUNED_REPO,
|
| 116 |
+
num_labels=2
|
| 117 |
+
)
|
| 118 |
+
|
| 119 |
+
# Check and handle vocab size alignment safely
|
| 120 |
+
tokenizer_vocab_size = len(tokenizer)
|
| 121 |
+
model_vocab_size = model.get_input_embeddings().weight.shape[0]
|
| 122 |
+
|
| 123 |
+
if tokenizer_vocab_size != model_vocab_size:
|
| 124 |
+
load_log.append(f"Resizing embeddings: {model_vocab_size} β {tokenizer_vocab_size}")
|
| 125 |
+
model.resize_token_embeddings(tokenizer_vocab_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
|
| 127 |
+
source = "fine-tuned"
|
| 128 |
+
load_log.append(f"Model: Fine-tuned weights successfully loaded from HF Hub ({FINETUNED_REPO})")
|
| 129 |
+
|
| 130 |
+
except Exception as e:
|
| 131 |
+
# Fallback safeguard back to base if repo files fail to initialize
|
| 132 |
+
load_log.append(f"Model: Fine-tuned load FAILED β {e}")
|
| 133 |
+
load_log.append("Model: WARNING β Falling back to base xlm-roberta-base.")
|
| 134 |
+
model = AutoModelForSequenceClassification.from_pretrained(BASE_MODEL, num_labels=2)
|
| 135 |
source = "base-NOT-fine-tuned"
|
|
|
|
| 136 |
|
| 137 |
model.to(DEVICE)
|
| 138 |
model.eval()
|
| 139 |
return model, tokenizer, source, load_log
|
| 140 |
+
|
| 141 |
|
| 142 |
|
| 143 |
# βββββββββββββββββββββββ NOTEBOOK FUNCTIONS ββββββββββββββββββββββββββββββββββ
|