{"id":884,"date":"2023-05-08T12:48:17","date_gmt":"2023-05-08T12:48:17","guid":{"rendered":"https:\/\/html5accessibility.com\/stuff\/?p=884"},"modified":"2023-05-08T15:48:41","modified_gmt":"2023-05-08T15:48:41","slug":"shatgpt","status":"publish","type":"post","link":"https:\/\/html5accessibility.com\/stuff\/2023\/05\/08\/shatgpt\/","title":{"rendered":"ShatGPT"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-899 size-full\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/workers-1.jpg\" alt=\"In the control room at the Accessibility Industry Grifters (AIG) secret headquarters, workers blithely go about their business of making their bosses rich at the expense of people with disabilities. Luckily the WCAG Panda has infiltrated and documented the goings on.\" width=\"927\" height=\"519\" srcset=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/workers-1.jpg 927w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/workers-1-300x168.jpg 300w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/workers-1-768x430.jpg 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><\/p>\n<h2>Failing at the first hurdle<\/h2>\n<p>I am concerned. Not about Large Language Models (LLM)s doing me out of a job, but about the people who make money out of them not making their User Interfaces (UI)s accessible.<\/p>\n<p>Not about their ethical use, though there is\u00a0<a href=\"https:\/\/www.govloop.com\/community\/blog\/the-ethics-of-inclusive-ai\/\">plenty to be concerned about<\/a>,\u00a0 but about the accessibility and usability of their UI&#8217;s.<\/p>\n<p class=\"note\">The biases inherent within LLM&#8217;s is writ large upon the UI&#8217;s provided to make use of them.<\/p>\n<h2>Closed AI<\/h2>\n<p>A cursory review of the ChatGPT UI shows it is broken for many people:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-890 size-full\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt.png\" alt=\"The ChatGPT UI, on the left side is a list of previous chats that are not navigable with the keyboard. in the main chat area there is a heading and a button that is low contrast.\" width=\"1161\" height=\"577\" srcset=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt.png 1161w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt-300x149.png 300w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt-1024x509.png 1024w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt-768x382.png 768w\" sizes=\"auto, (max-width: 1161px) 100vw, 1161px\" \/><\/p>\n<h3>Keyboard operability desert<\/h3>\n<p>The Chat history is largely not navigable or operable using the keyboard as the links are not focusable. For example, the <em>Custom Listbox Example\u00a0 <\/em>&#8220;link&#8221; is an <code>&lt;a&gt;<\/code> element without a <code>href<\/code> or <code>tabindex<\/code>, thus it cannot be navigated to or operated using a keyboard.<\/p>\n<pre>&lt;a class=\"flex py-3 ...\"&gt;\r\n&lt;svg stroke=\"currentColor\" fill=\"none\" stroke-width=\"2\" ...&gt;\r\n...&lt;\/svg&gt;\r\n&lt;div class=\"flex-1...\"&gt;Custom Listbox Example\r\n...&lt;\/div&gt;\r\n&lt;\/a&gt;<\/pre>\n<h3>Feast of unlabelled buttons<\/h3>\n<p>If you have good eyesight you can <em>sort of<\/em> work out what the various buttons in the UI do, but if you rely upon the accessible names of controls to understand what they do, you are out of luck.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-888 size-full\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt-buttons.png\" alt=\"The unlabelled, low contrast copy content, thumbs up and thumbs down buttons\" width=\"141\" height=\"51\" \/><\/p>\n<p>For example, the <a href=\"https:\/\/www.freedomscientific.com\/products\/software\/jaws\/\">JAWS screen reader<\/a> announces &#8220;unlabelled button 1, unlabelled button 2, unlabelled button 3&#8221;<\/p>\n<p>Likewise if you have low vision: The buttons are small light grey icons with no text label&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt-buttons.png\" alt=\"The unlabelled, low contrast copy content, thumbs up and thumbs down buttons\" width=\"141\" height=\"51\" \/><\/p>\n<blockquote><p>Foreground: # ACACBE<br \/>\nBackground: # F7F7F8<br \/>\nThe contrast ratio is: 2.1:1<br \/>\n1.4.11 Non-text Contrast (AA)<br \/>\n<strong>Fail for UI components and graphical objects<\/strong><\/p><\/blockquote>\n<h3>Not for some of you<\/h3>\n<p>The ChatGPT version selection control has an information panel about each versions Reasoning\/Speed and Conciseness. Useful information, tough luck if you are a screen reader user, you are probably not even aware the information is there.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-889 size-full\" src=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt1.png\" alt=\"With Default (GPT-3.5) option selected, the info panel is displayed: Default (GPT-3.5) Optimized for speed, currently available to Plus users. Reasoning 3 out of 5. Speed 5 out of 5. Conciseness 2 out of 5.\" width=\"784\" height=\"271\" srcset=\"https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt1.png 784w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt1-300x104.png 300w, https:\/\/html5accessibility.com\/stuff\/wp-content\/uploads\/2023\/05\/chtgpt1-768x265.png 768w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/p>\n<p>I could go on, there are plenty of issues, but you get the idea. My aim here is not to provide <strong>free advice<\/strong> on how a <a href=\"https:\/\/openai.com\/\">multi billion dollar company<\/a> can make its products more usable and accessible for people with disabilities. OpenAI has lots of smart people and the resources to put accessibility first, it does not auger well that it hasn&#8217;t.<\/p>\n<p>I could suggest they use their own product to suggest improvements but&#8230;<\/p>\n<blockquote><p>ChatGPT may produce inaccurate information about people, places, or facts.<\/p><\/blockquote>\n<p>I asked ChatGPT4<\/p>\n<blockquote><p>How do is make the following code more accessible?<\/p>\n<pre>&lt;a&gt; \r\n&lt;svg ...&gt; \r\n&lt;\/svg&gt; \r\n&lt;div&gt;Custom Listbox Example &lt;\/div&gt; \r\n&lt;\/a&gt;<\/pre>\n<\/blockquote>\n<p>It answered: (the strike-outs are mine)<\/p>\n<blockquote><p>To make the given code more accessible, you should provide descriptive attributes, such as <del><code>aria-label<\/code>, <code>role<\/code>, and <code>tabindex<\/code><\/del>. Also, it&#8217;s better to use a <code>&lt;button&gt;<\/code> element instead of an <code>&lt;a&gt;<\/code> element since the content is not a typical link.<\/p>\n<pre>&lt;button <del>aria-label=\"Custom Listbox Example\"<\/del> \r\n<del>role=\"button\"<\/del> <del>tabindex=\"0\"<\/del>&gt;\r\n&lt;svg aria-hidden=\"true\" focusable=\"false\" ...&gt;\r\n&lt;\/svg&gt;\r\n&lt;div&gt;Custom Listbox Example&lt;\/div&gt;\r\n&lt;\/button&gt;<\/pre>\n<p>Here&#8217;s a breakdown of the changes:<\/p>\n<ol>\n<li>Replace the <code>&lt;a&gt;<\/code> element with a <code>&lt;button&gt;<\/code> element. Buttons are more appropriate for actions that don&#8217;t navigate to a new URL. They also have built-in keyboard support, making them more accessible for keyboard users.<\/li>\n<li><del>Add an <code>aria-label<\/code> attribute to the <code>&lt;button&gt;<\/code> element to provide a descriptive label for screen readers. This helps users understand the purpose of the button.<\/del><\/li>\n<li><del>Add a <code>role<\/code> attribute with the value &#8220;button&#8221; to indicate that the element is a button. While this is not strictly necessary for a <code>&lt;button&gt;<\/code> element (since its role is already implicitly &#8220;button&#8221;), it&#8217;s a good practice to include it for clarity.<\/del><\/li>\n<li><del>Add a <code>tabindex<\/code> attribute with the value &#8220;0&#8221; to ensure that the button is part of the tab order, making it reachable for keyboard users.<\/del><\/li>\n<li>Add the <code>aria-hidden=\"true\"<\/code> attribute to the <code>&lt;svg&gt;<\/code> element to indicate that it should be hidden from screen readers, as it&#8217;s a decorative element and its presence might be confusing.<\/li>\n<li>Add the <code>focusable=\"false\"<\/code> attribute to the <code>&lt;svg&gt;<\/code> element to prevent it from receiving keyboard focus. This ensures that keyboard users won&#8217;t accidentally focus on the SVG instead of the button.<\/li>\n<\/ol>\n<p>By making these changes, you&#8217;ll create a more accessible experience for users who rely on screen readers or keyboard navigation.<\/p><\/blockquote>\n<p>The last 2 are questionable. The following I consider as <em>W3Schools<\/em> accessibility, expect the Accessibility Industry Grifters (AIGs) to be pushing this sort of advice as gospel<\/p>\n<blockquote><p>Add an <code>aria-label<\/code> attribute to the <code>&lt;button&gt;<\/code> element to provide a descriptive label for screen readers. This helps users understand the purpose of the button.<\/p><\/blockquote>\n<p class=\"note\">Not needed as it is labelled by child text<\/p>\n<blockquote><p>Add a <code>role<\/code> attribute with the value &#8220;button&#8221; to indicate that the element is a button. While this is not strictly necessary for a <code>&lt;button&gt;<\/code> element (since its role is already implicitly &#8220;button&#8221;), it&#8217;s a good practice to include it for clarity.<\/p><\/blockquote>\n<p class=\"note\">Not needed as the it is exposed as a <code>button<\/code> already, since it is a <strong><code>button<\/code><\/strong><\/p>\n<p>It&#8217;s not even a <em>good practice.\u00a0<\/em>This practice is specifically called out\u00a0\u00a0in the relevant W3C specification as something to avoid:<\/p>\n<blockquote><p>The following example illustrates a\u00a0<code><a href=\"https:\/\/html.spec.whatwg.org\/multipage\/form-elements.html#the-button-element\" data-link-type=\"element\" data-type=\"element\">button<\/a><\/code>\u00a0element which has also been provided an explicit\u00a0<code>role=button<\/code>. Specifying this role is unnecessary, as a &#8220;button&#8221; element is already exposed with an implicit\u00a0<code>button<\/code> role. In practice this particular instance of redundancy will likely not have unforeseen side effects, other than unnecessarily making the markup more verbose, and incorrectly signalling to other authors that this practice is useful.<\/p>\n<p><strong>source:<\/strong> ARIA in HTML &#8211; <a href=\"https:\/\/www.w3.org\/TR\/html-aria\/#avoid-specifying-redundant-roles\">3.2 Avoid specifying redundant roles<\/a><\/p><\/blockquote>\n<blockquote><p>Add a <code>tabindex<\/code> attribute with the value &#8220;0&#8221; to ensure that the button is part of the tab order, making it reachable for keyboard users.<\/p><\/blockquote>\n<p class=\"note\">Not needed as a <code>button<\/code> is focusable by default<\/p>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/Oga5nZ1HlRY\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Failing at the first hurdle I am concerned. Not about Large Language Models (LLM)s doing me out of a job, but about the people who make money out of them not making their User Interfaces (UI)s accessible. Not about their ethical use, though there is\u00a0plenty to be concerned about,\u00a0 but about the accessibility and usability [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-884","post","type-post","status-publish","format-standard","hentry","category-htmlaccessibility"],"_links":{"self":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/comments?post=884"}],"version-history":[{"count":19,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/884\/revisions"}],"predecessor-version":[{"id":909,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/posts\/884\/revisions\/909"}],"wp:attachment":[{"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/media?parent=884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/categories?post=884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/html5accessibility.com\/stuff\/wp-json\/wp\/v2\/tags?post=884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}