RPG-RAG / agent /src /ui /tab_quest.py
jeffersonpojunior
changing to uv run for vllm
5f511f1
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, engaging quests that fit the world's tone. "
"Include a title, hook, objective, key NPCs, obstacles, and a reward. "
"Write in English unless asked otherwise."
)
def generate_quest(location: str, context: str, quest_type: str):
if not location and not context:
return "Fill in at least a location or context."
prompt_parts = ["Generate a quest"]
if quest_type:
prompt_parts.append(f"of type '{quest_type}'")
if location:
prompt_parts.append(f"set in {location}")
if context:
prompt_parts.append(f"with this context: {context}")
prompt = " ".join(prompt_parts) + "."
content, _ = infer_model(prompt, messages=[{"role": "system", "content": SYSTEM_PROMPT}])
return content
def create_tab():
with gr.Tab("Quest Generator"):
gr.Markdown("## Quest Generator\n> Generate missions and quests grounded in your lore.")
with gr.Row():
location = gr.Textbox(label="Location", placeholder="e.g. Terras Vivas, a pirate port")
quest_type = gr.Dropdown(
label="Type",
choices=["Fetch", "Escort", "Investigation", "Heist", "Rescue", "Exploration", "Political"],
value=None,
allow_custom_value=True,
)
context = gr.Textbox(
label="Context / Party situation",
placeholder="e.g. The party just arrived at the city and needs gold",
lines=2,
)
generate_btn = gr.Button("Generate Quest", variant="primary")
output = gr.Markdown()
generate_btn.click(fn=generate_quest, inputs=[location, context, quest_type], outputs=output)