Parasol AI Developer Workflow - 60 minutes

1. Goals of this lab

Parasol is standardizing on an internal developer portal (IDP) for its developers to use to build, deploy, and manage cloud native applications, including those with AI capabilities. In this exercise, you will learn how to harness the power of the Parasol internal developer portal to streamline and enhance your development workflow for AI apps. This exercise will guide you through creating a new application using a software template, observing the automatic CI/CD processes powered by Tekton and Argo, and using your web-based IDE, Red Hat Dev Spaces. You’ll create a new branch to develop and add an AI feature, in this case an email generator. After merging your pull request, you’ll monitor the deployment process via OpenShift GitOps in the Red Hat Dev Hub dashboard. Finally, you’ll verify the functionality of your new application by accessing its frontend page. This hands-on experience will empower you to efficiently utilize the Parasol developer portal for seamless application development and deployment.

2. Deploy the existing Parasol application in Red Hat Developer Hub

Red Hat Developer Hub (RHDH) is an enterprise-grade, self-managed, and customizable developer portal built on top of Backstage.io. It’s designed to streamline the development process for organizations, specifically those using Red Hat products and services. Here’s a breakdown of its key benefits:

  • Increased Developer Productivity: Reduces time spent searching for resources and setting up environments.

  • Improved Collaboration: Provides a central platform for developers to share knowledge and best practices.

  • Reduced Cognitive Load: Minimizes the need for developers to juggle multiple tools and resources.

  • Enterprise-Grade Support: Backed by Red Hat’s support infrastructure, ensuring stability and reliability.

Red Hat Developer Hub has already been installed and configured in the workshop environment.

2.1. Access Red Hat Developer Hub

Red Hat Developer Hub integrates with Red Hat Single Sign On (RH-SSO) to enhance security and user experience for developers within an organization. By integrating with RH-SSO, developers only need to log in once to access both RHDH and other applications secured by RH-SSO. This eliminates the need to manage multiple login credentials for different developer tools and services. RH-SSO centralizes user authentication and authorization to strengthen security by ensuring only authorized users can access RHDH and other protected resources. In addition, The platform engineering team can manage user access and permissions centrally through RH-SSO, simplifying administration and reducing the risk of unauthorized access.

To get started, access Red Hat Developer Hub Dashboard to authenticate by GitLab.

Choose the GitLab option.

authentication

Enter the following credential in the Gitlab login page.

  • Username:

user1
  • Password:

openshift
gitlab authentication

Click Authorize Keycloak to allow the authentication to proceed.

gitlab kc authentication

Find more information about the Red Hat Developer Hub here.

2.2. Use software templates to deploy the Parasol Customer Service App

In Red Hat Developer Hub, a software template serves as a pre-configured blueprint for creating development environments and infrastructure. Software templates streamline the process of setting up development environments by encapsulating pre-defined configurations. This saves developers time and effort compared to manually configuring everything from scratch.

Click on Create…​ on the left menu. Then, type Parasol in the search bar. Then, Choose the Parasol Insurance for Red Hat AI App Development (RAD) Workshop template.

software template parasol llm

Follow the next steps to create a component based on the pre-defined Software Templates:

2.2.1. Provide Information for Application

  • Name: The name of the component. Replace the Name with the following domain:

parasol-app-user1
  • Group Id: Maven Group Id. (leave this as-is)

  • Artifact Id: Maven Artifact Id. (leave this as-is)

  • Java Package Name: Name for the java package. (e.g. org.redhat.janus - leave this as-is)

st app info

Click on Next.

2.2.2. Provide Image Registry Information

Choose the Quay option for the image registry where you deploy your application.

st image info

Leave the other fields as they are.

Click on Next.

2.2.3. Application repository Information

The Developer Hub will create a new repository in the your GitLab account for your application.

st repo info

Leave the all fields as they are.

When you click on Review, you will see the following review information.

st component review

Click on Create to proceed.

3. Observe the application overview

