PrachiSandipkumar commited on
Commit
a0b486d
Β·
verified Β·
1 Parent(s): d93b154

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -61
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
- MODEL_PATH = "fine_tuned_roberta_model"
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
- Mirrors the notebook exactly:
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 ➜ notebook Cell 22 always uses xlm-roberta-base
108
- tokenizer_in_folder = (
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 (tokenizer not in model folder)")
118
-
119
- # Model ➜ fine-tuned weights from notebook Cell 45
120
- weights_exist = Path(MODEL_PATH).exists() and (
121
- (Path(MODEL_PATH) / "model.safetensors").exists() or
122
- (Path(MODEL_PATH) / "pytorch_model.bin").exists()
123
- )
124
-
125
- model = None
126
- source = ""
127
-
128
- if weights_exist:
129
- try:
130
- # Initialize base model first
131
- model = AutoModelForSequenceClassification.from_pretrained(BASE_MODEL, num_labels=2)
132
-
133
- # Resize embeddings to match tokenizer vocab size
134
- tokenizer_vocab_size = len(tokenizer)
135
- model_vocab_size = model.get_input_embeddings().weight.shape[0]
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
- source = "fine-tuned"
150
- load_log.append(f"Model: fine-tuned weights loaded from '{MODEL_PATH}'")
151
- except Exception as e:
152
- load_log.append(f"Model: fine-tuned load FAILED ➜ {e}")
153
-
154
- if model is None:
155
- model = AutoModelForSequenceClassification.from_pretrained(BASE_MODEL, num_labels=2)
 
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 ──────────────────────────────────