Artificial Intelligence (AI) is getting a lot of attention lately because it can change many areas of our lives. Better computer power and more data have helped AI do amazing things, like improving medical tests and making self-driving cars. AI can also help businesses make better decisions and work more efficiently, which is why it's becoming more popular and widely used. How can one integrate the OpenAI API calls into an existing IRIS Interoperability application?
Prerequisites
In this tutorial we will assume that you already have an existing interoperability production and a set of OpenAI credentials to make calls to OpenAI APIs. You can download a code we use in this tutorial from the following GitHub project branch: https://github.com/banksiaglobal/bg-openai/tree/test-app-original
To learn how to get OpenAI credentials, follow this tutorial https://allthings.how/how-to-get-your-open-ai-api-key/ or just open OpenAI API Keys page and create one https://platform.openai.com/api-keys
Original Application
Our application, AppExchange, emulates InterSystems OpenExchange publishing: it gets a request with a project description, project logo and GitHub URL and publishes it in the AppExchange repository.
Adding a bit of Artificial Intelligence
Now let's assume that a person who looks after our repository noticed that some app developers are lazy and not providing either short summary or logo for the apps they are publishing. That's where our AI friend can come to the rescue!
The desired workflow would look like this:
- The application receives a URL of a repository, summary and a URL of logo as input.
- If summary is empty, the URL is sent to a GPT-based model that parses the repository contents and generates a descriptive summary of the project. This process may involve parsing README files, code comments, and other relevant documentation within the repository to extract key information about the project's purpose, features, and usage.
- The generated project summary is then used as an input to another GPT-based model, which is tasked with creating a logo for the project. This model uses the description to understand the project's theme, and then designs a logo that visually represents the project's essence and identity.
- The application outputs a response that includes the original URL, the generated project summary, and the newly created logo. This response provides a comprehensive overview of the project, along with a visual identifier that can be used in branding and marketing efforts.
To achieve this integration, we will use the Business Process Designer to visually design the application's workflow.
Step 1: Installation
To start, we will download bg-openai package from Open Exchange using ZPM package manager:
zpm "install bg-openai"
You can have a look at this package here https://openexchange.intersystems.com/package/bg-openai-1 and check out it's source code here https://github.com/banksiaglobal/bg-openai
This package is based on the great work of Francisco Lopez available here https://github.com/KurroLopez/iris-openai with four small changes: we changed class names to be more in line with standard IRIS naming conventions, we added a new SimplePrompt request which allows users to send simple AI text prompts very easily, we changed Api Key to be a credential rather than a setting, and we changed top level package name to "Banksia" in line with company standards.
Step 2: Set up OpenAI Operation
For further work and configuration of the products, let's move to the management portal located at the following link if you are using Docker image with our original application:
http://localhost:42773/csp/sys/UtilHome.csp
Navigate to the Interoperability->[Namespace]->Configure->Production and make sure that our original production is running.
Add a new Operation based on class Banksia.OpenAi.Operation and name it OpenAiOut. Make it enabled. This operation will communicate with OpenAI API servers.
- Operation Class: Banksia.OpenAi.Operation
- Operation Name: OpenAiOut
Now let's make a minimal setup required to use our new Operation in Production: add an API key and SSL Configuration.
Navigate to OpenAiOut->Settings->Basic Settings->Credentials and click on magnifying glass icon to configure credentials.
Fill in the form data and add apiKey in the password field. Save the data by clicking on Save. ID and User Name fields you can fill as you like.
In the Credentials field, select the ID of the credentials we saved earlier.
Setup SSL Configuration: create a new Client SSL Configuration OpenAiSSL and select it in the dropdown.
Step 3 - Add Summary Generation to Business Process using the Business Process Designer
Navigate to Interoperability > Business Process Designer and open AppExchange.Process
business process by clicking Open.
Build a flowchart of the process based on the algorithm we described above.
An example implementation is shown in the image below.
Сheck the repository URL is provided and that we need to query ChatGPT to create a description if no description has been entered.
(request.Summary="") & (request.GitHubUrl '="")
Then, add the <Сall> block and make a target OpenAiOut, which, depending on the type of request, will make a call to OpenAi api.
- Name: Generate Summary
Customize the type of request and the received response, as well as distribute variables for actions.
- Request Message Class: Banksia.OpenAi.Msg.SimplePrompt.Request
set callrequest.Prompt = "Visit the website you will be provided on the next step. Describe the main idea of the project, its objectives and key features in one paragraph."
set callrequest.UserInput = request.GitHubUrl
set callrequest.Model = "gpt-4"
- Response Message Class: Banksia.OpenAi.Msg.SimplePrompt.Response
set request.Summary = callresponse.Content
Add a <sync> step to wait for a response, in the Calls field add the name of the previous <call>
- Calls: Generate Summary
Step 4 - Add Logo Generation to Business Process
After getting the repository description, let's move on to the next logical part - logo generation. Let's check that there is a description for which the image will be generated and check if there is no image URL provided. Let's set the following condition:
(request.LogoUrl="") & (request.Summary'="")
Сonfigure the next <call> element, make a target our OpenAiOut operation as well.
- Name: Generate Logo
Customize the type of request and the received response.
- Request Message Class: Banksia.OpenAi.Msg.Images.Request
set callrequest.ResponseFormat = "url"
set callrequest.Operation = "generations"
set callrequest.Prompt = "Create a simple app icon for the following mobile application: "_request.Summary
set callrequest.Size = "256x256"
- Response Message Class: Banksia.OpenAi.Msg.Images.Response
set request.LogoURL = callresponse.Data.GetAt(1).Url
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tl88tsogg3kkr5ukc9u2.png)
After completing the modification of our business process, click the compile button.
You can download the finished OpenAI integrated sample from the following GitHub project branch: https://github.com/banksiaglobal/bg-openai/tree/test-app
Step 5: Test our new Business Process in Production
Go to the Interoperability->Configure->Production section
First we need to restart our process to apply all the latest changes, navigate to AppProcess->Actions->Restart.
To test the process, go to AppProcess->Actions->Test.
Create a test message with a GitHub URL for the OpenAI API and send it through production:
Verify that the response from the OpenAI API is received and processed correctly by the application. Go to Visual Trace to see the full application cycle and make sure that the correct data is transmitted in each process element.
This is AI's take on our app logo:
Conclusion
By following these steps, you can integrate the OpenAI API into the interoperability production using the Business Process in InterSystems IRIS. The bg-openai module is a great resource for developers looking to incorporate AI into their applications. By simplifying the integration process, it opens up new possibilities for enhancing applications with the power of artificial intelligence.
About Author
Mariia Nesterenko is a certified IRIS developer at Banksia Global. She is involved in application development, data structures, system interoperability, and geospatial data.
About Banksia Global
Banksia Global is an international boutique consultancy headquartered in Sydney, Australia, specializing in providing professional services for InterSystems technologies. With a team of dedicated and experienced professionals, we pride ourselves on being an official InterSystems Premier Partner, authorized to provide services worldwide. Our passion for excellence and innovation drives us to deliver high-quality solutions that meet the unique needs of our clients.
Top comments (0)