You have just created the Parasol application with Red Hat Developer Hub. This application is used by Parasol Customer Service Representatives to enter, organize, and update existing insurance claims for its customers. An AI-powered chatbot is included for reps to use to answer questions about the claims. This chatbot is driven by an LLM that has been fine-tuned with Parasol Insurance private data, including corporate policies around insurance claims.

3.1. Open component in catalog

When all of the initialization steps are successful (green check mark), click Open Component in catalog.

task activity

Dev Hub will open a new tab with the component information. Take a few moments to review the Deployment summary on the overview page.

It may take a minute or two for items to appear in the Deployment summary section.
parasol overview

3.2. View source

Click on VIEW SOURCE to access the new source code repository created.

parasol source

Go back to your Parasol component on Red Hat Developer Hub: Red Hat Developer Hub UI.

3.3. Review continuous integration and delivery (CI/CD)

Click on CI tab to review your pipeline information. The pipeline will be automatically triggered and run. After a few minutes, you will see the pipeline finished as Succeeded.

parasol pipeline

Click on CD to review ArgoCD History.

frontend argohistory

Click on TOPOLOGY to review your deployment status. Then, you will see the deployment parasol-app-user1 in the Topology.

If the deployment shows up as red, make sure to wait until the Pipeline Run on the CI tab completes successfully.
parasol deployment

3.4. Verify the deployment

Access the Parasol web page to verify everything is working as expected.

parasol ui web

3.4.1. Explore the Parasol application

Select the claim number, CLM195501 to view the claim details such as summary, documents, etc.

Click on the Chatbot icon on the right bottom to open the chatbot popup.

claim view

3.4.2. Play with the AI chatbot

As a Parasol customer service representative, try to ask any questions about the claim to the AI chatbot. For example, you can ask if the policy is still covered or not for this car incident.

Please clarify Parasol's policy coverage for this specific claim in 4 sentences or less.

Then, click on paper airplane icon (or press Enter) to send the query. The AI chatbot will connect to the trained Parasol LLM and respond with an answer.

If nothing happens when you click the paper airplane icon, please refresh the page and try again.

You will see the answer in a few seconds. The answer provided may differ from what is shown below, but in general it should include Parasol-specific policy requirements from the data that was used to train the model.

chatbot query

Congratulations, you’ve confirmed that the existing Parasol application works! let’s look at the insurance app and start diving in to the real business problem.

4. Log into Red Hat OpenShift Dev Spaces

Go back to the Parasol component in Red Hat Developer Hub. From the OVERVIEW tab click on OpenShift Dev Spaces (VS Code) to make the necessary source code changes.

frontend_devspaces

Click on Log into with OpenShift.

devspaces_login

Log into with the following OpenShift credential on the Red Hat Single Sign-On (RH-SSO) page.

  • Username: user1

  • Password: openshift

You may need to authorize the access to DevSpaces by clicking on Allow selected permissions. If you see the following dialog, click Allow selected permissions.

devspaces_authorize

Click Continue to proceed creating a new workspace from this source.

devspaces_trust_authors

Authorize devspaces to use your account by clicking on the Authorize button.

devspaces_authorize_user

Wait for your Red Hat OpenShift Dev Spaces workspace to be ready. This can take a few minutes.

You will see a loading screen while the workspace is being provisioned, where Dev Spaces is creating a workspace based on a devfile stored in the source code repository, which can be customized to include your tools and configuration.

devspaces_loading

NOTE: In case your workspace fails to start, you can click on close running workspace and restart to try again.

devspaces_error

Confirm the access by clicking "Yes, I trust the authors".

devspaces_trustauthors

Then you should see:

devspaces_view

5. Add a new generative AI feature

Now you’ll use the Dev Spaces to develop a new Generative AI feature, an email generator for responding to customer queries via email.

5.1. Create a new Gen AI email service

