chaos4455 commited on
Commit
818fecd
·
verified ·
1 Parent(s): 80c7bfa

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +77 -41
app.py CHANGED
@@ -2,27 +2,27 @@ import streamlit as st
2
  import google.generativeai as genai
3
  import json
4
  import re
 
5
 
6
  # Configurações de chave secreta e API do Google Gemini
7
  API_KEY = st.secrets["GOOGLE_API_KEY"]
8
 
9
  # Configuração da página
10
- st.set_page_config(page_title="Google Gemini 2 PowerShell Command Gen", page_icon="🤖", layout="wide")
11
 
12
- def enviar_mensagem_para_modelo(mensagem):
13
  """Envia uma mensagem para o modelo de IA e retorna a resposta."""
14
  try:
15
- # Configurações do modelo de IA (dentro da função)
16
  CONFIGURACAO_GERACAO = {
17
- "temperature": 0.7,
18
  "top_p": 0.8,
19
  "top_k": 40,
20
  "response_mime_type": "text/plain",
21
- "max_output_tokens": 1024
22
  }
23
- NOME_MODELO = "gemini-2.0-flash-exp"
24
  MODELO = genai.GenerativeModel(
25
- model_name=NOME_MODELO,
26
  generation_config=CONFIGURACAO_GERACAO,
27
  )
28
 
@@ -32,7 +32,7 @@ def enviar_mensagem_para_modelo(mensagem):
32
  st.error(f"❌ Erro ao comunicar com a IA: {e}")
33
  return None
34
 
35
- def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca):
36
  """Gera um comando Powershell com base nas configurações do usuário."""
37
  prompt = f"""
38
  Você é um especialista em Powershell. Sua tarefa é gerar um único comando Powershell com base na seguinte descrição:
@@ -42,6 +42,7 @@ def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_segu
42
  **Nível de Detalhe:** {nivel_detalhe}
43
  **Tipo de Script:** {tipo_script}
44
  **Nível de Segurança:** {nivel_seguranca}
 
45
 
46
  **Formato da resposta:**
47
  - Responda em formato Markdown, incluindo um bloco de código Powershell com a formatação original, sem quebrar linhas.
@@ -56,13 +57,16 @@ def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_segu
56
  - 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.
57
  - Certifique-se de que o comando gerado seja seguro e siga as melhores práticas do Powershell.
58
 
 
 
 
59
  **Importante:**
60
  - Gere apenas um comando por vez.
61
  """
62
- resposta = enviar_mensagem_para_modelo(prompt)
63
  return resposta
64
 
65
- def parsear_e_salvar_ps1(codigo_ia, titulo_curto):
66
  """Parseia o markdown e salva o código Powershell como .ps1."""
67
  match = re.search(r'```powershell\s*(.*?)\s*```', codigo_ia, re.DOTALL | re.IGNORECASE)
68
  if match:
@@ -71,62 +75,94 @@ def parsear_e_salvar_ps1(codigo_ia, titulo_curto):
71
  codigo_ps1 = codigo_ia.strip()
72
 
73
  nome_arquivo = f"comando_{titulo_curto}.ps1"
74
- with open(nome_arquivo, "w", encoding="utf-8") as f:
 
 
 
 
 
 
 
 
 
 
 
 
75
  f.write(codigo_ps1)
76
  return nome_arquivo, codigo_ps1
77
 
78
  def main():
79
-
80
- st.title("🤖 Google Gemini 2 PowerShell Command Gen by [Elias Andrade](https://github.com/chaos4455)")
81
- st.markdown("Crie comandos PowerShell de forma fácil e rápida!")
82
  st.markdown("---")
83
 
84
  # Layout em colunas (barra lateral e principal)
85
  col1, col2 = st.columns([1, 3])
86
-
87
  with col1:
88
  st.header("⚙️ Configurações")
89
- powershell_version = st.selectbox("Versão do PowerShell", ["7", "5.1"], index=0)
90
- sistema_operacional = st.selectbox(
91
- "Sistema Operacional",
92
- [
93
- "Windows Server 2022",
94
- "Windows Server 2019",
95
- "Windows Server 2016",
96
- "Windows Server 2012 R2",
97
- "Windows Server 2012",
98
- "Windows Server 2008 R2",
99
- "Windows Server 2008",
100
- "Windows 11",
101
- "Windows 10",
102
- "Windows 8.1",
103
- "Windows 8",
104
- "Windows 7",
105
- "Outro"
106
- ],
107
- index=2, # Define Windows Server 2016 como padrão
108
- )
 
 
 
 
 
109
 
