Invocar os modelos do Gemini

Este documento descreve como invocar os modelos do Gemini para gerar respostas para entrada de texto e multimodais usando o SDK da Vertex AI para ABAP. Os modelos Gemini podem aceitar vários modos de entrada, incluindo texto, imagem, vídeo, áudio e documentos. É possível usar os modelos do Gemini para casos de uso como estes:

  • Resumir texto em formato livre
  • Como descrever ou interpretar recursos de mídia
  • Como traduzir entre idiomas

O uso de modelos generativos para criar recursos centrados em IA não exige experiência em aprendizado de máquina (ML). Você não precisa coletar um grande conjunto de dados ou treinar um modelo. Para iniciar seu primeiro programa, basta descrever o que você quer que o modelo faça em algumas frases. O SDK da Vertex AI para ABAP oferece classes e métodos ABAP para acessar os modelos Gemini no seu ambiente SAP. Para começar, confira estes exemplos de código.

Antes de começar

Antes de usar o SDK da Vertex AI para ABAP com os modelos Gemini, verifique se você ou seus administradores concluíram os seguintes pré-requisitos:

Enviar solicitação para o Gemini

Esta seção explica como enviar solicitações para modelos do Gemini usando a API Vertex AI com o SDK da Vertex AI para ABAP.

Criar a classe de invocação multimodal do Gemini

Para invocar os modelos multimodais e de texto do Gemini usando comandos de texto ou multimodais, use a classe /GOOG/CL_GENERATIVE_MODEL. Você instancia a classe transmitindo a chave de modelo configurada nos parâmetros de geração de modelos.

No local ou qualquer edição na nuvem

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Edição do SAP BTP

DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

Substitua MODEL_KEY pelo nome da chave do modelo, que é configurado nos parâmetros de geração de modelo.

Gerar conteúdo com um comando

Para gerar conteúdo fornecendo um comando de texto ao modelo, use o método GENERATE_CONTENT.

No local ou qualquer edição na nuvem

lo_model->generate_content( 'PROMPT' ).

Edição do SAP BTP

lo_model->generate_content( 'PROMPT' ).

Substitua PROMPT pelo comando de texto.

Fornecer instruções do sistema ao modelo

Para transmitir instruções do sistema com base em texto para o modelo, use o método SET_SYSTEM_INSTRUCTIONS.

No local ou qualquer edição na nuvem

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Edição do SAP BTP

lo_model->set_system_instructions( 'SYSTEM_INSTRUCTIONS' ).

Substitua SYSTEM_INSTRUCTIONS pelas instruções do sistema para o modelo.

Adicionar configurações de segurança

Para adicionar configurações de segurança ao modelo para gerar respostas, use o método ADD_SAFETY_SETTINGS. Esse recurso é usado para impor diretrizes de segurança ao modelo para bloquear conteúdo inseguro.

No local ou qualquer edição na nuvem

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                            iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                            iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

Edição do SAP BTP

lo_model->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                            iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                            iv_harm_block_method    = 'HARM_BLOCK_METHOD' ).

Substitua:

Com cada chamada de método, o método ADD_SAFETY_SETTINGS adiciona as configurações de segurança especificadas à entrada do modelo.

Definir a configuração de geração do modelo

Você mantém a configuração de geração dos modelos na tabela /GOOG/AI_CONFIG. Para substituir a configuração de geração de uma chamada específica, use o método SET_GENERATION_CONFIG. Se o parâmetro de importação de uma propriedade de geração estiver definido, o valor do parâmetro transmitido será aplicado.

No local ou qualquer edição na nuvem

lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
                                 iv_temperature        = 'TEMPERATURE'
                                 iv_top_p              = 'TOP_P'
                                 iv_top_k              = 'TOP_K'
                                 iv_candidate_count    = 'CANDIDATE_COUNT'
                                 iv_max_output_tokens  = 'MAX_OUTPUT_TOKENS'
                                 iv_presence_penalty   = 'PRESENCE_PENALTY'
                                 iv_frequency_penalty  = 'FREQUENCY_PENALTY' ).

Edição do SAP BTP

lo_model->set_generation_config( iv_response_mime_type = 'RESPONSE_MIME_TYPE'
                                 iv_temperature        = 'TEMPERATURE'
                                 iv_top_p              = 'TOP_P'
                                 iv_top_k              = 'TOP_K'
                                 iv_candidate_count    = 'CANDIDATE_COUNT'
                                 iv_max_output_tokens  = 'MAX_OUTPUT_TOKENS'
                                 iv_presence_penalty   = 'PRESENCE_PENALTY'
                                 iv_frequency_penalty  = 'FREQUENCY_PENALTY' ).