You’ll create a new Java AI service that generates emails based on Quarkus and the LangChain4j library. The Quarkus LangChain4j extensions bridge the gap between your Quarkus application and LangChain4j, a library that allows interaction with various LLMs like OpenAI, Hugging Face models, or Ollama, with the following key features and benefits:

  • Key Features

    • Declarative AI Services: Define how you want to interact with the LLM using annotations or configuration files.

    • Embedding Support: Integrates with document embedding stores like Redis, Chroma, or Infinispan to store and retrieve document context for the LLM.

    • Observability Integration: Allows monitoring and logging of LLM interactions within your Quarkus application.

    • Pluggable Authentication: Supports different authentication providers for accessing LLM services.

  • Benefits

    • Simplified LLM Integration: The extension streamlines the process of incorporating LLMs into your application, saving development time and effort.

    • Declarative Approach: It offers a declarative way to interact with LLMs, making the code more readable and maintainable. You specify what you want the LLM to do, and the extension handles the underlying communication.

    • Embedding Support: Supports Diverse LLMs: The extension is designed to work with a variety of LLM providers, giving you flexibility in choosing the LLM that best suits your needs.

5.1.1. Create a new branch in Gitlab

Open a Terminal window in the VS Code workspace.

new-terminal

Before you begin developing your new feature, you need to create a new branch in Gitlab called new-gen-ai-service. Open a terminal in the VS Code workspace. Run the following git command to create the new branch.

git checkout -b new-gen-ai-service

5.1.2. Get started with live coding

Before you start coding, you need to start with the Quarkus Dev Mode that is a powerful feature to significantly speed up the development lifecycle of Quarkus applications. It provides hot reload capabilitiesn (Live Coding), allowing you to see the results of your code changes instantly without requiring a full application restart.

Run the following command in the VS Code terminal to start Quarkus Dev Mode.

./mvnw clean quarkus:dev

The output should look similar to the following.

....
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
INFO  [io.quarkus] (Quarkus Main Thread) insurance-app 1.0.0-SNAPSHOT on JVM (powered by Quarkus xx.xx.xx) started in 19.615s. Listening on: http://0.0.0.0:8080
INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [agroal, cdi, hibernate-orm, hibernate-orm-panache, jdbc-h2, langchain4j, langchain4j-ollama, langchain4j-openai, langchain4j-websockets-next, narayana-jta, quinoa, qute, rest, rest-client, rest-client-jackson, rest-jackson, smallrye-context-propagation, vertx, websockets-next]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>

Validate your local Parasol application against the production version by accessing the Parasol web page (it may take up to a minute to come up - wait for the "Listening on…​" message as shown above).

parasol ui web

5.1.3. Preview the changes you need to make

To add the new feature, you will either create or edit the following files. Use this list as a checklist to ensure you’ve made all the changes. If you get errors when you try to run the app, be sure each file was changed as described in the instructions below!

  • src/main/java/org/parasol/model/Email.java - A Java record defining an incoming email from a customer

  • src/main/java/org/parasol/model/EmailResponse.java - A Java record defining a response (subject+message)

  • src/main/java/org/parasol/ai/EmailService.java - interface for interacting with the underlying LLM

  • src/main/java/org/parasol/resources/EmailResource.java - A REST-like web frontend interface

  • src/main/resources/application.properties - The Quarkus configuration where you’ll define the parameters for connecting to the LLM inference service

  • src/main/webui/src/app/components/EmailGenerate/EmailGenerate.tsx - A React web component providing a simple interface for providing a customer email

  • src/main/webui/src/app/routes.tsx - A list of React routes to which you’ll add the new Email generator component

5.1.4. Create Java records beans

Create a new Java record, Email.java in the src/main/java/org/parasol/model directory to carry email data in a concise and immutable way.

To create this file, right-click on the model directory in the file tree, then select "New File…​" and enter the name of the new file Email.java. The empty file will open.

new-file

Copy the following code and paste it into the content editor.

package org.parasol.model;

public record Email(String text) { }

