Sunucu yanıtını kontrol edin

Sunucu yanıtı
NS kayıtları
Whois alanı
Yanıt başlıkları
İstek başlıkları
Ham HTML kodu
301 Moved Permanently - vrdmn.com
HTTP Status: 301
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
Location: https://www.vrdmn.com/
Content-Type: text/html; charset=UTF-8
Date: Sun, 25 May 2025 10:30:42 GMT
Expires: Sun, 25 May 2025 10:30:42 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
Content-Security-Policy: frame-ancestors 'self'
X-XSS-Protection: 1; mode=block
Server: GSE
Accept-Ranges: none
Vary: Accept-Encoding
Transfer-Encoding: chunked
content-type: text/html; charset=UTF-8
expires: Sun, 25 May 2025 10:30:42 GMT
date: Sun, 25 May 2025 10:30:42 GMT
cache-control: private, max-age=0
last-modified: Fri, 23 May 2025 01:04:00 GMT
x-content-type-options: nosniff
x-xss-protection: 1; mode=block
server: GSE
accept-ranges: none
vary: Accept-Encoding

HTTP Kodu 301 Kalıcı Olarak Taşındı

301 http kodu, istenen kaynağın kalıcı olarak yeni bir URL'ye taşındığı anlamına gelir. Gelecekteki tüm istekler yeni adresi kullanmalıdır.

Kod 301 ne zaman kullanılır?

  • Bir web sitesi alan adını değiştirirken
  • URL yapılarını değiştirirken
  • SEO için yönlendirmeleri ayarlarken

Kod 301 kullanıcı için ne anlama geliyor?

Tarayıcı kullanıcıyı otomatik olarak yeni adrese yönlendirecek ve arama motorları dizinlerini güncelleyecektir.

GET / HTTP/1.1
Host: vrdmn.com
Accept: */*
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; [email protected])
<!DOCTYPE html>
<html class='v2' dir='ltr' lang='en-GB'>
<head>
<link href='https://www.blogger.com/static/v1/widgets/3566091532-css_bundle_v2.css' rel='stylesheet' type='text/css'/>
<meta content='width=1100' name='viewport'/>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
<meta content='blogger' name='generator'/>
<link href='https://www.vrdmn.com/favicon.ico' rel='icon' type='image/x-icon'/>
<link href='https://www.vrdmn.com/' rel='canonical'/>
<link rel="alternate" type="application/atom+xml" title="Vardhaman Deshpande - Atom" href="https://www.vrdmn.com/feeds/posts/default" />
<link rel="alternate" type="application/rss+xml" title="Vardhaman Deshpande - RSS" href="https://www.vrdmn.com/feeds/posts/default?alt=rss" />
<link rel="service.post" type="application/atom+xml" title="Vardhaman Deshpande - Atom" href="https://www.blogger.com/feeds/4455058894110083658/posts/default" />
<link rel="me" href="https://www.blogger.com/profile/17919845281919756108" />
<!--Can't find substitution for tag [blog.ieCssRetrofitLinks]-->
<meta content='https://www.vrdmn.com/' property='og:url'/>
<meta content='Vardhaman Deshpande' property='og:title'/>
<meta content='Focusworks AI for Microsoft Teams - Chat with your business data &lt;a href=&quot;https://focusworks.ai/&quot;&gt;https://focusworks.ai/&lt;/a&gt;' property='og:description'/>
<title>Vardhaman Deshpande</title>
<style id='page-skin-1' type='text/css'><!--
/*
-----------------------------------------------
Blogger Template Style
Name:     Simple
Designer: Blogger
URL:      www.blogger.com
----------------------------------------------- */
/* Content
----------------------------------------------- */
body {
font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif;
color: #666666;
background: #ffffff none repeat scroll top left;
padding: 0 0 0 0;
}
html body .region-inner {
min-width: 0;
max-width: 100%;
width: auto;
}
h2 {
font-size: 22px;
}
a:link {
text-decoration:none;
color: #2288bb;
}
a:visited {
text-decoration:none;
color: #888888;
}
a:hover {
text-decoration:underline;
color: #33aaff;
}
.body-fauxcolumn-outer .fauxcolumn-inner {
background: transparent none repeat scroll top left;
_background-image: none;
}
.body-fauxcolumn-outer .cap-top {
position: absolute;
z-index: 1;
height: 400px;
width: 100%;
}
.body-fauxcolumn-outer .cap-top .cap-left {
width: 100%;
background: transparent none repeat-x scroll top left;
_background-image: none;
}
.content-outer {
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .15);
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .15);
-goog-ms-box-shadow: 0 0 0 #333333;
box-shadow: 0 0 0 rgba(0, 0, 0, .15);
margin-bottom: 1px;
}
.content-inner {
padding: 10px 40px;
}
.content-inner {
background-color: #ffffff;
}
/* Header
----------------------------------------------- */
.header-outer {
background: transparent none repeat-x scroll 0 -400px;
_background-image: none;
}
.Header h1 {
font: normal normal 40px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
color: #000000;
text-shadow: 0 0 0 rgba(0, 0, 0, .2);
}
.Header h1 a {
color: #000000;
}
.Header .description {
font-size: 18px;
color: #000000;
}
.header-inner .Header .titlewrapper {
padding: 22px 0;
}
.header-inner .Header .descriptionwrapper {
padding: 0 0;
}
/* Tabs
----------------------------------------------- */
.tabs-inner .section:first-child {
border-top: 0 solid #dddddd;
}
.tabs-inner .section:first-child ul {
margin-top: -1px;
border-top: 1px solid #dddddd;
border-left: 1px solid #dddddd;
border-right: 1px solid #dddddd;
}
.tabs-inner .widget ul {
background: transparent none repeat-x scroll 0 -800px;
_background-image: none;
border-bottom: 1px solid #dddddd;
margin-top: 0;
margin-left: -30px;
margin-right: -30px;
}
.tabs-inner .widget li a {
display: inline-block;
padding: .6em 1em;
font: normal normal 12px 'Trebuchet MS', Trebuchet, Verdana, sans-serif;
color: #000000;
border-left: 1px solid #ffffff;
border-right: 1px solid #dddddd;
}
.tabs-inner .widget li:first-child a {
border-left: none;
}
.tabs-inner .widget li.selected a, .tabs-inner .widget li a:hover {
color: #000000;
background-color: #eeeeee;
text-decoration: none;
}
/* Columns
----------------------------------------------- */
.main-outer {
border-top: 0 solid transparent;
}
.fauxcolumn-left-outer .fauxcolumn-inner {
border-right: 1px solid transparent;
}
.fauxcolumn-right-outer .fauxcolumn-inner {
border-left: 1px solid transparent;
}
/* Headings
----------------------------------------------- */
div.widget > h2,
div.widget h2.title {
margin: 0 0 1em 0;
font: normal bold 11px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
color: #000000;
}
/* Widgets
----------------------------------------------- */
.widget .zippy {
color: #999999;
text-shadow: 2px 2px 1px rgba(0, 0, 0, .1);
}
.widget .popular-posts ul {
list-style: none;
}
/* Posts
----------------------------------------------- */
h2.date-header {
font: normal bold 11px Arial, Tahoma, Helvetica, FreeSans, sans-serif;
}
.date-header span {
background-color: #bbbbbb;
color: #ffffff;
padding: 0.4em;
letter-spacing: 3px;
margin: inherit;
}
.main-inner {
padding-top: 35px;
padding-bottom: 65px;
}
.main-inner .column-center-inner {
padding: 0 0;
}
.main-inner .column-center-inner .section {
margin: 0 1em;
}
.post {
margin: 0 0 45px 0;
}
h3.post-title, .comments h4 {
font: normal normal 22px 'Trebuchet MS',Trebuchet,Verdana,sans-serif;
margin: .75em 0 0;
}
.post-body {
font-size: 110%;
line-height: 1.4;
position: relative;
}
.post-body img, .post-body .tr-caption-container, .Profile img, .Image img,
.BlogList .item-thumbnail img {
padding: 2px;
background: #ffffff;
border: 1px solid #eeeeee;
-moz-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
-webkit-box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
box-shadow: 1px 1px 5px rgba(0, 0, 0, .1);
}
.post-body img, .post-body .tr-caption-container {
padding: 5px;
}
.post-body .tr-caption-container {
color: #666666;
}
.post-body .tr-caption-container img {
padding: 0;
background: transparent;
border: none;
-moz-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
-webkit-box-shadow: 0 0 0 rgba(0, 0, 0, .1);
box-shadow: 0 0 0 rgba(0, 0, 0, .1);
}
.post-header {
margin: 0 0 1.5em;
line-height: 1.6;
font-size: 90%;
}
.post-footer {
margin: 20px -2px 0;
padding: 5px 10px;
color: #666666;
background-color: #eeeeee;
border-bottom: 1px solid #eeeeee;
line-height: 1.6;
font-size: 90%;
}
#comments .comment-author {
padding-top: 1.5em;
border-top: 1px solid transparent;
background-position: 0 1.5em;
}
#comments .comment-author:first-child {
padding-top: 0;
border-top: none;
}
.avatar-image-container {
margin: .2em 0 0;
}
#comments .avatar-image-container img {
border: 1px solid #eeeeee;
}
/* Comments
----------------------------------------------- */
.comments .comments-content .icon.blog-author {
background-repeat: no-repeat;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEgAACxIB0t1+/AAAAAd0SU1FB9sLFwMeCjjhcOMAAAD+SURBVDjLtZSvTgNBEIe/WRRnm3U8RC1neQdsm1zSBIU9VVF1FkUguQQsD9ITmD7ECZIJSE4OZo9stoVjC/zc7ky+zH9hXwVwDpTAWWLrgS3QAe8AZgaAJI5zYAmc8r0G4AHYHQKVwII8PZrZFsBFkeRCABYiMh9BRUhnSkPTNCtVXYXURi1FpBDgArj8QU1eVXUzfnjv7yP7kwu1mYrkWlU33vs1QNu2qU8pwN0UpKoqokjWwCztrMuBhEhmh8bD5UDqur75asbcX0BGUB9/HAMB+r32hznJgXy2v0sGLBcyAJ1EK3LFcbo1s91JeLwAbwGYu7TP/3ZGfnXYPgAVNngtqatUNgAAAABJRU5ErkJggg==);
}
.comments .comments-content .loadmore a {
border-top: 1px solid #999999;
border-bottom: 1px solid #999999;
}
.comments .comment-thread.inline-thread {
background-color: #eeeeee;
}
.comments .continue {
border-top: 2px solid #999999;
}
/* Accents
---------------------------------------------- */
.section-columns td.columns-cell {
border-left: 1px solid transparent;
}
.blog-pager {
background: transparent url(//www.blogblog.com/1kt/simple/paging_dot.png) repeat-x scroll top center;
}
.blog-pager-older-link, .home-link,
.blog-pager-newer-link {
background-color: #ffffff;
padding: 5px;
}
.footer-outer {
border-top: 1px dashed #bbbbbb;
}
/* Mobile
----------------------------------------------- */
body.mobile  {
background-size: auto;
}
.mobile .body-fauxcolumn-outer {
background: transparent none repeat scroll top left;
}
.mobile .body-fauxcolumn-outer .cap-top {
background-size: 100% auto;
}
.mobile .content-outer {
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .15);
box-shadow: 0 0 3px rgba(0, 0, 0, .15);
}
.mobile .tabs-inner .widget ul {
margin-left: 0;
margin-right: 0;
}
.mobile .post {
margin: 0;
}
.mobile .main-inner .column-center-inner .section {
margin: 0;
}
.mobile .date-header span {
padding: 0.1em 10px;
margin: 0 -10px;
}
.mobile h3.post-title {
margin: 0;
}
.mobile .blog-pager {
background: transparent none no-repeat scroll top center;
}
.mobile .footer-outer {
border-top: none;
}
.mobile .main-inner, .mobile .footer-inner {
background-color: #ffffff;
}
.mobile-index-contents {
color: #666666;
}
.mobile-link-button {
background-color: #2288bb;
}
.mobile-link-button a:link, .mobile-link-button a:visited {
color: #ffffff;
}
.mobile .tabs-inner .section:first-child {
border-top: none;
}
.mobile .tabs-inner .PageList .widget-content {
background-color: #eeeeee;
color: #000000;
border-top: 1px solid #dddddd;
border-bottom: 1px solid #dddddd;
}
.mobile .tabs-inner .PageList .widget-content .pagelist-arrow {
border-left: 1px solid #dddddd;
}

--></style>
<style id='template-skin-1' type='text/css'><!--
body {
min-width: 1420px;
}
.content-outer, .content-fauxcolumn-outer, .region-inner {
min-width: 1420px;
max-width: 1420px;
_width: 1420px;
}
.main-inner .columns {
padding-left: 0;
padding-right: 400px;
}
.main-inner .fauxcolumn-center-outer {
left: 0;
right: 400px;
/* IE6 does not respect left and right together */
_width: expression(this.parentNode.offsetWidth -
parseInt("0") -
parseInt("400px") + 'px');
}
.main-inner .fauxcolumn-left-outer {
width: 0;
}
.main-inner .fauxcolumn-right-outer {
width: 400px;
}
.main-inner .column-left-outer {
width: 0;
right: 100%;
margin-left: -0;
}
.main-inner .column-right-outer {
width: 400px;
margin-right: -400px;
}
#layout {
min-width: 0;
}
#layout .content-outer {
min-width: 0;
width: 800px;
}
#layout .region-inner {
min-width: 0;
width: auto;
}
body#layout div.add_widget {
padding: 8px;
}
body#layout div.add_widget a {
margin-left: 32px;
}
--></style>
<script type='text/javascript'>
        (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
        (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
        m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
        })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
        ga('create', 'UA-116352066-1', 'auto', 'blogger');
        ga('blogger.send', 'pageview');
      </script>
