Spaces:
Sleeping
Sleeping
| import os | |
| from huggingface_hub import InferenceClient | |
| import gradio as gr | |
| # Настраиваем HF‑клиент | |
| HF_TOKEN = os.getenv("HF_HUB_TOKEN") | |
| if not HF_TOKEN: | |
| raise RuntimeError("Не задан HF_HUB_TOKEN в настройках Space") | |
| client = InferenceClient(token=HF_TOKEN) | |
| def generate_bpmn(description: str) -> str: | |
| prompt = ( | |
| "You are a BPMN 2.0 XML generator.\n" | |
| "Given this plain-text process description:\n" | |
| f"{description}\n" | |
| "Output ONLY valid BPMN 2.0 XML, without any extra text." | |
| ) | |
| # Вызываем HF Inference API (без FastAPI) | |
| result = client.text_generation( | |
| prompt, | |
| model="ministral/Ministral-3b-instruct", | |
| max_new_tokens=1024, | |
| temperature=0.0, | |
| do_sample=False, | |
| details=True | |
| ) | |
| xml = result[0].generated_text | |
| # отрезаем всё до <definitions> | |
| if "<definitions" in xml: | |
| xml = xml[xml.index("<definitions"):] | |
| return xml | |
| # Собираем Gradio‑интерфейс | |
| with gr.Blocks() as demo: | |
| gr.Markdown("## Генератор BPMN 2.0 XML на основе текста") | |
| inp = gr.Textbox( | |
| lines=5, | |
| placeholder="Опиши процесс: «Клиент подаёт заявку, …»", | |
| label="Описание процесса" | |
| ) | |
| out = gr.Textbox(lines=15, label="BPMN 2.0 XML") | |
| btn = gr.Button("Сгенерировать BPMN") | |
| btn.click(fn=generate_bpmn, inputs=inp, outputs=out) | |
| # HF Spaces поднимет это автоматически, порт подхватится из окружения | |
| demo.launch( | |
| server_name="0.0.0.0", | |
| server_port=int(os.environ.get("PORT", 7860)) | |
| ) | |