Where is the Save button? VS Code will autosave your changes, that is why you can’t find a SAVE button - no more losing code because you forgot to save. You can undo with CTRL-Z (or CMD-Z on a Mac) or by using the Edit → Undo menu option.

Next, create a new Java record, EmailResponse.java in the src/main/java/org/parasol/model directory to store the response from the LLM. Copy the following code and paste it into the EmailResponse.java file.

package org.parasol.model;

public record EmailResponse(String subject, String message) { }

5.1.5. Create Java AI service

Create a new Java file, EmailService.java in the src/main/java/org/parasol/ai directory to serve as the AI Service connection point between your application and the LLM. Copy the following code and paste it into the EmailService.java file.

package org.parasol.ai;

import org.parasol.model.EmailResponse;

import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import io.quarkiverse.langchain4j.RegisterAiService;

@RegisterAiService(modelName = "parasol-email")(1)
public interface EmailService {
    @SystemMessage("""(2)
      You are a helpful, respectful and honest assistant named "Parasol Assistant".

      You are responding to customer emails. Provide a friendly response that is written by Parasol. The response should thank them for being a customer. Include information about when parasol insurance was founded.

      Your response must look like the following JSON:

      {
        "subject": [A good one-line greeting],
        "message": [Your response, summarizing the information they gave and ask the customer for any follow-up information needed to file a claim]
      }
      """)
    EmailResponse chat(@UserMessage String claim);(3)
}
1 @RegisterAiService annotation is pivotal for registering the AI Service, represented as a Java interface.
2 @SystemMessage annotation defines the scope and initial instructions, serving as the first message sent to the LLM. It delineates the AI service’s role in the interaction.
3 @UserMessage annotation defines primary instructions dispatched to the LLM. It typically encompasses requests and the expected response format.

5.1.6. Create Jakarta REST resource

Create a new Java file, EmailResource.java in the src/main/java/org/parasol/resources directory to serve a new REST endpoint. Copy the following code and paste it into the EmailResource.java file.

package org.parasol.resources;

import jakarta.inject.Inject;
import jakarta.ws.rs.Consumes;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;

import org.parasol.ai.EmailService;
import org.parasol.model.Email;
import org.parasol.model.EmailResponse;

@Produces(MediaType.APPLICATION_JSON)
@Path("/api/email") (1)
public class EmailResource {

    @Inject
    EmailService bot;

    @POST
    @Consumes(MediaType.APPLICATION_JSON)
    public EmailResponse getresponse(Email claimEmail) {
        return bot.chat(claimEmail.text());
    }
}
1 @Path annotation defines the URL path for the resource.

5.1.7. Add new LLM model configurations

Open the existing application.properties file in the src/main/resources directory to append the following Langchain4j configuration values.

quarkus.langchain4j.parasol-email.chat-model.provider=openai(1)
quarkus.langchain4j.openai.parasol-email.chat-model.temperature=0.3(2)
quarkus.langchain4j.openai.parasol-email.timeout=600s(3)
quarkus.langchain4j.openai.parasol-email.chat-model.model-name=parasol-instruct(4)
quarkus.langchain4j.openai.parasol-email.base-url=http://parasol-instruct-predictor.aiworkshop.svc.cluster.local:8080/v1(5)
1 Specify the model provider (e.g., openai, huggingface). Note that you use the Open AI API specification when you connect to the LLM (parasol-instruct) inference endpoint
2 Set the model temperature. Temperature is a parameter used in natural language processing models to increase or decrease the “confidence” a model has in its most likely response
3 Specify the timeout between question and response in the LLM
4 Specify the model name to connect to
5 Specify the base URL of the LLM inference endpoint that the application will connect to

5.2. Update the frontend web application in Parasol Insurance

Let’s update the frontend React web application to give our customer service reps a nice interface for generating emails.

5.2.1. Create new React TypeScript component