<link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=4455058894110083658&amp;zx=6c0d5ae6-5d89-4746-a536-d7acad412382' media='none' onload='if(media!=&#39;all&#39;)media=&#39;all&#39;' rel='stylesheet'/><noscript><link href='https://www.blogger.com/dyn-css/authorization.css?targetBlogID=4455058894110083658&amp;zx=6c0d5ae6-5d89-4746-a536-d7acad412382' rel='stylesheet'/></noscript>
<meta name='google-adsense-platform-account' content='ca-host-pub-1556223355139109'/>
<meta name='google-adsense-platform-domain' content='blogspot.com'/>

<!-- data-ad-client=ca-pub-5904494154346417 -->

<script type="text/javascript" language="javascript">
  // Supply ads personalization default for EEA readers
  // See https://www.blogger.com/go/adspersonalization
  adsbygoogle = window.adsbygoogle || [];
  if (typeof adsbygoogle.requestNonPersonalizedAds === 'undefined') {
    adsbygoogle.requestNonPersonalizedAds = 1;
  }
</script>


</head>
<body class='loading variant-simplysimple'>
<div class='navbar section' id='navbar' name='Navbar'><div class='widget Navbar' data-version='1' id='Navbar1'><script type="text/javascript">
    function setAttributeOnload(object, attribute, val) {
      if(window.addEventListener) {
        window.addEventListener('load',
          function(){ object[attribute] = val; }, false);
      } else {
        window.attachEvent('onload', function(){ object[attribute] = val; });
      }
    }
  </script>
<div id="navbar-iframe-container"></div>
<script type="text/javascript" src="https://apis.google.com/js/platform.js"></script>
<script type="text/javascript">
      gapi.load("gapi.iframes:gapi.iframes.style.bubble", function() {
        if (gapi.iframes && gapi.iframes.getContext) {
          gapi.iframes.getContext().openChild({
              url: 'https://www.blogger.com/navbar/4455058894110083658?origin\x3dhttps://www.vrdmn.com',
              where: document.getElementById("navbar-iframe-container"),
              id: "navbar-iframe"
          });
        }
      });
    </script><script type="text/javascript">
(function() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = '//pagead2.googlesyndication.com/pagead/js/google_top_exp.js';
var head = document.getElementsByTagName('head')[0];
if (head) {
head.appendChild(script);
}})();
</script>
</div></div>
<div itemscope='itemscope' itemtype='http://schema.org/Blog' style='display: none;'>
<meta content='Vardhaman Deshpande' itemprop='name'/>
</div>
<div class='body-fauxcolumns'>
<div class='fauxcolumn-outer body-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content'>
<div class='content-fauxcolumns'>
<div class='fauxcolumn-outer content-fauxcolumn-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<div class='content-outer'>
<div class='content-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left content-fauxborder-left'>
<div class='fauxborder-right content-fauxborder-right'></div>
<div class='content-inner'>
<header>
<div class='header-outer'>
<div class='header-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left header-fauxborder-left'>
<div class='fauxborder-right header-fauxborder-right'></div>
<div class='region-inner header-inner'>
<div class='header section' id='header' name='Header'><div class='widget Header' data-version='1' id='Header1'>
<div id='header-inner'>
<div class='titlewrapper'>
<h1 class='title'>
Vardhaman Deshpande
</h1>
</div>
<div class='descriptionwrapper'>
<p class='description'><span>Focusworks AI for Microsoft Teams - Chat with your business data <a href="https://focusworks.ai/">https://focusworks.ai/</a></span></p>
</div>
</div>
</div></div>
</div>
</div>
<div class='header-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</header>
<div class='tabs-outer'>
<div class='tabs-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left tabs-fauxborder-left'>
<div class='fauxborder-right tabs-fauxborder-right'></div>
<div class='region-inner tabs-inner'>
<div class='tabs section' id='crosscol' name='Cross-column'><div class='widget PageList' data-version='1' id='PageList1'>
<div class='widget-content'>
<ul>
<li class='selected'>
<a href='https://www.vrdmn.com/'>Home</a>
</li>
<li>
<a href='https://www.vrdmn.com/search/label/Microsoft%20Azure'>Microsoft Azure</a>
</li>
<li>
<a href='https://www.vrdmn.com/search/label/Front%20end'>Front end</a>
</li>
</ul>
<div class='clear'></div>
</div>
</div></div>
<div class='tabs no-items section' id='crosscol-overflow' name='Cross-Column 2'></div>
</div>
</div>
<div class='tabs-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='main-outer'>
<div class='main-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left main-fauxborder-left'>
<div class='fauxborder-right main-fauxborder-right'></div>
<div class='region-inner main-inner'>
<div class='columns fauxcolumns'>
<div class='fauxcolumn-outer fauxcolumn-center-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-left-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<div class='fauxcolumn-outer fauxcolumn-right-outer'>
<div class='cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left'>
<div class='fauxborder-right'></div>
<div class='fauxcolumn-inner'>
</div>
</div>
<div class='cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<!-- corrects IE6 width calculation -->
<div class='columns-inner'>
<div class='column-center-outer'>
<div class='column-center-inner'>
<div class='main section' id='main' name='Main'><div class='widget Blog' data-version='1' id='Blog1'>
<div class='blog-posts hfeed'>

          <div class="date-outer">
        
<h2 class='date-header'><span>Sunday, 2 February 2025</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBFLrZX-JhJR6oiMI-uHqSBuNwj0D_2huk_pXu4AJFc-KEgcBwDpfioY_58RiyWJmcHWnvPDtdA6gtddn7nR0rvhKyuRwS8hDrpjJhkEIEDdWb1MFyDRQk3JP86fjkhHxEva_IAZihbcIfSyD3Q-S4bxLMooSdEcyxvTYqvx29uBB5dNKkirgkR5lNI7E/w400-h400/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20an%20AI%20AGENT%20working%20with%20information.%20AGENT%20is%20using%20tools%20at%20hand%20to%20perform%20tasks.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canv.png' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='285749958596253646' itemprop='postId'/>
<a name='285749958596253646'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2025/02/building-agent-for-microsoft-365.html'>Building an Agent for Microsoft 365 Copilot: Adding an API plugin</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-285749958596253646' itemprop='description articleBody'>
<p>
  In the previous post, <a href="https://www.vrdmn.com/2025/01/building-agent-for-microsoft-365-copilot.html" target="_blank"><span style="color: #2b00fe;">we saw how to get started building agents for Microsoft  365 Copilot</span></a>. We saw the different agent manifest files and how to configure
  them. There are some great out of the box capabilities available for agents
  like using Web search, Code Interpreter and Creating Images.
</p>
<p>
  However, a very common scenario is to bring in data from external systems into
  Copilot and pass it to the LLM. So in this post, we will have a look at how to
  connect Copilot with external systems using API Plugins.
</p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBFLrZX-JhJR6oiMI-uHqSBuNwj0D_2huk_pXu4AJFc-KEgcBwDpfioY_58RiyWJmcHWnvPDtdA6gtddn7nR0rvhKyuRwS8hDrpjJhkEIEDdWb1MFyDRQk3JP86fjkhHxEva_IAZihbcIfSyD3Q-S4bxLMooSdEcyxvTYqvx29uBB5dNKkirgkR5lNI7E/s1024/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20an%20AI%20AGENT%20working%20with%20information.%20AGENT%20is%20using%20tools%20at%20hand%20to%20perform%20tasks.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canv.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBFLrZX-JhJR6oiMI-uHqSBuNwj0D_2huk_pXu4AJFc-KEgcBwDpfioY_58RiyWJmcHWnvPDtdA6gtddn7nR0rvhKyuRwS8hDrpjJhkEIEDdWb1MFyDRQk3JP86fjkhHxEva_IAZihbcIfSyD3Q-S4bxLMooSdEcyxvTYqvx29uBB5dNKkirgkR5lNI7E/w400-h400/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20an%20AI%20AGENT%20working%20with%20information.%20AGENT%20is%20using%20tools%20at%20hand%20to%20perform%20tasks.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canv.png" width="400" /></a></div>
<p><b><span style="color: red;">In simple terms, API Plugins are AI "wrappers" on existing APIs.</span></b> We inform the LLM
  about an API and give it instructions on when to call these APIs and which
  parameters to pass to them.&nbsp;
</p>
<p>
  To connect your API to the Copilot agent, we have to create an "Action" and
  include it in the <b><span style="color: #ffa400;">declarativeAgent.json</span></b> file we saw in the previous post:
</p>
<script src="https://gist.github.com/vman/f29b1663279ac47b4e4b096355809884.js"></script>
<p>
  The ai-plugin.json file contains information on how the LLM will understand
  our API. We will come to this file later.
</p>
<p>
  Before that, let's understand how our API looks. We have a simple API that can
  retrieve some sample data about repairs:
</p>
<script src="https://gist.github.com/vman/a3e2483697360b1247dab9ce33e43e98.js"></script>
<p>Next, we will need the OpenAI specification for this API</p>
<script src="https://gist.github.com/vman/866f672c2204cfe6c2c73b9a4355713b.js"></script>
<p>The OpenAPI specification is important as it describes in detail the exact signatures of our APIs to the LLM.</p>
<p>
  Finally, we will come to the most important file which is the <b><span style="color: #ffa400;">ai-plugin.json</span></b>
  file. It does several things. It informs Copilot which API methods are available, which parameters they
  expect and when to call them. This is done in simple human readable language so that the LLM can best understand it.</p>
<p>
  Additionally, it also handles formatting of the data before it's shown to the
  user in Copilot. Whether we want to use Adaptive Cards to show the data or if
  we want to run any other processing like removing direct links from the
  responses.
</p><p><b><span style="color: #ffa400;">If you are doing plugin development, chances are that you will be spending most of your time on this file.</span></b></p>
<script src="https://gist.github.com/vman/49a2a4308d2c10b0b7e488b90ea4c938.js"></script>
<p>Once everything is in place, we will run our plugin with simple instructions and this is how it will fetch the data from external database </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitjyrAzkOQ44hvo-E09cip07joDBBTy8zqNro9wYwb5jg2T5brMVu8_8XC5b_goAmp0dbUh53PDQ6WQxCusJmLakOwMNA-uhXNIV0w1ldqiWFhT5mq-A3MWQvZaNViCAzxXVzRrPsROT3GmkED2yWU0aXJnZyWn4rYVrBiqUallPDKoemmir7T_cv_NtE/s1269/367156485-9939972e-0449-410c-b237-d9d748cd6628.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="761" data-original-width="1269" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitjyrAzkOQ44hvo-E09cip07joDBBTy8zqNro9wYwb5jg2T5brMVu8_8XC5b_goAmp0dbUh53PDQ6WQxCusJmLakOwMNA-uhXNIV0w1ldqiWFhT5mq-A3MWQvZaNViCAzxXVzRrPsROT3GmkED2yWU0aXJnZyWn4rYVrBiqUallPDKoemmir7T_cv_NtE/w400-h240/367156485-9939972e-0449-410c-b237-d9d748cd6628.png" width="400" /></a></div><br /><p>Hope this helps!</p>

<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2025/02/building-agent-for-microsoft-365.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2025/02/building-agent-for-microsoft-365.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-02-02T06:32:00Z'>6:32 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/285749958596253646' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/285749958596253646' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=285749958596253646&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=285749958596253646&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=285749958596253646&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=285749958596253646&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=285749958596253646&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=285749958596253646&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/AI%20Agents' rel='tag'>AI Agents</a>,
<a href='https://www.vrdmn.com/search/label/LLM' rel='tag'>LLM</a>,
<a href='https://www.vrdmn.com/search/label/Microsoft%20365%20Copilot' rel='tag'>Microsoft 365 Copilot</a>,
<a href='https://www.vrdmn.com/search/label/Microsoft%20365%20Copilot%20Plugins' rel='tag'>Microsoft 365 Copilot Plugins</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, 6 January 2025</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/a/AVvXsEjetmOlipuqbaTFum57vxPnGwdVH-QA69NJW5ABWv-UuWx7iAAtnxRsaNEdn6QDsuEg2tg5Qj-28nRkGSSngl2LPuDPZN3tQ1ISNK6a3Uo56FPWotFyKCj0ABcRwdFLUSaQwBXJfvf6G2NFeRGTzc8X-sQ5HrLFPh8R07sAg_01srESq2ewN6suOOswbDY=w640-h230' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='1045027176581956469' itemprop='postId'/>
<a name='1045027176581956469'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2025/01/building-agent-for-microsoft-365-copilot.html'>Building an Agent for Microsoft 365 Copilot Chat</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-1045027176581956469' itemprop='description articleBody'>
<p>
  Microsoft 365 Copilot Chat is a powerful, general-purpose assistant that greatly
    improves personal productivity, helping users manage tasks like emails,
    calendars, document searches, and more.
