For Zoho Services only:


I'm actually part of something bigger at Ascent Business Solutions recognized as the top Zoho Premium Solutions Partner in the United Kingdom.

Ascent Business Solutions offer support for smaller technical fixes and projects for larger developments, such as migrating to a ZohoCRM.  A team rather than a one-man-band is always available to ensure seamless progress and address any concerns. You'll find our competitive support rates with flexible, no-expiration bundles at http://ascentbusiness.co.uk/zoho-support-2.  For larger projects, check our bespoke pricing structure and receive dedicated support from our hands-on project consultants and developers at http://ascentbusiness.co.uk/crm-solutions/zoho-crm-packages-prices.

The team I manage specializes in coding API integrations between Zoho and third-party finance/commerce suites such as Xero, Shopify, WooCommerce, and eBay; to name but a few.  Our passion lies in creating innovative solutions where others have fallen short as well as working with new businesses, new sectors, and new ideas.  Our success is measured by the growth and ROI we deliver for clients, such as transforming a garden shed hobby into a 250k monthly turnover operation or generating a +60% return in just three days after launch through online payments and a streamlined e-commerce solution, replacing a paper-based system.

If you're looking for a partner who can help you drive growth and success, we'd love to work with you.  You can reach out to us on 0121 392 8140 (UK) or info@ascentbusiness.co.uk.  You can also visit our website at http://ascentbusiness.co.uk.

Zoho Cliq: Integrate OpenAI and ChatGPT 3.5 Turbo

What?
A quick article on my adaptation of some code posted by Poorvik Palanikumar on the Zoho Community Forums to connect a ZohoCliq to the OpenAI API and ChatGPT... Note that I have another article for those who want to integrate ChatGPT with ZohoZIA.

Why?
Previously, I would edit the message handlers of a Cliq Bot I created but it would only understand the questions I have programmed it to and respond with the responses I programmed it to answer with. Any variations of the questions it did not understand, it would return a response similar to Siri or Ask Google where it includes the keywords in a "Search the web..." task.

ChatGPT by OpenAI is viral at the time of print and although the solution below only connects to the OpenAI API, it is not currently connected to ChatGPT. The plus side however is that it is connected to the Internet unlike ChatGPT which only has information up to 2021.

How?
The basics of setting this up would be to setup a bot in ZohoCliq and then to edit either a message handler or participation handler. As for the usage, simply ask the Cliq Bot a question and it will forward the query and respond with the response from the OpenAI API.

Setup a Zoho Cliq bot
  1. Login to ZohoCliq
  2. Click on your profile picture
  3. Select "Bots & Tools"
  4. Click on "Create Bot" (or "Edit Handlers" on an existing bot)
  5. Fill in the details then edit the Handlers.
  6. For demo purposes, edit the code for the "Message Handler"

Get an OpenAI API Key
  1. Login to OpenAI
  2. Browse to https://platform.openai.com/account/api-keys
  3. Click on "Create a new key"
  4. Copy & paste into a text editor for use in the code below

