"}},"componentScriptGroups({\"componentId\":\"custom.widget.MicrosoftFooter\"})":{"__typename":"ComponentScriptGroups","scriptGroups":{"__typename":"ComponentScriptGroupsDefinition","afterInteractive":{"__typename":"PageScriptGroupDefinition","group":"AFTER_INTERACTIVE","scriptIds":[]},"lazyOnLoad":{"__typename":"PageScriptGroupDefinition","group":"LAZY_ON_LOAD","scriptIds":[]}},"componentScripts":[]},"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageListTabs\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageListTabs-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/OverflowNav\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageUnreadCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageViewCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/kudos/KudosCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/kudos/KudosCount-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRepliesCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745505307000"}],"cachedText({\"lastModified\":\"1745505307000\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505307000"}]},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"User:user:-1":{"__typename":"User","id":"user:-1","uid":-1,"login":"Deleted","email":"","avatar":null,"rank":null,"kudosWeight":1,"registrationData":{"__typename":"RegistrationData","status":"ANONYMOUS","registrationTime":null,"confirmEmailStatus":false,"registrationAccessLevel":"VIEW","ssoRegistrationFields":[]},"ssoId":null,"profileSettings":{"__typename":"ProfileSettings","dateDisplayStyle":{"__typename":"InheritableStringSettingWithPossibleValues","key":"layout.friendly_dates_enabled","value":"false","localValue":"true","possibleValues":["true","false"]},"dateDisplayFormat":{"__typename":"InheritableStringSetting","key":"layout.format_pattern_date","value":"MMM dd yyyy","localValue":"MM-dd-yyyy"},"language":{"__typename":"InheritableStringSettingWithPossibleValues","key":"profile.language","value":"en-US","localValue":null,"possibleValues":["en-US","es-ES"]},"repliesSortOrder":{"__typename":"InheritableStringSettingWithPossibleValues","key":"config.user_replies_sort_order","value":"DEFAULT","localValue":"DEFAULT","possibleValues":["DEFAULT","LIKES","PUBLISH_TIME","REVERSE_PUBLISH_TIME"]}},"deleted":false},"CachedAsset:pages-1746563149788":{"__typename":"CachedAsset","id":"pages-1746563149788","value":[{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbViewAllArticlesPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId/all-articles/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllEvents","type":"CUSTOM","urlPath":"/Events","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"IdeaPostPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"CommunityHub.Page","type":"CUSTOM","urlPath":"/Directory","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ResetPasswordPage","type":"USER","urlPath":"/resetpassword/:userId/:resetPasswordToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1730819800000,"localOverride":null,"page":{"id":"AllBlogs.Page","type":"CUSTOM","urlPath":"/blogs","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"HealthCheckPage","type":"COMMUNITY","urlPath":"/health","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1746563149788,"localOverride":null,"page":{"id":"GroupHubPostPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"}],"localOverride":false},"CachedAsset:text:en_US-components/context/AppContext/AppContextProvider-0":{"__typename":"CachedAsset","id":"text:en_US-components/context/AppContext/AppContextProvider-0","value":{"noCommunity":"Cannot find community","noUser":"Cannot find current user","noNode":"Cannot find node with id {nodeId}","noMessage":"Cannot find message with id {messageId}","userBanned":"We're sorry, but you have been banned from using this site.","userBannedReason":"You have been banned for the following reason: {reason}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-0":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-0","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:theme:customTheme1-1746563149270":{"__typename":"CachedAsset","id":"theme:customTheme1-1746563149270","value":{"id":"customTheme1","animation":{"fast":"150ms","normal":"250ms","slow":"500ms","slowest":"750ms","function":"cubic-bezier(0.07, 0.91, 0.51, 1)","__typename":"AnimationThemeSettings"},"avatar":{"borderRadius":"50%","collections":["default"],"__typename":"AvatarThemeSettings"},"basics":{"browserIcon":{"imageAssetName":"favicon-1730836283320.png","imageLastModified":"1730836286415","__typename":"ThemeAsset"},"customerLogo":{"imageAssetName":"favicon-1730836271365.png","imageLastModified":"1730836274203","__typename":"ThemeAsset"},"maximumWidthOfPageContent":"1300px","oneColumnNarrowWidth":"800px","gridGutterWidthMd":"30px","gridGutterWidthXs":"10px","pageWidthStyle":"WIDTH_OF_BROWSER","__typename":"BasicsThemeSettings"},"buttons":{"borderRadiusSm":"3px","borderRadius":"3px","borderRadiusLg":"5px","paddingY":"5px","paddingYLg":"7px","paddingYHero":"var(--lia-bs-btn-padding-y-lg)","paddingX":"12px","paddingXLg":"16px","paddingXHero":"60px","fontStyle":"NORMAL","fontWeight":"700","textTransform":"NONE","disabledOpacity":0.5,"primaryTextColor":"var(--lia-bs-white)","primaryTextHoverColor":"var(--lia-bs-white)","primaryTextActiveColor":"var(--lia-bs-white)","primaryBgColor":"var(--lia-bs-primary)","primaryBgHoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.85))","primaryBgActiveColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) * 0.7))","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","primaryBorderActive":"1px solid transparent","primaryBorderFocus":"1px solid var(--lia-bs-white)","primaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","secondaryTextColor":"var(--lia-bs-gray-900)","secondaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","secondaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","secondaryBgColor":"var(--lia-bs-gray-200)","secondaryBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","secondaryBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","secondaryBorder":"1px solid transparent","secondaryBorderHover":"1px solid transparent","secondaryBorderActive":"1px solid transparent","secondaryBorderFocus":"1px solid transparent","secondaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","tertiaryTextColor":"var(--lia-bs-gray-900)","tertiaryTextHoverColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.95))","tertiaryTextActiveColor":"hsl(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), calc(var(--lia-bs-gray-900-l) * 0.9))","tertiaryBgColor":"transparent","tertiaryBgHoverColor":"transparent","tertiaryBgActiveColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.04)","tertiaryBorder":"1px solid transparent","tertiaryBorderHover":"1px solid hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","tertiaryBorderActive":"1px solid transparent","tertiaryBorderFocus":"1px solid transparent","tertiaryBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","destructiveTextColor":"var(--lia-bs-danger)","destructiveTextHoverColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.95))","destructiveTextActiveColor":"hsl(var(--lia-bs-danger-h), var(--lia-bs-danger-s), calc(var(--lia-bs-danger-l) * 0.9))","destructiveBgColor":"var(--lia-bs-gray-200)","destructiveBgHoverColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.96))","destructiveBgActiveColor":"hsl(var(--lia-bs-gray-200-h), var(--lia-bs-gray-200-s), calc(var(--lia-bs-gray-200-l) * 0.92))","destructiveBorder":"1px solid transparent","destructiveBorderHover":"1px solid transparent","destructiveBorderActive":"1px solid transparent","destructiveBorderFocus":"1px solid transparent","destructiveBoxShadowFocus":"0 0 0 1px var(--lia-bs-primary), 0 0 0 4px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","__typename":"ButtonsThemeSettings"},"border":{"color":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","mainContent":"NONE","sideContent":"LIGHT","radiusSm":"3px","radius":"5px","radiusLg":"9px","radius50":"100vw","__typename":"BorderThemeSettings"},"boxShadow":{"xs":"0 0 0 1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.08), 0 3px 0 -1px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.16)","sm":"0 2px 4px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.12)","md":"0 5px 15px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","lg":"0 10px 30px hsla(var(--lia-bs-gray-900-h), var(--lia-bs-gray-900-s), var(--lia-bs-gray-900-l), 0.3)","__typename":"BoxShadowThemeSettings"},"cards":{"bgColor":"var(--lia-panel-bg-color)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":"var(--lia-box-shadow-xs)","__typename":"CardsThemeSettings"},"chip":{"maxWidth":"300px","height":"30px","__typename":"ChipThemeSettings"},"coreTypes":{"defaultMessageLinkColor":"var(--lia-bs-link-color)","defaultMessageLinkDecoration":"none","defaultMessageLinkFontStyle":"NORMAL","defaultMessageLinkFontWeight":"400","defaultMessageFontStyle":"NORMAL","defaultMessageFontWeight":"400","defaultMessageFontFamily":"var(--lia-bs-font-family-base)","forumColor":"#4099E2","forumFontFamily":"var(--lia-bs-font-family-base)","forumFontWeight":"var(--lia-default-message-font-weight)","forumLineHeight":"var(--lia-bs-line-height-base)","forumFontStyle":"var(--lia-default-message-font-style)","forumMessageLinkColor":"var(--lia-default-message-link-color)","forumMessageLinkDecoration":"var(--lia-default-message-link-decoration)","forumMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","forumMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","forumSolvedColor":"#148563","blogColor":"#1CBAA0","blogFontFamily":"var(--lia-bs-font-family-base)","blogFontWeight":"var(--lia-default-message-font-weight)","blogLineHeight":"1.75","blogFontStyle":"var(--lia-default-message-font-style)","blogMessageLinkColor":"var(--lia-default-message-link-color)","blogMessageLinkDecoration":"var(--lia-default-message-link-decoration)","blogMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","blogMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","tkbColor":"#4C6B90","tkbFontFamily":"var(--lia-bs-font-family-base)","tkbFontWeight":"var(--lia-default-message-font-weight)","tkbLineHeight":"1.75","tkbFontStyle":"var(--lia-default-message-font-style)","tkbMessageLinkColor":"var(--lia-default-message-link-color)","tkbMessageLinkDecoration":"var(--lia-default-message-link-decoration)","tkbMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","tkbMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaColor":"#4099E2","qandaFontFamily":"var(--lia-bs-font-family-base)","qandaFontWeight":"var(--lia-default-message-font-weight)","qandaLineHeight":"var(--lia-bs-line-height-base)","qandaFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkColor":"var(--lia-default-message-link-color)","qandaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","qandaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","qandaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","qandaSolvedColor":"#3FA023","ideaColor":"#FF8000","ideaFontFamily":"var(--lia-bs-font-family-base)","ideaFontWeight":"var(--lia-default-message-font-weight)","ideaLineHeight":"var(--lia-bs-line-height-base)","ideaFontStyle":"var(--lia-default-message-font-style)","ideaMessageLinkColor":"var(--lia-default-message-link-color)","ideaMessageLinkDecoration":"var(--lia-default-message-link-decoration)","ideaMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","ideaMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","contestColor":"#FCC845","contestFontFamily":"var(--lia-bs-font-family-base)","contestFontWeight":"var(--lia-default-message-font-weight)","contestLineHeight":"var(--lia-bs-line-height-base)","contestFontStyle":"var(--lia-default-message-link-font-style)","contestMessageLinkColor":"var(--lia-default-message-link-color)","contestMessageLinkDecoration":"var(--lia-default-message-link-decoration)","contestMessageLinkFontStyle":"ITALIC","contestMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","occasionColor":"#D13A1F","occasionFontFamily":"var(--lia-bs-font-family-base)","occasionFontWeight":"var(--lia-default-message-font-weight)","occasionLineHeight":"var(--lia-bs-line-height-base)","occasionFontStyle":"var(--lia-default-message-font-style)","occasionMessageLinkColor":"var(--lia-default-message-link-color)","occasionMessageLinkDecoration":"var(--lia-default-message-link-decoration)","occasionMessageLinkFontStyle":"var(--lia-default-message-link-font-style)","occasionMessageLinkFontWeight":"var(--lia-default-message-link-font-weight)","grouphubColor":"#333333","categoryColor":"#949494","communityColor":"#FFFFFF","productColor":"#949494","__typename":"CoreTypesThemeSettings"},"colors":{"black":"#000000","white":"#FFFFFF","gray100":"#F7F7F7","gray200":"#F7F7F7","gray300":"#E8E8E8","gray400":"#D9D9D9","gray500":"#CCCCCC","gray600":"#717171","gray700":"#707070","gray800":"#545454","gray900":"#333333","dark":"#545454","light":"#F7F7F7","primary":"#0069D4","secondary":"#333333","bodyText":"#1E1E1E","bodyBg":"#FFFFFF","info":"#409AE2","success":"#41C5AE","warning":"#FCC844","danger":"#BC341B","alertSystem":"#FF6600","textMuted":"#707070","highlight":"#FFFCAD","outline":"var(--lia-bs-primary)","custom":["#D3F5A4","#243A5E"],"__typename":"ColorsThemeSettings"},"divider":{"size":"3px","marginLeft":"4px","marginRight":"4px","borderRadius":"50%","bgColor":"var(--lia-bs-gray-600)","bgColorActive":"var(--lia-bs-gray-600)","__typename":"DividerThemeSettings"},"dropdown":{"fontSize":"var(--lia-bs-font-size-sm)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius-sm)","dividerBg":"var(--lia-bs-gray-300)","itemPaddingY":"5px","itemPaddingX":"20px","headerColor":"var(--lia-bs-gray-700)","__typename":"DropdownThemeSettings"},"email":{"link":{"color":"#0069D4","hoverColor":"#0061c2","decoration":"none","hoverDecoration":"underline","__typename":"EmailLinkSettings"},"border":{"color":"#e4e4e4","__typename":"EmailBorderSettings"},"buttons":{"borderRadiusLg":"5px","paddingXLg":"16px","paddingYLg":"7px","fontWeight":"700","primaryTextColor":"#ffffff","primaryTextHoverColor":"#ffffff","primaryBgColor":"#0069D4","primaryBgHoverColor":"#005cb8","primaryBorder":"1px solid transparent","primaryBorderHover":"1px solid transparent","__typename":"EmailButtonsSettings"},"panel":{"borderRadius":"5px","borderColor":"#e4e4e4","__typename":"EmailPanelSettings"},"__typename":"EmailThemeSettings"},"emoji":{"skinToneDefault":"#ffcd43","skinToneLight":"#fae3c5","skinToneMediumLight":"#e2cfa5","skinToneMedium":"#daa478","skinToneMediumDark":"#a78058","skinToneDark":"#5e4d43","__typename":"EmojiThemeSettings"},"heading":{"color":"var(--lia-bs-body-color)","fontFamily":"Segoe UI","fontStyle":"NORMAL","fontWeight":"400","h1FontSize":"34px","h2FontSize":"32px","h3FontSize":"28px","h4FontSize":"24px","h5FontSize":"20px","h6FontSize":"16px","lineHeight":"1.3","subHeaderFontSize":"11px","subHeaderFontWeight":"500","h1LetterSpacing":"normal","h2LetterSpacing":"normal","h3LetterSpacing":"normal","h4LetterSpacing":"normal","h5LetterSpacing":"normal","h6LetterSpacing":"normal","subHeaderLetterSpacing":"2px","h1FontWeight":"var(--lia-bs-headings-font-weight)","h2FontWeight":"var(--lia-bs-headings-font-weight)","h3FontWeight":"var(--lia-bs-headings-font-weight)","h4FontWeight":"var(--lia-bs-headings-font-weight)","h5FontWeight":"var(--lia-bs-headings-font-weight)","h6FontWeight":"var(--lia-bs-headings-font-weight)","__typename":"HeadingThemeSettings"},"icons":{"size10":"10px","size12":"12px","size14":"14px","size16":"16px","size20":"20px","size24":"24px","size30":"30px","size40":"40px","size50":"50px","size60":"60px","size80":"80px","size120":"120px","size160":"160px","__typename":"IconsThemeSettings"},"imagePreview":{"bgColor":"var(--lia-bs-gray-900)","titleColor":"var(--lia-bs-white)","controlColor":"var(--lia-bs-white)","controlBgColor":"var(--lia-bs-gray-800)","__typename":"ImagePreviewThemeSettings"},"input":{"borderColor":"var(--lia-bs-gray-600)","disabledColor":"var(--lia-bs-gray-600)","focusBorderColor":"var(--lia-bs-primary)","labelMarginBottom":"10px","btnFontSize":"var(--lia-bs-font-size-sm)","focusBoxShadow":"0 0 0 3px hsla(var(--lia-bs-primary-h), var(--lia-bs-primary-s), var(--lia-bs-primary-l), 0.2)","checkLabelMarginBottom":"2px","checkboxBorderRadius":"3px","borderRadiusSm":"var(--lia-bs-border-radius-sm)","borderRadius":"var(--lia-bs-border-radius)","borderRadiusLg":"var(--lia-bs-border-radius-lg)","formTextMarginTop":"4px","textAreaBorderRadius":"var(--lia-bs-border-radius)","activeFillColor":"var(--lia-bs-primary)","__typename":"InputThemeSettings"},"loading":{"dotDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.2)","dotLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.5)","barDarkColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.06)","barLightColor":"hsla(var(--lia-bs-white-h), var(--lia-bs-white-s), var(--lia-bs-white-l), 0.4)","__typename":"LoadingThemeSettings"},"link":{"color":"var(--lia-bs-primary)","hoverColor":"hsl(var(--lia-bs-primary-h), var(--lia-bs-primary-s), calc(var(--lia-bs-primary-l) - 10%))","decoration":"none","hoverDecoration":"underline","__typename":"LinkThemeSettings"},"listGroup":{"itemPaddingY":"15px","itemPaddingX":"15px","borderColor":"var(--lia-bs-gray-300)","__typename":"ListGroupThemeSettings"},"modal":{"contentTextColor":"var(--lia-bs-body-color)","contentBg":"var(--lia-bs-white)","backgroundBg":"var(--lia-bs-black)","smSize":"440px","mdSize":"760px","lgSize":"1080px","backdropOpacity":0.3,"contentBoxShadowXs":"var(--lia-bs-box-shadow-sm)","contentBoxShadow":"var(--lia-bs-box-shadow)","headerFontWeight":"700","__typename":"ModalThemeSettings"},"navbar":{"position":"FIXED","background":{"attachment":null,"clip":null,"color":"var(--lia-bs-white)","imageAssetName":"","imageLastModified":"0","origin":null,"position":"CENTER_CENTER","repeat":"NO_REPEAT","size":"COVER","__typename":"BackgroundProps"},"backgroundOpacity":0.8,"paddingTop":"15px","paddingBottom":"15px","borderBottom":"1px solid var(--lia-bs-border-color)","boxShadow":"var(--lia-bs-box-shadow-sm)","brandMarginRight":"30px","brandMarginRightSm":"10px","brandLogoHeight":"30px","linkGap":"10px","linkJustifyContent":"flex-start","linkPaddingY":"5px","linkPaddingX":"10px","linkDropdownPaddingY":"9px","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkColor":"var(--lia-bs-body-color)","linkHoverColor":"var(--lia-bs-primary)","linkFontSize":"var(--lia-bs-font-size-sm)","linkFontStyle":"NORMAL","linkFontWeight":"400","linkTextTransform":"NONE","linkLetterSpacing":"normal","linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkBgColor":"transparent","linkBgHoverColor":"transparent","linkBorder":"none","linkBorderHover":"none","linkBoxShadow":"none","linkBoxShadowHover":"none","linkTextBorderBottom":"none","linkTextBorderBottomHover":"none","dropdownPaddingTop":"10px","dropdownPaddingBottom":"15px","dropdownPaddingX":"10px","dropdownMenuOffset":"2px","dropdownDividerMarginTop":"10px","dropdownDividerMarginBottom":"10px","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","controllerIconColor":"var(--lia-bs-body-color)","controllerIconHoverColor":"var(--lia-bs-body-color)","controllerTextColor":"var(--lia-nav-controller-icon-color)","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","controllerHighlightColor":"hsla(30, 100%, 50%)","controllerHighlightTextColor":"var(--lia-yiq-light)","controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerColor":"var(--lia-nav-controller-icon-color)","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","hamburgerBgColor":"transparent","hamburgerBgHoverColor":"transparent","hamburgerBorder":"none","hamburgerBorderHover":"none","collapseMenuMarginLeft":"20px","collapseMenuDividerBg":"var(--lia-nav-link-color)","collapseMenuDividerOpacity":0.16,"__typename":"NavbarThemeSettings"},"pager":{"textColor":"var(--lia-bs-link-color)","textFontWeight":"var(--lia-font-weight-md)","textFontSize":"var(--lia-bs-font-size-sm)","__typename":"PagerThemeSettings"},"panel":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-bs-border-radius)","borderColor":"var(--lia-bs-border-color)","boxShadow":"none","__typename":"PanelThemeSettings"},"popover":{"arrowHeight":"8px","arrowWidth":"16px","maxWidth":"300px","minWidth":"100px","headerBg":"var(--lia-bs-white)","borderColor":"var(--lia-bs-border-color)","borderRadius":"var(--lia-bs-border-radius)","boxShadow":"0 0.5rem 1rem hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.15)","__typename":"PopoverThemeSettings"},"prism":{"color":"#000000","bgColor":"#f5f2f0","fontFamily":"var(--font-family-monospace)","fontSize":"var(--lia-bs-font-size-base)","fontWeightBold":"var(--lia-bs-font-weight-bold)","fontStyleItalic":"italic","tabSize":2,"highlightColor":"#b3d4fc","commentColor":"#62707e","punctuationColor":"#6f6f6f","namespaceOpacity":"0.7","propColor":"#990055","selectorColor":"#517a00","operatorColor":"#906736","operatorBgColor":"hsla(0, 0%, 100%, 0.5)","keywordColor":"#0076a9","functionColor":"#d3284b","variableColor":"#c14700","__typename":"PrismThemeSettings"},"rte":{"bgColor":"var(--lia-bs-white)","borderRadius":"var(--lia-panel-border-radius)","boxShadow":" var(--lia-panel-box-shadow)","customColor1":"#bfedd2","customColor2":"#fbeeb8","customColor3":"#f8cac6","customColor4":"#eccafa","customColor5":"#c2e0f4","customColor6":"#2dc26b","customColor7":"#f1c40f","customColor8":"#e03e2d","customColor9":"#b96ad9","customColor10":"#3598db","customColor11":"#169179","customColor12":"#e67e23","customColor13":"#ba372a","customColor14":"#843fa1","customColor15":"#236fa1","customColor16":"#ecf0f1","customColor17":"#ced4d9","customColor18":"#95a5a6","customColor19":"#7e8c8d","customColor20":"#34495e","customColor21":"#000000","customColor22":"#ffffff","defaultMessageHeaderMarginTop":"40px","defaultMessageHeaderMarginBottom":"20px","defaultMessageItemMarginTop":"0","defaultMessageItemMarginBottom":"10px","diffAddedColor":"hsla(170, 53%, 51%, 0.4)","diffChangedColor":"hsla(43, 97%, 63%, 0.4)","diffNoneColor":"hsla(0, 0%, 80%, 0.4)","diffRemovedColor":"hsla(9, 74%, 47%, 0.4)","specialMessageHeaderMarginTop":"40px","specialMessageHeaderMarginBottom":"20px","specialMessageItemMarginTop":"0","specialMessageItemMarginBottom":"10px","__typename":"RteThemeSettings"},"tags":{"bgColor":"var(--lia-bs-gray-200)","bgHoverColor":"var(--lia-bs-gray-400)","borderRadius":"var(--lia-bs-border-radius-sm)","color":"var(--lia-bs-body-color)","hoverColor":"var(--lia-bs-body-color)","fontWeight":"var(--lia-font-weight-md)","fontSize":"var(--lia-font-size-xxs)","textTransform":"UPPERCASE","letterSpacing":"0.5px","__typename":"TagsThemeSettings"},"toasts":{"borderRadius":"var(--lia-bs-border-radius)","paddingX":"12px","__typename":"ToastsThemeSettings"},"typography":{"fontFamilyBase":"Segoe UI","fontStyleBase":"NORMAL","fontWeightBase":"400","fontWeightLight":"300","fontWeightNormal":"400","fontWeightMd":"500","fontWeightBold":"700","letterSpacingSm":"normal","letterSpacingXs":"normal","lineHeightBase":"1.5","fontSizeBase":"16px","fontSizeXxs":"11px","fontSizeXs":"12px","fontSizeSm":"14px","fontSizeLg":"20px","fontSizeXl":"24px","smallFontSize":"14px","customFonts":[{"source":"SERVER","name":"Segoe UI","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"},{"style":"NORMAL","weight":"300","__typename":"FontStyleData"},{"style":"NORMAL","weight":"600","__typename":"FontStyleData"},{"style":"NORMAL","weight":"700","__typename":"FontStyleData"},{"style":"ITALIC","weight":"400","__typename":"FontStyleData"}],"assetNames":["SegoeUI-normal-400.woff2","SegoeUI-normal-300.woff2","SegoeUI-normal-600.woff2","SegoeUI-normal-700.woff2","SegoeUI-italic-400.woff2"],"__typename":"CustomFont"},{"source":"SERVER","name":"MWF Fluent Icons","styles":[{"style":"NORMAL","weight":"400","__typename":"FontStyleData"}],"assetNames":["MWFFluentIcons-normal-400.woff2"],"__typename":"CustomFont"}],"__typename":"TypographyThemeSettings"},"unstyledListItem":{"marginBottomSm":"5px","marginBottomMd":"10px","marginBottomLg":"15px","marginBottomXl":"20px","marginBottomXxl":"25px","__typename":"UnstyledListItemThemeSettings"},"yiq":{"light":"#ffffff","dark":"#000000","__typename":"YiqThemeSettings"},"colorLightness":{"primaryDark":0.36,"primaryLight":0.74,"primaryLighter":0.89,"primaryLightest":0.95,"infoDark":0.39,"infoLight":0.72,"infoLighter":0.85,"infoLightest":0.93,"successDark":0.24,"successLight":0.62,"successLighter":0.8,"successLightest":0.91,"warningDark":0.39,"warningLight":0.68,"warningLighter":0.84,"warningLightest":0.93,"dangerDark":0.41,"dangerLight":0.72,"dangerLighter":0.89,"dangerLightest":0.95,"__typename":"ColorLightnessThemeSettings"},"localOverride":false,"__typename":"Theme"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/Loading/LoadingDot-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745505307000","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-components/common/EmailVerification-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745505307000","value":{"email.verification.title":"Email Verification Required","email.verification.message.update.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. To change your email, visit My Settings.","email.verification.message.resend.email":"To participate in the community, you must first verify your email address. The verification email was sent to {email}. Resend email."},"localOverride":false},"CachedAsset:text:en_US-pages/tags/TagPage-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-pages/tags/TagPage-1745505307000","value":{"tagPageTitle":"Tag:\"{tagName}\" | {communityTitle}","tagPageForNodeTitle":"Tag:\"{tagName}\" in \"{title}\" | {communityTitle}","name":"Tags Page","tag":"Tag: {tagName}"},"localOverride":false},"Category:category:AI":{"__typename":"Category","id":"category:AI","entityType":"CATEGORY","displayId":"AI","nodeType":"category","depth":3,"title":"Artificial Intelligence and Machine Learning","shortTitle":"Artificial Intelligence and Machine Learning","parent":{"__ref":"Category:category:solutions"},"categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:top":{"__typename":"Category","id":"category:top","displayId":"top","nodeType":"category","depth":0,"title":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","displayId":"communities","nodeType":"category","depth":1,"parent":{"__ref":"Category:category:top"},"title":"Communities"},"Category:category:solutions":{"__typename":"Category","id":"category:solutions","displayId":"solutions","nodeType":"category","depth":2,"parent":{"__ref":"Category:category:communities"},"title":"Topics"},"Blog:board:AIPlatformBlog":{"__typename":"Blog","id":"board:AIPlatformBlog","entityType":"BLOG","displayId":"AIPlatformBlog","nodeType":"board","depth":4,"conversationStyle":"BLOG","title":"AI - AI Platform Blog","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:AI"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:communities"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:solutions"}},{"__typename":"CoreNodeEdge","node":{"__ref":"Category:category:AI"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"boardPolicies":{"__typename":"BoardPolicies","canPublishArticleOnCreate":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","key":"error.lithium.policies.forums.policy_can_publish_on_create_workflow_action.accessDenied","args":[]}}},"theme":{"__ref":"Theme:customTheme1"},"shortTitle":"AI - AI Platform Blog","tagPolicies":{"__typename":"TagPolicies","canSubscribeTagOnNode":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.subscribe_labels.allow.accessDenied","args":[]}},"canManageTagDashboard":{"__typename":"PolicyResult","failureReason":{"__typename":"FailureReason","message":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","key":"error.lithium.policies.labels.action.corenode.admin_labels.allow.accessDenied","args":[]}}}},"CachedAsset:quilt:o365.prod:pages/tags/TagPage:board:AIPlatformBlog-1746740537180":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/tags/TagPage:board:AIPlatformBlog-1746740537180","value":{"id":"TagPage","container":{"id":"Common","headerProps":{"removeComponents":["community.widget.bannerWidget"],"__typename":"QuiltContainerSectionProps"},"items":[{"id":"tag-header-widget","layout":"ONE_COLUMN","bgColor":"var(--lia-bs-white)","showBorder":"BOTTOM","sectionEditLevel":"LOCKED","columnMap":{"main":[{"id":"tags.widget.TagsHeaderWidget","__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"},{"id":"messages-list-for-tag-widget","layout":"ONE_COLUMN","columnMap":{"main":[{"id":"messages.widget.messageListForNodeByRecentActivityWidget","props":{"viewVariant":{"type":"inline","props":{"useUnreadCount":true,"useViewCount":true,"useAuthorLogin":true,"clampBodyLines":3,"useAvatar":true,"useBoardIcon":false,"useKudosCount":true,"usePreviewMedia":true,"useTags":false,"useNode":true,"useNodeLink":true,"useTextBody":true,"truncateBodyLength":-1,"useBody":true,"useRepliesCount":true,"useSolvedBadge":true,"timeStampType":"conversation.lastPostingActivityTime","useMessageTimeLink":true,"clampSubjectLines":2}},"panelType":"divider","useTitle":false,"hideIfEmpty":false,"pagerVariant":{"type":"loadMore"},"style":"list","showTabs":true,"tabItemMap":{"default":{"mostRecent":true,"mostRecentUserContent":false,"newest":false},"additional":{"mostKudoed":true,"mostViewed":true,"mostReplies":false,"noReplies":false,"noSolutions":false,"solutions":false}}},"__typename":"QuiltComponent"}],"__typename":"OneSectionColumns"},"__typename":"OneColumnQuiltSection"}],"__typename":"QuiltContainer"},"__typename":"Quilt"},"localOverride":false},"CachedAsset:quiltWrapper:o365.prod:Common:1746797693193":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1746797693193","value":{"id":"Common","header":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"community.widget.navbarWidget","props":{"showUserName":true,"showRegisterLink":true,"useIconLanguagePicker":true,"useLabelLanguagePicker":true,"className":"QuiltComponent_lia-component-edit-mode__0nCcm","links":{"sideLinks":[],"mainLinks":[{"children":[],"linkType":"INTERNAL","id":"gxcuf89792","params":{},"routeName":"CommunityPage"},{"children":[],"linkType":"EXTERNAL","id":"external-link","url":"/Directory","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft365","params":{"categoryId":"microsoft365"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows","params":{"categoryId":"Windows"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-microsoft365-copilot-link","params":{"categoryId":"Microsoft365Copilot"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-teams","params":{"categoryId":"MicrosoftTeams"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-securityand-compliance","params":{"categoryId":"microsoft-security"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"azure","params":{"categoryId":"Azure"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"Common-content_management-link","params":{"categoryId":"Content_Management"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"exchange","params":{"categoryId":"Exchange"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"windows-server","params":{"categoryId":"Windows-Server"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"outlook","params":{"categoryId":"Outlook"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-endpoint-manager","params":{"categoryId":"microsoftintune"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-2","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities","url":"/","target":"BLANK"},{"children":[{"linkType":"INTERNAL","id":"a-i","params":{"categoryId":"AI"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"education-sector","params":{"categoryId":"EducationSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"partner-community","params":{"categoryId":"PartnerCommunity"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"i-t-ops-talk","params":{"categoryId":"ITOpsTalk"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"healthcare-and-life-sciences","params":{"categoryId":"HealthcareAndLifeSciences"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-mechanics","params":{"categoryId":"MicrosoftMechanics"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"public-sector","params":{"categoryId":"PublicSector"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"s-m-b","params":{"categoryId":"MicrosoftforNonprofits"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"io-t","params":{"categoryId":"IoT"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"startupsat-microsoft","params":{"categoryId":"StartupsatMicrosoft"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"driving-adoption","params":{"categoryId":"DrivingAdoption"},"routeName":"CategoryPage"},{"linkType":"EXTERNAL","id":"external-link-1","url":"/Directory","target":"SELF"}],"linkType":"EXTERNAL","id":"communities-1","url":"/","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external","url":"/Blogs","target":"SELF"},{"children":[],"linkType":"EXTERNAL","id":"external-1","url":"/Events","target":"SELF"},{"children":[{"linkType":"INTERNAL","id":"microsoft-learn-1","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"linkType":"INTERNAL","id":"microsoft-learn-blog","params":{"boardId":"MicrosoftLearnBlog","categoryId":"MicrosoftLearn"},"routeName":"BlogBoardPage"},{"linkType":"EXTERNAL","id":"external-10","url":"https://learningroomdirectory.microsoft.com/","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-3","url":"https://docs.microsoft.com/learn/dynamics365/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-4","url":"https://docs.microsoft.com/learn/m365/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-5","url":"https://docs.microsoft.com/learn/topics/sci/?wt.mc_id=techcom_header-webpage-m365","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-6","url":"https://docs.microsoft.com/learn/powerplatform/?wt.mc_id=techcom_header-webpage-powerplatform","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-7","url":"https://docs.microsoft.com/learn/github/?wt.mc_id=techcom_header-webpage-github","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-8","url":"https://docs.microsoft.com/learn/teams/?wt.mc_id=techcom_header-webpage-teams","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-9","url":"https://docs.microsoft.com/learn/dotnet/?wt.mc_id=techcom_header-webpage-dotnet","target":"BLANK"},{"linkType":"EXTERNAL","id":"external-2","url":"https://docs.microsoft.com/learn/azure/?WT.mc_id=techcom_header-webpage-m365","target":"BLANK"}],"linkType":"INTERNAL","id":"microsoft-learn","params":{"categoryId":"MicrosoftLearn"},"routeName":"CategoryPage"},{"children":[],"linkType":"INTERNAL","id":"community-info-center","params":{"categoryId":"Community-Info-Center"},"routeName":"CategoryPage"}]},"style":{"boxShadow":"var(--lia-bs-box-shadow-sm)","controllerHighlightColor":"hsla(30, 100%, 50%)","linkFontWeight":"400","dropdownDividerMarginBottom":"10px","hamburgerBorderHover":"none","linkBoxShadowHover":"none","linkFontSize":"14px","backgroundOpacity":0.8,"controllerBorderRadius":"var(--lia-border-radius-50)","hamburgerBgColor":"transparent","hamburgerColor":"var(--lia-nav-controller-icon-color)","linkTextBorderBottom":"none","brandLogoHeight":"30px","linkBgHoverColor":"transparent","linkLetterSpacing":"normal","collapseMenuDividerOpacity":0.16,"dropdownPaddingBottom":"15px","paddingBottom":"15px","dropdownMenuOffset":"2px","hamburgerBgHoverColor":"transparent","borderBottom":"1px solid var(--lia-bs-border-color)","hamburgerBorder":"none","dropdownPaddingX":"10px","brandMarginRightSm":"10px","linkBoxShadow":"none","collapseMenuDividerBg":"var(--lia-nav-link-color)","linkColor":"var(--lia-bs-body-color)","linkJustifyContent":"flex-start","dropdownPaddingTop":"10px","controllerHighlightTextColor":"var(--lia-yiq-dark)","controllerTextColor":"var(--lia-nav-controller-icon-color)","background":{"imageAssetName":"","color":"var(--lia-bs-white)","size":"COVER","repeat":"NO_REPEAT","position":"CENTER_CENTER","imageLastModified":""},"linkBorderRadius":"var(--lia-bs-border-radius-sm)","linkHoverColor":"var(--lia-bs-body-color)","position":"FIXED","linkBorder":"none","linkTextBorderBottomHover":"2px solid var(--lia-bs-body-color)","brandMarginRight":"30px","hamburgerHoverColor":"var(--lia-nav-controller-icon-color)","linkBorderHover":"none","collapseMenuMarginLeft":"20px","linkFontStyle":"NORMAL","controllerTextHoverColor":"var(--lia-nav-controller-icon-hover-color)","linkPaddingX":"10px","linkPaddingY":"5px","paddingTop":"15px","linkTextTransform":"NONE","dropdownBorderColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.08)","controllerBgHoverColor":"hsla(var(--lia-bs-black-h), var(--lia-bs-black-s), var(--lia-bs-black-l), 0.1)","linkBgColor":"transparent","linkDropdownPaddingX":"var(--lia-nav-link-px)","linkDropdownPaddingY":"9px","controllerIconColor":"var(--lia-bs-body-color)","dropdownDividerMarginTop":"10px","linkGap":"10px","controllerIconHoverColor":"var(--lia-bs-body-color)"},"showSearchIcon":false,"languagePickerStyle":"iconAndLabel"},"__typename":"QuiltComponent"},{"id":"community.widget.breadcrumbWidget","props":{"backgroundColor":"transparent","linkHighlightColor":"var(--lia-bs-primary)","visualEffects":{"showBottomBorder":true},"linkTextColor":"var(--lia-bs-gray-700)"},"__typename":"QuiltComponent"},{"id":"custom.widget.HeroBanner","props":{"widgetVisibility":"signedInOrAnonymous","usePageWidth":false,"useTitle":true,"cMax_items":3,"useBackground":false,"title":"","lazyLoad":false,"widgetChooser":"custom.widget.HeroBanner"},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"footer":{"backgroundImageProps":{"assetName":null,"backgroundSize":"COVER","backgroundRepeat":"NO_REPEAT","backgroundPosition":"CENTER_CENTER","lastModified":null,"__typename":"BackgroundImageProps"},"backgroundColor":"transparent","items":[{"id":"custom.widget.MicrosoftFooter","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"useBackground":false,"title":"","lazyLoad":false},"__typename":"QuiltComponent"}],"__typename":"QuiltWrapperSection"},"__typename":"QuiltWrapper","localOverride":false},"localOverride":false},"CachedAsset:text:en_US-components/common/ActionFeedback-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745505307000","value":{"joinedGroupHub.title":"Welcome","joinedGroupHub.message":"You are now a member of this group and are subscribed to updates.","groupHubInviteNotFound.title":"Invitation Not Found","groupHubInviteNotFound.message":"Sorry, we could not find your invitation to the group. The owner may have canceled the invite.","groupHubNotFound.title":"Group Not Found","groupHubNotFound.message":"The grouphub you tried to join does not exist. It may have been deleted.","existingGroupHubMember.title":"Already Joined","existingGroupHubMember.message":"You are already a member of this group.","accountLocked.title":"Account Locked","accountLocked.message":"Your account has been locked due to multiple failed attempts. Try again in {lockoutTime} minutes.","editedGroupHub.title":"Changes Saved","editedGroupHub.message":"Your group has been updated.","leftGroupHub.title":"Goodbye","leftGroupHub.message":"You are no longer a member of this group and will not receive future updates.","deletedGroupHub.title":"Deleted","deletedGroupHub.message":"The group has been deleted.","groupHubCreated.title":"Group Created","groupHubCreated.message":"{groupHubName} is ready to use","accountClosed.title":"Account Closed","accountClosed.message":"The account has been closed and you will now be redirected to the homepage","resetTokenExpired.title":"Reset Password Link has Expired","resetTokenExpired.message":"Try resetting your password again","invalidUrl.title":"Invalid URL","invalidUrl.message":"The URL you're using is not recognized. Verify your URL and try again.","accountClosedForUser.title":"Account Closed","accountClosedForUser.message":"{userName}'s account is closed","inviteTokenInvalid.title":"Invitation Invalid","inviteTokenInvalid.message":"Your invitation to the community has been canceled or expired.","inviteTokenError.title":"Invitation Verification Failed","inviteTokenError.message":"The url you are utilizing is not recognized. Verify your URL and try again","pageNotFound.title":"Access Denied","pageNotFound.message":"You do not have access to this area of the community or it doesn't exist","eventAttending.title":"Responded as Attending","eventAttending.message":"You'll be notified when there's new activity and reminded as the event approaches","eventInterested.title":"Responded as Interested","eventInterested.message":"You'll be notified when there's new activity and reminded as the event approaches","eventNotFound.title":"Event Not Found","eventNotFound.message":"The event you tried to respond to does not exist.","redirectToRelatedPage.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.title":"Showing Related Content","redirectToRelatedPageForBaseUsers.message":"The content you are trying to access is archived","redirectToRelatedPage.message":"The content you are trying to access is archived","relatedUrl.archivalLink.flyoutMessage":"The content you are trying to access is archived View Archived Content"},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-us-1746740527270":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-us-1746740527270","value":{"component":{"id":"custom.widget.HeroBanner","template":{"id":"HeroBanner","markupLanguage":"REACT","style":null,"texts":{"searchPlaceholderText":"Search this community","followActionText":"Follow","unfollowActionText":"Following","searchOnHoverText":"Please enter your search term(s) and then press return key to complete a search.","blogs.sidebar.pagetitle":"Latest Blogs | Microsoft Tech Community","followThisNode":"Follow this node","unfollowThisNode":"Unfollow this node"},"defaults":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.HeroBanner","form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":null,"fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[{"id":"max_items","dataType":"NUMBER","list":false,"defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"control":"INPUT","__typename":"PropDefinition"}],"__typename":"ComponentProperties"},"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"},"__typename":"Component","localOverride":false},"globalCss":null,"form":{"fields":[{"id":"widgetChooser","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"title","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useTitle","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"useBackground","validation":null,"noValidation":null,"dataType":"BOOLEAN","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"widgetVisibility","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"moreOptions","validation":null,"noValidation":null,"dataType":"STRING","list":null,"control":null,"defaultValue":null,"label":null,"description":null,"possibleValues":null,"__typename":"FormField"},{"id":"cMax_items","validation":null,"noValidation":null,"dataType":"NUMBER","list":false,"control":"INPUT","defaultValue":"3","label":"Max Items","description":"The maximum number of items to display in the carousel","possibleValues":null,"__typename":"FormField"}],"layout":{"rows":[{"id":"widgetChooserGroup","type":"fieldset","as":null,"items":[{"id":"widgetChooser","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"titleGroup","type":"fieldset","as":null,"items":[{"id":"title","className":null,"__typename":"FormFieldRef"},{"id":"useTitle","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"useBackground","type":"fieldset","as":null,"items":[{"id":"useBackground","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"widgetVisibility","type":"fieldset","as":null,"items":[{"id":"widgetVisibility","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"moreOptionsGroup","type":"fieldset","as":null,"items":[{"id":"moreOptions","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"},{"id":"componentPropsGroup","type":"fieldset","as":null,"items":[{"id":"cMax_items","className":null,"__typename":"FormFieldRef"}],"props":null,"legend":null,"description":null,"className":null,"viewVariant":null,"toggleState":null,"__typename":"FormFieldset"}],"actionButtons":null,"className":"custom_widget_HeroBanner_form","formGroupFieldSeparator":"divider","__typename":"FormLayout"},"__typename":"Form"}},"localOverride":false},"CachedAsset:component:custom.widget.MicrosoftFooter-en-us-1746740527270":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-us-1746740527270","value":{"component":{"id":"custom.widget.MicrosoftFooter","template":{"id":"MicrosoftFooter","markupLanguage":"HANDLEBARS","style":".context-uhf {\n min-width: 280px;\n font-size: 15px;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.c-uhff-link {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.c-uhff {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.c-uhff-nav {\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n .c-heading-4 {\n color: #616161;\n word-break: break-word;\n font-size: 15px;\n line-height: 20px;\n padding: 36px 0 4px;\n font-weight: 600;\n }\n .c-uhff-nav-row {\n .c-uhff-nav-group {\n display: block;\n float: left;\n min-height: 1px;\n vertical-align: text-top;\n padding: 0 12px;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 12px;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.c-list.f-bare {\n font-size: 11px;\n line-height: 16px;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 8px 0;\n margin: 0;\n }\n }\n }\n }\n}\n.c-uhff-base {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(1600px + 10%);\n padding: 30px 5% 16px;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.c-uhff-ccpa {\n font-size: 11px;\n line-height: 16px;\n float: left;\n margin: 3px 0;\n }\n a.c-uhff-ccpa:hover {\n text-decoration: underline;\n }\n ul.c-list {\n font-size: 11px;\n line-height: 16px;\n float: right;\n margin: 3px 0;\n color: #616161;\n li {\n padding: 0 24px 4px 0;\n display: inline-block;\n }\n }\n .c-list.f-bare {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 30px 24px 16px;\n }\n}\n\n.social-share {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n\n.sharing-options {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 43px;\n border-radius: 0px 7px 7px 0px;\n}\n.linkedin-icon {\n border-top-right-radius: 7px;\n}\n.linkedin-icon:hover {\n border-radius: 0;\n}\n.social-share-rss-image {\n border-bottom-right-radius: 7px;\n}\n.social-share-rss-image:hover {\n border-radius: 0;\n}\n\n.social-link-footer {\n position: relative;\n display: block;\n margin: -2px 0;\n transition: all 0.2s ease;\n}\n.social-link-footer:hover .linkedin-icon {\n border-radius: 0;\n}\n.social-link-footer:hover .social-share-rss-image {\n border-radius: 0;\n}\n\n.social-link-footer img {\n width: 40px;\n height: auto;\n transition: filter 0.3s ease;\n}\n\n.social-share-list {\n width: 40px;\n}\n.social-share-rss-image {\n width: 40px;\n}\n\n.share-icon {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n\n.share-icon:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n\n.share-icon:hover .label {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n\n.label {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 10px;\n top: 50%;\n transform: translateY(-50%);\n height: 40px;\n border-radius: 0 6px 6px 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 20px 5px 20px 8px;\n margin-left: -1px;\n}\n.linkedin {\n background-color: #0474b4;\n}\n.facebook {\n background-color: #3c5c9c;\n}\n.twitter {\n background-color: white;\n color: black;\n}\n.reddit {\n background-color: #fc4404;\n}\n.mail {\n background-color: #848484;\n}\n.bluesky {\n background-color: white;\n color: black;\n}\n.rss {\n background-color: #ec7b1c;\n}\n#RSS {\n width: 40px;\n height: 40px;\n}\n\n@media (max-width: 991px) {\n .social-share {\n display: none;\n }\n}\n","texts":{"New tab":"What's New","New 1":"Surface Laptop Studio 2","New 2":"Surface Laptop Go 3","New 3":"Surface Pro 9","New 4":"Surface Laptop 5","New 5":"Surface Studio 2+","New 6":"Copilot in Windows","New 7":"Microsoft 365","New 8":"Windows 11 apps","Store tab":"Microsoft Store","Store 1":"Account Profile","Store 2":"Download Center","Store 3":"Microsoft Store Support","Store 4":"Returns","Store 5":"Order tracking","Store 6":"Certified Refurbished","Store 7":"Microsoft Store Promise","Store 8":"Flexible Payments","Education tab":"Education","Edu 1":"Microsoft in education","Edu 2":"Devices for education","Edu 3":"Microsoft Teams for Education","Edu 4":"Microsoft 365 Education","Edu 5":"How to buy for your school","Edu 6":"Educator Training and development","Edu 7":"Deals for students and parents","Edu 8":"Azure for students","Business tab":"Business","Bus 1":"Microsoft Cloud","Bus 2":"Microsoft Security","Bus 3":"Dynamics 365","Bus 4":"Microsoft 365","Bus 5":"Microsoft Power Platform","Bus 6":"Microsoft Teams","Bus 7":"Microsoft Industry","Bus 8":"Small Business","Developer tab":"Developer & IT","Dev 1":"Azure","Dev 2":"Developer Center","Dev 3":"Documentation","Dev 4":"Microsoft Learn","Dev 5":"Microsoft Tech Community","Dev 6":"Azure Marketplace","Dev 7":"AppSource","Dev 8":"Visual Studio","Company tab":"Company","Com 1":"Careers","Com 2":"About Microsoft","Com 3":"Company News","Com 4":"Privacy at Microsoft","Com 5":"Investors","Com 6":"Diversity and inclusion","Com 7":"Accessiblity","Com 8":"Sustainibility"},"defaults":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.MicrosoftFooter","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"The Microsoft Footer","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_MicrosoftFooter_context-uhf_105bp_1 {\n min-width: 17.5rem;\n font-size: 0.9375rem;\n box-sizing: border-box;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n & *,\n & *:before,\n & *:after {\n box-sizing: inherit;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-link_105bp_12 {\n color: #616161;\n word-break: break-word;\n text-decoration: none;\n }\n &a:link,\n &a:focus,\n &a:hover,\n &a:active,\n &a:visited {\n text-decoration: none;\n color: inherit;\n }\n & div {\n font-family: 'Segoe UI', SegoeUI, 'Helvetica Neue', Helvetica, Arial, sans-serif;\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff_105bp_12 {\n background: #f2f2f2;\n margin: -1.5625;\n width: auto;\n height: auto;\n}\n.custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35 {\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 0 5%;\n box-sizing: inherit;\n &:before,\n &:after {\n content: ' ';\n display: table;\n clear: left;\n }\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n .custom_widget_MicrosoftFooter_c-heading-4_105bp_49 {\n color: #616161;\n word-break: break-word;\n font-size: 0.9375rem;\n line-height: 1.25rem;\n padding: 2.25rem 0 0.25rem;\n font-weight: 600;\n }\n .custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57 {\n .custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58 {\n display: block;\n float: left;\n min-height: 0.0625rem;\n vertical-align: text-top;\n padding: 0 0.75rem;\n width: 100%;\n zoom: 1;\n &:first-child {\n padding-left: 0;\n @media only screen and (max-width: 1083px) {\n padding-left: 0.75rem;\n }\n }\n @media only screen and (min-width: 540px) and (max-width: 1082px) {\n width: 33.33333%;\n }\n @media only screen and (min-width: 1083px) {\n width: 16.6666666667%;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n list-style-type: none;\n li {\n word-break: break-word;\n padding: 0.5rem 0;\n margin: 0;\n }\n }\n }\n }\n}\n.custom_widget_MicrosoftFooter_c-uhff-base_105bp_94 {\n background: #f2f2f2;\n margin: 0 auto;\n max-width: calc(100rem + 10%);\n padding: 1.875rem 5% 1rem;\n &:before,\n &:after {\n content: ' ';\n display: table;\n }\n &:after {\n clear: both;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: left;\n margin: 0.1875rem 0;\n }\n a.custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107:hover {\n text-decoration: underline;\n }\n ul.custom_widget_MicrosoftFooter_c-list_105bp_78 {\n font-size: 0.6875rem;\n line-height: 1rem;\n float: right;\n margin: 0.1875rem 0;\n color: #616161;\n li {\n padding: 0 1.5rem 0.25rem 0;\n display: inline-block;\n }\n }\n .custom_widget_MicrosoftFooter_c-list_105bp_78.custom_widget_MicrosoftFooter_f-bare_105bp_78 {\n padding-left: 0;\n list-style-type: none;\n }\n @media only screen and (max-width: 1083px) {\n display: flex;\n flex-wrap: wrap;\n padding: 1.875rem 1.5rem 1rem;\n }\n}\n.custom_widget_MicrosoftFooter_social-share_105bp_138 {\n position: fixed;\n top: 60%;\n transform: translateY(-50%);\n left: 0;\n z-index: 1000;\n}\n.custom_widget_MicrosoftFooter_sharing-options_105bp_146 {\n list-style: none;\n padding: 0;\n margin: 0;\n display: block;\n flex-direction: column;\n background-color: white;\n width: 2.6875rem;\n border-radius: 0 0.4375rem 0.4375rem 0;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-top-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_linkedin-icon_105bp_156:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-bottom-right-radius: 7px;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162:hover {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 {\n position: relative;\n display: block;\n margin: -0.125rem 0;\n transition: all 0.2s ease;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_linkedin-icon_105bp_156 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169:hover .custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n border-radius: 0;\n}\n.custom_widget_MicrosoftFooter_social-link-footer_105bp_169 img {\n width: 2.5rem;\n height: auto;\n transition: filter 0.3s ease;\n}\n.custom_widget_MicrosoftFooter_social-share-list_105bp_188 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162 {\n width: 2.5rem;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195 {\n border: 2px solid transparent;\n display: inline-block;\n position: relative;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover {\n opacity: 1;\n border: 2px solid white;\n box-sizing: border-box;\n}\n.custom_widget_MicrosoftFooter_share-icon_105bp_195:hover .custom_widget_MicrosoftFooter_label_105bp_207 {\n opacity: 1;\n visibility: visible;\n border: 2px solid white;\n box-sizing: border-box;\n border-left: none;\n}\n.custom_widget_MicrosoftFooter_label_105bp_207 {\n position: absolute;\n left: 100%;\n white-space: nowrap;\n opacity: 0;\n visibility: hidden;\n transition: all 0.2s ease;\n color: white;\n border-radius: 0 10 0 0.625rem;\n top: 50%;\n transform: translateY(-50%);\n height: 2.5rem;\n border-radius: 0 0.375rem 0.375rem 0;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 1.25rem 0.3125rem 1.25rem 0.5rem;\n margin-left: -0.0625rem;\n}\n.custom_widget_MicrosoftFooter_linkedin_105bp_156 {\n background-color: #0474b4;\n}\n.custom_widget_MicrosoftFooter_facebook_105bp_237 {\n background-color: #3c5c9c;\n}\n.custom_widget_MicrosoftFooter_twitter_105bp_240 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_reddit_105bp_244 {\n background-color: #fc4404;\n}\n.custom_widget_MicrosoftFooter_mail_105bp_247 {\n background-color: #848484;\n}\n.custom_widget_MicrosoftFooter_bluesky_105bp_250 {\n background-color: white;\n color: black;\n}\n.custom_widget_MicrosoftFooter_rss_105bp_254 {\n background-color: #ec7b1c;\n}\n#custom_widget_MicrosoftFooter_RSS_105bp_1 {\n width: 2.5rem;\n height: 2.5rem;\n}\n@media (max-width: 991px) {\n .custom_widget_MicrosoftFooter_social-share_105bp_138 {\n display: none;\n }\n}\n","tokens":{"context-uhf":"custom_widget_MicrosoftFooter_context-uhf_105bp_1","c-uhff-link":"custom_widget_MicrosoftFooter_c-uhff-link_105bp_12","c-uhff":"custom_widget_MicrosoftFooter_c-uhff_105bp_12","c-uhff-nav":"custom_widget_MicrosoftFooter_c-uhff-nav_105bp_35","c-heading-4":"custom_widget_MicrosoftFooter_c-heading-4_105bp_49","c-uhff-nav-row":"custom_widget_MicrosoftFooter_c-uhff-nav-row_105bp_57","c-uhff-nav-group":"custom_widget_MicrosoftFooter_c-uhff-nav-group_105bp_58","c-list":"custom_widget_MicrosoftFooter_c-list_105bp_78","f-bare":"custom_widget_MicrosoftFooter_f-bare_105bp_78","c-uhff-base":"custom_widget_MicrosoftFooter_c-uhff-base_105bp_94","c-uhff-ccpa":"custom_widget_MicrosoftFooter_c-uhff-ccpa_105bp_107","social-share":"custom_widget_MicrosoftFooter_social-share_105bp_138","sharing-options":"custom_widget_MicrosoftFooter_sharing-options_105bp_146","linkedin-icon":"custom_widget_MicrosoftFooter_linkedin-icon_105bp_156","social-share-rss-image":"custom_widget_MicrosoftFooter_social-share-rss-image_105bp_162","social-link-footer":"custom_widget_MicrosoftFooter_social-link-footer_105bp_169","social-share-list":"custom_widget_MicrosoftFooter_social-share-list_105bp_188","share-icon":"custom_widget_MicrosoftFooter_share-icon_105bp_195","label":"custom_widget_MicrosoftFooter_label_105bp_207","linkedin":"custom_widget_MicrosoftFooter_linkedin_105bp_156","facebook":"custom_widget_MicrosoftFooter_facebook_105bp_237","twitter":"custom_widget_MicrosoftFooter_twitter_105bp_240","reddit":"custom_widget_MicrosoftFooter_reddit_105bp_244","mail":"custom_widget_MicrosoftFooter_mail_105bp_247","bluesky":"custom_widget_MicrosoftFooter_bluesky_105bp_250","rss":"custom_widget_MicrosoftFooter_rss_105bp_254","RSS":"custom_widget_MicrosoftFooter_RSS_105bp_1"}},"form":null},"localOverride":false},"CachedAsset:text:en_US-components/community/Breadcrumb-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745505307000","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagsHeaderWidget-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagsHeaderWidget-1745505307000","value":{"tag":"{tagName}","topicsCount":"{count} {count, plural, one {Topic} other {Topics}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505307000","value":{"title@userScope:other":"Recent Content","title@userScope:self":"Contributions","title@board:FORUM@userScope:other":"Recent Discussions","title@board:BLOG@userScope:other":"Recent Blogs","emptyDescription":"No content to show","MessageListForNodeByRecentActivityWidgetEditor.nodeScope.label":"Scope","title@instance:1722894000155":"Recent Discussions","title@instance:1727367112619":"Recent Blog Articles","title@instance:1727367069748":"Recent Discussions","title@instance:1727366213114":"Latest Discussions","title@instance:1727899609720":"","title@instance:1727363308925":"Latest Discussions","title@instance:1737115580352":"Latest Articles","title@instance:1720453418992":"Recent Discssions","title@instance:1727365950181":"Latest Blog Articles","title@instance:bmDPnI":"Latest Blog Articles","title@instance:IiDDJZ":"Latest Blog Articles","title@instance:1721244347979":"Latest blog posts","title@instance:1728383752171":"Related Content","title@instance:1722893956545":"Latest Skilling Resources","title@instance:dhcgCU":"Latest Discussions"},"localOverride":false},"Category:category:Exchange":{"__typename":"Category","id":"category:Exchange","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Outlook":{"__typename":"Category","id":"category:Outlook","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Community-Info-Center":{"__typename":"Category","id":"category:Community-Info-Center","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:EducationSector":{"__typename":"Category","id":"category:EducationSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:DrivingAdoption":{"__typename":"Category","id":"category:DrivingAdoption","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Azure":{"__typename":"Category","id":"category:Azure","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows-Server":{"__typename":"Category","id":"category:Windows-Server","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftTeams":{"__typename":"Category","id":"category:MicrosoftTeams","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PublicSector":{"__typename":"Category","id":"category:PublicSector","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft365":{"__typename":"Category","id":"category:microsoft365","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:IoT":{"__typename":"Category","id":"category:IoT","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:HealthcareAndLifeSciences":{"__typename":"Category","id":"category:HealthcareAndLifeSciences","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:ITOpsTalk":{"__typename":"Category","id":"category:ITOpsTalk","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftLearn":{"__typename":"Category","id":"category:MicrosoftLearn","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Blog:board:MicrosoftLearnBlog":{"__typename":"Blog","id":"board:MicrosoftLearnBlog","blogPolicies":{"__typename":"BlogPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"boardPolicies":{"__typename":"BoardPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftMechanics":{"__typename":"Category","id":"category:MicrosoftMechanics","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:MicrosoftforNonprofits":{"__typename":"Category","id":"category:MicrosoftforNonprofits","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:StartupsatMicrosoft":{"__typename":"Category","id":"category:StartupsatMicrosoft","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:PartnerCommunity":{"__typename":"Category","id":"category:PartnerCommunity","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Microsoft365Copilot":{"__typename":"Category","id":"category:Microsoft365Copilot","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Windows":{"__typename":"Category","id":"category:Windows","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:Content_Management":{"__typename":"Category","id":"category:Content_Management","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoft-security":{"__typename":"Category","id":"category:microsoft-security","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Category:category:microsoftintune":{"__typename":"Category","id":"category:microsoftintune","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}}},"Conversation:conversation:4401836":{"__typename":"Conversation","id":"conversation:4401836","topic":{"__typename":"BlogTopicMessage","uid":4401836},"lastPostingActivityTime":"2025-04-24T10:27:49.434-07:00","solved":false},"User:user:55564":{"__typename":"User","uid":55564,"login":"Naomi Moneypenny","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS01NTU2NC1ONjRSQTE?image-coordinates=0%2C0%2C400%2C400"},"id":"user:55564"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxODM2LVpMVTRkVQ?revision=4\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxODM2LVpMVTRkVQ?revision=4","title":"ChatGPT Image Apr 9, 2025, 10_47_28 AM.png","associationType":"COVER","width":1024,"height":1024,"altText":""},"BlogTopicMessage:message:4401836":{"__typename":"BlogTopicMessage","subject":"Unlocking Document Intelligence: Mistral OCR Now Available in Azure AI Foundry","conversation":{"__ref":"Conversation:conversation:4401836"},"id":"message:4401836","revisionNum":4,"uid":4401836,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:55564"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"Reveal the hidden potential of your documents with Mistral OCR, now available in Azure AI Foundry. This state-of-the-art OCR model transforms unstructured content into actionable insights with unmatched speed, precision, and multilingual versatility.","metrics":{"__typename":"MessageMetrics","views":4845},"postTime":"2025-04-09T10:45:25.113-07:00","lastPublishTime":"2025-04-09T10:54:55.724-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Every organization has a treasure trove of information—buried not in databases, but in documents. From scanned contracts and handwritten forms to research papers and regulatory filings, this knowledge often sits locked in static formats, invisible to modern AI systems. \n Imagine if we could teach machines not just to read, but to truly understand the structure and nuance of these documents. What if equations, images, tables, and multilingual text could be seamlessly extracted, indexed, and acted upon—at scale? \n That future is here. \n Today we are announcing the launch of Mistral OCR in the Azure AI Foundry model catalog—a state-of-the-art Optical Character Recognition (OCR) model that brings intelligent document understanding to a whole new level. Designed for speed, precision, and multilingual versatility, Mistral OCR unlocks the potential of unstructured content with unmatched performance. \n From Patient Charts to Investment Reports—Built for Every Industry \n Mistral OCR’s ability to extract structure from complex documents makes it transformative across a range of verticals: \n Healthcare \n Hospitals and health systems can digitize clinical notes, lab results, and patient intake forms, transforming scanned content into structured data for downstream AI applications—improving care coordination, automation, and insights. \n Finance & Insurance \n From loan applications and KYC documents to claims forms and regulatory disclosures, Mistral OCR helps financial institutions process sensitive documents faster, more accurately, and with multilingual support—ensuring compliance and improving operational efficiency. \n Education & Research \n Academic institutions and research teams can turn PDFs of scientific papers, course materials, and diagrams into AI-readable formats. Mistral OCR’s support for equations, charts, and LaTeX-style formatting makes it ideal for scientific knowledge extraction. \n Legal & Government \n With its multilingual and high-fidelity OCR capabilities, legal teams and public agencies can digitize contracts, historical records, and filings—accelerating review workflows, preserving archival materials, and enabling transparent governance. \n \n Key Highlights of Mistral OCR \n According to Mistral their OCR model stands apart due to the following: \n \n State-of-the-Art Document Understanding \n \n Mistral OCR excels in parsing complex, multimodal documents—extracting tables, math, and figures with markdown-style clarity. It goes beyond recognition to deliver understanding. \n benchmark testing. Whether you’re working in Hindi, Arabic, French, or Chinese—this model adapts seamlessly. \n \n State-of-the-Art Document Understanding \n \n Mistral OCR excels in parsing complex, multimodal documents—extracting tables, math, and figures with markdown-style clarity. It goes beyond recognition to deliver understanding. \n \n Multilingual by Design \n \n With support for dozens of languages and scripts, Mistral OCR achieves 99%+ fuzzy match scores in benchmark testing. Whether you’re working in Hindi, Arabic, French, or Chinese—this model adapts seamlessly. \n \n Fastest in Its Class \n \n Process up to 2,000 pages per minute on a single node. This speed makes it ideal for enterprise document pipelines and real-time applications. \n \n Doc-as-Prompt + Structured Output \n \n Turn documents into intelligent prompts—then extract structured, JSON-formatted output for downstream use in agents, workflows, or analytics engines. \n \n Why use Mistral OCR on Azure AI Foundry? \n Mistral OCR is now available as serverless APIs through Models as a Service (MaaS) in Azure AI Foundry. This enables enterprise-scale workloads with ease. \n \n Network Isolation for Inferencing: Protect your data from public network access. \n Expanded Regional Availability: Access from multiple regions. \n Data Privacy and Security: Robust measures to ensure data protection. \n Quick Endpoint Provisioning: Set up an OCR endpoint in Azure AI Foundry in seconds. \n \n Azure AI ensures seamless integration, enhanced security, and rapid deployment for your AI needs. \n \n How to deploy Mistral OCR model in Azure AI Foundry? \n Prerequisites: \n \n If you don’t have an Azure subscription, get one here: https://azure.microsoft.com/en-us/pricing/purchase-options/pay-as-you-go \n Familiarize yourself with Azure AI Model Catalog \n Create an Azure AI Foundry hub and project. Make sure you pick East US, West US3, South Central US, West US, North Central US, East US 2 or Sweden Central as the Azure region for the hub. \n \n Create a deployment to obtain the inference API and key: \n \n Open the model card in the model catalog on Azure AI Foundry. \n Click on Deploy and select the Pay-as-you-go option. \n Subscribe to the Marketplace offer and deploy. You can also review the API pricing at this step. \n You should land on the deployment page that shows you the API and key in less than a minute. \n \n These steps are outlined in detail in the product documentation. \n \n From Documents to Decisions \n The ability to extract meaning from documents—accurately, at scale, and across languages—is no longer a bottleneck. With Mistral OCR now available in Azure AI Foundry, organizations can move beyond basic text extraction to unlock true document intelligence. This isn’t just about reading documents. It’s about transforming how we interact with the knowledge they contain. \n Try it. Build with it. And see what becomes possible when documents speak your language. \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5722","kudosSumWeight":1,"repliesCount":7,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxODM2LVpMVTRkVQ?revision=4\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxODM2LVpMVTRkVQ?revision=4"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4401025":{"__typename":"Conversation","id":"conversation:4401025","topic":{"__typename":"BlogTopicMessage","uid":4401025},"lastPostingActivityTime":"2025-04-07T08:00:43.443-07:00","solved":false},"User:user:1342559":{"__typename":"User","uid":1342559,"login":"Marco_Casalaina","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xMzQyNTU5LTM1ODI3NGkzQTI5ODhEODMxQjM3QkI4"},"id":"user:1342559"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxMDI1LWlFb2Zqcw?revision=2\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxMDI1LWlFb2Zqcw?revision=2","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"BlogTopicMessage:message:4401025":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Computer Use Agents Have Arrived","conversation":{"__ref":"Conversation:conversation:4401025"},"id":"message:4401025","revisionNum":2,"uid":4401025,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1342559"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Discover the groundbreaking advancements in AI with Computer Use Agents (CUAs). In this blog, Marco Casalaina shares how to use the Responses API from Azure OpenAI Service, showcasing how CUAs can launch apps, navigate websites, and reason through tasks. Learn how CUAs utilize multimodal models for computer vision and AI frameworks to enhance automation. Explore the differences between CUAs and traditional Robotic Process Automation (RPA), and understand how CUAs can complement RPA systems. Dive into the future of automation and see how CUAs are set to revolutionize the way we interact with technology. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":2519},"postTime":"2025-04-07T08:00:43.443-07:00","lastPublishTime":"2025-04-07T08:00:43.443-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" The Future of AI blog series is an evolving collection of posts from the AI Futures team in collaboration with subject matter experts across Microsoft. In this series, we explore tools and technologies that will drive the next generation of AI. Explore more at: https://aka.ms/the-future-of-ai \n The Future of AI: Computer Use Agents Have Arrived \n On March 11 we announced the availability of Azure OpenAI Service's Responses API, which includes a new type of agent: a Computer Use Agent, or CUA. CUAs can literally use a computer - launching apps, navigating websites, and reasoning their way through tasks. You have to see it to believe it. In today's blog we'll explore some common questions about Computer Use Agents. \n \n [ https://www.youtube.com/watch?v=3jXgyvCFkk0 ] \n The Responses API is not the only CUA out there. There are now a few of them on the market. Two others I've used heavily are open source: browser-use and UI-focused (aka UFO) agents . \n How Do CUAs Work? \n All CUAs use the vision capabilities of multimodal models to interpret what's happening on the screen, and they combine that with an AI agent framework that can plan tasks and reason out what to do next. Some CUAs, like the Responses API, can control any type of computer or virtual machine and rely solely on computer vision to understand the screen. Others, like browser-use and UFO agents, take other cues from the systems they're controlling. These CUAs that use \"hints\" from the system they're controlling can be more accurate, but they tend to be constrained as to the types of systems they support. \n UFOs can control a Windows computer or virtual machine, because it uses the Windows API to help it understand what's going on. Browser-use agents can only control a browser, not a whole computer or VM - but it uses the structure of the web page, called the DOM, in addition to computer vision to help it determine where it can click. You can see that in action in the below video - when it controls a page, it renders boxes around the areas of the page that are clickable. \n \n [https://youtu.be/lRv31JF4emY?si=FmT8btQ7TuYYVqIa] \n How to use CUAs \n Today, CUAs are in their infancy, and you use them by downloading and implementing one of the above-mentioned tools, or by using prebuilt capabilities like Operator in OpenAI’s ChatGPT. I anticipate they will soon be everywhere - in every OS, every browser, every phone OS. In the future, you may use these agents to order from eCommerce sites, arrange travel, and make restaurant reservations, and soon, you won't remember how you ever lived without them. \n Do CUAs Replace Robotic Process Automation (RPA)? \n For many years, people have used Robotic Process Automation systems like UiPath and Microsoft's own Power Automate Desktop to automate applications. These tools can control computers in similar ways to CUAs, clicking through apps and websites, but they lack a reasoning capability - so if they reach a screen that looks different from what they were programmed on, they often fail. \n But CUAs do not mean the end of RPA. In fact, they will likely be complementary tools. As a general rule, one should only use agents to perform tasks that require reasoning. If you're building an automation that is deterministic, where the tasks are predefined and the screens are not expected to change dramatically, RPA is the right choice, because agents like CUAs can make mistakes while reasoning out tasks, whereas traditional RPA executes rote steps one by one, never deviating from their instructions. \n Many RPA vendors, including UiPath, are already building CUA capabilities into their automation systems. This means you can use them to design processes that are semi-deterministic, where a large portion of the process can be accomplished just following programmed instructions, but where some of the process requires reasoning. This will tend to deliver the best of both worlds. \n Isn't it Inefficient for Agents to Click on User Interfaces Intended for Humans? \n Yes, sometimes it is inefficient. When it's possible to use an agent framework like Semantic Kernel and connect it directly to a service via an API, you should do that - it's far more efficient and robust. CUAs often struggle with things like date pickers, for example, whereas agents can usually call APIs with date parameters quite competently. But some sites and apps just do not have publicly accessible APIs, and in those cases, a CUA is a good choice. \n A middle ground is emerging with the /llms.txt proposal. Llms.txt is a text file that contains information that an agent can use to interpret a site or app without having to visually parse it. Over time, we expect this - or something like it - to emerge as a standard so that a site or app can be accessible both to humans and to agents. Nothing is set in stone yet, though. \n Give a CUA a spin today and see what you can automate! \n \n Learn more about the Responses API and Computer-Using Agent in Azure AI Foundry \n \n \n Explore Azure AI Foundry ai.azure.com \n \n \n Start using the Azure AI Foundry SDK \n \n \n Review the Azure AI Foundry documentation \n \n \n Take the Azure AI Learn courses \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5345","kudosSumWeight":3,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxMDI1LWlFb2Zqcw?revision=2\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTNqWGd5dkNGa2swLzE3NDQwMzc3MDk0Mjh8MHwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=3jXgyvCFkk0/1744037709428","thumbnail":"https://i.ytimg.com/vi/3jXgyvCFkk0/hqdefault.jpg","uploading":false,"height":240,"width":320,"title":null},"videoAssociationType":"INLINE_BODY"}},{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3lvdXR1LmJlL2xSdjMxSkY0ZW1ZP3NpPUZtVDhidFE3VHVZWVZxSWEvMTc0NDAzNzc0Nzk5MHwxfDI1OzI1fHw","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://youtu.be/lRv31JF4emY?si=FmT8btQ7TuYYVqIa/1744037747990","thumbnail":"https://i.ytimg.com/vi/lRv31JF4emY/hqdefault.jpg","uploading":false,"height":240,"width":320,"title":null},"videoAssociationType":"INLINE_BODY"}}],"totalCount":2,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00NDAxMDI1LWlFb2Zqcw?revision=2"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4394200":{"__typename":"Conversation","id":"conversation:4394200","topic":{"__typename":"BlogTopicMessage","uid":4394200},"lastPostingActivityTime":"2025-03-17T15:10:11.773-07:00","solved":false},"User:user:210546":{"__typename":"User","uid":210546,"login":"Lee_Stott","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yMTA1NDYtODM5MjVpMDI2ODNGQTMwMzAwNDFGQQ"},"id":"user:210546"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUdhbFE0ZQ?revision=8\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUdhbFE0ZQ?revision=8","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLXduMHF0eQ?revision=8\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLXduMHF0eQ?revision=8","title":"Coop Banner.png","associationType":"BODY","width":785,"height":127,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUxpMUlCUw?revision=8\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUxpMUlCUw?revision=8","title":"cooparchitecture.png","associationType":"BODY","width":820,"height":393,"altText":""},"BlogTopicMessage:message:4394200":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Unleashing the Potential of AI Translation","conversation":{"__ref":"Conversation:conversation:4394200"},"id":"message:4394200","revisionNum":8,"uid":4394200,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:210546"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" The Co-op Translator automates the translation of markdown files and text within images using Azure AI Foundry. This open-source tool leverages advanced Large Language Model (LLM) technology through Azure OpenAI Services and Azure AI Vision to provide high-quality translations. Designed to break language barriers, the Co-op Translator features an easy-to-use command line interface and Python package, making technical content globally accessible with minimal manual effort. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":443},"postTime":"2025-03-17T15:10:11.773-07:00","lastPublishTime":"2025-03-17T15:10:11.773-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" The Future of AI blog series is an evolving collection of posts from the AI Futures team in collaboration with subject matter experts across Microsoft. In this series, we explore tools and technologies that will drive the next generation of AI. Explore more at: https://aka.ms/the-future-of-ai \n The Future of AI: Unleashing the Potential of AI Translation \n \n Innovation is often driven by collaboration, and in the dynamic field of AI, tools that enhance communication, creativity, and understanding among developers are crucial. The Microsoft Co-op Translator is an ideal tool for assisting Azure AI Foundry developers and users in sharing their GitHub projects with the global community. The Co-op Translator can significantly benefits developers creating GitHub localised repositories. The command line interaction and additional CI/CD GitHub actions process can saves developers a considerable amount of time and effort that would otherwise be spent on manual translations. \n What is the Coop Translator? \n The Co-op Translator is an open-source tool that automates the translation of markdown files and text within images using Azure AI Foundry. It leverages advanced Large Language Model (LLM) technology using Azure Open AI Services and Azure AI Vision to provide high-quality translations. The tool can be used through PowerShell or bash CLI (command line interface) or via GitHub Actions, making it easy to integrate into existing project setups and reach global audiences with minimal effort. \n The Vision Behind Coop Translator \n The vision of Co-op Translator is to break language barriers by providing an easy-to-use command line tool and Python package for automating translations, making technical content globally accessible with minimal manual effort. \n This is an open-source solution, so the Co-op Translator tool is still a work in progress but offers a fantastic way to start automatic translations of GitHub repositories. It is designed to make technical content accessible to a global audience, thereby enhancing collaboration and inclusivity in the tech community \n Why It Matters \n \n Consistency and Accuracy: The tool helps to ensure that translations are consistent and accurate across all files and images. It maintains correct markdown syntax during translation and updates relative links and organizes folder structures automatically. \n Accessibility and Inclusivity: By making technical content accessible in multiple languages, Co-op Translator helps bridge language gaps and enhances collaboration among developers from diverse linguistic backgrounds. This inclusivity is crucial for global projects and communities. \n Integration with GitHub: Co-op Translator can be integrated into GitHub Actions, allowing automatic translations as part of the CI/CD pipeline. This seamless integration helps to ensures that translations are always up to date with the latest changes in the repository. \n Enhanced Collaboration: The tool encourages contributions from developers, students, and hobbyists at all levels. By simplifying the translation process, it fosters a collaborative environment where technical content can be shared and improved by a global audience. \n Fostering Inclusivity: From small startups to large enterprises, every individual has the opportunity to engage with AI, regardless of their expertise level. \n \n Co-op Translator is designed to democratize project documentation access by making information available in multiple languages. This tool leverages Azure AI Services, including Azure OpenAI Service and Azure AI Vision, to automate translations and streamline the localization process. By breaking language barriers, Co-op Translator helps facilitate collaboration among developers, educators, and students from diverse linguistic backgrounds. \n \n Inspiring Real-World Applications \n The Co-op Translator is a versatile tool that can be applied in various real-world scenarios, making it highly valuable for developers and organizations, at present the solution support 20 languages as standard. It includes language codes, language names. As this is an OSS project if you would like to add support for a new language, please add the corresponding language code, name, and appropriate font in the font_language_mappings.yml file located at src/co_op_translator/fonts/. \n Here are some key use cases: \n \n Technical Documentation: Co-op Translator can be used to translate technical documentation, such as the PhiCookbook, into multiple languages. This ensures technical content is accessible to a global audience, enhancing collaboration and knowledge sharing. \n Educational Content: The tool has been used in educational settings, to translate curriculums and learning materials. This helps educators and students from different linguistic backgrounds access the same high-quality content. \n Open-Source Projects: Co-op Translator is useful for open-source projects hosted on GitHub. It automates the translation of Markdown files and images, making it easier for contributors from around the world to understand and contribute to the project. \n Corporate Training: Organizations can use Co-op Translator to translate training materials and internal documentation, that employees in different regions have access to the same information. This can promote consistency and inclusivity within the company. \n Community Involvement: The tool helps to encourages developers, students, and hobbyists to contribute to the project. It emphasizes the importance of community feedback, new features, and demo projects to further enhance Co-op Translator. \n Open Source and Collaboration: Co-op Translator promotes open-source projects and collaboration within the tech community. It invites contributions and showcases the potential of the tool to make technical documentation accessible worldwide. \n \n \n How does this work \n \n \n The Co-op Translator works by utilizing a combination of Azure AI Foundry services to handle both text and image translations. Here’s a brief overview of how the code works: \n \n Markdown Translation: The tool scans Markdown files in the repository and uses GPT-4 in Azure OpenAI Service to translate the text into the desired languages. It preserves the markdown syntax during translation. \n Image Translation: For images containing embedded text, the tool uses Azure AI Vision to extract the text from the images. Once the text is extracted, it is translated using Azure OpenAI Service and then re-embedded into the images. \n Automation and Integration: The Co-op Translator can be integrated into GitHub Actions, allowing automatic translations as part of the CI/CD pipeline. Translations are kept up-to-date with the latest changes in the repository. \n Folder Structure and Links: The tool updates relative links and organizes folder structures automatically to maintain consistency across translated files. \n \n Breaking down the solution \n Let's take a more in-depth look at some of the key aspects of the solution. \n Understanding the markdown_translator.py File \n The markdown_translator.py file is part of a Python project designed to translate markdown documents using machine-based AI translation services. This file defines the MarkdownTranslator class, which serves as a base class for different markdown translation services. It handles various aspects of the translation process, including managing code blocks, splitting documents into manageable chunks, and updating links. The abstract base class allows for flexibility in implementing different translation providers. Below is a detailed breakdown of the key components and functionality of this file. \n \n \n Imports and Dependencies \n The file begins with importing necessary modules and functions: \n from abc import ABC, abstractmethod\nimport asyncio\nimport logging\nfrom pathlib import Path\nfrom co_op_translator.config.llm_config.provider import LLMProvider\nfrom co_op_translator.utils.llm.markdown_utils import (\n process_markdown,\n update_links,\n generate_prompt_template,\n count_links_in_markdown,\n process_markdown_with_many_links,\n replace_code_blocks_and_inline_code,\n restore_code_blocks_and_inline_code,\n)\nfrom co_op_translator.config.font_config import FontConfig\nfrom co_op_translator.config.llm_config.config import LLMConfig\n\nlogger = logging.getLogger(__name__) \n These imports include standard libraries (abc, asyncio, logging, pathlib) and custom modules from the co_op_translator package. \n The MarkdownTranslator Class \n The Markdown Translator class is an abstract base classhat provides a framework for translating Markdown documents. It includes several methods to handle different aspects of the translation process. \n Initialization \n The constructor initializes the class with an optional root_dir parameter and sets up the font configuration: \n class MarkdownTranslator(ABC):\n \"\"\"Base class for markdown translation services.\"\"\"\n\n def __init__(self, root_dir: Path = None):\n \"\"\"\n Initialize the MarkdownTranslator.\n\n Args:\n root_dir (Path, optional): The root directory of the project. Defaults to None.\n \"\"\"\n self.root_dir = root_dir\n self.font_config = FontConfig()\n \n This is the main method responsible for translating a mMarkdown document. It performs the following steps: \n \n Replace Code Blocks and Inline Code: Replaces code blocks and inline code with placeholders to avoid translation issues. \n Split Document into Chunks: Splits the document into chunks if it contains more than 30 links. \n Generate Translation Prompts: Creates translation prompts for each chunk. \n Translate Each Chunk: Translates each chunk sequentially. \n Restore Code Blocks and Inline Code: Restores the original code blocks and inline code from placeholders. \n Update Links and Add Disclaimer: Updates links in the translated content and appends a disclaimer. \n \n async def translate_markdown(\n self,\n document: str,\n language_code: str,\n md_file_path: str | Path,\n markdown_only: bool = False,\n ) -> str:\n \"\"\"\n Translate the markdown document to the specified language, handling documents with more than 10 links by splitting them into chunks.\n\n Args:\n document (str): The content of the markdown file.\n language_code (str): The target language code.\n md_file_path (str | Path): The file path of the markdown file.\n markdown_only (bool): Whether we're in markdown-only mode.\n\n Returns:\n str: The translated content with updated links and a disclaimer appended.\n \"\"\"\n md_file_path = Path(md_file_path)\n\n # Step 1: Replace code blocks and inline code with placeholders\n document_with_placeholders, placeholder_map = (\n replace_code_blocks_and_inline_code(document)\n )\n\n # Step 2: Split the document into chunks and generate prompts\n link_limit = 30\n if count_links_in_markdown(document_with_placeholders) > link_limit:\n logger.info(\n f\"Document contains more than {link_limit} links, splitting the document into chunks.\"\n )\n document_chunks = process_markdown_with_many_links(\n document_with_placeholders, link_limit\n )\n else:\n logger.info(\n f\"Document contains {link_limit} or fewer links, processing normally.\"\n )\n document_chunks = process_markdown(document_with_placeholders)\n\n # Step 3: Generate translation prompts and translate each chunk\n prompts = [\n generate_prompt_template(\n language_code, chunk, self.font_config.is_rtl(language_code)\n )\n for chunk in document_chunks\n ]\n results = await self._run_prompts_sequentially(prompts)\n translated_content = \"\\n\".join(results)\n\n # Step 4: Restore the code blocks and inline code from placeholders\n translated_content = restore_code_blocks_and_inline_code(\n translated_content, placeholder_map\n )\n\n # Step 5: Update links and add disclaimer\n updated_content = update_links(\n md_file_path,\n translated_content,\n language_code,\n self.root_dir,\n markdown_only=markdown_only,\n )\n disclaimer = await self.generate_disclaimer(language_code)\n updated_content += \"\\n\\n\" + disclaimer\n\n return updated_content \n \n _run_prompts_sequentially Method \n This method runs the translation prompts sequentially with a timeout for each chunk. It handles timeouts and errors gracefully: \n async def _run_prompts_sequentially(self, prompts):\n \"\"\"\n Run the translation prompts sequentially with a timeout for each chunk.\n\n Args:\n prompts (list): List of translation prompts.\n\n Returns:\n list: List of translated text chunks.\n \"\"\"\n results = []\n for index, prompt in enumerate(prompts):\n try:\n result = await asyncio.wait_for(\n self._run_prompt(prompt, index + 1, len(prompts)), timeout=300\n )\n results.append(result)\n except asyncio.TimeoutError:\n logger.warning(f\"Chunk {index + 1} translation timed out. Skipping...\")\n results.append(\n f\"Translation for chunk {index + 1} skipped due to timeout.\"\n )\n except Exception as e:\n logger.error(\n f\"Error during prompt execution for chunk {index + 1}: {e}\"\n )\n results.append(f\"Error during translation of chunk {index + 1}\")\n return results\n \n Abstract Method _run_prompt \n This abstract method must be implemented by subclasses to execute a single translation prompt: \n @abstractmethod\n async def _run_prompt(self, prompt, index, total):\n \"\"\"\n Execute a single translation prompt.\n\n Args:\n prompt (str): The translation prompt to execute.\n index (int): The index of the prompt.\n total (int): The total number of prompts.\n\n Returns:\n str: The translated text.\n \"\"\"\n pass\n\n async def generate_disclaimer(self, output_lang: str) -> str:\n \"\"\"\n Generate a disclaimer translation prompt for the specified language.\n\n Args:\n output_lang (str): The target language for the disclaimer.\n\n Returns:\n str: The translated disclaimer text.\n \"\"\"\n\n disclaimer_prompt = f\"\"\" Translate the following text to {output_lang}.\n\n **Disclaimer**: \n This document has been translated using machine-based AI translation services. While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation.\"\"\"\n\n disclaimer = await self._run_prompt(disclaimer_prompt, \"disclaimer prompt\", 1)\n\n return disclaimer \n create Class Method \n This factory method creates an appropriate markdown translator based on the available provider: \n @classmethod\n def create(cls, root_dir: Path = None) -> \"MarkdownTranslator\":\n \"\"\"\n Factory method to create appropriate markdown translator based on available provider.\n\n Args:\n root_dir: Optional root directory for the project\n\n Returns:\n MarkdownTranslator: An instance of the appropriate markdown translator.\n \"\"\"\n provider = LLMConfig.get_available_provider()\n if provider is None:\n raise ValueError(\"No valid LLM provider configured\")\n\n if provider == LLMProvider.AZURE_OPENAI:\n from co_op_translator.core.llm.providers.azure.markdown_translator import (\n AzureMarkdownTranslator,\n )\n\n return AzureMarkdownTranslator(root_dir)\n elif provider == LLMProvider.OPENAI:\n from co_op_translator.core.llm.providers.openai.markdown_translator import (\n OpenAIMarkdownTranslator,\n )\n\n return OpenAIMarkdownTranslator(root_dir)\n else:\n raise ValueError(f\"Unsupported provider: {provider}\")\n \n Understanding the TextTranslator Class in Python \n Next, we'll dive into the TextTranslator class, which is part of a larger project aimed at translating text using a Language Learning Model (LLM) API. This class is designed to be an abstract base class (ABC) that provides a blueprint for specific implementations of text translators using different LLM providers. The TextTranslator class provides a structured way to implement text translation using different LLM providers. By defining abstract methods and a factory method, it ensures that specific implementations adhere to a common interface, making the codebase more modular and easier to extend. \n Key Components \n Imports and Logging Setup \n \n from abc import ABC, abstractmethod\nimport logging\nfrom co_op_translator.utils.llm.text_utils import (\n gen_image_translation_prompt,\n remove_code_backticks,\n extract_yaml_lines,\n)\nfrom co_op_translator.config.llm_config.config import LLMConfig\nfrom co_op_translator.config.llm_config.provider import LLMProvider\n\nlogger = logging.getLogger(__name__)\n\n\nclass TextTranslator(ABC):\n def __init__(self):\n self.client = self.get_openai_client()\n\n @abstractmethod\n def get_openai_client(self):\n \"\"\"\n Initialize and return a client.\n\n Returns:\n The initialized AI model client.\n \"\"\"\n pass \n \n \n Abstract Base Class: TextTranslator inherits from ABC, making it an abstract class. \n \n \n Initialization: The constructor initializes the client attribute by calling an abstract method get_openai_client. \n \n Abstract Methods \n @abstractmethod\n def get_model_name(self):\n \"\"\"Get the model name for the provider.\"\"\"\n pass \n \n \n Abstract Methods: These methods must be implemented by any subclass. They define the contract for initializing the client and getting the model name. \n \n Image Text Translation \n def translate_image_text(self, text_data, target_language):\n \"\"\"\n Translate text data in image using the LLM API.\n\n Args:\n text_data (list): List of text lines to be translated.\n target_language (str): Target language for translation.\n\n Returns:\n list: List of translated text lines.\n \"\"\"\n prompt = gen_image_translation_prompt(text_data, target_language)\n response = self.client.chat.completions.create(\n model=self.get_model_name(),\n messages=[\n {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n {\"role\": \"user\", \"content\": prompt},\n ],\n max_tokens=2000,\n )\n return extract_yaml_lines(\n remove_code_backticks(response.choices[0].message. Content)\n ) \n \n \n Method: translate_image_text translates text extracted from images. \n \n \n Prompt Generation: Uses gen_image_translation_prompt to create a prompt for the LLM. \n \n \n API Call: Sends the prompt to the LLM API and processes the response. \n \n \n Response Processing: Extracts and cleans the translated text from the response. \n \n Text Translation \n def translate_text(self, text, target_language):\n \"\"\"\n Translate a given text into the target language using the LLM API.\n\n Args:\n text (str): The text to be translated.\n target_language (str): The target language code.\n\n Returns:\n str: The translated text.\n \"\"\"\n prompt = f\"Translate the following text into {target_language}:\\n\\n{text}\"\n response = self.client.chat.completions.create(\n model=self.get_model_name(),\n messages=[\n {\"role\": \"system\", \"content\": \"You are a helpful assistant.\"},\n {\"role\": \"user\", \"content\": prompt},\n ],\n max_tokens=2000,\n )\n translated_text = remove_code_backticks(response.choices[0].message.content)\n return translated_text\n \n return translated_text \n \n Method: translate_text translates plain text into the target language. \n \n \n Prompt Generation: Creates a prompt directly from the input text. \n \n \n API Call and Response Processing: Similar to translate_image_text. \n \n Factory Method \n @classmethod\n def create(cls):\n \"\"\"Factory method to create appropriate translator based on available provider.\"\"\"\n provider = LLMConfig.get_available_provider()\n if provider == LLMProvider.AZURE_OPENAI:\n from co_op_translator.core.llm.providers.azure.text_translator import (\n AzureTextTranslator,\n )\n\n return AzureTextTranslator()\n elif provider == LLMProvider.OPENAI:\n from co_op_translator.core.llm.providers.openai.text_translator import (\n OpenAITextTranslator,\n )\n\n return OpenAITextTranslator()\n else:\n raise ValueError(\"No valid LLM provider configured\")\n \n \n \n Factory Method: create dynamically selects and returns an instance of the appropriate translator class based on the configured provider. \n \n Understanding the ImageTranslator Class in Python \n Finally, we'll dive into the ImageTranslator class, a powerful tool for translating text within images using Azure's Computer Vision services. This class is part of a larger project aimed at automating the translation of text found in images, making it accessible in different languages. \n The ImageTranslator class is a comprehensive solution for translating text within images. By leveraging Azure's AI Vision services, it can extract text, translate it, and annotate the image with the translated text. This class is designed to be extensible, allowing for different vision providers to be integrated in the future. This method creates an instance of the appropriate ImageTranslator subclass based on the available vision provider, currently supporting Azure AI r Vision. \n Key Components \n Imports and Dependencies: \n import os\nimport logging\nimport numpy as np\nfrom PIL import Image, ImageFont\nfrom pathlib import Path\nfrom co_op_translator.config.font_config import FontConfig\nfrom co_op_translator.config.vision_config.config import VisionConfig\nfrom co_op_translator.config.vision_config.provider import VisionProvider\nfrom co_op_translator.utils.vision.image_utils import (\n get_average_color,\n get_text_color,\n create_filled_polygon_mask,\n draw_text_on_image,\n warp_image_to_bounding_box,\n get_image_mode,\n)\nfrom azure.ai.vision.imageanalysis.models import VisualFeatures\nfrom co_op_translator.core.llm.text_translator import TextTranslator\nfrom co_op_translator.utils.common.file_utils import generate_translated_filename\nfrom abc import ABC, abstractmethod\n\nlogger = logging.getLogger(__name__) \n A logger is initialized to track the execution flow and errors. \n ImageTranslator Class: \n class ImageTranslator(ABC):\n def __init__(self, default_output_dir=\"./translated_images\", root_dir=\".\"):\n \"\"\"\n Initialize the ImageTranslator with a default output directory.\n\n Args:\n default_output_dir (str): The default directory where translated images will be saved.\n \"\"\"\n self.text_translator = TextTranslator.create()\n self.font_config = FontConfig()\n self.root_dir = Path(root_dir)\n self.default_output_dir = default_output_dir\n os.makedirs(self.default_output_dir, exist_ok=True)\n\n @abstractmethod\n def get_image_analysis_client(self):\n \"\"\"\n Initialize and return an Image Analysis Client.\n\n Returns:\n ImageAnalysisClient: The initialized client.\n \"\"\"\n pass \n This method must be implemented by any subclass to provide an image analysis client, such as Azure's Computer Vision client. \n Extracting Text and Bounding Boxes: \n def extract_line_bounding_boxes(self, image_path):\n \"\"\"\n Extract line bounding boxes from an image using Azure Analysis Client.\n\n Args:\n image_path (str): Path to the image file.\n\n Returns:\n list: List of dictionaries containing text, bounding box coordinates, and confidence scores.\n\n Raises:\n Exception: If the OCR operation did not succeed.\n \"\"\"\n image_analysis_client = self.get_image_analysis_client()\n with open(image_path, \"rb\") as image_stream:\n image_data = image_stream.read()\n result = image_analysis_client.analyze(\n image_data=image_data,\n visual_features=[VisualFeatures.READ],\n )\n\n if result.read is not None and result.read.blocks:\n line_bounding_boxes = []\n for line in result.read.blocks[0].lines:\n bounding_box = []\n for point in line.bounding_polygon:\n bounding_box.append(point.x)\n bounding_box.append(point.y)\n line_bounding_boxes.append(\n {\n \"text\": line.text,\n \"bounding_box\": bounding_box,\n \"confidence\": line.words[0].confidence if line.words else None,\n }\n )\n return line_bounding_boxes\n else:\n raise Exception(\"No text was recognized in the image.\")\n \n This method uses the image analysis client to extract text and bounding boxes from an image. It reads the image, sends it to the client, and processes the results to extract text lines and their bounding boxes. \n Annotating Images: \n def plot_annotated_image(\n self,\n image_path,\n line_bounding_boxes,\n translated_text_list,\n target_language_code,\n destination_path=None,\n ):\n \"\"\"\n Plot annotated image with translated text.\n\n Args:\n image_path (str): Path to the image file.\n line_bounding_boxes (list): List of bounding boxes and text data.\n translated_text_list (list): List of translated texts.\n destination_path (str, optional): The path to save the translated image.\n If None, save in default location (./translated_images/).\n\n Returns:\n str: The path to the annotated image.\n \"\"\"\n # Load the image with the appropriate mode\n mode = get_image_mode(image_path)\n image = Image.open(image_path).convert(mode)\n\n font_size = 40\n font_path = self.font_config.get_font_path(target_language_code)\n font = ImageFont.truetype(font_path, font_size)\n\n # Annotate the image with translated text\n for line_info, translated_text in zip(\n line_bounding_boxes, translated_text_list\n ):\n bounding_box = line_info[\"bounding_box\"]\n\n # Get the average color of the bounding box area\n bg_color = get_average_color(image, bounding_box)\n text_color = get_text_color(bg_color)\n\n # Create a mask to fill the bounding box area with the background color\n mask_image = create_filled_polygon_mask(bounding_box, image.size, bg_color)\n\n if mode == \"RGBA\":\n # Composite the mask onto the image to fill the bounding box (for PNG images)\n image = Image.alpha_composite(image, mask_image)\n else:\n # Convert image to RGBA (if it's not already in RGBA mode)\n image = image.convert(\"RGBA\")\n mask_image = mask_image.convert(\"RGBA\")\n\n # Use alpha_composite to overlay mask_image onto the original image\n image = Image.alpha_composite(image, mask_image)\n\n # Draw the translated text onto a temporary image\n text_image = draw_text_on_image(translated_text, font, text_color)\n\n # Convert the text image to an array and warp it to fit the bounding box\n text_image_array = np.array(text_image)\n warped_text_image = warp_image_to_bounding_box(\n text_image_array, bounding_box, image.width, image.height\n )\n\n # Convert the warped text image back to PIL format and paste it onto the original image\n warped_text_image_pil = Image.fromarray(warped_text_image)\n image = Image.alpha_composite(image, warped_text_image_pil)\n\n actual_image_path = Path(image_path).resolve()\n\n # Generate the new filename based on the original file name, hash, and language code\n new_filename = generate_translated_filename(\n actual_image_path, target_language_code, self.root_dir\n )\n\n logger.info(f\"Resolved image path in plot_annotated_image: {actual_image_path}\")\n\n # Determine the output path using pathlib\n if destination_path is None:\n output_path = Path(self.default_output_dir) / new_filename\n else:\n output_path = Path(destination_path) / new_filename\n\n # Save the annotated image to the determined output path\n if mode == \"RGBA\":\n image.save(output_path)\n else:\n image = image.convert(\"RGB\") # Ensure JPG compatibility\n image.save(output_path, format=\"JPEG\")\n\n # Return the path to the annotated image\n return str(output_path) \n This method annotates the image with translated text. It loads the image, determines the appropriate font, and draws the translated text onto the image at the specified bounding boxes. \n Translating Images: \n def translate_image(self, image_path, target_language_code, destination_path=None):\n \"\"\"\n Translate text in an image and return the image annotated with the translated text.\n\n Args:\n image_path (str): Path to the image file.\n target_language_code (str): The language to translate the text into.\n destination_path (str, optional): The path to save the translated image.\n If None, save in default location (./translated_images/).\n\n Returns:\n str: The path to the annotated image, or the original image saved as a new file in case of errors.\n \"\"\"\n image_path = Path(image_path)\n\n try:\n # Extract text and bounding boxes from the image\n line_bounding_boxes = self.extract_line_bounding_boxes(image_path)\n\n # Generate the new filename based on the original file name, hash, and language code\n actual_image_path = Path(image_path).resolve()\n new_filename = generate_translated_filename(\n actual_image_path, target_language_code, self.root_dir\n )\n\n # Determine the output path using pathlib\n if destination_path is None:\n output_path = Path(self.default_output_dir) / new_filename\n else:\n output_path = Path(destination_path) / new_filename\n\n # Check if any text was recognized\n if not line_bounding_boxes:\n logger.info(\n f\"No text was recognized in the image: {image_path}. Saving the original image as the translated image.\"\n )\n\n # Load the original image and save it with the new name\n original_image = Image.open(image_path)\n original_image.save(output_path)\n\n return str(\n output_path\n ) # Return the new image path with original content\n\n # Extract the text data from the bounding boxes\n text_data = [line[\"text\"] for line in line_bounding_boxes]\n\n # Retrieve the name of the target language based on the language code\n target_language_name = self.font_config.get_language_name(\n target_language_code\n )\n\n # Translate the text data into the target language\n translated_text_list = self.text_translator.translate_image_text(\n text_data, target_language_name\n )\n\n # Annotate the image with the translated text and save the result\n return self.plot_annotated_image(\n image_path,\n line_bounding_boxes,\n translated_text_list,\n target_language_code,\n destination_path,\n )\n\n except Exception as e:\n logger.error(\n f\"Failed to translate image {image_path} due to an error: {e}. Saving the original image instead.\"\n )\n\n # Load the original image and save it with the new name\n actual_image_path = Path(image_path).resolve()\n new_filename = generate_translated_filename(\n actual_image_path, target_language_code, self.root_dir\n )\n output_path = Path(self.default_output_dir) / new_filename\n\n original_image = Image.open(image_path)\n original_image.save(output_path)\n\n return str(\n output_path\n ) # Return the path to the original image with the new name\n \n This method orchestrates the entire translation process. It extracts text from the image, translates it, and then annotates the image with the translated text. If an error occurs, it logs the error and saves the original image. \n Factory Method: \n @classmethod\n def create(\n cls, default_output_dir=\"./translated_images\", root_dir=\".\"\n ) -> \"ImageTranslator\":\n \"\"\"\n Factory method to create appropriate ImageTranslator instance.\n Currently only supports Azure Computer Vision.\n\n Args:\n default_output_dir (str): The default directory where translated images will be saved.\n root_dir (str): The root directory of the project.\n\n Returns:\n ImageTranslator: An instance of the appropriate image translator.\n \"\"\"\n try:\n from co_op_translator.config.vision_config.config import VisionConfig\n\n provider = VisionConfig.get_available_provider()\n\n if provider == VisionProvider.AZURE_COMPUTER_VISION:\n from co_op_translator.core.vision.providers.azure.image_translator import (\n AzureImageTranslator,\n )\n\n return AzureImageTranslator(default_output_dir, root_dir)\n\n except (ImportError, ValueError) as e:\n logger.warning(f\"Computer Vision is not properly configured: {e}\")\n raise ValueError(\n \"Computer Vision environment variables are not properly configured\"\n )\n \n Getting Started \n The Co-op Translator is a command-line interface (CLI) tool designed to help you translate all the Markdown files and images in your project into multiple languages. It provides a robust solution for developers and organizations seeking to enhance their global outreach and collaboration. \n \n Command \n \n Description \n \n translate -l \"language_codes\" \n \n Translates your project into specified languages. Example: translate -l \"es fr de\" translates into Spanish, French, and German. Use translates -l \"all\" to translate into all supported languages. \n \n translate -l \"language_codes\" -a \n \n Adds new translations without deleting existing ones (default behavior). \n \n translate -l \"language_codes\" -u \n \n Updates translations by deleting existing ones and re-creating them. Warning: This will delete all current translations for specified languages. \n \n translate -l \"language_codes\" -img \n \n Translates only image files. \n \n translate -l \"language_codes\" -md \n \n Translates only Markdown files. \n \n translate -l \"language_codes\" -chk \n \n Checks translated files for errors and retries translation if needed. \n \n translate -l \"language_codes\" -d \n \n Enables debug mode for detailed logging. \n \n translate -l \"language_codes\" -r \"root_dir\" \n \n Specifies the root directory of the project \n \n \n The Co-op Translator stands as a transformative tool in the realm of language translation, enabling developers and organizations to break down language barriers and foster global collaboration. By leveraging its capabilities, users can ensure their content is accessible to diverse linguistic communities, thereby promoting inclusivity and enhancing user engagement across the globe. \n \n Explore the Repository: Dive into the Co-op Translator's repository to understand its features and capabilities. Familiarize yourself with the documentation and setup guidelines to start integrating the tool into your projects. \n \n \n Contribute to the Project: As an open-source initiative, Co-op Translator welcomes contributions from the community. Add support for new languages by updating the font language mapping, share feedback, and collaborate on new features to enhance the tool's functionality. \n \n \n Utilize the Translator: Implement the Co-op Translator in your technical documentation, educational content, and corporate training materials. Ensure that your content is accessible to audiences from different linguistic backgrounds and cultures, thereby fostering global inclusivity. \n \n \n Join the Microsoft AI Discord Community: Engage with other developers, students, and hobbyists, share your projects and experiences of how you are using Azure AI Foundry services and models using the Co-op Translator. Participate in discussions, contribute to demo projects, and stay updated with the latest developments within the community. \n \n Azure AI Foundry developers, this is your opportunity. The Co-op Translator is designed to break users' language barriers and enhance collaboration. Whether creating advanced applications or addressing real-world issues, let this tool be your reliable partner in the pursuit of AI innovation and global inclusivity. \n What will you create next? The possibilities are boundless—begin exploring today! \n Build your own AI agent: \n \n Explore Azure AI Foundry models, agentic frameworks, and toolchain features Download the Azure AI Foundry SDK \n \n \n Review the AI Foundry documentation \n \n \n Take the Azure AI Learn Courses \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"39515","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUdhbFE0ZQ?revision=8\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLXduMHF0eQ?revision=8\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUxpMUlCUw?revision=8\"}"}}],"totalCount":3,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PWpYX3N3ZkhfS05VLzE3NDIyMjQzMzcwMDV8MHwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=jX_swfH_KNU/1742224337005","thumbnail":"https://i.ytimg.com/vi/jX_swfH_KNU/hqdefault.jpg","uploading":false,"height":240,"width":320,"title":null},"videoAssociationType":"INLINE_BODY"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUdhbFE0ZQ?revision=8"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:3977692":{"__typename":"Conversation","id":"conversation:3977692","topic":{"__typename":"BlogTopicMessage","uid":3977692},"lastPostingActivityTime":"2024-07-21T23:18:26.144-07:00","solved":false},"User:user:2129811":{"__typename":"User","uid":2129811,"login":"EricBoydMSFT","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yMTI5ODExLTUyNjE2M2k0MkJEQjA3MzRFREVGQTcz"},"id":"user:2129811"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIyOGkyQ0U1OUUwQUQ4NzFFREVF?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIyOGkyQ0U1OUUwQUQ4NzFFREVF?revision=15","title":"Azure AI Studio homepage.png","associationType":"BODY","width":1718,"height":2136,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIzM2lCRUZERjBDMEUxOUU0MzhC?revision=15\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIzM2lCRUZERjBDMEUxOUU0MzhC?revision=15","title":"Ignite_HeroAzureBlog_Banner_AI Data DigApp.png","associationType":"BODY","width":1200,"height":470,"altText":null},"BlogTopicMessage:message:3977692":{"__typename":"BlogTopicMessage","subject":"Unleashing the Power of Generative AI: Azure AI Studio Leads the Way","conversation":{"__ref":"Conversation:conversation:3977692"},"id":"message:3977692","revisionNum":15,"uid":3977692,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2129811"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Microsoft’s Azure AI Studio empowers AI developers with end-to-end platform to explore, build, test, and deploy solutions at scale ","introduction":"","metrics":{"__typename":"MessageMetrics","views":68649},"postTime":"2023-11-15T08:00:00.239-08:00","lastPublishTime":"2023-11-16T06:04:34.714-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Developers worldwide have been eagerly exploring generative AI as a driving force for innovation. However, navigating the complexities of prompt engineering, vector search engines, the retrieval augmented generation (RAG) pattern, and integration with Azure OpenAI Service can be daunting. Today, Microsoft is excited to announce the public preview of Azure AI Studio, a state-of-the-art platform designed to simplify generative AI application development, leveraging OpenAI models such as GPT4, alongside a wide array of other cutting-edge models and services. \n \n \n \n Build with Azure AI Studio \n \n Azure AI Studio ushers in a new era of generative AI development. It empowers developers to explore, build, test, and deploy their AI innovations at scale – moving faster from idea to impact. Whether creating custom copilots, enhancing search, delivering call center solutions, developing bots and bespoke applications, or a combination of these, Azure AI Studio provides the necessary support. The unified platform is tailor-made for AI developers to integrate pre-built services and models, prompt orchestration and evaluation, content safety, and responsible AI tools for privacy, security, and compliance, helping developers navigate the complexities of generative AI with confidence. \n \n \n Here’s what sets Azure AI Studio apart: \n \n \n Centralized Access: Explore our suite of cutting-edge AI tools and models – including sophisticated hybrid and semantic search to power retrieval augmented generation (RAG) applications. In addition, Azure AI Studio offers a comprehensive model catalog, including the latest multimodal models like GPT-4 Turbo with Vision coming soon to Azure OpenAI Service and open models like Falcon, Stable Diffusion, and the Llama 2 managed APIs. \n Superior Tools: Developers can ground models on their enterprise data and seamlessly integrate structured, unstructured, and real-time data using Microsoft Fabric. In addition, developers can build and train their own custom models. To ensure applications work at scale, Developers can test, verify, and refine model responses using prompt engineering tools like prompt flow. VS Code, GitHub Codespaces, Semantic Kernel, and LangChain integration deliver a code-centric experience. \n Responsible AI: Azure AI Studio helps developers integrate responsible AI principles into the development process and evaluate AI applications for quality and safety. They can also classify content and detect jailbreak risks using Azure AI Content Safety and monitor applications in production for ongoing compliance with their high standards. \n Thriving Partner Ecosystem: Benefit from the latest models from industry leaders like OpenAI, Nvidia, Hugging Face, Meta, and more, available through Azure AI Studio. \n \n Build on Trust \n Azure AI Studio is committed to responsible AI development. Our platform is designed with inclusivity in mind, collaborating with AI developers with disabilities to create a more accessible AI ecosystem. Additionally, Azure AI Studio integrates years of AI policy, research, and engineering expertise from Microsoft to help teams build safe, secure, and reliable AI solutions. Customers benefit from enterprise controls for data privacy, compliance, and security on infrastructure that is purpose-built for AI at scale. \n \n With our newly announced Customer Copyright Commitment, we will defend and indemnify commercial customers from any copyright claims related to their use of Azure OpenAI Service. We are also publishing new documentation to help customers mitigate the risk of infringing output. This will help customers build with confidence as they look to accelerate their external use of generative AI. Learn more here. \n \n Azure AI Studio in Action \n Developers can create tailored copilots for various applications, leveraging Azure AI Studio's pre-orchestrated capabilities. A gallery of industry-specific prompt samples helps facilitate the development of domain-specific copilots. Whether developing enterprise chat solutions, enhancing customer interactions with multimodal experiences, or delving into speech analytics, Azure AI Studio provides the needed tools. \n \n Fueling Customer Innovation Generative AI is a catalyst for innovation. With Azure AI Studio, customers are simplifying app development, maximizing existing digital investments, fueling innovation, and delivering exceptional customer experiences – driving revenue for their businesses. \n \n Learn how Siemens Digital Industries (DIS) is improving manufacturing operations, safety, and reliability using Azure AI Studio \n Learn how Perplexity.AI was able to speed time-to-market for its AI answer engine using Azure AI Studio \n \n Join the Era of AI \n Embark on your AI development journey with Azure AI Studio. Assemble powerful AI tools and machine learning models, enhancing efficiency while upholding responsibility. \n \n Are you ready to supercharge your digital stack with generative AI? Access Azure AI Studio now and explore our comprehensive software development kit (SDK), documentation, and training modules to kickstart your transformative journey. Let’s shape the future of AI together. \n \n Azure AI Studio preview \n Azure AI SDK \n Azure AI Studio documentation \n Introduction to Azure AI Studio (learn module) \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5532","kudosSumWeight":9,"repliesCount":2,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIyOGkyQ0U1OUUwQUQ4NzFFREVF?revision=15\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS0zOTc3NjkyLTUyNTIzM2lCRUZERjBDMEUxOUU0MzhC?revision=15\"}"}}],"totalCount":2,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4156078":{"__typename":"Conversation","id":"conversation:4156078","topic":{"__typename":"BlogTopicMessage","uid":4156078},"lastPostingActivityTime":"2024-06-03T15:42:12.077-07:00","solved":false},"User:user:2487289":{"__typename":"User","uid":2487289,"login":"Taonga_Banda","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/avatars/default/avatar-12.svg?time=0"},"id":"user:2487289"},"BlogTopicMessage:message:4156078":{"__typename":"BlogTopicMessage","subject":"Potential Use Cases for Generative AI","conversation":{"__ref":"Conversation:conversation:4156078"},"id":"message:4156078","revisionNum":3,"uid":4156078,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2487289"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Azure’s generative AI, with its Copilot and Custom Copilot modes, offers a transformative approach to various industries, including manufacturing, retail, public sector, and finance. Its ability to automate repetitive tasks, enhance creativity, and solve complex problems optimizes efficiency and productivity. \n The potential use cases of Azure’s generative AI are vast and continually evolving, demonstrating its versatility and power in addressing industry-specific challenges and enhancing operational efficiency. As more organizations adopt this technology, the future of these sectors looks promising, with increased productivity, improved customer experiences, and innovative solutions. The rise of Azure’s generative AI signifies a new era of intelligent applications that can generate content, insights, and solutions from data, revolutionizing the way industries operate and grow. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":9069},"postTime":"2024-06-03T09:11:54.069-07:00","lastPublishTime":"2024-06-03T15:42:12.077-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Azure's generative AI is a powerful and versatile technology that can help users to create and deploy intelligent applications that can generate content, insights, and solutions from your own data. It can be applied to almost all industries and domains, such as education, healthcare, media, entertainment, gaming, marketing, public sector and more. Azure's generative AI can help users to automate repetitive tasks, enhance creativity, and solve complex problems. GenAI can be used as a Copilot or a Custom Copilot (bespoke build), depending on the level of control and customization that the user needs. \n \n Copilot: This is the default mode of GenAI, where a user can enter a prompt or a partial text and GenAI will complete it with relevant and coherent content. It uses a general-purpose model that can handle a wide range of topics and domains. The Copilot mode is useful for tasks such as writing emails, blog posts, social media posts and product descriptions. \n Custom Copilot: This is an advanced mode of GenAI, where the user can create their own models by fine-tuning general-purpose models on their own domain specific data. The user can also specify the style, tone, format, length, and other parameters of the generated content. The custom Copilot mode allows the user to train a specialized model that can capture the nuances and specificities of their use case. The custom Copilot mode is useful for tasks such as creating personalized and targeted content for specific audiences or scenarios. \n \n What are some potential use cases of Azure's generative AI? \n We have been working with many customers and industries sectors and came across numerous use cases. Here are some examples of how Azure's generative AI can help users in different scenarios. \n \n Manufacturing: As the industry manufactures finished products or parts rather than services multiple use cases can be seen: \n \n Many organisations have historical and technical documentation. An organisation may want a way to surface useful information from the documents and query it in natural language. This not only reduces management administrative efforts, reduces labour costs and overhead costs (for physical storage to store files). An internal Copilot can be created for employees to ask questions in natural language and get back an answer. This involves deploying a solution to extract relevant contextual information from a Knowledge Base. Using this tool a custom Copilot can be made to answer your organisations specific questions. \n A Copilot could provide valuable assistance to manufacturers by suggesting designs and recommending optimal materials. These recommendations consider cost, sustainability, and durability considerations. For example, Rockwell Automation, a leading US provider of industrial automation technology, leverages Microsoft Copilot within its FactoryTalk Design Studio. Copilot assists engineers by generating code through natural language prompts, automating routine tasks, and enhancing design efficiency (click here for further reading on this use case). \n Generative AI can also be used to build cloud-native systems to improve efficiency by gaining real-time insights on production lines or industrial equipment. This moves from batch processing to real time allows for an improved customer experience. \n Copilot can enhance innovation and operational efficiency in any organisation. For example, Siemens is integrating its Teamcenter software (used for product lifecycle management) with Microsoft Teams and Copilot. This solution allows for: \n \n Production operatives to use their devices to report design concerns in natural language, the summary of the reports sent in by the production operatives. GPT 4v can assist in terms of analysing the images and visual data. This helps to detect defects or inconsistences in the production line(click here for further reading on this use case) \n \n \n \n Retail: It’s essential for retailers to standout by bringing appropriate products to customers on hand at speed. This can be accelerated with the help of generative AI. Some use cases seen in this industry include: \n \n Personalised product recommendations - to maximise sales, tailored advertising and marketing is used to recommend products based upon a customer’s purchase history, preferences, and behaviour to aid the alignment of promotions to the customer. Azure's generative AI can help marketers and advertisers to create and test content on various user groups. Custom Copilots can be used to enable users to chat with the system database to find appropriate products that might be best suited for their needs. This chatbot allows a user to search the retailer’s database in natural language to obtain a result. \n Forecasting & inventory management. Generative AI can help retailers predict future demand and optimise inventory levels, reducing cost and waste. This can be done by analysing historical data, market trends, and external factors to predict future demand more precisely. This accuracy helps retailers optimize inventory levels, preventing stockouts (which disappoint customers) and overstocks (which lead to waste). \n \n A customer example of how generative AI is used in retail, is Estee Lauder click here for further reading on this use case. \n \n Public Sector: Generative AI has the potential to revolutionize how challenges are addressed in the public sector. To increase the efficiency (more than 30%) of Government Departments aligning to the Cabinet Directives can utilise generative AI. \n \n Using Azure Open AI, chat Bots can provide better customer service to provide citizens with information e.g. Gov.UK. Chatbots would be able to understand and interpret natural language queries from citizens. NLU (natural language understanding) models would process user input, extract intent, identify relevant entities and relay the answer back to the user. Chatbots can provide and share knowledge internally with more people and in some instances might be able to explain information with trends in data that might not be able to be detected at first glance. \n Automations, Applications and Processes infused with the Azure OpenAI service can unlock high levels of efficiencies in key areas such as call centres, citizen services and borders. Azure Open AI can simplify call centres e.g. HMRC Tax Helpline, automate manual processes e.g. DVLA Driving Licence Applications. Phone calls between agent and customers may be recorded and stored and later Azure AI speech can transcribe the audio files asynchronously while identifying different speakers, languages and sentiment (click here to read a customer use case). \n \n \n Financial Sector: (Finance industry) encompasses institutions or services involved in the management of money. Generative AI has potential to transform the industry. \n \n In portfolio management, Copilots can assist portfolio managers by analysing market trends, suggesting investment strategies, and providing real-time insights. For instance, a custom Copilot could monitor stock prices, analyse financial news, and recommend adjustments to investment portfolios. \n Augmenting Human Capabilities Through Automation, this allows for more focus on strategic activities. Extraction of insights from documents and summarisation can be done utilising Azure generative AI capabilities. It has the capacity to analyse and synthesize vast amounts of financial documents, such as reports, contracts, and regulatory filings. With the ability to extract information and identify patterns to aid in the prevention of fraud. It increases the efficiency of the organisation. In claims, it would help claim handlers and claim adjusters better manage customer interactions and help reduce fraud. \n \n The potential use cases of Azure’s generative AI are vast and continually evolving, demonstrating its versatility and power in addressing industry-specific challenges and enhancing operational efficiency. \n \n In the next article we will discuss about how to begin building custom Copilots.https://techcommunity.microsoft.com/t5/ai-ai-platform-blog/the-evolution-of-genai-application-deployment-strategy-building/ba-p/4150525 \n \n Paolo Colecchia arung @Stephan Rhodes @Renata Bafaloukou @Morgan Gladwell \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"8360","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4143017":{"__typename":"Conversation","id":"conversation:4143017","topic":{"__typename":"BlogTopicMessage","uid":4143017},"lastPostingActivityTime":"2024-05-29T16:04:10.648-07:00","solved":false},"User:user:1852202":{"__typename":"User","uid":1852202,"login":"nbabar","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0xODUyMjAyLTU4MjAwNmk1MDBGMjExQTYxRDMyRUVD"},"id":"user:1852202"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MzY5OGk1MzBFNzFEMjYwMURFNTdD?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MzY5OGk1MzBFNzFEMjYwMURFNTdD?revision=18","title":"Homepage_1345x757_Web.png","associationType":"TEASER","width":1345,"height":757,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNWlGQTk3NTRGNzA2NjI1NjlD?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNWlGQTk3NTRGNzA2NjI1NjlD?revision=18","title":"CourtneyBrewer_0-1715958737133.png","associationType":"BODY","width":720,"height":479,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNmk3Q0EyQUI1QTc2QjEwMUQ1?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNmk3Q0EyQUI1QTc2QjEwMUQ1?revision=18","title":"CourtneyBrewer_1-1715958788268.png","associationType":"BODY","width":720,"height":405,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyN2k4NEYzODM4Nzg1RDMzNzIw?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyN2k4NEYzODM4Nzg1RDMzNzIw?revision=18","title":"CourtneyBrewer_2-1715958813478.png","associationType":"BODY","width":720,"height":440,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0NWlEMEE2NzY0NzdDMTc4MjNC?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0NWlEMEE2NzY0NzdDMTc4MjNC?revision=18","title":"Catalog.jpg","associationType":"BODY","width":3836,"height":2156,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0Nmk5ODUzOTM0NTFDOTJFOEQ4?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0Nmk5ODUzOTM0NTFDOTJFOEQ4?revision=18","title":"Benchmark.jpg","associationType":"BODY","width":3840,"height":2159,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0N2lCQTE5M0RBQUNEQTI1RjNC?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0N2lCQTE5M0RBQUNEQTI1RjNC?revision=18","title":"MaaSandMaaP.png","associationType":"BODY","width":2305,"height":568,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0OGkyNDBBMjlGN0ExODE0Rjk5?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0OGkyNDBBMjlGN0ExODE0Rjk5?revision=18","title":"project_create_yaml.jpg","associationType":"BODY","width":1875,"height":554,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MGk2QkRBOTA1Mzg4RTlCQUYx?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MGk2QkRBOTA1Mzg4RTlCQUYx?revision=18","title":"hub.png","associationType":"BODY","width":3840,"height":1697,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1N2kzRjNDOUM3REZBNkQ1NkM5?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1N2kzRjNDOUM3REZBNkQ1NkM5?revision=18","title":"playground (2).png","associationType":"BODY","width":3722,"height":2014,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MmlGMzJBNjg1QTIxOTM4M0Qz?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MmlGMzJBNjg1QTIxOTM4M0Qz?revision=18","title":"Data retrieval with Azure AI Search.jpg","associationType":"BODY","width":2274,"height":1109,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1NGkwNkQ4NEJGNTlFNDZDNzA3?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1NGkwNkQ4NEJGNTlFNDZDNzA3?revision=18","title":"finetune.jpg","associationType":"BODY","width":3763,"height":1860,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1Nmk4REI5MzFBRTU5QjgxNThF?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1Nmk4REI5MzFBRTU5QjgxNThF?revision=18","title":"assistantsplayground.jpg","associationType":"BODY","width":3000,"height":1985,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NGk5ODc2RDJFOTkzMDhCNDRF?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NGk5ODc2RDJFOTkzMDhCNDRF?revision=18","title":"start-trace-code.jpg","associationType":"BODY","width":3030,"height":822,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OGk4RjIzRTI5NzMxQ0NBODE2?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OGk4RjIzRTI5NzMxQ0NBODE2?revision=18","title":"trace-decorator-code2.jpg","associationType":"BODY","width":3034,"height":1035,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NmlFQ0EzOTRGQUQyMzE1REUz?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NmlFQ0EzOTRGQUQyMzE1REUz?revision=18","title":"localtesting.jpg","associationType":"BODY","width":2861,"height":1586,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU3MWkxMTU4QkQ1RTUwMDA5NzJG?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU3MWkxMTU4QkQ1RTUwMDA5NzJG?revision=18","title":"traceUI.jpg","associationType":"BODY","width":2765,"height":1730,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OWkyMjY4RTUyMkY0NjA3NzFG?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OWkyMjY4RTUyMkY0NjA3NzFG?revision=18","title":"metrics.jpg","associationType":"BODY","width":1813,"height":1730,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MGlGQzgxODA0QTcyQjhFMTFE?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MGlGQzgxODA0QTcyQjhFMTFE?revision=18","title":"eval1.jpg","associationType":"BODY","width":2368,"height":1730,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MWkyMzhENzEzQzA3Q0U3MTRC?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MWkyMzhENzEzQzA3Q0U3MTRC?revision=18","title":"eval2.jpg","associationType":"BODY","width":2603,"height":1730,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4Mmk3MzY2QkJFNUE3QkE0MDJB?revision=18\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4Mmk3MzY2QkJFNUE3QkE0MDJB?revision=18","title":"contentsafety.jpg","associationType":"BODY","width":2214,"height":1730,"altText":null},"BlogTopicMessage:message:4143017":{"__typename":"BlogTopicMessage","subject":"Shaping tomorrow: Developing and deploying generative AI apps responsibly with Azure AI Studio","conversation":{"__ref":"Conversation:conversation:4143017"},"id":"message:4143017","revisionNum":18,"uid":4143017,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1852202"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" \n \n Announcing the general availability of Azure AI Studio, a comprehensive pro-code platform to safely and responsibly develop and deploy production-ready copilots at scale ","introduction":"","metrics":{"__typename":"MessageMetrics","views":37656},"postTime":"2024-05-21T08:30:00.141-07:00","lastPublishTime":"2024-05-29T16:04:10.648-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" In the last twelve months, from casual conversations at home to in-depth debates on tech forums, the buzz around generative AI has been pervasive. It is changing how companies think about their products, how they develop software, and how they leverage technology themselves for improved productivity. \n \n In 2023, companies across the globe took time to understand the technology’s capabilities and applicability. However, a parallel realization surfaced: unconstrained, generative AI makes errors. It might generate non-existent URLs, fabricate data, issue unwarranted apologies, or even revise the Seahawks' Super Bowl 49 outcome (we are good with the last one!). These quirks are inherent to the 'generative' aspect of GenAI. \n \n With this, companies embarked on a second journey to drive quality. They tackled the challenge of mitigating unsuitable AI responses and embraced new paradigms in continuous integration/continuous delivery (CI/CD) and regression testing. They also intensified the monitoring of their AI solutions in production environments. It's a journey akin to navigating the complexities of traditional software development but compounded by the unpredictable nature of generative AI. \n \n In 2024, bugs now include inconsistencies in groundedness, fluency, output length, and unpredictable latencies - all of which require their own suites of regression testing prior to merging into the main branch. Moreover, ensuring that the generated text and media adheres to responsibility requirements is critical, with rigorous testing needed to prevent hate speech, self-harm, inappropriate sexual content, and factual inaccuracies. Additional measures are also required to repel attempts to manipulate or \"jailbreak\" the system. Once these solutions are deployed, continuous monitoring is essential, both for individual requests and overall system performance, to guard against any drift over time. \n \n To create responsible and truly transformative, customized, production-ready copilots that support advanced use cases, multiple interoperating APIs need to be combined with models, prompts, and grounding data, finetuned, tested, and deployed at scale. To accomplish this, developers need the right tools. \n \n \n \n \n Announcing Azure AI Studio \n At Microsoft, we're thrilled to announce Azure AI Studio, now generally available, as your go-to platform for developing and deploying generative AI applications securely and safely. No matter your generative AI use case, Azure AI Studio accelerates the entire generative AI development lifecycle, empowering developers to build and shape the future with AI. \n \n \n \n Azure AI Studio is a key component of Microsoft's copilot platform. It is a pro-code platform offering capabilities to fully customize and configure generative AI applications with Azure-grade security, privacy, and compliance. Flexible and integrated visual and code-first tooling and pre-built quick-start templates streamline and accelerate copilot creation using Azure AI services and tools, with full control over infrastructure. \n \n \n \n It simplifies the transition from concept to production with easy setup, management, and API support, while also helping developers address safety and quality issues. The platform includes Azure AI services like Azure OpenAI Service and Azure AI Search and familiar tooling from Azure Machine Learning, like prompt flow for guided experiences for quick prototyping. It supports code-first SDKs and CLIs, integrated with the Azure Developer (AZD) CLI and AI Toolkit for Visual Studio Code to provide the needed scalability as demand grows. \n \n \n \n API and Model Choice \n Discover the best AI services and models for your use case \n Whatever the use case, developers can build intelligent multimodal, multi-lingual copilots with out-of-the-box and customizable models and APIs, like language, speech, content safety, and more. \n \n With the model catalog, you will find over 1600 models from providers like Meta, Mistral, Microsoft, and OpenAI, including GPT 4 Turbo with Vision and Microsoft’s small language model (SLM) Phi3- and new models from Core42 and Nixtla. Models from Bria AI, Gretel, NTT DATA, Stability AI, AI21, and Cohere Rerank are coming soon. Models curated by Azure AI are the most widely deployed models, packaged and optimized to work on the Azure AI platform. At the same time, the Hugging Face collection provides the breadth of many hundreds of models which allow users to consume the exact model best for them. And there are so many more to choose from! \n \n \n Azure AI Studio's model benchmark dashboard allows developers to compare the performance of models across various industry-standard datasets to understand where specific models perform best. Benchmarks provide model evaluations using metrics such as accuracy, coherence, fluency, and GPT similarity. Users can view benchmark results in dashboard graph and list formats, enabling side-by-side model comparisons. \n \n \n \n The model catalog offers two ways to deploy models: Models as a Service (MaaS) and Models as a Platform (MaaP). MaaS provides pay-as-you-go per-token pricing, while MaaP offers models deployed on dedicated virtual machines (VMs), billed as VMs per-hour. \n \n Azure AI Studio also scans open models for security threats and vulnerabilities before onboarding them to the Azure AI collection, providing validations within model cards so developers can deploy models with confidence. \n \n \n \n Complete AI Toolchain \n Azure AI Studio offers collaborative and comprehensive tooling to support the development lifecycle and differentiate your apps. \n \n Getting setup with your hub and project \n Azure AI Studio accelerates team-based AI development with a central hub for sharing resources across projects, helping remove IT bottlenecks. Developers can also kick-off their projects through starter scripts or by using the studio UI. Once executed, the scripts will generate an .env file that includes references to the connected resources, as well as the needed access keys. \n \n \n \n Each hub can be connected to any number of projects, which inherit the hub's security configurations. Hubs and projects are security-aware entities. Administrators can be assigned within the hub to manage AI resources and control access for project members. Azure AI Studio's connection framework is designed to authenticate and integrate a diverse range of resources from Microsoft's ecosystem and external providers. \n \n \n \n Experiment with prompts in the playground \n Developers are equipped with a suite of dev-light playgrounds within AI Studio, encompassing areas like chatbots, assistants, image generation, and text completion. This flexible sandbox allows developers to experiment with various models, refine system prompts through iterative testing, and customize models – securely using their own datasets for tailored results. Developers can also experiment with safety system messages. \n \n \n \n Data retrieval with Azure AI Search \n Azure AI Search is natively supported in Azure AI Studio for retrieval augmented generation (RAG) scenarios, enabling developers to utilize data retrieval methods to ground responses based on secure, customer-specific data. The platform allows for easy integration with numerous data sources, including OneLake in Microsoft Fabric, Azure Blob Storage, and Azure Files. This integration of connections allows users to develop more intelligent and context-aware copilots because data assets can be integrated within the model workflow. \n \n \n \n Fine-tuning \n When developing generative AI applications, RAG should be used for tasks that require external knowledge while fine-tuning is appropriate for adapting pre-trained models to tasks with specific labeled data. Supervised fine-tuning is crucial for customizing models, as specialized tasks often need the reasoning of a broad model but with a relatively narrow scope of the specific task. Within Azure AI Studio, users can fine-tune models such as Babbage, Davinci, GPT-35-Turbo, and GPT-4 along with the family of Llama 3, and Phi-3. \n \n \n \n Agent-based orchestration \n Developers are increasingly driving sophisticated real-world application development as they recognize the potential of LLMs and SLMs. They're leveraging agent systems such as the Azure OpenAI Service Assistants API, function-based applications, and the AutoGen framework to solve more complex, open-ended problem statements. As one might expect, this shift brings new challenges, particularly due to the open-ended nature of the orchestration applied. \n \n \n \n Tracing and debugging \n Tracing is essential for understanding how your copilot works, especially in complex workflows where traditional IDE (Integrated Development Environment) breakpoints might not be effective. Many operations happen asynchronously or involve streaming data, causing the same line of code to execute multiple times for a single user query. Azure AI Studio’s tracing feature helps developers debug these scenarios through the prompt flow SDK with simple source code instrumentation. Tracing helps track latency issues, LLM errors, token usage, function calls, and dependency misalignments. \n \n For a code-focused experience, users can initiate a local playground using the prompt flow SDK. This allows for comprehensive unit testing while logging traces seamlessly to Azure AI Studio in the cloud or to a local repository. The service can be started from the command line or will automatically start when a trace begins. \n \n \n \n Tracing can then be done with a simple decorator. Model calls are captured automatically. \n \n \n \n Users can initiate a local testing environment through their IDE by executing the command 'pf flow test --flow'. This command leverages the prompt flow SDK to create an interactive playground with tracing enabled for each interaction, facilitating interactive testing of their application. \n \n \n \n Tracing captures and details each step of a copilot's request journey, thereby enhancing system health visibility and simplifying the debugging of complex or non-deterministic issues. Leveraging OpenTelemetry, prompt flow tracing integrates with Azure Monitor, allowing streamlined monitoring setup using connection strings for seamless configuration. \n \n \n \n \n Evaluation \n Along with tools for observability while in development and production, Azure AI Studio provides tools to systematically assess the accuracy, quality, and safety of generated outputs. Manual evaluation, that is, manually reviewing and grading an application’s generated outputs, is especially useful for tracking progress on a targeted set of priorities. For example, developers or domain experts might look at how grounded responses are for different app variants and compare the results to inform the next iteration. \n \n Automated evaluation is useful for measuring an app’s quality and safety at scale, to provide more comprehensive evaluation results. Developers can run automated evaluations using pre-built metrics or customize and build their own metrics for their unique concerns using the studio UI or the prompt flow SDK. \n \n While customers can bring their own test datasets, AI Studio helps address a key blocker for many customers, which is a lack of high-quality adversarial test data to evaluate an application’s outputs for content risks or susceptibility to jailbreak attacks. To test the safety of an application at scale, Azure AI Studio will automatically generate adversarial inputs and role-play attacks on an app to generate a test dataset of prompts and responses for evaluation. Developers can use the final scores and explanations to understand if their application is ready to ship or needs more work to mitigate risks. \n \n Evaluators help developers take customization and scale even further. Users can define an evaluator to assess their own defined attributes, such as a mix of pre-built and custom metrics and corresponding parameters, to be assessed by a GPT model. For example, a retailer that is concerned about a customer service bot exemplifying its brand attributes may design an evaluator to evaluate outputs for groundedness (a pre-built metric) and politeness (a custom metric). Evaluators can be versioned and shared across an organization, so the retailer could opt to run their custom brand evaluator with every automated evaluation for improved consistency across projects. Developers can run evaluators locally and log results in the cloud using the prompt flow SDK or run them as part of an automated evaluation within the Azure AI Studio UI. \n \n \n \n \n Responsible AI Tools & Practices \n Safeguard AI apps with configurable filters and controls \n Once customers deploy their solutions, Azure AI Content Safety protects the application endpoint by running input prompts and output completions through a variety of classification models. Built-in safety metrics are designed to help identify and prevent harmful, biased, ungrounded, and inappropriate content, as well as prompt injection attacks critical for maintaining user trust. At Build, we are announcing custom categories so users can create and use custom content filters in addition to the provided default filters. \n \n \n Enterprise-grade production at scale \n Developers can deploy and scale their AI innovations to Azure web apps for use in websites and applications or as containerized models for local deployment – with tools to manage and continuously monitor their solutions for safety, quality, and token consumption. They can also automate workflows and alerts for timely issue resolution. \n \n Developers maintain agility with resource management across the organization. They can secure managed online endpoints with Microsoft Entra ID, and with Azure, enterprise-grade security, privacy, and compliance are included for governance at scale. \n \n Custom copilots in production \n Azure AI is driving innovation for over 53,000 customers to date and growing. Customers are delivering multi-modal knowledge mining with enterprise chat and are improving customer interactions and service with advanced data and speech analytics. They are also generating content more efficiently, while supporting enhanced sales and marketing strategies with hyper-personalization. \n \n Sweco’s GPT \n Sweco, one of Europe’s architecture and engineering firms, developed SwecoGPT to help their consultants find critical project information, create and analyze documents, and use the time they save to deliver more personalized services to their customers. With Azure AI Studio, they were able to rapidly deploy, highlighting Azure AI's scalability and power. \n \n “With Azure AI Studio, [we were] able to rapidly develop a proof of concept (POC) to show how a SwecoGPT could look, operate, and benefit our consultants and our business as a whole. This just showcases the power and scalability of Azure AI.” - David Hunter, Sweco Head of AI and Automation \n \n \"The potential of Azure AI Studio for us—and what we can do with it for our customers—is infinite.” - Shah Muhammad, Sweco AB Head of AI Innovation \n \n Parloa’s Conversational AI platform \n Parloa, used Azure AI Studio to create a multilingual AI copilot that streamlines customer service across communication channels. \n \n \"We see Azure AI Studio as a powerful new developer platform that helps us develop AI agents for the intelligent contact center platform of the future.” - Ciaran O'Reilly, Parloa Conversational AI Engineering Lead \n \n Vodafone’s SuperTOBI \n Earlier this year, Vodafone announced a 10-year generative AI strategic partnership with Microsoft. The telecommunications provider used Azure AI Studio to develop its SuperTOBI Chatbot, a real-time, hyper-personalized call center experience. The AI agent helps customers pay their bills, solve network issues, and order a new phone if needed. If TOBI is unable to answer a customer’s question, it automatically transfers the customer to a human customer support agent. \n \n “Part of using new technologies is experimentation and the ability to easily collaborate. With Azure AI Studio, you can interact with other people and with projects through a code-first approach to seamlessly explore, build, test, and deploy, using cutting-edge AI tools and machine learning models.” - Ahmed Elsayed, Vodafone CIO UK and Digital Engineering Director \n \n H&R Block's AI Tax Assist \n H&R Block is a long-time Azure AI customer. Its newest innovation, AI Tax Assist, is an AI agent that streamlines tax filing. \n \n “With Azure AI Studio, our devs can code faster, so they had time to ‘experiment’ to fine-tune features like enabling individuals to ask as many questions as needed conversationally and the ability to revisit previous conversation threads. It’s an approach we’re continuing—to push innovation and deliver the best experiences.” - Aditya Thadani, H&R Block Vice President Artificial Intelligence Platforms \n \n Customer innovation with Azure AI Studio not only highlights the platform’s robust capabilities, but also demonstrates its role in driving significant time savings and efficiency improvements across industries. There are many additional customer stories featured on ai.microsoft.com. \n \n Your journey into the next generation of AI starts now \n Azure AI Studio is at the forefront of reshaping how we approach AI application development, presenting a thoughtful and powerful platform that aligns innovation with responsibility. With the support of Microsoft's technology, development teams have the tools to confidently explore the possibilities of generative AI and deploy production-ready copilots. So why wait? Dive in and experience the cutting-edge capabilities of Azure AI Studio for yourself – start building, testing, and deploying with confidence and ease today! \n \n Get started with Azure AI Studio \n \n Build with Azure AI Studio: ai.azure.com \n \n \n Learn how to build AI solutions: Azure AI Studio Training Modules and register for the Azure AI Cloud Skills Challenge \n \n \n Use the GitHub repos: Contoso Chat and Process Automation \n \n \n Learn more with Azure AI Studio documentation \n \n \n Get the latest Azure AI news and resources \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"19232","kudosSumWeight":6,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MzY5OGk1MzBFNzFEMjYwMURFNTdD?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNWlGQTk3NTRGNzA2NjI1NjlD?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyNmk3Q0EyQUI1QTc2QjEwMUQ1?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjQyN2k4NEYzODM4Nzg1RDMzNzIw?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0NWlEMEE2NzY0NzdDMTc4MjNC?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0Nmk5ODUzOTM0NTFDOTJFOEQ4?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0N2lCQTE5M0RBQUNEQTI1RjNC?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU0OGkyNDBBMjlGN0ExODE0Rjk5?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDk","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MGk2QkRBOTA1Mzg4RTlCQUYx?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1N2kzRjNDOUM3REZBNkQ1NkM5?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1MmlGMzJBNjg1QTIxOTM4M0Qz?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEy","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1NGkwNkQ4NEJGNTlFNDZDNzA3?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDEz","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU1Nmk4REI5MzFBRTU5QjgxNThF?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE0","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NGk5ODc2RDJFOTkzMDhCNDRF?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE1","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OGk4RjIzRTI5NzMxQ0NBODE2?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE2","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2NmlFQ0EzOTRGQUQyMzE1REUz?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE3","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU3MWkxMTU4QkQ1RTUwMDA5NzJG?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE4","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU2OWkyMjY4RTUyMkY0NjA3NzFG?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE5","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MGlGQzgxODA0QTcyQjhFMTFE?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDIw","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4MWkyMzhENzEzQzA3Q0U3MTRC?revision=18\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDIx","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTQzMDE3LTU4MjU4Mmk3MzY2QkJFNUE3QkE0MDJB?revision=18\"}"}}],"totalCount":21,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4121833":{"__typename":"Conversation","id":"conversation:4121833","topic":{"__typename":"BlogTopicMessage","uid":4121833},"lastPostingActivityTime":"2024-04-25T11:13:30.554-07:00","solved":false},"User:user:2424112":{"__typename":"User","uid":2424112,"login":"Gana_Chandrasekaran","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yNDI0MTEyLTU3MTY1NGlBMjU4NzkyNDk3OUZBOEJB"},"id":"user:2424112"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MWk0ODk1QUIyNkUxQkFFNkFG?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MWk0ODk1QUIyNkUxQkFFNkFG?revision=6","title":"Gana_Chandrasekaran_0-1713929307637.png","associationType":"BODY","width":975,"height":562,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MmkwMEQwNzU2MUZBQjAxRjRF?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MmkwMEQwNzU2MUZBQjAxRjRF?revision=6","title":"Gana_Chandrasekaran_1-1713929342420.png","associationType":"BODY","width":862,"height":279,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3M2kyMDQ4NTQ5MUJDRTBBRTNG?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3M2kyMDQ4NTQ5MUJDRTBBRTNG?revision=6","title":"Gana_Chandrasekaran_2-1713929381826.png","associationType":"BODY","width":963,"height":409,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NGk5REZDQzYzNTVBREVDNzc1?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NGk5REZDQzYzNTVBREVDNzc1?revision=6","title":"Gana_Chandrasekaran_3-1713929419399.png","associationType":"BODY","width":828,"height":348,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NWlEQURFQUQ4OURCNzVENzUy?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NWlEQURFQUQ4OURCNzVENzUy?revision=6","title":"Gana_Chandrasekaran_4-1713929460416.png","associationType":"BODY","width":903,"height":476,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NmkzRjZCM0RBQThCOTY4Njgy?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NmkzRjZCM0RBQThCOTY4Njgy?revision=6","title":"Gana_Chandrasekaran_5-1713929535088.png","associationType":"BODY","width":975,"height":366,"altText":null},"BlogTopicMessage:message:4121833":{"__typename":"BlogTopicMessage","subject":"Azure OpenAI path to production – A case study with PowerBuddy","conversation":{"__ref":"Conversation:conversation:4121833"},"id":"message:4121833","revisionNum":6,"uid":4121833,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2424112"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Join us on a transformative journey as PowerSchool revolutionizes the educational landscape with Azure OpenAI. Discover how generative AI is enhancing every facet of learning, from personalized content creation to sophisticated grading systems. Dive into PowerSchool's innovative approaches to integrating advanced AI models in K-12 education, and explore their strategic monitoring and scaling of AI applications. This is where the future of education takes shape – powered by AI and crafted by PowerSchool. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":2749},"postTime":"2024-04-23T20:36:04.264-07:00","lastPublishTime":"2024-04-25T11:13:30.554-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Introduction: \n \n Co-authored with Gayathri Rengarajan- Principal Engineer, PowerSchool; Harshit Nyati, Lead Software Engineer, PowerSchool \n \n In the rapidly evolving world of education technology, EdTech customers are increasingly turning to Generative AI platforms to revolutionize the way they approach course content. Leveraging the power of Azure OpenAI models, these innovative platforms are transforming personalized content generation, course design, development, and even grading assessments. PowerSchool is a leading Education Technology provider of cloud-based K-12 software, with its award-winning software solutions. \n \n Recognizing the transformative potential of Generative AI in education, PowerSchool's New Solutions division has been dedicatedly exploring avenues to harness the capabilities of Large Language Models (LLMs) to drive positive change. The Azure OpenAI Service, with its advanced AI models such as GPT-4 Turbo, GPT-4, and Vision, has become a cornerstone for these EdTech initiatives. Power School has been rigorously testing these models in various use cases, discovering the immense value they bring. The performance of the platform, the ability to scale API requests across different regions, the security of the end-to-end platform, and compliance with enterprise-wide organizational standards are just a few of the benefits that have been recognized. \n \n Transitioning from proof of concept and pilot phases to full-scale production, Power School is now faced with the task of monitoring, scaling, and optimizing AI applications and cost. \n \n Power Buddy Overview: \n \n PowerBuddy is PowerSchool's AI assistant, designed to meet the diverse needs of students, families, teachers, and administrators. Its goal is to provide personalized insights, foster engagement, and create a supportive environment throughout the educational journey. In the realm of assessment, Performance Matters PowerBuddy excels by helping educators create tailored assessments aligned with grade levels, standards, and topics. Integrated seamlessly into the Performance Matters platform, it generates questions and passages efficiently. Additionally, PowerBuddy's conversational chatbot feature assists students with learning assignments. With its adaptability and support for all stakeholders, PowerBuddy enriches the educational experience for everyone involved. \n \n Path to Production \n \n As PowerSchool’s AI applications gain traction across school districts in the US, ensuring observability has emerged as a crucial component integrated into the solution rather than a mere monitoring mechanism. During our initial pilot phases, we identified key observability properties essential for understanding the internal state of our AI systems, including the following metrics. \n \n \n Latency \n Successful calls/Error rate \n Processed Inference tokens \n Completion Tokens \n Total API Requests \n \n We need comprehensive monitoring solutions to proactively monitor and optimize and scale the resources before moving to production. \n \n To monitor and optimize Azure OpenAI instances, PowerSchool utilizes Azure Monitor, a comprehensive solution for collecting and analyzing telemetry data. Azure Workbooks are built on Azure Monitor to create custom dashboards and reports, while Azure Managed Grafana enhances visualization with dynamic dashboards. Azure Log Analytics Workspace centralizes log data collection and analysis, providing deeper insights to refine metrics and improve monitoring. The following diagram shows how we can monitor different tools for different use cases. \n \n \n \n The initial method involved utilizing Azure Monitor - Metrics and Alerts, offering a straightforward means to monitor and optimize Azure Open AI instances, particularly in single-instance deployments where basic metrics viewing, and simple alert setup are paramount. The accompanying diagram illustrates the process of monitoring Azure Open AI instances using Azure Monitor. \n \n \n \n \n In scenarios involving multiple Azure Open AI instances spread across diverse regions and models (as exemplified by PowerBuddy), a more sophisticated monitoring capability proved necessary. This advanced functionality should seamlessly visualize data from various Azure Open AI instances and formats, highlighting the relevance of the subsequent approach - Azure Workbooks. These workbooks furnish dashboards showcasing total OpenAI requests within specific regions, latency across multiple instances, total tokens across resources etc. configurable to custom schedules. \n \n Using Azure Workbooks provides a scalable platform to monitor and optimize Azure Open AI instances for production, especially beneficial for large-scale deployments requiring data combination and visualization from multiple sources and formats. The following diagram shows the total processed inference tokens across two different regions. \n \n \n \n \n In cases where Azure Open AI instances are deployed in a multi-cloud environment, necessitating resource monitoring across different cloud vendors, a more comprehensive monitoring capability is essential. \n \n The third approach is to use Azure Grafana Monitoring and Reporting. Grafana supports data sources from other cloud providers, enabling the monitoring and optimization of Azure Open AI instances in a multi-cloud environment. This provides a comprehensive view of resources across various cloud environments as would be needed in a company like PowerSchool which uses a multi cloud infrastructure. Additionally, dashboards can be exported and shared for collaborative monitoring and optimization efforts. The following dashboards show the total alerts, warnings, severity, and conditions. \n \n \n \n \n In leveraging Azure Log Analytics Workspace for monitoring and enhancing Azure Open AI instances, a centralized and scalable solution emerges. This workspace facilitates the collection and analysis of log data from Azure Open AI instances and other associated resources. Empowered by the Kusto Query Language (KQL), users can efficiently query and manipulate log data, crafting bespoke insights and solutions. Dashboards within the workspace display vital metrics like total processed inference tokens over the past 120 days, employing dynamic KSQL queries for real-time analysis. \n \n \n \n \n To address this challenge, we collaborated with the Microsoft Global Black Belt team to develop comprehensive monitoring solutions such as Azure workbooks comprising dashboards and insights for each metric outlined in our observability manifesto across multiple OpenAI instances. Additionally, we fine-tuned our alerting thresholds, switching between dynamic and static thresholds based on traffic patterns, alert frequency, and specific use cases. Here is the sample dashboard that we have developed to measure the performance of the AI Apps distributed across different instances. \n \n \n \n \n As our understanding of usage patterns across products evolves, we are committed to continuously enhancing our observability and monitoring processes within Azure Open AI. One key recommendation is to iteratively monitor traffic, usage, and patterns across products, updating dashboards and alerts to deliver maximum value. Our experience at PowerSchool underscores the importance of continuous improvement to meet evolving needs in education technology. \n \n Conclusion: \n \n PowerSchool is leveraging Azure OpenAI models to transform education through generative AI, enhancing course content, design, and assessments. To monitor and optimize Azure OpenAI instances, PowerSchool uses Azure Monitor, Workbooks, Managed Grafana, and Log Analytics Workspace for comprehensive telemetry data analysis and visualization. Collaborating with Microsoft's Global Black Belt team, PowerSchool develops monitoring solutions for scaling AI applications in production, emphasizing continuous improvement and iterative monitoring for enhanced observability in their AI applications. \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"8252","kudosSumWeight":4,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MWk0ODk1QUIyNkUxQkFFNkFG?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3MmkwMEQwNzU2MUZBQjAxRjRF?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3M2kyMDQ4NTQ5MUJDRTBBRTNG?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NGk5REZDQzYzNTVBREVDNzc1?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NWlEQURFQUQ4OURCNzVENzUy?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MTIxODMzLTU3Mzg3NmkzRjZCM0RBQThCOTY4Njgy?revision=6\"}"}}],"totalCount":6,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[],"totalCount":0,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4058659":{"__typename":"Conversation","id":"conversation:4058659","topic":{"__typename":"BlogTopicMessage","uid":4058659},"lastPostingActivityTime":"2024-02-24T21:14:20.597-08:00","solved":false},"User:user:282974":{"__typename":"User","uid":282974,"login":"nitya","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yODI5NzQtNTU5MDIxaTdBOTA4RkZFRUEyRDNENTA"},"id":"user:282974"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjEwMmlBMUM0QzA5MzAyREQ5QUQy?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjEwMmlBMUM0QzA5MzAyREQ5QUQy?revision=17","title":"contoso-chat-sketchnote.png","associationType":"TEASER","width":3840,"height":2160,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxNmk1NzFFN0Y2NTJCQkI3RjFD?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxNmk1NzFFN0Y2NTJCQkI3RjFD?revision=17","title":"nityan_0-1708096845041.png","associationType":"BODY","width":1147,"height":646,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxN2lFRTk0MDgzMTBFNTMzMjU2?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxN2lFRTk0MDgzMTBFNTMzMjU2?revision=17","title":"nityan_1-1708096894412.png","associationType":"BODY","width":995,"height":590,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOGk3N0I1MDBFOTY3NzlBQjQw?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOGk3N0I1MDBFOTY3NzlBQjQw?revision=17","title":"nityan_0-1708097112305.png","associationType":"BODY","width":582,"height":398,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOWlEQ0QzMEM1QUM1MTdGQTQx?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOWlEQ0QzMEM1QUM1MTdGQTQx?revision=17","title":"nityan_1-1708097170441.png","associationType":"BODY","width":619,"height":792,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMWkyQzdBODc4MEFBNTQzM0VB?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMWkyQzdBODc4MEFBNTQzM0VB?revision=17","title":"nityan_2-1708097270666.png","associationType":"BODY","width":1429,"height":804,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMmlEMzUwNzNCRDYzQkI1MkVE?revision=17\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMmlEMzUwNzNCRDYzQkI1MkVE?revision=17","title":"nityan_3-1708097304029.png","associationType":"BODY","width":1600,"height":1134,"altText":null},"BlogTopicMessage:message:4058659":{"__typename":"BlogTopicMessage","subject":"A code-first experience for building a copilot with Azure AI","conversation":{"__ref":"Conversation:conversation:4058659"},"id":"message:4058659","revisionNum":17,"uid":4058659,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:282974"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" In this article, we’ll look at how Azure AI helps developers with a code-first approach that makes it easier to build, run, test, and deploy, copilot applications using their own data. Let’s dive in. \n \n ","introduction":"","metrics":{"__typename":"MessageMetrics","views":59553},"postTime":"2024-02-22T07:00:00.040-08:00","lastPublishTime":"2024-02-23T14:16:55.537-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Generative AI applications are transforming the user experience and accelerating adoption of AI tools and solutions in the enterprise. Developers now face new challenges in building such applications end-to-end, going from prompt engineering to LLM Ops. And they need new tools, platforms, and guidance to help them navigate this rapidly-evolving ecosystem. \n \n In this article, we’ll look at how Azure AI helps developers tackle these challenges with a code-first approach that makes it easier to build, run, test, and deploy copilot applications using their own data. Let’s dive in. \n Understanding the LLM App Lifecycle \n Traditional AI applications focused on building and deploying custom machine learning models, training them on custom datasets with the goal of generating predictions. The end-to-end application lifecycle was then defined by three phases - experimentation, development, and operationalization. \n By contrast, generative AI applications involve large language models that are pre-trained on massive quantities of data with the goal of generating content. End-to-end development must now deal with new concepts like prompts (natural language inputs), fine-tuning (to improve model performance), retrieval augmented generation (to get responses grounded in our data), evaluation (testing response quality) and responsible AI. \n \n This has resulted in a paradigm shift from MLOps to LLMOps where the three phases of the application development lifecycle now focus on ideation (build & validate the basic app), development (evaluate it for quality, iterate) and operationalization (deploy in production, use) – with potential iterations till the desired application requirements are met. This has created demand for tooling and frameworks that can help developers streamline the end-to-end development experience from prompt engineering to production deployment. \n \n \n \n Enter Azure AI Studio! \n Azure AI Studio addresses these challenges with a unified platform for building generative AI applications and custom copilot experiences. It was released in public preview last November with tools, services and guidance to help developers explore models (from both Microsoft and the community), build AI projects (that deploy models and integrate AI services), and manage AI resources for their end-to-end solutions. It also offers tools and guidance to help developers deploy safe and responsible AI solutions. \n \n \n In this context, a copilot is a generative AI application that takes advantage of large language models (LLM) and natural language processing (NLP) to assist your users in completing complex cognitive tasks with a conversational “chat” experience. With the Azure AI platform, you can build a copilot using your data, allowing customers to ask you questions about products or services, and receive more relevant responses. \n A Code-First Experience \n The Azure AI Studio platform provides a rich UI-driven experience for achieving these objectives in the browser, making it perfect for low-code developers and learners. But if you are a developer that wants to dive deeper into the underlying code, build custom functions, collaborate using source control, or bring in existing code in various programming languages, then our code-first experience is for you! \n \n Let’s review the process for building a basic copilot application in Azure AI Studio. The typical end-to-end development workflow involves these steps: \n \n \n Provision Azure resources - This includes your Azure AI project and services \n Create Azure AI Search index - This is then populated with your custom data \n Create model deployments - For chat completion, text embedding & evaluation \n Create Azure AI connections- This allows your project to access Azure data & models \n Build AI chat function - Write the Python code for your chat AI function \n Run AI chat with test question - Validate that the basic copilot function works \n Evaluate custom function for quality - Assess performance based on evaluation metrics \n Deploy AI solution to Azure - Make chat API available as endpoint for integrations \n \n Now let’s explore how the Azure AI SDK and Azure AI CLI can streamline your experience. \n \n \n The Azure AI SDK for Python (preview) provides core packages to help manage your Azure AI resources and build generative AI apps. \n The Azure AI CLI (preview) is a cross-platform, language-agnostic way to achieve similar objectives from the command line. \n \n We’ll look at these in more detail next. But first, check out the following two demos with members of the Azure AI Studio team, to see the code-first approach in action, with an end-to-end development workflow. The first is a recent Global AI Notes session, and the second is a streamlined live walk through. \n \n \n Azure AI CLI – Cross-platform, language-agnostic \n The Azure AI CLI is a powerful cross-platform command-line utility that can connect your application to Azure AI services and “execute control-plane and data-plane operations without having to write any code.” You can install the CLI (on Windows, macOS, and Linux devices) or experiment with it in a pre-configured Docker container (using VS Code). The screenshot below shows the Azure AI CLI in action, using the “ai init” command to setup and initialize your Azure AI project and services. \n \n \n \n The table below lists the Azure AI CLI commands that support the key steps required for building a copilot experience from the command line. Note that the CLI is under active development – so the commands, options and UI/UX may evolve over time. \n \n \n \n \n \n COMMAND \n \n \n DESCRIPTION \n \n \n \n \n ai init \n \n \n Provision and configure your Azure AI project with one (interactive) tool \n \n \n \n \n ai service \n \n \n Manage your connections to services and resources \n \n \n \n \n ai search \n \n \n Interact with Azure AI Search (manage search indexes) \n \n \n \n \n ai dev \n \n \n Create “.env”, populate it with environment variables for local development \n \n \n \n \n ai config \n \n \n Manage configuration information (stored in local \".ai\" folder configuration files) \n \n \n \n \n ai chat \n \n \n Test your chat model deployment (interactively or non-interactively) to validate \n \n \n \n \n ai flow \n \n \n Work with prompt flows in an interactive manner (from creation to deployment) \n \n \n \n \n You can use \"ai chat\" throughout development to test your index, chat function, or deployment using interactive or non-interactive conversation modes. The screenshot below shows the rich set of command line options supported by this command today. \n \n \n Azure AI SDK – Python Code \n The Azure AI Studio platform also has an Azure AI SDK for Python with two distinct components, each serving a key purpose in the end-to-end developer workflow. \n \n \n The azure-ai-resources package provides the functionality required to connect to, and manage, your Azure AI resources and projects programmatically from apps. \n The azure-ai-generative package provides the functionality required for you to build, evaluate, and deploy Generative AI applications that leverage Azure AI services. \n \n In simpler terms, you would use the resources library to manage data, indexes, models, and deployments used in your AI projects. And you would use the generative library to build indexes and evaluate your apps in the local dev environment. It also has a promptflow package if you want to use that framework for your ideation phase. These ‘extra’ packages can be optionally removed if you don’t require the functionality. \n \n According to Azure AI customer, Television.AI, “[The CLI and SDK] looks really cool… super easy setup… with just one command I can interact with it… it looks like something I can setup and interact with right away… I can immediately see it is working and focus on other stuff.” \n \n Dive into samples \n Now that learned about the Azure AI code-first capabilities and seen them in action, its time to try it out yourself! The table below provides a list of quickstart options for building a copilot application - from using the basic Azure AI SDK (Python code) to combining it with other frameworks (like prompt flow) for advanced capabilities. Start by forking the sample of interest and completing the steps to setup, build, evaluate, and deploy the copilot. Then try extending it further to suit your application requirements or use your custom data. \n \n You will need an active Azure subscription and access to the relevant Azure OpenAI Service and models to complete the tutorials provided by the samples. Also note that these samples are actively evolving to match updates to underlying tools or libraries and are not meant for production use. \n \n \n \n \n \n AZURE SAMPLES \n \n \n DESCRIPTION \n \n \n \n \n ai-samples \n \n \n Directory for Azure AI samples \n \n \n \n \n aistudio-copilot-sample \n \n \n Build a basic copilot using Azure AI SDK & CLI - built-in support for LangChain, Semantic Kernel, and prompt flow included \n \n \n \n \n aistudio-python-promptflow-sample \n \n \n Build a basic copilot using prompt flow \n \n \n \n \n aistudio-python-langchain-sample \n \n \n Build a basic copilot using LangChain \n \n \n \n \n contoso-chat \n \n \n Build a customer support agent with prompt flow \n \n \n \n \n \n Contoso Chat – End-to-End Application Sample \n The quickstart sample provides the foundational knowledge you will need for the tools and workflow steps required to build a copilot application. Want to try out a more advanced sample that tells the LLMOps story from provisioning to deployment? Fork the Contoso-Chat sample and explore the step-by-step workshop to build a customer support copilot application with Azure AI Studio and prompt flow, evaluate it, and deploy it to Azure. This illustrated guide outlines the workflow and the steps involved in each stage. \n \n \n \n You can then integrate the customer support chat capability into your Contoso-Outdoors application, using the deployed endpoint, to drive customer interactions like this. \n \n \n \n This was a quick look at the code-first experience in building a copilot with your data, using the Azure AI Studio platform. Want to keep learning? Check out the resources below – and revisit the Collection periodically for updates to relevant samples and training resources. \n \n Related Resources \n \n Custom Microsoft Learn Collection \n Azure AI Studio documentation \n Azure AI Studio samples \n Azure AI Studio training module \n Microsoft Azure AI Fundamentals: Generative AI \n E2E Sample: Contoso Chat \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"11207","kudosSumWeight":7,"repliesCount":2,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjEwMmlBMUM0QzA5MzAyREQ5QUQy?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxNmk1NzFFN0Y2NTJCQkI3RjFD?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxN2lFRTk0MDgzMTBFNTMzMjU2?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOGk3N0I1MDBFOTY3NzlBQjQw?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMxOWlEQ0QzMEM1QUM1MTdGQTQx?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMWkyQzdBODc4MEFBNTQzM0VB?revision=17\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuM3wyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MDU4NjU5LTU1MjMyMmlEMzUwNzNCRDYzQkI1MkVE?revision=17\"}"}}],"totalCount":7,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVViSmc3Uk5MaTdFfDB8MjU7MjV8fA","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=UbJg7RNLi7E","thumbnail":"https://i.ytimg.com/vi/UbJg7RNLi7E/hqdefault.jpg","uploading":false,"height":499,"width":499,"title":null},"videoAssociationType":"INLINE_BODY"}},{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3lvdXR1LmJlL2RTVVdDYkZuUTE0fDF8MjU7MjV8fA","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://youtu.be/dSUWCbFnQ14","thumbnail":"https://i.ytimg.com/vi/dSUWCbFnQ14/hqdefault.jpg","uploading":false,"height":338,"width":600,"title":null},"videoAssociationType":"INLINE_BODY"}}],"totalCount":2,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"CachedAsset:text:en_US-components/community/Navbar-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745505307000","value":{"community":"Community Home","inbox":"Inbox","manageContent":"Manage Content","tos":"Terms of Service","forgotPassword":"Forgot Password","themeEditor":"Theme Editor","edit":"Edit Navigation Bar","skipContent":"Skip to content","gxcuf89792":"Tech Community","external-1":"Events","s-m-b":"Nonprofit Community","windows-server":"Windows Server","education-sector":"Education Sector","driving-adoption":"Driving Adoption","Common-content_management-link":"Content Management","microsoft-learn":"Microsoft Learn","s-q-l-server":"Content Management","partner-community":"Microsoft Partner Community","microsoft365":"Microsoft 365","external-9":".NET","external-8":"Teams","external-7":"Github","products-services":"Products","external-6":"Power Platform","communities-1":"Topics","external-5":"Microsoft Security","planner":"Outlook","external-4":"Microsoft 365","external-3":"Dynamics 365","azure":"Azure","healthcare-and-life-sciences":"Healthcare and Life Sciences","external-2":"Azure","microsoft-mechanics":"Microsoft Mechanics","microsoft-learn-1":"Community","external-10":"Learning Room Directory","microsoft-learn-blog":"Blog","windows":"Windows","i-t-ops-talk":"ITOps Talk","external-link-1":"View All","microsoft-securityand-compliance":"Microsoft Security","public-sector":"Public Sector","community-info-center":"Lounge","external-link-2":"View All","microsoft-teams":"Microsoft Teams","external":"Blogs","microsoft-endpoint-manager":"Microsoft Intune","startupsat-microsoft":"Startups at Microsoft","exchange":"Exchange","a-i":"AI and Machine Learning","io-t":"Internet of Things (IoT)","Common-microsoft365-copilot-link":"Microsoft 365 Copilot","outlook":"Microsoft 365 Copilot","external-link":"Community Hubs","communities":"Products"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarHamburgerDropdown-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745505307000","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745505307000","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745505307000","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745505307000","value":{"title.login":"Sign In","title.registration":"Register","title.forgotPassword":"Forgot Password","title.multiAuthLogin":"Sign In"},"localOverride":false},"CachedAsset:text:en_US-components/nodes/NodeLink-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745505307000","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagSubscriptionAction-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagSubscriptionAction-1745505307000","value":{"success.follow.title":"Following Tag","success.unfollow.title":"Unfollowed Tag","success.follow.message.followAcrossCommunity":"You will be notified when this tag is used anywhere across the community","success.unfollowtag.message":"You will no longer be notified when this tag is used anywhere in this place","success.unfollowtagAcrossCommunity.message":"You will no longer be notified when this tag is used anywhere across the community","unexpected.error.title":"Error - Action Failed","unexpected.error.message":"An unidentified problem occurred during the action you took. Please try again later.","buttonTitle":"{isSubscribed, select, true {Unfollow} false {Follow} other{}}","unfollow":"Unfollow"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/QueryHandler-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745505307000","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745505307000","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListTabs-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListTabs-1745505307000","value":{"mostKudoed":"{value, select, IDEA {Most Votes} other {Most Likes}}","mostReplies":"Most Replies","mostViewed":"Most Viewed","newest":"{value, select, IDEA {Newest Ideas} OCCASION {Newest Events} other {Newest Topics}}","newestOccasions":"Newest Events","mostRecent":"Most Recent","noReplies":"No Replies Yet","noSolutions":"No Solutions Yet","solutions":"Solutions","mostRecentUserContent":"Most Recent","trending":"Trending","draft":"Drafts","spam":"Spam","abuse":"Abuse","moderation":"Moderation","tags":"Tags","PAST":"Past","UPCOMING":"Upcoming","sortBymostRecent":"Sort By Most Recent","sortBymostRecentUserContent":"Sort By Most Recent","sortBymostKudoed":"Sort By Most Likes","sortBymostReplies":"Sort By Most Replies","sortBymostViewed":"Sort By Most Viewed","sortBynewest":"Sort By Newest Topics","sortBynewestOccasions":"Sort By Newest Events","otherTabs":" Messages list in the {tab} for {conversationStyle}","guides":"Guides","archives":"Archives"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1745505307000","value":{"bylineAuthor":"{bylineAuthor}","bylineBoard":"{bylineBoard}","anonymous":"Anonymous","place":"Place {bylineBoard}","gotoParent":"Go to parent {name}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/OverflowNav-1745505307000","value":{"toggleText":"More"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745505307000","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745505307000","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageBody-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745505307000","value":{"showMessageBody":"Show More","mentionsErrorTitle":"{mentionsType, select, board {Board} user {User} message {Message} other {}} No Longer Available","mentionsErrorMessage":"The {mentionsType} you are trying to view has been removed from the community.","videoProcessing":"Video is being processed. Please try again in a few minutes.","bannerTitle":"Video provider requires cookies to play the video. Accept to continue or {url} it directly on the provider's site.","buttonTitle":"Accept","urlText":"watch"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1745505307000","value":{"postTime":"Published: {time}","lastPublishTime":"Last Update: {time}","conversation.lastPostingActivityTime":"Last posting activity time: {time}","conversation.lastPostTime":"Last post time: {time}","moderationData.rejectTime":"Rejected time: {time}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1745505307000","value":{"contentType":"Content Type {style, select, FORUM {Forum} BLOG {Blog} TKB {Knowledge Base} IDEA {Ideas} OCCASION {Events} other {}} icon"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageUnreadCount-1745505307000","value":{"unread":"{count} unread","comments":"{count, plural, one { unread comment} other{ unread comments}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageViewCount-1745505307000","value":{"textTitle":"{count, plural,one {View} other{Views}}","views":"{count, plural, one{View} other{Views}}"},"localOverride":false},"CachedAsset:text:en_US-components/kudos/KudosCount-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/kudos/KudosCount-1745505307000","value":{"textTitle":"{count, plural,one {{messageType, select, IDEA{Vote} other{Like}}} other{{messageType, select, IDEA{Votes} other{Likes}}}}","likes":"{count, plural, one{like} other{likes}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRepliesCount-1745505307000","value":{"textTitle":"{count, plural,one {{conversationStyle, select, IDEA{Comment} OCCASION{Comment} other{Reply}}} other{{conversationStyle, select, IDEA{Comments} OCCASION{Comments} other{Replies}}}}","comments":"{count, plural, one{Comment} other{Comments}}"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505307000":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745505307000","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false}}}},"page":"/tags/TagPage/TagPage","query":{"nodeId":"board:AIPlatformBlog","tagName":"computer vision"},"buildId":"-gVUpXaWnPcjlrLJZ92B7","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.3.0","openTelemetryUniverse":"prod","openTelemetryCollector":"http://localhost:4318","openTelemetryRouteChangeAllowedTime":"5000","apolloDevToolsEnabled":false,"inboxMuteWipFeatureEnabled":false},"isFallback":false,"isExperimentalCompile":false,"dynamicIds":["./components/community/Navbar/NavbarWidget.tsx","./components/community/Breadcrumb/BreadcrumbWidget.tsx","./components/customComponent/CustomComponent/CustomComponent.tsx","./components/tags/TagsHeaderWidget/TagsHeaderWidget.tsx","./components/messages/MessageListForNodeByRecentActivityWidget/MessageListForNodeByRecentActivityWidget.tsx","./components/tags/TagSubscriptionAction/TagSubscriptionAction.tsx","./components/external/components/ExternalComponent.tsx","../shared/client/components/common/List/ListGroup/ListGroup.tsx","./components/messages/MessageView/MessageView.tsx","./components/messages/MessageView/MessageViewInline/MessageViewInline.tsx","./components/customComponent/CustomComponentContent/TemplateContent.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=TagPage","strategy":"afterInteractive"}]}