giseldo commited on
Commit
f029d48
·
0 Parent(s):

first commit

Browse files
Files changed (2) hide show
  1. app.py +97 -0
  2. requirements.txt +2 -0
app.py ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import os
3
+ from groq import Groq
4
+
5
+ # Função principal que interage com a API da GROQ
6
+ def get_groq_response(message, history, api_key, system_prompt, temperature):
7
+ """
8
+ Obtém uma resposta da API da GROQ.
9
+ A função é um gerador para suportar streaming de texto.
10
+ """
11
+ final_api_key = api_key or os.environ.get("GROQ_API_KEY")
12
+
13
+ if not final_api_key:
14
+ yield "Erro: A chave da API da GROQ não foi informada. Por favor, insira a chave na interface ou defina a variável de ambiente GROQ_API_KEY."
15
+ return
16
+
17
+ client = Groq(api_key=final_api_key)
18
+
19
+ # Formata o histórico para o formato da API, incluindo as instruções do sistema
20
+ messages = []
21
+ if system_prompt:
22
+ messages.append({"role": "system", "content": system_prompt})
23
+
24
+ for user_msg, assistant_msg in history:
25
+ messages.append({"role": "user", "content": user_msg})
26
+ messages.append({"role": "assistant", "content": assistant_msg})
27
+ messages.append({"role": "user", "content": message})
28
+
29
+ try:
30
+ # Cria a chamada de chat com streaming
31
+ stream = client.chat.completions.create(
32
+ messages=messages,
33
+ model="llama3-8b-8192",
34
+ temperature=temperature,
35
+ max_tokens=1024,
36
+ top_p=1,
37
+ stream=True,
38
+ )
39
+
40
+ # Yield cada parte da resposta para o Gradio
41
+ response_text = ""
42
+ for chunk in stream:
43
+ content = chunk.choices[0].delta.content or ""
44
+ response_text += content
45
+ yield response_text
46
+
47
+ except Exception as e:
48
+ yield f"Ocorreu um erro: {e}"
49
+
50
+ # Construção da interface com Gradio Blocks
51
+ with gr.Blocks(theme=gr.themes.Soft(), title="Chatbot Jurídico com GROQ") as demo:
52
+ gr.Markdown(
53
+ """
54
+ # Chatbot Jurídico com GROQ
55
+ Faça sua pergunta e o chatbot irá te auxiliar.
56
+ Ajuste as configurações e informe sua chave da API da GROQ.
57
+ """
58
+ )
59
+
60
+ with gr.Accordion("Configurações Avançadas", open=False):
61
+ system_prompt = gr.Textbox(
62
+ label="Instruções do Sistema",
63
+ value="Você é um assistente jurídico prestativo e preciso, que sempre responde em português do Brasil.",
64
+ info="Defina o comportamento do chatbot.",
65
+ lines=3,
66
+ )
67
+ temperature = gr.Slider(
68
+ minimum=0.0,
69
+ maximum=2.0,
70
+ step=0.1,
71
+ value=0.7,
72
+ label="Temperatura",
73
+ info="Controla a criatividade da resposta. Valores mais altos geram respostas mais criativas.",
74
+ )
75
+ groq_api_key = gr.Textbox(
76
+ label="Chave da API da GROQ",
77
+ type="password",
78
+ placeholder="gsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
79
+ info="Insira sua chave da API da GROQ aqui. Se deixado em branco, usará a variável de ambiente GROQ_API_KEY.",
80
+ )
81
+
82
+ # Interface de Chat
83
+ chat_interface = gr.ChatInterface(
84
+ fn=get_groq_response,
85
+ additional_inputs=[groq_api_key, system_prompt, temperature],
86
+ title="Assistente Jurídico",
87
+ description="Este chatbot usa o modelo Llama3 via GROQ para responder suas perguntas.",
88
+ examples=[
89
+ ["O que é um habeas corpus?"],
90
+ ["Quais são os tipos de divórcio existentes no Brasil?"],
91
+ ["Explique o que é usucapião de forma simples."]
92
+ ]
93
+ )
94
+
95
+ if __name__ == "__main__":
96
+ # Inicia a aplicação Gradio
97
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ gradio
2
+ groq