Edit the Message Handler code
ChatGTP 3.5 Turbo
copyraw
// 
// initialize
m_Response = Map();
l_Messages = List();
v_Message = message.trim();
//
// if the message contains a question mark, send it to OpenAI
if(v_Message.contains("?"))
{
	v_Question = v_Message;
	//
	// Need to add your own OpenAI token here
	v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	//
	// build header of request
	m_Header = Map();
	m_Header.put("Authorization","Bearer " + v_Token);
	m_Header.put("Content-Type","application/json");
	//
	// build params of request
	m_Params = Map();
	m_Params.put("model", "gpt-3.5-turbo");
	m_Message = Map();
	m_Message.put("role", "user");
	m_Message.put("content", v_Question);
	l_Messages.add(m_Message);
	m_Params.put("messages", l_Messages);
	//
	// https://platform.openai.com/docs/api-reference/chat/create
	m_Params.put("temperature", 0.8);
	m_Params.put("n", 1);
	m_Params.put("max_tokens", 256);
	m_Params.put("presence_penalty", 0);
	m_Params.put("frequency_penalty", 0);
	// 
	// send request to chatgpt openai
	r_ChatGPTResponse = invokeurl
	[
		url :"https://api.openai.com/v1/chat/completions"
		type :POST
		parameters:m_Params.toString()
		headers:m_Header
		detailed:true
	];
	if(r_ChatGPTResponse.get("responseCode") == 200)
	{
		//
		// retrieve the answer in text
		l_Choices = r_ChatGPTResponse.get("responseText").get("choices");
		for each m_Choice in l_Choices
        {
			if(!isnull(m_Choice.get("message")))
			{
				if(m_Choice.get("message").get("role")=="assistant")
				{
					//
					// add the answer text to the response map
					m_Response.put("text",m_Choice.get("message").get("content"));
					break;
				}
			}
        }
	}
	else 
	{
		// store in response text
		m_Response.put("text","I don't know. Consider doing a Google search.");
	}
}
//
// output
return m_Response;
  1.  // 
  2.  // initialize 
  3.  m_Response = Map()
  4.  l_Messages = List()
  5.  v_Message = message.trim()
  6.  // 
  7.  // if the message contains a question mark, send it to OpenAI 
  8.  if(v_Message.contains("?")) 
  9.  { 
  10.      v_Question = v_Message; 
  11.      // 
  12.      // Need to add your own OpenAI token here 
  13.      v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  14.      // 
  15.      // build header of request 
  16.      m_Header = Map()
  17.      m_Header.put("Authorization","Bearer " + v_Token)
  18.      m_Header.put("Content-Type","application/json")
  19.      // 
  20.      // build params of request 
  21.      m_Params = Map()
  22.      m_Params.put("model", "gpt-3.5-turbo")
  23.      m_Message = Map()
  24.      m_Message.put("role", "user")
  25.      m_Message.put("content", v_Question)
  26.      l_Messages.add(m_Message)
  27.      m_Params.put("messages", l_Messages)
  28.      // 
  29.      // https://platform.openai.com/docs/api-reference/chat/create 
  30.      m_Params.put("temperature", 0.8)
  31.      m_Params.put("n", 1)
  32.      m_Params.put("max_tokens", 256)
  33.      m_Params.put("presence_penalty", 0)
  34.      m_Params.put("frequency_penalty", 0)
  35.      // 
  36.      // send request to chatgpt openai 
  37.      r_ChatGPTResponse = invokeUrl 
  38.      [ 
  39.          url :"https://api.openai.com/v1/chat/completions" 
  40.          type :POST 
  41.          parameters:m_Params.toString() 
  42.          headers:m_Header 
  43.          detailed:true 
  44.      ]
  45.      if(r_ChatGPTResponse.get("responseCode") == 200) 
  46.      { 
  47.          // 
  48.          // retrieve the answer in text 
  49.          l_Choices = r_ChatGPTResponse.get("responseText").get("choices")
  50.          for each m_Choice in l_Choices 
  51.          { 
  52.              if(!isnull(m_Choice.get("message"))) 
  53.              { 
  54.                  if(m_Choice.get("message").get("role")=="assistant") 
  55.                  { 
  56.                      // 
  57.                      // add the answer text to the response map 
  58.                      m_Response.put("text",m_Choice.get("message").get("content"))
  59.                      break
  60.                  } 
  61.              } 
  62.          } 
  63.      } 
  64.      else 
  65.      { 
  66.          // store in response text 
  67.          m_Response.put("text","I don't know. Consider doing a Google search.")
  68.      } 
  69.  } 
  70.  // 
  71.  // output 
  72.  return m_Response; 
