File size: 5,518 Bytes
18d821d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88ce5fa
 
18d821d
 
81ff909
18d821d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81ff909
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18d821d
 
 
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import os
import openai
import streamlit as st
#from dotenv import load_dotenv


# from streamlit_chat import message

# 스트림릿이랑 파이썬, vs코드 같은 폴더에
# 이 파일도 같은 폴더에 넣어야하는지는 모르겠움,,

# import streamlit as st
# from io import StringIO

# 경로 /Users/gyuribyun/Documents/legoapp
# 경로 터미널에 입력 후(cd 경로 복붙)
# streamlit run app.py로 링크 받기


# 타이틀 적용, # 특수 이모티콘 삽입 예시
# emoji: https://streamlit-emoji-shortcodes-streamlit-app-gwckff.streamlit.app/
st.title(':santa:레고스파이크 할아버지')

# 캡션 적용
st.caption('레고스파이크 프라임을 이용한 코드를 구성할 때 어떤 블럭을 사용해야할 지 상황에 맞는 도움을 제공하는 친절한 레고할아버지 입니다. 선물:gift:같은 도움을 받아보세요!')


# 마크다운 부가설명
st.markdown('###### openAI key를 입력하고, 코드가 필요한 상황, 작동 내용, 작동 조건, 입력장치, 출력장치를 각각 입력한다음 :red[코드블럭 추천받기] 버튼을 눌러주세요.:sparkles:')

# api key
api_key = st.text_input(label='openAI의 api key를 입력하세요.', placeholder='sk-...', type='password')


if api_key:
    openai.api_key = api_key
    client = openai.Client(api_key = api_key)
else:
    st.warning("유효한 API 키를 입력해 주세요.")
    client = None  # client 변수를 None으로 초기화

if api_key:
    # 텍스트 입력
    situation = st.text_input(
        label='무슨 상황인가요?', 
        placeholder='예시: 자율주행'
    )
    st.write(f'선택한 상황: :violet[{situation}]')


    # 텍스트 입력
    condition = st.text_input(
        label='작동 조건이 있나요?', 
        placeholder='예시: 벽에 닿음'
    )
    st.write(f'선택한 상황: :violet[{condition}]')


    # 텍스트 입력
    reaction = st.text_input(
        label='어떤 작동이 일어나야 하나요?', 
        placeholder='예시: 모터 멈춤'
    )
    st.write(f'선택한 상황: :violet[{reaction}]')


    # 텍스트 입력
    input_sensor = st.text_input(
        label='입력 장치로 무엇을 사용하나요?', 
        placeholder='예시: 거리 센서'
    )
    st.write(f'선택한 상황: :violet[{input_sensor}]')


    # 텍스트 입력
    output = st.text_input(
        label='출력 장치로 무엇을 사용하나요?', 
        placeholder='예시: 모터'
    )
    st.write(f'선택한 상황: :violet[{output}]')

    prompt = f'user:[상황- 금고 잠그기, 작동- 모터 돌리기, 조건- 프로그램이 시작될 때, 입력장치- 없음,출력장치- A모터, B모터], bot: [프로그램을 시작할 때, A모터 속도 설정, 지정된 시간만큼 A모터 작동, A모터를 위치로 이동, 상대 모터 위치를 설정, 부드러운 정지], user: [상황- 인식한 색에 따라 소리 내기, 작동- 효과음 재생, 조건- 노란색 인식, 입력장치- 컬러 센서, 출력장치- 스피커], bot: [허브 버튼을 누를 때, 조건 기다리기, 색상?, 재생하기], user: [상황- 힘센서를 눌러 집게 오므렸다 펴기, 작동- 모터 동작, 조건- 힘센서를 누르고 있을 때, 입력장치- 힘센서, 출력장치- 모터], bot:[프로그램을 시작할 때, 무한 루프, 만약 ~라면, 누름?, 모터 시동 출력, 아니면, 지정된 시간만큼 모터 작동, 모터 멈추기], user: [상황- 달리기 경주, 작동- 모터 동작, 조건- 프로그램 시작, 입력장치- 없음, 출력장치- 모터], bot: [프로그램을 시작할 때, 모터 동작 설정, 동작 속도 설정, 지정된 값만큼 이동], user: [상황- 벽에 부딪히면 멈추기, 작동- 모터 멈추기, 조건- 힘센서가 눌림, 입력장치- 힘센서, 출력장치- 모터], bot: [프로그램을 시작할 때, 무한 루프, 만약 ~라면, 누름?, 모터 시동, 아니면, 모터 멈추기], user: [상황- 밝기에 따라 불 끄고 켜기, 작동- 불 끄기, 조건- 밝음, 입력장치- 컬러센서, 출력장치- 라이트 매트릭스], bot: [프로그램을 시작할 때, 무한 루프, 만약 ~라면, 반사광?, 라이트 매트릭스 픽셀 밝기 설정 100. 아니면, 라이트 매트릭스 픽셀 밝기 설정 0], user: [상황- 허브가 흔들릴 때 라이트 픽셀 깜빡임, 흔들리지 않으면 멈추기, 작동- 라이트 픽셀 깜빡임, 조건- 허브 흔들림, 입력장치- 허브 자이로센서, 출력장치- 라이트 매트릭스], bot: [프로그램을 시작할 때, 무한 루프, 만약 ~라면, 허브 흔들림?, 라이트 매트릭스 픽셀 깜빡임, 아니면, 라이트 매트릭스 멈춤], user: [상황- {situation}, 작동- {reaction}, 조건- {condition}, 입력장치- {input_sensor}, 출력장치- {output}], bot'


    # 버튼 클릭
    button = st.button(':gift:코드블럭 추천받기')
    

if client:  # client가 None이 아닌 경우에만 실행
    def generate_recommend(prompt):
        completions = client.completions.create(
            model="gpt-3.5-turbo-instruct",
            prompt=prompt,
            temperature=0,
            max_tokens=400,
            top_p=1,
            frequency_penalty=0,
            presence_penalty=0
        )
        message = completions.choices[0].text.replace(",", " ] [ ")
        return message

    if button:
        output = generate_recommend(prompt)
        st.write(f'{output}')