Create a new EmailGenerate directory in the src/main/webui/src/app/components directory. Also, create a new TypeScript XML file, EmailGenerate.tsx in the src/main/webui/src/app/components/EmailGenerate directory to render the output of the LLM in the email subject and body content. Copy the following code and paste it into the EmailGenerate.tsx file.

import config from '@app/config';
import { Button, Form, FormGroup, TextArea, Spinner } from '@patternfly/react-core';
import * as React from 'react';
import { useState } from 'react';

interface ResponseData {
    subject: string;
    message: string;
  }

const EmailGenerate: React.FunctionComponent = () => {

    const [text, setText] = useState('');
    const [error, setError] = useState('');
    const [response, setResponse] = useState<ResponseData | null>(null);
    const [loading, setLoading] = useState(false);

    const handleSubmit = async (event: React.FormEvent) => {
      event.preventDefault();
      setLoading(true);

      try {
        const response = await fetch('/api/email', {
          method: 'POST',
          headers: {
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({ text: text })
        });
        console.log("response: ");
        console.log(response);
        if (response.ok) {
          const data = await response.json();
          setResponse(data);
          setError('');
        } else {
          setError('Error: Failed to fetch response from server.');
        }
      } catch (error) {
        setError('Error!');
      } finally {
        setLoading(false);
      }

    };

    return (
        <div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100vh' }}>

        <Form onSubmit={handleSubmit} style={{ width: '800px', textAlign: 'center' }}>
        <FormGroup label="Your Feedback" fieldId="text-area">
          <TextArea
            onChange={(value) => setText(value.target.value)}
            name="textArea"
            id="text-area"
            aria-label="Your feedback"
            placeholder="Enter customer email content here"
            style={{ width: '100%' }}
          />
        </FormGroup>
        <Button type="submit">Submit</Button>
        {loading && <Spinner style={{justifyContent: 'center', alignItems: 'center'}} size="lg" />}
        {response && (
          <div id="email-response" style={{ marginTop: '20px', color: 'blue', textAlign: 'left', width: '100%' }}>
            <div id="email-response-subject" style={{ fontWeight: 'bold', fontFamily: 'Arial' }}>Subject: {response.subject}</div>
            <pre id="email-response-message" style={{ whiteSpace: 'pre-wrap', wordWrap: 'break-word', fontFamily: 'monospace', border: '1px solid black', padding: '10px' }}>
              {response.message}
            </pre>
          </div>
        )}

        {error && (
            <div style={{ marginTop: '20px', color: 'red', textAlign: 'left', width: '100%' }}>{error}</div>
        )}

      </Form>
    </div>

    )
}

export { EmailGenerate };

This interface allows customer service representatives to copy and paste the customer email into the box, and then it generates a response email. That’s the feature you are adding here.

5.2.2. Add a new menu item in the navigation bar

Open the routes.tsx file in the src/main/webui/src/app directory and uncomment the following code out in line 8 and 89 - 95 to show the new menu item.

For example, press Ctrl+/ on Windows or Cmd+/ on macOS to comment out the code.

import { EmailGenerate } from './components/EmailGenerate/EmailGenerate';
{
  component: EmailGenerate,
  exact: true,
  label: 'Email Generate',
  path: '/EmailGenerate',
  title: 'Email Generate'
},

5.2.3. Local test the new feature

Before committing, do a quick functional test locally to ensure you got all the changes correct. If you stopped the Quarkus dev mode, start it again.

Reload the Parasol web page.

If you’re still seeing the old page, try refreshing the page without the browser caches by pressing Ctrl+F5 or Cmd+Shift+R on macOS.

The new Email Generate menu item will appear on the left panel. Click on it.

new parasol ui web

Try to submit a simple draft email content. Copy/paste in the following email received from a customer:

    Dear Parasol Insurance Team,

    My name is Dominic Toretto.

    I hope this email finds you well. I'm reaching out to file a claim regarding a recent incident involving my car, which is covered under my policy with Parasol. The accident occurred last night on the streets of Los Angeles, and I wanted to provide you with all the necessary details.

    Location: The accident took place at the intersection of Sunset Boulevard and Vine Street in downtown Los Angeles. It was one of those crazy nights, where the streets were alive with the sound of engines and the glow of neon lights.

    Circumstances: So, here's the deal. I was out cruising with the crew, enjoying the vibe of the city, when suddenly we found ourselves in the middle of a high-speed chase. There was this dude, let's call him Johnny Tran for the sake of this email, who thought he could outmaneuver us. Little did he know, we don't play by the rules.

    Anyway, Johnny pulled some slick moves, cutting through traffic like a bat outta hell. Naturally, being the king of the streets that I am, I had to show him what real speed looks like. So, I hit the nitrous and went full throttle.

    But then, outta nowhere, this semi-truck decided to make a left turn without signaling. I had to make a split-second decision, and I ended up launching my car off a ramp, trying to clear the truck like we're in one of those crazy action flicks. It was like something straight outta the movies, I tell ya.

    Long story short, the stunt didn't exactly go as planned. My car ended up crashing into a billboard, flipping over a couple of times before finally coming to a stop. Yeah, it was a total wreck. But hey, at least we walked away without a scratch, just a little shaken, not stirred, if you catch my drift.

    Damage: As for the damage to my car, let's just say its gonna need more than a few wrenches and some duct tape to fix this baby up. The front end is smashed in, the windows are shattered, and I''m pretty sure the chassis is twisted beyond recognition. It''s gonna take a miracle to get her back on the road.

    I understand that accidents happen, but Im counting on Parasol to have my back in times like these. Ive been a loyal customer for years, and I trust that you'll handle my claim with the same speed and precision that I handle my rides.

    Please let me know what steps I need to take to get the ball rolling on this claim. I'm ready to do whatever it takes to get my car back in top shape and back on the streets where it belongs.

    Looking forward to hearing from you soon.

Click on Submit to generate the email subject and body. It will take a few seconds to receive the result (generated data) from the Parasol Instruct LLM model.

generated email

Great! Now you’re ready to merge this code into the application. We’ll create a pull request which will automatically build the new app so that we can test it.

6. Create a new pull request

Create a new pull request (PR) to add the new Gen AI feature in the Parasol Insurance’s application.

6.1. Commit your source code changes

Click on the Source Control icon. Then, follow the next steps.

  • Add a Message (e.g., Add a new email feature) for the commit.

  • Click on Commit arrow.

  • Select the option Commit & Push.

]

