in src/zgoog_conversation_agent/zgoog_i_conv_agent_imp.prog.abap [0:0]
METHOD execute.
DATA:
lv_system_instructions TYPE string,
lv_prompt TYPE string,
lt_file_data TYPE gtt_file_data,
lt_text_response TYPE soli_tab,
lo_generative_model TYPE REF TO /goog/cl_generative_model,
lv_response TYPE string,
lv_error TYPE abap_bool,
lo_cx_sdk TYPE REF TO /goog/cx_sdk,
lo_out TYPE REF TO if_demo_output,
lv_msg TYPE string,
lo_response TYPE REF TO /goog/cl_model_response.
FIELD-SYMBOLS:
<ls_text_sysins> TYPE soli,
<ls_text_prompt> TYPE soli,
<ls_file_data> TYPE gty_file_data.
CLEAR lt_file_data.
gr_text_response->delete_text( ).
gr_text_sysins->get_text_as_stream( IMPORTING text = gt_text_sysins
EXCEPTIONS error_cntl_call_method = 1
OTHERS = 3 ).
gr_text_prompt->get_text_as_stream( IMPORTING text = gt_text_prompt
EXCEPTIONS error_cntl_call_method = 1
OTHERS = 3 ).
LOOP AT gt_text_sysins ASSIGNING <ls_text_sysins>.
IF lv_system_instructions IS INITIAL.
lv_system_instructions = <ls_text_sysins>.
ELSE.
CONCATENATE lv_system_instructions <ls_text_sysins> INTO lv_system_instructions
SEPARATED BY space.
ENDIF.
ENDLOOP.
LOOP AT gt_text_prompt ASSIGNING <ls_text_prompt>.
IF lv_prompt IS INITIAL.
lv_prompt = <ls_text_prompt>.
ELSE.
CONCATENATE lv_prompt <ls_text_prompt> INTO lv_prompt
SEPARATED BY space.
ENDIF.
ENDLOOP.
CALL METHOD get_file_data
IMPORTING
ev_error = lv_error
et_file_data = lt_file_data.
IF lv_error = abap_true.
RETURN.
ENDIF.
TRY.
CREATE OBJECT lo_generative_model
EXPORTING
iv_model_key = p_model_key.
IF p_rb2 = 'X'.
LOOP AT lt_file_data ASSIGNING <ls_file_data>.
lo_generative_model->set_inline_data( iv_mime_type = <ls_file_data>-mime_type
iv_data = <ls_file_data>-filedata ).
ENDLOOP.
IF p_gcs IS NOT INITIAL.
IF p_gcs CS 'gs://'.
lo_generative_model->set_file_data( iv_mime_type = p_mime_gcs
iv_file_uri = p_gcs ).
ELSE.
lo_generative_model->set_files_from_gcs( iv_storage_bucket_name = p_gcs ).
ENDIF.
ENDIF.
ENDIF.
lo_response = lo_generative_model->set_system_instructions( lv_system_instructions
)->generate_content( lv_prompt ).
lv_response = lo_response->get_text( ).
IF lv_response IS NOT INITIAL.
CALL METHOD convert_string_to_table
EXPORTING
iv_response = lv_response
IMPORTING
et_text_response = lt_text_response.
gr_text_response->set_text_as_stream( lt_text_response ).
CLEAR:
lv_response,
lt_text_response.
ELSE.
lv_msg = lo_response->get_finish_reason( ).
CONCATENATE TEXT-006 lv_msg INTO lv_msg
SEPARATED BY space.
lo_out = cl_demo_output=>new( ).
lo_out->write_text( lv_msg ).
CONCATENATE TEXT-007 TEXT-008 INTO lv_msg
SEPARATED BY space.
lo_out->write_text( lv_msg ).
lo_out->display( ).
CLEAR lv_msg.
ENDIF.
CATCH /goog/cx_sdk INTO lo_cx_sdk.
cl_demo_output=>display( lo_cx_sdk->get_text( ) ).
ENDTRY.