Yields something like the following:
Zoho Cliq: Integrate OpenAI and now ChatGPT 3.5 Turbo
Text-Davinci-003: (preceded ChatGPT API)
copyraw
// 
// initialize
m_Response = Map();
v_Answer = "";
v_Message = message.trim();
//
// if the message contains a question mark, send it to OpenAI
if(v_Message.contains("?"))
{
	v_Question = v_Message;
	//
	// Need to add your own OpenAI token
	v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	//
	// build header of request
	m_Header = Map();
	m_Header.put("Authorization","Bearer " + v_Token);
	m_Header.put("Content-Type","application/json");
	//
	// build params of request
	m_Params = Map();
	m_Params.put("model", "text-davinci-003");
	m_Params.put("prompt", v_Question);
	m_Params.put("temperature", 0.9);
	m_Params.put("max_tokens", 256);
	m_Params.put("top_p", 1);
	m_Params.put("frequency_penalty", 0);
	m_Params.put("presence_penalty", 0);
	m_Params.put("stop", {" Human:"," AI:"});
	// 
	// send request to chatgpt openai
	r_ChatGPTResponse = invokeurl
	[
		url :"https://api.openai.com/v1/completions"
		type :POST
		parameters:m_Params.toString()
		headers:m_Header
		detailed:true
	];
	if(r_ChatGPTResponse.get("responseCode") == 200)
	{
		// retrieve the answer in text
		v_Answer = r_ChatGPTResponse.get("responseText").get("choices").getJSON("text");
	}
	else if(r_ChatGPTResponse.get("responseCode") == 429)
	{
		// store in response text
		v_Answer = "I dont have any knowledge in this. Please ask me something else";
	}
}
else if (v_Message.containsIgnoreCase("Hi") || v_Message.containsIgnoreCase("Hello") || v_Message.containsIgnoreCase("Hey")) 
{
		// store in response text
	v_Answer = "Hi " + user.get("first_name") + "!\nMy name is JoelBot and I am currently connected to the OpenAI API.  I can try and answer any question you end with a question mark.  Try me out!";
}
//
// add the answer text to the response map
m_Response.put("text", v_Answer);
//
// output
return m_Response;
  1.  // 
  2.  // initialize 
  3.  m_Response = Map()
  4.  v_Answer = ""
  5.  v_Message = message.trim()
  6.  // 
  7.  // if the message contains a question mark, send it to OpenAI 
  8.  if(v_Message.contains("?")) 
  9.  { 
  10.      v_Question = v_Message; 
  11.      // 
  12.      // Need to add your own OpenAI token 
  13.      v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  14.      // 
  15.      // build header of request 
  16.      m_Header = Map()
  17.      m_Header.put("Authorization","Bearer " + v_Token)
  18.      m_Header.put("Content-Type","application/json")
  19.      // 
  20.      // build params of request 
  21.      m_Params = Map()
  22.      m_Params.put("model", "text-davinci-003")
  23.      m_Params.put("prompt", v_Question)
  24.      m_Params.put("temperature", 0.9)
  25.      m_Params.put("max_tokens", 256)
  26.      m_Params.put("top_p", 1)
  27.      m_Params.put("frequency_penalty", 0)
  28.      m_Params.put("presence_penalty", 0)
  29.      m_Params.put("stop", {" Human:"," AI:"})
  30.      // 
  31.      // send request to chatgpt openai 
  32.      r_ChatGPTResponse = invokeUrl 
  33.      [ 
  34.          url :"https://api.openai.com/v1/completions" 
  35.          type :POST 
  36.          parameters:m_Params.toString() 
  37.          headers:m_Header 
  38.          detailed:true 
  39.      ]
  40.      if(r_ChatGPTResponse.get("responseCode") == 200) 
  41.      { 
  42.          // retrieve the answer in text 
  43.          v_Answer = r_ChatGPTResponse.get("responseText").get("choices").getJSON("text")
  44.      } 
  45.      else if(r_ChatGPTResponse.get("responseCode") == 429) 
  46.      { 
  47.          // store in response text 
  48.          v_Answer = "I dont have any knowledge in this. Please ask me something else"
  49.      } 
  50.  } 
  51.  else if (v_Message.containsIgnoreCase("Hi") || v_Message.containsIgnoreCase("Hello") || v_Message.containsIgnoreCase("Hey")) 
  52.  { 
  53.          // store in response text 
  54.      v_Answer = "Hi " + user.get("first_name") + "!\nMy name is JoelBot and I am currently connected to the OpenAI API.  I can try and answer any question you end with a question mark.  Try me out!"
  55.  } 
  56.  // 
  57.  // add the answer text to the response map 
  58.  m_Response.put("text", v_Answer)
  59.  // 
  60.  // output 
  61.  return m_Response; 

Even in test mode or simply starting a Cliq conversation will now yield something like the following:

Zoho Cliq: Integrate OpenAI and soon ChatGPT

