Copilot stack

11 Topics
"}},"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\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/community/NavbarDropdownToggle\"]})":[{"__ref":"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/OverflowNav\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageView/MessageViewInline\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/common/Pager/PagerLoadMore\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/users/UserLink\"]})":[{"__ref":"CachedAsset:text:en_US-components/users/UserLink-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageSubject\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageTime\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageTime-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/nodes/NodeIcon\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/nodes/NodeIcon-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageUnreadCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageUnreadCount-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageViewCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/kudos/KudosCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/kudos/KudosCount-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageRepliesCount\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageRepliesCount-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"components/messages/MessageBody\"]})":[{"__ref":"CachedAsset:text:en_US-components/messages/MessageBody-1745505309787"}],"cachedText({\"lastModified\":\"1745505309787\",\"locale\":\"en-US\",\"namespaces\":[\"shared/client/components/users/UserAvatar\"]})":[{"__ref":"CachedAsset:text:en_US-shared/client/components/users/UserAvatar-1745505309787"}]},"CachedAsset:pages-1745485687373":{"__typename":"CachedAsset","id":"pages-1745485687373","value":[{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"BlogViewAllPostsPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId/all-posts/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CasePortalPage","type":"CASE_PORTAL","urlPath":"/caseportal","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CreateGroupHubPage","type":"GROUP_HUB","urlPath":"/groups/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CaseViewPage","type":"CASE_DETAILS","urlPath":"/case/:caseId/:caseNumber","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"InboxPage","type":"COMMUNITY","urlPath":"/inbox","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"HelpFAQPage","type":"COMMUNITY","urlPath":"/help","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"IdeaMessagePage","type":"IDEA_POST","urlPath":"/idea/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"IdeaViewAllIdeasPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId/all-ideas/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"LoginPage","type":"USER","urlPath":"/signin","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"BlogPostPage","type":"BLOG","urlPath":"/category/:categoryId/blogs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"UserBlogPermissions.Page","type":"COMMUNITY","urlPath":"/c/user-blog-permissions/page","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ThemeEditorPage","type":"COMMUNITY","urlPath":"/designer/themes","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"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":1745485687373,"localOverride":null,"page":{"id":"OccasionEditPage","type":"EVENT","urlPath":"/event/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"OAuthAuthorizationAllowPage","type":"USER","urlPath":"/auth/authorize/allow","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"PageEditorPage","type":"COMMUNITY","urlPath":"/designer/pages","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"PostPage","type":"COMMUNITY","urlPath":"/category/:categoryId/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumBoardPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TkbBoardPage","type":"TKB","urlPath":"/category/:categoryId/kb/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"EventPostPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"UserBadgesPage","type":"COMMUNITY","urlPath":"/users/:login/:userId/badges","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"GroupHubMembershipAction","type":"GROUP_HUB","urlPath":"/membership/join/:nodeId/:membershipType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"MaintenancePage","type":"COMMUNITY","urlPath":"/maintenance","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"IdeaReplyPage","type":"IDEA_REPLY","urlPath":"/idea/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"UserSettingsPage","type":"USER","urlPath":"/mysettings/:userSettingsTab","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"GroupHubsPage","type":"GROUP_HUB","urlPath":"/groups","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumPostPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"OccasionRsvpActionPage","type":"OCCASION","urlPath":"/event/:boardId/:messageSubject/:messageId/rsvp/:responseType","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"VerifyUserEmailPage","type":"USER","urlPath":"/verifyemail/:userId/:verifyEmailToken","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"AllOccasionsPage","type":"OCCASION","urlPath":"/category/:categoryId/events/:boardId/all-events/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"EventBoardPage","type":"EVENT","urlPath":"/category/:categoryId/events/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TkbReplyPage","type":"TKB_REPLY","urlPath":"/kb/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"IdeaBoardPage","type":"IDEA","urlPath":"/category/:categoryId/ideas/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CommunityGuideLinesPage","type":"COMMUNITY","urlPath":"/communityguidelines","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CaseCreatePage","type":"SALESFORCE_CASE_CREATION","urlPath":"/caseportal/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TkbEditPage","type":"TKB","urlPath":"/kb/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForgotPasswordPage","type":"USER","urlPath":"/forgotpassword","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"IdeaEditPage","type":"IDEA","urlPath":"/idea/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TagPage","type":"COMMUNITY","urlPath":"/tag/:tagName","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"BlogBoardPage","type":"BLOG","urlPath":"/category/:categoryId/blog/:boardId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"OccasionMessagePage","type":"OCCASION_TOPIC","urlPath":"/event/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ManageContentPage","type":"COMMUNITY","urlPath":"/managecontent","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ClosedMembershipNodeNonMembersPage","type":"GROUP_HUB","urlPath":"/closedgroup/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CommunityPage","type":"COMMUNITY","urlPath":"/","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumMessagePage","type":"FORUM_TOPIC","urlPath":"/discussions/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"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":1745485687373,"localOverride":null,"page":{"id":"BlogMessagePage","type":"BLOG_ARTICLE","urlPath":"/blog/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"RegistrationPage","type":"USER","urlPath":"/register","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"EditGroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumEditPage","type":"FORUM","urlPath":"/discussions/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"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":1745485687373,"localOverride":null,"page":{"id":"TkbMessagePage","type":"TKB_ARTICLE","urlPath":"/kb/:boardId/:messageSubject/:messageId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"BlogEditPage","type":"BLOG","urlPath":"/blog/:boardId/:messageSubject/:messageId/edit","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ManageUsersPage","type":"USER","urlPath":"/users/manage/:tab?/:manageUsersTab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumReplyPage","type":"FORUM_REPLY","urlPath":"/discussions/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"PrivacyPolicyPage","type":"COMMUNITY","urlPath":"/privacypolicy","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"NotificationPage","type":"COMMUNITY","urlPath":"/notifications","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"UserPage","type":"USER","urlPath":"/users/:login/:userId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"OccasionReplyPage","type":"OCCASION_REPLY","urlPath":"/event/:boardId/:messageSubject/:messageId/comments/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ManageMembersPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId/manage/:tab?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"SearchResultsPage","type":"COMMUNITY","urlPath":"/search","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"BlogReplyPage","type":"BLOG_REPLY","urlPath":"/blog/:boardId/:messageSubject/:messageId/replies/:replyId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"GroupHubPage","type":"GROUP_HUB","urlPath":"/group/:groupHubId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TermsOfServicePage","type":"COMMUNITY","urlPath":"/termsofservice","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"CategoryPage","type":"CATEGORY","urlPath":"/category/:categoryId","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"ForumViewAllTopicsPage","type":"FORUM","urlPath":"/category/:categoryId/discussions/:boardId/all-topics/(/:after|/:before)?","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"localOverride":null,"page":{"id":"TkbPostPage","type":"TKB","urlPath":"/category/:categoryId/kbs/:boardId/create","__typename":"PageDescriptor"},"__typename":"PageResource"},{"lastUpdatedTime":1745485687373,"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}"},"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},"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":"en","possibleValues":["en-US"]}},"deleted":false},"Theme:customTheme1":{"__typename":"Theme","id":"customTheme1"},"CachedAsset:theme:customTheme1-1745485686809":{"__typename":"CachedAsset","id":"theme:customTheme1-1745485686809","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","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-components/common/EmailVerification-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/common/EmailVerification-1745505309787","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-shared/client/components/common/Loading/LoadingDot-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Loading/LoadingDot-1745505309787","value":{"title":"Loading..."},"localOverride":false},"CachedAsset:text:en_US-pages/tags/TagPage-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-pages/tags/TagPage-1745505309787","value":{"tagPageTitle":"Tag:\"{tagName}\" | {communityTitle}","tagPageForNodeTitle":"Tag:\"{tagName}\" in \"{title}\" | {communityTitle}","name":"Tags Page","tag":"Tag: {tagName}"},"localOverride":false},"Category:category:top":{"__typename":"Category","id":"category:top","entityType":"CATEGORY","displayId":"top","nodeType":"category","depth":0,"title":"Top","shortTitle":"Top"},"Category:category:communities":{"__typename":"Category","id":"category:communities","entityType":"CATEGORY","displayId":"communities","nodeType":"category","depth":1,"title":"Communities","description":"","avatar":null,"profileSettings":{"__typename":"ProfileSettings","language":null},"parent":{"__ref":"Category:category:top"},"ancestors":{"__typename":"CoreNodeConnection","edges":[{"__typename":"CoreNodeEdge","node":{"__ref":"Community:community:gxcuf89792"}}]},"userContext":{"__typename":"NodeUserContext","canAddAttachments":false,"canUpdateNode":false,"canPostMessages":false,"isSubscribed":false},"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:category:communities-1745502712805":{"__typename":"CachedAsset","id":"quilt:o365.prod:pages/tags/TagPage:category:communities-1745502712805","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:1745505310885":{"__typename":"CachedAsset","id":"quiltWrapper:o365.prod:Common:1745505310885","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.community_banner","props":{"widgetVisibility":"signedInOrAnonymous","useTitle":true,"usePageWidth":false,"useBackground":false,"title":"","lazyLoad":false},"__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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/common/ActionFeedback-1745505309787","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.community_banner-en-1745485729404":{"__typename":"CachedAsset","id":"component:custom.widget.community_banner-en-1745485729404","value":{"component":{"id":"custom.widget.community_banner","template":{"id":"community_banner","markupLanguage":"HANDLEBARS","style":".community-banner {\n a.top-bar.btn {\n top: 0px;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0px;\n background: #0068b8;\n color: white;\n padding: 10px 0px;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0px !important;\n font-size: 14px;\n }\n}\n","texts":null,"defaults":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"components":[{"id":"custom.widget.community_banner","form":null,"config":null,"props":[],"__typename":"Component"}],"grouping":"CUSTOM","__typename":"ComponentTemplate"},"properties":{"config":{"applicablePages":[],"description":"community announcement text","fetchedContent":null,"__typename":"ComponentConfiguration"},"props":[],"__typename":"ComponentProperties"},"form":null,"__typename":"Component","localOverride":false},"globalCss":{"css":".custom_widget_community_banner_community-banner_1x9u2_1 {\n a.custom_widget_community_banner_top-bar_1x9u2_2.custom_widget_community_banner_btn_1x9u2_2 {\n top: 0;\n width: 100%;\n z-index: 999;\n text-align: center;\n left: 0;\n background: #0068b8;\n color: white;\n padding: 0.625rem 0;\n display: block;\n box-shadow: none !important;\n border: none !important;\n border-radius: none !important;\n margin: 0 !important;\n font-size: 0.875rem;\n }\n}\n","tokens":{"community-banner":"custom_widget_community_banner_community-banner_1x9u2_1","top-bar":"custom_widget_community_banner_top-bar_1x9u2_2","btn":"custom_widget_community_banner_btn_1x9u2_2"}},"form":null},"localOverride":false},"CachedAsset:component:custom.widget.HeroBanner-en-1745485729404":{"__typename":"CachedAsset","id":"component:custom.widget.HeroBanner-en-1745485729404","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-1745485729404":{"__typename":"CachedAsset","id":"component:custom.widget.MicrosoftFooter-en-1745485729404","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/Breadcrumb-1745505309787","value":{"navLabel":"Breadcrumbs","dropdown":"Additional parent page navigation"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagsHeaderWidget-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagsHeaderWidget-1745505309787","value":{"tag":"{tagName}","topicsCount":"{count} {count, plural, one {Topic} other {Topics}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListForNodeByRecentActivityWidget-1745505309787","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:AI":{"__typename":"Category","id":"category:AI","categoryPolicies":{"__typename":"CategoryPolicies","canReadNode":{"__typename":"PolicyResult","failureReason":null}},"displayId":"AI"},"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:4401025":{"__typename":"Conversation","id":"conversation:4401025","topic":{"__typename":"BlogTopicMessage","uid":4401025},"lastPostingActivityTime":"2025-04-07T08:00:43.443-07:00","solved":false},"Blog:board:AIPlatformBlog":{"__typename":"Blog","id":"board:AIPlatformBlog","displayId":"AIPlatformBlog","nodeType":"board","conversationStyle":"BLOG","title":"AI - AI Platform Blog","shortTitle":"AI - AI Platform Blog","parent":{"__ref":"Category:category:AI"}},"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":2120},"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":"MjUuMXwyLjF8b3wyNXxfTlZffDE","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":422},"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":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLUdhbFE0ZQ?revision=8\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzk0MjAwLXduMHF0eQ?revision=8\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","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:4392443":{"__typename":"Conversation","id":"conversation:4392443","topic":{"__typename":"BlogTopicMessage","uid":4392443},"lastPostingActivityTime":"2025-03-12T07:37:09.293-07:00","solved":false},"User:user:2947185":{"__typename":"User","uid":2947185,"login":"TaoChen","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yOTQ3MTg1LWNOUXpscA?image-coordinates=0%2C55%2C4463%2C4518"},"id":"user:2947185"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkyNDQzLUdRRUR2Vw?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkyNDQzLUdRRUR2Vw?revision=3","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"BlogTopicMessage:message:4392443":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Customizing AI agents with the Semantic Kernel agent framework","conversation":{"__ref":"Conversation:conversation:4392443"},"id":"message:4392443","revisionNum":3,"uid":4392443,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2947185"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" The blog post Customizing AI agents with the Semantic Kernel agent framework discusses the capabilities of the Semantic Kernel SDK, an open-source tool developed by Microsoft for creating AI agents and multi-agent systems. It highlights the benefits of using single-purpose agents within a multi-agent system to achieve more complex workflows with improved efficiency. The Semantic Kernel SDK offers features like telemetry, hooks, and filters to ensure secure and responsible AI solutions, making it a versatile tool for both simple and complex AI projects. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":1441},"postTime":"2025-03-12T07:36:34.919-07:00","lastPublishTime":"2025-03-12T07:37:09.293-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 Customizing AI agents with the Semantic Kernel agent framework \n AI agents are autonomous entities designed to solve complex tasks for humans. Compared to traditional software agents, AI-powered agents allow for more robust solutions with less coding. Individual AI agents have shown significant capabilities, achieving results previously not possible. The potential of these agents is enhanced when multiple specialized agents collaborate within a multi-agent system. Research has shown that such systems, comprising single-purpose agents, are more effective than single multi-purpose agents in many tasks [1]. This enables automation of more complex workflows with improved results and higher efficiency in the future.  \n In this post, we are going to explore how you can build single agents and multi-agent systems with Semantic Kernel.   \n Semantic Kernel is a lightweight and open-source SDK developed by Microsoft, designed to facilitate the creation of production-ready AI solutions. Despite its capabilities, Semantic Kernel remains accessible, allowing developers to start with minimal code. For scalable deployment, it offers advanced features such as telemetry, hooks, and filters to ensure the delivery of secure and responsible AI solutions.  \n The Semantic Kernel Agent Framework offers pro-code orchestration within the Semantic Kernel ecosystem, facilitating the development of AI agents and agentic patterns capable of addressing more complex tasks autonomously.  \n Starting with individual agents is recommended. Semantic Kernel provides a variety of AI service connectors, allowing developers and companies to select models from different providers or even local models. Additionally, Semantic Kernel gives developers the flexibility to integrate their agents created from managed services like Azure OpenAI Service Assistant API and Azure AI Agent Service into a unified system. Refer to the samples in the Semantic Kernel GitHub repository to get you started.  \n \n Python: semantic-kernel/python/samples/getting_started_with_agents at main · microsoft/semantic-kernel  \n .Net: semantic-kernel/dotnet/samples/GettingStartedWithAgents at main · microsoft/semantic-kernel  \n \n Previous posts have thoroughly examined the principles of designing single agents and the effectiveness of multi-agent systems. The objective of this post is not to determine when a single agent should be employed versus a multi-agent system; however, it is important to emphasize that agents should be designed with a single purpose to maximize their performance. Assigning multiple responsibilities or capabilities to a single agent is likely to result in suboptimal outcomes. \n If your tasks can be efficiently accomplished by a single agent, that’s great! If you find that the performance of a single agent is unsatisfactory, you might consider employing multiple agents to collaboratively address your tasks. Our recent Microsoft Mechanics video outlines how a multi-agent system operates.  \n \n Semantic Kernel offers a highly configurable chat-based agentic pattern, with additional patterns coming soon. It accommodates two or more agents and supports custom strategies to manage the flow of chat, enhancing the system’s dynamism and overall intelligence.  \n Semantic Kernel is production-ready with built-in features that are off by default but available when needed. One such feature is observability. Often in an agentic application, agent interactions were not shown in the output, which is typical since users often focus on results. Nonetheless, being able to inspect the inner process is crucial to developers. Tracking interactions becomes challenging as the number of agents increases and tasks grow complex. Semantic Kernel can optionally emit telemetry data to ease debugging.  \n For a demonstration of three agents collaborating in real-time and reviewing the agent interactions with the tracing UI in Azure AI Foundry portal, please watch the following video demo: \n \n The code to the demo can be found in a single demo app in the Semantic Kernel repository: semantic-kernel/python/samples/demos/document_generator at main · microsoft/semantic-kernel  \n In summary, Semantic Kernel offers an efficient framework for both single and multi-agent systems. As the platform evolves, it promises even more innovative patterns and capabilities, solidifying its role in agent-based AI. Whether for simple tasks or complex projects, Semantic Kernel provides the necessary tools to achieve your goals effectively. Happy coding!  \n To get started,   \n \n Explore Azure AI Foundry models, agentic frameworks, and toolchain features  \n \n \n Begin coding using the Semantic Kernel python repository in GitHub  \n \n \n Download the Azure AI Foundry SDK  \n \n \n Review our Learn documentation   \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5200","kudosSumWeight":3,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzkyNDQzLUdRRUR2Vw?revision=3\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUdEN01uSXdBeFlNLzE3NDE3ODgxNjcyNzZ8MHwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=GD7MnIwAxYM/1741788167276","thumbnail":"https://i.ytimg.com/vi/GD7MnIwAxYM/hqdefault.jpg","uploading":false,"height":240,"width":320,"title":null},"videoAssociationType":"INLINE_BODY"}},{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3lvdXR1LmJlL3B6QVByVk0xM2t3LzE3NDE3ODgyMjg3NTB8MXwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://youtu.be/pzAPrVM13kw/1741788228750","thumbnail":"https://i.ytimg.com/vi/pzAPrVM13kw/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/bS00MzkyNDQzLUdRRUR2Vw?revision=3"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4388201":{"__typename":"Conversation","id":"conversation:4388201","topic":{"__typename":"BlogTopicMessage","uid":4388201},"lastPostingActivityTime":"2025-03-05T07:21:42.886-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/bS00Mzg4MjAxLXA1aXRBcg?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLXA1aXRBcg?revision=6","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVR0OENEbw?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVR0OENEbw?revision=6","title":"image.png","associationType":"BODY","width":960,"height":960,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTRvSDFQcA?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTRvSDFQcA?revision=6","title":"clipboard_image-1-1741040785929.png","associationType":"BODY","width":1600,"height":1058,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLXFTaEprbQ?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLXFTaEprbQ?revision=6","title":"clipboard_image-3-1741040819829.png","associationType":"BODY","width":1500,"height":902,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVBOYjNtag?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVBOYjNtag?revision=6","title":"clipboard_image-4-1741040886277.png","associationType":"BODY","width":1226,"height":712,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLUJLcDAzdA?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLUJLcDAzdA?revision=6","title":"clipboard_image-7-1741040984185.png","associationType":"BODY","width":841,"height":508,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLW9jRzVJYQ?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLW9jRzVJYQ?revision=6","title":"image.png","associationType":"BODY","width":905,"height":905,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTZ6MmNrSA?revision=6\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTZ6MmNrSA?revision=6","title":"clipboard_image-7-1741017569056.png","associationType":"BODY","width":702,"height":135,"altText":""},"BlogTopicMessage:message:4388201":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Reduce AI Provisioning Effort - Jumpstart your solutions with AI App Templates","conversation":{"__ref":"Conversation:conversation:4388201"},"id":"message:4388201","revisionNum":6,"uid":4388201,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:282974"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" In the previous post, we introduced Contoso Chat – an open-source RAG-based retail chat sample for Azure AI Foundry, that serves as both an AI App template (for builders) and the basis for a hands-on workshop (for learners). And we briefly talked about five stages in the developer workflow (provision, setup, ideate, evaluate, deploy) that take them from the initial prompt to a deployed product. But how can that sample help you build your app?  \n The answer lies in developer tools and AI App templates that jumpstart productivity by giving you a fast start and a solid foundation to build on. In this post, we answer that question with a closer look at Azure AI App templates - what they are, and how we can jumpstart our productivity with a reuse-and-extend approach that builds on open-source samples for core application architectures. ","introduction":"Building intelligent apps efficiently requires rich developer tooling – but building them intuitively requires a good foundation that can be learned from, customized, and reused. \n\nIn part 2 of our Deconstructing Contoso Chat series, we unpack the provision and setup stages of our GenAIOps workflow and explain how AI templates jumpstart dev productivity.","metrics":{"__typename":"MessageMetrics","views":381},"postTime":"2025-03-05T07:21:42.886-08:00","lastPublishTime":"2025-03-05T07:21:42.886-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" \n 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 \n In the previous post, we introduced Contoso Chat – an open-source RAG-based retail chat sample for Azure AI Foundry, that serves as both an AI app template (for builders) and the basis for a hands-on workshop (for learners). And we briefly talked about five stages in the developer workflow (provision, setup, ideate, evaluate, deploy) that take them from the initial prompt to a deployed product. But how can that sample help you build your app?  \n The answer lies in developer tools and AI App templates that jumpstart productivity by giving you a fast start and a solid foundation to build on. \n Imagine this familiar scenario.   \n You are a traditional application developer in an enterprise and have been asked to build an AI-powered chat application that answers questions about your products. Where do you even start?   \n \n Do you know what architecture to use? (Think Retrieval Augmented Generation)  \n Do you know what “models” to use? (Chat model, Embeddings model)  \n Do you know what “services” you might need? (Safety, Search, Model Hosting)  \n Do you know how to “build” the application around them? (ideate-evaluate-deploy)  \n Can you make the development workflow repeatable across teams? (collaborative)  \n \n If this is not complex enough, consider the fast-growing ecosystem of models, frameworks and tools that are coming up around AI. How can you flatten your learning curve?  \n \n Azure AI App Templates can help in three ways:  \n \n They implement infrastructure as code – with template files that can be version controlled and activated consistently across teams, with the Azure Developer CLI.  \n They use configuration as code – with dev container files for a Docker container with all dependencies pre-installed, that can be activated consistently across teams, in the cloud (with GitHub Codespaces) or locally (with Docker Desktop).  \n They provide a working app foundation with a defined application architecture. Now, instead of having to figure out your design from scratch, you can start with a template that has the key requirements for your scenario – and customize it for your needs (with updated models, data, app source and evaluation metrics).  \n \n Let’s revisit that scenario now. Want to build a custom retail chatbot grounded in your own data? Here’s how you can make that happen with Contoso Chat.  \n Discover it - with AI App Template Gallery  \n Let’s start with the discovery process. How would you have found the right template for your needs if I hadn’t told you about it? You’d start with the AI app templates gallery as shown below. \n \n Simply use the filters in the gallery to find the AI template that supports your use case. Let’s say you came in with the following criteria:  \n \n You have your customer data in an Azure CosmosDB  \n You have product indexes built with Azure AI Search  \n You want to use Azure OpenAI Service models for chat and embeddings  \n You want to build your application using the Azure AI Foundry SDK in Python  \n \n Fill those requirements in – and you will see the recommended template is for the Contoso Chat sample. Click on the tile to get more details like the resources used, as shown below.  \n \n Develop with GitHub Codespaces  \n You have a template – what do you do now? The first thing you want to do is to take the template for a spin and see if the features and experience match your needs.   \n Activating that template requires you to use the Azure Developer CLI tool (more on that in a minute) – and install additional dependencies (for example: Azure AI Foundry SDK and individual Python SDKs for services used, and VS Code extensions to boost productivity). Built-in devcontainer support in template repos makes this a 1-click experience, as we’ll see in a minute.  \n But you also have a choice – you can fork the existing sample to get a sandbox copy that you can periodically sync with the original for updates. Or you can use “azd init” to create an instance of that template (at the current time) and use that as the basis for a new repo. We recommend the first approach for learners, and the second for builders. The first approach allows you to track updates to the sample and learn about new features or tools. \n \n Contoso Chat has a prebuild-ready branch used with this workshop, as shown in the figure on the right. Want to jumpstart your learning journey? Use this prebuild link to launch the wizard below - and setup your GitHub Codespaces environment in minutes, with 1 click.  \n \n Provision with Azure Developer CLI  \n Okay, so you found the right template for your needs. And you have your development environment running in GitHub Codespaces to start building. And all this took minutes. So, what do you need to do to provision, deploy, and explore, the sample app? You need just one tool (azd) – and it’s already pre-installed in your GitHub Codespaces by default!  \n The comic below gives you a visual guide to the Azure Developer CLI documentation explaining what it does, how it works, why it matters, and how to use it with templates like Contoso Chat.  \n \n \n Want to get a more structured understanding of the Azure Developer CLI workflow? Check out this free learning path that covers the same information with hands-on labs.   \n \n For now, we just want to deploy the template and explore the application. To do that, launch the GitHub Codespaces session as explained earlier, then wait till you see the Visual Studio Code environment become active in that browser tab. Going from template to deployment is just two steps away:  \n \n Authenticate with Azure (using “azd auth –use-device-code”) to connect the development environment with an active Azure subscription.  \n Deploy the application with one command (“azd up”) – which provisions the required resources, populates required data, and deploys the application.  \n \n You will now have a RAG-based retail chat AI deployed to an Azure Container Apps hosted endpoint that you can test using the built-in Swagger (“/docs”) endpoint – or integrate with your external applications or clients for driving a better user experience. \n The deployment process will take a few minutes to complete with minimal involvement needed from you or your IT admins at this stage! You can now visit the following “portals” to explore the deployment in more detail:  \n \n Visit Azure Portal to understand the resource deployments associated with this architecture - specifically the Azure AI hub, project, and services resources that are typical for an Azure AI Foundry project. You can also explore the data samples used (product index in Azure AI Search, customer database in Azure CosmosDB) to get a sense for the schema and usage (e.g., vector search with semantic ranking).  \n \n \n Visit Azure AI Foundry portal to manage your generative AI application needs in one place – from discovering and deploying new models, to activating content filters for safety, to viewing application traces or evaluation results when enabled.  \n \n \n Recap and Next Steps  \n We started off this post by asking “how can an AI template help you build your app?” with specific focus on improving developer productivity for jumpstarting new projects. And we saw how AI app templates solved three challenges for us:  \n \n Reuse vs. Build from scratch – knowing the right AI architecture and components to use can be complicated. Start with a foundation template and customize instead.  \n \n \n Configuration as code – get a consistent, reproducible development environment with a prebuilt dev container that can be activated in the cloud, or on local device.  \n \n \n Infrastructure as code – use AI app templates with the Azure Developer CLI, to ensure a consistent and reproducible provisioning experience, with minimal developer effort.  \n \n Now, you have a working app and development environment. Next, it’s time to customize it to your needs. And that means understanding how that application was designed and evolved from prompt to prototype. Join me next time to look at how we can ideate with Prompty!  \n Are you ready to start developing? Here are some resources that can help!  \n \n AI app templates gallery - Discover other AI solution templates to deconstruct.   \n Contoso Chat repository - Browse the README for a self-guided quickstart.  \n Azure AI Foundry - Discover AI models and services tailored to your use case. Explore the management center to manage resources, quotas and more throughout the dev lifecycle.  \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"9057","kudosSumWeight":0,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLXA1aXRBcg?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVR0OENEbw?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTRvSDFQcA?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLXFTaEprbQ?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDU","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLVBOYjNtag?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDY","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLUJLcDAzdA?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDc","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLW9jRzVJYQ?revision=6\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDg","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mzg4MjAxLTZ6MmNrSA?revision=6\"}"}}],"totalCount":8,"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/bS00Mzg4MjAxLXA1aXRBcg?revision=6"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4363576":{"__typename":"Conversation","id":"conversation:4363576","topic":{"__typename":"BlogTopicMessage","uid":4363576},"lastPostingActivityTime":"2025-02-25T09:16:26.295-08:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzYzNTc2LVA2MWdITA?revision=3\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzYzNTc2LVA2MWdITA?revision=3","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"BlogTopicMessage:message:4363576":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Power Your Agents with Azure Logic Apps","conversation":{"__ref":"Conversation:conversation:4363576"},"id":"message:4363576","revisionNum":3,"uid":4363576,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1342559"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Building intelligent applications no longer requires complex coding. With advancements in technology, you can now create agents using cloud-based tools to automate workflows, connect to various services, and integrate business processes across hybrid environments without writing any code. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":2560},"postTime":"2025-01-28T08:00:00.026-08:00","lastPublishTime":"2025-01-28T08:00:00.026-08: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: Power Your Agents with Azure Logic Apps \n Building intelligent applications doesn't always have to involve complex coding. With the latest advancements in technology, you can now build agents using cloud-based tools to automate workflows, connect to various services, integrate business processes across hybrid environments, and enhance your agent's functionalities without writing a single line of code. \n Generally speaking, the way agents work is that you give them powers - like the ability to search for information, or to take action in a different system - and the agents figure out how to accomplish tasks with the powers you give them. This approach simplifies the development process and creates opportunities for a broader range of users to create intelligent applications. \n For instance, you can create customer service bots that handle inquiries and provide support, automate business processes such as order processing and inventory management, and develop personal assistants that schedule meetings and send reminders. Additionally, you can build applications that integrate with various services like CRM systems, social media platforms, and cloud storage solutions, enabling seamless data flow and enhanced functionality. The possibilities are vast, allowing users to innovate and streamline operations across different industries. \n With the latest updates to the Azure AI Agent Service in Azure AI Foundry, you can now build agents using tools like Azure Logic Apps to automate workflows and enhance your agent's functionalities in a visual manner. \n Getting Started with Azure AI Foundry Agents \n Azure AI Foundry provides a flexible platform for developers to build AI-powered agents. The new agent interface lets you assemble building blocks to define your agent's capabilities. You can build agents with the Azure AI Agent Service through the Azure AI Foundry portal, or by using the extensive array of developer SDKs. \n In my case, I wanted to build an agent that schedules events in Microsoft Outlook and could look up information on the web if it needed to - but I wanted to do that without writing much code. \n Introducing Azure Logic Apps \n Azure Logic Apps is a cloud service that enables you to create and run automated workflows with little to no code. With thousands of prebuilt connectors, Logic Apps can interact with various services like Microsoft Dynamics, Outlook, SAP, Salesforce, Workday, and nearly any other commercial software package you can think of. \n Logic Apps is a block-diagram system - it's like building with LEGOs, but for software. It lets you build automated workflows without getting bogged down in code. You can focus on what you want your app to do rather than how it's going to run. Azure takes care of all the boring stuff like keeping it online, making sure it can handle a bunch of requests, and all of that. This means you can create some seriously robust cloud apps super quickly. \n Level Up Your Agents \n You can now use Logic Apps with Azure AI Agent Service. The cool part is that the agent playground in Azure AI Foundry will show you all the Logic Apps workflows you can plug in. \n Here's how to set up a Logic Apps workflow for use with the Azure AI Agent Service: \n \n It needs to be the consumption type. \n It needs to have a request trigger, so it can be called like a web service. \n It needs to have a description of its inputs and outputs, so the agent knows how to use it. \n It needs to end with a response action so it can respond appropriately to the agent that calls it. \n \n If you've already got some Logic Apps that fit the bill, you can use those. If not, it's pretty easy to build them. The documentation here details the process. \n See how I built an agent powered with Logic Apps: \n \n Conclusion \n Integrating Azure Logic Apps with Azure AI Agent Service unlocks a new level of functionality and accessibility. By using Logic Apps' low-code tools, you can expand your agents' capabilities, automate complex workflows, and connect to a multitude of services - all without diving deep into code. This approach doesn't just save time - it empowers a broader range of users to create intelligent applications. \n Additional Resources \n \n Explore Azure AI Foundry \n Start using the Azure AI Foundry SDK \n Review the Azure AI Foundry documentation and Call Azure Logic Apps as functions using Azure OpenAI Assistants \n Take the Azure AI Learn courses \n Learn more about Azure Logic Apps: What is Azure Logic Apps? \n See what you can connect with Azure Logic Apps: Azure Logic Apps Connectors \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"4890","kudosSumWeight":2,"repliesCount":1,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MzYzNTc2LVA2MWdITA?revision=3\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUgyZVhZYzBDSXdNJnNvdXJjZV92ZV9wYXRoPU9UWTNNVFEvMTczODAxNDI5MzMzMnwwfDI1OzI1fHw","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=H2eXYc0CIwM&source_ve_path=OTY3MTQ/1738014293332","thumbnail":"https://i.ytimg.com/vi/H2eXYc0CIwM/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/bS00MzYzNTc2LVA2MWdITA?revision=3"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4295859":{"__typename":"Conversation","id":"conversation:4295859","topic":{"__typename":"BlogTopicMessage","uid":4295859},"lastPostingActivityTime":"2024-11-20T08:22:53.105-08:00","solved":false},"User:user:2753830":{"__typename":"User","uid":2753830,"login":"udimilo","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/m_assets/avatars/default/avatar-5.svg?time=0"},"id":"user:2753830"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LVJxQVkzag?revision=24\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LVJxQVkzag?revision=24","title":"Key Art_Still_Azure AI Foundry_Light Mode.png","associationType":"COVER","width":1381,"height":1036,"altText":""},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUExNEhlag?revision=24\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUExNEhlag?revision=24","title":"Azure AI Foundry_.png","associationType":"BODY","width":1196,"height":659,"altText":"Azure AI Foundry technical diagram. Includes catalog of foundational, open-source, task, and industry models in addition to Azure OpenAI Service, Azure AI Search, Azure AI Agent Service, and Azure AI Content Safety. Observability offered with evaluations, customizations, governance, and monitoring. Shows Azure AI capability integration into popular development tools like Copilot Studio, Visual Studio, and GitHub through the Azure AI Foundry SDK."},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LWVzNDhaZA?revision=24\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LWVzNDhaZA?revision=24","title":"Speech in AI Studio Ignite 2024 Gif.gif","associationType":"BODY","width":1920,"height":1080,"altText":"A no-audio demonstration of accessing the Azure AI Speech playground in Azure AI Foundry portal."},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUdSSDh6WA?revision=24\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUdSSDh6WA?revision=24","title":"Azure AI Foundry help pane.png","associationType":"BODY","width":1310,"height":515,"altText":"An image of the Azure AI Foundry help pane in the chat playground, showing easy access to help documentation."},"BlogTopicMessage:message:4295859":{"__typename":"BlogTopicMessage","subject":"Ignite 2024: Streamlining AI Development with an Enhanced User Interface, Accessibility, and Learning Experiences in Azure AI Foundry portal","conversation":{"__ref":"Conversation:conversation:4295859"},"id":"message:4295859","revisionNum":24,"uid":4295859,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2753830"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" Announcing Azure AI Foundry, a unified platform that simplifies AI development and management. The platform portal (formerly Azure AI Studio) features a revamped user interface, enhanced model catalog, new management center, improved accessibility and learning, making it easier than ever for Developers and IT Admins to design, customize, and manage AI apps and agents efficiently. ","introduction":"","metrics":{"__typename":"MessageMetrics","views":5527},"postTime":"2024-11-19T05:30:00.066-08:00","lastPublishTime":"2024-11-20T08:22:53.105-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" In today's rapidly evolving technological landscape, the integration of artificial intelligence (AI) into business operations is no longer a luxury but a necessity. However, despite the promising growth, many companies face barriers in scaling their AI initiatives. According to a Deloitte report*, nearly 70% of organizations have moved 30% or fewer of their Generative AI experiments into production. As organizations strive to harness AI’s full potential, a unified user interface and management center streamlines resource allocation, governance, and compliance, making AI development more efficient and secure.   \n Today, we announced Azure AI Foundry , our unified AI platform that includes our Azure AI Foundry portal  (formerly Azure AI Studio) and our code-first unified SDK experience with pre-built app templates for developers.   \n Azure AI Foundry addresses development needs by providing a comprehensive toolchain that integrates multiple AI services and models from various providers. Our unified approach simplifies the development and management process, empowering Developers and IT Admins to design, customize, and manage AI solutions with greater ease and confidence. By offering a streamlined navigation experience and centralized management center, the Azure AI Foundry portal helps stakeholders focus on what matters most – driving innovation to achieve their business objectives.    \n \n With Azure AI Foundry, IT Admins can provision cloud resources and manage AI projects and deployments, and developers can discover AI capabilities and models.  Azure AI Foundry SDK , a unified toolchain for AI development, brings Azure AI capabilities to popular coding workspaces like GitHub, Visual Studio, and Copilot Studio. Azure AI Foundry portal offers a visual user interface to discover AI tools and manage AI applications at scale.   \n \n We are excited to announce significant transformations to Azure AI Foundry portal. The user interface now features a revamped and streamlined navigation experience, making it easier to discover AI capabilities and manage applications efficiently. Additionally, we’ve enhanced the model catalog and integrated Azure OpenAI Service, Azure AI Speech, and Azure AI Language Studios for improved playground experiences. A brand-new management center has been added to govern projects, resources, deployments, and quotas, and we’ve made accessibility improvements to support end-to-end development. Finally, we’ve improved access to documentation with a new help pane.   \n Streamlined Navigation   \n The revamped and streamlined navigation experience in Azure AI Foundry portal is designed to help you discover models and AI services and manage applications efficiently. After you explore in the global landing page, you can seamlessly transition into Azure AI projects. AI projects can help you manage multiple AI services and model deployments from various providers. In this latest update, we've made several enhancements to Azure AI projects to improve your workflow:   \n \n Activity-centric Organization : All tools are now organized around your activities, to help you find the right tools exactly when you need them.   \n Centralized Assets : All of your assets including model deployments, endpoints, keys, data, indexes, and more are now easily accessible from a single location.   \n Unified Resource Management : A new management center allows you to easily organize and govern resources, control project access, view quota, and more. This space provides a comprehensive overview of your resources, helping you manage them more effectively.   \n \n \n If you worked with Azure AI Studio before, you'll notice there are fewer navigation menus on the left side of the screen to sift through when working with a project in the Azure AI Foundry portal. Rest assured, all of your assets from Azure AI Studio are available in the Azure AI Foundry portal, though they may have been reorganized. Learn more. \n Enhanced Model Catalog   \n The model catalog in Azure AI Foundry has a new look, simplifying model exploration and discovery. Now users can find the latest models, quickly locate model information - such as training data and supported data types, and compare models using benchmarks on public data or evaluations using their own private data.   \n Model benchmarks are now built directly into the model catalog for easier access and navigation. Developers can quickly select and compare models using detailed benchmarks for cost, latency, and throughput. After comparing models and narrowing their selection based on public data, developers can evaluate how each model performs on their own data for their unique scenario. Azure AI Foundry provides a robust set of pre-built evaluations for quality and safety, plus tools to build custom evaluations. \n \n \n These updates to the model catalog help provide valuable insight into the tradeoffs between model quality, safety, and performance, so developers can select the right base model(s) for their application quickly and with confidence.   \n According to Azure AI Foundry customer, Mars,  \n “The Azure AI model catalog provides access to a wide range of pre-built models such as Mistral to help restructure data and enhance our accuracy. We know it’s accurate because nothing goes into our production systems without being validated and signed off by radiologists.\" - Mark Parkinson, Mars Senior Director of AI Development     \n Migrated Azure OpenAI Studio Features   \n We are thrilled to announce that Azure OpenAI Studio is now merged into Azure AI Foundry portal, enabling Azure OpenAI Service customers access to more models and tools.   \n A dedicated space within Azure AI Foundry supports developers that prefer to build AI apps and APIs only using Azure OpenAI Service models for various applications. However, we recommend using an AI project to leverage a wide range of AI models, functionalities, and tools when designing, customizing, and managing AI solutions. \n \n \n If you've been using Azure OpenAI Studio, all of your work, such as your deployments, content filters, batch jobs, and fine-tuned models are still available through Azure AI Foundry.  Learn more .   \n Speech & Language Integration   \n We are excited to unveil new playgrounds in Azure AI Foundry portal, designed to enhance your experience with Azure AI Speech and Azure AI Language. These playgrounds provide a hands-on environment where you can explore and integrate powerful features like real-time speech-to-text and translation into your AI applications, in addition to other AI services.   \n One standout feature we are enabling is the ability to create custom speech models through our fine-tuning experience. This allows you to achieve better quality results tailored to your specific needs.   \n \n In addition to these updates, users can now easily discover Speech and Language services within the model catalog and begin building with them from the Models + Endpoints section. Learn more .   \n New Management Center   \n At different stages of AI development, IT admins and other users will need to complete day-to-day administrative tasks but may prefer to do them all in one place. The new management center provides cross-functional teams with simplified, centralized management and governance within Azure AI Foundry portal. Users can monitor resource utilization and compliance across multiple hubs and Azure subscriptions, assign roles, and manage users and quota. Additionally, the management center provides convenient links to Azure Portal for IT Administrators seeking more advanced, granular controls - such as network configurations.   \n \n \n By bringing essential subscription information behind one pane of glass, the management center in Azure AI Foundry saves development teams time and supports easier resource management, security, and compliance workflows across the AI development lifecycle. Learn more .   \n Improved Accessibility   \n Our team has prioritized accessibility for the Azure AI Foundry portal. This is key for a platform that supports innovation at scale. To support accessibility, we worked with Fable and EY to gather feedback from developers with vision and mobility disabilities and neurodiverse abilities to improve our platform experience.   \n “Microsoft products will maximize the power of thinking differently and being different.” - Hiren Shukla, EY Global Neurodiversity and Inclusive Value Leader   \n The collaboration with EY was a multi-month effort resulting in an improved notification system. The updates reduce disruption by grouping notifications and deployment errors, thereby minimizing cognitive overload. We believe these updates will benefit focus and productivity for all Azure AI Foundry users, not just those who are neurodivergent. Read the story.  \n \n Improved Documentation Access with the Help Pane   \n As part of simplifying navigation and improving access to important documentation when needed, we’ve brought a new help pane to all ai.azure.com screens. Developers can use the help pane to access enhanced documentation and tutorials that assist with learning how to use specific features. This documentation supports the discovery, development, deployment, and optimization of AI apps and agents using the Azure AI Foundry portal and SDK.   \n \n How Customers are Innovating with Azure AI Foundry   \n More than 60,000 customers around the world use Azure AI to develop and scale their AI innovations. Including, PIMCO, BMW, NBA, and ABB.   \n PIMCO boosts client service with an AI-powered search platform built on Azure AI   \n To help associates find relevant information faster, PIMCO built an enterprise tool, named ChatGWM , using Azure AI.  ChatGWM is a secure, RAG-based application that searches across PIMCO-approved structured and unstructured data sources to deliver fast, relevant information to its teams.   \n “We loved the completeness of vision Microsoft has shown with AI, including security and compliance. Azure AI Foundry has allowed us to spend time building solutions instead of building AI plumbing.” - Sanket Bafna, PIMCO Senior Vice President, Head, Client Data Intelligence and Sales Technology   \n BMW Group innovates with Azure for 10 times more efficient data delivery   \n BMW Group  used Microsoft Azure and Azure AI Foundry to create a mobile data recorder (MDR) solution, placing an IoT device in each development car to transmit data over a cellular connection to an Azure cloud platform, where Azure AI Foundry solutions facilitate efficient data analysis.   \n “Azure AI Foundry works smoothly, significantly lowers the entry barrier, and will open up a much wider range of applications.” - Sebastian Heinz, BMW Group MDR Co-Creator   \n NBA transforms basketball fandom with Azure OpenAI Service giving game insights   \n Focused on its fans, the NBA began exploring new technologies to enhance the fan experience, wanting to harness data to provide insights behind all the great moments in every game.   \n “By harnessing the computational power of Azure, NBA Insights delivers detailed analysis for every aspect of the game. We’re taking the experience even further by integrating historical context and real-time sources.” - Ian Allen, NBA Senior Software Engineer, AI   \n ABB transforms manufacturing, making industrial-sector leaner and cleaner with analytics via Azure OpenAI Service   \n ABB customers using Genix Copilot can see up to 35% savings in operations and maintenance, and up to 20% improvement across energy and emission optimization. ABB sees about 80% decrease in service calls with Genix Copilot self-service.   \n “We made a strategic decision to collaborate with Microsoft to use generative AI to solve some of the most complex problems in the industrial landscape. Microsoft brings the technology expertise, and we bring the industrial application. Together, we are transforming the industry.” - Rajesh Ramachandran, ABB Global Chief Digital Officer for Process Automation   \n Are You Ready to Create the Future?   \n We are pleased to incorporate these enhancements into Azure AI Foundry, and we will continue to invest and evolve to offer enhanced user experiences, streamlined navigation, and powerful tools for developers, IT managers, and technical decision-makers. We are committed to providing you with the best tools to achieve your goals and drive your projects to success. And we always look forward to receiving your feedback.   \n \n Explore Azure AI Foundry   \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 \n *Deloitte, State of Generative AI in the Enterprise Quarter three report, August, 2024 ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"13198","kudosSumWeight":2,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LVJxQVkzag?revision=24\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUExNEhlag?revision=24\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDM","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LWVzNDhaZA?revision=24\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDQ","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjk1ODU5LUdSSDh6WA?revision=24\"}"}}],"totalCount":4,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3lvdXR1LmJlL2pWR01Hd1I5d3hNLzE3MzE5NjM0NjkwNjF8MHwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://youtu.be/jVGMGwR9wxM/1731963469061","thumbnail":"https://i.ytimg.com/vi/jVGMGwR9wxM/hqdefault.jpg","uploading":false,"height":240,"width":320,"title":null},"videoAssociationType":"INLINE_BODY"}},{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUhfTkUzcnUyaUZJJnQvMTczMTk4OTU4Mjg3MHwxfDI1OzI1fHw","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=H_NE3ru2iFI&t/1731989582870","thumbnail":"https://i.ytimg.com/vi/H_NE3ru2iFI/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/bS00Mjk1ODU5LVJxQVkzag?revision=24"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4289510":{"__typename":"Conversation","id":"conversation:4289510","topic":{"__typename":"BlogTopicMessage","uid":4289510},"lastPostingActivityTime":"2024-11-11T12:02:57.354-08:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjg5NTEwLVBLaVhxWA?revision=8\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjg5NTEwLVBLaVhxWA?revision=8","title":"The Future of AI.png","associationType":"COVER","width":641,"height":644,"altText":""},"BlogTopicMessage:message:4289510":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Generative AI for...Time Series Forecasting?!? A Look at Nixtla TimeGEN-1","conversation":{"__ref":"Conversation:conversation:4289510"},"id":"message:4289510","revisionNum":8,"uid":4289510,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1342559"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":"","introduction":"","metrics":{"__typename":"MessageMetrics","views":3316},"postTime":"2024-11-11T09:00:00.028-08:00","lastPublishTime":"2024-11-11T12:02:57.354-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" Have you ever wondered how meteorologists predict tomorrow's weather, or how businesses anticipate future sales? These predictions rely on analyzing patterns over time, known as time series forecasts. With advancements in artificial intelligence, forecasting the future has become more accurate and accessible than ever before. \n Understanding Time Series Forecasting \n Time series data is a collection of observations recorded at specific time intervals. Examples include daily temperatures, monthly sales figures, or hourly website visitors. By examining this data, we can identify trends and patterns that help us predict future events. Forecasting involves using mathematical models to analyze past data and make informed guesses about what comes next. \n \n Traditional Forecasting Methods: ARIMA and Prophet \n Two of the most popular traditional methods for doing time series forecasting are ARIMA and Prophet. \n ARIMA, which stands for AutoRegressive Integrated Moving Average, predicts future values based on past data. It involves making the data stationary by removing trends and seasonal effects, then applying statistical techniques. However, ARIMA requires manual setup of parameters like trends and seasonality, which can be complex and time-consuming. It's best suited for simple, one-variable data with minimal seasonal changes. \n Prophet, a forecasting tool developed by Facebook (now Meta), automatically detects trends, seasonality, and holiday effects in the data, making it more user-friendly than ARIMA. Prophet works well with data that has strong seasonal patterns and doesn't need as much historical data. However, it may struggle with more complex patterns or irregular time intervals. \n Introducing Nixtla TimeGEN-1: A New Era in Forecasting \n Nixtla TimeGEN-1 represents a significant advancement in time series forecasting. Unlike traditional models, TimeGEN-1 is a generative pretrained transformer model, much like the GPT models, but rather than working with language, it's specifically designed for time series data. It has been trained on over 100 billion data points from various fields such as finance, weather, energy, and web data. This extensive training allows TimeGEN-1 to handle a wide range of data types and patterns. \n One of the standout features of TimeGEN-1 is its ability to perform zero-shot inference. This means it can make accurate predictions on new datasets without needing additional training. It can also be fine-tuned on specific datasets for even better accuracy. TimeGEN-1 handles irregular data effortlessly, working with missing timestamps or uneven intervals. Importantly, it doesn't require users to manually specify trends or seasonal components, making it accessible even to those without deep technical expertise. \n The transformer architecture of TimeGEN-1 enables it to capture complex patterns in data that traditional models might miss. It brings the power of advanced machine learning to time series forecasting – and related tasks like anomaly detection – making the process more efficient and accurate. \n Real-World Comparison: TimeGEN-1 vs. ARIMA and Prophet \n To test these claims, I decided to run an experiment to compare the performance of TimeGEN-1 with ARIMA and Prophet. I used a retail dataset where the actual future values were known, which in data science parlance is known as a \"backtest.\" In my dataset, ARIMA struggled to predict future values accurately due to its limitations with complex patterns. Prophet performed better than ARIMA by automatically detecting some patterns, but its predictions still didn't quite hit the mark. TimeGEN-1, however, delivered predictions that closely matched the actual data, significantly outperforming both ARIMA and Prophet. \n The accuracy of these models was measured using metrics like Mean Absolute Error (MAE) and Root Mean Squared Error (RMSE). TimeGEN-1 had the lowest MAE and RMSE, indicating higher accuracy. This experiment highlights how TimeGEN-1 can provide more precise forecasts, even when compared to established methods. \n The Team Behind TimeGEN-1: Nixtla \n Nixtla is a company dedicated to making advanced predictive insights accessible to everyone. It was founded by a team of experts passionate about simplifying forecasting processes while maintaining high accuracy and efficiency. The team includes Max Mergenthaler Canseco, CEO; Azul Garza, CTO; and Cristian Challu, CSO, experts in the forecasting field with extensive experience in machine learning and software engineering.< \n Their collective goal is to simplify the forecasting process, making powerful tools available to users with varying levels of technical expertise. By integrating TimeGEN-1 into easy-to-use APIs, they ensure that businesses and individuals can leverage advanced forecasting without needing deep machine learning knowledge. \n The Azure AI Model Catalog \n TimeGEN-1 is one of the 1700+ models that are now available in the Azure AI model catalog. The model catalog is continuously updated with the latest advancements, like TimeGEN-1, ensuring that users have access to the most cutting-edge tools. Its user-friendly interface makes it easy to navigate and deploy models, and Azure's cloud infrastructure provides the scalability needed to run these models, allowing users to handle large datasets and complex computations efficiently. In the following video, I show how Data Scientists and Developers can build time series forecasting models using data stored in Microsoft Fabric paired with the Nixtla TimeGEN-1 model. \n The introduction of Nixtla TimeGEN-1 marks a transformative moment in time series forecasting. Whether you're a data scientist, a business owner, or a student interested in AI, TimeGEN-1 opens up new possibilities for understanding and predicting future trends. Explore TimeGEN-1 and thousands of other models through the Azure AI model catalog today! ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"5908","kudosSumWeight":3,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00Mjg5NTEwLVBLaVhxWA?revision=8\"}"}}],"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/bS00Mjg5NTEwLVBLaVhxWA?revision=8"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4270291":{"__typename":"Conversation","id":"conversation:4270291","topic":{"__typename":"BlogTopicMessage","uid":4270291},"lastPostingActivityTime":"2024-11-06T15:03:45.059-08:00","solved":false},"User:user:2030079":{"__typename":"User","uid":2030079,"login":"AnjaleePatel","registrationData":{"__typename":"RegistrationData","status":null},"deleted":false,"avatar":{"__typename":"UserAvatar","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/dS0yMDMwMDc5LTU3MDA4NGk2QkI0Qjc4Qjc5ODQ3QTU4"},"id":"user:2030079"},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLTYyOTAwOWk5NzA1RDBERjlDNkE5MkFE?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLTYyOTAwOWk5NzA1RDBERjlDNkE5MkFE?revision=5","title":"IMG_0541.JPG","associationType":"BODY","width":6000,"height":4000,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLU5wN2hRWQ?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLU5wN2hRWQ?revision=5","title":"IMG_0541.JPG","associationType":"COVER","width":6000,"height":4000,"altText":""},"BlogTopicMessage:message:4270291":{"__typename":"BlogTopicMessage","subject":"3 Innovative Ways Developers Are Building with AI","conversation":{"__ref":"Conversation:conversation:4270291"},"id":"message:4270291","revisionNum":5,"uid":4270291,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:2030079"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" From enhancing education with personalized learning experiences to redefining accessibility and maximizing existing data, developers are leveraging AI to address real-world challenges responsibly. Get inspired by these projects and learn how you can start your own AI journey today.  ","introduction":"","metrics":{"__typename":"MessageMetrics","views":1189},"postTime":"2024-10-15T06:00:00.033-07:00","lastPublishTime":"2024-11-06T15:03:45.059-08:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" AI is reshaping industries and unlocking new opportunities for startups and enterprises to grow. Azure AI is at the forefront of this transformation, offering a comprehensive suite of tools that empowers you to build, manage, and deploy AI applications at scale. Programs like Microsoft for Startups Founders Hub which include access to Azure AI models and tools enable founders to turn innovative ideas into reality. \n This past April, Microsoft hosted a multimodal themed Generative AI Hackathon on Devpost, where developers showcased their projects built with Azure AI. Participants of the hackathon used Azure AI to create innovative solutions across education, accessibility, fashion, media, and more. There were a wide range of use cases addressing real-world challenges responsibly: \n 1. AI as a Catalyst for Enhanced Learning \n Project: ChatEDU  |  Industry: Education \n ChatEDU exemplifies how AI can transform education by creating personalized, interactive learning experiences. The project moves beyond simple automation, offering a dynamic copilot that evolves with students, fostering curiosity and skill-building. \n “Choosing Azure AI was a game-changer for us. Its robust suite of tools enabled us to transform diverse educational data materials into an intuitive and interconnected product. This has been pivotal in creating ChatEDU, a personalized, multimodal educational tool that enhances student learning experiences” – Jason Hedman | Founder | ChatEDU  \n The solution uses Azure AI Services like Azure Document Intelligence to understand and process knowledge files uploaded by students. This information from multiple data sources (plain text, images, videos, PDFs) is stored in Azure Cosmos DB. These files are then analyzed to extract topics and connections to create an interactive learning pathway that students can utilize to work towards learning objectives. \n 2. AI for Accessibility and Inclusion \n Projects: GARVIS, Gino.AI  |  Industries: Technology, Media \n GARVIS redefines accessibility by empowering users to navigate visual tasks without relying on verbal descriptions. The app utilizes models from Azure OpenAI Service to detect and analyze objects and environments, replacing text-based instructions with intuitive visual demonstrations. Using the Unity Engine paired with Microsoft Copilot to enhance coding productivity, this application makes advanced mixed reality assistants available to all. A complex space simplified with the ease of using multiple Microsoft products together.   \n Another example of seamless integration is Gino.AI, which makes information accessible and consumable in a way that caters to your learning style. Azure AI Search is used to index and efficiently query information from the ‘Mind Base’ knowledge space, and with Azure AI Vision, the system can extract text from images, enriching the content available for users. To ensure responsible AI use, Azure AI Content Safety filters out any harmful material from chatbot responses, summaries, podcast scripts, and other sources. \n 3. Leveraging AI to Maximize Existing Data \n Projects: FarmFundAI, Winewiz, Docsy, Therapute  |  Industries: Agriculture, Retail, Healthcare \n FarmFundAI demonstrates how AI can unlock new value from existing information available, helping farmers secure funding by showcasing sustainability and crop yield potential. By analyzing satellite and drone imagery via an app built with Azure AI Studio and Azure Functions, users can uncover insights like crop health that are crucial for investment decision-making. \n This concept of utilizing existing publicly available data is also shown through Winewiz which simplifies the process of selecting and gifting wines by offering AI-powered conversational consultations and gift card creation. Leveraging Azure AI Speech, it provides interactive communication through the Speech-to-Text service, enhancing the user experience and making the selection process intuitive. Similarly, Docsy saves time for healthcare professionals and enhances the accuracy of patient records via audio data that is processed through Azure AI Speech for transcription. Within the same healthcare realm, Therapute is a physiotherapy platform that uses Azure Machine Learning to offer personalized rehabilitation guidance 24/7. \n Building Multimodal and Cross-Domain AI Applications \n As shown in the use cases above, Azure AI is versatile, supporting multimodality across industries and domains that require diverse data types, such as text, speech, images, and video. Leveraging the Azure AI model catalog is one way to make the most of this flexibility, where you can select the right AI models for specific needs and constraints such as price, performance, and customization. Multimodal models like GPT-4o via Azure OpenAI Service and Microsoft’s very own Phi-3-vision are also part of the model catalog that you can try out today. \n It's exciting to see that developers are utilizing Azure AI in conjunction with other Microsoft products. Talk to Listen is an example of this, where developers used Azure AI with GitHub Copilot to create a high-quality app bringing characters to life, all while saving time. We are thrilled to see what developers will continue to build and innovate. \n   \n Feeling inspired to start your own project? Start your journey by exploring helpful tutorials and resources:   \n Learn   \n \n Get started with our Generative AI for Beginners course  \n \n \n Get started with Phi-3 using our cookbook  \n \n \n Learn about generative AI use cases on Azure  \n \n \n Learn how to use Azure AI Studio on Microsoft Learn  \n \n Connect  \n \n Join a passionate community of builders on our Azure AI Discord  \n \n \n Learn, Connect, and Build with us on Microsoft Reactor  \n \n \n Have a startup? Sign up for Microsoft for Startups for exclusive access to mentors, Azure credits, and more.  \n \n Build  \n \n Build with Azure AI Studio  \n \n \n Explore and experiment with Azure AI in GitHub Models  \n \n \n Get started faster with templates  \n \n   ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"6159","kudosSumWeight":3,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLTYyOTAwOWk5NzA1RDBERjlDNkE5MkFE?revision=5\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLU5wN2hRWQ?revision=5\"}"}}],"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":{"__typename":"UploadedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjcwMjkxLU5wN2hRWQ?revision=5"},"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4257104":{"__typename":"Conversation","id":"conversation:4257104","topic":{"__typename":"BlogTopicMessage","uid":4257104},"lastPostingActivityTime":"2024-10-16T09:43:07.013-07:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=4\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=4","title":"The Future of AI Blog.jpg","associationType":"TEASER","width":1024,"height":1024,"altText":null},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYyNDczOWlGMENBMEM2RTczMzc1QzY2?revision=4\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYyNDczOWlGMENBMEM2RTczMzc1QzY2?revision=4","title":"Azure AI - Multi-agent example architecture.png","associationType":"BODY","width":3542,"height":2000,"altText":null},"BlogTopicMessage:message:4257104":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Single Agent or Multi-Agent - How Should I Choose?","conversation":{"__ref":"Conversation:conversation:4257104"},"id":"message:4257104","revisionNum":4,"uid":4257104,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1342559"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" \n  Image generated by Microsoft Designer ","introduction":"","metrics":{"__typename":"MessageMetrics","views":6728},"postTime":"2024-10-01T09:00:00.069-07:00","lastPublishTime":"2024-10-01T09:00:00.069-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":" \n In my last post I explored the virtues of a multi-agent system. The \"debating agent\" pattern (or, as some say, the \"maker-checker\" pattern) is a fascinating solution to the errors that can arise from a single LLM call. Multi-agents can also use multiple models, allowing for specialized or lower-cost models for some tasks. \n   \n \n \n With multiple agents, though, comes a fair bit more complexity. There are numerous ways that multiple agents can interact. My Questionnaire Multiagent has a simple, sequential agent pattern - the Question Answerer always goes first, then the Answer Checker, then the Link Checker and then the Manager. \n \n   \n \n \n Even with this simple interaction model, though, I've had to work through numerous eventualities; for example, I've had to handle the case where they have an infinitely long argument. And I've had to laboriously prompt engineer all four of them. As the number of agents in your multi-agent system grows, the burden of configuring and maintaining them grows proportionally. \n   \n \n \n Before You Try Many Agents, Try Just One \n While multi-agent systems garner a lot of attention, single agent systems continue to grow in power. Assistants, now available in Azure OpenAI Service, are a prime example of this. \n   \n \n \n \n \n I've recently been experimenting with the use of assistants for both structured and unstructured data, and I've found them to be remarkably powerful on their own. They act sequentially, which makes them easier to debug. They have built-in tools like Code Interpreter, which both writes and executes code, and File Search, which grounds the agent to data. See an example in my 90-second video:  \n   \n \n   \n \n \n More tools are coming for them, including the ability to call Azure Logic Apps, browse the web, and automatically query various sources of structured data like Microsoft Fabric. \n   \n They're comparatively easy to set up, and they're production-tested among our customers and in OpenAI's ChatGPT. They certainly still require data grounding, prompt engineering, bulk evaluation, and care and feeding - but you really can get a lot out of a single agent setup. \n \n \n \n   \n So, before you try many AI agents to solve your problem, see if a single agent can get the job done. \n   \n For more about AI agents, \n \n Begin exploring and building your own agents using Azure AI Studio \n Review the Azure OpenAI Assistants quick-start documentation \n Fetch the GitHub repo Questionnaire Multiagent  \n \n \n ","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"2550","kudosSumWeight":2,"repliesCount":2,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=4\"}"}},{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDI","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjU3MTA0LTYyNDczOWlGMENBMEM2RTczMzc1QzY2?revision=4\"}"}}],"totalCount":2,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3lvdXR1LmJlLzcyZzVYczBCSDRvP3NpPVNCS1BxeWhyQXBQeHoyRXB8MHwyNTsyNXx8","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://youtu.be/72g5Xs0BH4o?si=SBKPqyhrApPxz2Ep","thumbnail":"https://i.ytimg.com/vi/72g5Xs0BH4o/hqdefault.jpg","uploading":false,"height":338,"width":600,"title":null},"videoAssociationType":"INLINE_BODY"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"coverImage":null,"coverImageProperties":{"__typename":"CoverImageProperties","style":"STANDARD","titlePosition":"BOTTOM","altText":""}},"Conversation:conversation:4266799":{"__typename":"Conversation","id":"conversation:4266799","topic":{"__typename":"BlogTopicMessage","uid":4266799},"lastPostingActivityTime":"2024-10-14T09:16:47.787-07:00","solved":false},"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjY2Nzk5LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=5\"}":{"__typename":"AssociatedImage","url":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjY2Nzk5LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=5","title":"The Future of AI Blog.jpg","associationType":"TEASER","width":1024,"height":1024,"altText":null},"BlogTopicMessage:message:4266799":{"__typename":"BlogTopicMessage","subject":"The Future of AI: Oh! One! Applying o1 Models to Business Data","conversation":{"__ref":"Conversation:conversation:4266799"},"id":"message:4266799","revisionNum":5,"uid":4266799,"depth":0,"board":{"__ref":"Blog:board:AIPlatformBlog"},"author":{"__ref":"User:user:1342559"},"teaser@stripHtml({\"removeProcessingText\":true,\"truncateLength\":-1})":" \n  Image generated by Microsoft Designer ","introduction":"","metrics":{"__typename":"MessageMetrics","views":4377},"postTime":"2024-10-14T09:00:00.023-07:00","lastPublishTime":"2024-10-14T09:16:47.787-07:00","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})":"\n In mid-September 2024, OpenAI introduced a groundbreaking family of models known as o1, often referred to as \"Ph.D. models\" due to their advanced capabilities. Now accessible through Azure OpenAI Service, o1 represents a significant leap in artificial intelligence, particularly in reasoning and problem-solving tasks. We've seen the o1 models solve problems like counting the number of R's in the word \"strawberry\" and logic problems - but what does this mean for businesses? \n   \n One of the most remarkable features of o1 is its ability to do math and perform complex data analysis. Unlike previous models, o1 can calculate aggregate statistics, detect correlations across multiple datasets, and provide deep insights that were previously unattainable. To test its mettle, I decided to run the largest of the o1 models, o1-preview, through its paces, using datasets similar to those it might see in business scenarios. Note that the data used here is entirely synthetic, but it is patterned after real datasets that business might\n \n use. \n   \n \n \n   \n \n \n First, I tried a retail scenario. I took some example sales and staffing data, the kind a real store might have over a month and fed it into o1. I wanted to see if it could help figure out what's driving sales and how staffing levels impact performance. Well, o1 didn't disappoint. It crunched the numbers and pointed out that our sales were lower on weekends compared to other days. The funny thing is, the data didn't label which days were weekends, but o1 figured it out anyway. It found the correlations between the sales and staffing datasets, even though the only obvious commonality between them was the time period they covered. It suggested that maybe having fewer staff scheduled over the weekend would lead to lower sales, and even recommended upping the weekend staff or adding self-checkout kiosks. It felt like having a seasoned retail analyst giving me personalized advice. \n   \n Next up, I wanted to see how o1 handled financial data. I used a fictional company's financial statements - structured just like real income statements, balance sheets, and cash flow statements - and asked o1 to create a sell-side research report. The results were impressive. It put together a detailed report, complete with an investment thesis and justification. It calculated growth rates, analyzed profit margins, and looked into financial ratios like price-to-earnings ratios. It justified its price target with solid analysis. Clearly, financial analysts can use this tool to make their jobs easier. \n   \n Then I decided to try something in the entertainment sector. I gave o1 some sample ticketing data from a fictional event - just like the kind of data a real concert might generate. I wanted to find out who spent the most on tickets, and who bought the highest quantity. o1 not only identified the top spenders but also analyzed their buying habits and provided suggestions on how to encourage more high-volume ticket sales in the future. It was pretty cool to see how it turned raw numbers into real marketing insights. Even though I was using fictional datasets, o1 showed me its potential to make a real impact on businesses. It can help make better decisions by uncovering deeper insights, save time by handling complex tasks, spark innovation with its creative thinking, and help understand customers better to improve engagement. \n   \n Lastly, just for fun, I tested o1's coding abilities. I asked o1 to create a simple HTML page with a playable Space Invaders game written entirely in JavaScript. To my surprise, it generated all the code I needed. When I ran it in my browser, there was the game, fully functional and ready to play. It worked on the first try! It was like magic, and I didn't have to write a single line of code myself. \n   \n o1 has proven to be remarkably good at these sorts of technical tasks, but it turns out that its reasoning ability also extends to the creative realm. In fact, I fed it the transcript of the YouTube video I had created and prompted it to write this blog post (at least all the paragraphs above this one) - and it did! It took me four more little prompts to adjust the output to the tone I was looking for, but in just a few minutes, I had what I needed. So, as writing this blog post is one of my own business activities, the o1 model has now made a genuine impact on my business. \n   \n \n \n Why not get started? \n \n Read the blog about o1 on Azure OpenAI Service \n Begin customizing your own agents with o1 using Azure AI Studio \n Review the Azure OpenAI Assistants quick-start documentation \n \n \n \n \n \n","body@stripHtml({\"removeProcessingText\":true,\"removeSpoilerMarkup\":true,\"removeTocMarkup\":true,\"truncateLength\":-1})@stringLength":"4687","kudosSumWeight":4,"repliesCount":0,"readOnly":false,"images":{"__typename":"AssociatedImageConnection","edges":[{"__typename":"AssociatedImageEdge","cursor":"MjUuMXwyLjF8b3wyNXxfTlZffDE","node":{"__ref":"AssociatedImage:{\"url\":\"https://techcommunity.microsoft.com/t5/s/gxcuf89792/images/bS00MjY2Nzk5LTYxNDUwM2k5Njg1QjMyQzM3MTBDNThD?revision=5\"}"}}],"totalCount":1,"pageInfo":{"__typename":"PageInfo","hasNextPage":false,"endCursor":null,"hasPreviousPage":false,"startCursor":null}},"videos":{"__typename":"VideoConnection","edges":[{"__typename":"VideoEdge","cursor":"MHxodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PUhiU1JBQVo3MXQ4fDB8MjU7MjV8fA","node":{"__typename":"AssociatedVideo","videoTag":{"__typename":"VideoTag","vid":"https://www.youtube.com/watch?v=HbSRAAZ71t8","thumbnail":"https://i.ytimg.com/vi/HbSRAAZ71t8/hqdefault.jpg","uploading":false,"height":338,"width":600,"title":null},"videoAssociationType":"INLINE_BODY"}}],"totalCount":1,"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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/Navbar-1745505309787","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarHamburgerDropdown-1745505309787","value":{"hamburgerLabel":"Side Menu"},"localOverride":false},"CachedAsset:text:en_US-components/community/BrandLogo-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/BrandLogo-1745505309787","value":{"logoAlt":"Khoros","themeLogoAlt":"Brand Logo"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarTextLinks-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarTextLinks-1745505309787","value":{"more":"More"},"localOverride":false},"CachedAsset:text:en_US-components/authentication/AuthenticationLink-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/authentication/AuthenticationLink-1745505309787","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/nodes/NodeLink-1745505309787","value":{"place":"Place {name}"},"localOverride":false},"CachedAsset:text:en_US-components/tags/TagSubscriptionAction-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/tags/TagSubscriptionAction-1745505309787","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-components/messages/MessageListTabs-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageListTabs-1745505309787","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-shared/client/components/common/QueryHandler-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/QueryHandler-1745505309787","value":{"title":"Query Handler"},"localOverride":false},"CachedAsset:text:en_US-components/community/NavbarDropdownToggle-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/community/NavbarDropdownToggle-1745505309787","value":{"ariaLabelClosed":"Press the down arrow to open the menu"},"localOverride":false},"CachedAsset:text:en_US-shared/client/components/common/OverflowNav-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/OverflowNav-1745505309787","value":{"toggleText":"More"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageView/MessageViewInline-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageView/MessageViewInline-1745505309787","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/Pager/PagerLoadMore-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/common/Pager/PagerLoadMore-1745505309787","value":{"loadMore":"Show More"},"localOverride":false},"CachedAsset:text:en_US-components/users/UserLink-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/users/UserLink-1745505309787","value":{"authorName":"View Profile: {author}","anonymous":"Anonymous"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageSubject-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageSubject-1745505309787","value":{"noSubject":"(no subject)"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageTime-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageTime-1745505309787","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/nodes/NodeIcon-1745505309787","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageUnreadCount-1745505309787","value":{"unread":"{count} unread","comments":"{count, plural, one { unread comment} other{ unread comments}}"},"localOverride":false},"CachedAsset:text:en_US-components/messages/MessageViewCount-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageViewCount-1745505309787","value":{"textTitle":"{count, plural,one {View} other{Views}}","views":"{count, plural, one{View} other{Views}}"},"localOverride":false},"CachedAsset:text:en_US-components/kudos/KudosCount-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/kudos/KudosCount-1745505309787","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-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageRepliesCount-1745505309787","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-components/messages/MessageBody-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-components/messages/MessageBody-1745505309787","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-shared/client/components/users/UserAvatar-1745505309787":{"__typename":"CachedAsset","id":"text:en_US-shared/client/components/users/UserAvatar-1745505309787","value":{"altText":"{login}'s avatar","altTextGeneric":"User's avatar"},"localOverride":false}}}},"page":"/tags/TagPage/TagPage","query":{"nodeId":"category:communities","tagName":"Copilot stack"},"buildId":"HEhyUrv5OXNBIbfCLaOrw","runtimeConfig":{"buildInformationVisible":false,"logLevelApp":"info","logLevelMetrics":"info","openTelemetryClientEnabled":false,"openTelemetryConfigName":"o365","openTelemetryServiceVersion":"25.1.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","../shared/client/components/common/Pager/PagerLoadMore/PagerLoadMore.tsx"],"appGip":true,"scriptLoader":[{"id":"analytics","src":"https://techcommunity.microsoft.com/t5/s/gxcuf89792/pagescripts/1730819800000/analytics.js?page.id=TagPage","strategy":"afterInteractive"}]}