Spaces:
Running
Running
| """ | |
| Web interface for model management and training | |
| """ | |
| import os | |
| import json | |
| import gradio as gr | |
| import pandas as pd | |
| from datetime import datetime | |
| from typing import List, Dict, Any, Tuple, Optional | |
| from src.analytics.chat_analyzer import ChatAnalyzer | |
| from src.training.fine_tuner import FineTuner, finetune_from_chat_history | |
| from src.training.model_manager import ModelManager | |
| from config.settings import MODEL_PATH, TRAINING_OUTPUT_DIR | |
| # Initialize managers | |
| model_manager = ModelManager() | |
| chat_analyzer = ChatAnalyzer() | |
| def get_models_df(): | |
| """ | |
| Get dataframe with models from registry | |
| Returns: | |
| pandas.DataFrame: Dataframe with models | |
| """ | |
| models = model_manager.list_models() | |
| if not models: | |
| return pd.DataFrame(columns=["model_id", "version", "description", "is_active", "registration_date"]) | |
| # Create dataframe | |
| df = pd.DataFrame(models) | |
| # Select required columns | |
| columns = ["model_id", "version", "description", "is_active", "registration_date"] | |
| df = df[columns] | |
| # Sort by model_id and registration_date | |
| df = df.sort_values(by=["model_id", "registration_date"], ascending=[True, False]) | |
| return df | |
| def generate_chat_analysis(): | |
| """Generate analysis of chat history""" | |
| return chat_analyzer.analyze_chats() | |
| def register_model_action(model_id, version, source, description, set_active): | |
| """ | |
| Model registration action | |
| Args: | |
| model_id: Model identifier | |
| version: Model version | |
| source: Model source | |
| description: Model description | |
| set_active: Set as active | |
| Returns: | |
| str: Operation result | |
| """ | |
| # Input validation | |
| if not model_id or not version or not source: | |
| return "Error: all fields are required" | |
| # Register model | |
| success, message = model_manager.register_model( | |
| model_id=model_id, | |
| version=version, | |
| source=source, | |
| description=description, | |
| is_active=set_active | |
| ) | |
| if not success: | |
| return f"Error: {message}" | |
| # If model download option is set, download it | |
| if source.startswith("hf://"): | |
| success, download_message = model_manager.download_model(model_id, version) | |
| if not success: | |
| return f"Model registered but not downloaded: {download_message}" | |
| message += f"\n{download_message}" | |
| return message | |
| def import_local_model_action(source_path, model_id, version, description, set_active): | |
| """ | |
| Local model import action | |
| Args: | |
| source_path: Path to model directory | |
| model_id: Model identifier | |
| version: Model version | |
| description: Model description | |
| set_active: Set as active | |
| Returns: | |
| str: Operation result | |
| """ | |
| # Input validation | |
| if not source_path or not model_id or not version: | |
| return "Error: all fields are required" | |
| # Check directory existence | |
| if not os.path.exists(source_path): | |
| return f"Error: directory {source_path} does not exist" | |
| # Import model | |
| success, message = model_manager.import_local_model( | |
| source_path=source_path, | |
| model_id=model_id, | |
| version=version, | |
| description=description, | |
| is_active=set_active | |
| ) | |
| return message | |
| def set_active_model_action(model_row_index, models_df): | |
| """ | |
| Set active model action | |
| Args: | |
| model_row_index: Model row index in dataframe | |
| models_df: Dataframe with models | |
| Returns: | |
| str: Operation result | |
| """ | |
| try: | |
| # Get selected model information | |
| model_row = models_df.iloc[model_row_index] | |
| model_id = model_row["model_id"] | |
| version = model_row["version"] | |
| # Set as active | |
| success, message = model_manager.set_active_model(model_id, version) | |
| return message | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| def delete_model_action(model_row_index, models_df): | |
| """ | |
| Delete model action | |
| Args: | |
| model_row_index: Model row index in dataframe | |
| models_df: Dataframe with models | |
| Returns: | |
| str: Operation result | |
| """ | |
| try: | |
| # Get selected model information | |
| model_row = models_df.iloc[model_row_index] | |
| model_id = model_row["model_id"] | |
| version = model_row["version"] | |
| # Delete model | |
| success, message = model_manager.delete_model(model_id, version) | |
| return message | |
| except Exception as e: | |
| return f"Error: {str(e)}" | |
| def start_finetune_action(epochs, batch_size, learning_rate): | |
| """Start model fine-tuning""" | |
| try: | |
| from src.training.fine_tuner import finetune_from_chat_history | |
| success, message = finetune_from_chat_history( | |
| epochs=epochs | |
| ) | |
| return f"Training {'completed' if success else 'failed'}: {message}" | |
| except Exception as e: | |
| return f"Error starting training: {str(e)}" | |