</p>
<p>
  <span><b><span style="color: red;">However, the true potential of M365 Copilot lies in its
        extensibility.</span></b>
      By building specialized "vertical" agents on top of M365 Copilot, you can
      unlock team productivity as well as automate business processes. These
      custom agents not only help in individual productivity, but also help in
      building workflows across groups of people.</span>
</p>
<p>
  Agents for Microsoft 365 Copilot leverage the same robust foundation&#8212;its
    orchestrator, foundation models, and trusted AI services&#8212;that powers M365
    Copilot itself. This ensures consistency, reliability, and security at
    scale.
</p>
<p>
  So in this post, let's take a look at how to build Agents on top of
    Microsoft 365 Copilot.&nbsp;
</p>
<p>
  We will be building a Declarative Agent with the help of the Teams toolkit.
    Before we start, we need the following prerequisites:
</p>
<p>
  <span style="color: #2b00fe;"><span><a href="https://www.microsoft.com/en-us/microsoft-365/copilot/enterprise" target="_blank">A Microsoft 365 Copilot license</a></span>
  </span>
</p>
<p>
  <span style="color: #2b00fe;"><span><a href="https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension" target="_blank">Teams Toolkit Visual Studio Code extension</a></span>
  </span>
</p>
<p>
  <span style="color: #2b00fe;"><a href="https://learn.microsoft.com/en-us/microsoft-365-copilot/extensibility/prerequisites#building-with-teams-toolkit" target="_blank">Enable side loading of Teams apps</a></span>
</p>
<p>
  Once everything is in place, we will go to Visual Studio Code&nbsp;
</p>
<p>
  In the Teams Toolkit extension, To create an agent, we will click on
    "Create new app"
</p>
<p>Then, click on "Agent"</p>
<p></p>
<div class="separator" style="clear: both; text-align: center;">
  <a href="https://blogger.googleusercontent.com/img/a/AVvXsEjetmOlipuqbaTFum57vxPnGwdVH-QA69NJW5ABWv-UuWx7iAAtnxRsaNEdn6QDsuEg2tg5Qj-28nRkGSSngl2LPuDPZN3tQ1ISNK6a3Uo56FPWotFyKCj0ABcRwdFLUSaQwBXJfvf6G2NFeRGTzc8X-sQ5HrLFPh8R07sAg_01srESq2ewN6suOOswbDY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="416" data-original-width="1153" height="230" src="https://blogger.googleusercontent.com/img/a/AVvXsEjetmOlipuqbaTFum57vxPnGwdVH-QA69NJW5ABWv-UuWx7iAAtnxRsaNEdn6QDsuEg2tg5Qj-28nRkGSSngl2LPuDPZN3tQ1ISNK6a3Uo56FPWotFyKCj0ABcRwdFLUSaQwBXJfvf6G2NFeRGTzc8X-sQ5HrLFPh8R07sAg_01srESq2ewN6suOOswbDY=w640-h230" width="640" /></a>
</div>
<br />
<p></p>
<p>
  
    When the agent is created, we see a bunch of files getting created as part
    of the scaffolding.&nbsp; So let's take a look the difference moving pieces
    of the agent:
</p>
<p>
  <span style="background-color: white; color: #161616; font-size: 16px;"></span>
</p>
<div class="separator" style="clear: both; text-align: center;">
  <span style="background-color: white; color: #161616; font-size: 16px;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhDuYJuPUXoLZ8O67A09PMroivQpsbSK2e4G65QyDbJZLnV8-xe5f-V7ivur28xwsn2U5hJxY8yQxBXvskr83A526ZlQrmn2IXPjvSgyzrozeemjM4QEmHy2pREomXabvlya5unWnnY4_CRmhc0wQJotICgvBbhWHVQZDVYnqtZ1sx3D7dUoXnUmLJowuY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="419" data-original-width="328" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEhDuYJuPUXoLZ8O67A09PMroivQpsbSK2e4G65QyDbJZLnV8-xe5f-V7ivur28xwsn2U5hJxY8yQxBXvskr83A526ZlQrmn2IXPjvSgyzrozeemjM4QEmHy2pREomXabvlya5unWnnY4_CRmhc0wQJotICgvBbhWHVQZDVYnqtZ1sx3D7dUoXnUmLJowuY=w313-h400" width="313" /></a></span>
</div>
<h3 style="text-align: left;">
  <span style="color: #38761d;">manifest.json</span>
</h3>
<p>
  
    If you have been doing M365 Apps (and Teams apps) for a while, you are
    familiar with this file. This is the file which represents our Agent in the
    M365 App catalog. It contains the various details like name, description and
    capabilities of the app.
</p>
<script src="https://gist.github.com/vman/7b486b72d610f536a499d3cd8f5f994b.js"></script>
<p>
  However, you will notice the new property in this file which is
  <b><span style="color: red;">"copilotAgents"</span></b>

  This property will be pointing to a file containing the description of our new
  declarative agent. So let's look at how that file looks next:
</p>

<h3 style="text-align: left;">
  <span style="color: #38761d;">declarativeAgent.json</span>
</h3>
<script src="https://gist.github.com/vman/35bace9d20fa8a90b06693b83fce23c9.js"></script>
Lots of interesting things are happening here.&nbsp;<div><br />&nbsp;
<div>First the <b><span style="color: red;">"instructions"</span></b> property is
  pointing to a file which will contain the "System prompt" of our agent. We
  will have a look at this file later.&nbsp;
</div>
<div>
  <div><br /></div><div>
    Next, the
    <b><span style="color: red;">"conversation_starters"</span></b> property
    contains ready to go prompts which the user can ask the agent. Our agent
    will be trained to respond to these prompts. This is so that the user is
    properly onboarded when they land on our agent.
  </div>
  <div><br /></div>
  <div>
    Finally there will be the
    <b><span style="color: red;">actions</span></b> and
    <b><span style="color: red;">capabilities</span></b> properties:&nbsp;
  </div>
  <div><br /></div>
  <div>
    Actions property contains connections to external APIs which the agent can
    invoke.
  </div>
  <div><br /></div>
  <div>
    Capabilities property contains the different out of the box "Tools" which we
    want to allow in our agent. E.g. SharePoint and OneDrive search, image
    creation, code interpreter to generate charts etc&nbsp;
  </div>
  <div><br /></div>
  <div>
    We will talk about both these properties in more details in subsequent blog
    posts.<p>
    </p>
    <h3 style="text-align: left;">
      <span style="color: #38761d;">instruction.txt</span>
    </h3>
    <p>
      And finally we have the instructions file where we can specify the system
      prompt for the agent. Here, we can guide the agent and assign it
      personality. We can make it aware of the tools and capabilities it has
      available and when the use them. We can provide one shot or few shot
      examples to "train" the agent on responding to users.
    </p>
    <script src="https://gist.github.com/vman/4308147103c55d8e4640b56c3519dc3d.js"></script>

    Once all files are in place, you can click "Provision" from the Teams
    toolkit extension:
  </div>
  <div>
    <div class="separator" style="clear: both; text-align: center;"><br /></div>
    <div class="separator" style="clear: both; text-align: center;">
      <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4lWw7HuGmhdP1Y_0lv80c2veoN4lmcd-eIrpu31zgVG428WgHDafDDvU6IohxqbP99gFL20cweeWXGW_h72zs-3oEPbgHdo7jAGxYJk__-qDvd308qHSs_SdKFilZH6fVewL3SOVj08z0AtAgR1DCiTeryZe4AIOdWUog4Rh7VPmUQp0UhMk9SuG6gXQ/s977/Screenshot%202025-01-06%20102414.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="673" data-original-width="977" height="440" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4lWw7HuGmhdP1Y_0lv80c2veoN4lmcd-eIrpu31zgVG428WgHDafDDvU6IohxqbP99gFL20cweeWXGW_h72zs-3oEPbgHdo7jAGxYJk__-qDvd308qHSs_SdKFilZH6fVewL3SOVj08z0AtAgR1DCiTeryZe4AIOdWUog4Rh7VPmUQp0UhMk9SuG6gXQ/w640-h440/Screenshot%202025-01-06%20102414.png" width="640" /></a>
    </div>
    <br />Then navigate to&nbsp;<a href="https://www.microsoft365.com/chat" target="_blank"><b>https://www.microsoft365.com/chat</b></a>
  </div>
  <div><br /></div>
  <div>And our new agent will be ready!</div>
  <div><br /></div>
  <div>
    Here is how the agent will provide the conversation starters when we first
    lang on it:
  </div>
  <div><br /></div>
  <div class="separator" style="clear: both; text-align: center;">
    <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFlL4Xj2AOw6yiaFi_Zx2a1xR4Z_F6j0hx3Ve758fl1FePeJ7lO68_n9myaIv4lkkYGtoKrkRcWuO1n2_ixntGcy9gJgJ1enKvZ9aWPWXUmJo_vvPcDHzJWZgPdwUROjX8Jie9dUP4GsJznY1Tny3TIyNUduyM7gVBTRFkk7VUkidogZHe6HvQc5YcCfU/s1051/Screenshot%202025-01-06%20102816.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="1051" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFlL4Xj2AOw6yiaFi_Zx2a1xR4Z_F6j0hx3Ve758fl1FePeJ7lO68_n9myaIv4lkkYGtoKrkRcWuO1n2_ixntGcy9gJgJ1enKvZ9aWPWXUmJo_vvPcDHzJWZgPdwUROjX8Jie9dUP4GsJznY1Tny3TIyNUduyM7gVBTRFkk7VUkidogZHe6HvQc5YcCfU/w640-h365/Screenshot%202025-01-06%20102816.png" width="640" /></a>
  </div>
  <div><br /></div>
  <div>Simple conversation using Web search capability:</div>
  <br />
  <div class="separator" style="clear: both; text-align: center;">
    <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3tJOWXycQyB0otl7hHiGPpwumhp-0Zzj4OElDfTDuib5lrm7IDtl6TnZy3-2YHDrsPeMjgZeoNWb3aUUloZ1szn8S3Y4AL1Zsbvs9zVEsJWNcJ6jhs0g0u4mpPA6j7IzkrAoflQ0kNZmekDg-GjMMd0SyIt80C_Y1AI2wRv-y0Ox1lJxY0YpzFQib_Bw/s956/Screenshot%202025-01-06%20102858.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="426" data-original-width="956" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3tJOWXycQyB0otl7hHiGPpwumhp-0Zzj4OElDfTDuib5lrm7IDtl6TnZy3-2YHDrsPeMjgZeoNWb3aUUloZ1szn8S3Y4AL1Zsbvs9zVEsJWNcJ6jhs0g0u4mpPA6j7IzkrAoflQ0kNZmekDg-GjMMd0SyIt80C_Y1AI2wRv-y0Ox1lJxY0YpzFQib_Bw/w640-h286/Screenshot%202025-01-06%20102858.png" width="640" /></a>
  </div>
  <div><br /></div>
  <div>Conversation using Web search and Code Interpreter capabilities:</div>
  <br />
  <div class="separator" style="clear: both; text-align: center;">
    <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAeavhe-LCu1xSugYh2h0ko3g_N8wIw6BdD9Bml8AJTntt7Zw1YaWS1nFs8PZNSSWf91-faPGaiQyWCZwbvmN73xzNIv_ODCd0vSU309FMZ2nPI56FbuM1KJ0VUdUWv_9vof3gO_a2iuOcfjYXp1AyF4Hnkvojtp7Kqtt1ie8mAAYZ767E8vMOuvDgOLw/s954/Screenshot%202025-01-06%20102928.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="744" data-original-width="954" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAeavhe-LCu1xSugYh2h0ko3g_N8wIw6BdD9Bml8AJTntt7Zw1YaWS1nFs8PZNSSWf91-faPGaiQyWCZwbvmN73xzNIv_ODCd0vSU309FMZ2nPI56FbuM1KJ0VUdUWv_9vof3gO_a2iuOcfjYXp1AyF4Hnkvojtp7Kqtt1ie8mAAYZ767E8vMOuvDgOLw/w640-h500/Screenshot%202025-01-06%20102928.png" width="640" /></a>
  </div>
  <br />
  <div><br /></div>
  <div>
    Hope this was helpful! We will explore M365 Copilot Agents more in
    subsequent blog posts.<br /><br />
  </div>
</div>
</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2025/01/building-agent-for-microsoft-365-copilot.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2025/01/building-agent-for-microsoft-365-copilot.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2025-01-06T08:29:00Z'>8:29 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/1045027176581956469' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/1045027176581956469' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=1045027176581956469&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=1045027176581956469&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=1045027176581956469&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=1045027176581956469&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=1045027176581956469&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=1045027176581956469&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Agents' rel='tag'>Agents</a>,
<a href='https://www.vrdmn.com/search/label/AI%20Agents' rel='tag'>AI Agents</a>,
<a href='https://www.vrdmn.com/search/label/Microsoft%20365%20Copilot' rel='tag'>Microsoft 365 Copilot</a>,
<a href='https://www.vrdmn.com/search/label/Teams%20Toolkit' rel='tag'>Teams Toolkit</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, 9 December 2024</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVoUqs_dG8ci7O4HWehyphenhyphenyk_95hnr013beyBWi2G6BDsqya8jKV7zGu0Z1gyTcXYSybbVVDyAjIvftsfLOJV_Tzcgr_GpNFhcQvEmQ4i_w669pGt7f4VPgR829Bz6k4fpvfEawBRQAh3y6n9kWBbfr7nxMoGTTVBXu-lmwAjYsJF4GrR9GMAc6Wp2cZmQ/w640-h640/generated_00%20(2).png' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='6555527554161231977' itemprop='postId'/>
<a name='6555527554161231977'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2024/12/search-sharepoint-and-onedrive-files-in.html'>Search SharePoint and OneDrive files in natural language with OpenAI function calling and Microsoft Graph Search API</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-6555527554161231977' itemprop='description articleBody'>
<p>
  By now, we have seen "Chat with your documents" functionality being introduced
  in many Microsoft 365 applications. It is typically built by combining Large
  Language Models (LLMs) and vector databases.&nbsp;