Substitua:

  • RESPONSE_MIME_TYPE: tipo MIME da resposta para o modelo.
  • TEMPERATURE: temperatura de aleatoriedade.
  • TOP_P: amostragem top-P.
  • TOP_K: amostragem Top-K.
  • CANDIDATE_COUNT: número de candidatos a serem gerados.
  • MAX_OUTPUT_TOKENS: número máximo de tokens de saída por mensagem
  • PRESENCE_PENALTY: penalidades positivas.
  • FREQUENCY_PENALTY: penalidades de frequência.

Para mais informações sobre esses parâmetros, consulte Configurar parâmetros de geração de modelos.

Transmitir entrada multimodal para o modelo

É possível invocar os modelos Gemini usando entrada multimodal, que pode ser texto, imagem, vídeo, documentos ou uma combinação deles. É possível transmitir a entrada como dados brutos ou fornecendo o URI do Cloud Storage dos objetos de arquivo.

Definir dados brutos

Para fornecer os dados brutos de um arquivo como entrada para o modelo, junto com o tipo MIME, use o método SET_INLINE_DATA. Para considerar apenas uma parte específica de um vídeo, é possível definir o horário de início e término usando os parâmetros de importação opcionais IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET, respectivamente.

No local ou qualquer edição na nuvem

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

Edição do SAP BTP

lo_model->set_inline_data( iv_mime_type = 'MIME_TYPE'
                           iv_data      = 'RAW_DATA' ).

Substitua:

  • MIME_TYPE: o tipo MIME padrão IANA dos dados brutos. Por padrão, o tipo MIME é definido como application/pdf.
  • RAW_DATA: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a serem incluídos inline no comando.

Para limpar os dados brutos dos arquivos da entrada do modelo com a mesma instância da classe /GOOG/CL_GENERATIVE_MODEL, use o método CLEAR_INLINE_DATA.

No local ou qualquer edição na nuvem

lo_model->clear_inline_data( ).

Edição do SAP BTP

lo_model->clear_inline_data( ).

Definir objetos do Cloud Storage

Para fornecer o URI de um objeto de arquivo armazenado em um bucket do Cloud Storage como entrada para o modelo, junto com o tipo MIME, use o método SET_FILE_DATA. Para considerar apenas uma parte específica de um vídeo, é possível definir o horário de início e término usando os parâmetros de importação opcionais IV_VIDEO_START_OFFSET e IV_VIDEO_END_OFFSET, respectivamente.

No local ou qualquer edição na nuvem

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

Edição do SAP BTP

lo_model->set_file_data( iv_mime_type = 'MIME_TYPE'
                         iv_file_uri  = 'FILE_URI' ).

Substitua:

  • MIME_TYPE: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido como application/pdf.
  • FILE_URI: o URI do arquivo armazenado em um bucket do Cloud Storage.

Se você quiser transmitir todos os arquivos presentes em um bucket do Cloud Storage como entrada para o modelo, use o método SET_FILES_FROM_GCS para especificar o nome do bucket de destino do Cloud Storage.

No local ou qualquer edição na nuvem

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

Edição do SAP BTP

lo_model->set_files_from_gcs( iv_storage_bucket_name = 'STORAGE_BUCKET_NAME').

Substitua STORAGE_BUCKET_NAME pelo nome do bucket do Cloud Storage que contém os arquivos.

Se você tiver uma chave de cliente separada para invocar a API Cloud Storage pelo ABAP SDK for Google Cloud, transmita o nome da chave de cliente no parâmetro de importação IV_KEY_NAME.

Para limpar os objetos definidos por URIs do Cloud Storage da entrada do modelo com a mesma instância da classe /GOOG/CL_GENERATIVE_MODEL, use o método CLEAR_FILE_DATA.

No local ou qualquer edição na nuvem

lo_model->clear_file_data( ).

Edição do SAP BTP

lo_model->clear_file_data( ).

Definir o tipo MIME da resposta

Para definir o tipo MIME da resposta que o modelo responde, use o método SET_RESPONSE_MIME_TYPE. Se não for definido, o modelo vai usar text/plain como o tipo MIME da resposta por padrão.

No local ou qualquer edição na nuvem

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

Edição do SAP BTP

lo_model->set_response_mime_type( iv_mime_type = 'RESPONSE_MIME_TYPE' ).

Substitua RESPONSE_MIME_TYPE pelo tipo MIME da resposta do conteúdo gerado.

Contar o número de tokens em um comando de texto

Para contar o número de tokens em um comando de texto antes de invocar o modelo com o comando, use o método COUNT_TOKENS.

No local ou qualquer edição na nuvem

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                               )->get_total_tokens( ).

DATA(lv_total_billable_characters) = lo_model->count_tokens(
                                                 iv_prompt_text         = 'PROMPT'
                                                 iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                                            )->get_total_billable_characters( ).

