Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from pydantic import BaseModel | |
| from sentence_transformers import SentenceTransformer | |
| from huggingface_hub import hf_hub_download | |
| import xgboost as xgb | |
| # ----------------------------- | |
| # Helper: Load XGBoost Booster (.json) | |
| # ----------------------------- | |
| def load_xgb_model(repo_id: str, filename: str): | |
| path = hf_hub_download(repo_id=repo_id, filename=filename) | |
| booster = xgb.Booster() | |
| booster.load_model(path) | |
| return booster | |
| # ----------------------------- | |
| # Load Soulprint models (all JSON now) | |
| # ----------------------------- | |
| available_models = { | |
| "Griot": load_xgb_model("mjpsm/Griot-xgb-model", "Griot_xgb_model.json"), | |
| "Kinara": load_xgb_model("mjpsm/Kinara-xgb-model", "Kinara_xgb_model.json"), | |
| "Ubuntu": load_xgb_model("mjpsm/Ubuntu-xgb-model", "Ubuntu_xgb_model.json"), | |
| "Jali": load_xgb_model("mjpsm/Jali-xgb-model", "Jali_xgb_model.json"), | |
| "Kuumba": load_xgb_model("mjpsm/Kuumba-xgb-model", "Kuumba_xgb_model.json"), | |
| "Sankofa": load_xgb_model("mjpsm/Sankofa-xgb-model", "Sankofa_xgb_model.json"), | |
| "Imani": load_xgb_model("mjpsm/Imani-xgb-model", "Imani_xgb_model.json"), | |
| "Maji": load_xgb_model("mjpsm/Maji-xgb-model", "Maji_xgb_model.json"), | |
| "Nzinga": load_xgb_model("mjpsm/Nzinga-xgb-model", "Nzinga_xgb_model.json"), | |
| "Bisa": load_xgb_model("mjpsm/Bisa-xgb-model", "Bisa_xgb_model.json"), | |
| "Zamani": load_xgb_model("mjpsm/Zamani-xgb-model", "Zamani_xgb_model.json"), | |
| "Tamu": load_xgb_model("mjpsm/Tamu-xgb-model", "Tamu_xgb_model.json"), | |
| "Shujaa": load_xgb_model("mjpsm/Shujaa-xgb-model", "Shujaa_xgb_model.json"), | |
| "Ayo": load_xgb_model("mjpsm/Ayo-xgb-model", "Ayo_xgb_model.json"), | |
| "Ujamaa": load_xgb_model("mjpsm/Ujamaa-xgb-model", "Ujamaa_xgb_model.json") | |
| } | |
| # Archetype list (15 total, placeholders for now) | |
| all_archetypes = [ | |
| "Griot", "Kinara", "Ubuntu", "Jali", "Sankofa", "Imani", "Maji", | |
| "Nzinga", "Bisa", "Zamani", "Tamu", "Shujaa", "Ayo", "Ujamaa", "Kuumba" | |
| ] | |
| # Shared embedder | |
| embedder = SentenceTransformer("all-mpnet-base-v2") | |
| # FastAPI app | |
| app = FastAPI() | |
| class TextInput(BaseModel): | |
| text: str | |
| def soulprint_snapshot(input: TextInput): | |
| embedding = embedder.encode([input.text]).reshape(1, -1) | |
| snapshot = {} | |
| for name in all_archetypes: | |
| if name in available_models: | |
| dmatrix = xgb.DMatrix(embedding) | |
| score = available_models[name].predict(dmatrix)[0] | |
| snapshot[name] = float(score) | |
| else: | |
| snapshot[name] = 0.0 # placeholder until model is trained | |
| return {"soulprint_snapshot": snapshot} | |