//
// refresh ai fields
//
function refreshAIFields() {
// set the app id
var appID = cSSApplicationID;
// get the field structure
var response = listFields_(appID);
var oFields = JSON.parse(response).structure;
// get the records
var response = listRecords_(appID);
oRecords = JSON.parse(response).items;
for (var i in oRecords) {
for (let [key, value] of Object.entries(oRecords[i])) {
// Logger.log(JSON.stringify(oRecords[i]));
var recordID = oRecords[i].id;
// get this key's field name
var fieldName = getFieldNameByID(key, oFields);
// any ai fields?
// if ((value.toString().length > 0) && (fieldName.indexOf("AI.") > -1)) {
if ((value.toString().length > 0) && (fieldName.indexOf("AI.StockPriceLive") > -1) && (value.toString().toLowerCase().indexOf("live data: {") > -1)) {
// console.log(`${key}: ${value}`);
// extract and transform the prompt (if necessary)
var targetFieldName = value.toString().split("[")[1].split("]")[0];
var targetFieldID = getFieldIDByName(targetFieldName, oFields);
// console.log(`${key}: ${targetFieldName} / ${targetFieldID}`);
// extract live data (if it exists)
if (value.toString().toLowerCase().indexOf("live data: {") > -1) {
// parse the query
var q = value.toString().toLowerCase().split("live data: {{")[1].split("}}")[0];
Logger.log(q);
// perform the search
var liveData = serpAPI(q, "5d");
// Logger.log(liveData);
// DriveApp.createFile("serp.json", liveData);
// update the prompt to include the live data
var begPos = value.toString().toLowerCase().indexOf("live data: {{") + 11;
var endPos = value.toString().toLowerCase().indexOf("}}") + 2;
// value = value.substring(0, begPos) + "`" + "...liveData..." + "`" + value.substring(endPos);
value = value.substring(0, begPos) + "`" + liveData + "`" + value.substring(endPos);
// Logger.log(value);
}
// process the inference
var response = palmCreateTextCompletion_(value.toString());
Logger.log(response);
var oOutput = JSON.parse(response);
var output = oOutput.candidates[0].output;
// Logger.log(oOutput);
if (value.toString().toLowerCase().indexOf("markdown") > -1) {
var oContent = markdownToSmartDoc_(output);
var output = {
"data": {
"type": "doc",
"content": oContent
}
}
}
// update the target field
var payload = {
[targetFieldID] : output
}
// Logger.log(JSON.stringify(payload));
updateRecord(recordID, payload);
}
}
}
return(true);
}