Edição do SAP BTP

DATA(lv_total_tokens) = lo_model->count_tokens( iv_prompt_text         = 'PROMPT'
                                                iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                               )->get_total_tokens( ).

DATA(lv_total_billable_characters) = lo_model->count_tokens(
                                                 iv_prompt_text         = 'PROMPT'
                                                 iv_system_instructions = 'SYSTEM_INSTRUCTIONS'
                                            )->get_total_billable_characters( ).

Substitua:

Receber resposta do Gemini

Para receber respostas processadas do modelo e apresentá-las de uma maneira significativa para os desenvolvedores ABAP, o SDK fornece a classe /GOOG/CL_MODEL_RESPONSE.

A resposta capturada pela classe /GOOG/CL_MODEL_RESPONSE é vinculada às solicitações feitas pelos métodos da classe /GOOG/CL_GENERATIVE_MODEL para que você possa acessar diretamente a resposta em uma única instrução sem precisar de variáveis para armazenar os resultados intermediários.

Receber resposta de texto

Para receber uma resposta de texto do modelo, use o método GET_TEXT.

No local ou qualquer edição na nuvem

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

Edição do SAP BTP

DATA(lv_response_text) = lo_model->generate_content( 'PROMPT'
                                )->get_text( ).

Substitua PROMPT pelo comando de texto.

Receber classificação de segurança

Para receber uma lista de classificações sobre a segurança da resposta do modelo, use o método GET_SAFETY_RATING.

No local ou qualquer edição na nuvem

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

Edição do SAP BTP

DATA(lt_safety_ratings) = lo_model->generate_content( 'PROMPT'
                                 )->get_safety_rating( ).

Substitua PROMPT pelo comando de texto.

Receber o número de tokens no comando de solicitação

Para receber o número de tokens na solicitação de entrada para o modelo, use o método GET_PROMPT_TOKEN_COUNT.

No local ou qualquer edição na nuvem

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

Edição do SAP BTP

DATA(lv_prompt_token_count) = lo_model->generate_content( 'PROMPT'
                                     )->get_prompt_token_count( ).

Substitua PROMPT pelo comando de texto.

Conferir o número de tokens na resposta do modelo

Para receber o número de tokens na resposta do modelo, use o método GET_CANDIDATES_TOKEN_COUNT.

No local ou qualquer edição na nuvem

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

Edição do SAP BTP

DATA(lv_candidates_token_count) = lo_model->generate_content( 'PROMPT'
                                         )->get_candidates_token_count( ).

Substitua PROMPT pelo comando de texto.

Receber o motivo do bloqueio

Para receber o motivo pelo qual o modelo bloqueou a geração de respostas, use o método GET_BLOCK_REASON.

No local ou qualquer edição na nuvem

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).

Edição do SAP BTP

DATA(lv_block_reason) = lo_model->generate_content( 'PROMPT'
                               )->get_block_reason( ).