</p>
<p>
  To make the documents "chat ready", they have to be converted to embeddings
  and stored in vector databases like Azure AI Search. However, indexing the
  documents and keeping the index in sync are not trivial tasks. There are many
  moving pieces involved. Also, many times there is no need for "similarity
  search" or "vector search" where the search is made based on meaning of the
  query.&nbsp;
</p>
<p>
  In such cases, a simple "keyword" search can do the trick. The advantage of
  using keyword search in Microsoft 365 applications is that the Microsoft
  Search indexes are already available as part of the service. APIs like the
  Microsoft Graph Search API and the SharePoint Search REST API give us "ready
  to consume" endpoints which can be used to query documents across SharePoint
  and OneDrive. Keeping these search indexes in sync with the changes in the
  documents is also handled by the Microsoft 365 service itself.
</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVoUqs_dG8ci7O4HWehyphenhyphenyk_95hnr013beyBWi2G6BDsqya8jKV7zGu0Z1gyTcXYSybbVVDyAjIvftsfLOJV_Tzcgr_GpNFhcQvEmQ4i_w669pGt7f4VPgR829Bz6k4fpvfEawBRQAh3y6n9kWBbfr7nxMoGTTVBXu-lmwAjYsJF4GrR9GMAc6Wp2cZmQ/s1024/generated_00%20(2).png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdVoUqs_dG8ci7O4HWehyphenhyphenyk_95hnr013beyBWi2G6BDsqya8jKV7zGu0Z1gyTcXYSybbVVDyAjIvftsfLOJV_Tzcgr_GpNFhcQvEmQ4i_w669pGt7f4VPgR829Bz6k4fpvfEawBRQAh3y6n9kWBbfr7nxMoGTTVBXu-lmwAjYsJF4GrR9GMAc6Wp2cZmQ/w640-h640/generated_00%20(2).png" width="640" /></a></div>
<p>
  So in this post, let's have a look at how we can combine OpenAI's&nbsp;<b><span style="color: red;">gpt-4o</span></b>&nbsp;Large Language
  Model with <b><span style="color: red;">Microsoft Graph Search API</span></b> to query SharePoint and OneDrive
  documents in natural language.&nbsp;
</p>
<p>
  On a high level we will be using OpenAI function calling to achieve this. Our
  steps are going to be:
</p>
<h4 style="background-color: white; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; margin: 0px; position: relative;">
  <span style="color: red;">1. Define an OpenAI function and make it available to the
    LLM.&nbsp;&nbsp;</span>
</h4>
<h4 style="background-color: white; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; margin: 0px; position: relative;">
  <span style="color: red;"><br />2. During the course of the chat, if the LLM thinks that to respond
    to the user, it needs to call our function, it will respond with the
    function name along with the parameters.<br /><br /></span>
</h4>
<h4 style="background-color: white; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; margin: 0px; position: relative;">
  <span style="color: red;">3. Call the Microsoft Graph Search API based on the parameters provided by
    the LLM.<br /><br /></span>
</h4>
<h4 style="background-color: white; color: #666666; font-family: &quot;Trebuchet MS&quot;, Trebuchet, Verdana, sans-serif; font-size: 13.2px; margin: 0px; position: relative;">
  <span style="color: red;">4. Send the results returned from the Microsoft Graph back to the LLM to
    generate a response in natural language.</span>
</h4>
<p>
  So let's see how to achieve this. In this code I have used the following nuget
  packages:
</p>
<p>
  <span style="color: #2b00fe;"><a href="https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0" target="_blank">https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0</a></span>
</p>
<p>
  <a href="https://www.nuget.org/packages/Microsoft.Graph/5.64.0/" target="_blank">https://www.nuget.org/packages/Microsoft.Graph/5.64.0</a>
</p>
<p>The first thing we will look at is our OpenAI function definition:</p>
<script src="https://gist.github.com/vman/6166539fd7b02fd3561762674d773017.js"></script>
In this function we are informing the LLM that if needs to search any files as
part of providing the responses, it can call this function. The function name
will be returned in the response and the relevant parameter will be provided as
well. Now let's see how our orchestrator function looks:
<br />
<br />
<script src="https://gist.github.com/vman/d93b9944af5a9f951b5875ca29ab2ed9.js"></script>
<p>
  There is a lot to unpack here as this function is the one which does the heavy
  lifting. This code is responsible for handling the chat with OpenAI, calling
  the MS Graph and also responding back to the user based on the response from
  the Graph.&nbsp;
</p>
<p>
  Next, let's have a look at the code which calls the Microsoft Graph based on
  the parameters provided by the LLM.&nbsp;
</p>
<p>
  Before executing this code, you will need to have created an App registration.
  Here is how to do that:
  <a href="https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app">https://learn.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app</a>&nbsp;
</p>
<p>
  Since we are calling the Microsoft Graph
  <b><span style="color: red;">/search</span></b> endpoint with
  <span style="color: red;"><b>delegated permissions</b></span>, the app registration will need a minimum of the
  <b><span style="color: red;">User.Read</span></b> and
  <span style="color: red;"><b>Files.Read.All</b></span>&nbsp;permissions granted.
  <a href="https://learn.microsoft.com/en-us/graph/api/user-list?view=graph-rest-1.0&amp;tabs=http">https://learn.microsoft.com/en-us/graph/api/search-query?view=graph-rest-1.0&amp;tabs=http
  </a>
</p>
<script src="https://gist.github.com/vman/39c7deb8d81b01c88b8dae5d47161327.js"></script>

This code get the parameters sent from the LLM and uses the Microsoft Graph .NET
SDK to call the <b><span style="color: red;">/search</span></b> endpoint and fetch the files based on the <b><span style="color: red;">searchQuery</span></b>
properties. Once the files are returned, their summary value is concatenated
into a string and returned to the orchestrator function so that it can be sent
again to the LLM.&nbsp;
<div><br /></div>

<div>
  Finally, lets have a look at our CallOpenAI function which is responsible for
  talking to the Open AI chat api.</div><div>&nbsp;
</div>
<script src="https://gist.github.com/vman/910d3cfafb8b4224e86f43e0ec62da82.js"></script>

<div>
  This code defines the Open AI function which will be included in our Chat API
  calls. Also, the user's search query is sent to the API to determine if the
  function needs to be called. This function is also called again after the
  response from the Microsoft Graph is fetched. At that time, this function
  contains the details fetched from the Graph to generate an output in natural
  language. This way, we can use Open AI function calling together with
  Microsoft Graph API to search files in SharePoint and OneDrive.
</div><div><br /></div><div>Hope this helps!</div>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2024/12/search-sharepoint-and-onedrive-files-in.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2024/12/search-sharepoint-and-onedrive-files-in.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2024-12-09T07:09:00Z'>7:09 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/6555527554161231977' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/6555527554161231977' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=6555527554161231977&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=6555527554161231977&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=6555527554161231977&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=6555527554161231977&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=6555527554161231977&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=6555527554161231977&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Azure%20OpenAI%20Service' rel='tag'>Azure OpenAI Service</a>,
<a href='https://www.vrdmn.com/search/label/Microsoft%20Graph' rel='tag'>Microsoft Graph</a>,
<a href='https://www.vrdmn.com/search/label/OneDrive%20for%20Business' rel='tag'>OneDrive for Business</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI%20Functions' rel='tag'>OpenAI Functions</a>,
<a href='https://www.vrdmn.com/search/label/SharePoint%20Online' rel='tag'>SharePoint Online</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Tuesday, 5 November 2024</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQm-AUBiUHlcQGiZSI8Sn8RujIHIuv0tRey7XH2nZd8ZlvOHV-qiDZHdTw3LoDorfXmMdaLoKnAIlLF9Iddow6TlOYGQBn825iSisRHM22PcGgh-f2juHtmNtumNVANb86FKrr8IYuv20Z9XoCn0c9TMf-utUgN5EvjtBTSZLVHcB0E89XlGE6xgrxumk/w640-h640/a%20robot%20drawing%20a%20bar%20chart,%20casual%20pencil%20drawing%20style.jpg' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='2249403873734555514' itemprop='postId'/>
<a name='2249403873734555514'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html'>Working with OpenAI Assistants: Using code interpreter to generate charts</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-2249403873734555514' itemprop='description articleBody'>
<p>
  This is the fourth post in the series where we explore the OpenAI Assistants
  API. In this post, we will be looking at the code interpreter tool which
  allows us to generate charts based on some data. This is very powerful for
  scenarios where you have to do data analysis on JSON, csv or Microsoft Excel
  files and generate charts and reports based on them.
</p>
<p>See the following posts for the entire series:</p>
<p>
  <span style="color: #2b00fe;"
    ><b
      ><a
        href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html"
        target="_blank"
        >Working with the OpenAI Assistants API: Create a simple assistant</a
      ></b
    ></span
  >
</p>
<p>
  <span style="color: #2b00fe;"
    ><b
      ><a
        href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html"
        target="_blank"
        >Working with the OpenAI Assistants API: Using file search</a
      ></b
    ></span
  >&nbsp;
</p>
<p>
  <span style="color: #2b00fe;"
    ><b
      ><a
        href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html"
        target="_blank"
        >Working with the OpenAI Assistants API: Chat with Excel files using
        Code interpreter</a
      ></b
    ></span
  >&nbsp;
</p>
<p>
  <span style="color: #2b00fe;"
    ><b>Working with the OpenAI Assistants API:&nbsp;</b></span
  ><span style="color: #2b00fe;"
    ><b>Using code interpreter to generate charts</b></span
  >&nbsp;(this post)&nbsp;
</p>
<p>
  The Code Interpreter tool has access to a sandboxed python code execution
  environment within the Assistants API. This can provide very useful as the
  Assistants API can iteratively run code against the files provided to it and
  generate charts!
</p>
<div class="separator" style="clear: both; text-align: center;">
  <a
    href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQm-AUBiUHlcQGiZSI8Sn8RujIHIuv0tRey7XH2nZd8ZlvOHV-qiDZHdTw3LoDorfXmMdaLoKnAIlLF9Iddow6TlOYGQBn825iSisRHM22PcGgh-f2juHtmNtumNVANb86FKrr8IYuv20Z9XoCn0c9TMf-utUgN5EvjtBTSZLVHcB0E89XlGE6xgrxumk/s1024/a%20robot%20drawing%20a%20bar%20chart,%20casual%20pencil%20drawing%20style.jpg"
    style="margin-left: 1em; margin-right: 1em;"
    ><img border="0" data-original-height="1024" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQm-AUBiUHlcQGiZSI8Sn8RujIHIuv0tRey7XH2nZd8ZlvOHV-qiDZHdTw3LoDorfXmMdaLoKnAIlLF9Iddow6TlOYGQBn825iSisRHM22PcGgh-f2juHtmNtumNVANb86FKrr8IYuv20Z9XoCn0c9TMf-utUgN5EvjtBTSZLVHcB0E89XlGE6xgrxumk/w640-h640/a%20robot%20drawing%20a%20bar%20chart,%20casual%20pencil%20drawing%20style.jpg" width="640"
  /></a>
</div>
<p>
  So in this post, let's see how we can generate charts based on an excel file
  with the code interpreter tool. The excel file we will be querying will be the
  same one we used in the last post. It contains details of customers like their
  name and the licenses purchased of a fictional product by them:
</p>
<p></p>
<div class="separator" style="clear: both; text-align: center;">
  <a
    href="https://blogger.googleusercontent.com/img/a/AVvXsEhwffTKWJVfqHz1W6FmJl7hHls6lM1wA3Z5zeBuvY0iH9IlgRUKRfT7QGvFBDTrygiFoYr2gLBlXCfR4zI-8HaKLXzqPRe6wsKAV4-BJIIX1JncBhgIZxuM-uaJ0gCIcbONhW7OaLiq1P_wTHxzlyn1skRGt5dGW5J_r2TO12Q3OOApbXGEEAT57vJTWbs"
    style="margin-left: 1em; margin-right: 1em;"
    ><img alt="" data-original-height="156" data-original-width="672" src="https://blogger.googleusercontent.com/img/a/AVvXsEhwffTKWJVfqHz1W6FmJl7hHls6lM1wA3Z5zeBuvY0iH9IlgRUKRfT7QGvFBDTrygiFoYr2gLBlXCfR4zI-8HaKLXzqPRe6wsKAV4-BJIIX1JncBhgIZxuM-uaJ0gCIcbONhW7OaLiq1P_wTHxzlyn1skRGt5dGW5J_r2TO12Q3OOApbXGEEAT57vJTWbs=s16000"
  /></a>
</div>
<p></p>
<p>
  To generate charts using the Code interpreter, we have to use the following
  moving pieces:&nbsp;
