-
Notifications
You must be signed in to change notification settings - Fork 1
Classes e métodos
graph TD
%% Definição dos estilos
classDef mainStyle fill:#f9f,stroke:#333,stroke-width:2px,color:#fff;
classDef menuStyle fill:#ccf,stroke:#333,stroke-width:2px,color:#fff;
classDef chatHandlerStyle fill:#cfc,stroke:#333,stroke-width:2px,color:#fff;
classDef consoleServiceStyle fill:#fcf,stroke:#333,stroke-width:2px,color:#fff;
classDef apiKeyManagerStyle fill:#ffc,stroke:#333,stroke-width:2px,color:#fff;
classDef conversationManagerStyle fill:#ccf,stroke:#333,stroke-width:2px,color:#fff;
classDef textFormatterStyle fill:#fdd,stroke:#333,stroke-width:2px,color:#fff;
classDef jsonUtilStyle fill:#cff,stroke:#333,stroke-width:2px,color:#fff;
subgraph Main
A[Main] --> B[MenuManager]
end
subgraph MenuManager
B --> C[ChatHandler]
B --> D[ApiKeyManager]
B --> E[ConversationManager]
B --> F[TextFormatter]
B --> G[JsonUtil]
end
subgraph ChatHandler
C --> H[ConsoleService]
C --> I[TextFormatter]
end
subgraph ConsoleService
H --> J[ApiKeyManager]
H --> K[GeminiApiClient]
end
subgraph GeminiApiClient
K --> L[ApiKeyManager]
end
subgraph ApiKeyManager
D --> M[GeminiApiClient]
end
subgraph ConversationManager
E --> N[JsonUtil]
end
subgraph TextFormatter
F --> O[ConsoleService]
end
subgraph JsonUtil
G --> P[ConversationManager]
end
%% Aplicação dos estilos
class A mainStyle;
class B menuStyle;
class C chatHandlerStyle;
class D apiKeyManagerStyle;
class E conversationManagerStyle;
class F textFormatterStyle;
class G jsonUtilStyle;
class H consoleServiceStyle;
class I textFormatterStyle;
class J apiKeyManagerStyle;
class K consoleServiceStyle;
class L apiKeyManagerStyle;
class M apiKeyManagerStyle;
class N jsonUtilStyle;
class O consoleServiceStyle;
class P jsonUtilStyle;
A classe Main é o ponto de entrada principal da aplicação AskConsole. Sua função é configurar e iniciar a aplicação, gerenciando a inicialização dos componentes principais e exibindo o menu para o usuário.
-
ApiKeyManager
- Descrição: Responsável por gerenciar a chave API necessária para autenticação com a API Gemini. Verifica se a chave está presente e a recupera quando necessário.
-
Função no
main: Cria uma instância deApiKeyManagerpara verificar a presença da chave API e fornecer a chave quando disponível.
-
GeminiApiClient
- Descrição: Cliente para interagir com a API Gemini. Usa a chave API fornecida para autenticar e enviar solicitações à API.
-
Função no
main: Se a chave API estiver presente, uma instância deGeminiApiClienté criada com a chave API para comunicação com a API Gemini.
-
ConsoleService
- Descrição: Fornece serviços relacionados ao console, como interação com o usuário e gestão das conversas.
-
Função no
main: Inicializa uma instância deConsoleService. Se a chave API estiver disponível, oConsoleServiceé configurado com oGeminiApiClient. Caso contrário, é inicializado sem o cliente da API.
-
MenuManager
- Descrição: Gerencia a exibição e interação do menu principal da aplicação.
-
Função no
main: Cria uma instância deMenuManagercom oConsoleServiceeApiKeyManagere chama o método para exibir o menu.
-
Inicialização: O método
maincomeça criando uma instância deApiKeyManagerpara verificar a presença da chave API. -
Configuração do Cliente da API: Se a chave API estiver disponível, uma instância de
GeminiApiClienté criada. -
Configuração do Serviço do Console: O
ConsoleServiceé inicializado com oGeminiApiClientse a chave API estiver presente; caso contrário, é inicializado sem o cliente da API. -
Inicialização do Menu: Uma instância de
MenuManageré criada e o menu é exibido ao usuário.
Essa estrutura garante que a aplicação seja configurada corretamente com base na disponibilidade da chave API e que o usuário tenha acesso ao menu principal para iniciar as interações.
A classe ApiKeyManager é responsável pelo gerenciamento da chave API utilizada para autenticação na API Gemini. Ela cuida da carga, verificação, importação e armazenamento da chave API.
-
API_KEY_FILE: Constante que define o nome do arquivo onde a chave API é armazenada (api_key.ini). -
apiKey: Variável que armazena a chave API atual.
-
ApiKeyManager()-
Descrição: Construtor da classe que chama o método
loadApiKey()para carregar a chave API a partir do arquivo de configuração.
-
Descrição: Construtor da classe que chama o método
-
boolean isApiKeyPresent()- Descrição: Verifica se a chave API está presente e não é vazia.
-
Retorno:
truese a chave API estiver presente,falsecaso contrário.
-
String getApiKey()- Descrição: Retorna a chave API armazenada.
-
Retorno: A chave API como uma
String.
-
void importApiKey()-
Descrição: Permite ao usuário importar uma chave API a partir de um arquivo
.iniselecionado via um seletor de arquivos (JFileChooser). Verifica a validade da chave e a salva se for válida. -
Processo:
- Exibe um seletor de arquivos para o usuário escolher um arquivo
.ini. - Lê o conteúdo do arquivo e extrai a chave API.
- Verifica a validade da chave API usando o método
testApiKey(). - Se a chave for válida, a chave é salva e a mensagem de sucesso é exibida; caso contrário, uma mensagem de erro é exibida.
- Exibe um seletor de arquivos para o usuário escolher um arquivo
-
Descrição: Permite ao usuário importar uma chave API a partir de um arquivo
-
boolean testApiKey(String apiKey)- Descrição: Testa a validade da chave API fornecida enviando uma solicitação de teste para a API Gemini.
-
Parâmetros:
apiKey- A chave API a ser testada. -
Retorno:
truese a chave API for válida e a resposta não estiver vazia,falsecaso contrário.
-
void loadApiKey()-
Descrição: Carrega a chave API do arquivo
api_key.inie verifica sua validade. Se a chave for inválida ou não for encontrada, o método lida com esses casos e tenta redirecionar o usuário. -
Processo:
- Verifica se o arquivo
api_key.iniexiste e não está vazio. - Lê o conteúdo do arquivo e extrai a chave API.
- Verifica a validade da chave API usando o método
testApiKey(). - Exibe mensagens apropriadas com base na validade da chave.
- Verifica se o arquivo
-
Descrição: Carrega a chave API do arquivo
-
void saveApiKey()-
Descrição: Salva a chave API atual no arquivo
api_key.ini. -
Processo: Escreve a chave API no arquivo
api_key.ini, criando o arquivo se não existir. Exibe uma mensagem de erro se a operação falhar.
-
Descrição: Salva a chave API atual no arquivo
-
Inicialização: O construtor da classe carrega a chave API existente (se houver) ao criar uma instância de
ApiKeyManager. -
Importação da Chave: O método
importApiKey()permite ao usuário importar uma nova chave API e a valida se necessário. -
Validação e Carregamento: O método
loadApiKey()carrega e valida a chave API a partir do arquivo de configuração. -
Armazenamento: O método
saveApiKey()armazena a chave API no arquivo de configuração para uso futuro.
Esta classe assegura que a chave API seja gerenciada de forma eficiente, fornecendo métodos para importação, validação e armazenamento, além de lidar com possíveis erros e estados inválidos.
A classe GeminiApiClient é responsável por interagir com a API Gemini para enviar solicitações e receber respostas. Ela gerencia a autenticação e a comunicação com a API, enviando prompts e processando as respostas.
-
GEMINI_MODEL: Constante que define o modelo de linguagem a ser utilizado na API (gemini-1.5-flash). -
apiKey: Variável que armazena a chave API necessária para autenticação.
-
GeminiApiClient(String apiKey)- Descrição: Construtor da classe que inicializa a instância com a chave API fornecida.
-
Parâmetros:
-
apiKey: A chave API para autenticação com a API Gemini.
-
-
boolean isApiKeyValid()- Descrição: Verifica se a chave API é válida, ou seja, não é nula e não está vazia ou em branco.
-
Retorno:
truese a chave API for válida,falsecaso contrário.
-
String sendRequest(String prompt)- Descrição: Envia um prompt para a API Gemini e retorna a resposta. A chave API deve ser válida.
-
Parâmetros:
-
prompt: O texto do prompt a ser enviado para a API.
-
-
Retorno: A resposta da API como uma
String. -
Exceções:
-
IllegalStateException: Se a chave API não estiver definida ou for inválida. -
IOException: Se ocorrer um erro durante a requisição HTTP ou ao processar a resposta.
-
-
Verificação da Chave API: O método
sendRequest()verifica se a chave API é válida antes de prosseguir com a solicitação. -
Criação do Corpo da Requisição: O método
sendRequest()utilizaJsonUtil.createJsonRequestBody(prompt)para criar o corpo JSON da solicitação. -
Envio da Solicitação:
- Cria uma URL para a API Gemini com o modelo e a chave API.
- Configura a conexão HTTP para o método POST e define o tipo de conteúdo como
application/json. - Envia o corpo da solicitação para a API.
-
Processamento da Resposta:
- Verifica o código de resposta HTTP.
- Se o código for
HTTP_OK, lê a resposta da API e a retorna. - Se o código for diferente, lança uma
IOExceptioncom a mensagem de erro.
- A URL de solicitação é montada com base no modelo de linguagem e na chave API fornecida.
- O método
sendRequest()espera que o corpo da solicitação esteja no formato JSON, que é gerado pela classeJsonUtil. - O método
isApiKeyValid()é usado para garantir que a chave API esteja presente e seja válida antes de fazer qualquer solicitação.
Esta classe é essencial para a comunicação com a API Gemini, garantindo que as solicitações sejam corretamente formatadas e autenticadas.
A classe ConsoleService gerencia a interação do usuário com o sistema de chat, incluindo o envio de mensagens para a API Gemini, a exibição do histórico de conversas e o gerenciamento do histórico da conversa.
-
geminiApiClient: Instância da classeGeminiApiClientutilizada para enviar solicitações para a API Gemini. -
conversationManager: Instância da classeConversationManagerresponsável por gerenciar e salvar o histórico das conversas. -
hash: String que representa a identificação única da conversa. -
conversationHistory: String que armazena o histórico da conversa atual.
-
ConsoleService(GeminiApiClient geminiApiClient, ConversationManager conversationManager, String hash)- Descrição: Construtor da classe que inicializa a instância com o cliente da API Gemini, o gerenciador de conversas e o hash da conversa.
-
Parâmetros:
-
geminiApiClient: Instância doGeminiApiClient. -
conversationManager: Instância doConversationManager. -
hash: Identificação única da conversa.
-
-
String chat(String userMessage)-
Descrição: Envia uma mensagem do usuário para a API Gemini e retorna a resposta da IA. Atualiza o histórico da conversa e salva a mensagem usando o
ConversationManager. -
Parâmetros:
-
userMessage: A mensagem do usuário a ser enviada para a API.
-
-
Retorno: A resposta da IA como uma
String. -
Exceções:
-
IOException: Se ocorrer um erro durante a comunicação com a API. -
JSONException: Se houver um erro ao processar a resposta da API.
-
-
Descrição: Envia uma mensagem do usuário para a API Gemini e retorna a resposta da IA. Atualiza o histórico da conversa e salva a mensagem usando o
-
String getConversationHistory(String hash)- Descrição: Recupera e exibe o histórico da conversa baseado no hash fornecido. Formata e exibe as mensagens com cores diferentes para o usuário e a IA.
-
Parâmetros:
-
hash: Identificação única da conversa para recuperar o histórico.
-
-
Retorno: O histórico da conversa formatado como uma
String. -
Notas:
- Se o arquivo JSON de histórico não estiver no formato correto ou não for encontrado, retorna uma mensagem de erro apropriada.
- Se o arquivo estiver vazio ou não contiver mensagens, inicia um novo chat.
-
void loadConversationHistory(String conversation)-
Descrição: Carrega o histórico da conversa a partir de uma string JSON e atualiza o atributo
conversationHistory. -
Parâmetros:
-
conversation: String JSON representando o histórico da conversa.
-
-
Exceções:
-
JSONException: Se houver um erro ao processar o JSON.
-
-
Descrição: Carrega o histórico da conversa a partir de uma string JSON e atualiza o atributo
-
void clearHistory()-
Descrição: Limpa o histórico da conversa atual, redefinindo o atributo
conversationHistorypara uma string vazia.
-
Descrição: Limpa o histórico da conversa atual, redefinindo o atributo
-
Método
chat():- Concatena o histórico da conversa com a nova mensagem do usuário.
- Envia o prompt completo para a API Gemini e obtém a resposta.
- Atualiza o histórico da conversa com a nova mensagem e a resposta da IA.
- Salva a mensagem e a resposta no gerenciador de conversas.
-
Método
getConversationHistory():- Verifica se o arquivo de histórico existe e está no formato JSON.
- Lê o conteúdo do arquivo e formata as mensagens para exibição.
- Exibe o histórico formatado no console, com cores diferentes para o usuário e a IA.
-
Método
loadConversationHistory():- Converte a string JSON em um objeto e extrai as mensagens.
- Atualiza o histórico da conversa com as mensagens carregadas.
-
Método
clearHistory():- Reseta o histórico da conversa para uma string vazia.
- A classe utiliza
Jansipara adicionar cores ao texto exibido no console. - As mensagens são formatadas utilizando a classe
TextFormatter. - O histórico de conversas é salvo em arquivos JSON na pasta
conversations/.
Esta classe é crucial para gerenciar a interação com o usuário e manter o histórico das conversas organizadas e acessíveis.
A classe ConversationManager é responsável por gerenciar as conversas, incluindo a criação de arquivos de conversa, o armazenamento e recuperação de mensagens, e a listagem de conversas existentes.
-
CONVERSATION_FOLDER: Constante que representa o diretório onde os arquivos de conversa são armazenados. -
formatter: Instância deDateTimeFormatterusada para formatar timestamps das mensagens.
-
ConversationManager()- Descrição: Construtor da classe que verifica se o diretório de conversas existe e o cria se não estiver presente.
-
String generateHash(String input)- Descrição: Gera um hash MD5 a partir de uma string de entrada.
-
Parâmetros:
-
input: A string a ser convertida em hash.
-
-
Retorno: O hash MD5 da string de entrada como uma
String. -
Exceções:
-
NoSuchAlgorithmException: Se o algoritmo MD5 não estiver disponível.
-
-
void saveMessage(String hash, String userMessage, String botMessage, LocalDateTime userTime, LocalDateTime botTime)- Descrição: Salva uma mensagem do usuário e a resposta da IA em um arquivo JSON correspondente ao hash da conversa.
-
Parâmetros:
-
hash: Identificação única da conversa. -
userMessage: Mensagem enviada pelo usuário. -
botMessage: Resposta da IA. -
userTime: Timestamp da mensagem do usuário. -
botTime: Timestamp da resposta da IA.
-
-
Exceções:
-
IOException: Se ocorrer um erro ao escrever o arquivo.
-
-
List<String> listConversations()-
Descrição: Lista todos os arquivos de conversa no diretório
conversations/. -
Retorno: Uma lista de nomes de arquivos de conversa (nomes dos arquivos com extensão
.json).
-
Descrição: Lista todos os arquivos de conversa no diretório
-
String loadConversation(String hash)- Descrição: Carrega o conteúdo de uma conversa a partir de um arquivo JSON baseado no hash fornecido.
-
Parâmetros:
-
hash: Identificação única da conversa.
-
-
Retorno: O conteúdo do arquivo JSON como uma
String. -
Exceções:
-
FileNotFoundException: Se o arquivo de conversa não for encontrado. -
IOException: Se ocorrer um erro ao ler o arquivo.
-
-
Método
generateHash():- Converte a string de entrada em bytes e gera um hash MD5.
- Retorna o hash como uma string hexadecimal.
-
Método
saveMessage():- Verifica se o arquivo de conversa já existe. Se existir, lê seu conteúdo e adiciona as novas mensagens. Se não existir, cria um novo arquivo JSON.
- Adiciona as mensagens do usuário e da IA ao arquivo JSON com timestamps formatados.
- Salva o conteúdo atualizado no arquivo.
-
Método
listConversations():- Lista todos os arquivos com a extensão
.jsonno diretório de conversas. - Retorna a lista de nomes de arquivos.
- Lista todos os arquivos com a extensão
-
Método
loadConversation():- Lê o conteúdo do arquivo JSON correspondente ao hash fornecido.
- Retorna o conteúdo do arquivo como uma string.
- A classe utiliza JSON para armazenar e recuperar mensagens de conversas.
- O diretório
conversations/é criado se não existir no momento da inicialização da classe. - O formato JSON dos arquivos de conversa inclui informações como hash, título e uma lista de mensagens com timestamps.
Esta classe é essencial para o gerenciamento eficiente das conversas e para garantir que o histórico de conversas seja armazenado e acessado corretamente.
A classe JsonUtil fornece métodos utilitários para criar e processar objetos JSON usados na comunicação com a API Gemini.
-
String createJsonRequestBody(String prompt)- Descrição: Cria um corpo de requisição JSON para enviar para a API Gemini com base no prompt fornecido.
-
Parâmetros:
-
prompt: Texto que será enviado como entrada para a API.
-
-
Retorno: O corpo da requisição JSON como uma
String. -
Funcionamento:
- Cria um objeto JSON que contém o prompt formatado para a API.
- Adiciona configurações de segurança para filtrar conteúdos potencialmente prejudiciais.
- Define configurações de geração como
temperatureetopP.
-
Exemplo:
{ "contents": [ { "role": "user", "parts": [ { "text": "Seu prompt aqui" } ] } ], "safetySettings": [ { "category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_ONLY_HIGH" }, ... ], "generationConfig": { "temperature": 0.5, "topP": 0.99 } }
-
String parseGeminiResponse(String jsonResponse)- Descrição: Processa a resposta JSON recebida da API Gemini e extrai o texto relevante da resposta.
-
Parâmetros:
-
jsonResponse: Resposta JSON recebida da API.
-
- Retorno: Texto extraído da resposta JSON.
-
Exceções:
-
JSONException: Se a resposta JSON estiver vazia, nula ou não contiver as chaves esperadas.
-
-
Funcionamento:
- Verifica se a resposta contém a chave
candidates. - Obtém o primeiro candidato e verifica se contém o campo
content. - Extraí o texto da primeira parte do conteúdo.
- Verifica se a resposta contém a chave
-
Exemplo:
{ "candidates": [ { "content": { "parts": [ { "text": "Resposta da IA aqui" } ] } } ] }
-
void addSafetySetting(JSONArray array, String category, String threshold)- Descrição: Adiciona um objeto de configuração de segurança a um array JSON.
-
Parâmetros:
-
array: O array JSON ao qual o objeto de configuração será adicionado. -
category: Categoria da configuração de segurança. -
threshold: Limite da configuração de segurança.
-
-
Funcionamento:
- Cria um objeto JSON com a categoria e o limite fornecidos.
- Adiciona o objeto ao array JSON.
-
Configurações de Segurança: A classe
JsonUtilinclui configurações de segurança para evitar conteúdo prejudicial, como discurso de ódio e conteúdo sexual explícito. -
Formatação da Resposta: O método
parseGeminiResponseassume que a resposta da API está bem formatada e segue a estrutura esperada. Erros são lançados se as chaves esperadas não estiverem presentes.
Esta classe é essencial para a criação de requisições e o processamento de respostas da API Gemini, garantindo que a comunicação com a API seja adequada e que as respostas sejam interpretadas corretamente.
A classe TextFormatter fornece funcionalidades para formatar textos com base em regras específicas, como a aplicação de negrito a trechos de texto.
-
String formatText(String input)-
Descrição: Formata o texto de entrada aplicando negrito a trechos delimitados por
**. -
Parâmetros:
-
input: Texto a ser formatado.
-
-
Retorno: Texto formatado com negrito aplicado às partes que estavam delimitadas por
**. -
Funcionamento:
- Utiliza expressões regulares para identificar trechos de texto delimitados por
**. - Substitui esses trechos por uma versão formatada em negrito usando a biblioteca Jansi.
- Utiliza expressões regulares para identificar trechos de texto delimitados por
-
Exemplo:
-
Entrada:
Olá, **mundo!** Como **você** está? -
Saída:
Olá, mundo! Como você está?
-
-
Descrição: Formata o texto de entrada aplicando negrito a trechos delimitados por
-
Expressões Regulares: A classe usa expressões regulares para localizar padrões de texto que precisam ser formatados. No exemplo fornecido, o padrão
\\*\\*(.*?)\\*\\*identifica texto entre dois pares de asteriscos. - Biblioteca Jansi: A formatação em negrito é realizada usando a biblioteca Jansi, que permite aplicar estilos de texto em ambientes de terminal.
A classe TextFormatter é útil para aplicar formatação específica a textos antes de exibi-los no console, melhorando a legibilidade e a apresentação das mensagens.
A classe MenuManager gerencia a exibição do menu principal da aplicação AskConsole, permitindo ao usuário iniciar um chat, continuar uma conversa, importar uma chave API, obter informações sobre o projeto ou sair do aplicativo.
-
private ConsoleService consoleService: Serviço para gerenciar a interação com o console e a comunicação com a API. -
private final ApiKeyManager apiKeyManager: Gerenciador de chave API. -
private final ConversationManager conversationManager: Gerenciador de conversas, responsável por listar e manter histórico de conversas. -
DateTimeFormatter formatter: Formata a data e hora.
-
public MenuManager(ConsoleService consoleService, ApiKeyManager apiKeyManager)-
Descrição: Inicializa o
MenuManagercom um serviço de console e um gerenciador de chave API. -
Parâmetros:
-
consoleService: Instância deConsoleService. -
apiKeyManager: Instância deApiKeyManager.
-
-
Descrição: Inicializa o
-
public void displayMenu()- Descrição: Exibe o menu principal e processa a escolha do usuário. Dependendo da escolha, chama métodos para iniciar um chat, continuar uma conversa, importar uma chave API, mostrar informações sobre o projeto ou sair.
-
Exceções Lançadas:
-
IOException: Se ocorrer um erro na leitura de entrada ou na escrita no console.
-
-
private boolean isValidInput(String input)- Descrição: Verifica se a entrada do usuário é um número entre 0 e 4.
-
Parâmetros:
-
input: Entrada do usuário comoString.
-
-
Retorno:
truese a entrada for válida,falsecaso contrário.
-
private void startNewChat()-
Descrição: Inicia uma nova conversa gerando um hash e criando uma instância de
ChatHandlerpara gerenciar a conversa. -
Exceções Lançadas:
-
IOException: Se ocorrer um erro ao iniciar o chat. -
NoSuchAlgorithmException: Se ocorrer um erro ao gerar o hash.
-
-
Descrição: Inicia uma nova conversa gerando um hash e criando uma instância de
-
private void continueChat()- Descrição: Exibe uma lista de conversas salvas e permite ao usuário selecionar uma para continuar. Em seguida, carrega o histórico da conversa selecionada e inicia um chat com ela.
-
Exceções Lançadas:
-
IOException: Se ocorrer um erro na leitura ou escrita no console. -
NumberFormatException: Se a entrada do usuário não for um número válido. -
JSONException: Se ocorrer um erro ao processar JSON.
-
-
private void showAbout()-
Descrição: Exibe informações sobre o projeto
AskConsole, incluindo uma breve descrição e detalhes do desenvolvedor. -
Exceções Lançadas:
-
IOException: Se ocorrer um erro na leitura da entrada do usuário.
-
-
Descrição: Exibe informações sobre o projeto
-
private void importApiKey()- Descrição: Permite ao usuário importar uma chave API e atualiza o status com base no sucesso ou falha da operação.
-
Exceções Lançadas:
-
IOException: Se ocorrer um erro na leitura da entrada do usuário.
-
- AnsiConsole: Usado para estilizar a saída no console com cores e formatos especiais.
- ConsoleClear: Usado para limpar a tela do console antes de exibir o menu.
- ChatHandler: Classe responsável por iniciar e gerenciar uma conversa.
- ApiKeyManager: Classe responsável por gerenciar e validar a chave API.
- ConversationManager: Classe responsável por listar e gerenciar conversas salvas.
A classe MenuManager fornece uma interface de usuário interativa para o AskConsole, permitindo gerenciar conversas e chaves API de forma eficiente e amigável.
A classe ChatHandler gerencia a interação com o usuário durante uma sessão de chat, processando mensagens e exibindo respostas.
-
private final ConsoleService consoleService: Serviço para gerenciar a comunicação com a API e o histórico das conversas. -
private final BufferedReader reader: Leitor para capturar a entrada do usuário a partir do console.
-
public ChatHandler(ConsoleService consoleService)-
Descrição: Inicializa o
ChatHandlercom um serviço de console fornecido. -
Parâmetros:
-
consoleService: Instância deConsoleService.
-
-
Descrição: Inicializa o
-
public void startChat(String hash) throws IOException- Descrição: Inicia uma nova sessão de chat ou continua uma conversa existente com base no histórico associado ao hash fornecido.
-
Parâmetros:
-
hash: Identificador da conversa a ser carregada.
-
-
Exceções Lançadas:
-
IOException: Se ocorrer um erro ao ler a entrada do usuário.
-
-
Comportamento:
- Configura o ambiente de chat, exibe o histórico da conversa se disponível, e inicia um loop para processar as mensagens do usuário.
- Exibe respostas do sistema formatadas e gerencia a saída para o console.
- Exibe uma mensagem de boas-vindas e o histórico da conversa, se disponível.
- Processa entradas do usuário e exibe as respostas do sistema formatadas.
- Permite sair do chat e retornar ao menu principal quando o usuário digita "/sair".
- AnsiConsole: Utilizado para aplicar cores e estilos à saída no console.
- ConsoleClear: Utilizado para limpar o console antes de iniciar uma nova sessão de chat.
- TextFormatter: Utilizado para formatar as respostas recebidas do sistema.
- ApiKeyManager: Pode ser utilizado para gerenciar e validar chaves API, embora não seja diretamente manipulado dentro desta classe.
A classe ChatHandler proporciona uma interface interativa para o usuário, gerenciando sessões de chat e formatando a saída para uma experiência de conversa fluida.
Criado por Jorge Luis - ctt.jluis@gmail.com
Todos os direitos reservados - Distribuído sob a licença MIT. Veja LICENSE para mais informações.