Manages model loading via llama-server. Single-model: always loads the primary 7B Qwen2.5-Coder model.
| 294 | |
| 295 | |
| 296 | class ModelLoader: |
| 297 | """ |
| 298 | Manages model loading via llama-server. |
| 299 | |
| 300 | Single-model: always loads the primary 7B Qwen2.5-Coder model. |
| 301 | """ |
| 302 | |
| 303 | def __init__(self): |
| 304 | self._loaded: bool = False |
| 305 | self._server: Optional[LlamaServer] = None |
| 306 | self._loaded_at: float = 0 |
| 307 | self._load_failures: int = 0 |
| 308 | |
| 309 | def load_primary(self) -> bool: |
| 310 | """Load the primary (7B) model.""" |
| 311 | try: |
| 312 | info(f"Loading model: {MODEL_PATH.name}") |
| 313 | |
| 314 | # Check if model file exists |
| 315 | if not MODEL_PATH.exists(): |
| 316 | error(f"Model file not found: {MODEL_PATH}") |
| 317 | self._load_failures += 1 |
| 318 | return False |
| 319 | |
| 320 | # Check if llama-server binary exists |
| 321 | llama_bin = Path(LLAMA_SERVER_BIN) |
| 322 | if not llama_bin.exists(): |
| 323 | error(f"llama-server not found: {LLAMA_SERVER_BIN}") |
| 324 | self._load_failures += 1 |
| 325 | return False |
| 326 | |
| 327 | # Start server |
| 328 | self._server = LlamaServer(MODEL_PATH) |
| 329 | if not self._server.start(): |
| 330 | self._load_failures += 1 |
| 331 | return False |
| 332 | |
| 333 | self._loaded = True |
| 334 | self._loaded_at = time.time() |
| 335 | success(f"Loaded model ({MODEL_PATH.name})") |
| 336 | return True |
| 337 | |
| 338 | except Exception as e: |
| 339 | error(f"Failed to load model: {e}") |
| 340 | self._load_failures += 1 |
| 341 | return False |
| 342 | |
| 343 | def unload(self): |
| 344 | """Unload (stop) the current model server.""" |
| 345 | if self._server: |
| 346 | info("Stopping model server...") |
| 347 | self._server.stop() |
| 348 | self._server = None |
| 349 | self._loaded = False |
| 350 | |
| 351 | def ensure_model(self, model_type: str = "primary") -> bool: |
| 352 | """Ensure the model is loaded and running.""" |
| 353 | if self._loaded and self._server and self._server.is_running(): |