Spaces:
Build error
Build error
File size: 7,350 Bytes
45059c1 1211e0a 45059c1 3e6af59 45059c1 10079c0 45059c1 10079c0 45059c1 3e6af59 45059c1 4c072d6 3e6af59 45059c1 3e6af59 45059c1 3e6af59 45059c1 3e6af59 45059c1 3e6af59 45059c1 | 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 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | import streamlit as st
import google.generativeai as genai
from openai import OpenAI
import PIL.Image
import time
from plantuml import PlantUML
# Cria uma instância do PlantUML
plantuml = PlantUML("http://www.plantuml.com/plantuml/img/")
# Configurar a chave da API
genai.configure(api_key="")
def remover_acentos_graves(s):
# Substitui "```" por uma string vazia
s = s.replace("```", "")
s = s.replace("plantuml", "")
return s
def generate_webapp():
# Título do aplicativo Streamlit
st.title("Generative AI Web Apps")
st.subheader("Gera código a partir do Diagrama de Casos de Uso:")
# Área de upload de imagem
uploaded_file = st.file_uploader("Escolha um diagrama de casos de uso", type=["jpg", "jpeg", "png"])
# Caixa de seleção para permitir que o usuário forneça um prompt personalizado
use_custom_prompt = st.checkbox("Clique aqui se deseja fornecer um prompt personalizado")
if use_custom_prompt:
# Caixa de texto para o prompt personalizado (aparece apenas se use_custom_prompt for True)
user_prompt = st.text_area("Digite seu prompt para gerar o código da app:", key="custom_prompt", value="")
# Verificar se uma imagem foi carregada
if uploaded_file is not None:
# Carregar a imagem usando PIL
img = PIL.Image.open(uploaded_file)
# Exibir a imagem no frontend
st.image(img, caption="Imagem Carregada", use_column_width=True)
with st.spinner("Processando imagem..."):
vision_description = None
# Gerar descrição da imagem usando gemini-pro-vision
model_vision = genai.GenerativeModel('gemini-pro-vision')
vision_description = model_vision.generate_content(["Descreve com detalhes o que vê neste diagrama de casos de uso, especifique cada caso e ator mostrado no diagrama da imagem ", img])
# Exibir a descrição no frontend
st.subheader("Descrição do diagrama:")
st.write(vision_description.text)
with st.spinner("Gerando o código da app..."):
# Usar o prompt personalizado fornecido pelo usuário se a opção estiver ativada
if use_custom_prompt and user_prompt:
prompt_text = user_prompt + ","+vision_description.text
else:
# Caso contrário, use o prompt padrão combinado com a descrição da imagem
prompt_text = "Você é um desenvolvedor de web apps. Escreva os códigos necessários (não coloque nenhum comentário, somente os códigos) usando programação orientada a objetos, Python, Streamlit e caso seja necessário o banco de dados e suas tabelas usando o SQLite visando desenvolver um web app de acordo com a descrição deste diagrama de casos : " + vision_description.text
# Gerar código usando o modelo gemini-pro
model_code = genai.GenerativeModel('gemini-pro')
generated_code = model_code.generate_content(prompt_text)
# Exibir o código gerado no frontend
st.subheader("Código Gerado:")
st.code(generated_code.text, language='python')
prompt_UML = "Escreva somente o código do script usando plantuml para geração do digrama de classes tendo como base o seguinte código:"+generated_code.text
# Gerar código usando o modelo gemini-pro
model_code = genai.GenerativeModel('gemini-pro')
generated_code = model_code.generate_content(prompt_UML)
resultado = remover_acentos_graves(generated_code.text)
print(resultado)
with st.spinner("Gerando o diagrama de classes da app..."):
# Gera o diagrama e salva como um arquivo PNG
image_path = plantuml.processes(resultado)
with open("class_diagram.png", "wb") as f:
f.write(image_path)
time.sleep(5)
st.subheader("Diagrama de Classes Gerado:")
st.image("class_diagram.png")
def reverse_engineering():
# Título do aplicativo Streamlit
st.title("Reverse Engineering Web Apps")
st.subheader("Gera código a partir do Diagrama de Classes:")
# Área de upload de imagem
uploaded_file = st.file_uploader("Escolha um diagrama de classes", type=["jpg", "jpeg", "png"])
# Caixa de seleção para permitir que o usuário forneça um prompt personalizado
use_custom_prompt = st.checkbox("Clique aqui se deseja fornecer um prompt personalizado")
if use_custom_prompt:
# Caixa de texto para o prompt personalizado (aparece apenas se use_custom_prompt for True)
user_prompt = st.text_area("Digite seu prompt para gerar o código da app:", key="custom_prompt", value="")
# Verificar se uma imagem foi carregada
if uploaded_file is not None:
# Carregar a imagem usando PIL
img = PIL.Image.open(uploaded_file)
# Exibir a imagem no frontend
st.image(img, caption="Imagem Carregada", use_column_width=True)
with st.spinner("Processando imagem..."):
vision_description = None
# Gerar descrição da imagem usando gemini-pro-vision
model_vision = genai.GenerativeModel('gemini-pro-vision')
vision_description = model_vision.generate_content(["Descreve com detalhes o que vê neste diagrama de casos de classes, especifique cada classs e seus métodos mostrados no diagrama da imagem ", img])
# Exibir a descrição no frontend
st.subheader("Descrição do diagrama:")
st.write(vision_description.text)
with st.spinner("Gerando o código da app..."):
# Usar o prompt personalizado fornecido pelo usuário se a opção estiver ativada
if use_custom_prompt and user_prompt:
prompt_text = user_prompt + ","+vision_description.text
else:
# Caso contrário, use o prompt padrão combinado com a descrição da imagem
prompt_text = "Você é um desenvolvedor de web apps. Escreva os códigos necessários (não coloque nenhum comentário, somente os códigos) usando programação orientada a objetos, Python, Streamlit e caso seja necessário o banco de dados e suas tabelas usando o SQLite visando desenvolver um web app de acordo com a descrição deste diagrama de casos : " + vision_description.text
# Gerar código usando o modelo gemini-pro
model_code = genai.GenerativeModel('gemini-pro')
generated_code = model_code.generate_content(prompt_text)
# Exibir o código gerado no frontend
st.subheader("Código Gerado:")
st.code(generated_code.text, language='python')
def main():
st.sidebar.title("Menu")
menu_option = st.sidebar.radio("Escolha uma opção", ["Generate Webapp", "Reverse Engineering"])
if menu_option == "Generate Webapp":
generate_webapp()
elif menu_option == "Reverse Engineering":
reverse_engineering()
if __name__ == "__main__":
main()
|