sofiamak commited on
Commit
525bb1b
·
verified ·
1 Parent(s): 99fac55

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +68 -10
app.py CHANGED
@@ -4,7 +4,6 @@ from openai import OpenAI
4
 
5
  API_KEY = os.getenv("OPENAI_API_KEY")
6
  MODEL_NAME = "gpt-4o-mini"
7
-
8
  client = OpenAI(api_key=API_KEY)
9
 
10
  SYSTEM_PROMPT = """You are a creative pet name generator.
@@ -32,8 +31,18 @@ Generate exactly ONE creative pet name.
32
  """
33
 
34
  def generate_name(species, look, personality, gender, language):
 
 
 
 
 
 
 
 
 
 
35
  try:
36
- prompt = build_prompt(species, look, personality, gender, language)
37
  resp = client.chat.completions.create(
38
  model=MODEL_NAME,
39
  temperature=0.7,
@@ -48,18 +57,67 @@ def generate_name(species, look, personality, gender, language):
48
  return f"⚠️ 出错:{html.escape(str(e))}"
49
 
50
  with gr.Blocks(title="Pawfect Match") as demo:
51
- gr.Markdown("## 🐾 Pawfect Match|宠物起名机\n输入宠物信息,一键生成一个名字 + 简短含义。")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- species = gr.Textbox(label="宠物种类", placeholder="例:金毛 / 英短 / 仓鼠 / 鹦鹉")
54
- look = gr.Textbox(label="外表特征", placeholder="例:橘色短毛,大眼睛,白爪")
55
- personality = gr.Textbox(label="性格特点", placeholder="例:粘人、活泼、聪明")
56
- gender = gr.Radio(["male","female"], value="male", label="宠物性别")
57
- language = gr.Radio(["English","中文","Русский","Español"], value="English", label="输出语言")
 
 
 
 
 
58
 
59
- btn = gr.Button("✨ 起名!")
60
- out = gr.Markdown()
 
61
 
 
 
 
 
 
 
62
  btn.click(generate_name, inputs=[species, look, personality, gender, language], outputs=out)
63
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
  if __name__ == "__main__":
65
  demo.launch()
 
4
 
5
  API_KEY = os.getenv("OPENAI_API_KEY")
6
  MODEL_NAME = "gpt-4o-mini"
 
7
  client = OpenAI(api_key=API_KEY)
8
 
9
  SYSTEM_PROMPT = """You are a creative pet name generator.
 
31
  """
32
 
33
  def generate_name(species, look, personality, gender, language):
34
+ # 基础校验(避免空提交)
35
+ missing = []
36
+ if not (species or "").strip(): missing.append("宠物种类")
37
+ if not (look or "").strip(): missing.append("外表特征")
38
+ if not (personality or "").strip(): missing.append("性格特点")
39
+ if not (gender or "").strip(): missing.append("性别")
40
+ if not (language or "").strip(): missing.append("语言")
41
+ if missing:
42
+ return "❗请先填写:" + "、".join(missing)
43
+
44
  try:
45
+ prompt = build_prompt(species.strip(), look.strip(), personality.strip(), gender, language)
46
  resp = client.chat.completions.create(
47
  model=MODEL_NAME,
48
  temperature=0.7,
 
57
  return f"⚠️ 出错:{html.escape(str(e))}"
58
 
59
  with gr.Blocks(title="Pawfect Match") as demo:
60
+ # 顶部品牌区(带轻微样式)
61
+ gr.HTML(
62
+ """
63
+ <div style="display:flex;align-items:center;gap:14px; padding:14px 0 6px;">
64
+ <div style="font-size:28px;">🐾 <strong>Pawfect Match</strong></div>
65
+ <div style="opacity:.75;">给你的宠物起一个刚刚好的名字</div>
66
+ </div>
67
+ <hr style="border:none;border-top:1px solid #eee;margin:8px 0 18px;">
68
+ """
69
+ )
70
+
71
+ with gr.Row():
72
+ # 左侧:输入卡
73
+ with gr.Column(scale=6):
74
+ with gr.Group():
75
+ species = gr.Textbox(label="宠物种类", placeholder="例:金毛 / 英短 / 仓鼠 / 鹦鹉", autofocus=True)
76
+ look = gr.Textbox(label="外表特征", placeholder="例:橘色短毛,大眼睛,白爪")
77
+ personality = gr.Textbox(label="性格特点", placeholder="例:粘人、活泼、聪明")
78
+ with gr.Row():
79
+ gender = gr.Radio(
80
+ ["male","female"], value="male", label="宠物性别",
81
+ info="请选择性别,让名字风格更贴合"
82
+ )
83
+ language = gr.Radio(["English","中文","Русский","Español"], value="English", label="输出语言")
84
 
85
+ with gr.Accordion("快速示例(点一下自动填充)", open=False):
86
+ gr.Examples(
87
+ examples=[
88
+ ["英短猫","银渐层,圆脸,绿眼睛","高冷但会撒娇","female","中文"],
89
+ ["柯基犬","短腿、屁股圆、红白毛","亲人、活泼、贪吃","male","English"],
90
+ ["仓鼠","金色短毛,小巧","胆小但好奇","female","Русский"],
91
+ ["鹦鹉","绿色羽毛,会学舌","机灵、吵闹、黏人","male","Español"],
92
+ ],
93
+ inputs=[species, look, personality, gender, language],
94
+ )
95
 
96
+ with gr.Row():
97
+ btn = gr.Button("✨ 起名", variant="primary")
98
+ copy_btn = gr.Button("复制结果", variant="secondary")
99
 
100
+ # 右侧:结果卡
101
+ with gr.Column(scale=5):
102
+ gr.Markdown("#### 结果")
103
+ out = gr.Markdown(elem_id="result_box", value="(点击「✨ 起名」后显示名字与简短含义)")
104
+
105
+ # 事件
106
  btn.click(generate_name, inputs=[species, look, personality, gender, language], outputs=out)
107
 
108
+ # 复制按钮(前端复制结果区域文本)
109
+ copy_btn.click(
110
+ None, inputs=None, outputs=None,
111
+ _js="""
112
+ () => {
113
+ const el = document.getElementById('result_box');
114
+ const txt = el ? el.innerText : '';
115
+ if (txt.trim().length === 0) { alert('还没有结果哦~'); return; }
116
+ navigator.clipboard.writeText(txt);
117
+ alert('已复制到剪贴板');
118
+ }
119
+ """
120
+ )
121
+
122
  if __name__ == "__main__":
123
  demo.launch()