create or replace function fnc_26ai_traffic_rag (p_base64_image IN clob, p_oci_cred IN VARCHAR2, p_comp_id 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 de RAG para PS - Tarffic Control - leal */ -- modelos: https://docs.oracle.com/en-us/iaas/Content/generative-ai/pretrained-models.htm -- cuidado com pre requisito (1) gen_ai_endpoint varchar2(500) := 'https://inference.generativeai.us-chicago-1.oci.oraclecloud.com'; gen_ai_model varchar2(500) := 'meta.llama-4-maverick-17b-128e-instruct-fp8'; chat_resp dbms_cloud_types.RESP; request_json_part1 CLOB; request_json_part2 CLOB; request_body BLOB; BEGIN -- create temp blobs dbms_lob.createtemporary(request_body, FALSE); request_json_part1 := to_clob( '{ "compartmentId": "' || p_comp_id || '", "servingMode": { "modelId": "' || gen_ai_model || '", "servingType": "ON_DEMAND" } , "chatRequest": { "apiFormat": "GENERIC", "messages": [ { "role": "USER", "content": [ { "type": "TEXT", "text": "' || 'Gere um JSON com a placa do veiculo, modelo do veiculo e se motorista estiver visivel com uso celular na direção, aponte a infração. Exemplo de saida: {placa:XXXX,modelo:XXXXXXXXXXXXXXXXX,infracao:XXXXXXXXXXXXXX}. Retorne apenas o JSON, sem nenhuma mensagem de introducao nem de explicacao.' || '" }, { "type": "IMAGE", "imageUrl": { "url": "data:image/' || 'png' || ';base64,'); request_json_part2 := to_clob('" } } ] } ], "temperature": 0.4, "numGenerations": 5, "topK": 1 } }'); -- append part1 json to request blob dbms_lob.append(request_body, apex_util.clob_to_blob(p_clob => request_json_part1,p_charset => 'AL32UTF8')); -- append base64 image to request blob dbms_lob.append(request_body, apex_util.clob_to_blob(p_clob => p_base64_image,p_charset => 'AL32UTF8')); -- append part2 json to request blob dbms_lob.append(request_body, apex_util.clob_to_blob(p_clob => request_json_part2,p_charset => 'AL32UTF8')); -- call Gen AI Chat chat_resp := dbms_cloud.send_request( credential_name => p_oci_cred, uri => gen_ai_endpoint || '/20231130/actions/chat', method => dbms_cloud.METHOD_POST, body => request_body ); -- clear temp blobs dbms_lob.freetemporary(request_body); RETURN json_value( dbms_cloud.get_response_text(chat_resp),'$.chatResponse.choices[0].message.content[0].text') ; END; /