Additional
  • For every chat message, the OpenAI ChatGPT forgets what the context of the conversation was about: Well we can populate the list of messages so that there is a conversation trail for the OpenAI ChatGPT to build on:
    copyraw
    // 
    // initialize
    m_Response = Map();
    v_Message = message.trim();
    l_Messages = List();
    v_ChatID = ifnull(chat.getJSON("id"),0);
    //
    // get conversations from last 10 minutes
    v_MinutesAgo = 10;
    v_FromTime = zoho.currenttime.subMinutes(v_MinutesAgo).toLong();
    v_TillTime = zoho.currenttime.toLong() / 1000;
    //
    // by default gets last 100 messages (doesn't return anything if no parameters specified)
    v_Endpoint = "https://cliq.zoho.eu/api/v2/chats/"+v_ChatID + "/messages?fromtime=" + v_FromTime + "&limit=50";
    r_ChatDetails = invokeurl
    [
    	url: v_Endpoint
    	type: GET
    	connection: "ab_cliq"
    ];
    //
    // let's build up the conversation thread
    if(!isnull(r_ChatDetails.get("data")))
    {
    	for each r_MessageData in r_ChatDetails.get("data")
        {
    		v_Role = "user";
    		if(!isnull(r_MessageData.get("message_source")))
    		{
    			v_UserType = r_MessageData.get("message_source").get("type");
    			v_Role = if(v_UserType=="bot", "assistant", "user");
    		}
    		if(!isnull(r_MessageData.get("content")))
    		{
    			v_Content = r_MessageData.get("content").get("text");
    		}
    		//
    		m_Message = Map();
    		m_Message.put("role",v_Role);
    		m_Message.put("content",v_Content);
    		l_Messages.add(m_Message);
        }
    }
    1.  // 
    2.  // initialize 
    3.  m_Response = Map()
    4.  v_Message = message.trim()
    5.  l_Messages = List()
    6.  v_ChatID = ifnull(chat.getJSON("id"),0)
    7.  // 
    8.  // get conversations from last 10 minutes 
    9.  v_MinutesAgo = 10
    10.  v_FromTime = zoho.currenttime.subMinutes(v_MinutesAgo).toLong()
    11.  v_TillTime = zoho.currenttime.toLong() / 1000
    12.  // 
    13.  // by default gets last 100 messages (doesn't return anything if no parameters specified) 
    14.  v_Endpoint = "https://cliq.zoho.eu/api/v2/chats/"+v_ChatID + "/messages?fromtime=" + v_FromTime + "&limit=50"
    15.  r_ChatDetails = invokeUrl 
    16.  [ 
    17.      url: v_Endpoint 
    18.      type: GET 
    19.      connection: "ab_cliq" 
    20.  ]
    21.  // 
    22.  // let's build up the conversation thread 
    23.  if(!isnull(r_ChatDetails.get("data"))) 
    24.  { 
    25.      for each r_MessageData in r_ChatDetails.get("data") 
    26.      { 
    27.          v_Role = "user"
    28.          if(!isnull(r_MessageData.get("message_source"))) 
    29.          { 
    30.              v_UserType = r_MessageData.get("message_source").get("type")
    31.              v_Role = if(v_UserType=="bot", "assistant", "user")
    32.          } 
    33.          if(!isnull(r_MessageData.get("content"))) 
    34.          { 
    35.              v_Content = r_MessageData.get("content").get("text")
    36.          } 
    37.          // 
    38.          m_Message = Map()
    39.          m_Message.put("role",v_Role)
    40.          m_Message.put("content",v_Content)
    41.          l_Messages.add(m_Message)
    42.      } 
    43.  } 

