import os
import gradio as gr
from openai import OpenAI
client = OpenAI(
base_url="https://router.huggingface.co/v1",
api_key=os.environ["HF_TOKEN"],
)
# Simple safety filter for dangerous prompts
def is_safe(text):
banned_words = [
"suicide", "kill", "bomb", "weapon", "hate", "violence",
"self-harm", "harm", "attack","terror","poison", "explosive", "murder"
]
lowered = text.lower()
return not any(word in lowered for word in banned_words)
# -----------------------------
# Chat
# -----------------------------
def chat_fn(message, history):
if not is_safe(message):
return "⚠️ This request may be unsafe. Please try a different topic."
messages = [{"role": "system", "content": "You are a helpful assistant."}]
for msg in history:
messages.append({"role": msg["role"], "content": msg["content"]})
messages.append({"role": "user", "content": message})
completion = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=messages,
)
return completion.choices[0].message.content
# -----------------------------
# Text Generator
# -----------------------------
def generate_text(prompt):
if not is_safe(prompt):
return "⚠️ This request may be unsafe. Please try a different topic."
completion = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Generate text based on this prompt: {prompt}"}],
)
return completion.choices[0].message.content
# -----------------------------
# Prompt Improver
# -----------------------------
def improve_prompt(prompt):
if not is_safe(prompt):
return "⚠️ This request may be unsafe. Please try a different topic."
completion = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Improve this prompt: {prompt}"}],
)
return completion.choices[0].message.content
# -----------------------------
# Text Summarizer
# -----------------------------
def summarize_text(text):
if not is_safe(text):
return "⚠️ This request may be unsafe. Please try a different topic."
completion = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Summarize this text: {text}"}],
)
return completion.choices[0].message.content
# -----------------------------
# Document Summarizer
# -----------------------------
def summarize_file(file):
try:
file_path = file.name
ext = file_path.lower().split(".")[-1]
# Read file
if ext in ["txt", "md", "rtf"]:
with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
content = f.read()
elif ext == "pdf":
import PyPDF2
content = ""
with open(file_path, "rb") as f:
reader = PyPDF2.PdfReader(f)
for page in reader.pages:
content += page.extract_text() or ""
else:
return f"Unsupported file type: .{ext}"
if not content.strip():
return "The file is empty or unreadable."
# Safety check on extracted text
if not is_safe(content):
return "⚠️ This document may contain unsafe content."
completion = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Summarize this document:\n\n{content}"}],
)
return completion.choices[0].message.content
except Exception as e:
return f"Error reading file: {str(e)}"
# -----------------------------
# Prompt Workflow Builder
# -----------------------------
def build_prompt_workflow(idea):
if not is_safe(idea):
return "⚠️ This request may be unsafe. Please try a different topic."
try:
draft = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Create a draft prompt based on this idea: {idea}"}],
).choices[0].message.content
improved = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Improve this prompt: {draft}"}],
).choices[0].message.content
final = client.chat.completions.create(
model="zai-org/GLM-4.7-Flash:novita",
messages=[{"role": "user", "content": f"Rewrite this prompt in a polished, professional way: {improved}"}],
).choices[0].message.content
return final
except Exception as e:
return f"Error: {str(e)}"
# -----------------------------
# UI
# -----------------------------
with gr.Blocks() as demo:
gr.Markdown("# My AI Toolbox")
gr.HTML("
")
gr.HTML(
"""