chaos4455 commited on
Commit
7c724c7
·
verified ·
1 Parent(s): 8099599

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +84 -72
app.py CHANGED
@@ -5,23 +5,92 @@ import re
5
 
6
  # Configurações de chave secreta e API do Google Gemini
7
  API_KEY = st.secrets["GOOGLE_API_KEY"]
8
- genai.configure(api_key=API_KEY)
9
-
10
- # Configuração do modelo de IA
11
- CONFIGURACAO_GERACAO = {
12
- "temperature": 0.2,
13
- "top_p": 0.8,
14
- "top_k": 40,
15
- "response_mime_type": "text/plain",
16
- }
17
- NOME_MODELO = "gemini-2.0-flash-exp"
18
- MODELO = genai.GenerativeModel(
19
- model_name=NOME_MODELO,
20
- generation_config=CONFIGURACAO_GERACAO,
21
- )
22
 
23
  # Estilos CSS para o Streamlit
24
- st.markdown(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  """
26
  <style>
27
  body {
@@ -108,63 +177,6 @@ st.markdown(
108
  """,
109
  unsafe_allow_html=True,
110
  )
111
-
112
-
113
- # Chamada de st.set_page_config fora da função main
114
- st.set_page_config(page_title="Google Gemini 2 PowerShell Command Gen", page_icon="🤖")
115
-
116
- def enviar_mensagem_para_modelo(mensagem):
117
- """Envia uma mensagem para o modelo de IA e retorna a resposta."""
118
- try:
119
- resposta = MODELO.start_chat(history=[]).send_message(mensagem)
120
- return resposta.text
121
- except Exception as e:
122
- st.error(f"❌ Erro ao comunicar com a IA: {e}")
123
- return None
124
-
125
- def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca):
126
- """Gera um comando Powershell com base nas configurações do usuário."""
127
- prompt = f"""
128
- Você é um especialista em Powershell. Sua tarefa é gerar um único comando Powershell com base na seguinte descrição:
129
-
130
- **Descrição do Comando:** {prompt_base}
131
-
132
- **Nível de Detalhe:** {nivel_detalhe}
133
- **Tipo de Script:** {tipo_script}
134
- **Nível de Segurança:** {nivel_seguranca}
135
-
136
- **Formato da resposta:**
137
- - Responda apenas o código do comando Powershell, sem texto adicional.
138
- - Não inclua comentários, explicações ou markdown.
139
- - Se for gerar um comando com uma cadeia de comandos, não use ponto e virgula no final ou inicio.
140
- - Se precisar use pipe "|" para encadear.
141
- - Não use nenhum tipo de formatação especial no resultado, apenas o código.
142
- - 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.
143
- - 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.
144
- - 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.
145
- - Certifique-se de que o comando gerado seja seguro e siga as melhores práticas do Powershell.
146
-
147
- **Importante:**
148
- - Gere apenas um comando por vez.
149
- """
150
- resposta = enviar_mensagem_para_modelo(prompt)
151
- return resposta
152
-
153
- def parsear_e_salvar_ps1(codigo_ia, titulo_curto):
154
- """Parseia o código retornado pela IA para extrair o bloco de comando ps1 e salva como .ps1."""
155
- # Regex para encontrar blocos de código Powershell (ignorando case)
156
- match = re.search(r'```powershell\s*(.*?)\s*```', codigo_ia, re.DOTALL | re.IGNORECASE)
157
- if match:
158
- codigo_ps1 = match.group(1).strip()
159
- else:
160
- codigo_ps1 = codigo_ia.strip() # Se não houver bloco, usa o código inteiro
161
-
162
- nome_arquivo = f"comando_{titulo_curto}.ps1"
163
- with open(nome_arquivo, "w", encoding="utf-8") as f:
164
- f.write(codigo_ps1)
165
- return nome_arquivo, codigo_ps1
166
-
167
- def main():
168
 
169
  st.title("🤖 Google Gemini 2 PowerShell Command Gen by [Elias Andrade](https://github.com/chaos4455)")
170
  st.markdown("Crie comandos PowerShell de forma fácil e rápida!")
 
5
 
6
  # Configurações de chave secreta e API do Google Gemini
7
  API_KEY = st.secrets["GOOGLE_API_KEY"]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
 
9
  # Estilos CSS para o Streamlit