The one to rule them all
So I've been asked here and on the forums as well for the full query that includes making ChatGPT keep the context of the conversation along with new cliqs:
copyraw
// 
// initialize
m_Response = Map();
v_Message = message.trim();
v_ChatID = ifnull(chat.getJSON("id"),0);
//
// get conversations from last 5 minutes
v_MinutesAgo = 10;
v_FromTime = zoho.currenttime.subMinutes(v_MinutesAgo).toLong();
v_TillTime = zoho.currenttime.toLong() / 1000;
//
// by default gets last 100 messages (doesn't return anything if no parameters specified)
v_Endpoint = "https://cliq.zoho.eu/api/v2/chats/" + v_ChatID + "/messages?fromtime=" + v_FromTime + "&limit=50";
r_ChatDetails = invokeurl
[
	url :v_Endpoint
	type :GET
	connection:"ab_cliq"
];
//
// let's build up the conversation thread
l_Messages = List();
if(!isnull(r_ChatDetails.get("data")))
{
	for each  r_MessageData in r_ChatDetails.get("data")
	{
		v_Role = "user";
		if(!isnull(r_MessageData.get("message_source")))
		{
			v_UserType = r_MessageData.get("message_source").get("type");
			v_Role = if(v_UserType == "bot","assistant","user");
		}
		if(!isnull(r_MessageData.get("content")))
		{
			v_Content = r_MessageData.get("content").get("text");
		}
		//
		m_Message = Map();
		m_Message.put("role",v_Role);
		m_Message.put("content",v_Content);
		l_Messages.add(m_Message);
	}
}
//
// if the message is not blank, send it to OpenAI
if(!isBlank(v_Message))
{
	v_Question = v_Message;
	//
	// Need to add openAI token here
	v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
	//
	// build header of request
	m_Header = Map();
	m_Header.put("Authorization","Bearer " + v_Token);
	m_Header.put("Content-Type","application/json");
	//
	// build params of request
	m_Params = Map();
	m_Params.put("model","gpt-3.5-turbo");
	//
	// add latest message to conversation thread
	m_Message = Map();
	m_Message.put("role","user");
	m_Message.put("content",v_Question);
	l_Messages.add(m_Message);
	m_Params.put("messages",l_Messages);
	//
	// https://platform.openai.com/docs/api-reference/chat/create
	m_Params.put("temperature",0.8);
	m_Params.put("n",1);
	m_Params.put("max_tokens",256);
	m_Params.put("presence_penalty",0);
	m_Params.put("frequency_penalty",0);
	// 
	// send request to chatgpt openai
	r_ChatGPTResponse = invokeurl
	[
		url :"https://api.openai.com/v1/chat/completions"
		type :POST
		parameters:m_Params.toString()
		headers:m_Header
		detailed:true
	];
	if(r_ChatGPTResponse.get("responseCode") == 200)
	{
		//
		// retrieve the answer in text
		l_Choices = r_ChatGPTResponse.get("responseText").get("choices");
		for each  m_Choice in l_Choices
		{
			if(!isnull(m_Choice.get("message")))
			{
				if(m_Choice.get("message").get("role") == "assistant")
				{
					//
					// add the answer text to the response map
					m_Response.put("text",m_Choice.get("message").get("content"));
					//break;
				}
			}
		}
	}
	else if(r_ChatGPTResponse.get("responseCode") == 429)
	{
		// catch all
		v_Response = "I don't know. Would you like me to Google: [" + v_Message + "](https://www.google.com/search?q=" + zoho.encryption.urlEncode(v_Message) + ")?";
		m_Response = {"text":v_Response };
	}
}
return m_Response;
  1.  // 
  2.  // initialize 
  3.  m_Response = Map()
  4.  v_Message = message.trim()
  5.  v_ChatID = ifnull(chat.getJSON("id"),0)
  6.  // 
  7.  // get conversations from last 5 minutes 
  8.  v_MinutesAgo = 10
  9.  v_FromTime = zoho.currenttime.subMinutes(v_MinutesAgo).toLong()
  10.  v_TillTime = zoho.currenttime.toLong() / 1000
  11.  // 
  12.  // by default gets last 100 messages (doesn't return anything if no parameters specified) 
  13.  v_Endpoint = "https://cliq.zoho.eu/api/v2/chats/" + v_ChatID + "/messages?fromtime=" + v_FromTime + "&limit=50"
  14.  r_ChatDetails = invokeUrl 
  15.  [ 
  16.      url :v_Endpoint 
  17.      type :GET 
  18.      connection:"ab_cliq" 
  19.  ]
  20.  // 
  21.  // let's build up the conversation thread 
  22.  l_Messages = List()
  23.  if(!isnull(r_ChatDetails.get("data"))) 
  24.  { 
  25.      for each  r_MessageData in r_ChatDetails.get("data") 
  26.      { 
  27.          v_Role = "user"
  28.          if(!isnull(r_MessageData.get("message_source"))) 
  29.          { 
  30.              v_UserType = r_MessageData.get("message_source").get("type")
  31.              v_Role = if(v_UserType == "bot","assistant","user")
  32.          } 
  33.          if(!isnull(r_MessageData.get("content"))) 
  34.          { 
  35.              v_Content = r_MessageData.get("content").get("text")
  36.          } 
  37.          // 
  38.          m_Message = Map()
  39.          m_Message.put("role",v_Role)
  40.          m_Message.put("content",v_Content)
  41.          l_Messages.add(m_Message)
  42.      } 
  43.  } 
  44.  // 
  45.  // if the message is not blank, send it to OpenAI 
  46.  if(!isBlank(v_Message)) 
  47.  { 
  48.      v_Question = v_Message; 
  49.      // 
  50.      // Need to add openAI token here 
  51.      v_Token = "sk-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  52.      // 
  53.      // build header of request 
  54.      m_Header = Map()
  55.      m_Header.put("Authorization","Bearer " + v_Token)
  56.      m_Header.put("Content-Type","application/json")
  57.      // 
  58.      // build params of request 
  59.      m_Params = Map()
  60.      m_Params.put("model","gpt-3.5-turbo")
  61.      // 
  62.      // add latest message to conversation thread 
  63.      m_Message = Map()
  64.      m_Message.put("role","user")
  65.      m_Message.put("content",v_Question)
  66.      l_Messages.add(m_Message)
  67.      m_Params.put("messages",l_Messages)
  68.      // 
  69.      // https://platform.openai.com/docs/api-reference/chat/create 
  70.      m_Params.put("temperature",0.8)
  71.      m_Params.put("n",1)
  72.      m_Params.put("max_tokens",256)
  73.      m_Params.put("presence_penalty",0)
  74.      m_Params.put("frequency_penalty",0)
  75.      // 
  76.      // send request to chatgpt openai 
  77.      r_ChatGPTResponse = invokeUrl 
  78.      [ 
  79.          url :"https://api.openai.com/v1/chat/completions" 
  80.          type :POST 
  81.          parameters:m_Params.toString() 
  82.          headers:m_Header 
  83.          detailed:true 
  84.      ]
  85.      if(r_ChatGPTResponse.get("responseCode") == 200) 
  86.      { 
  87.          // 
  88.          // retrieve the answer in text 
  89.          l_Choices = r_ChatGPTResponse.get("responseText").get("choices")
  90.          for each  m_Choice in l_Choices 
  91.          { 
  92.              if(!isnull(m_Choice.get("message"))) 
  93.              { 
  94.                  if(m_Choice.get("message").get("role") == "assistant") 
  95.                  { 
  96.                      // 
  97.                      // add the answer text to the response map 
  98.                      m_Response.put("text",m_Choice.get("message").get("content"))
  99.                      //break; 
  100.                  } 
  101.              } 
  102.          } 
  103.      } 
  104.      else if(r_ChatGPTResponse.get("responseCode") == 429) 
  105.      { 
  106.          // catch all 
  107.          v_Response = "I don't know. Would you like me to Google: [" + v_Message + "](https://www.google.com/search?q=" + zoho.encryption.urlEncode(v_Message) + ")?"
  108.          m_Response = {"text":v_Response }
  109.      } 
  110.  } 
  111.  return m_Response; 

