Gajendra5490 commited on
Commit
393d55e
·
verified ·
1 Parent(s): f02650a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +87 -17
app.py CHANGED
@@ -8,7 +8,7 @@ from huggingface_hub import hf_hub_download
8
  # Configuration constants
9
  MODEL_REPO = "Gajendra5490/Scrached_Trained_Model"
10
  CURRENT_USER = "gajendra82"
11
- CURRENT_UTC = "2025-05-06 15:15:08"
12
 
13
  def setup_logging():
14
  logging.basicConfig(
@@ -22,6 +22,74 @@ def setup_logging():
22
 
23
  logger = setup_logging()
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  class ModelInference:
26
  def __init__(self):
27
  self.logger = logging.getLogger(__name__)
@@ -31,20 +99,22 @@ class ModelInference:
31
 
32
  def load_model(self):
33
  try:
34
- # Download model and tokenizer from your Hugging Face repository
35
- self.logger.info(f"Downloading model from {MODEL_REPO}")
36
 
37
  model_path = hf_hub_download(
38
  repo_id=MODEL_REPO,
39
- filename="model.pt"
 
40
  )
41
 
42
  tokenizer_path = hf_hub_download(
43
  repo_id=MODEL_REPO,
44
- filename="tokenizer.json"
 
45
  )
46
 
47
- # Load model
48
  self.logger.info("Loading model...")
49
  model_data = torch.load(
50
  model_path,
@@ -58,11 +128,11 @@ class ModelInference:
58
  tokenizer_data = json.load(f)
59
 
60
  # Initialize model
61
- from model import ImprovedTransformer
62
  model_config = model_data['model_config']
 
63
 
64
  self.model = ImprovedTransformer(
65
- vocab_size=len(tokenizer_data['vocab']),
66
  d_model=model_config.get('d_model', 512),
67
  nhead=model_config.get('nhead', 8),
68
  num_encoder_layers=model_config.get('num_encoder_layers', 6),
@@ -76,13 +146,12 @@ class ModelInference:
76
  self.model.eval()
77
 
78
  # Initialize tokenizer
79
- from tokenizer import EnhancedTokenizer
80
  self.tokenizer = EnhancedTokenizer(tokenizer_data['vocab'])
81
 
82
  self.logger.info("Model and tokenizer loaded successfully")
83
 
84
  except Exception as e:
85
- self.logger.error(f"Error loading model: {e}")
86
  raise
87
 
88
  @torch.no_grad()
@@ -120,26 +189,28 @@ class ModelInference:
120
  return answer
121
 
122
  except Exception as e:
123
- self.logger.error(f"Error generating answer: {e}")
124
- return f"Error: {str(e)}"
125
 
126
- # Initialize model
127
  try:
128
  print("Initializing model...")
129
  model = ModelInference()
130
  print("Model initialized successfully")
131
  except Exception as e:
132
- print(f"Error initializing model: {e}")
133
  model = None
134
 
135
  def process_input(input_text):
136
  """Process input through Gradio"""
 
137
  try:
138
  if model is None:
139
- return "Error: Model not initialized properly"
 
140
  return model.generate_answer(input_text)
141
  except Exception as e:
142
- logger.error(f"Error processing input: {e}")
143
  return f"Error: {str(e)}"
144
 
145
  # Create Gradio interface
@@ -163,7 +234,6 @@ interface = gr.Interface(
163
  Enter your question and click submit to get a response.
164
  """,
165
  theme=gr.themes.Soft(),
166
- allow_flagging="never",
167
  examples=[
168
  ["What is this about?"],
169
  ["Can you explain the topic?"],
 
8
  # Configuration constants
9
  MODEL_REPO = "Gajendra5490/Scrached_Trained_Model"
10
  CURRENT_USER = "gajendra82"
11
+ CURRENT_UTC = "2025-05-06 15:31:28"
12
 
13
  def setup_logging():
14
  logging.basicConfig(
 
22
 
23
  logger = setup_logging()
24
 
25
+ class EnhancedTokenizer:
26
+ def __init__(self, vocab):
27
+ self.vocab = vocab
28
+ self.special_tokens = {
29
+ "<user>": len(vocab),
30
+ "<assistant>": len(vocab) + 1,
31
+ "<sep>": len(vocab) + 2,
32
+ "<eos>": len(vocab) + 3
33
+ }
34
+
35
+ def encode(self, text):
36
+ tokens = text.split()
37
+ return [self.vocab.get(token, 0) if token not in self.special_tokens
38
+ else self.special_tokens[token] for token in tokens]
39
+
40
+ def decode(self, ids):
41
+ reverse_vocab = {v: k for k, v in self.vocab.items()}
42
+ reverse_special = {v: k for k, v in self.special_tokens.items()}
43
+ return " ".join(reverse_vocab.get(id, reverse_special.get(id, "<unk>"))
44
+ for id in ids)
45
+
46
+ class ImprovedTransformer(torch.nn.Module):
47
+ def __init__(self, vocab_size, d_model=512, nhead=8,
48
+ num_encoder_layers=6, num_decoder_layers=6,
49
+ dim_feedforward=2048, dropout=0.1, max_seq_length=128):
50
+ super().__init__()
51
+
52
+ self.d_model = d_model
53
+ self.embedding = torch.nn.Embedding(vocab_size, d_model)
54
+ self.pos_encoder = torch.nn.Embedding(max_seq_length, d_model)
55
+
56
+ encoder_layer = torch.nn.TransformerEncoderLayer(
57
+ d_model=d_model,
58
+ nhead=nhead,
59
+ dim_feedforward=dim_feedforward,
60
+ dropout=dropout,
61
+ batch_first=True
62
+ )
63
+ decoder_layer = torch.nn.TransformerDecoderLayer(
64
+ d_model=d_model,
65
+ nhead=nhead,
66
+ dim_feedforward=dim_feedforward,
67
+ dropout=dropout,
68
+ batch_first=True
69
+ )
70
+
71
+ self.transformer_encoder = torch.nn.TransformerEncoder(
72
+ encoder_layer,
73
+ num_encoder_layers
74
+ )
75
+ self.transformer_decoder = torch.nn.TransformerDecoder(
76
+ decoder_layer,
77
+ num_decoder_layers
78
+ )
79
+
80
+ self.output = torch.nn.Linear(d_model, vocab_size)
81
+
82
+ def forward(self, src, tgt):
83
+ src_pos = torch.arange(0, src.size(1)).unsqueeze(0).to(src.device)
84
+ tgt_pos = torch.arange(0, tgt.size(1)).unsqueeze(0).to(tgt.device)
85
+
86
+ src = self.embedding(src) + self.pos_encoder(src_pos)
87
+ tgt = self.embedding(tgt) + self.pos_encoder(tgt_pos)
88
+
89
+ memory = self.transformer_encoder(src)
90
+ output = self.transformer_decoder(tgt, memory)
91
+ return self.output(output)
92
+
93
  class ModelInference:
94
  def __init__(self):
95
  self.logger = logging.getLogger(__name__)
 
99
 
100
  def load_model(self):
101
  try:
102
+ # Download model and tokenizer
103
+ self.logger.info(f"Downloading from {MODEL_REPO}")
104
 
105
  model_path = hf_hub_download(
106
  repo_id=MODEL_REPO,
107
+ filename="model.pt",
108
+ token=True # Will use token if logged in
109
  )
110
 
111
  tokenizer_path = hf_hub_download(
112
  repo_id=MODEL_REPO,
113
+ filename="tokenizer.json",
114
+ token=True
115
  )
116
 
117
+ # Load model data
118
  self.logger.info("Loading model...")
119
  model_data = torch.load(
120
  model_path,
 
128
  tokenizer_data = json.load(f)
129
 
130
  # Initialize model
 
131
  model_config = model_data['model_config']
132
+ vocab_size = len(tokenizer_data['vocab']) + 4 # Add special tokens
133
 
134
  self.model = ImprovedTransformer(
135
+ vocab_size=vocab_size,
136
  d_model=model_config.get('d_model', 512),
137
  nhead=model_config.get('nhead', 8),
138
  num_encoder_layers=model_config.get('num_encoder_layers', 6),
 
146
  self.model.eval()
147
 
148
  # Initialize tokenizer
 
149
  self.tokenizer = EnhancedTokenizer(tokenizer_data['vocab'])
150
 
151
  self.logger.info("Model and tokenizer loaded successfully")
152
 
153
  except Exception as e:
154
+ self.logger.error(f"Error loading model: {str(e)}")
155
  raise
156
 
157
  @torch.no_grad()
 
189
  return answer
190
 
191
  except Exception as e:
192
+ self.logger.error(f"Error generating answer: {str(e)}")
193
+ return f"Error generating answer: {str(e)}"
194
 
195
+ # Initialize model globally
196
  try:
197
  print("Initializing model...")
198
  model = ModelInference()
199
  print("Model initialized successfully")
200
  except Exception as e:
201
+ print(f"Error initializing model: {str(e)}")
202
  model = None
203
 
204
  def process_input(input_text):
205
  """Process input through Gradio"""
206
+ global model
207
  try:
208
  if model is None:
209
+ # Try to initialize model again
210
+ model = ModelInference()
211
  return model.generate_answer(input_text)
212
  except Exception as e:
213
+ logger.error(f"Error processing input: {str(e)}")
214
  return f"Error: {str(e)}"
215
 
216
  # Create Gradio interface
 
234
  Enter your question and click submit to get a response.
235
  """,
236
  theme=gr.themes.Soft(),
 
237
  examples=[
238
  ["What is this about?"],
239
  ["Can you explain the topic?"],