update_conversation_history

in src/zgoog_conversation_agent/zgoog_cl_conversation_agent.clas.abap [0:0]


  METHOD update_conversation_history.

    DATA:
      ls_chat_hist       TYPE zgoog_conv_hist,
      lv_timestamp       TYPE timestamp,
      lv_content_xstring TYPE xstring.


    FIELD-SYMBOLS:
                   <ls_candidate>  TYPE /goog/cl_aiplatform_v1=>ty_690.

    IF gs_current_conversation IS NOT INITIAL.
      APPEND gs_current_conversation TO gt_conversation_history.

    ENDIF.

    IF gs_content_response IS NOT INITIAL.
      LOOP AT gs_content_response-candidates ASSIGNING <ls_candidate>.
        APPEND <ls_candidate>-content TO gt_conversation_history.

      ENDLOOP.

    ENDIF.

    ls_chat_hist-session_id = gv_session_id.
    GET TIME STAMP FIELD lv_timestamp.
    ls_chat_hist-start_time = lv_timestamp.
    ls_chat_hist-user_name = sy-uname.
    ls_chat_hist-content = /goog/cl_json_util=>serialize_json( is_data = gt_conversation_history ).

    CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
      EXPORTING
        text   = ls_chat_hist-content
      IMPORTING
        buffer = lv_content_xstring
      EXCEPTIONS
        failed = 1
        OTHERS = 2.
    IF sy-subrc <> 0.
      CALL METHOD /goog/cl_vertex_ai_sdk_utility=>raise_error
        EXPORTING
          iv_ret_code = 462
          iv_err_text = |Error while encoding conversation to xstring, SY_SUBRC - | && sy-subrc.

    ENDIF.

    ls_chat_hist-content = cl_http_utility=>encode_x_base64( lv_content_xstring ).

    MODIFY zgoog_conv_hist FROM ls_chat_hist.
    IF sy-subrc <> 0.
      CALL METHOD /goog/cl_vertex_ai_sdk_utility=>raise_error
        EXPORTING
          iv_ret_code = 462
          iv_err_text = |Conversation History update not successful for the Session ID, SY_SUBRC - | && sy-subrc.

    ENDIF.