Class: Bddgenx::IA::MicrosoftCopilotCliente
- Inherits:
-
Object
- Object
- Bddgenx::IA::MicrosoftCopilotCliente
- Defined in:
- lib/bddgenx/ia/microsoft_copilot_cliente.rb
Overview
Cliente para interação com a API Microsoft Copilot para geração de conteúdo, aqui usado para criar cenários BDD no formato Gherkin.
Constant Summary collapse
- MICROSOFT_COPILOT_API_URL =
ENV['MICROSOFT_COPILOT_API_URL']
Class Method Summary collapse
-
.gerar_cenarios(historia, idioma = 'pt') ⇒ String?
Gera cenários BDD baseados em uma história, solicitando à API Microsoft Copilot o retorno no formato Gherkin com palavras-chave no idioma desejado.
Class Method Details
.gerar_cenarios(historia, idioma = 'pt') ⇒ String?
Gera cenários BDD baseados em uma história, solicitando à API Microsoft Copilot o retorno no formato Gherkin com palavras-chave no idioma desejado.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/bddgenx/ia/microsoft_copilot_cliente.rb', line 18 def self.gerar_cenarios(historia, idioma = 'pt') api_key = Bddgenx.configuration.microsoft_copilot_api_key # para Copilot # Define as palavras-chave para os cenários BDD keywords_pt = { feature: "Funcionalidade", scenario: "Cenário", scenario_outline: "Esquema do Cenário", examples: "Exemplos", given: "Dado", when: "Quando", then: "Então", and: "E" } keywords_en = { feature: "Feature", scenario: "Scenario", scenario_outline: "Scenario Outline", examples: "Examples", given: "Given", when: "When", then: "Then", and: "And" } # Escolhe o conjunto de palavras-chave conforme o idioma keywords = idioma == 'en' ? keywords_en : keywords_pt # Prompt base que instrui a IA a gerar cenários Gherkin no idioma indicado prompt_base = <<~PROMPT Gere cenários BDD no formato Gherkin, utilizando as palavras-chave estruturais no idioma "#{idioma}": Feature: #{keywords[:feature]} Scenario: #{keywords[:scenario]} Scenario Outline: #{keywords[:scenario_outline]} Examples: #{keywords[:examples]} Given: #{keywords[:given]} When: #{keywords[:when]} Then: #{keywords[:then]} And: #{keywords[:and]} Instruções: - Todos os textos dos passos devem ser escritos em **português**. - Use as palavras-chave Gherkin no idioma especificado ("#{idioma}"). - Gere **vários cenários**, incluindo positivos e negativos. - Use `Scenario Outline` e `Examples` sempre que houver valores variáveis. - Mantenha os parâmetros como `<email>`, `<senha>` e outros entre colchetes angulares, exatamente como aparecem. - Se a história fornecer contexto (ex: `[CONTEXT]` ou "Dado que..."), utilize-o como base para os cenários. - Se não houver contexto explícito, **crie um coerente** baseado na história. - A primeira linha do resultado deve conter obrigatoriamente `# language: #{idioma}`. - Evite passos vagos ou genéricos. Use ações claras e específicas. - Gere apenas o conteúdo da feature, sem explicações adicionais. História fornecida: #{historia} PROMPT # Verifica se a chave de API foi configurada corretamente unless api_key warn "❌ API Key do Microsoft Copilot não encontrada no .env (MICROSOFT_COPILOT_API_KEY)" return nil end # Define o endpoint da API Microsoft Copilot uri = URI("#{MICROSOFT_COPILOT_API_URL}?key=#{api_key}") # Estrutura do corpo da requisição para a API Microsoft Copilot request_body = { contents: [ { model: "o4-mini", role: "user", parts: [{ text: prompt_base }] } ] } # Executa requisição POST para a API Microsoft Copilot response = Net::HTTP.post(uri, request_body.to_json, { "Content-Type" => "application/json" }) # Verifica se a resposta foi bem-sucedida if response.is_a?(Net::HTTPSuccess) json = JSON.parse(response.body) unless json["choices"]&.is_a?(Array) && json["choices"].any? warn "❌ Resposta da IA sem candidatos válidos:" warn JSON.pretty_generate(json) return nil end # Recupera o conteúdo gerado pela IA texto_ia = json["choices"].first.dig("message", "content") if texto_ia # Limpeza e sanitização do texto para manter padrão Gherkin texto_limpo = Utils.limpar(texto_ia) Utils.remover_steps_duplicados(texto_ia, idioma) # Ajuste da diretiva de idioma na saída gerada texto_limpo.sub!(/^# language: .*/, "# language: #{idioma}") texto_limpo.prepend("# language: #{idioma}\n") unless texto_limpo.start_with?("# language:") return texto_limpo else warn I18n.t('errors.ia_no_content') warn JSON.pretty_generate(json) return nil end else warn I18n.t('errors.microsoft_copilot_error', code: response.code, body: response.body) return nil end end |