app.py — вставь это в файл в Space
!pip install pypmml gradio
import gradio as gr
from pypmml import Model
← СЮДА ВСТАВЬ ВЕСЬ ТЕКСТ PMML как многострочную строку
>"""
Сохраняем временно
with open("model.pmml", "w", encoding="utf-8") as f:
f.write(pmml_content)
model = Model.fromFile("model.pmml")
def predict(
КТГ_STV, АД_сист, АД_диаст, Глюкоза, Hb, Лейкоциты, Тромбоциты, Креатинин, АЛТ, АСТ,
Группа, Причина_НРП, Маточные_артерии, Артерии_пуповины, Венозный_проток, ЦПИ, Маловодие, ДИОВ
):
data = {
"КТГ исходное (STV)": КТГ_STV,
"АД сист. при поступлении, мм.рт.ст.": АД_сист,
"АД диаст. при поступлении, мм.рт.ст.": АД_диаст,
"Глюкоза крови (вен.), ммоль/л": Глюкоза,
"Hb исх., г/л": Hb,
"Лейкоциты крови исх., 10?/л": Лейкоциты,
"Тромбоциты исх., 10?/л": Тромбоциты,
"Креатинин крови исх., мкмоль/л": Креатинин,
"АЛТ исх., ЕД/л": АЛТ,
"АСТ исх., ЕД/л": АСТ,
"Группа": Группа,
"Причина НРП": Причина_НРП,
"Маточные артерии": Маточные_артерии,
"Артерии пуповины, ПИ": Артерии_пуповины,
"! Венозный проток, а-волна": Венозный_проток,
"ЦПИ церебро-плацентарный индекс": ЦПИ,
"Маловодие": Маловодие,
"ДИОВ": ДИОВ
}
try:
result = model.predict(data)
prob_it = result.get("ИТ без РП", 0.0)
prob_no = result.get("Не требует ИТ", 0.0)
main = "ИТ без РП" if prob_it > prob_no else "Не требует ИТ"
conf = max(prob_it, prob_no) * 100
color = "red" if "ИТ" in main else "green"
return f"
{main}
Вероятность: {conf:.1f}%
"
except Exception as e:
return f"Ошибка: {str(e)}"
demo = gr.Interface(
fn=predict,
inputs=[
gr.Number(label="КТГ исходное (STV)", minimum=5.7, maximum=15.3),
gr.Number(label="АД сист. (мм рт.ст.)", minimum=120, maximum=140),
gr.Number(label="АД диаст. (мм рт.ст.)", minimum=70, maximum=90),
gr.Number(label="Глюкоза (ммоль/л)", minimum=4.0, maximum=7.4),
gr.Number(label="Hb (г/л)", minimum=104, maximum=138),
gr.Number(label="Лейкоциты (10⁹/л)", minimum=5.1, maximum=16.5),
gr.Number(label="Тромбоциты (10⁹/л)", minimum=115, maximum=418),
gr.Number(label="Креатинин (мкмоль/л)", minimum=56.3, maximum=73.4),
gr.Number(label="АЛТ (ЕД/л)", minimum=8, maximum=36),
gr.Number(label="АСТ (ЕД/л)", minimum=11.4, maximum=34),
gr.Dropdown(["ЗРП", "МГВ"], label="Группа"),
gr.Dropdown(["ГАГ", "Неизвестно", "Тяжелая ПЭ", "ХАГ"], label="Причина НРП"),
gr.Dropdown(["средний ПИ<=95 процентиля", "средний ПИ>95 процентиля"], label="Маточные артерии"),
gr.Dropdown(["ПИ<=95 процентиля", "ПИ>95 процентиля"], label="Артерии пуповины"),
gr.Dropdown(["отрицательная", "положительная"], label="Венозный проток а-волна"),
gr.Dropdown(["ПИ >=5 процентиля", "ПИ<5 процентиля"], label="ЦПИ"),
gr.Dropdown(["Есть", "Нет"], label="Маловодие"),
gr.Dropdown(["Амниотомия", "Да", "Нет"], label="ДИОВ"),
],
outputs=gr.HTML(label="Результат"),
title="Калькулятор ИТ новорождённого (MLP 29-16-2)",
description="Заполните поля и нажмите Submit"
)
demo.launch()