Error(s) Encountered:
  • Exceeded Quote Limit: Try generating a new API key (aka Secret). If you need a paid plan, then you can access this by logging into OpenAI and browsing to https://platform.openai.com/account/billing/overview. At time of print, the paid plan is a pay as you go or pay as you use.

Previous Models/Versions
Based on the documentation: In the above code, you would change the model value to one of the following
copyraw
code-davinci-002	(optimized for code-completion tasks)
text-davinci-002
text-davinci-003
gpt-3.5-turbo    (optimized for chat at 1/10th the cost of text-davinci-003)
gpt-4
gpt-4-32k    (up to 4x the context length)
  1.  code-davinci-002    (optimized for code-completion tasks) 
  2.  text-davinci-002 
  3.  text-davinci-003 
  4.  gpt-3.5-turbo    (optimized for chat at 1/10th the cost of text-davinci-003) 
  5.  gpt-4 
  6.  gpt-4-32k    (up to 4x the context length) 

Source(s):
Category: Zoho :: Article: 832

Credit where Credit is Due:


Feel free to copy, redistribute and share this information. All that we ask is that you attribute credit and possibly even a link back to this website as it really helps in our search engine rankings.

Disclaimer: Please note that the information provided on this website is intended for informational purposes only and does not represent a warranty. The opinions expressed are those of the author only. We recommend testing any solutions in a development environment before implementing them in production. The articles are based on our good faith efforts and were current at the time of writing, reflecting our practical experience in a commercial setting.

Thank you for visiting and, as always, we hope this website was of some use to you!

Kind Regards,

Joel Lipman
www.joellipman.com

Related Articles

Joes Revolver Map

Accreditation

Badge - Certified Zoho Creator Associate
Badge - Certified Zoho Creator Associate

Donate & Support

If you like my content, and would like to support this sharing site, feel free to donate using a method below:

Paypal:
Donate to Joel Lipman via PayPal

Bitcoin:
Donate to Joel Lipman with Bitcoin bc1qf6elrdxc968h0k673l2djc9wrpazhqtxw8qqp4

Ethereum:
Donate to Joel Lipman with Ethereum 0xb038962F3809b425D661EF5D22294Cf45E02FebF
© 2024 Joel Lipman .com. All Rights Reserved.