Spaces:
Sleeping
Sleeping
Joash
commited on
Commit
·
4a6c42f
1
Parent(s):
6a725a8
Improve model initialization with better state management
Browse files
app.py
CHANGED
@@ -44,9 +44,15 @@ class CodeReviewer:
|
|
44 |
'avg_response_time': 0.0,
|
45 |
'reviews_today': 0
|
46 |
}
|
47 |
-
self.
|
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 |
-
|
|
|
|
|
|
|
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 |
-
|
|
|
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}")
|