evteev777/bpmn-generator
0
1import os2from huggingface_hub import InferenceClient3import gradio as gr4 5# Настраиваем HF‑клиент6HF_TOKEN = os.getenv("HF_HUB_TOKEN")7if not HF_TOKEN:8 raise RuntimeError("Не задан HF_HUB_TOKEN в настройках Space")9client = InferenceClient(token=HF_TOKEN)10 11def generate_bpmn(description: str) -> str:12 prompt = (13 "You are a BPMN 2.0 XML generator.\n"14 "Given this plain-text process description:\n"15 f"{description}\n"16 "Output ONLY valid BPMN 2.0 XML, without any extra text."17 )18 # Вызываем HF Inference API (без FastAPI)19 result = client.text_generation(20 prompt,21 model="ministral/Ministral-3b-instruct",22 max_new_tokens=1024,23 temperature=0.0,24 do_sample=False,25 details=True26 )27 xml = result[0].generated_text28 # отрезаем всё до <definitions>29 if "<definitions" in xml:30 xml = xml[xml.index("<definitions"):]31 return xml32 33# Собираем Gradio‑интерфейс34with gr.Blocks() as demo:35 gr.Markdown("## Генератор BPMN 2.0 XML на основе текста")36 inp = gr.Textbox(37 lines=5,38 placeholder="Опиши процесс: «Клиент подаёт заявку, …»",39 label="Описание процесса"40 )41 out = gr.Textbox(lines=15, label="BPMN 2.0 XML")42 btn = gr.Button("Сгенерировать BPMN")43 btn.click(fn=generate_bpmn, inputs=inp, outputs=out)44 45# HF Spaces поднимет это автоматически, порт подхватится из окружения46demo.launch(47 server_name="0.0.0.0",48 server_port=int(os.environ.get("PORT", 7860))49)50 