Joash commited on
Commit
4a6c42f
·
1 Parent(s): 6a725a8

Improve model initialization with better state management

Browse files
Files changed (1) hide show
  1. app.py +24 -10
app.py CHANGED
@@ -44,9 +44,15 @@ class CodeReviewer:
44
  'avg_response_time': 0.0,
45
  'reviews_today': 0
46
  }
47
- self.initialize_model()
48
 
49
  @spaces.GPU
 
 
 
 
 
 
50
  def initialize_model(self):
51
  """Initialize the model and tokenizer."""
52
  try:
@@ -67,7 +73,8 @@ class CodeReviewer:
67
  'eos_token': '</s>',
68
  'bos_token': '<s>'
69
  }
70
- self.tokenizer.add_special_tokens(special_tokens)
 
71
  logger.info("Tokenizer loaded successfully")
72
 
73
  logger.info("Loading model...")
@@ -80,13 +87,18 @@ class CodeReviewer:
80
  cache_dir=CACHE_DIR,
81
  token=HF_TOKEN
82
  )
83
- # Resize embeddings for special tokens
84
- self.model.resize_token_embeddings(len(self.tokenizer))
 
 
 
85
  self.device = next(self.model.parameters()).device
86
  logger.info(f"Model loaded successfully on {self.device}")
 
87
  except Exception as e:
88
  logger.error(f"Error initializing model: {e}")
89
- raise
 
90
 
91
  def create_review_prompt(self, code: str, language: str) -> str:
92
  """Create a structured prompt for code review."""
@@ -104,10 +116,11 @@ Code:
104
  @spaces.GPU
105
  def review_code(self, code: str, language: str) -> str:
106
  """Perform code review using the model."""
107
- if not self.tokenizer or not self.model:
108
- return "Error: Model not properly initialized. Please try again later."
109
-
110
  try:
 
 
 
 
111
  start_time = datetime.now()
112
  prompt = self.create_review_prompt(code, language)
113
 
@@ -163,7 +176,7 @@ Code:
163
  self.update_metrics(review)
164
 
165
  # Clear GPU memory
166
- if self.device.type == "cuda":
167
  del inputs, outputs
168
  torch.cuda.empty_cache()
169
 
@@ -208,7 +221,7 @@ Code:
208
  'Total Reviews': self.metrics['total_reviews'],
209
  'Average Response Time': f"{self.metrics['avg_response_time']:.2f}s",
210
  'Reviews Today': self.metrics['reviews_today'],
211
- 'Device': str(self.device)
212
  }
213
 
214
  # Initialize reviewer
@@ -259,6 +272,7 @@ with gr.Blocks(theme=gr.themes.Soft()) as iface:
259
  if not code.strip():
260
  return "Please enter some code to review."
261
  try:
 
262
  return reviewer.review_code(code, language)
263
  except Exception as e:
264
  logger.error(f"Interface error: {e}")
 
44
  'avg_response_time': 0.0,
45
  'reviews_today': 0
46
  }
47
+ self._initialized = False
48
 
49
  @spaces.GPU
50
+ def ensure_initialized(self):
51
+ """Ensure model is initialized."""
52
+ if not self._initialized:
53
+ self.initialize_model()
54
+ self._initialized = True
55
+
56
  def initialize_model(self):
57
  """Initialize the model and tokenizer."""
58
  try:
 
73
  'eos_token': '</s>',
74
  'bos_token': '<s>'
75
  }
76
+ num_added = self.tokenizer.add_special_tokens(special_tokens)
77
+ logger.info(f"Added {num_added} special tokens")
78
  logger.info("Tokenizer loaded successfully")
79
 
80
  logger.info("Loading model...")
 
87
  cache_dir=CACHE_DIR,
88
  token=HF_TOKEN
89
  )
90
+ # Resize embeddings for special tokens if needed
91
+ if num_added > 0:
92
+ logger.info("Resizing model embeddings for special tokens")
93
+ self.model.resize_token_embeddings(len(self.tokenizer))
94
+
95
  self.device = next(self.model.parameters()).device
96
  logger.info(f"Model loaded successfully on {self.device}")
97
+ return True
98
  except Exception as e:
99
  logger.error(f"Error initializing model: {e}")
100
+ self._initialized = False
101
+ return False
102
 
103
  def create_review_prompt(self, code: str, language: str) -> str:
104
  """Create a structured prompt for code review."""
 
116
  @spaces.GPU
117
  def review_code(self, code: str, language: str) -> str:
118
  """Perform code review using the model."""
 
 
 
119
  try:
120
+ # Ensure model is initialized
121
+ if not self._initialized and not self.initialize_model():
122
+ return "Error: Model initialization failed. Please try again later."
123
+
124
  start_time = datetime.now()
125
  prompt = self.create_review_prompt(code, language)
126
 
 
176
  self.update_metrics(review)
177
 
178
  # Clear GPU memory
179
+ if self.device and self.device.type == "cuda":
180
  del inputs, outputs
181
  torch.cuda.empty_cache()
182
 
 
221
  'Total Reviews': self.metrics['total_reviews'],
222
  'Average Response Time': f"{self.metrics['avg_response_time']:.2f}s",
223
  'Reviews Today': self.metrics['reviews_today'],
224
+ 'Device': str(self.device) if self.device else "Not initialized"
225
  }
226
 
227
  # Initialize reviewer
 
272
  if not code.strip():
273
  return "Please enter some code to review."
274
  try:
275
+ reviewer.ensure_initialized() # Ensure model is initialized
276
  return reviewer.review_code(code, language)
277
  except Exception as e:
278
  logger.error(f"Interface error: {e}")