`` `

Substitua PROMPT pelo comando de texto.

Receber a mensagem do motivo do bloqueio

Para receber uma mensagem de motivo legível para bloquear a geração de respostas pelo modelo, use o método GET_BLOCK_REASON_MESSAGE.

No local ou qualquer edição na nuvem

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

Edição do SAP BTP

DATA(lv_block_reason_message) = lo_model->generate_content( 'PROMPT'
                                       )->get_block_reason_message( ).

Substitua PROMPT pelo comando de texto.

Amostras de código

Os exemplos de código abaixo demonstram como invocar os modelos Gemini para gerar respostas para diferentes tipos de entrada.

Geração baseada em texto

O exemplo de código abaixo mostra como gerar uma resposta de um comando de texto com uma instrução do sistema. A instrução do sistema é opcional e pode ser transmitida com o comando para instruir o modelo a se comportar de uma maneira específica.

Exemplo de código

No local ou qualquer edição na nuvem

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Edição do SAP BTP

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->generate_content( lv_prompt
                               )out->write( lv_response ).
    IF lv_response IS NOT INITIAL.
      out->write( lv_response ).

  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    out->write( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua:

Geração multimodal

O exemplo de código abaixo mostra como gerar uma resposta com base em uma entrada multimodal, como texto e imagem. É possível mencionar o URI do Cloud Storage ou dados de arquivo brutos de uma imagem, vídeo ou documento com um comando de texto. A instrução do sistema é opcional e pode ser transmitida com o comando para instruir o modelo a se comportar de uma maneira específica.

Exemplo de código

No local ou qualquer edição na nuvem

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Edição do SAP BTP

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->generate_content( lv_prompt
                               )out->write( lv_response ).
    IF lv_response IS NOT INITIAL.
      out->write( lv_response ).

  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    out->write( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua:

  • MODEL_KEY: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelos.
  • PROMPT: o prompt de texto.
  • SYSTEM_INSTRUCTIONS: sua instrução do sistema para o modelo.
  • MIME_TYPE: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido como application/pdf.
  • FILE_URI: o URI do arquivo armazenado em um bucket do Cloud Storage.
  • INLINE_DATA: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a serem incluídos inline no comando.

Adicionar configurações de segurança para o modelo

O exemplo de código a seguir mostra como adicionar configurações de segurança para que o modelo gere uma resposta.

Exemplo de código

No local ou qualquer edição na nuvem

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                                                       iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                                                       iv_harm_block_method    = 'HARM_BLOCK_METHOD'
                               )->generate_content( lv_prompt
                               )->get_text( ).
    IF lv_response IS NOT INITIAL.
      cl_demo_output=>display( lv_response ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Edição do SAP BTP

DATA:
  lv_instruction TYPE string,
  lv_prompt      TYPE string.

lv_instruction = 'SYSTEM_INSTRUCTIONS'.
lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_response) = lo_model->set_system_instructions( lv_instruction
                               )->set_file_data( iv_mime_type = 'MIME_TYPE'
                                                 iv_file_uri  = 'FILE_URI'
                               )->set_inline_data( iv_mime_type = 'MIME_TYPE'
                                                   iv_data      = 'INLINE_DATA'
                               )->add_safety_settings( iv_harm_category        = 'HARM_CATEGORY'
                                                       iv_harm_block_threshold = 'HARM_BLOCK_THRESHOLD'
                                                       iv_harm_block_method    = 'HARM_BLOCK_METHOD'
                               )->generate_content( lv_prompt
                               )out->write( lv_response ).
    IF lv_response IS NOT INITIAL.
      out->write( lv_response ).

  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    out->write( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua:

  • MODEL_KEY: o nome da chave do modelo, que é configurado nos parâmetros de geração de modelos.
  • PROMPT: o prompt de texto.
  • SYSTEM_INSTRUCTIONS: sua instrução do sistema para o modelo.
  • MIME_TYPE: o tipo MIME padrão IANA dos dados do arquivo. Por padrão, o tipo MIME é definido como application/pdf.
  • FILE_URI: o URI do arquivo armazenado em um bucket do Cloud Storage.
  • INLINE_DATA: dados brutos codificados em base64 da imagem, do PDF ou do vídeo a ser incluído inline no comando.
  • HARM_CATEGORY: a categoria de dano que você quer aplicar.
  • HARM_BLOCK_THRESHOLD: o nível de limites com base na probabilidade que você quer aplicar.
  • HARM_BLOCK_METHOD: o método de bloqueio de danos que você quer aplicar.

Encontrar o número de tokens e caracteres faturáveis em um comando

Antes de invocar o modelo com uma instrução, verifique o número de tokens na instrução e quantos caracteres faturáveis estão presentes no token para planejar o faturamento do projeto Google Cloud . O exemplo de código abaixo mostra como encontrar esses números e avaliar seu faturamento para a chamada de modelo semelhante.

Exemplo de código

No local ou qualquer edição na nuvem

DATA:
  lv_prompt      TYPE string.

lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
                                   )->get_total_tokens( ).

    DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
                                                )->get_total_billable_characters( ).
    IF lv_total_tokens IS NOT INITIAL.
      cl_demo_output=>display( 'Total Tokens -' && lv_total_tokens ).

    ENDIF.

    IF lv_total_billable_characters IS NOT INITIAL.
      cl_demo_output=>display( 'Total Billable Characters -' && lv_total_billable_characters ).

    ENDIF.
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    cl_demo_output=>display( lo_cx_sdk->get_text( ) ).

ENDTRY.

Edição do SAP BTP

DATA:
  lv_prompt      TYPE string.

lv_prompt      = 'PROMPT'.

TRY.
    DATA(lo_model) = NEW /goog/cl_generative_model( iv_model_key = 'MODEL_KEY' ).

    DATA(lv_total_tokens) = lo_model->count_tokens( lv_prompt
                                   )->get_total_tokens( ).

    DATA(lv_total_billable_characters) = lo_model->count_tokens( lv_prompt
    )out->write( |Total Tokens - { lv_total_tokens }| ).
    IF lv_total_tokens IS NOT INITIAL.
       out->write( |Total Tokens - { lv_total_tokens }| ).

    ENDIF.

    IF lv_total_billable_characters IS NOT INITIAL.
      out->write( |Total Billable Characters - { lv_total_billable_characters }| ).

    out->write( lo_cx_sdk->get_text( ) ).
  CATCH /goog/cx_sdk INTO DATA(lo_cx_sdk).
    out->write( lo_cx_sdk->get_text( ) ).

ENDTRY.

Substitua:

A seguir