Gajendra5490 commited on
Commit
90d021c
·
verified ·
1 Parent(s): 6f36468

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +64 -37
app.py CHANGED
@@ -9,7 +9,7 @@ from huggingface_hub import HfApi, hf_hub_download
9
  # Configuration constants
10
  MODEL_REPO = "Gajendra5490/Scrached_Trained_Model"
11
  CURRENT_USER = "gajendra82"
12
- CURRENT_UTC = "2025-05-06 15:52:11"
13
 
14
  def setup_logging():
15
  logging.basicConfig(
@@ -23,6 +23,23 @@ def setup_logging():
23
 
24
  logger = setup_logging()
25
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
  class ImprovedTransformer(torch.nn.Module):
27
  def __init__(
28
  self,
@@ -39,14 +56,7 @@ class ImprovedTransformer(torch.nn.Module):
39
 
40
  self.d_model = d_model
41
  self.embedding = torch.nn.Embedding(vocab_size, d_model)
42
-
43
- # Position encoding
44
- position = torch.arange(max_seq_length).unsqueeze(1)
45
- div_term = torch.exp(torch.arange(0, d_model, 2) * (-torch.log(torch.tensor(10000.0)) / d_model))
46
- pe = torch.zeros(max_seq_length, 1, d_model)
47
- pe[:, 0, 0::2] = torch.sin(position * div_term)
48
- pe[:, 0, 1::2] = torch.cos(position * div_term)
49
- self.register_buffer('pe', pe)
50
 
51
  # Main transformer
52
  self.transformer = torch.nn.Transformer(
@@ -59,29 +69,32 @@ class ImprovedTransformer(torch.nn.Module):
59
  batch_first=True
60
  )
61
 
62
- # Output layers
63
  self.output_layer = torch.nn.Linear(d_model, vocab_size)
64
  self.norm = torch.nn.LayerNorm(d_model)
65
 
66
  def forward(self, src, tgt):
67
- # Create masks
68
- src_mask = self.transformer.generate_square_subsequent_mask(src.size(1)).to(src.device)
 
 
 
69
  tgt_mask = self.transformer.generate_square_subsequent_mask(tgt.size(1)).to(tgt.device)
70
 
71
- # Embeddings
72
- src = self.embedding(src) * torch.sqrt(torch.tensor(self.d_model))
73
- tgt = self.embedding(tgt) * torch.sqrt(torch.tensor(self.d_model))
74
 
75
- # Add positional encoding
76
- src = src + self.pe[:src.size(1)].transpose(0, 1)
77
- tgt = tgt + self.pe[:tgt.size(1)].transpose(0, 1)
78
 
79
  # Transform
80
  output = self.transformer(
81
  src,
82
  tgt,
83
- src_mask=src_mask,
84
- tgt_mask=tgt_mask
 
85
  )
86
 
87
  # Output processing
@@ -115,31 +128,32 @@ class ModelInference:
115
  token=token
116
  )
117
 
118
- # Load tokenizer first
 
 
 
 
 
 
 
119
  self.logger.info("Loading tokenizer...")
120
  with open(tokenizer_path, 'r', encoding='utf-8') as f:
121
  tokenizer_data = json.load(f)
122
 
123
- # Initialize tokenizer
124
  self.vocab = tokenizer_data['vocab']
 
 
125
  self.special_tokens = {
126
- "<user>": len(self.vocab),
127
- "<assistant>": len(self.vocab) + 1,
128
- "<sep>": len(self.vocab) + 2,
129
- "<eos>": len(self.vocab) + 3
130
  }
131
 
132
- # Load model
133
- self.logger.info("Loading model...")
134
- model_data = torch.load(
135
- model_path,
136
- map_location=self.device
137
- )
138
-
139
- # Initialize model with correct vocab size
140
- vocab_size = len(self.vocab) + len(self.special_tokens)
141
  self.model = ImprovedTransformer(
142
- vocab_size=vocab_size,
143
  d_model=512,
144
  nhead=8,
145
  num_encoder_layers=3,
@@ -147,8 +161,19 @@ class ModelInference:
147
  dim_feedforward=2048
148
  ).to(self.device)
149
 
 
 
 
 
 
 
 
 
 
 
 
150
  # Load state dict
151
- self.model.load_state_dict(model_data['model_state_dict'])
152
  self.model.eval()
153
 
154
  self.logger.info("Model loaded successfully")
@@ -234,6 +259,8 @@ interface = gr.Interface(
234
  Model Repository: {MODEL_REPO}
235
  Current User: {CURRENT_USER}
236
  Last Updated: {CURRENT_UTC} UTC
 
 
237
  """,
238
  theme=gr.themes.Soft(),
239
  examples=[
 
9
  # Configuration constants
10
  MODEL_REPO = "Gajendra5490/Scrached_Trained_Model"
11
  CURRENT_USER = "gajendra82"
12
+ CURRENT_UTC = "2025-05-06 15:54:34"
13
 
14
  def setup_logging():
15
  logging.basicConfig(
 
23
 
24
  logger = setup_logging()
25
 
26
+ class PositionalEncoding(torch.nn.Module):
27
+ def __init__(self, d_model, dropout=0.1, max_len=5000):
28
+ super().__init__()
29
+ self.dropout = torch.nn.Dropout(p=dropout)
30
+
31
+ pe = torch.zeros(max_len, d_model)
32
+ position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
33
+ div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-torch.log(torch.tensor(10000.0)) / d_model))
34
+ pe[:, 0::2] = torch.sin(position * div_term)
35
+ pe[:, 1::2] = torch.cos(position * div_term)
36
+ pe = pe.unsqueeze(0)
37
+ self.register_buffer('pe', pe)
38
+
39
+ def forward(self, x):
40
+ x = x + self.pe[:, :x.size(1)]
41
+ return self.dropout(x)
42
+
43
  class ImprovedTransformer(torch.nn.Module):
44
  def __init__(
45
  self,
 
56
 
57
  self.d_model = d_model
58
  self.embedding = torch.nn.Embedding(vocab_size, d_model)
59
+ self.pos_encoder = PositionalEncoding(d_model, dropout)
 
 
 
 
 
 
 
60
 
61
  # Main transformer
62
  self.transformer = torch.nn.Transformer(
 
69
  batch_first=True
70
  )
71
 
72
+ # Output layer
73
  self.output_layer = torch.nn.Linear(d_model, vocab_size)
74
  self.norm = torch.nn.LayerNorm(d_model)
75
 
76
  def forward(self, src, tgt):
77
+ # Create padding masks
78
+ src_key_padding_mask = (src == 0).to(src.device)
79
+ tgt_key_padding_mask = (tgt == 0).to(tgt.device)
80
+
81
+ # Create causal mask for target
82
  tgt_mask = self.transformer.generate_square_subsequent_mask(tgt.size(1)).to(tgt.device)
83
 
84
+ # Embeddings and positional encoding
85
+ src = self.embedding(src) * torch.sqrt(torch.tensor(self.d_model, dtype=torch.float))
86
+ tgt = self.embedding(tgt) * torch.sqrt(torch.tensor(self.d_model, dtype=torch.float))
87
 
88
+ src = self.pos_encoder(src)
89
+ tgt = self.pos_encoder(tgt)
 
90
 
91
  # Transform
92
  output = self.transformer(
93
  src,
94
  tgt,
95
+ tgt_mask=tgt_mask,
96
+ src_key_padding_mask=src_key_padding_mask,
97
+ tgt_key_padding_mask=tgt_key_padding_mask
98
  )
99
 
100
  # Output processing
 
128
  token=token
129
  )
130
 
131
+ # Load model data first to get configuration
132
+ self.logger.info("Loading model data...")
133
+ model_data = torch.load(
134
+ model_path,
135
+ map_location=self.device
136
+ )
137
+
138
+ # Load tokenizer
139
  self.logger.info("Loading tokenizer...")
140
  with open(tokenizer_path, 'r', encoding='utf-8') as f:
141
  tokenizer_data = json.load(f)
142
 
143
+ # Initialize tokenizer with the same vocabulary size as the saved model
144
  self.vocab = tokenizer_data['vocab']
145
+ vocab_size = len(self.vocab) # Use exact vocab size from saved model
146
+
147
  self.special_tokens = {
148
+ "<user>": vocab_size,
149
+ "<assistant>": vocab_size + 1,
150
+ "<sep>": vocab_size + 2,
151
+ "<eos>": vocab_size + 3
152
  }
153
 
154
+ # Initialize model with exact vocab size
 
 
 
 
 
 
 
 
155
  self.model = ImprovedTransformer(
156
+ vocab_size=vocab_size + 4, # Add exactly 4 special tokens
157
  d_model=512,
158
  nhead=8,
159
  num_encoder_layers=3,
 
161
  dim_feedforward=2048
162
  ).to(self.device)
163
 
164
+ # Fix state dict keys
165
+ fixed_state_dict = {}
166
+ for k, v in model_data['model_state_dict'].items():
167
+ if k.startswith('transformer.'):
168
+ fixed_state_dict[k] = v
169
+ elif k.startswith('pos_encoder.'):
170
+ if k == 'pos_encoder.pe':
171
+ fixed_state_dict['pos_encoder.pe'] = v
172
+ else:
173
+ fixed_state_dict[k] = v
174
+
175
  # Load state dict
176
+ self.model.load_state_dict(fixed_state_dict, strict=True)
177
  self.model.eval()
178
 
179
  self.logger.info("Model loaded successfully")
 
259
  Model Repository: {MODEL_REPO}
260
  Current User: {CURRENT_USER}
261
  Last Updated: {CURRENT_UTC} UTC
262
+
263
+ Enter your question and click submit to get a response.
264
  """,
265
  theme=gr.themes.Soft(),
266
  examples=[