In Git, code changes are typically staged before being committed. This staging process allows you to selectively choose which parts of your code to include in the next commit. While using remote branches is generally recommended for collaborative development and managing code across multiple machines, in this workshop, we’ll streamline the process by creating a pull request directly to your working repository. This will help us focus on the core concepts and techniques without getting bogged down in the complexities of remote branches.

Confirm the following 3 popups.

dev confirmed

6.2. Merge the pull request

Go to the Gitlab. Click on the Create merge requests to merge the pull request. If you don’t see the merge request, refresh the page.

create merge

You will see the details of the New merge request page. Fill out the form and click on Create merge request.

  • Description: This is a new Gen AI feature to generate an email body and subject in the Parasol Insurance.

  • Assignee: user1 GitLab - click on the Assign to me

  • Reviewer: select user1 GitLab

new merge

The reviewer and assignee should be different in reality. To make the PR process easier, you can use the same user.

You can also search for the PR request in Developer Hub.

pr devhub

6.3. Review the changes

Select the Changes tab in the Gitlab to review what code has changed in the pull request. This should be done by an application architect or senior developer in general.

review pr

Switch back to the Overview tab and click on Merge to merge the pull request. Note that the reviewer usually approves the pull request before merging.

merge pr

A few seconds later, the pull request will be merged.

pr merged

The PR merge will trigger a new pipeline that will deploy the new Gen AI feature in the Parasol Insurance’s application.

7. Monitor the new deployment

Your source code changes triggered a new pipeline to update the version of the frontend application.

