-
Notifications
You must be signed in to change notification settings - Fork 0
/
form.py
112 lines (95 loc) · 4.98 KB
/
form.py
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
106
107
108
109
110
111
112
import openai
import os
import time
import streamlit as st
from dotenv import load_dotenv
# Carregar variáveis de ambiente a partir do arquivo .env
load_dotenv()
api_key = os.getenv("OPENAI_API_KEY") # Obter a chave da API do OpenAI
if not api_key:
raise ValueError("API key não encontrada. Verifique se o arquivo .env está configurado corretamente.")
else:
print("API key encontrada. Inicializando o aplicativo...")
# Definir a chave da API
openai.api_key = api_key
# Função para gerar exercícios
def gerar_exercicios(linguagem, niveis, tema, quantidades):
# Configuração da mensagem para a API
messages = [
{
"role": "system",
"content": (
"""Você é um gerador de exercícios de programação. Não exibir as respostas dos exercícios.
Vamos definir um nível de dificuldade crescente para elaborarmos exercícios para que
eu aprenda Python de forma direta e descomplicada. Utilize uma escala de 1 a 5,
onde o nível 1 é 'Muito Fácil' e o nível 5 é 'Muito Difícil'. Elabore exercícios
para cada nível com base na seguinte descrição:
- Nível 1: Conceitos básicos e fixação.
- Nível 2: Aplicação de conceitos básicos.
- Nível 3: Construção de lógica com conceitos aprendidos.
- Nível 4: Integração com conteúdos anteriores.
- Nível 5: Uso avançado de todos os conceitos estudados."""
)
},
{
"role": "user",
"content": f"Crie exercícios de {linguagem} sobre o tema {tema}."
}
]
for i, nivel in enumerate(niveis):
if quantidades[i] > 0:
messages.append({
"role": "user",
"content": f"Elabore {quantidades[i]} exercícios no nível {nivel}."
})
# Adicionar os níveis e quantidades à mensagem
for i, nivel in enumerate(niveis):
if quantidades[i] > 0:
messages.append({
"role": "user",
"content": f"Elabore {quantidades[i]} exercícios no nível {nivel}."
})
# Chamada à API OpenAI
client = openai.OpenAI()
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=1000, # Limitar a quantidade de tokens
temperature=0.7,
)
# Retornar o texto gerado pela API
return response.choices[0].message.content.strip()
# Função principal
def main():
st.markdown("<h1 style='color:#00FF00;'>Gerador de Exercícios com GPT</h1>", unsafe_allow_html=True)
with st.form("formulario_exercicios"):
# Seleção de linguagem e tema
linguagem = st.selectbox("Linguagem de Programação", ["Python", "JavaScript"])
tema = st.text_input("Tema Específico (Ex.: Listas, Funções, etc)", value="Listas")
# Slider para definir o limite máximo de exercícios
limite_exercicios = st.slider("Limite máximo de exercícios por nível", min_value=1, max_value=10, value=10)
# Campos para inserir a quantidade de exercícios para cada nível
quantidade_nivel1 = st.number_input("Quantidade de exercícios para Nível 1: Muito Fácil", min_value=0, max_value=limite_exercicios, value=0, step=1)
quantidade_nivel2 = st.number_input("Quantidade de exercícios para Nível 2: Fácil", min_value=0, max_value=limite_exercicios, value=0, step=1)
quantidade_nivel3 = st.number_input("Quantidade de exercícios para Nível 3: Médio", min_value=0, max_value=limite_exercicios, value=0, step=1)
quantidade_nivel4 = st.number_input("Quantidade de exercícios para Nível 4: Difícil", min_value=0, max_value=limite_exercicios, value=0, step=1)
quantidade_nivel5 = st.number_input("Quantidade de exercícios para Nível 5: Muito Difícil", min_value=0, max_value=limite_exercicios, value=0, step=1)
submit_button = st.form_submit_button("Gerar Exercícios")
if submit_button:
# Coletar as quantidades e níveis selecionados
niveis = [1, 2, 3, 4, 5]
quantidades = [quantidade_nivel1, quantidade_nivel2, quantidade_nivel3, quantidade_nivel4, quantidade_nivel5]
if sum(quantidades) > 0: # Verifica se pelo menos um nível tem quantidade > 0
# Barra de progresso inicial (em verde)
progress_bar = st.progress(0)
for percent_complete in range(100):
time.sleep(0.05) # Simula o tempo de processamento
progress_bar.progress(percent_complete + 1)
with st.spinner("Gerando exercícios..."):
exercicios = gerar_exercicios(linguagem, niveis, tema, quantidades)
st.markdown("<h3 style='color:#00FF00;'>Exercícios Gerados:</h3>", unsafe_allow_html=True)
st.write(exercicios)
else:
st.warning("Por favor, insira a quantidade de exercícios para pelo menos um nível de dificuldade.")
if __name__ == "__main__":
main()