</p>
<div>
  <ul>
    <li>
      First, we need to upload the excel file using the&nbsp;<b
        ><span style="color: #ffa400;">Open AI File client</span></b
      >&nbsp;
    </li>
    <li>
      Then, we need to&nbsp;<b
        ><span style="color: #ffa400;"
          >connect the uploaded file to the Code Interpreter tool in either an
          assistant or a thread</span
        ></b
      >&nbsp;which would enable the assistant to generate a chart on the
      document.
    </li>
  </ul>
  <div>
    For the demo code, we will be using the&nbsp;<a
      href="https://azure.microsoft.com/en-in/products/ai-services/openai-service"
      target="_blank"
      ><span style="color: #2b00fe;">Azure OpenAI service</span></a
    >&nbsp;for working with the OpenAI gpt-4o model and since we will be using
    .NET code, we will need the&nbsp;<a
      href="https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.1"
      target="_blank"
      ><span style="color: #2b00fe;">Azure OpenAI .NET SDK</span></a
    >&nbsp;as well as&nbsp;<a
      href="https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4/"
      ><span style="color: #2b00fe;">Azure.AI.OpenAI.Assistants</span></a
    >&nbsp;nuget packages.
  </div>
  <div><br /></div>
</div>
<script src="https://gist.github.com/vman/e1402f25d02e891741af84bd93d877c5.js"></script>
<p>And this is the file generated by the code interpreter tool:</p>
<div class="separator" style="clear: both; text-align: center;">
  <a
    href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjroUOVLc1m4vWRqITadtW0PCW-6kmQQieW2pxm044Mt7hk2GLUXm-INWjbmL8xUZXsNhT4VT8AAcLowhA2zpb4bL1gD8D5HnHai09Sk-z6B3_Q1Oe269BLu6xF00QyPWdFfhBbD8qTc9wrPf-rXV7vgecXS-OwaNrOW39hy3ekh4g6rhNX2bKiFbJBX0/s1979/557d1041-62b8-4667-8425-96178b6fcd4c.png"
    style="margin-left: 1em; margin-right: 1em;"
    ><img border="0" data-original-height="1180" data-original-width="1979" height="382" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjroUOVLc1m4vWRqITadtW0PCW-6kmQQieW2pxm044Mt7hk2GLUXm-INWjbmL8xUZXsNhT4VT8AAcLowhA2zpb4bL1gD8D5HnHai09Sk-z6B3_Q1Oe269BLu6xF00QyPWdFfhBbD8qTc9wrPf-rXV7vgecXS-OwaNrOW39hy3ekh4g6rhNX2bKiFbJBX0/w640-h382/557d1041-62b8-4667-8425-96178b6fcd4c.png" width="640"
  /></a>
</div>
<p>
  As you can see the code interpreter tool takes a few passes at the data. It
  tries to understand the document before generating the chart. This is a really
  powerful feature and the possibilities are endless!&nbsp;
</p>
<p>Hope this helps.</p>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2024-11-05T10:28:00Z'>10:28 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/2249403873734555514' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/2249403873734555514' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=2249403873734555514&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=2249403873734555514&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=2249403873734555514&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=2249403873734555514&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=2249403873734555514&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=2249403873734555514&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Azure%20OpenAI%20Service' rel='tag'>Azure OpenAI Service</a>,
<a href='https://www.vrdmn.com/search/label/Code%20Interpreter' rel='tag'>Code Interpreter</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI%20Assistants' rel='tag'>OpenAI Assistants</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, 4 November 2024</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoBMmG7ABt-QRwsmjLyFuU46fxernAlFYkaQXxfxypKunXDVUftzU_FT5WLQMxVlq0FXMDwPbuhfdII05VYz-M7jnAMS0zH6y8Xy4NIcCAoWuKe70Gg-wmwvBeTeYlKOkVKfPQpWw8I1Af8mHE6q2ZVRfL0_4odpvaCxoem0ZcqG-2YjYw5gZoGZ8G7Iw/w400-h400/a%20robot%20running%20code%20on%20an%20excel%20file,%20casual%20pencil%20drawing%20style.jpg' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='8216900863811474093' itemprop='postId'/>
<a name='8216900863811474093'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html'>Working with OpenAI Assistants: Chat with Excel files using Code interpreter</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-8216900863811474093' itemprop='description articleBody'>
<p>
  This is the third post in the series where we explore the OpenAI Assistants
  API. In this post, we will be looking at the code interpreter tool which
  allows us to upload files to the Assistants API and write python code against
  them. This is very powerful for scenarios where you have to do data analysis
  on csv or Microsoft Excel files and generate charts and reports on them.
</p>
<p>See the following posts for the entire series:</p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html" target="_blank">Working with the OpenAI Assistants: Create a simple assistant</a></b></span>
</p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html" target="_blank">Working with the OpenAI Assistants: Using file search</a></b></span>&nbsp;
</p>
<p>
  <span style="color: #2b00fe;"><b>Working with the OpenAI Assistants: Chat with Excel files using code interpreter</b></span>&nbsp;(this post)&nbsp;
</p><p><b style="color: #2b00fe;"><a href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html" target="_blank">Working with OpenAI Assistants: Using code interpreter to generate charts</a></b></p>
<p>
  The Retrieval Augmented Generation (RAG) pattern, which was discussed in
  previous posts, works great for text based files like Microsoft Word and PDF
  documents. However, when it comes to structured data files like csv or excel,
  it comes out short. An this where the Code Interpreter tool can come in very handy. It
  can repetitively run python code on documents until it is confident that the
  user's question has been answered.
</p>
<div class="separator" style="clear: both; text-align: center;">
  <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoBMmG7ABt-QRwsmjLyFuU46fxernAlFYkaQXxfxypKunXDVUftzU_FT5WLQMxVlq0FXMDwPbuhfdII05VYz-M7jnAMS0zH6y8Xy4NIcCAoWuKe70Gg-wmwvBeTeYlKOkVKfPQpWw8I1Af8mHE6q2ZVRfL0_4odpvaCxoem0ZcqG-2YjYw5gZoGZ8G7Iw/s1024/a%20robot%20running%20code%20on%20an%20excel%20file,%20casual%20pencil%20drawing%20style.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoBMmG7ABt-QRwsmjLyFuU46fxernAlFYkaQXxfxypKunXDVUftzU_FT5WLQMxVlq0FXMDwPbuhfdII05VYz-M7jnAMS0zH6y8Xy4NIcCAoWuKe70Gg-wmwvBeTeYlKOkVKfPQpWw8I1Af8mHE6q2ZVRfL0_4odpvaCxoem0ZcqG-2YjYw5gZoGZ8G7Iw/w400-h400/a%20robot%20running%20code%20on%20an%20excel%20file,%20casual%20pencil%20drawing%20style.jpg" width="400" /></a>
</div>
<p>
  So in this post, let's see how we can query an excel file with the code
  interpreter tool. The excel file we will be querying will contain details of customers like their name and the licenses purchased of a fictional product by them:
</p>
<p></p>
<div class="separator" style="clear: both; text-align: center;">
  <a href="https://blogger.googleusercontent.com/img/a/AVvXsEhwffTKWJVfqHz1W6FmJl7hHls6lM1wA3Z5zeBuvY0iH9IlgRUKRfT7QGvFBDTrygiFoYr2gLBlXCfR4zI-8HaKLXzqPRe6wsKAV4-BJIIX1JncBhgIZxuM-uaJ0gCIcbONhW7OaLiq1P_wTHxzlyn1skRGt5dGW5J_r2TO12Q3OOApbXGEEAT57vJTWbs" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="156" data-original-width="672" src="https://blogger.googleusercontent.com/img/a/AVvXsEhwffTKWJVfqHz1W6FmJl7hHls6lM1wA3Z5zeBuvY0iH9IlgRUKRfT7QGvFBDTrygiFoYr2gLBlXCfR4zI-8HaKLXzqPRe6wsKAV4-BJIIX1JncBhgIZxuM-uaJ0gCIcbONhW7OaLiq1P_wTHxzlyn1skRGt5dGW5J_r2TO12Q3OOApbXGEEAT57vJTWbs=s16000" /></a>
</div>
<p></p>
<p>
  To upload and analyse documents using the Code interpreter, we have to use the
  following moving pieces:&nbsp;
</p>
<div>
  <ul>
    <li>
      First, we need to upload files using the&nbsp;<b><span style="color: #ffa400;">Open AI File client</span></b>&nbsp;
    </li>
    <li>
      Then, we need to&nbsp;<b><span style="color: #ffa400;">connect the uploaded file to the Code Interpreter tool in either an
          assistant or a thread</span></b>&nbsp;which would enable the assistant to answer questions based on the
      document.
    </li>
  </ul>
  <div>
    For the demo code, we will be using the&nbsp;<a href="https://azure.microsoft.com/en-in/products/ai-services/openai-service" target="_blank"><span style="color: #2b00fe;">Azure OpenAI service</span></a>&nbsp;for working with the OpenAI gpt-4o model and since we will be using
    .NET code, we will need the&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.1" target="_blank"><span style="color: #2b00fe;">Azure OpenAI .NET SDK</span></a>&nbsp;as well as&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4/"><span style="color: #2b00fe;">Azure.AI.OpenAI.Assistants</span></a>&nbsp;nuget packages.
  </div>
  <div><br /></div>
</div>
<script src="https://gist.github.com/vman/20e6f2711219a3d3478a0bf710fcb736.js"></script>
<p>
  As you can see the code interpreter tool takes a few passes at the data. It
  tries to understand the document before answering the question. This is a
  really powerful feature and the possibilities are endless!&nbsp;
</p>
<p>Hope this helps.</p>
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2024-11-04T05:52:00Z'>5:52 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/8216900863811474093' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/8216900863811474093' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=8216900863811474093&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=8216900863811474093&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=8216900863811474093&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=8216900863811474093&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=8216900863811474093&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=8216900863811474093&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Azure%20OpenAI%20Service' rel='tag'>Azure OpenAI Service</a>,
<a href='https://www.vrdmn.com/search/label/Code%20Interpreter' rel='tag'>Code Interpreter</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI%20Assistants' rel='tag'>OpenAI Assistants</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, 14 October 2024</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcCrWAXRMCBSXX69sHgJnyO6b2sVQfKfhhkgtj7lRHrVAjwaJPdsmSzKvMWHnDth5P6181oreXjRy8d2gstDAjNZQgKhcOeoYwQ0Tum8utTvwlpnvnkcPRljVzoZHShHiz1WMFHyeloO7icdrZ7DsCUZ98dj5G8xCC751EcIHvlaNe_TiuD8rkdf-9ZVI/w640-h640/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20AI-powered%20file%20search.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canvas,%20representing%20the%20idea%20of%20interconnected%20data.%20Abstrac%20(1).jpg' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='7504094186511594233' itemprop='postId'/>
<a name='7504094186511594233'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html'>Working with OpenAI Assistants: Using file search</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-7504094186511594233' itemprop='description articleBody'>
<p>
  This is the second post in the series where we explore the OpenAI Assistants
  API. In this post, we will be looking at the file search capabilities which
  allows us to upload files to the Assistants API and chat with them. See the
  following posts for the entire series:
</p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html" target="_blank">Working with OpenAI Assistants: Create a simple assistant</a></b></span>
</p>
<p>
  <span style="color: #2b00fe;"><b>Working with OpenAI Assistants: Using file search</b></span>&nbsp;(this post)
</p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html" target="_blank">Working with OpenAI Assistants: Chat with Excel files using code interpreter</a></b></span></p><p><span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html" target="_blank">Working with OpenAI Assistants: Using code interpreter to generate charts</a></b></span></p>
<p>
  The file search API uses the Retrieval Augmented Generation (RAG) pattern
  which has been made popular recently. The added advantage of using the
  Assistants API for this is that the API manages document chunking, vectorizing
  and indexing for us. Whereas without the Assistants API we would have to use a
  separate service like Azure AI Search and manage the document indexing
  ourselves.&nbsp;</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcCrWAXRMCBSXX69sHgJnyO6b2sVQfKfhhkgtj7lRHrVAjwaJPdsmSzKvMWHnDth5P6181oreXjRy8d2gstDAjNZQgKhcOeoYwQ0Tum8utTvwlpnvnkcPRljVzoZHShHiz1WMFHyeloO7icdrZ7DsCUZ98dj5G8xCC751EcIHvlaNe_TiuD8rkdf-9ZVI/s1024/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20AI-powered%20file%20search.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canvas,%20representing%20the%20idea%20of%20interconnected%20data.%20Abstrac%20(1).jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcCrWAXRMCBSXX69sHgJnyO6b2sVQfKfhhkgtj7lRHrVAjwaJPdsmSzKvMWHnDth5P6181oreXjRy8d2gstDAjNZQgKhcOeoYwQ0Tum8utTvwlpnvnkcPRljVzoZHShHiz1WMFHyeloO7icdrZ7DsCUZ98dj5G8xCC751EcIHvlaNe_TiuD8rkdf-9ZVI/w640-h640/A%20minimalistic%20and%20abstract%20illustration%20inspired%20by%20the%20concept%20of%20AI-powered%20file%20search.%20Subtle%20geometric%20shapes%20and%20lines%20gently%20flow%20across%20the%20canvas,%20representing%20the%20idea%20of%20interconnected%20data.%20Abstrac%20(1).jpg" width="640" /></a></div><p>To upload and chat with documents using the Assistants API, we have to use the
