json-object-editor
Version:
JOE the Json Object Editor | Platform Edition
80 lines (61 loc) • 1.84 kB
JavaScript
const OpenAI = require("openai");
function ChatGPTTools() {
const self = this;
function coloredLog(message) {
console.log(JOE.Utils.color('[chatgpt-tools]', 'plugin', false), message);
}
function getAPIKey() {
const setting = JOE.Utils.Settings('OPENAI_API_KEY');
if (!setting) throw new Error("Missing OPENAI_API_KEY setting");
return setting;
}
//search JOE data for ai_tool objects
function getTools(data){
var query = Object.assign({itemtype:'ai_tool'}, data||{});
var tools = JOE.Cache.search(query);
var functionalTools = {};
for(var i=0; i<tools.length; i++){
var tool = tools[i];
functionalTools[tool._id] = Object.assign(tool,{
tool_properties:JSON.parse(tool.tool_properties),
});
}
return functionalTools;
}
function newClient() {
return new OpenAI({ apiKey: getAPIKey() });
}
this.default = function(data, req, res) {
try {
var payload = {
params: req.params,
data: data,
tools:getTools(data),
success:true
};
} catch (e) {
return { errors: 'plugin error: ' + e, failedat: 'plugin' };
}
return payload;
};
this.flattened = function(data, req, res){
try {
var flattened = JOE.Utils.flattenObject(data._id);
var payload = {
params: req.params,
data: data,
object:flattened,
success:true
};
} catch (e) {
return { errors: 'plugin error: ' + e, failedat: 'plugin' };
}
return payload;
}
//1. start or continue a conversation
//self.profileBusinessFromURL = profileBusinessFromURL;
this.async = {
};
return self;
}
module.exports = new ChatGPTTools();