10
+ # Removido do escopo global
11
+ # st.markdown( ... )
12
+
13
+ # Removido do escopo global
14
+ # st.set_page_config( ... )
15
+
16
+
17
+ def enviar_mensagem_para_modelo(mensagem):
18
+ """Envia uma mensagem para o modelo de IA e retorna a resposta."""
19
+ try:
20
+ # Removido do escopo global
21
+ # MODELO = genai.GenerativeModel(model_name=NOME_MODELO, generation_config=CONFIGURACAO_GERACAO)
22
+ resposta = MODELO.start_chat(history=[]).send_message(mensagem)
23
+ return resposta.text
24
+ except Exception as e:
25
+ st.error(f"❌ Erro ao comunicar com a IA: {e}")
26
+ return None
27
+
28
+ def gerar_comando_powershell(prompt_base, nivel_detalhe, tipo_script, nivel_seguranca):
29
+ """Gera um comando Powershell com base nas configurações do usuário."""
30
+ prompt = f"""
31
+ Você é um especialista em Powershell. Sua tarefa é gerar um único comando Powershell com base na seguinte descrição:
32
+
33
+ **Descrição do Comando:** {prompt_base}
34
+
35
+ **Nível de Detalhe:** {nivel_detalhe}
36
+ **Tipo de Script:** {tipo_script}
37
+ **Nível de Segurança:** {nivel_seguranca}
38
+
39
+ **Formato da resposta:**
40
+ - Responda apenas o código do comando Powershell, sem texto adicional.
41
+ - Não inclua comentários, explicações ou markdown.
42
+ - Se for gerar um comando com uma cadeia de comandos, não use ponto e virgula no final ou inicio.
43
+ - Se precisar use pipe "|" para encadear.
44
+ - Não use nenhum tipo de formatação especial no resultado, apenas o código.
45
+ - 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.
46
+ - 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.
47
+ - 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.
48
+ - Certifique-se de que o comando gerado seja seguro e siga as melhores práticas do Powershell.
49
+
50
+ **Importante:**
51
+ - Gere apenas um comando por vez.
52
+ """
53
+ resposta = enviar_mensagem_para_modelo(prompt)
54
+ return resposta
55
+
56
+ def parsear_e_salvar_ps1(codigo_ia, titulo_curto):
57
+ """Parseia o código retornado pela IA para extrair o bloco de comando ps1 e salva como .ps1."""
58
+ # Regex para encontrar blocos de código Powershell (ignorando case)
59
+ match = re.search(r'```powershell\s*(.*?)\s*```', codigo_ia, re.DOTALL | re.IGNORECASE)
60
+ if match:
61
+ codigo_ps1 = match.group(1).strip()
62
+ else:
63
+ codigo_ps1 = codigo_ia.strip() # Se não houver bloco, usa o código inteiro
64
+
65
+ nome_arquivo = f"comando_{titulo_curto}.ps1"
66
+ with open(nome_arquivo, "w", encoding="utf-8") as f:
67
+ f.write(codigo_ps1)
68
+ return nome_arquivo, codigo_ps1
69
+
70
+ def main():
71
+
72
+ # Configuração do modelo de IA
73
+ CONFIGURACAO_GERACAO = {
74
+ "temperature": 0.2,
75
+ "top_p": 0.8,
76
+ "top_k": 40,
77
+ "response_mime_type": "text/plain",
78
+ }
79
+ NOME_MODELO = "gemini-2.0-flash-exp"
80
+
81
+ # Move st.set_page_config para o começo da função
82
+ st.set_page_config(page_title="Google Gemini 2 PowerShell Command Gen", page_icon="🤖")
83
+
84
+
85
+ # Configuração do modelo de IA
86
+ global MODELO
87
+ MODELO = genai.GenerativeModel(
88
+ model_name=NOME_MODELO,
89
+ generation_config=CONFIGURACAO_GERACAO,
90
+ )
91
+
92
+ # Estilos CSS para o Streamlit
93
+ st.markdown(
94
  """
95
  <style>
96
  body {
 
177
  """,
178
  unsafe_allow_html=True,
179
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
180
 
181
  st.title("🤖 Google Gemini 2 PowerShell Command Gen by [Elias Andrade](https://github.com/chaos4455)")
182
  st.markdown("Crie comandos PowerShell de forma fácil e rápida!")