Skip to content

Classes e métodos

Jorge Luis | Developer Backend edited this page Sep 14, 2024 · 15 revisions

Arquitetura dos 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;
Loading

Classe Main

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.

Descrição dos Componentes

Objetos e Inicialização

  1. 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 de ApiKeyManager para verificar a presença da chave API e fornecer a chave quando disponível.
  2. 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 de GeminiApiClient é criada com a chave API para comunicação com a API Gemini.
  3. 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 de ConsoleService. Se a chave API estiver disponível, o ConsoleService é configurado com o GeminiApiClient. Caso contrário, é inicializado sem o cliente da API.
  4. MenuManager

    • Descrição: Gerencia a exibição e interação do menu principal da aplicação.
    • Função no main: Cria uma instância de MenuManager com o ConsoleService e ApiKeyManager e chama o método para exibir o menu.

Fluxo de Execução

  1. Inicialização: O método main começa criando uma instância de ApiKeyManager para verificar a presença da chave API.
  2. Configuração do Cliente da API: Se a chave API estiver disponível, uma instância de GeminiApiClient é criada.
  3. Configuração do Serviço do Console: O ConsoleService é inicializado com o GeminiApiClient se a chave API estiver presente; caso contrário, é inicializado sem o cliente da API.
  4. 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.

Classe ApiKeyManager

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.

Descrição dos Componentes

Atributos

  • 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.

Construtor

  • ApiKeyManager()
    • Descrição: Construtor da classe que chama o método loadApiKey() para carregar a chave API a partir do arquivo de configuração.

Métodos Públicos

  • boolean isApiKeyPresent()

    • Descrição: Verifica se a chave API está presente e não é vazia.
    • Retorno: true se a chave API estiver presente, false caso 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 .ini selecionado via um seletor de arquivos (JFileChooser). Verifica a validade da chave e a salva se for válida.
    • Processo:
      1. Exibe um seletor de arquivos para o usuário escolher um arquivo .ini.
      2. Lê o conteúdo do arquivo e extrai a chave API.
      3. Verifica a validade da chave API usando o método testApiKey().
      4. Se a chave for válida, a chave é salva e a mensagem de sucesso é exibida; caso contrário, uma mensagem de erro é exibida.

Métodos Privados

  • 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: true se a chave API for válida e a resposta não estiver vazia, false caso contrário.
  • void loadApiKey()

    • Descrição: Carrega a chave API do arquivo api_key.ini e 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:
      1. Verifica se o arquivo api_key.ini existe e não está vazio.
      2. Lê o conteúdo do arquivo e extrai a chave API.
      3. Verifica a validade da chave API usando o método testApiKey().
      4. Exibe mensagens apropriadas com base na validade da chave.
  • 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.

Fluxo de Execução

  1. Inicialização: O construtor da classe carrega a chave API existente (se houver) ao criar uma instância de ApiKeyManager.
  2. Importação da Chave: O método importApiKey() permite ao usuário importar uma nova chave API e a valida se necessário.
  3. Validação e Carregamento: O método loadApiKey() carrega e valida a chave API a partir do arquivo de configuração.
  4. 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.

Classe GeminiApiClient

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.

Descrição dos Componentes

Atributos

  • 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.

Construtor

  • 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.

Métodos Públicos

  • 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: true se a chave API for válida, false caso 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.

Fluxo de Execução

  1. Verificação da Chave API: O método sendRequest() verifica se a chave API é válida antes de prosseguir com a solicitação.
  2. Criação do Corpo da Requisição: O método sendRequest() utiliza JsonUtil.createJsonRequestBody(prompt) para criar o corpo JSON da solicitação.
  3. 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.
  4. 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 IOException com a mensagem de erro.

Notas

  • 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 classe JsonUtil.
  • 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.

Classe ConsoleService

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.

Descrição dos Componentes

Atributos

  • geminiApiClient: Instância da classe GeminiApiClient utilizada para enviar solicitações para a API Gemini.
  • conversationManager: Instância da classe ConversationManager responsá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.

