{"id":3705,"date":"2023-12-31T18:42:00","date_gmt":"2024-01-01T02:42:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/surface-duo\/?p=3705"},"modified":"2024-01-03T16:04:06","modified_gmt":"2024-01-04T00:04:06","slug":"2023-year-in-review","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/surface-duo\/2023-year-in-review\/","title":{"rendered":"2023 year in review"},"content":{"rendered":"<p>\n  Hello Android developers,\n<\/p>\n<p>\n  2023 was the year that machine learning and artificial intelligence really became mainstream, and we covered both topics with a focus on Android implementations. We published series on using the ONNX machine learning runtime, building Android apps with Microsoft Graph, and tutorials for Jetpack Compose developers! Take a look back at all the best posts from 2023\u2026\n<\/p>\n<h2>OpenAI on Android<\/h2>\n<p>\n  The blog focused heavily on working with OpenAI on Android using Kotlin, starting with some <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-3\/\">basic API access<\/a> and then building out the JetchatAI demo using a variety of techniques including embeddings, \u201cRAG\u201d (retrieval augmented generation), images, functions, and more. Here are some of our favorite posts:\n<\/p>\n<table>\n<tr>\n<td>\n<p><strong>Topic<\/strong>\n<\/p>\n<\/td>\n<td>\n<p><strong>Blog posts<\/strong>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\n  Assistants API\n<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/openai-assistants\/\">Introduction to Assistants<\/a> \n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-27\/\">Assistant API on Android<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-28\/\">Code interpreter<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-29\/\">Functions<\/a>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\n  DALL*E image generation\n<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-26\/\">DALL*E 3 image generation on Android<\/a>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\n  Embeddings API\n<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-7\/\">Add embeddings to chat<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-12\/\">Vector caching (redux)<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-23\/\">More efficient embeddings<\/a>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\n  Chat API\n<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-5\/\">Add AI to the Jetchat sample<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-11\/\">Chat memory with functions<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-16\/\">Sliding chat window<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-18\/\">\u201cInfinite chat\u201d with history summarization<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-19\/\">&#8220;Infinite chat&#8221; with history embeddings<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-24\/\">Document chat<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-25\/\">Chunking for citations<\/a>\n<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p>\n  Other topics\n<\/p>\n<\/td>\n<td>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-9-functions\/\">Chat functions weather demo<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-13\/\">Dynamic SQL queries<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-14\/\">Prompt engineering tips<\/a>\n<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-15\/\">Tokens and limits<\/a>\n<\/p>\n<\/td>\n<\/tr>\n<\/table>\n<p>\n  We also talked about <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/responsible-ai-and-content-safety\/\">responsible AI<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-20\/\">speech-to-speech<\/a> conversations with AI. All these posts used the <a href=\"https:\/\/openai.com\/\">OpenAI<\/a> API but the same features are available via the <a href=\"https:\/\/azure.microsoft.com\/en-us\/products\/ai-services\/openai-service\/\">Azure OpenAI Service<\/a>.\n<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-content\/uploads\/sites\/53\/2023\/09\/a-screenshot-of-a-computer-description-automatica-1.png\" width=\"500\" \/> <\/p>\n<h2>ONNX on Android<\/h2>\n<p><a href=\"https:\/\/onnxruntime.ai\/\">ONNX runtime<\/a> is a cross-platform machine learning foundation that can be added to Android apps. There was a series of posts to get started with ONNX on Android:\n<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/onnx-machine-learning-1\/\">Get started<\/a>\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/onnx-machine-learning-2\/\">Inputs and outputs<\/a>\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/onnx-machine-learning-3\/\">Bringing models to Android<\/a>\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/onnx-machine-learning-4\/\">Built-in pre-processing<\/a>\n  <\/li>\n<\/ul>\n<p>\n  You can also use <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/flutter-onnx-runtime\/\">ONNX Runtime with Flutter<\/a>!\n<\/p>\n<h2>Microsoft Graph on Android<\/h2>\n<p><a href=\"https:\/\/learn.microsoft.com\/graph\/overview\">Microsoft Graph<\/a> provides a unified programming model to a rich data set across Microsoft applications and services, that can also be integrated into custom applications.  This series of posts showed how to authenticate with MSAL and then integrate data with a custom Android app:\n<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-msal\/\">MSAL on Android<\/a>\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/microsoft-graph-android\/\">Introduction to Microsoft Graph<\/a>\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/microsoft-graph-android-2\/\">Use Microsoft Graph on Android<\/a> \n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/microsoft-graph-android-3\/\">Sync to OneNote<\/a> using Microsoft Graph\n  <\/li>\n<\/ul>\n<h2>Jetpack Compose<\/h2>\n<p>\n  The Jetpack Compose highlight of the year was this animation series inspired by a droidcon talk:\n<\/p>\n<ul>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-animation-1\/\">Budding love<\/a> &#8211; drawing and animating simple flowers\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-animation-2\/\">Blooming love<\/a> &#8211; introducing rotation and color\n  <\/li>\n<li><a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-animation-3\/\">Blossoming love<\/a> &#8211; more complex animations and background shaders\n  <\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-content\/uploads\/sites\/53\/2023\/05\/video-to-gif-output-image-5.gif\" width=\"500\" \/><\/p>\n<p>\n  Some of these animation ideas were applied to the <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/android-openai-chatgpt-6\/\">Jetchat AI Compose sample<\/a>.\n<\/p>\n<p>\n  There was also a series on <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-relay-1\/\">Relay for Figma<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-relay-2\/\">creating styles<\/a> to <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-relay-3\/\">import designs<\/a> from Figma to your Jetpack Compose application UI.\n<\/p>\n<p>\n  And finally, some tips for foldable Android developers \u2013 a new <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/jetpack-compose-foldawarecolumn-accompanist\/\">FoldAwareColumn in Accompanist<\/a> and <a href=\"https:\/\/devblogs.microsoft.com\/surface-duo\/twopanelayout-navigation\/\">Improved navigation support in TwoPaneLayout<\/a>.\n<\/p>\n<h2>Feedback<\/h2>\n<p>\n  If you have any questions about OpenAI, ONNX, Microsoft Graph, or Jetpack Compose, use the <a href=\"http:\/\/aka.ms\/SurfaceDuoSDK-Feedback\">feedback forum<\/a> or message us <a href=\"https:\/\/twitter.com\/surfaceduodev\">@surfaceduodev<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello Android developers, 2023 was the year that machine learning and artificial intelligence really became mainstream, and we covered both topics with a focus on Android implementations. We published series on using the ONNX machine learning runtime, building Android apps with Microsoft Graph, and tutorials for Jetpack Compose developers! Take a look back at all [&hellip;]<\/p>\n","protected":false},"author":570,"featured_media":3707,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[741,740,1],"tags":[734,692,473,729,731,728,733],"class_list":["post-3705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ai","category-machine-learning","category-surface-duo-sdk","tag-chatgpt","tag-jetpack-compose","tag-kotlin","tag-machine-learning","tag-msal","tag-onnx","tag-openai"],"acf":[],"blog_post_summary":"<p>Hello Android developers, 2023 was the year that machine learning and artificial intelligence really became mainstream, and we covered both topics with a focus on Android implementations. We published series on using the ONNX machine learning runtime, building Android apps with Microsoft Graph, and tutorials for Jetpack Compose developers! Take a look back at all [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/posts\/3705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/users\/570"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/comments?post=3705"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/posts\/3705\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/media\/3707"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/media?parent=3705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/categories?post=3705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/surface-duo\/wp-json\/wp\/v2\/tags?post=3705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}