usman-ai-dev's picture
Deploy AI Code Maintainability Scoring Engine to Hugging Face Spaces
38bc0dc verified
Raw
History Blame Contribute Delete
2.16 kB
import sys
try:
sys.stdout.reconfigure(encoding='utf-8')
sys.stderr.reconfigure(encoding='utf-8')
except Exception:
pass
from ast_analyzer import extract_features
from feature_pipeline import prepare_inference_vector
from model_trainer import load_model
from explanation_engine import explain
try:
_MODEL = load_model()
except FileNotFoundError:
_MODEL = None
def _get_risk_level(score):
if score <= 30:
return "Low"
elif score <= 60:
return "Medium"
else:
return "High"
def evaluate(source):
if _MODEL is None:
return {
"error": True,
"message": "Model not found. Run train_model() first."
}
raw_features = extract_features(source)
if raw_features.get("error"):
return raw_features
X_scaled = prepare_inference_vector(raw_features)
probability = float(_MODEL.predict_proba(X_scaled)[0][1])
risk_score = int(probability * 100)
risk_level = _get_risk_level(risk_score)
explanations = explain(_MODEL, raw_features, top_n=3)
result = {
"risk_score": risk_score,
"risk_level": risk_level,
"confidence": round(probability, 2),
"top_risk_factors": explanations
}
return result
if __name__ == "__main__":
import json
print("=" * 60)
print(" SCORING API DEMO")
print("=" * 60)
clean_code = "def greet(name):\n return f'Hello {name}!'"
print("\n🟢 Testing Clean Code...")
clean_result = evaluate(clean_code)
print(json.dumps(clean_result, indent=2))
risky_code = "global_counter=0\ndef bloated_pipeline(data):\n global global_counter\n try:\n for x in data:\n if x>0:\n for i in range(x):\n try:\n if i%2==0: global_counter+=1\n except: pass\n except Exception: return -1\n return global_counter"
print("\n🔴 Testing Risky Code...")
risky_result = evaluate(risky_code)
print(json.dumps(risky_result, indent=2))
print("=" * 60)