following moving pieces:&nbsp;</p>
<div>
  <ul style="text-align: left;">
    <li>
      First, we need to create a
      <b><span style="color: #ffa400;">Vector Store</span></b> in the Assistants
      API.
    </li>
    <li>
      Then, we need to upload files using the
      <b><span style="color: #ffa400;">Open AI File client</span></b> and add
      them to the vector store.
    </li>
    <li>
      Finally, we need to
      <b><span style="color: #ffa400;">connect the vector store to either an assistant or a thread</span></b>&nbsp;which would enable to assistant to answer questions based on the
      document.</li>
  </ul><div><br /></div>
  <div>
    For the demo code, we will be using the&nbsp;<a href="https://azure.microsoft.com/en-in/products/ai-services/openai-service" target="_blank"><span style="color: #2b00fe;">Azure OpenAI service</span></a>&nbsp;for working with the OpenAI gpt-4o model and since we will be using
    .NET code, we will need the&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.1" target="_blank"><span style="color: #2b00fe;">Azure OpenAI .NET SDK</span></a>&nbsp;as well as&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4/"><span style="color: #2b00fe;">Azure.AI.OpenAI.Assistants</span></a>&nbsp;nuget packages.</div><div><br /></div>
</div>

<div>
  <script src="https://gist.github.com/vman/3dd75f596d7443cdeb8a2dc3f9372d5b.js"></script>
  <h3 style="text-align: left;">
    <span style="background-color: white; color: #38761d;">Limitations</span>
  </h3>
  <div style="text-align: left;"><br /></div><div style="text-align: left;">
    As per
    <a href="https://platform.openai.com/docs/assistants/tools/file-search" target="_blank"><span style="color: #2b00fe;">OpenAI docs</span></a>, there are some limitations for the file search tool:
  </div>
  <div style="text-align: left;"><br /></div>
  <div style="text-align: left;">
    <ul style="text-align: left;">
      <li>Each vector store can hold up to 10,000 files.</li>
      <li>
        The maximum file size of a file which can be uploaded is 512 MB. Each
        file should contain no more than 5,000,000 tokens per file (computed
        automatically when you attach a file).
      </li>
    </ul>
  </div>
  <div style="text-align: left;"><br /></div>
  <div style="text-align: left;">
    When querying for the documents in the vector store, we have to be aware of
    the following things which are not possible right now. However, the OpenAI
    team are working on this and some of these features will be available soon:
  </div>
  <div style="text-align: left;">
    <span style="font-weight: normal;"><br /></span>
  </div>
  <div style="text-align: left;">
    <ul style="text-align: left;">
      <li>
        <span style="font-weight: normal;">Support for deterministic pre-search filtering using custom
          metadata.</span>
      </li>
      <li>
        <span style="font-weight: normal;">Support for parsing images within documents (including images of
          charts, graphs, tables etc.)</span>
      </li>
      <li>
        <span style="font-weight: normal;">Support for retrievals over structured file formats (like csv or
          jsonl).</span>
      </li>
      <li>
        <span style="font-weight: normal;">Better support for summarization &#8212; the tool today is optimized for
          search queries.</span>
      </li>
    </ul>
  </div>
  <div style="text-align: left;">
    <span style="font-weight: normal;"><br /></span>
  </div>
  <div style="text-align: left;">
    <span style="font-weight: normal;">Current supported files types can be found in the
      <a href="https://platform.openai.com/docs/assistants/tools/file-search/supported-files" target="_blank"><span style="color: #2b00fe;">OpenAI docs</span></a></span>
  </div><div style="text-align: left;"><br /></div><div style="text-align: left;">Hope this helps!</div>
</div>
<br />
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2024-10-14T04:30:00+01:00'>4:30 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/7504094186511594233' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/7504094186511594233' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=7504094186511594233&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=7504094186511594233&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=7504094186511594233&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=7504094186511594233&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=7504094186511594233&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=7504094186511594233&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Azure%20OpenAI%20Service' rel='tag'>Azure OpenAI Service</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI' rel='tag'>OpenAI</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI%20Assistants' rel='tag'>OpenAI Assistants</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

          </div></div>
        

          <div class="date-outer">
        
<h2 class='date-header'><span>Monday, 7 October 2024</span></h2>

          <div class="date-posts">
        
<div class='post-outer'>
<div class='post hentry uncustomized-post-template' itemprop='blogPost' itemscope='itemscope' itemtype='http://schema.org/BlogPosting'>
<meta content='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg55YifOTO0wmPllJ5W79jDgkfTK5bgW1t0mb0zzGVEPLNW20W5aXIs7LAZq1ddmmIBvcECDSF0T6-5ubFTf24v2OelfyeE70-C1l-KebsTYThqQlHBF7lNN56j-ASQPPICNZLPECc_S0YVATo-mE_wSYdp2JbaBYF6bQ-g6Z4GVMPoKvkoqbSeVMYobTA/w640-h640/ai%20assistant,%20casual%20drawing,%20no%20robts.jpg' itemprop='image_url'/>
<meta content='4455058894110083658' itemprop='blogId'/>
<meta content='5675090658771090610' itemprop='postId'/>
<a name='5675090658771090610'></a>
<h3 class='post-title entry-title' itemprop='name'>
<a href='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html'>Working with OpenAI Assistants: Create a simple assistant</a>
</h3>
<div class='post-header'>
<div class='post-header-line-1'></div>
</div>
<div class='post-body entry-content' id='post-body-5675090658771090610' itemprop='description articleBody'>
<p>
  With
  <a href="https://platform.openai.com/docs/assistants/overview" target="_blank"><span style="color: #2b00fe;">OpenAI's recently released Assistants API</span></a>, building AI bots becomes a lot easier. Using the API, an assistant can leverage
  custom instructions, files and tools (previously called functions) and answer
  user questions based on them.
</p>
<p>
  Before the Assistants API, building such assistants was possible but for a lot
  of things, we had to use our own services e.g. vector storage for file search,
  database for maintaining chat history etc.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg55YifOTO0wmPllJ5W79jDgkfTK5bgW1t0mb0zzGVEPLNW20W5aXIs7LAZq1ddmmIBvcECDSF0T6-5ubFTf24v2OelfyeE70-C1l-KebsTYThqQlHBF7lNN56j-ASQPPICNZLPECc_S0YVATo-mE_wSYdp2JbaBYF6bQ-g6Z4GVMPoKvkoqbSeVMYobTA/s1024/ai%20assistant,%20casual%20drawing,%20no%20robts.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg55YifOTO0wmPllJ5W79jDgkfTK5bgW1t0mb0zzGVEPLNW20W5aXIs7LAZq1ddmmIBvcECDSF0T6-5ubFTf24v2OelfyeE70-C1l-KebsTYThqQlHBF7lNN56j-ASQPPICNZLPECc_S0YVATo-mE_wSYdp2JbaBYF6bQ-g6Z4GVMPoKvkoqbSeVMYobTA/w640-h640/ai%20assistant,%20casual%20drawing,%20no%20robts.jpg" width="640" /></a></div><p>The Assistants API gives us a handy wrapper on top of all these disparate
services and a single endpoint to work with. So in this series of posts, let's
have a look at what the Assistants API can do.</p><p></p>
<p style="text-align: left;">
  <span style="color: #2b00fe;"><b>
      Working with OpenAI Assistants: Create a simple assistant</b></span>
  <span style="font-weight: normal;">(this post) </span>
</p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/10/working-with-openai-assistants-api_14.html" target="_blank">Working with OpenAI Assistants: Using file search</a></b></span></p>
<p>
  <span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-chat.html" target="_blank">Working with OpenAI Assistants: Chat with Excel files using code interpreter</a></b></span></p><p><span style="color: #2b00fe;"><b><a href="https://www.vrdmn.com/2024/11/working-with-openai-assistants-using.html" target="_blank">Working with OpenAI Assistants: Using code interpreter to generate charts</a></b></span></p>
<p>
  The first thing we are going to do is build a simple assistant which has a
  "SharePoint Tutor" personality. It will be used to answer questions for users
  who are learning to use SharePoint. Before deep diving into the code, lets
  understand the different moving pieces of the Assistants API:&nbsp;
</p>
<p>
  An <span style="color: #ffa400;"><b>assistant</b></span> is a container in
  which all operations between the AI and the user are managed.
</p>
<p>
  A <b><span style="color: #ffa400;">thread</span></b> is a list of messages
  which were exchanged between the user and AI. The thread is also responsible for maintaining the conversation history.
</p>
<p>
  A <b><span style="color: #ffa400;">run</span></b> is a single invocation of an
  assistant based on the history in the thread as well as the tools available to
  the assistant. After a run is executed, new messages are generated and added
  to the thread.
</p><p>For the demo code, we will be using the <a href="https://azure.microsoft.com/en-in/products/ai-services/openai-service" target="_blank"><span style="color: #2b00fe;">Azure OpenAI service</span></a> for working with the OpenAI gpt-4o model and since we will be using .NET code, we will need the&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI/2.1.0-beta.1" target="_blank"><span style="color: #2b00fe;">Azure OpenAI .NET SDK</span></a>&nbsp;as well as&nbsp;<a href="https://www.nuget.org/packages/Azure.AI.OpenAI.Assistants/1.0.0-beta.4/"><span style="color: #2b00fe;">Azure.AI.OpenAI.Assistants</span></a>&nbsp;nuget packages.</p>
<script src="https://gist.github.com/vman/a6c059d64219fb6292a6ad5156b0f530.js"></script>
This was a simple assistant creation just to get us familiar with the Assitants
API. In the next posts, we will dive deeper into the API and explore the more
advanced concepts. Stay tuned!
<br />
<div style='clear: both;'></div>
</div>
<div class='post-footer'>
<div class='post-footer-line post-footer-line-1'>
<span class='post-author vcard'>
Posted by
<span class='fn' itemprop='author' itemscope='itemscope' itemtype='http://schema.org/Person'>
<meta content='https://www.blogger.com/profile/17919845281919756108' itemprop='url'/>
<a class='g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' title='author profile'>
<span itemprop='name'>Vardhaman Deshpande</span>
</a>
</span>
</span>
<span class='post-timestamp'>
at
<meta content='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html' itemprop='url'/>
<a class='timestamp-link' href='https://www.vrdmn.com/2024/10/working-with-openai-assistants-api.html' rel='bookmark' title='permanent link'><abbr class='published' itemprop='datePublished' title='2024-10-07T09:51:00+01:00'>9:51 am</abbr></a>
</span>
<span class='post-comment-link'>
<a class='comment-link' href='https://www.blogger.com/comment/fullpage/post/4455058894110083658/5675090658771090610' onclick=''>
No comments:
  </a>
</span>
<span class='post-icons'>
<span class='item-action'>
<a href='https://www.blogger.com/email-post/4455058894110083658/5675090658771090610' title='Email Post'>
<img alt='' class='icon-action' height='13' src='https://resources.blogblog.com/img/icon18_email.gif' width='18'/>
</a>
</span>
<span class='item-control blog-admin pid-1694440003'>
<a href='https://www.blogger.com/post-edit.g?blogID=4455058894110083658&postID=5675090658771090610&from=pencil' title='Edit Post'>
<img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18'/>
</a>
</span>
</span>
<div class='post-share-buttons goog-inline-block'>
<a class='goog-inline-block share-button sb-email' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=5675090658771090610&target=email' target='_blank' title='Email This'><span class='share-button-link-text'>Email This</span></a><a class='goog-inline-block share-button sb-blog' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=5675090658771090610&target=blog' onclick='window.open(this.href, "_blank", "height=270,width=475"); return false;' target='_blank' title='BlogThis!'><span class='share-button-link-text'>BlogThis!</span></a><a class='goog-inline-block share-button sb-twitter' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=5675090658771090610&target=twitter' target='_blank' title='Share to X'><span class='share-button-link-text'>Share to X</span></a><a class='goog-inline-block share-button sb-facebook' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=5675090658771090610&target=facebook' onclick='window.open(this.href, "_blank", "height=430,width=640"); return false;' target='_blank' title='Share to Facebook'><span class='share-button-link-text'>Share to Facebook</span></a><a class='goog-inline-block share-button sb-pinterest' href='https://www.blogger.com/share-post.g?blogID=4455058894110083658&postID=5675090658771090610&target=pinterest' target='_blank' title='Share to Pinterest'><span class='share-button-link-text'>Share to Pinterest</span></a>
</div>
</div>
<div class='post-footer-line post-footer-line-2'>
<span class='post-labels'>
Labels:
<a href='https://www.vrdmn.com/search/label/Azure%20OpenAI%20Service' rel='tag'>Azure OpenAI Service</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI' rel='tag'>OpenAI</a>,
<a href='https://www.vrdmn.com/search/label/OpenAI%20Assistants' rel='tag'>OpenAI Assistants</a>
</span>
</div>
<div class='post-footer-line post-footer-line-3'>
<span class='post-location'>
</span>
</div>
</div>
</div>
</div>

        </div></div>
      
