File size: 2,670 Bytes
5d5df43
 
1d355ad
fabb74d
 
 
22032f3
 
fabb74d
 
79f7c7e
 
3594800
b9e6073
fabb74d
 
 
 
404abbe
fabb74d
 
 
5d5df43
fabb74d
4efaf0a
5d5df43
c7e447d
95eeea9
cb8f0ba
5d5df43
 
 
 
 
 
4efaf0a
fabb74d
39688bd
5d5df43
 
fabb74d
5d5df43
fabb74d
5d5df43
217a78d
fabb74d
 
5d5df43
fabb74d
feb03cf
fabb74d
 
 
 
 
e39486f
 
940b028
5d5df43
 
 
 
 
 
 
 
 
940b028
5d5df43
 
 
 
 
39688bd
03d0703
fabb74d
8683182
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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()