create or replace FUNCTION FNC_26ai_rag (p_ai_prompt IN clob,
                                         p_oci_cred  IN VARCHAR2 default 'OCI_CRED',
                                         p_comp in varchar2 
                                          )
RETURN CLOB AS
/*

  Criado por: fernando.leal@oracle.com
  Data: Oct/2025
  Objetivo: demonstrar casos de uso do Oracle AI Database 26ai

  v1 - funcao global de RAG com Llama4 - leal

*/
      v_gen_ai_endpoint varchar2(500) := 'https://inference.generativeai.us-chicago-1.oci.oraclecloud.com';
      v_gen_ai_model varchar2(500) := 'meta.llama-4-maverick-17b-128e-instruct-fp8';
      resp dbms_cloud_types.RESP;
BEGIN
    resp := dbms_cloud.send_request(
        credential_name => p_oci_cred,
        uri => v_gen_ai_endpoint || '/20231130/actions/chat',
        method => dbms_cloud.METHOD_POST,
        body => utl_raw.cast_to_raw(json_object(
            'compartmentId'         value p_comp,
            'servingMode'           value
                (json_object(
                    'modelId'       value v_gen_ai_model,
                    'servingType'   value 'ON_DEMAND'
                )),
            'chatRequest'           value
                        (json_object(
                    'apiFormat'     value 'GENERIC',
                    'messages'            value
                        (json_array(JSON_OBJECT(
                                          'role'            value 'USER',
                            'content'     value
                                (json_array(JSON_OBJECT(
                                'type'   value 'TEXT',
                                'text'    value p_ai_prompt
                            )))
                    ))),
                    'temperature'       value 0.1,
                    'topK'             value -1
                        ))
        ))
    );
    RETURN json_value(  dbms_cloud.get_response_text(resp) , '$.chatResponse.choices[0].message.content[0].text') ;

-- cuidado:  removido   'maxTokens'         value 1000 em 14-11-25 leal

EXCEPTION
 WHEN OTHERS THEN
     RETURN 'Não foi possível gerar um texto com base nas informações.';    
END;
/