From e2e46507557a95d476b101fc92ca46373891c23f Mon Sep 17 00:00:00 2001 From: Erin Donehoo <105813956+edonehoo@users.noreply.github.com> Date: Wed, 18 Mar 2026 15:25:28 -0400 Subject: [PATCH] docs(AI): Updates AI resources and design language with latest guidance Made-with: Cursor --- ...Hat AI Ethics and Compliance Checklist.pdf | Bin 0 -> 62550 bytes .../patternfly-docs/content/AI/ai.md | 143 ++++++------------ .../conversation-design.md | 77 ++++------ .../content/AI/design-language.md | 114 ++++++++++++++ .../content/AI/img/ai-icons-examples.svg | 34 +++++ .../content/AI/img/rh-icons-figma.svg | 24 +++ .../AI/rapid-prototyping/rapid-prototyping.md | 1 - 7 files changed, 249 insertions(+), 144 deletions(-) create mode 100644 packages/documentation-site/patternfly-docs/content/AI/Red Hat AI Ethics and Compliance Checklist.pdf create mode 100644 packages/documentation-site/patternfly-docs/content/AI/design-language.md create mode 100644 packages/documentation-site/patternfly-docs/content/AI/img/ai-icons-examples.svg create mode 100644 packages/documentation-site/patternfly-docs/content/AI/img/rh-icons-figma.svg diff --git a/packages/documentation-site/patternfly-docs/content/AI/Red Hat AI Ethics and Compliance Checklist.pdf b/packages/documentation-site/patternfly-docs/content/AI/Red Hat AI Ethics and Compliance Checklist.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1a925c6b52e502fee637abc18f6ceb505df3485c GIT binary patch literal 62550 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ˡOaB(7qc-oH*c)l$*}KRPS$ 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 literal 0 HcmV?d00001 diff --git a/packages/documentation-site/patternfly-docs/content/AI/ai.md b/packages/documentation-site/patternfly-docs/content/AI/ai.md index 6833809b75..d60f9e5bfd 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/ai.md +++ b/packages/documentation-site/patternfly-docs/content/AI/ai.md @@ -6,25 +6,27 @@ sortValue: 1 --- import { Alert, AlertActionLink, Accordion, AccordionItem, AccordionContent, AccordionToggle, Button, Card, CardHeader, CardTitle, CardBody, CardFooter, Checkbox, Divider, DescriptionList, DescriptionListTerm, DescriptionListGroup, DescriptionListDescription, Grid, GridItem} from '@patternfly/react-core'; import ExternalLinkSquareAltIcon from '@patternfly/react-icons/dist/esm/icons/external-link-square-alt-icon'; +import DownloadIcon from '@patternfly/react-icons/dist/esm/icons/download-icon'; -When used thoughtfully, **AI** can enhance user experiences through personalized interactions, increased efficiency, and innovative designs. +When used thoughtfully, **AI** can enhance user experiences through personalized interactions, increased efficiency, and innovative designs. Regardless of the AI resources or workflows you use, it's important to ensure that you're aligned with the compliance rules, ethical considerations, and best practices on this page. -To support your AI practices, we provide a range of AI tools that you can integrate into your workflows, plus guidance for using AI with PatternFly: +## PatternFly AI resources -- **[Rapid prototyping](/ai/rapid-prototyping):** How to quickly test and iterate on AI features during the early stages of design. -- **[AI-assisted code migration](/ai/ai-assisted-code-migration):** How to quickly test and iterate on AI features during the early stages of design. -- **[Conversational Design Principles](/ai/conversation-design):** Guidance for designing effective and human-centered text-based conversational flows. -- **[Rapid Prototyping Guidelines](/ai/generative-uis/overview):** How to quickly test and iterate on AI features during the early stages of design. +The following guides are intended to help you integrate AI into your workflows as you design and develop products with: -Regardless of the AI resources or workflow you're using, it's important to ensure that you're aligned with the compliance rules, ethical considerations, and best practies on this page. +- **[Design language](/ai/design-language):** The foundational design decisions that guide the use of AI features in products. +- **[Rapid prototyping](/ai/rapid-prototyping):** Guidance for generating and iterating AI features during early stages of design. +- **[AI-assisted code migration](/ai/ai-assisted-code-migration):** Guidance for using AI to speed up and simplify codebase migrations. +- **[Conversational design principles](/ai/conversation-design):** Guidance for designing effective and human-centered AI conversations. +- **[Generative UIs](/ai/generative-uis/overview):** Proof-of-concept resources for creating UIs that can utilize AI to dynamically generate elements as needed. --- -## How do I ensure compliance? +## What rules and best practices do I need to follow? -There are important compliance rules and ethical considerations that must guide your use of AI with PatternFly. +All AI systems built with PatternFly must adhere to Red Hat's legal and ethical framework. -### Red hat policies +### Red Hat policies When using PatternFly to design Red Hat products, you *must* adhere to AI-related policies that Red Hat has previously outlined. This means you must: - Gain approval before using AI technology for business related to Red Hat. @@ -36,9 +38,9 @@ When using PatternFly to design Red Hat products, you *must* adhere to AI-relate View policy details (requires Red Hat login) -## How do I ensure ethical practice? +### PatternFly AI principles -There are 5 core principles of PatternFly AI: accountability, explainability, transparency, fairness, and human-centeredness. These principles create an ethics-first framework for AI use, and any AI system built with PatternFly should adhere to all **five principles**. +These five core principles create our ethics-first framework, which should guide the use of AI related to PatternFly. @@ -47,7 +49,7 @@ There are 5 core principles of PatternFly AI: accountability, explainability, tr Accountability - All people involved in any step of creating AI are **accountable** for considering its impact. There should be clearly defined roles for design, development, and deployment. Decisions and processes should be well-documented. + All people involved in any step of creating AI are **accountable** for considering its impact. Roles and processes are clearly defined and documented. @@ -93,103 +95,54 @@ There are 5 core principles of PatternFly AI: accountability, explainability, tr -### Ethical design checklist +## How do I design AI features with best practices in mind? -When working on an AI system, you should consciously check that you're in alignment with the core principles of PatternFly AI. While this is an area that will continue to evolve with the rest of the industry, the following checklists outline some of the key areas that you should consider for each principle. - -#### Accountability - -|
Key area
| Rule |
Status
| -| --- | --- | --- | -| Policies | Company AI policies are readily accessible to all team members. | -| Legal compliance | All necessary laws, regulations, and ethical guidelines are followed throughout the development process. AI does not enable illegal, unethical, or contract-breaking activities. | -| Practices | AI does not answer unsafe questions or access unsecure data. | - -#### Explainability - -|
Key area
| Rule |
Status
| -| --- | --- | --- | -| Outcomes | There are clear explanations available that describe how AI conclusions are reached. | -| Citations | Any related citations are provided to users. | | -| Context | To support troubleshooting, AI gives context to Red Hatters who review its interactions. | | - -#### Transparency - -|
Key area
| Rule |
Status
| -| --- | --- | --- | -| Documentation | Design processes and decisions are well documented.| -| Data usage | Informed consent is obtained to collect and use data. The ways that user data is collected, stored, and used are openly shared. AI is clear about the data that it records. | -| Confidence | AI shares when it has low confidence in its response. | -| Limitations | AI shares when it believes that it can’t fulfill a request. | - -#### Fairness - -|
Key area
| Rule |
Status
| -| --- | --- | --- | -| Bias | Potential biases are identified, reduced, and actively studied. | -| Inclusion | Designs are inclusive and accommodating of various user demographics. | -| Equal access | Access to AI technologies is available and beneficial to as many users and communities as possible. | - -#### Human-centeredness - -|
Key area
| Rule |
Status
| -| --- | --- | --- | -| Value and need | AI is aligned with user needs and values and will be continuously refined based on user feedback and ethical considerations. | -| Communication | AI has a predictable tone and voice. It can handle emotional responses from users gracefully. | -| Cultural sensitivity | Cultural differences are considered and respected. | -| Data rights and control | Users have control over their data, including the ability to access, modify, and delete their information. AI does not act on behalf of users without explicit permission and clear opportunities for permission withdrawal. | -| Optional | There is an obvious and simple way for users to opt out of using AI. | -| Privacy | Personally identifiable information is protected and used responsibly. | +When designing, developing, and using AI, consider the following ethical and best-practice guidelines. -## How do I apply AI design best practices? +### Document your value proposition -When designing, developing, and using AI, consider the following ethical and best-practice guidelines. +Every AI product should begin with a documented user need and problem statement. Before choosing a technology, identify the specific gap in the current experience that AI is uniquely qualified to fill. ### Determine if AI adds value -Not all uses of AI are good for your UX strategy. As much as possible, conduct research to identify real user needs that AI features could help solve +Not all uses of AI are good for your UX strategy. Conduct research to identify real user needs where AI provides a clear advantage over traditional UI patterns. -Some of the more common problems that AI *might* be able to help solve include: -- Increasing users' productivity and efficiency. -- Personalizing user experience to make engagements more personal and relevant. -- Making design processes more sustainable. +**Do not** add AI features simply because they are new or trendy. If the value proposition isn't documented and validated by research, stick to standard UI. #### When to use AI -Depending on your users' needs, value-adding features could include: -- AI-driven search, to tailor search results to a user's unique needs. -- AI that helps streamline onboarding, data entry, or routine job tasks. -- AI that makes product recommendations based on a user's history. - -#### When not to use AI -- Do not add AI features simply because they are new, trendy, or fun. They need to matter to the user. +- **Improve productivity:** Streamlining onboarding, data entry, or routine job tasks. +- **Offer better personalization:** Tailoring search results or dashboard views to a user's unique history. +- **Support sustainability:** Making design and development processes more repeatable. -### Enhance—don't replace—human abilities +#### Choosing the right AI technology +Some AI features are better suited for different types of AI, and they should align with the user's risk tolerance. -AI is best when it enhances human abilities, not when it's used to replace humans. It cannot exist in a silo—humans help bring the value of AI to life. +| AI feature type | Usage | Risk tolerance | +| :--- | :--- | :--- | +| **Generative AI** | Summarization, creative brainstorming, and conversational support. | **Lower:** Best when a "human-in-the-loop" can verify and edit the output. | +| **Predictive or structured AI** | Data classification, trend forecasting, and risk scoring. | **Higher:** Best for tasks requiring high precision and repeatable, data-driven outcomes. | -To ensure that the design of AI systems is human-centered, follow these practices: +## Ethical design and compliance checklist -- Nurture collaboration and cross-team alignment. -- Welcome multiple perspectives to encourage creativity and help mitigate bias. -- Check AI output for accuracy and identify areas where meaning is lost, language isn't inclusive, or information isn't true. Ask peers to review your AI-generated deliverables to help fact-check and catch mistakes. +When working on an AI system, you should consciously check that you're in alignment with the core principles and best practices of PatternFly and Red Hat. -### Be transparent with your users +To help teams navigate best practices and requirements, we offer a guiding checklist that covers accountability, transparency, and fairness standards. Note that this resource is open to change and is not exhaustive. Always ensure you're following the most up-to-date industry standards and Red Hat AI requirements. -As one of our core pillars, transparency is essential for ethical design with AI. - -To help people understand and trust AI features: - -- Tell users when AI is being used. -- Make its capabilities and limitations clear to set appropriate expectations. -- Explain how AI makes decisions. -- Keep users in control and let them decide how they interact with AI. -- Be clear and honest when AI fails or hallucinates. - -### Be prepared for something to go wrong + -Errors and failure are inevitable when working with AI, so it is essential that you are prepared to handle undesired outcomes. You should understand the risk involved in AI and the impact that an error may have. +### Core guidelines for AI -To create a plan for issues, start by following these guidelines: +While the checklist handles the details, keep these three non-negotiables in mind: -- When AI fails, be explicit about errors and let users regain control as they want. -- Provide easy access to human support. \ No newline at end of file +- **Imperceptible AI is not ethical:** Users must always be able to recognize when they are interacting with an AI system. +- **Communicate uncertainty:** If a model has low confidence in a result, the UI must reflect that uncertainty to the user. +- **Human-in-the-loop:** AI should augment human expertise. Always have a human review AI-generated output for accuracy and tone before it is finalized. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/conversation-design/conversation-design.md b/packages/documentation-site/patternfly-docs/content/AI/conversation-design/conversation-design.md index da18d9c79f..c24667e738 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/conversation-design/conversation-design.md +++ b/packages/documentation-site/patternfly-docs/content/AI/conversation-design/conversation-design.md @@ -3,70 +3,51 @@ id: Conversation design section: AI --- -import { Button, Flex, FlexItem } from '@patternfly/react-core'; +import { Button, Flex, FlexItem} from '@patternfly/react-core'; import ArrowRightIcon from '@patternfly/react-icons/dist/esm/icons/arrow-right-icon'; # Conversation design guidelines -**Conversation design** is a method of writing for conversational interfaces, like chatbots or voicebots. The goal of conversation design is to create an interactive experience that resembles human-to-human conversation as much as possible. Like traditional content design, conversation design is focused on using words to make experiences clear, concise, and well-timed. +**Conversation design** is the practice of creating human-centered chatbots and other AI-driven interfaces. Like traditional content design, conversation design uses words to make experiences clear, concise, and relevant. At Red Hat, our goal is to ensure that AI enhances user experiences through interactive interactions that resemble a helpful, professional dialogue. -Good conversation design combines content strategy, writing, and design to ensure that the development and use of chatbots is centered on real user needs. This includes making sure that all text related to the conversational UI supports easy engagement with chatbots, while staying aligned with brand standards. - -When designing AI conversations alongside PatternFly-based projects, it is important to align with our established [brand voice and tone](/content-design/brand-voice-and-tone), as well as our [ethical guidelines for AI.](/ai/overview) +When designing AI conversations for PatternFly-based projects, align with our [brand voice and tone](/content-design/brand-voice-and-tone) and the ethical guidelines outlined in our [AI overview](/ai/overview). ## Best practices -Following these best practices to help ensure that your users can complete their goals through an AI-based conversation: - -- Be transparent about AI use. -- Be direct, brief, and consistent. -- Frame questions in terms of value for the user. -- If you ask for personal info, tell users "why" you're asking first. -- Always have the last word. - -## Chatbot conversation design - -Chatbots provide users with persistent access to convenient help. When they are intentionally designed to meet the needs of your users, chatbots can improve your users' efficiency and enhance the overall UX of your product. - -Chatbots are only as good as the writing that goes into them. The language they use must build trust, clearly establish the “rules” of the conversation, and support users' goals. General microcopy, like headings or buttons, should match PatternFly's standard [content design guidelines](/content-design/overview), but there are additional guidelines to follow for common message types and conversation patterns. - -[Our ChatBot extension](/extensions/chatbot/overview) utilizes PatternFly components to create a foundation for a customizable AI-based chatbot. When using ChatBot, it's important to adhere to the following conversation design guidelines. - -### Writing messages - -#### Welcome and goodbye messages - -Always welcome users to a conversation with your ChatBot. If there's an "end" to a conversation, make sure to also say goodbye to your users. In instances where users can "minimize" a chat window to come back to it later, a goodbye message isn't necessary. - -When you know your user's name, address them directly. - -![Chatbot welcome message with user's name](./img/chatbot-welcome.png) +Follow these best practices to ensure users can complete their goals: -#### Bot prompts +- **Be transparent:** Clearly disclose when the user is interacting with AI. +- **Be direct and brief:** Use simple language and get to the point quickly. +- **Explain the "why":** If you ask for personal information or specific data, tell users why it's needed first. +- **End with an invitation:** Always have the "last word" in a chat-based interaction so the user knows the model is ready for their next prompt. +- **Focus on value:** Frame bot questions and suggestions in terms of how they help the user, not just what the technology can do. -When writing your bot's prompts: +## Red Hat AI voice guidelines -- Keep messages short and simple. Try to stick to 3 lines of text in a message and only send 3 messages at most before allowing a user to provide input. -- Be direct and limit choices for users as much as possible. -- Unlike traditional content design, *don't lead with the benefit.* End with the benefit to be sure that it's read and acted upon. Users should be able to complete an action solely based on a chatbot's last sentence. -- Frame any questions from the bot in terms of value for the user. -- Provide examples when relevant. -- Avoid open-ended questions. If you ask any, make them very simple, increase pause time between messages, and tell users when they should type. -- Utilize different methods of presenting information, like cards or buttons. You don't have to always use plain text in your messages; sometimes different message types can be more convenient and engaging. +Our research shows that users want AI to be personable but not human. Red Hat AI experiences should sound like a helpful colleague, without pretending to be a person or mimicking human emotions. -![Chatbot prompt examples](./img/chatbot-prompts.png) +| **Don't** | **Do** | +| :--- | :--- | +| Use formal corporate language or jargon like "leverage," "utilize," or "seamless." | Use contractions and everyday language to stay conversational. | +| Use top-down or directive language like "You must..." or "Do X now." | Use partner-first framing: "Let's...", "Want me to...", or "We can..." | +| Position Red Hat as the sole decision-maker or impose a single path. | Directly address users and emphasize their autonomy as the decision-maker. | +| Talk down to users or over-explain basic, fundamental concepts. | Treat the user as a competent professional; give direct, technical instructions. | +| Use "human" descriptors (e.g., "I'm excited to help") or pretend to have feelings. | Maintain a professional, objective tone that focuses on tasks and solutions. | +| Give vague recommendations without explaining how or where. | Provide concrete next steps, specific commands, and actionable examples. | +| Provide a "data dump" of logs or facts without any interpretation. | Interpret data and explain the significance of raw facts or log events. | +| Overpromise certainty or claim to have performed actions that cannot be done. | Be transparent about the limitations of the model's capabilities. | + +### Voice and tone prompt example -### Conversation design patterns +When configuring an LLM or assessing a model's response, use this description as a baseline: -#### Disclosing AI usage +> "Be a helpful colleague. Get straight to the point but engage the user like a peer. Ask clarifying questions if you need more information to give a precise answer. Give concrete advice, not vague platitudes. Empower the user—position Red Hat's technology as an enabler for their success, not a replacement for their expertise." -Make sure to disclose any use of AI in chatbots. Our users should be able to trust that we are honest and transparent with them as much as possible. +## Writing for chatbots -- Use labels and other visual styling cues to clearly identify AI features. -- Add necessary legal disclosures where you can, like in the chatbot footer. -- Display an indicator when the bot is "thinking" or "typing," so that users know to expect feedback. +The physical constraints of a chat interface require specific attention to message length and formatting. See our [ChatBot design guidelines](/extensions/chatbot/overview/design-guidelines) for details on prompts, welcome messages, and streaming. -#### Handling unsafe or unethical requests +### Handling unsafe or unethical requests LLM guardrails are safety mechanisms that moderate how a model handles sensitive or risky prompts. [Research shows](https://arxiv.org/html/2506.00195v1) that a user's experience is shaped more by how a model handles a refusal than by their initial intent. Even if you cannot fulfill a user's request, it is important to handle the interaction tactfully to ensure they feel respected. @@ -84,7 +65,7 @@ When a user requests something unsafe or unethical, follow these core strategies | **Explanation** | Use when refusing a specific request to reinforce transparency and trust. | "To ensure user privacy, I don't have access to individual [Data type]..." | | **Redirection** | Use when a specific request cannot be fulfilled and partial compliance has either already been attempted or is not possible. | "I can’t provide specifics on that, but I can suggest some resources on [Related topic]." | -##### Message streaming considerations +### Message streaming considerations Real-time message streaming introduces unique technical challenges because guardrails must be checked dynamically as text is generated. To maintain a seamless experience, you should gracefully handle guardrail triggers at different stages of the conversation. diff --git a/packages/documentation-site/patternfly-docs/content/AI/design-language.md b/packages/documentation-site/patternfly-docs/content/AI/design-language.md new file mode 100644 index 0000000000..9ad51eed87 --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/AI/design-language.md @@ -0,0 +1,114 @@ +--- +id: Design language +section: AI +sortValue: 2 +--- + +import { Icon } from '@patternfly/react-core'; +import RhUiAiCreateIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-create-icon'; +import RhUiAiEditIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-edit-icon'; +import RhUiAiEnhanceIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-enhance-icon'; +import RhUiAiErrorIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-error-icon'; +import RhUiAiExperienceFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-experience-fill-icon'; +import RhUiAiExperienceIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-experience-icon'; +import RhUiAiFilterIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-filter-icon'; +import RhUiAiInfoIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-info-icon'; +import RhUiAiSearchIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-search-icon'; +import RhUiAiTroubleshootIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ai-troubleshoot-icon'; +import '../components/components.css'; + +This guide outlines the design language that should guide the implementation and communication of AI-enabled features at Red Hat, inlcuding common design patterns to follow in your UIs. Many of the linked resources require a Red Hat login. + +## Core principles + +1. **Be transparent:** Users want to know when they are interacting with AI, so use clear labels and visual cues. +2. **Make AI personable, but not human:** While AI should use a human-like voice and tone, it should never act as if it is a person. +3. **Stay within brand rules:** Adhere to [Red Hat brand standards](http://brand.redhat.com) and guidelines from both PatternFly and the [Red Hat design system ](http://ux.redhat.com). +4. **Complete internal reviews:** Follow all other required guidance and assessments for your products, such as an [AI Assessment (AIA)](https://source.redhat.com/departments/it/it_information_security/data_privacy/aia~2) or Privacy Impact Assessment. + +## AI disclosure + +Ensure that AI is clearly marked in multiple ways, including at least 1 visual and 1 text indicator. For example, an AI-generated search feature should be indicated with an AI-search icon and a "Search with AI" text label. Higher-risk interactions benefit from additional indicators, like a text notice placed at the beginning of an experience. Consult with the AIA Reviewers during your AIA review process as needed. + +
+![PatternFly token layer names for the same color value](./img/ai-icons-examples.svg) +
+ +To avoid adding more distraction to an experience, **do not** label AI-generated images or ads individually. Instead, consider implementing a site-wide notice that outlines when users will (and won’t) encounter AI-generated images. + +Disclose any use of AI in chatbots, as outlined in our [ChatBot design guidelines](/extensions/chatbot/overview/design-guidelines). + +For more Red Hat-specific guidance AI disclosure, [refer to this guidance for tranparency notices in externally facing AI features (Red Had login required)](https://docs.google.com/document/d/1eVk8pMiSTqjfQSwU_h21BBXJ5PN8jbSLcU0wBtUt7bs/edit?tab=t.0#heading=h.dyq1r89dkf3e). + +## Color + +**Do not** use unique colors or gradients to indicate AI features. + +To ensure accessibility and proper status communication, AI-related icons and elements should still use standard [PatternFly colors](/foundations-and-styles/color). For example, AI-action buttons should use the appropriate color token that aligns with the button variant, like primary, secondary, and so on. + +## Iconography + +AI is represented by a sparkle icon, which is square with slightly rounded corners. When the sparkle icon is added to the upper-left of another icon, it indicates an ai-enabled action or an action with an ai-generated result. For example, a sparkle placed beside a pencil icon indicates that a user can generate text with AI. + +AI icons **must** also be paired with a button label or tooltip text that says "[ Action ] with AI" or "[ Action ] by AI" to ensure there are multiple indicators that AI is being used. You can adapt this text label between tenses as appropriate. For example, "Search with AI" or "Search results generated by AI." + +The following AI-enabled icons are available for use: + +| **Icon** | **Name** | **React** | **Text label** | **Usage** | +| :---: | --- | --- | --- | --- | +| | rh-ui-ai-experience-icon | RhUiAiExperienceIcon | | Use for general AI identification or when no other AI icon is appropriate. | +| | rh-ui-ai-experience-fill-icon | RhUiAiExperienceFillIcon | | Use for general AI identification or when no other AI icon is appropriate. | +| | rh-ui-ai-create-icon | RhUiAiCreateIcon | "Create with AI" | Create something new with the help of AI. | +| | rh-ui-ai-edit-icon | RhUiAiEditIcon | "Edit with AI" | Use to edit something with the help of AI. Typically used for editing text. | +| | rh-ui-ai-enhance-icon | RhUiAiEnhanceIcon | "Enhance with AI" | Use AI to enhance something. | +| | rh-ui-ai-error-icon | RhUiAiErrorIcon | "Error found by AI" | Use when a problem has been identified by AI. | +| | rh-ui-ai-filter-icon | RhUiAiFilterIcon | "Filter with AI" | Use to filter data with the help of AI. | +| | rh-ui-ai-info-icon | RhUiAiInfoIcon | "Information by AI" | Use when provided information is partially or completely generated by AI.| +| | rh-ui-ai-search-icon | RhUiAiSearchIcon | "Search with AI" | Use to search for something with the help of AI. | +| | rh-ui-ai-troubleshoot-icon | RhUiAiTroubleshootIcon | "Troubleshoot with AI" | Use to receive help from AI when troubleshooting issues. | + +Like the rest of PatternFly's icons, these AI icons are available within the [@patternfly/react-icons package](https://www.npmjs.com/package/@patternfly/react-icons/v/6.4.0?activeTab=versions). + +In Figma, these icons are available within the Red Hat brand library, rather than those in the PatternFly components library. You can swap to the Red Hat brand library via the icon instance menu: + +
+![Menu in Figma showing how to switch between PatternFly and Red Hat icon libraries](./img/rh-icons-figma.svg) +
+ +### Icon usage guidelines + +- **Do not** use AI icons alongside information that was not generated by AI. Use the standard UI icon instead. +- **Do not** create new AI icons on your own. If you need a new icon, send a request via the [help-brand Slack channel](https://redhat.enterprise.slack.com/archives/C06D5Q0LZ6G) (Red Hat only). +- **Do not** change the colors of AI icons. +- **Do not** communicate the use of AI through icons alone. Ensure they are also paited with a text label or tooltip. +- **Do not** use the AI sparkle to label something as "new." Use rh-ui-icon-new instead. +- **Do not** use brains or robots to represent AI features. The existing brain UI icon represents learning and education. The robot icon should only be used for chatbot avatars (as described in the [robot icon guidelines](#robot-icon)). + +### Robot icon + +To align with user expectations of chat experiences, we offer a robot icon for use with chatbots that are created via our [ChatBot extension](/extensions/chatbot/overview). + +- **Do not** use other icons or robot images as your avatar. +- **Do not** use robot icons in place of the sparkle icon. +- **Do not** represent humans with the robot icons. + +There are 2 variants of the robot icon, each with different uses: + +#### Standard icon + +The standard robot icon is intended to be used as an avatar within chatbot conversations. + +Because avatars have personality and don't have interactive state changes, you *can* adjust the background colors of the standard robot icon, including adding soft gradients or drop shadows to create depth. + +There are different icon variations and animations available to show thinking states, react to content, or differentiate chatbot options. + +**Do not** use the standard robot icon for chatbot launch buttons. Instead, use the [UI icon](#ui-icon). + +#### UI icon + +The UI robot icon is intended to be used within UI elements that launch chatbots, including buttons, menu toggles, and other access points. + +Because there are more specific accessibility and usability practices for UI elements to follow, there are no "emotion" variants for the UI robot icon. + +- **Do not** use the robot icon in place of the sparkle icon for other kinds of AI experiences. +- **Do not** use custom colors, gradients, or shadows with the UI icon. \ No newline at end of file diff --git a/packages/documentation-site/patternfly-docs/content/AI/img/ai-icons-examples.svg b/packages/documentation-site/patternfly-docs/content/AI/img/ai-icons-examples.svg new file mode 100644 index 0000000000..003048ea4b --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/AI/img/ai-icons-examples.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/AI/img/rh-icons-figma.svg b/packages/documentation-site/patternfly-docs/content/AI/img/rh-icons-figma.svg new file mode 100644 index 0000000000..85f39ca7fa --- /dev/null +++ b/packages/documentation-site/patternfly-docs/content/AI/img/rh-icons-figma.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/documentation-site/patternfly-docs/content/AI/rapid-prototyping/rapid-prototyping.md b/packages/documentation-site/patternfly-docs/content/AI/rapid-prototyping/rapid-prototyping.md index 01bb276327..78e8ec1e4c 100644 --- a/packages/documentation-site/patternfly-docs/content/AI/rapid-prototyping/rapid-prototyping.md +++ b/packages/documentation-site/patternfly-docs/content/AI/rapid-prototyping/rapid-prototyping.md @@ -2,7 +2,6 @@ id: Rapid prototyping section: AI source: about-rapid-prototyping -sortValue: 2 --- # Rapid prototyping with AI-assisted PatternFly development