microbit / app.py
ll7098ll's picture
Update app.py
404abbe verified
raw
history blame
2.67 kB
import gradio as gr
import google.generativeai as genai
import os
import time
# Google Gemini API ν‚€ μ„€μ •
genai.configure(api_key=os.environ["GEMINI_API_KEY"])
# λͺ¨λΈ μ„€μ •
generation_config = {
"temperature": 1,
"top_p": 0.8,
"top_k": 40,
"max_output_tokens": 8192,
"response_mime_type": "text/plain",
}
model = genai.GenerativeModel(
model_name="gemini-2.0-flash",
generation_config=generation_config,
)
# μ‹œμŠ€ν…œ ν”„λ‘¬ν”„νŠΈ
SYSTEM_PROMPT = """
당신은 창의적인 발λͺ…κ°€μ΄μž λ§ˆμ΄ν¬λ‘œλΉ„νŠΈ μ „λ¬Έκ°€μž…λ‹ˆλ‹€. Python μ½”λ”© μ „λ¬Έκ°€μž…λ‹ˆλ‹€.
μ‚¬μš©μžκ°€ μ„ νƒν•œ λ§ˆμ΄ν¬λ‘œλΉ„νŠΈ μ„Όμ„œ 쑰합을 기반으둜,
ν₯λ―Έλ‘­κ³  μ‹€μš©μ μΈ 발λͺ…ν’ˆ 아이디어λ₯Ό 3κ°€μ§€ 이상 μ œμ•ˆν•΄μ£Όμ„Έμš”.
μ΅œλŒ€ν•œ λ‹€μ–‘ν•œ λΆ„μ•Όμ˜ 사둀λ₯Ό μ œκ³΅ν•΄μ•Ό ν•˜λ©°(κ°€λŠ₯ν•˜λ©΄ 식물과 κ΄€λ ¨λœ 것은 ν”Όν•΄), νŠΉμ΄ν•˜κ³  창의적인 아이디어λ₯Ό μš°μ„ μ μœΌλ‘œ μ œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€.
μž…λ ₯ν•  λ•Œλ§ˆλ‹€ λ‹€λ₯Έ 발λͺ…ν’ˆμ„ 좜λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
**응닡 ν˜•μ‹:**
1. **발λͺ…ν’ˆ 아이디어:** (κ°„λž΅ν•œ μ„€λͺ…)
2. **ν™œμš© μ„Όμ„œ:** (μ„ νƒλœ μ„Όμ„œ λͺ©λ‘)
3. **상세 μ„€λͺ…:** (아이디어에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…, μž‘λ™ 방식, ν™œμš© μ˜ˆμ‹œ 포함)
4. **μΆ”κ°€ 정보:** (ν”„λ‘œκ·Έλž˜λ° 팁, κ΄€λ ¨ νŠœν† λ¦¬μ–Ό 링크 λ“±)
"""
def generate_invention_idea(selected_sensors):
"""
μ„ νƒλœ μ„Όμ„œ 쑰합을 기반으둜 발λͺ…ν’ˆ 아이디어λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
"""
sensor_list = ", ".join(selected_sensors)
prompt = [
SYSTEM_PROMPT,
f"**μ„ νƒλœ μ„Όμ„œ:** {sensor_list}",
]
response = model.generate_content(prompt, stream=True)
collected_text = ""
for token in response:
chunk = token.text
collected_text += chunk
yield collected_text
time.sleep(0.03)
# μ„Όμ„œ λͺ©λ‘ (μ²΄ν¬λ°•μŠ€ μ˜΅μ…˜)
sensor_options = [
"가속도 μ„Όμ„œ", "자기μž₯ μ„Όμ„œ", "κ΄‘ μ„Όμ„œ", "μ˜¨λ„ μ„Όμ„œ", "ν„°μΉ˜ μ„Όμ„œ", "λ²„νŠΌ",
"초음파 μ„Όμ„œ", "ν† μ–‘ μˆ˜λΆ„ μ„Όμ„œ", "쑰도 μ„Όμ„œ", "μ†Œλ¦¬ μ„Όμ„œ", "μ˜¨μŠ΅λ„ μ„Όμ„œ",
"κ°€μŠ€ μ„Όμ„œ", "적외선 μ„Όμ„œ", "컬러 μ„Όμ„œ", "GPS λͺ¨λ“ˆ", "RFID λͺ¨λ“ˆ"
]
# Gradio μΈν„°νŽ˜μ΄μŠ€ μ„€μ •
iface = gr.Interface(
fn=generate_invention_idea,
inputs=gr.CheckboxGroup(choices=sensor_options, label="λ§ˆμ΄ν¬λ‘œλΉ„νŠΈ μ„Όμ„œ 선택"),
outputs=gr.Textbox(lines=15, label="발λͺ…ν’ˆ 아이디어"),
title="λ§ˆμ΄ν¬λ‘œλΉ„νŠΈ 발λͺ…ν’ˆ 아이디어 생성기",
description="μ›ν•˜λŠ” μ„Όμ„œλ₯Ό μ„ νƒν•˜λ©΄, λ§ˆμ΄ν¬λ‘œλΉ„νŠΈλ₯Ό ν™œμš©ν•œ 발λͺ…ν’ˆ 아이디어λ₯Ό μ œμ•ˆν•΄μ€λ‹ˆλ‹€.",
)
# μΈν„°νŽ˜μ΄μŠ€ μ‹€ν–‰
iface.launch()