110
- nivel_detalhe = st.selectbox("Nível de Detalhe", ["Mais detalhado", "Padrão", "Mais conciso"], index=1)
111
- tipo_script = st.selectbox("Tipo de Script", ["Mais automático", "Mais interativo"], index=0)
112
- nivel_seguranca = st.radio("Nível de Segurança", ["Alto", "Médio", "Baixo"], index=1)
113
  with col2:
114
- # Prompt base do usuário
115
  prompt_base = st.text_input("Descreva o Comando PowerShell:", placeholder="Ex: Liste todos os processos em execução", key="prompt_base")
116
 
 
 
 
 
 
117
  if st.button("✨ Gerar Comando PowerShell"):
118
  if not prompt_base:
119
  st.error("⚠️ Por favor, insira uma descrição do comando.")
120
  return
121
 
122
  with st.spinner("⏳ Gerando comando..."):
123
- codigo_ia = gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
124
  if codigo_ia:
125
  st.markdown("### ✅ Comando Gerado:")
126
  st.code(codigo_ia, language="powershell")
127
 
128
  titulo_curto = prompt_base[:30].strip().replace(" ", "_").lower()
129
- nome_arquivo_ps1, codigo_ps1 = parsear_e_salvar_ps1(codigo_ia, titulo_curto)
130
 
131
  st.download_button(
132
  label="⬇️ Baixar Comando (.ps1)",
 
2
  import google.generativeai as genai
3
  import json
4
  import re
5
+ import datetime
6
 
7
  # Configurações de chave secreta e API do Google Gemini
8
  API_KEY = st.secrets["GOOGLE_API_KEY"]
9
 
10
  # Configuração da página
11
+ st.set_page_config(page_title="🤖 Gemini2 PowerShell Command Gen", page_icon="🤖", layout="wide")
12
 
13
+ def enviar_mensagem_para_modelo(mensagem, modelo_nome, temperatura, max_tokens):
14
  """Envia uma mensagem para o modelo de IA e retorna a resposta."""
15
  try:
16
+ # Configurações do modelo de IA
17
  CONFIGURACAO_GERACAO = {
18
+ "temperature": temperatura,
19
  "top_p": 0.8,
20
  "top_k": 40,
21
  "response_mime_type": "text/plain",
22
+ "max_output_tokens": max_tokens,
23
  }
 
24
  MODELO = genai.GenerativeModel(
25
+ model_name=modelo_nome,
26
  generation_config=CONFIGURACAO_GERACAO,
27
  )
28
 
 
32
  st.error(f"❌ Erro ao comunicar com a IA: {e}")
33
  return None
34
 
35
+ def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca, modelo_nome, temperatura, max_tokens, prompt_detail, encoding, add_header, add_error_handling, log_level):
36
  """Gera um comando Powershell com base nas configurações do usuário."""
37
  prompt = f"""
38
  Você é um especialista em Powershell. Sua tarefa é gerar um único comando Powershell com base na seguinte descrição:
 
42
  **Nível de Detalhe:** {nivel_detalhe}
43
  **Tipo de Script:** {tipo_script}
44
  **Nível de Segurança:** {nivel_seguranca}
45
+ **Nível de Detalhamento do Prompt**:{prompt_detail}
46
 
47
  **Formato da resposta:**
48
  - Responda em formato Markdown, incluindo um bloco de código Powershell com a formatação original, sem quebrar linhas.
 
57
  - 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.
58
  - Certifique-se de que o comando gerado seja seguro e siga as melhores práticas do Powershell.
59
 
60
+ **Log Level**:{log_level}
61
+ **Tratamento de Erros**:{add_error_handling}
62
+
63
  **Importante:**
64
  - Gere apenas um comando por vez.
65
  """
66
+ resposta = enviar_mensagem_para_modelo(prompt, modelo_nome, temperatura, max_tokens)
67
  return resposta
68
 
69
+ def parsear_e_salvar_ps1(codigo_ia, titulo_curto, encoding, add_header):
70
  """Parseia o markdown e salva o código Powershell como .ps1."""
71
  match = re.search(r'```powershell\s*(.*?)\s*```', codigo_ia, re.DOTALL | re.IGNORECASE)
72
  if match:
 
75
  codigo_ps1 = codigo_ia.strip()
76
 
77
  nome_arquivo = f"comando_{titulo_curto}.ps1"
78
+
79
+ if add_header:
80
+ data_atual = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
81
+ header = f"""
82
+ #===============================================================================
83
+ # Script Gerado pelo Google Gemini 2 PowerShell Command Gen
84
+ # Data: {data_atual}
85
+ # Autor: Elias Andrade
86
+ #===============================================================================
87
+ """
88
+ codigo_ps1 = header + codigo_ps1
89
+
90
+ with open(nome_arquivo, "w", encoding=encoding) as f:
91
  f.write(codigo_ps1)