</div>
<div class='blog-pager' id='blog-pager'>
<span id='blog-pager-older-link'>
<a class='blog-pager-older-link' href='https://www.vrdmn.com/search?updated-max=2024-10-07T09:51:00%2B01:00&max-results=7' id='Blog1_blog-pager-older-link' title='Older Posts'>Older Posts</a>
</span>
<a class='home-link' href='https://www.vrdmn.com/'>Home</a>
</div>
<div class='clear'></div>
<div class='blog-feeds'>
<div class='feed-links'>
Subscribe to:
<a class='feed-link' href='https://www.vrdmn.com/feeds/posts/default' target='_blank' type='application/atom+xml'>Posts (Atom)</a>
</div>
</div>
</div></div>
</div>
</div>
<div class='column-left-outer'>
<div class='column-left-inner'>
<aside>
</aside>
</div>
</div>
<div class='column-right-outer'>
<div class='column-right-inner'>
<aside>
<div class='sidebar section' id='sidebar-right-1'><div class='widget BlogSearch' data-version='1' id='BlogSearch1'>
<h2 class='title'>Search This Blog</h2>
<div class='widget-content'>
<div id='BlogSearch1_form'>
<form action='https://www.vrdmn.com/search' class='gsc-search-box' target='_top'>
<table cellpadding='0' cellspacing='0' class='gsc-search-box'>
<tbody>
<tr>
<td class='gsc-input'>
<input autocomplete='off' class='gsc-input' name='q' size='10' title='search' type='text' value=''/>
</td>
<td class='gsc-search-button'>
<input class='gsc-search-button' title='search' type='submit' value='Search'/>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
<div class='clear'></div>
</div><div class='widget Image' data-version='1' id='Image1'>
<div class='widget-content'>
<img alt='' height='74' id='Image1_img' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhmNdxO3gDwHERWIpg-2W_vq-j-BVTOMS026geo7BTVWs5IPCnzP6be3C7FdovkAB_6opWVoQVxxRlxXSG_Cugl_uBv5Fo_k8MS9cjhSDOu3BvU1XqCClAL9pjWGl2NkhZ2UTqEJIao5c/s1600/MVP_Logo_Horizontal_Preferred_Cyan300_CMYK_72ppi.png' width='181'/>
<br/>
</div>
<div class='clear'></div>
</div><div class='widget HTML' data-version='1' id='HTML1'>
<div class='widget-content'>
<a href="http://sharepoint.stackexchange.com/users/3221/vardhaman-deshpande">
<img src="https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_su1nmPq9Zl-SjgYm1oCm6h3zb5Y3vFJ22lxjF18OxqQS4sKDErbJjUYTohuZT_4zAwiK53ks2Z7SpotIv1eHiYfBe7mEXUlJN7A3oRjMieHHhK_59QaKxC4mCk=s0-d" width="208" height="58" alt="profile for Vardhaman Deshpande at SharePoint, Q&amp;A for SharePoint enthusiasts" title="profile for Vardhaman Deshpande at SharePoint, Q&amp;A for SharePoint enthusiasts">
</a>
<br />
<br />
<a href="https://twitter.com/vrdmn" class="twitter-follow-button" data-show-count="false">Follow @vrdmn</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
</div>
<div class='clear'></div>
</div><div class='widget Text' data-version='1' id='Text1'>
<div class='widget-content'>
<span style="font-family: verdana; font-size: 8pt;color:#BB3333;"><b>v uh r dha m aa n</b></span><span style="font-family: Arial; font-size: 12px;"> </span><br style="font-family: Arial; font-size: 12px;" /><br style="font-family: Arial; font-size: 12px;" /><table border="0" cellpadding="0" cellspacing="0" style="font-family: Arial;"><tbody><tr><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>v</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>uh</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>r</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>dha</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>m</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>aa</b></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;" width="20"><b>n</b></td></tr><tr><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">v</span>ery</span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">u</span>p</span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">r</span>at</span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">the</span></span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">m</span>e</span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;">c<span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">a</span>r</span></td><td align="center" class="td_bck_keys1" nowrap="" style="background-color: #eeeeee; border-color: rgb(255, 255, 255) rgb(153, 153, 153) rgb(153, 153, 153) rgb(255, 255, 255); border-style: solid; border-width: 1px; color: #bb3333; font-family: verdana; font-size: 8pt; letter-spacing: 0.1em; padding: 5px;"><span style="color:#000000;"><span class="data_key" style="color: #bb3333; font-size: 8pt; font-weight: bold;">n</span>o</span></td></tr></tbody></table>
</div>
<div class='clear'></div>
</div><div class='widget Subscribe' data-version='1' id='Subscribe2'>
<div style='white-space:nowrap'>
<h2 class='title'>Subscribe To</h2>
<div class='widget-content'>
<div class='subscribe-wrapper subscribe-type-POST'>
<div class='subscribe expanded subscribe-type-POST' id='SW_READER_LIST_Subscribe2POST' style='display:none;'>
<div class='top'>
<span class='inner' onclick='return(_SW_toggleReaderList(event, "Subscribe2POST"));'>
<img class='subscribe-dropdown-arrow' src='https://resources.blogblog.com/img/widgets/arrow_dropdown.gif'/>
<img align='absmiddle' alt='' border='0' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
Posts
</span>
<div class='feed-reader-links'>
<a class='feed-reader-link' href='https://www.netvibes.com/subscribe.php?url=https%3A%2F%2Fwww.vrdmn.com%2Ffeeds%2Fposts%2Fdefault' target='_blank'>
<img src='https://resources.blogblog.com/img/widgets/subscribe-netvibes.png'/>
</a>
<a class='feed-reader-link' href='https://add.my.yahoo.com/content?url=https%3A%2F%2Fwww.vrdmn.com%2Ffeeds%2Fposts%2Fdefault' target='_blank'>
<img src='https://resources.blogblog.com/img/widgets/subscribe-yahoo.png'/>
</a>
<a class='feed-reader-link' href='https://www.vrdmn.com/feeds/posts/default' target='_blank'>
<img align='absmiddle' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
                  Atom
                </a>
</div>
</div>
<div class='bottom'></div>
</div>
<div class='subscribe' id='SW_READER_LIST_CLOSED_Subscribe2POST' onclick='return(_SW_toggleReaderList(event, "Subscribe2POST"));'>
<div class='top'>
<span class='inner'>
<img class='subscribe-dropdown-arrow' src='https://resources.blogblog.com/img/widgets/arrow_dropdown.gif'/>
<span onclick='return(_SW_toggleReaderList(event, "Subscribe2POST"));'>
<img align='absmiddle' alt='' border='0' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
Posts
</span>
</span>
</div>
<div class='bottom'></div>
</div>
</div>
<div class='subscribe-wrapper subscribe-type-COMMENT'>
<div class='subscribe expanded subscribe-type-COMMENT' id='SW_READER_LIST_Subscribe2COMMENT' style='display:none;'>
<div class='top'>
<span class='inner' onclick='return(_SW_toggleReaderList(event, "Subscribe2COMMENT"));'>
<img class='subscribe-dropdown-arrow' src='https://resources.blogblog.com/img/widgets/arrow_dropdown.gif'/>
<img align='absmiddle' alt='' border='0' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
All Comments
</span>
<div class='feed-reader-links'>
<a class='feed-reader-link' href='https://www.netvibes.com/subscribe.php?url=https%3A%2F%2Fwww.vrdmn.com%2Ffeeds%2Fcomments%2Fdefault' target='_blank'>
<img src='https://resources.blogblog.com/img/widgets/subscribe-netvibes.png'/>
</a>
<a class='feed-reader-link' href='https://add.my.yahoo.com/content?url=https%3A%2F%2Fwww.vrdmn.com%2Ffeeds%2Fcomments%2Fdefault' target='_blank'>
<img src='https://resources.blogblog.com/img/widgets/subscribe-yahoo.png'/>
</a>
<a class='feed-reader-link' href='https://www.vrdmn.com/feeds/comments/default' target='_blank'>
<img align='absmiddle' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
                  Atom
                </a>
</div>
</div>
<div class='bottom'></div>
</div>
<div class='subscribe' id='SW_READER_LIST_CLOSED_Subscribe2COMMENT' onclick='return(_SW_toggleReaderList(event, "Subscribe2COMMENT"));'>
<div class='top'>
<span class='inner'>
<img class='subscribe-dropdown-arrow' src='https://resources.blogblog.com/img/widgets/arrow_dropdown.gif'/>
<span onclick='return(_SW_toggleReaderList(event, "Subscribe2COMMENT"));'>
<img align='absmiddle' alt='' border='0' class='feed-icon' src='https://resources.blogblog.com/img/icon_feed12.png'/>
All Comments
</span>
</span>
</div>
<div class='bottom'></div>
</div>
</div>
<div style='clear:both'></div>
</div>
</div>
<div class='clear'></div>
</div><div class='widget BlogArchive' data-version='1' id='BlogArchive1'>
<h2>Blog Archive</h2>
<div class='widget-content'>
<div id='ArchiveList'>
<div id='BlogArchive1_ArchiveList'>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>

        &#9660;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2025/'>
2025
</a>
<span class='post-count' dir='ltr'>(2)</span>
<ul class='hierarchy'>
<li class='archivedate expanded'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy toggle-open'>

        &#9660;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2025/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
<ul class='posts'>
<li><a href='https://www.vrdmn.com/2025/02/building-agent-for-microsoft-365.html'>Building an Agent for Microsoft 365 Copilot: Addin...</a></li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2025/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/'>
2024
</a>
<span class='post-count' dir='ltr'>(9)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/11/'>
November
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/10/'>
October
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2024/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2023/'>
2023
</a>
<span class='post-count' dir='ltr'>(5)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2023/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2023/11/'>
November
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2023/10/'>
October
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/'>
2022
</a>
<span class='post-count' dir='ltr'>(5)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2022/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2021/'>
2021
</a>
<span class='post-count' dir='ltr'>(7)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2021/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2021/11/'>
November
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2021/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2021/01/'>
January
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/'>
2020
</a>
<span class='post-count' dir='ltr'>(10)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/06/'>
June
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/05/'>
May
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/04/'>
April
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/02/'>
February
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2020/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/'>
2019
</a>
<span class='post-count' dir='ltr'>(12)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/10/'>
October
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/09/'>
September
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/04/'>
April
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/03/'>
March
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2019/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/'>
2018
</a>
<span class='post-count' dir='ltr'>(13)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/10/'>
October
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/08/'>
August
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/05/'>
May
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/04/'>
April
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/02/'>
February
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2018/01/'>
January
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/'>
2017
</a>
<span class='post-count' dir='ltr'>(15)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/07/'>
July
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/05/'>
May
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/04/'>
April
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2017/01/'>
January
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/'>
2016
</a>
<span class='post-count' dir='ltr'>(17)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/10/'>
October
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/09/'>
September
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/08/'>
August
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/06/'>
June
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/05/'>
May
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2016/03/'>
March
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/'>
2015
</a>
<span class='post-count' dir='ltr'>(20)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/11/'>
November
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/08/'>
August
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/05/'>
May
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/04/'>
April
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/03/'>
March
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2015/01/'>
January
</a>
<span class='post-count' dir='ltr'>(8)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/'>
2014
</a>
<span class='post-count' dir='ltr'>(11)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/11/'>
November
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/09/'>
September
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/05/'>
May
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2014/03/'>
March
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/'>
2013
</a>
<span class='post-count' dir='ltr'>(13)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/11/'>
November
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/10/'>
October
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/07/'>
July
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/03/'>
March
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/02/'>
February
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2013/01/'>
January
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/'>
2012
</a>
<span class='post-count' dir='ltr'>(18)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/12/'>
December
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/11/'>
November
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/10/'>
October
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/08/'>
August
</a>
<span class='post-count' dir='ltr'>(3)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/05/'>
May
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/04/'>
April
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2012/01/'>
January
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/'>
2011
</a>
<span class='post-count' dir='ltr'>(12)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/09/'>
September
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/08/'>
August
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/07/'>
July
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/06/'>
June
</a>
<span class='post-count' dir='ltr'>(1)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/05/'>
May
</a>
<span class='post-count' dir='ltr'>(2)</span>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2011/04/'>
April
</a>
<span class='post-count' dir='ltr'>(5)</span>
</li>
</ul>
</li>
</ul>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2008/'>
2008
</a>
<span class='post-count' dir='ltr'>(4)</span>
<ul class='hierarchy'>
<li class='archivedate collapsed'>
<a class='toggle' href='javascript:void(0)'>
<span class='zippy'>

        &#9658;&#160;
      
