| import streamlit as st |
| import google.generativeai as genai |
| import json |
| import re |
|
|
| |
| API_KEY = st.secrets["GOOGLE_API_KEY"] |
|
|
| |
| CONFIGURACAO_GERACAO = { |
| "temperature": 0.2, |
| "top_p": 0.8, |
| "top_k": 40, |
| "response_mime_type": "text/plain", |
| } |
| NOME_MODELO = "gemini-2.0-flash-exp" |
|
|
| |
| st.set_page_config(page_title="Google Gemini 2 PowerShell Command Gen", page_icon="🤖", layout="wide") |
|
|
|
|
| def enviar_mensagem_para_modelo(mensagem): |
| """Envia uma mensagem para o modelo de IA e retorna a resposta.""" |
| try: |
| MODELO = genai.GenerativeModel( |
| model_name=NOME_MODELO, |
| generation_config=CONFIGURACAO_GERACAO, |
| ) |
| resposta = MODELO.start_chat(history=[]).send_message(mensagem) |
| return resposta.text |
| except Exception as e: |
| st.error(f"❌ Erro ao comunicar com a IA: {e}") |
| return None |
|
|
| def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca): |
| """Gera um comando Powershell com base nas configurações do usuário.""" |
| prompt = f""" |
| Você é um especialista em Powershell. Sua tarefa é gerar um único comando Powershell com base na seguinte descrição: |
| |
| **Descrição do Comando:** {prompt_base} |
| |
| **Nível de Detalhe:** {nivel_detalhe} |
| **Tipo de Script:** {tipo_script} |
| **Nível de Segurança:** {nivel_seguranca} |
| |
| **Formato da resposta:** |
| - Responda em formato Markdown, incluindo um bloco de código Powershell com a formatação original, sem quebrar linhas. |
| - O bloco de código Powershell deve estar delimitado por ```powershell e ``` . |
| - Não inclua comentários, explicações ou qualquer outro texto fora do bloco de código. |
| - O código Powershell deve manter a formatação vertical completa, respeitando indentação e quebras de linha. |
| - Se for gerar um comando com uma cadeia de comandos, não use ponto e virgula no final ou inicio. |
| - Se precisar use pipe "|" para encadear. |
| - Não use nenhum tipo de formatação especial no resultado, apenas o código. |
| - Se a descrição pedir para criar um arquivo, o comando deverá criar o arquivo diretamente no sistema de arquivos e não usar um output em tela para isso. |
| - Se a descrição pedir para ler um arquivo, o comando deverá ler o arquivo diretamente do sistema de arquivos e não usar um input em tela para isso. |
| - O sistema operacional padrão é Windows Server 2016 e a versão do Powershell padrão é a 7, a não ser que o usuário especifique o contrário. |
| - Certifique-se de que o comando gerado seja seguro e siga as melhores práticas do Powershell. |
| |
| **Importante:** |
| - Gere apenas um comando por vez. |
| """ |
| resposta = enviar_mensagem_para_modelo(prompt) |
| return resposta |
|
|
| def parsear_e_salvar_ps1(codigo_ia, titulo_curto): |
| """Parseia o markdown e salva o código Powershell como .ps1.""" |
| match = re.search(r'```powershell\s*(.*?)\s*```', codigo_ia, re.DOTALL | re.IGNORECASE) |
| if match: |
| codigo_ps1 = match.group(1).strip() |
| else: |
| codigo_ps1 = codigo_ia.strip() |
|
|
| nome_arquivo = f"comando_{titulo_curto}.ps1" |
| with open(nome_arquivo, "w", encoding="utf-8") as f: |
| f.write(codigo_ps1) |
| return nome_arquivo, codigo_ps1 |
|
|
| def main(): |
| |
| st.title("🤖 Google Gemini 2 PowerShell Command Gen by [Elias Andrade](https://github.com/chaos4455)") |
| st.markdown("Crie comandos PowerShell de forma fácil e rápida!") |
| st.markdown("---") |
|
|
| |
| col1, col2 = st.columns([1, 3]) |
|
|
| with col1: |
| st.header("⚙️ Configurações") |
| powershell_version = st.selectbox("Versão do PowerShell", ["7", "5.1"], index=0) |
| sistema_operacional = st.selectbox("Sistema Operacional", ["Windows Server 2016", "Windows 10", "Windows 11", "Outro"], index=0) |
|
|
| nivel_detalhe = st.selectbox("Nível de Detalhe", ["Mais detalhado", "Padrão", "Mais conciso"], index=1) |
| tipo_script = st.selectbox("Tipo de Script", ["Mais automático", "Mais interativo"], index=0) |
| nivel_seguranca = st.radio("Nível de Segurança", ["Alto", "Médio", "Baixo"], index=1) |
| with col2: |
| |
| prompt_base = st.text_input("Descreva o Comando PowerShell:", placeholder="Ex: Liste todos os processos em execução", key="prompt_base") |
|
|
| if st.button("✨ Gerar Comando PowerShell"): |
| if not prompt_base: |
| st.error("⚠️ Por favor, insira uma descrição do comando.") |
| return |
|
|
| with st.spinner("⏳ Gerando comando..."): |
| codigo_ia = gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca) |
| if codigo_ia: |
| st.markdown("### ✅ Comando Gerado:") |
| st.code(codigo_ia, language="powershell") |
|
|
| titulo_curto = prompt_base[:30].strip().replace(" ", "_").lower() |
| nome_arquivo_ps1, codigo_ps1 = parsear_e_salvar_ps1(codigo_ia, titulo_curto) |
|
|
| st.download_button( |
| label="⬇️ Baixar Comando (.ps1)", |
| data=codigo_ps1, |
| file_name=nome_arquivo_ps1, |
| mime="application/powershell", |
| ) |
| else: |
| st.error("❌ Erro ao gerar o comando. Verifique a conexão com a IA e tente novamente.") |
|
|
| if __name__ == "__main__": |
| main() |