92
  return nome_arquivo, codigo_ps1
93
 
94
  def main():
95
+ st.title("🤖 Gemini2 PowerShell Command Gen by [Elias Andrade](https://github.com/chaos4455)")
96
+ st.markdown("Crie comandos PowerShell de forma fácil e rápida! 🚀")
 
97
  st.markdown("---")
98
 
99
  # Layout em colunas (barra lateral e principal)
100
  col1, col2 = st.columns([1, 3])
101
+
102
  with col1:
103
  st.header("⚙️ Configurações")
104
+
105
+ with st.expander("✨ Configurações da IA"):
106
+ modelo_nome = st.selectbox("🤖 Modelo da IA", ["gemini-2.0-flash-exp", "gemini-1.5-flash-exp"], index=0, help="Escolha o modelo da IA.")
107
+ temperatura = st.slider("🌡️ Temperatura", min_value=0.1, max_value=1.0, value=0.7, step=0.1, help="Ajuste a criatividade da IA.")
108
+ max_tokens = st.number_input("📏 Max Tokens", min_value=128, max_value=8192, value=8192, step=128, help="Ajuste o tamanho máximo da resposta.")
109
+
110
+ with st.expander("📝 Configurações do Prompt"):
111
+ prompt_presets = st.selectbox("🎯 Prompts Predefinidos", ["Nenhum", "Listar arquivos", "Gerenciar processos", "Gerenciar serviços"], index=0, help="Escolha um prompt predefinido.")
112
+ prompt_detail = st.selectbox("🧐 Detalhe do Prompt", ["Mais descritivo", "Padrão", "Conciso"], index=1, help="Define o nível de detalhe do prompt")
113
+
114
+ with st.expander("🛠️ Configurações do PowerShell"):
115
+ powershell_version = st.selectbox("🎛️ Versão do PowerShell", ["7", "5.1"], index=0, help="Escolha a versão do PowerShell")
116
+ sistema_operacional = st.selectbox(
117
+ "💻 Sistema Operacional",
118
+ [
119
+ "Windows Server 2022", "Windows Server 2019", "Windows Server 2016",
120
+ "Windows Server 2012 R2", "Windows Server 2012", "Windows Server 2008 R2",
121
+ "Windows Server 2008", "Windows 11", "Windows 10","Windows 8.1", "Windows 8","Windows 7", "Outro"
122
+ ],
123
+ index=2, help="Escolha o Sistema Operacional de destino."
124
+ )
125
+ encoding = st.selectbox("🔤 Encoding", ["utf-8", "ansi"], index=0, help="Escolha o encoding do arquivo .ps1")
126
+ add_header = st.checkbox("📜 Adicionar Cabeçalho", value=True, help="Adicionar um cabeçalho com informações no arquivo .ps1")
127
+ add_error_handling = st.checkbox("🛡️ Tratamento de Erros", value=True, help="Adicionar tratamento de erros padrão no script")
128
+ log_level = st.selectbox("🗂️ Nível de Logging", ["Detalhado", "Padrão", "Mínimo"], index=1, help="Define o nível de detalhe de logs.")
129
 
 
 
 
130
  with col2:
131
+ # Prompt base do usuário
132
  prompt_base = st.text_input("Descreva o Comando PowerShell:", placeholder="Ex: Liste todos os processos em execução", key="prompt_base")
133
 
134
+ if prompt_presets != "Nenhum":
135
+ if prompt_base:
136
+ prompt_base = f"{prompt_presets} , {prompt_base}"
137
+ else:
138
+ prompt_base = prompt_presets;
139
  if st.button("✨ Gerar Comando PowerShell"):
140
  if not prompt_base:
141
  st.error("⚠️ Por favor, insira uma descrição do comando.")
142
  return
143
 
144
  with st.spinner("⏳ Gerando comando..."):
145
+ codigo_ia = gerar_comando_powershell(
146
+ prompt_base,
147
+ nivel_detalhe,
148
+ tipo_script,
149
+ nivel_seguranca,
150
+ modelo_nome,
151
+ temperatura,
152
+ max_tokens,
153
+ prompt_detail,
154
+ encoding,
155
+ add_header,
156
+ add_error_handling,
157
+ log_level
158
+ )
159
+
160
  if codigo_ia:
161
  st.markdown("### ✅ Comando Gerado:")
162
  st.code(codigo_ia, language="powershell")
163
 
164
  titulo_curto = prompt_base[:30].strip().replace(" ", "_").lower()
165
+ nome_arquivo_ps1, codigo_ps1 = parsear_e_salvar_ps1(codigo_ia, titulo_curto, encoding, add_header)
166
 
167
  st.download_button(
168
  label="⬇️ Baixar Comando (.ps1)",