</span>
</a>
<a class='post-count-link' href='https://www.vrdmn.com/2008/08/'>
August
</a>
<span class='post-count' dir='ltr'>(4)</span>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class='clear'></div>
</div>
</div><div class='widget Profile' data-version='1' id='Profile1'>
<h2>About Me</h2>
<div class='widget-content'>
<a href='https://www.blogger.com/profile/17919845281919756108'><img alt='My photo' class='profile-img' height='80' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOiqwMV3TBW0PEeA5Qveu4fEVaZAteoGbqsfkpCXTsZ9_MhkSSxu16cQ93-mhduSReXQ5ullKLczJjHYeXJKeXhvzi5gK5OO7z06yAjEeM9Mz8Hjxn7a_cvd-x-u9H0Cc/s220/20200222_131723913_iOS+%282%29.jpg' width='64'/></a>
<dl class='profile-datablock'>
<dt class='profile-data'>
<a class='profile-name-link g-profile' href='https://www.blogger.com/profile/17919845281919756108' rel='author' style='background-image: url(//www.blogger.com/img/logo-16.png);'>
Vardhaman Deshpande
</a>
</dt>
<dd class='profile-textblock'>Technical Architect</dd>
</dl>
<a class='profile-link' href='https://www.blogger.com/profile/17919845281919756108' rel='author'>View my complete profile</a>
<div class='clear'></div>
</div>
</div></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='sidebar no-items section' id='sidebar-right-2-1'></div>
</td>
<td class='columns-cell'>
<div class='sidebar no-items section' id='sidebar-right-2-2'></div>
</td>
</tr>
</tbody>
</table>
<div class='sidebar no-items section' id='sidebar-right-3'></div>
</aside>
</div>
</div>
</div>
<div style='clear: both'></div>
<!-- columns -->
</div>
<!-- main -->
</div>
</div>
<div class='main-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
<footer>
<div class='footer-outer'>
<div class='footer-cap-top cap-top'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
<div class='fauxborder-left footer-fauxborder-left'>
<div class='fauxborder-right footer-fauxborder-right'></div>
<div class='region-inner footer-inner'>
<div class='foot no-items section' id='footer-1'></div>
<table border='0' cellpadding='0' cellspacing='0' class='section-columns columns-2'>
<tbody>
<tr>
<td class='first columns-cell'>
<div class='foot no-items section' id='footer-2-1'></div>
</td>
<td class='columns-cell'>
<div class='foot no-items section' id='footer-2-2'></div>
</td>
</tr>
</tbody>
</table>
<!-- outside of the include in order to lock Attribution widget -->
<div class='foot section' id='footer-3' name='Footer'><div class='widget Attribution' data-version='1' id='Attribution1'>
<div class='widget-content' style='text-align: center;'>
Simple theme. Powered by <a href='https://www.blogger.com' target='_blank'>Blogger</a>.
</div>
<div class='clear'></div>
</div></div>
</div>
</div>
<div class='footer-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</footer>
<!-- content -->
</div>
</div>
<div class='content-cap-bottom cap-bottom'>
<div class='cap-left'></div>
<div class='cap-right'></div>
</div>
</div>
</div>
<script type='text/javascript'>
    window.setTimeout(function() {
        document.body.className = document.body.className.replace('loading', '');
      }, 10);
  </script>
<!--Es liegt in deiner Verantwortung, deine Besucher \xfcber die in deinem Blog verwendeten Cookies und die dort erfassten Daten zu informieren. Blogger stellt daf\xfcr eine Standardbenachrichtigung zur Verf\xfcgung, die du \xfcbernehmen, anpassen oder durch deine eigene Mitteilung ersetzen kannst. Weitere Informationen findest du unter http://www.blogger.com/go/cookiechoices.-->
<script defer='' src='/js/cookienotice.js'></script>
<script>
    document.addEventListener('DOMContentLoaded', function(event) {
      window.cookieChoices && cookieChoices.showCookieConsentBar && cookieChoices.showCookieConsentBar(
          (window.cookieOptions && cookieOptions.msg) || 'Diese Website verwendet Cookies von Google, um Dienste anzubieten und Zugriffe zu analysieren. Deine IP-Adresse und dein User-Agent werden zusammen mit Messwerten zur Leistung und Sicherheit f\xfcr Google freigegeben. So k\xf6nnen Nutzungsstatistiken generiert, Missbrauchsf\xe4lle erkannt und behoben und die Qualit\xe4t des Dienstes gew\xe4hrleistet werden.',
          (window.cookieOptions && cookieOptions.close) || 'Ok',
          (window.cookieOptions && cookieOptions.learn) || 'Weitere Informationen',
          (window.cookieOptions && cookieOptions.link) || 'https://www.blogger.com/go/blogspot-cookies');
    });
  </script>

<script type="text/javascript" src="https://www.blogger.com/static/v1/widgets/3443796911-widgets.js"></script>
<script type='text/javascript'>
window['__wavt'] = 'AOuZoY7BR2Sl62yG4OP-Iv1pUHCMkVZvkw:1748169042262';_WidgetManager._Init('//www.blogger.com/rearrange?blogID\x3d4455058894110083658','//www.vrdmn.com/','4455058894110083658');
_WidgetManager._SetDataContext([{'name': 'blog', 'data': {'blogId': '4455058894110083658', 'title': 'Vardhaman Deshpande', 'url': 'https://www.vrdmn.com/', 'canonicalUrl': 'https://www.vrdmn.com/', 'homepageUrl': 'https://www.vrdmn.com/', 'searchUrl': 'https://www.vrdmn.com/search', 'canonicalHomepageUrl': 'https://www.vrdmn.com/', 'blogspotFaviconUrl': 'https://www.vrdmn.com/favicon.ico', 'bloggerUrl': 'https://www.blogger.com', 'hasCustomDomain': true, 'httpsEnabled': true, 'enabledCommentProfileImages': true, 'gPlusViewType': 'FILTERED_POSTMOD', 'adultContent': false, 'analyticsAccountNumber': 'UA-116352066-1', 'encoding': 'UTF-8', 'locale': 'en-GB', 'localeUnderscoreDelimited': 'en_gb', 'languageDirection': 'ltr', 'isPrivate': false, 'isMobile': false, 'isMobileRequest': false, 'mobileClass': '', 'isPrivateBlog': false, 'isDynamicViewsAvailable': true, 'feedLinks': '\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Vardhaman Deshpande - Atom\x22 href\x3d\x22https://www.vrdmn.com/feeds/posts/default\x22 /\x3e\n\x3clink rel\x3d\x22alternate\x22 type\x3d\x22application/rss+xml\x22 title\x3d\x22Vardhaman Deshpande - RSS\x22 href\x3d\x22https://www.vrdmn.com/feeds/posts/default?alt\x3drss\x22 /\x3e\n\x3clink rel\x3d\x22service.post\x22 type\x3d\x22application/atom+xml\x22 title\x3d\x22Vardhaman Deshpande - Atom\x22 href\x3d\x22https://www.blogger.com/feeds/4455058894110083658/posts/default\x22 /\x3e\n', 'meTag': '\x3clink rel\x3d\x22me\x22 href\x3d\x22https://www.blogger.com/profile/17919845281919756108\x22 /\x3e\n', 'adsenseClientId': 'ca-pub-5904494154346417', 'adsenseHostId': 'ca-host-pub-1556223355139109', 'adsenseHasAds': false, 'adsenseAutoAds': false, 'boqCommentIframeForm': true, 'loginRedirectParam': '', 'view': '', 'dynamicViewsCommentsSrc': '//www.blogblog.com/dynamicviews/4224c15c4e7c9321/js/comments.js', 'dynamicViewsScriptSrc': '//www.blogblog.com/dynamicviews/c236f21b43443911', 'plusOneApiSrc': 'https://apis.google.com/js/platform.js', 'disableGComments': true, 'interstitialAccepted': false, 'sharing': {'platforms': [{'name': 'Get link', 'key': 'link', 'shareMessage': 'Get link', 'target': ''}, {'name': 'Facebook', 'key': 'facebook', 'shareMessage': 'Share to Facebook', 'target': 'facebook'}, {'name': 'BlogThis!', 'key': 'blogThis', 'shareMessage': 'BlogThis!', 'target': 'blog'}, {'name': 'X', 'key': 'twitter', 'shareMessage': 'Share to X', 'target': 'twitter'}, {'name': 'Pinterest', 'key': 'pinterest', 'shareMessage': 'Share to Pinterest', 'target': 'pinterest'}, {'name': 'Email', 'key': 'email', 'shareMessage': 'Email', 'target': 'email'}], 'disableGooglePlus': true, 'googlePlusShareButtonWidth': 0, 'googlePlusBootstrap': '\x3cscript type\x3d\x22text/javascript\x22\x3ewindow.___gcfg \x3d {\x27lang\x27: \x27en_GB\x27};\x3c/script\x3e'}, 'hasCustomJumpLinkMessage': false, 'jumpLinkMessage': 'Read more', 'pageType': 'index', 'pageName': '', 'pageTitle': 'Vardhaman Deshpande'}}, {'name': 'features', 'data': {}}, {'name': 'messages', 'data': {'edit': 'Edit', 'linkCopiedToClipboard': 'Link copied to clipboard', 'ok': 'Ok', 'postLink': 'Post link'}}, {'name': 'template', 'data': {'name': 'Simple', 'localizedName': 'Simple', 'isResponsive': false, 'isAlternateRendering': false, 'isCustom': false, 'variant': 'simplysimple', 'variantId': 'simplysimple'}}, {'name': 'view', 'data': {'classic': {'name': 'classic', 'url': '?view\x3dclassic'}, 'flipcard': {'name': 'flipcard', 'url': '?view\x3dflipcard'}, 'magazine': {'name': 'magazine', 'url': '?view\x3dmagazine'}, 'mosaic': {'name': 'mosaic', 'url': '?view\x3dmosaic'}, 'sidebar': {'name': 'sidebar', 'url': '?view\x3dsidebar'}, 'snapshot': {'name': 'snapshot', 'url': '?view\x3dsnapshot'}, 'timeslide': {'name': 'timeslide', 'url': '?view\x3dtimeslide'}, 'isMobile': false, 'title': 'Vardhaman Deshpande', 'description': 'Focusworks AI for Microsoft Teams - Chat with your business data \x3ca href\x3d\x22https://focusworks.ai/\x22\x3ehttps://focusworks.ai/\x3c/a\x3e', 'url': 'https://www.vrdmn.com/', 'type': 'feed', 'isSingleItem': false, 'isMultipleItems': true, 'isError': false, 'isPage': false, 'isPost': false, 'isHomepage': true, 'isArchive': false, 'isLabelSearch': false}}]);
_WidgetManager._RegisterWidget('_NavbarView', new _WidgetInfo('Navbar1', 'navbar', document.getElementById('Navbar1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HeaderView', new _WidgetInfo('Header1', 'header', document.getElementById('Header1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_PageListView', new _WidgetInfo('PageList1', 'crosscol', document.getElementById('PageList1'), {'title': '', 'links': [{'isCurrentPage': true, 'href': 'https://www.vrdmn.com/', 'title': 'Home'}, {'isCurrentPage': false, 'href': 'https://www.vrdmn.com/search/label/Microsoft%20Azure', 'title': 'Microsoft Azure'}, {'isCurrentPage': false, 'href': 'https://www.vrdmn.com/search/label/Front%20end', 'title': 'Front end'}], 'mobile': false, 'showPlaceholder': true, 'hasCurrentPage': true}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogView', new _WidgetInfo('Blog1', 'main', document.getElementById('Blog1'), {'cmtInteractionsEnabled': false, 'lightboxEnabled': true, 'lightboxModuleUrl': 'https://www.blogger.com/static/v1/jsbin/2214118840-lbx__en_gb.js', 'lightboxCssUrl': 'https://www.blogger.com/static/v1/v-css/3681588378-lightbox_bundle.css'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogSearchView', new _WidgetInfo('BlogSearch1', 'sidebar-right-1', document.getElementById('BlogSearch1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_ImageView', new _WidgetInfo('Image1', 'sidebar-right-1', document.getElementById('Image1'), {'resize': false}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML1', 'sidebar-right-1', document.getElementById('HTML1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_TextView', new _WidgetInfo('Text1', 'sidebar-right-1', document.getElementById('Text1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_SubscribeView', new _WidgetInfo('Subscribe2', 'sidebar-right-1', document.getElementById('Subscribe2'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_BlogArchiveView', new _WidgetInfo('BlogArchive1', 'sidebar-right-1', document.getElementById('BlogArchive1'), {'languageDirection': 'ltr', 'loadingMessage': 'Loading\x26hellip;'}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_ProfileView', new _WidgetInfo('Profile1', 'sidebar-right-1', document.getElementById('Profile1'), {}, 'displayModeFull'));
_WidgetManager._RegisterWidget('_AttributionView', new _WidgetInfo('Attribution1', 'footer-3', document.getElementById('Attribution1'), {}, 'displayModeFull'));
</script>
</body>
</html>                               

Alan adının whois bilgisi

Domain Name: VRDMN.COM
Registry Domain ID: 1819007487_DOMAIN_COM-VRSN
Registrar WHOIS Server: Whois.bigrock.com
Registrar URL: http://www.bigrock.com
Updated Date: 2020-03-15T23:06:27Z
Creation Date: 2013-08-01T06:45:10Z
Registry Expiry Date: 2029-08-01T06:45:10Z
Registrar: BigRock Solutions Ltd
Registrar IANA ID: 1495
Registrar Abuse Contact Email: [email protected]
Registrar Abuse Contact Phone: +1.832-295-1535
Domain Status: clientTransferProhibited https://icann.org/epp#clientTransferProhibited
Name Server: DNS1.BIGROCK.IN
Name Server: DNS2.BIGROCK.IN
Name Server: DNS3.BIGROCK.IN
Name Server: DNS4.BIGROCK.IN
DNSSEC: unsigned
URL of the ICANN Whois Inaccuracy Complaint Form: https://www.icann.org/wicf/
>>> Last update of whois database: 2025-05-25T10:30:29Z <<<
For more information on Whois status codes, please visit https://icann.org/epp
NOTICE: The expiration date displayed in this record is the date the
TERMS OF USE: You are not authorized to access or query our Whois
by the following terms of use: You agree that you may use this Data only
to: (1) allow, enable, or otherwise support the transmission of mass