File size: 3,140 Bytes
c01955c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import fastapi
import logging
import sys
import os
from utils.main_utils import read_yaml_file_sync

router = fastapi.APIRouter()

@router.get("/get_available_attributes")
async def get_attributes():
    """Description is just for your understanding do not pass it to the api"""
    try:
        # Fixed path to match current structure
        config_path = os.path.join("src", "CodeRunAndModelTrain", "config", "model_train.yaml")
        config = read_yaml_file_sync(config_path)
        
        res = {
            "make_regression_params": {
                "n_samples": {"type": "int", "default": 100, "description": "Number of samples"},
                "n_features": {"type": "int", "default": 100, "description": "Number of total features"},
                "n_informative": {"type": "int", "default": 10, "description": "Number of informative features"},
                "n_targets": {"type": "int", "default": 1, "description": "Number of regression targets"},
                "bias": {"type": "float", "default": 0.0, "description": "The bias term in the underlying linear model"},
                "noise": {"type": "float", "default": 0.0, "description": "The standard deviation of the gaussian noise"},
                "shuffle": {"type": "bool", "default": True, "description": "Shuffle the samples and the features"},
                "random_state": {"type": "int", "default": None, "description": "Determines random number generation"}
            },
            "make_classification_params": {
                "n_samples": {"type": "int", "default": 100, "description": "Number of samples"},
                "n_features": {"type": "int", "default": 20, "description": "Number of total features"},
                "n_informative": {"type": "int", "default": 2, "description": "Number of informative features"},
                "n_redundant": {"type": "int", "default": 2, "description": "Number of redundant features"},
                "n_repeated": {"type": "int", "default": 0, "description": "Number of repeated features"},
                "n_classes": {"type": "int", "default": 2, "description": "Number of classes"},
                "n_clusters_per_class": {"type": "int", "default": 2, "description": "Number of clusters per class"},
                "flip_y": {"type": "float", "default": 0.01, "description": "Fraction of samples whose class is assigned randomly"},
                "class_sep": {"type": "float", "default": 1.0, "description": "The factor multiplying the hypercube size"},
                "shuffle": {"type": "bool", "default": True, "description": "Shuffle the samples and the features"},
                "random_state": {"type": "int", "default": None, "description": "Determines random number generation"}
            },
            "regression_models": list(config.get("regression_models", {}).keys()),
            "classification_models": list(config.get("classification_models", {}).keys()),
            "model_train_config": config
        }
        return res
    except Exception as e:
        logging.error(f"Error in get_available_attributes: {str(e)}")
        return {"error": str(e)}