Monitor if the new deployment rolls out by the OpenShift GitOps in the Dev Hub web console.

Go back to your frontend component on the Red Hat Developer Hub: Red Hat Developer Hub UI.

Explore the pipelines by clicking on the CI tab. A new pipeline will be triggered to build the new Gen AI feature. Wait for pipeline to finish.

frontend newpipeline

Congratulations! You have finished deploying a new Gen AI feature in the Parasol Insurance. You can now test the new feature in your git request.

8. Verify the new app’s functionality

Reload the Parasol web page in production to verify everything is working as expected. Ensure not to reload the local page when you were testing using Quarkus dev mode.

If you’re still seeing the old page, try refreshing the page without the browser caches by pressing Ctrl+F5 or Cmd+Shift+F5 on macOS.

The new Email Generate menu item will appear on the left panel. Click on it.

new parasol ui web

Try to submit a simple draft email content. Copy/paste in the following email received from a customer:

    Dear Parasol Insurance Team,

    My name is Dominic Toretto.

    I hope this email finds you well. I'm reaching out to file a claim regarding a recent incident involving my car, which is covered under my policy with Parasol. The accident occurred last night on the streets of Los Angeles, and I wanted to provide you with all the necessary details.

    Location: The accident took place at the intersection of Sunset Boulevard and Vine Street in downtown Los Angeles. It was one of those crazy nights, where the streets were alive with the sound of engines and the glow of neon lights.

    Circumstances: So, here's the deal. I was out cruising with the crew, enjoying the vibe of the city, when suddenly we found ourselves in the middle of a high-speed chase. There was this dude, let's call him Johnny Tran for the sake of this email, who thought he could outmaneuver us. Little did he know, we don't play by the rules.

    Anyway, Johnny pulled some slick moves, cutting through traffic like a bat outta hell. Naturally, being the king of the streets that I am, I had to show him what real speed looks like. So, I hit the nitrous and went full throttle.

    But then, outta nowhere, this semi-truck decided to make a left turn without signaling. I had to make a split-second decision, and I ended up launching my car off a ramp, trying to clear the truck like we're in one of those crazy action flicks. It was like something straight outta the movies, I tell ya.

    Long story short, the stunt didn't exactly go as planned. My car ended up crashing into a billboard, flipping over a couple of times before finally coming to a stop. Yeah, it was a total wreck. But hey, at least we walked away without a scratch, just a little shaken, not stirred, if you catch my drift.

    Damage: As for the damage to my car, let's just say its gonna need more than a few wrenches and some duct tape to fix this baby up. The front end is smashed in, the windows are shattered, and I''m pretty sure the chassis is twisted beyond recognition. It''s gonna take a miracle to get her back on the road.

    I understand that accidents happen, but Im counting on Parasol to have my back in times like these. Ive been a loyal customer for years, and I trust that you'll handle my claim with the same speed and precision that I handle my rides.

    Please let me know what steps I need to take to get the ball rolling on this claim. I'm ready to do whatever it takes to get my car back in top shape and back on the streets where it belongs.

    Looking forward to hearing from you soon.

Click on Submit to generate the email subject and body. It will take a few seconds to receive the result (generated data) from the Parasol Instruct LLM model.

generated email

You’ve confirmed what the new Email feature in the Parasol application look like and how it works. Notice that this email includes specific details that Parasol needs, since we are using the fine-tuned model with Parasol-proprietary policy information! This will help our customer service reps in their interactions with customers.

9. Conclusion

We hope you have enjoyed this module!

Here is a quick summary of what we have learned:

  • How Red Hat Developer Hub enables you to build, deploy, and manage an AI application (Parasol).

  • How to develop new Generative AI features with a fine-tuned LLM model using Red Hat’s cloud IDE, Red Hat Dev Spaces on Red Hat OpenShift.

  • How to release the new Gen AI feature using GitOps practices in Developer Hub and Red Hat OpenShift AI.