Construtor

  • 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 do GeminiApiClient.
      • conversationManager: Instância do ConversationManager.
      • hash: Identificação única da conversa.

Métodos Públicos

  • 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.
  • 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.
  • void clearHistory()

    • Descrição: Limpa o histórico da conversa atual, redefinindo o atributo conversationHistory para uma string vazia.

Fluxo de Execução

  1. 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.
  2. 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.
  3. Método loadConversationHistory():

    • Converte a string JSON em um objeto e extrai as mensagens.
    • Atualiza o histórico da conversa com as mensagens carregadas.
  4. Método clearHistory():

    • Reseta o histórico da conversa para uma string vazia.

Notas

  • A classe utiliza Jansi para 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.

Classe ConversationManager

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.

Descrição dos Componentes

Atributos

  • CONVERSATION_FOLDER: Constante que representa o diretório onde os arquivos de conversa são armazenados.
  • formatter: Instância de DateTimeFormatter usada para formatar timestamps das mensagens.

Construtor

  • ConversationManager()
    • Descrição: Construtor da classe que verifica se o diretório de conversas existe e o cria se não estiver presente.

Métodos Públicos

  • 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).
  • 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.

Fluxo de Execução

  1. Método generateHash():

    • Converte a string de entrada em bytes e gera um hash MD5.
    • Retorna o hash como uma string hexadecimal.
  2. 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.
  3. Método listConversations():

    • Lista todos os arquivos com a extensão .json no diretório de conversas.
    • Retorna a lista de nomes de arquivos.
  4. Método loadConversation():

    • Lê o conteúdo do arquivo JSON correspondente ao hash fornecido.
    • Retorna o conteúdo do arquivo como uma string.

Notas

  • 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.

Classe JsonUtil

A classe JsonUtil fornece métodos utilitários para criar e processar objetos JSON usados na comunicação com a API Gemini.

Descrição dos Componentes

Métodos Públicos

  • 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 temperature e topP.
    • 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.
    • Exemplo:
      {
        "candidates": [
          {
            "content": {
              "parts": [
                {
                  "text": "Resposta da IA aqui"
                }
              ]
            }
          }
        ]
      }

Métodos Privados

  • 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.

Notas

  • Configurações de Segurança: A classe JsonUtil inclui 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 parseGeminiResponse assume 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.

Classe TextFormatter

A classe TextFormatter fornece funcionalidades para formatar textos com base em regras específicas, como a aplicação de negrito a trechos de texto.

Descrição dos Componentes

Métodos Públicos

  • 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.
    • Exemplo:
      • Entrada:

        Olá, **mundo!** Como **você** está?
        
      • Saída:

        Olá, mundo! Como você está?

Notas

  • 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.

Classe MenuManager

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.

Descrição dos Componentes

Atributos

  • 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.

Construtor

  • public MenuManager(ConsoleService consoleService, ApiKeyManager apiKeyManager)
    • Descrição: Inicializa o MenuManager com um serviço de console e um gerenciador de chave API.
    • Parâmetros:
      • consoleService: Instância de ConsoleService.
      • apiKeyManager: Instância de ApiKeyManager.

Métodos Públicos

  • 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.

Métodos Privados

  • 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 como String.
    • Retorno: true se a entrada for válida, false caso contrário.
  • private void startNewChat()

    • Descrição: Inicia uma nova conversa gerando um hash e criando uma instância de ChatHandler para 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.
  • 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.
  • 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.

Notas

  • 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.

Classe ChatHandler

A classe ChatHandler gerencia a interação com o usuário durante uma sessão de chat, processando mensagens e exibindo respostas.

Descrição dos Componentes

Atributos

  • 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.

Construtor

  • public ChatHandler(ConsoleService consoleService)
    • Descrição: Inicializa o ChatHandler com um serviço de console fornecido.
    • Parâmetros:
      • consoleService: Instância de ConsoleService.

Métodos Públicos

  • 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.

Comportamento

  • 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".

Notas

  • 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.