import gradio as gr from agent.src.llm.client import infer_model SYSTEM_PROMPT = ( "You are a creative RPG game master assistant for the Ekalia campaign. " "Generate detailed, flavourful NPCs that fit the world's tone. " "Include name, appearance, personality, role, a secret, and a plot hook. " "Write in English unless asked otherwise." ) def generate_npc(location: str, role: str, traits: str): if not location and not role: return "Fill in at least a location or role." prompt_parts = ["Generate an NPC"] if location: prompt_parts.append(f"from {location}") if role: prompt_parts.append(f"who is a {role}") if traits: prompt_parts.append(f"with the following traits: {traits}") prompt = " ".join(prompt_parts) + "." content, _ = infer_model(prompt, messages=[{"role": "system", "content": SYSTEM_PROMPT}]) return content def create_tab(): with gr.Tab("NPC Generator"): gr.Markdown("## NPC Generator\n> Generate NPCs consistent with the Ekalia lore.") with gr.Row(): location = gr.Textbox(label="Location", placeholder="e.g. Glückslott, Costas Piratas") role = gr.Textbox(label="Role / Type", placeholder="e.g. merchant, guard captain, spy") traits = gr.Textbox(label="Extra traits (optional)", placeholder="e.g. nervous, hides a scar, fond of birds") generate_btn = gr.Button("Generate NPC", variant="primary") output = gr.Markdown() generate_btn.click(fn=generate_npc, inputs=[location, role, traits], outputs=output)