Ideon's picture
Upload 4 files
faa8cd9 verified
Raw
History Blame Contribute Delete
3.63 kB
import os
import gradio as gr
try:
import spaces
except Exception:
spaces = None
from model_adapters import create_adapter
MODEL_LABEL = os.getenv("RFAB_HISTORIC_MODEL_LABEL", os.getenv("RFAB_HISTORIC_MODEL_ID", "RFAB Historic Model"))
GPU_DURATION_SECONDS = int(os.getenv("RFAB_GPU_DURATION_SECONDS", "60"))
adapter = create_adapter()
def gpu(fn):
if spaces is None:
return fn
return spaces.GPU(duration=GPU_DURATION_SECONDS)(fn)
def normalize_history(history):
if not isinstance(history, list):
return []
normalized = []
for message in history:
if not isinstance(message, dict):
continue
role = message.get("role")
if role not in {"user", "assistant"}:
continue
content = message.get("content") or []
if isinstance(content, str):
content = [{"type": "text", "text": content}]
normalized.append({
"role": role,
"metadata": message.get("metadata"),
"content": content,
"options": message.get("options")
})
return normalized
@gpu
def _bot_reply(history, system_prompt="", temperature=0.7, max_tokens=256, top_p=1.0, top_k=0):
history = normalize_history(history)
answer = adapter.generate(
history=history,
system_prompt=system_prompt or "",
temperature=float(temperature),
max_tokens=int(max_tokens),
top_p=float(top_p),
top_k=int(top_k),
)
history.append({
"role": "assistant",
"metadata": None,
"content": [{"type": "text", "text": answer}],
"options": None
})
return history
def preview_reply(message, system_prompt, temperature, max_tokens):
history = [{
"role": "user",
"metadata": None,
"content": [{"type": "text", "text": message}],
"options": None
}]
result = _bot_reply(history, system_prompt, temperature, max_tokens, 1.0, 0)
return result[-1]["content"][0]["text"] if result else ""
with gr.Blocks(title=MODEL_LABEL) as demo:
gr.Markdown(f"# {MODEL_LABEL}")
gr.Markdown("Reality Fabricator Historic Chat Space. The backend uses the `_bot_reply` API endpoint.")
with gr.Row():
user_message = gr.Textbox(label="Message", value="What is electricity?")
with gr.Row():
system_prompt_box = gr.Textbox(label="System prompt", value="")
with gr.Row():
temperature_slider = gr.Slider(0.0, 2.0, value=0.7, step=0.05, label="Temperature")
max_tokens_slider = gr.Slider(16, 1024, value=256, step=1, label="Max tokens")
preview_button = gr.Button("Generate")
preview_output = gr.Textbox(label="Response")
preview_button.click(
preview_reply,
inputs=[user_message, system_prompt_box, temperature_slider, max_tokens_slider],
outputs=preview_output,
api_name=False,
)
history_input = gr.JSON(visible=False)
system_prompt_input = gr.Textbox(visible=False)
temperature_input = gr.Number(visible=False)
max_tokens_input = gr.Number(visible=False)
top_p_input = gr.Number(visible=False)
top_k_input = gr.Number(visible=False)
history_output = gr.JSON(visible=False)
gr.Button("API", visible=False).click(
_bot_reply,
inputs=[
history_input,
system_prompt_input,
temperature_input,
max_tokens_input,
top_p_input,
top_k_input,
],
outputs=history_output,
api_name="_bot_reply",
)
if __name__ == "__main__":
demo.queue().launch()