<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vivek0712</title>
    <description>The latest articles on Forem by Vivek0712 (@vivek0712).</description>
    <link>https://forem.com/vivek0712</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F268152%2F26772112-1c62-41e0-b3ca-ccc3c9b8c877.png</url>
      <title>Forem: Vivek0712</title>
      <link>https://forem.com/vivek0712</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vivek0712"/>
    <language>en</language>
    <item>
      <title>Introducing AgentRegistry: Centralized, Flexible Agent Management for Strands Agents SDK</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Tue, 08 Jul 2025 16:44:58 +0000</pubDate>
      <link>https://forem.com/vivek0712/introducing-agentregistry-centralized-flexible-agent-management-for-strands-agents-sdk-4fna</link>
      <guid>https://forem.com/vivek0712/introducing-agentregistry-centralized-flexible-agent-management-for-strands-agents-sdk-4fna</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;As AI agent systems evolve, the need for &lt;strong&gt;modular, scalable, and manageable agent orchestration&lt;/strong&gt; becomes paramount. In my latest contribution to the Strands Agents SDK (currently under review), I introduce the &lt;code&gt;AgentRegistry&lt;/code&gt;—a feature designed to bring order, flexibility, and power to agent management, mirroring the successful &lt;code&gt;ToolRegistry&lt;/code&gt; pattern.&lt;/p&gt;

&lt;p&gt;This blog post is a comprehensive, developer-focused deep dive into the &lt;strong&gt;what, why, how, and when&lt;/strong&gt; of &lt;code&gt;AgentRegistry&lt;/code&gt;. We’ll cover its motivation, design, features, comparisons, and practical usage, with full code examples and implementation details.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;PR is currently under review. Stay tuned for updates and documentation examples!&lt;/em&gt;&lt;br&gt;
⭐️ My implementation &lt;a href="https://github.com/Vivek0712/sdk-python/blob/feat/agent-registry/src/strands/agent/agent_registry.py" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/strands-agents/sdk-python/issues/390" rel="noopener noreferrer"&gt;Feature Request Issue Created in Official repo&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/strands-agents/sdk-python/pull/381" rel="noopener noreferrer"&gt;PR Status&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Why Do We Need an Agent Registry?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Problem
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-agent workflows are simple&lt;/strong&gt;—but as soon as you want multiple agents (collaborative, specialized, or per-session), things get messy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual agent management&lt;/strong&gt; (lists, dicts, passing references) is error-prone and hard to scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session-based or multi-user applications&lt;/strong&gt; (e.g., chatbots, workflow engines) need to keep track of which agents are active, and where.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool specialization and security&lt;/strong&gt;: Sometimes, you want certain agents to have access to only a subset of tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Solution
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;central registry&lt;/strong&gt; for agents, just like for tools, solves these problems by providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centralized lookup and management&lt;/strong&gt; of all agents in your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session or event loop scoping&lt;/strong&gt;, so you can group agents per user, conversation, or workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Specialization and isolation&lt;/strong&gt; by mapping subsets of tools to specific agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean, optional integration&lt;/strong&gt;—no breaking changes for simple, single-agent use cases.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What is AgentRegistry?
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;AgentRegistry&lt;/code&gt; is a lightweight, optional utility class that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Registers and discovers agents by name (or auto-generated name).&lt;/li&gt;
&lt;li&gt;Optionally groups agents by session or event loop.&lt;/li&gt;
&lt;li&gt;Allows mapping a subset of tools to each agent.&lt;/li&gt;
&lt;li&gt;Integrates cleanly with agent state and event loop patterns.&lt;/li&gt;
&lt;li&gt;Is fully backward compatible and opt-in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is inspired by the &lt;code&gt;ToolRegistry&lt;/code&gt; pattern, but for agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature-by-Feature Breakdown
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Centralized Registration and Discovery
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
All agents are registered in a single place. You can easily add, find, or remove agents by name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplifies orchestration in multi-agent systems.&lt;/li&gt;
&lt;li&gt;Avoids passing agent references everywhere.&lt;/li&gt;
&lt;li&gt;Makes debugging and monitoring easier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands.agent.agent_registry&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentRegistry&lt;/span&gt;

&lt;span class="n"&gt;agent_registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparison:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without registry:&lt;/strong&gt; You manage agents in your own dict/list.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With registry:&lt;/strong&gt; The SDK manages it for you, with a clean API.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Optional Session-Scoped Management
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Group agents by session or event loop. This is perfect for multi-user or multi-conversation systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports scenarios where you have multiple users or conversations, each with their own set of agents.&lt;/li&gt;
&lt;li&gt;Makes it easy to clean up agents when a session ends.&lt;/li&gt;
&lt;li&gt;Prevents cross-session data leakage or confusion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;my_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;session_agents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_agents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;session123&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparison:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without registry:&lt;/strong&gt; You must manually track which agents belong to which session.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With registry:&lt;/strong&gt; The registry handles session grouping and lookup.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  3. Tool Subset Mapping for Specialization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Assign a unique set of tools to each agent, supporting specialization and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enables agent specialization (e.g., one agent can only use math tools, another can only use web search).&lt;/li&gt;
&lt;li&gt;Improves security and isolation (agents can’t access tools they shouldn’t).&lt;/li&gt;
&lt;li&gt;Makes it easy to reason about and test agent capabilities.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;web_search&lt;/span&gt;

&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;my_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;math_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;another_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tool_subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparison:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without registry:&lt;/strong&gt; You must ensure each agent is constructed with the right tools and keep track yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With registry:&lt;/strong&gt; The registry can enforce and manage tool subsets per agent.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Clean, Lightweight, and Optional Integration
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No forced changes to the default single-agent workflow.&lt;/li&gt;
&lt;li&gt;No extra overhead if you don’t need advanced features.&lt;/li&gt;
&lt;li&gt;Separation of concerns: agent state and event loop logic remain untouched.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Maintains the separation of concerns: agent logic, state, and event loop are not coupled to the registry.&lt;/li&gt;
&lt;li&gt;Keeps the codebase clean and maintainable.&lt;/li&gt;
&lt;li&gt;Advanced features are available, but only if you opt in.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you use a single agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(...)&lt;/span&gt;
&lt;span class="c1"&gt;# No registry needed!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want advanced management:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Comparison:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without registry:&lt;/strong&gt; No change to your workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With registry:&lt;/strong&gt; You get advanced management when you need it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. Backward Compatible and Developer Friendly
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you don’t use the registry, everything works as before.&lt;/li&gt;
&lt;li&gt;Advanced users can opt-in for powerful orchestration and management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Why:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensures backward compatibility.&lt;/li&gt;
&lt;li&gt;Keeps the learning curve low for new users.&lt;/li&gt;
&lt;li&gt;Power users can leverage the registry for complex workflows without affecting others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Default usage (no registry):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[...])&lt;/span&gt;
&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Hello!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Advanced usage (with registry):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[...]),&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Intrinsic Details: Naming, Auto-Generation, and Retrieval
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How Are Agent Names Handled?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;By default, agents in Strands Agents SDK do not have a name.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;When registering with the registry, you can provide a name, or let the registry auto-generate one.&lt;/li&gt;
&lt;li&gt;The registry uses:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;  &lt;span class="n"&gt;agent_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;agent_&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nb"&gt;hex&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;If you provide a name, it uses that.&lt;/li&gt;
&lt;li&gt;If the agent has a &lt;code&gt;name&lt;/code&gt; attribute, it uses that.&lt;/li&gt;
&lt;li&gt;Otherwise, it generates a unique name like &lt;code&gt;"agent_1a2b3c4d"&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Best Practice:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide a name when registering for clarity.&lt;/li&gt;
&lt;li&gt;If you don’t, capture the return value of &lt;code&gt;register_agent()&lt;/code&gt; to refer to the agent later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;auto_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;retrieved_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;auto_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Full Example: Multi-Agent, Session-Scoped Workflow
&lt;/h2&gt;

&lt;p&gt;Here’s a full-featured example that demonstrates all the core functionalities of AgentRegistry in a multi-agent orchestration scenario:&lt;/p&gt;

&lt;p&gt;This example demonstrates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Registering agents with and without tool subsets (showing both patterns).&lt;/li&gt;
&lt;li&gt;Listing all registered agents at any time.&lt;/li&gt;
&lt;li&gt;Accessing the tool registry for each agent, showing which tools are available (either via subset or the agent’s own list).&lt;/li&gt;
&lt;li&gt;Wrapping agents as tools for orchestration, so the orchestrator can delegate tasks.&lt;/li&gt;
&lt;li&gt;Unregistering a specific agent and verifying the change.&lt;/li&gt;
&lt;li&gt;Clearing the registry and confirming all agents are removed.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands_tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;web_search&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;strands.agent.agent_registry&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AgentRegistry&lt;/span&gt;

&lt;span class="c1"&gt;# 1. Define system prompts for each specialized agent
&lt;/span&gt;&lt;span class="n"&gt;RESEARCH_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a research assistant. Provide factual, well-sourced answers.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;MATH_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a math expert. Solve math problems accurately.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;SEARCH_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a web search specialist. Find up-to-date information online.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# 2. Create specialized agents
&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;RESEARCH_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;math_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MATH_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;search_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SEARCH_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;  &lt;span class="c1"&gt;# Multi-tool agent
&lt;/span&gt;
&lt;span class="c1"&gt;# 3. Register agents in the AgentRegistry, with and without tool subsets
&lt;/span&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;AgentRegistry&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;web_search&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;math_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;math_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_subset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;calculator&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# No subset, uses all provided tools
&lt;/span&gt;
&lt;span class="c1"&gt;# 4. List all registered agents
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Registered agents:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_agents&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# 5. Access the tool registry for a specific agent
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;agent_name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_agents&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;tool_registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tool_registry_for_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tool_registry&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Tools for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tool_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tool_names&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;agent_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; uses its own tool list (no registry subset)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 6. Wrap agents as tools for orchestration
&lt;/span&gt;&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;research_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Delegate research queries to the research agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;math_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Delegate math queries to the math agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;math_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Delegate search queries to the search agent.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# 7. Orchestrator agent with access to agent-tools
&lt;/span&gt;&lt;span class="n"&gt;ORCHESTRATOR_PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are an orchestrator. Route queries to the correct specialized agent:
- Use research_tool for research questions
- Use math_tool for math problems
- Use search_tool for web searches
- Answer directly if no tool is needed
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="n"&gt;orchestrator&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ORCHESTRATOR_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;math_tool&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_tool&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# 8. Example usage
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;=== Orchestrator handles a research query ===&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;orchestrator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are the latest advancements in quantum computing?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;=== Orchestrator handles a math query ===&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;orchestrator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is the square root of 2025?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;=== Orchestrator handles a web search query ===&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;orchestrator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find the current weather in Tokyo.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# 9. Unregister a particular agent
&lt;/span&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;unregister_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;math_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;After unregistering math_agent, registered agents:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_agents&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# 10. Clear the registry
&lt;/span&gt;&lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clear&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;After clearing, registered agents:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent_registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;list_agents&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  When Should You Use AgentRegistry?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Single-agent, simple scripts:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
You don’t need it! Just use &lt;code&gt;Agent&lt;/code&gt; as before.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-agent, multi-session, or advanced orchestration:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
AgentRegistry is your friend. It keeps your code clean, modular, and scalable.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Developer Insights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Extensible:&lt;/strong&gt; You can add metadata, hooks, or analytics to the registry in the future.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe:&lt;/strong&gt; No agent state is stored in the registry—each agent manages its own state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flexible:&lt;/strong&gt; You can use the registry for global, per-session, or even per-task agent management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-naming:&lt;/strong&gt; If you don’t provide a name, the registry generates a unique one and returns it, so you can always refer to your agent.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Without AgentRegistry&lt;/th&gt;
&lt;th&gt;With AgentRegistry&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Agent lookup&lt;/td&gt;
&lt;td&gt;Manual dict/list&lt;/td&gt;
&lt;td&gt;Centralized, by name/session&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Session grouping&lt;/td&gt;
&lt;td&gt;Manual, error-prone&lt;/td&gt;
&lt;td&gt;Built-in, easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool specialization&lt;/td&gt;
&lt;td&gt;Manual, per-agent&lt;/td&gt;
&lt;td&gt;Enforced, per-agent via registry&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Naming/uniqueness&lt;/td&gt;
&lt;td&gt;Up to you&lt;/td&gt;
&lt;td&gt;Auto-generated or user-provided&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backward compatibility&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;100% preserved&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overhead for simple use&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;None (if not used)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Extensibility&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Registry pattern, easy to extend&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The new &lt;code&gt;AgentRegistry&lt;/code&gt; brings the Strands Agents SDK one step closer to being a truly modular, production-ready platform for building sophisticated AI agent systems. It’s &lt;strong&gt;developer-friendly, backward compatible, and powerful&lt;/strong&gt;—and it’s available as an opt-in utility for those who need it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it out, give feedback, and help shape the future of agent orchestration in Strands-agents!&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🕵️‍♂️ Building a Cybersecurity CTF Game with Amazon Q Developer CLI</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Sun, 29 Jun 2025 19:59:14 +0000</pubDate>
      <link>https://forem.com/vivek0712/building-a-cybersecurity-ctf-game-with-amazon-q-developer-cli-38of</link>
      <guid>https://forem.com/vivek0712/building-a-cybersecurity-ctf-game-with-amazon-q-developer-cli-38of</guid>
      <description>&lt;h1&gt;
  
  
  🕵️‍♂️ Building a Cybersecurity CTF Game with Amazon Q Developer CLI
&lt;/h1&gt;

&lt;h2&gt;
  
  
  🌟 Why I Built a Terminal-Based Digital Forensics Game
&lt;/h2&gt;

&lt;p&gt;I wanted to build more than just a puzzle. My goal was to create an immersive simulation that helps players develop real cybersecurity skills through hands-on interaction — under pressure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The mission:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simulate a real-world incident response scenario&lt;/li&gt;
&lt;li&gt;Create a UNIX-style terminal interface&lt;/li&gt;
&lt;li&gt;Teach players digital forensics and debugging&lt;/li&gt;
&lt;li&gt;Increase challenge over time with progressive corruption&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? &lt;strong&gt;BlackDOS Terminal&lt;/strong&gt; — a Pygame-powered game that drops players into a retro terminal interface, giving them 15 minutes to extract evidence before the system collapses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwth46i6y3dxcezkdbb7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwth46i6y3dxcezkdbb7y.png" alt="Image description" width="800" height="263"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;View the Full Walkthrough Video here: &lt;a href="https://www.youtube.com/watch?v=8VvDf0qFb7k" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=8VvDf0qFb7k&lt;/a&gt;&lt;br&gt;
View Github Repo here: &lt;a href="https://github.com/Vivek0712/ctfgame-amazonq" rel="noopener noreferrer"&gt;https://github.com/Vivek0712/ctfgame-amazonq&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🤖 How Amazon Q Developer CLI Helped Me Build This Game
&lt;/h2&gt;
&lt;h3&gt;
  
  
  ✅ My Prompting Strategy
&lt;/h3&gt;

&lt;p&gt;Rather than asking for everything upfront, I used a layered prompting approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First prompt:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You have received a suspicious file named `shadow_terminal.py`, and your job is to investigate it. When executed, it opens a Pygame-rendered fake terminal environment simulating an old-school UNIX-like system called BlackDOS. The interface mimics a real terminal with a blinking cursor, command input, and text-based output, but something feels off. You are tasked with uncovering the backdoor left by an insider and capturing the hidden flag. The fake terminal accepts commands like `ls`, `cat`, `ps`, `whoami`, `history`, `strings`, `ssh`, `debug`, and `dump`, some of which behave normally while others are glitched, non-functional, or reveal misleading information. The filesystem lists files such as `note.txt`, `.hidden_log`, `blacknet_config.sys`, and `shadow_engine.bin`. Hidden files are not visible unless the player uses `ls -a`. Viewing `.hidden_log` reveals a cryptic hint about corrupted memory regions. Using `history` shows previously typed commands, but one line appears obfuscated using XOR, which must be decoded with a custom command `decode -x`. Running `debug shadow_engine.bin` opens a fake debugger UI inside the same Pygame interface with commands like `break 0x0040`, `dump mem 0x0030:0x0050`, and `strings shadow_engine.bin`. These expose low-level clues including a base64-encoded message `U0hBRE9Xf0JBU0VMTElORV9FTUlMRU9SRV9URU1Q`. The player must decode this to continue. Additionally, reading `blacknet_config.sys` reveals image-like ASCII content mimicking PNG headers, indicating hidden steganographic data. A fake `decode_image` command reveals characters embedded in a pixel-art grid which, when combined with memory dumps and debugger output, reveal the full flag: SHADOW{BASELLINE\_EMILIORE\_TEMP}. Throughout the game, the terminal occasionally flickers or simulates a ghost user typing commands, adding to the immersion. The entire game is keyboard-only with mouse disabled, and the screen includes simulated glitches, corrupted text, and a fake RAM dump view. The challenge tests the player's knowledge of file hiding, XOR decoding, base64, fake debugger interaction, command-line forensics, and basic steganography, all within a convincingly disguised Pygame terminal.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Then:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add system corruption that makes commands glitch as time progresses. Add visual effects and fake system crashes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finally:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add tab completion, command history, contextual hints, and better error messages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  💡 Prompting Techniques That Worked
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Give context and goals, not just features
&lt;/li&gt;
&lt;li&gt;Explain &lt;em&gt;why&lt;/em&gt; the feature matters (e.g., urgency, realism, learning value)
&lt;/li&gt;
&lt;li&gt;Ask for implementation options and rationale
&lt;/li&gt;
&lt;li&gt;Build iteratively: core → corruption → polish
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 How Amazon Q Developer CLI Solved Key Challenges
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧵 1. Managing Game State
&lt;/h3&gt;

&lt;p&gt;Amazon Q CLI generated a &lt;code&gt;TerminalState&lt;/code&gt; class that tracked progress, system health, and file visibility:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;TerminalState&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;investigation_progress&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;read_note&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;found_hidden_files&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;decoded_xor&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;used_debugger&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;extracted_memory&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;decoded_image&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;False&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;corruption_level&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hints_given&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{...}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🎨 2. Real-Time Visual Corruption
&lt;/h3&gt;

&lt;p&gt;It applied glitch effects probabilistically so gameplay remained smooth:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;apply_corruption&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;
    &lt;span class="n"&gt;effects&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;effects&lt;/span&gt;&lt;span class="p"&gt;)(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧰 3. Realistic Command Simulation
&lt;/h3&gt;

&lt;p&gt;It created GDB-style debugger output to teach real forensics flow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cmd_debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Loading GNU gdb (BlackDOS) 8.1...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Reading symbols from shadow_engine.bin...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_line&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Available commands: dump mem, break, run, read&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⏰ Game Systems &amp;amp; Mechanics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🗂️ Filesystem &amp;amp; Terminal UI
&lt;/h3&gt;

&lt;p&gt;Players interact using &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;debug&lt;/code&gt;, &lt;code&gt;strings&lt;/code&gt;, &lt;code&gt;history&lt;/code&gt;, &lt;code&gt;decode&lt;/code&gt;, etc.&lt;/p&gt;

&lt;p&gt;Files include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;note.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.hidden_log&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;blacknet_config.sys&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;shadow_engine.bin&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using &lt;code&gt;ls -a&lt;/code&gt; reveals hidden files, and viewing &lt;code&gt;history&lt;/code&gt; uncovers a corrupted command line that must be XOR-decoded.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔍 Memory Dump Example
&lt;/h3&gt;

&lt;p&gt;Inside &lt;code&gt;debug&lt;/code&gt; mode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dump mem 0x0030:0x0048
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Sample output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0x0030: 53 48 41 44 4f 57 7b 42   |SHADOW{B|
0x0038: 41 53 45 4c 4c 49 4e 45   |ASELINE|
0x0040: 5f 45 4d 49 4c 49 4f 52   |_EMILIOR|
0x0048: 45 5f 54 45 4d 50 7d 00   |E_TEMP}|
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧠 Adaptive Hint System
&lt;/h3&gt;

&lt;p&gt;Hints are based on your investigation progress:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cmd_hint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;read_note&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;hint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Start with: cat note.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;elif&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;progress&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;found_hidden_files&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;hint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Try: ls -a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🛠️ System Corruption
&lt;/h3&gt;

&lt;p&gt;The game gets harder as time runs out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;update_corruption_level&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;start_time&lt;/span&gt;
    &lt;span class="n"&gt;level&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;corruption_level&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;level&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Normal
&lt;/li&gt;
&lt;li&gt;Minor glitches
&lt;/li&gt;
&lt;li&gt;Terminal flickers and delays
&lt;/li&gt;
&lt;li&gt;Command failures
&lt;/li&gt;
&lt;li&gt;System crashes
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🧭 Tab Completion &amp;amp; Command History
&lt;/h3&gt;

&lt;p&gt;You can press Tab to autocomplete commands and filenames, just like a real terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_completions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;partial&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Suggest commands or file names
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ⚙️ Time-Saving Features Built by Amazon Q Developer CLI
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ Testing scripts to validate syntax and dependencies
&lt;/li&gt;
&lt;li&gt;🔧 Helpful error handling with try-except blocks
&lt;/li&gt;
&lt;li&gt;📄 Auto-generated README and in-game command help
&lt;/li&gt;
&lt;li&gt;🧠 Smart command dispatcher using &lt;code&gt;getattr()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;📁 Fake forensic files built into the narrative
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 What Players Learn
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Technical Skills
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Linux terminal navigation
&lt;/li&gt;
&lt;li&gt;XOR and Base64 decoding
&lt;/li&gt;
&lt;li&gt;Binary memory analysis
&lt;/li&gt;
&lt;li&gt;GDB-style debugging
&lt;/li&gt;
&lt;li&gt;File system investigation
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Soft Skills
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Working under pressure
&lt;/li&gt;
&lt;li&gt;Pattern recognition
&lt;/li&gt;
&lt;li&gt;Logical investigation
&lt;/li&gt;
&lt;li&gt;Digital patience
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📊 Dev Metrics
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Total time: 8 hours
&lt;/li&gt;
&lt;li&gt;Lines of code: ~1,200
&lt;/li&gt;
&lt;li&gt;Amazon Q Developer CLI generated ~70%
&lt;/li&gt;
&lt;li&gt;Manual polish: ~30%
&lt;/li&gt;
&lt;li&gt;Time saved: 15–20 hours
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Future Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Multiplayer cooperative mode
&lt;/li&gt;
&lt;li&gt;Procedurally generated evidence
&lt;/li&gt;
&lt;li&gt;Network and registry forensics
&lt;/li&gt;
&lt;li&gt;Scoring system for competitions
&lt;/li&gt;
&lt;li&gt;In-game certifications and achievements
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎉 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;BlackDOS Terminal&lt;/strong&gt; is more than a game — it's an immersive learning experience powered by &lt;strong&gt;Amazon Q Developer CLI&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the right prompts and a clear educational goal, I was able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build realistic systems quickly
&lt;/li&gt;
&lt;li&gt;Automate boilerplate tasks
&lt;/li&gt;
&lt;li&gt;Keep the game engaging and informative
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Want to try it?&lt;br&gt;&lt;br&gt;
Run &lt;code&gt;python shadow_terminal.py&lt;/code&gt; and see if you can extract the flag before the system collapses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're building developer tools, simulations, or training platforms, consider using Amazon Q Developer CLI as your secret weapon.&lt;/p&gt;

&lt;p&gt;Happy hacking! 🔍💻🧠&lt;/p&gt;

</description>
      <category>awschallenge</category>
      <category>aws</category>
      <category>ai</category>
      <category>amazonqcli</category>
    </item>
    <item>
      <title>From a Curious Student to Meeting Satya Nadella: My Journey with the Azure Developer Community</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Sun, 16 Feb 2025 12:42:23 +0000</pubDate>
      <link>https://forem.com/vivek0712/from-a-curious-student-to-meeting-satya-nadella-my-journey-with-the-azure-developer-community-39g3</link>
      <guid>https://forem.com/vivek0712/from-a-curious-student-to-meeting-satya-nadella-my-journey-with-the-azure-developer-community-39g3</guid>
      <description>&lt;p&gt;In late 2020, I was just a curious college student with a thirst for knowledge about cloud technologies and artificial intelligence. My journey began with a decision that many would call impulsive but turned out to be life-changing. I traveled over 500 kilometers just to attend a Microsoft Azure event. That one step of courage and curiosity marked the beginning of an extraordinary adventure.&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 The First Leap of Faith
&lt;/h2&gt;

&lt;p&gt;I still remember the excitement mixed with nervousness as I entered the event venue. I knew no one there, but the warmth of the Azure Developer Community made me feel at home. I met developers, architects, and enthusiasts who were more than happy to share their knowledge. It was this openness that fueled my passion for cloud technologies.&lt;/p&gt;




&lt;h2&gt;
  
  
  🌱 Community: The Catalyst for Growth
&lt;/h2&gt;

&lt;p&gt;The Azure Developer Community officially began in late 2020 and quickly became my launchpad for growth. It didn't just teach me technical skills; it taught me the essence of collaboration and continuous learning. I actively sought mentorship, participated in discussions, and never hesitated to ask questions. Over time, my efforts bore fruit. I was invited to speak at small meetups, and soon, these meetups turned into large-scale events and conferences.&lt;/p&gt;

&lt;p&gt;Fast forward to today: I've spoken, hosted, or organized more than 300 events across the globe. These events range from intimate bootcamps to large-scale conferences with thousands of attendees. I even had the privilege of winning the AI ODC Challenge in both 2024 and 2025, which opened doors to new opportunities and collaborations.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Meeting the Visionary: Satya Nadella
&lt;/h2&gt;

&lt;p&gt;One of the most surreal moments of my journey was meeting Satya Nadella, the CEO of Microsoft, not once but twice. The moment I shook hands with him, I felt the weight of years of learning and hard work crystallizing into a single, unforgettable experience. Getting photographed with him was a dream come true, and the picture was later featured in Pune Chaak's keynote session during the Microsoft AI Tour 2024 — a moment of recognition that made me realize the impact of my work and the power of community-driven growth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbqikt72s6b8ev2r1m32.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbqikt72s6b8ev2r1m32.jpeg" alt="Image description" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcws97snndsjdihu9ggzg.jpeg" alt="Image description" width="800" height="533"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ❤️ Giving Back to the Community
&lt;/h2&gt;

&lt;p&gt;The community that once nurtured me is now the one I contribute to passionately. I’ve mentored aspiring developers, organized countless bootcamps, and supported the growth of the Azure Developer Community in Tamil Nadu, which has now grown to over 5,000 members in record time.&lt;/p&gt;




&lt;h2&gt;
  
  
  🗣️ Talks and Sessions: A Chronicle of Knowledge Sharing
&lt;/h2&gt;

&lt;p&gt;Throughout my journey, I've delivered numerous talks and conducted hands-on sessions. Here are some notable ones related to Azure and the Azure Developer Community:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Image Data Analytics using Python&lt;/strong&gt; – Mepco Schlenk Engineering College  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Vivek0712/azuremlbootcamp" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deep Dive into Microsoft Azure Automated Machine Learning&lt;/strong&gt; – Global Azure Datafest 2020  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/azuredevelopercommunitytamilnadu_azureopenai-aiinnovation-techleadership-activity-7174819998832496640-nxwl" rel="noopener noreferrer"&gt;Event Link&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Machine Learning Pipelines in AzureML&lt;/strong&gt; – Azure Developer Community Tamil Nadu  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/azuredevelopercommunitytamilnadu_two-day-azure-ml-online-bootcamp-win-digital-activity-7090580320416133120-yCrP" rel="noopener noreferrer"&gt;RSVP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Demo on Azure Cognitive Services&lt;/strong&gt; – Azure ML Series  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/azuredevelopercommunitytamilnadu_azure-machine-learning-bootcamp-day-2-by-activity-7091268835244199936-iUXc" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Training &amp;amp; Deploying ML Models in Azure&lt;/strong&gt; – Azure Developer Community Mumbai  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1GMgywM8wWk" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Exploring Azure Cognitive Services&lt;/strong&gt; – Azure Developer Community Raipur  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Hp1WglftbwM" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Getting started with Azure AutoML&lt;/strong&gt; – Azure Developer Community Chandigarh  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Vegy5F6dRuA" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Deploying Python Apps to AKS&lt;/strong&gt; – Azure Developer Community Tamil Nadu  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3SF36fqkqKw" rel="noopener noreferrer"&gt;YouTube&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🎥 Video Sessions:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=1GMgywM8wWk" rel="noopener noreferrer"&gt;Getting Started with Azure Machine Learning: A Beginner's Guide | Season of AI | Vivek Raja P S&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Hp1WglftbwM" rel="noopener noreferrer"&gt;Tech Podcast Series | Vivek Raja P S&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Vegy5F6dRuA" rel="noopener noreferrer"&gt;A glimpse into our startup's challenges &amp;amp; success with Azure | #ScaleUpThursday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=3SF36fqkqKw" rel="noopener noreferrer"&gt;Vivek Raja P S | 30 day 30 experts | Episode - 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=P_YXwsDOqIw" rel="noopener noreferrer"&gt;Getting Started with Containers in Azure | Vivek Raja P S | Azure Developer Community - Chennai&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=qxihjPwLk9w" rel="noopener noreferrer"&gt;Exploring AWS AI/ML: Beyond the GenAI Hype Train with Vivek Raja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=E5rrx0Ea93I" rel="noopener noreferrer"&gt;#JavaOnAzure: Deploying a Spring Boot app to Azure by Vivek Sridhar | Azure Developer Community TN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=dxQz2YgrTvs" rel="noopener noreferrer"&gt;Whizlabs Webinar | Training &amp;amp; Deploying ML Models in AzureML | Vivek Raja&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QT_geI_vuAU" rel="noopener noreferrer"&gt;Azure Machine Learning Bootcamp - Day 1 | Vivek Raja | Tamil Nadu Azure Dev Community&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=eKh_PJvCO_4" rel="noopener noreferrer"&gt;A glimpse into our startup's challenges &amp;amp; success with Azure | #ScaleUpThursday&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=g2PDwVAZJro" rel="noopener noreferrer"&gt;AI India Tour 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=rQt1xw2DxZs" rel="noopener noreferrer"&gt;Vivek Raja P S: Detecting and Visualizing COVID-19 Sentiment using AWS Comprehend and QuickSight&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7kQBEOVnf2w" rel="noopener noreferrer"&gt;Azure Purview: (Kick) Start your data governance journey&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Bg-F7GhTlr8" rel="noopener noreferrer"&gt;Learnathon - Azure Static Web Apps | #LearnAtReactor (In-person)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=nv-jzoyR2W0" rel="noopener noreferrer"&gt;Demo on Azure cognitive services - Text Analytics by Navaneethan Gopal | Azure ML Series&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=kd9mAJ6z51w" rel="noopener noreferrer"&gt;Hosting Python Packages in Azure DevOps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=xtCdUQce9vM" rel="noopener noreferrer"&gt;Designing &amp;amp; Deploying COVID-19 Forecast App using Machine Learning Techniques&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=tvF18z5E3N8" rel="noopener noreferrer"&gt;#AzureML: Deployment and ML Model Monitoring in AzureML #MachineLearning #Azure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=YfqycgSHs0U" rel="noopener noreferrer"&gt;Episode-1: Getting started with Azure Machine Learning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=QpDQGW79z3s" rel="noopener noreferrer"&gt;Machine Learning Pipelines in AzureML | AzureML Series | DP-100 Study Jam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=HNRC3TaX1_Y" rel="noopener noreferrer"&gt;HacktoberFest : Intro to Open Source 2021&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=57116iJD0UM" rel="noopener noreferrer"&gt;Literature Text Translation and Audio Synthesis using AI Services&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=GYcwbbgwqqY" rel="noopener noreferrer"&gt;Introduction to Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=sILiqLoegxM" rel="noopener noreferrer"&gt;Zero to HERO: Image Processing Techniques - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5OkFvYpQjRY" rel="noopener noreferrer"&gt;Zero to HERO: Image Processing Techniques - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📝 Blog Posts on Dev.to
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Attendance System with Face Mask Detection using Azure Face API&lt;/strong&gt; &lt;em&gt;(Published: Feb 15, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Predict NYC Taxi Fares | End-to-end Azure MLOps with GitHub Actions&lt;/strong&gt; &lt;em&gt;(Published: Feb 14, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a Production LLM-Powered QC Visual Inspection System Using Azure AI Foundry&lt;/strong&gt; &lt;em&gt;(Published: Feb 13, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyse Customer Sentiment using Azure Data Factory pipeline&lt;/strong&gt; &lt;em&gt;(Published: Feb 12, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Electronics-Datasheet-GPT: A Step-by-Step Guide to Building Your Own Datasheet Q&amp;amp;A AI Agent&lt;/strong&gt; &lt;em&gt;(Published: Feb 11, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experimenting with DeepSeek-R1 Model in VS Code Hosted via GitHub Models&lt;/strong&gt; &lt;em&gt;(Published: Feb 10, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How AWS GenAI boosted my day-to-day Productivity&lt;/strong&gt; &lt;em&gt;(Published: May 31, 2024)&lt;/em&gt; &lt;em&gt;(AWS Heroes)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What If Amazon Prime A/B Tests IPL Broadcasting?&lt;/strong&gt; &lt;em&gt;(Published: Feb 21, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed-Dataing for hackers!&lt;/strong&gt; &lt;em&gt;(Published: Jan 6, 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transforming Madurai | Tech, Community and more...&lt;/strong&gt; &lt;em&gt;(Published: Apr 17, 2023)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Community Day Hyderabad 2023 | Experience with Vivek&lt;/strong&gt; &lt;em&gt;(Published: Mar 25, 2023)&lt;/em&gt; &lt;em&gt;(AWS Heroes)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blur Personal Identifiable Information (PII) in Text, Images and Videos&lt;/strong&gt; &lt;em&gt;(Published: Jun 10, 2022)&lt;/em&gt; &lt;em&gt;(AWS Heroes)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Adding Chaos to ML Compute Targets&lt;/strong&gt; &lt;em&gt;(Published: Feb 15, 2022)&lt;/em&gt; &lt;em&gt;(Azure Architecture Series)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Introducing Chaos Engineering to Machine Learning deployments&lt;/strong&gt; &lt;em&gt;(Published: Feb 12, 2022)&lt;/em&gt; &lt;em&gt;(Azure Architecture Series)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How FORMULA 1 insights are powered by AWS&lt;/strong&gt; &lt;em&gt;(Published: Oct 20, 2021)&lt;/em&gt; &lt;em&gt;(AWS Community Builders)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting Python Packages in Azure DevOps&lt;/strong&gt; &lt;em&gt;(Published: Aug 31, 2021)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training Machine Learning models in AzureML&lt;/strong&gt; &lt;em&gt;(Published: Aug 22, 2021)&lt;/em&gt; &lt;em&gt;(Azure Machine Learning Series)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Getting started with Azure Machine Learning&lt;/strong&gt; &lt;em&gt;(Published: Aug 20, 2021)&lt;/em&gt; &lt;em&gt;(Azure Machine Learning Series)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Introduction to Machine Learning&lt;/strong&gt; &lt;em&gt;(Published: Aug 19, 2021)&lt;/em&gt; &lt;em&gt;(Azure Machine Learning Series)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fine-tuning the performance of the DeepRacer model&lt;/strong&gt; &lt;em&gt;(Published: Jul 31, 2021)&lt;/em&gt; &lt;em&gt;(AWS Community Builders - DeepRacer)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Create, Train, Race your first AWS DeepRacer Model&lt;/strong&gt; &lt;em&gt;(Published: Jul 24, 2021)&lt;/em&gt; &lt;em&gt;(AWS Community Builders - DeepRacer)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detecting and Visualizing Twitter Sentiment during COVID-19 Pandemic using AWS Comprehend and Quicksight&lt;/strong&gt; &lt;em&gt;(Published: Jul 19, 2021)&lt;/em&gt; &lt;em&gt;(AWS Community Builders)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Creating COVID19 stats newsletter using Azure Function Apps&lt;/strong&gt; &lt;em&gt;(Published: Apr 14, 2021)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Literature Text Translation &amp;amp; Audio Synthesis using Microsoft Azure Cognitive Services&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Platform:&lt;/strong&gt; All posts are published on &lt;strong&gt;dev.to&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎓 Certifications: The Foundation of My Technical Knowledge
&lt;/h2&gt;

&lt;p&gt;My passion for continuous learning is reflected in the certifications I've earned:&lt;/p&gt;

&lt;h3&gt;
  
  
  Microsoft Azure:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft Certified Azure Developer Associate (AZ-204)&lt;/li&gt;
&lt;li&gt;Microsoft Certified Azure Data Scientist Associate (DP-100)&lt;/li&gt;
&lt;li&gt;Microsoft Certified Azure AI Engineer Associate (AI-100)&lt;/li&gt;
&lt;li&gt;Microsoft Certified Azure Data Engineer Associate (DP-200 &amp;amp; DP-201) &lt;/li&gt;
&lt;li&gt;Microsoft Certified Azure Fundamentals (AZ-900)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌐 VickyBytes: A New Chapter
&lt;/h2&gt;

&lt;p&gt;As I reflect on this journey, I’m thrilled to share that I'm working closely with Microsoft's leadership to build a new platform called &lt;a href="https://vickybytes.com" rel="noopener noreferrer"&gt;VickyBytes&lt;/a&gt;. This initiative aims to provide developers with curated, high-quality content to stay ahead in the ever-evolving tech landscape. The idea is simple yet powerful: leverage the strength of community to empower developers worldwide.&lt;/p&gt;




&lt;h2&gt;
  
  
  👨‍💼 My Professional Journey: A Snapshot
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VP of Product at Nexstem&lt;/strong&gt; &lt;em&gt;(YourStory Tech30 startup winner; Raised $3.5M!)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS ML Hero&lt;/strong&gt; &lt;em&gt;(Youngest ever!), AWS Hero of the Year (APJ 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Invent &amp;amp; Simplify Award&lt;/strong&gt; recipient at AWS Community Leaders Summit 2022&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Founder &amp;amp; Lead:&lt;/strong&gt; Azure Developer Community TN &lt;em&gt;(Since 2021!)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Founder &amp;amp; Lead:&lt;/strong&gt; AWS User Group Madurai &lt;em&gt;(Nominated as Best UG 2022, 2023 &amp;amp; 2024)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guinness World Record Holder&lt;/strong&gt; &lt;em&gt;(Thanks to AWS!)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Published Researcher:&lt;/strong&gt; Recent paper at IIM-B &amp;amp; holder of 2 AI patents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80+ Hackathon Wins&lt;/strong&gt;; Participant &amp;amp; Jury&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mentor | Blogger | Content Creator&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Movie Buff | Go-Kart Racer | Guitar Enthusiast | Professional Reels Sender&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🌟 Lessons from the Journey
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Community is Everything:&lt;/strong&gt; Growth accelerates when like-minded people collaborate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency Pays Off:&lt;/strong&gt; Showing up consistently to learn, share, and contribute can open unimaginable doors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give More Than You Take:&lt;/strong&gt; The more you give to the community, the more you grow.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  🙏 A Heartfelt Thank You
&lt;/h2&gt;

&lt;p&gt;I owe my success to the Azure Developer Community and the incredible people who believed in me when I was just a student with dreams. To every mentor, attendee, and fellow enthusiast: &lt;strong&gt;thank you&lt;/strong&gt; for being part of my story.&lt;/p&gt;

&lt;h2&gt;
  
  
  Photo Gallery (Random moments clicked!)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffclmm3az4mwl8m2apwra.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffclmm3az4mwl8m2apwra.JPG" alt="Image description" width="800" height="1422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frae54vflzlf1p9u53cih.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frae54vflzlf1p9u53cih.JPG" alt="Image description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqru9gni9y4qszmbwurx.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffqru9gni9y4qszmbwurx.JPG" alt="Image description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftu5vxsfktrnvmpv0qm7f.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftu5vxsfktrnvmpv0qm7f.JPG" alt="Image description" width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ttt3yyobjepree19q62.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ttt3yyobjepree19q62.jpeg" alt="Image description" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This journey from being a curious student to becoming one of India's recognized AI figures has been nothing short of magical. And if there's one message I'd like to share, it’s this: &lt;strong&gt;take that first step, no matter how uncertain it seems. The community will catch you, guide you, and help you soar.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;#AzureCommunity #AIInnovation #CommunityFirst #VickyBytes&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Attendance System with Face Mask Detection using Azure Face API</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Sat, 15 Feb 2025 08:55:43 +0000</pubDate>
      <link>https://forem.com/vivek0712/attendance-system-with-face-mask-detection-using-azure-face-api-2glb</link>
      <guid>https://forem.com/vivek0712/attendance-system-with-face-mask-detection-using-azure-face-api-2glb</guid>
      <description>&lt;p&gt;In the post-pandemic world, many organizations require their staff or visitors to wear masks in addition to verifying identity for attendance. This blog post explains how to build a simple &lt;strong&gt;Face Recognition Attendance System&lt;/strong&gt; with &lt;strong&gt;Face Mask Detection&lt;/strong&gt; using &lt;strong&gt;Azure AI Face API&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With Azure AI Face, we can:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Detect faces&lt;/strong&gt; in an image.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check whether a person is wearing a mask&lt;/strong&gt; (and if nose and mouth are covered).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify&lt;/strong&gt; if a detected face is in our known list of authorized persons.&lt;/li&gt;
&lt;li&gt;Mark attendance only if the person is recognized &lt;strong&gt;&lt;em&gt;and&lt;/em&gt;&lt;/strong&gt; wearing a mask.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This blog includes two main code snippets:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Recognizing a face&lt;/strong&gt; and checking if it belongs to a trained group of authorized persons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detecting whether a person is wearing a mask&lt;/strong&gt; and marking attendance.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Azure Subscription&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;You need an active Azure subscription to create an &lt;strong&gt;Azure Cognitive Services&lt;/strong&gt; resource with the Face API.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fsjh6un5ioajadqnoai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5fsjh6un5ioajadqnoai.png" alt="Image description" width="800" height="790"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.7+&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Ensure Python 3.7 (or higher) is installed on your system.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Azure AI Vision (Face) SDK&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install via:
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt; pip &lt;span class="nb"&gt;install &lt;/span&gt;azure-ai-vision
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Face API Key &amp;amp; Endpoint&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After creating a Face resource in Azure Portal, retrieve:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Endpoint&lt;/strong&gt; (e.g., &lt;code&gt;https://&amp;lt;resource-name&amp;gt;.cognitiveservices.azure.com/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API Key&lt;/strong&gt; (a 32-character key)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Architecture at a Glance
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Large Person Group (LPG)&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You create a Large Person Group to store known persons (e.g., employees, students).
&lt;/li&gt;
&lt;li&gt;Train the LPG so it can recognize these faces later.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Detect &amp;amp; Identify&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When someone attempts to mark attendance, the system uploads a photo.
&lt;/li&gt;
&lt;li&gt;Azure Face detects faces, returns attributes including &lt;strong&gt;Face ID&lt;/strong&gt;, &lt;strong&gt;Mask&lt;/strong&gt; properties, and (optionally) the quality for recognition.
&lt;/li&gt;
&lt;li&gt;If recognized above a certain confidence threshold &lt;strong&gt;and&lt;/strong&gt; wearing a mask, the system marks attendance.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Real-world Enhancements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a camera feed to capture images in real time.
&lt;/li&gt;
&lt;li&gt;Integrate with your existing attendance software or a database.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Code Snippet #1: Door Access Control With Face Recognition
&lt;/h2&gt;

&lt;p&gt;This snippet shows how to &lt;strong&gt;detect&lt;/strong&gt; a face and check if it’s recognized in a previously &lt;strong&gt;trained&lt;/strong&gt; Large Person Group. If recognized, we simulate opening a door by printing a welcome message. Otherwise, we deny access.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;File Name:&lt;/strong&gt; &lt;code&gt;door_access_control_local_upload.py&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.core.credentials&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AzureKeyCredential&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.vision.face&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FaceAdministrationClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FaceClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.vision.face.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;FaceAttributeTypeRecognition04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FaceDetectionModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FaceRecognitionModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;QualityForRecognition&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;FACE_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FACE_APIKEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Or replace with your API key as a string
&lt;/span&gt;&lt;span class="n"&gt;FACE_ENDPOINT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FACE_ENDPOINT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Or replace with your endpoint
&lt;/span&gt;
&lt;span class="c1"&gt;# Must match the ID you used when creating/training the Large Person Group
&lt;/span&gt;&lt;span class="n"&gt;LARGE_PERSON_GROUP_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-lpg-local-upload&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;check_access&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence_threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Identify the face_id against the Large Person Group.
    Return (True, person_id) if recognized &amp;gt;= threshold, else (False, None).
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;identify_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;identify_from_large_person_group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;face_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;large_person_group_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LARGE_PERSON_GROUP_ID&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;identify_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;identify_results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;top_candidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;top_candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;confidence_threshold&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top_candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;open_door_simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_name&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    In a real system, trigger door unlock. 
    Here, just print a message for demonstration.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[ACCESS GRANTED] Welcome, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;person_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;! The door is now unlocked.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;deny_access_simulation&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Simulate denying access.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[ACCESS DENIED] Unrecognized or unauthorized individual.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Door Access Control (Local Photo Upload)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Create clients
&lt;/span&gt;    &lt;span class="n"&gt;face_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FaceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FACE_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;AzureKeyCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FACE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;face_admin_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FaceAdministrationClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FACE_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;AzureKeyCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FACE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Provide path to the image you want to check
&lt;/span&gt;    &lt;span class="n"&gt;image_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;path/to/test_image.jpg&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: File not found =&amp;gt; &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;

    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;image_path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;img_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# DETECT face
&lt;/span&gt;        &lt;span class="n"&gt;detected_faces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;img_bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;detection_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FaceDetectionModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DETECTION03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;recognition_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FaceRecognitionModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RECOGNITION04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;return_face_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;return_face_attributes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;FaceAttributeTypeRecognition04&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QUALITY_FOR_RECOGNITION&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;detected_faces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No faces detected in the image. Access denied.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;

        &lt;span class="c1"&gt;# For simplicity, just use the first face
&lt;/span&gt;        &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;detected_faces&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quality_for_recognition&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;QualityForRecognition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Face quality too low for recognition. Access denied.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt;

        &lt;span class="n"&gt;recognized&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;person_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;check_access&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;recognized&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="c1"&gt;# Retrieve the person's details to say hello by name
&lt;/span&gt;            &lt;span class="n"&gt;person_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face_admin_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;large_person_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;large_person_group_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LARGE_PERSON_GROUP_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="c1"&gt;# Greet by name
&lt;/span&gt;            &lt;span class="nf"&gt;open_door_simulation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;person_info&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;deny_access_simulation&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Detection includes both MASK and QUALITY_FOR_RECOGNITION attributes.&lt;/li&gt;
&lt;li&gt;We ensure nose_and_mouth_covered == True before proceeding to recognition.&lt;/li&gt;
&lt;li&gt;If recognized (confidence &amp;gt;= 0.7), we print a success message. Otherwise, we deny attendance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Real-Time Webcam Detection
&lt;/h2&gt;

&lt;p&gt;For continuous detection (like an entry gate or reception area), you can capture frames from your webcam using OpenCV, then call Azure Face to check mask and recognition in real time.&lt;/p&gt;

&lt;p&gt;File Name: realtime_webcam_detection.py&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.core.credentials&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AzureKeyCredential&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.vision.face&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FaceClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azure.ai.vision.face.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;FaceDetectionModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FaceRecognitionModel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FaceAttributeTypeDetection03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;FaceAttributeTypeRecognition04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;QualityForRecognition&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Replace with your actual values or environment variables
&lt;/span&gt;&lt;span class="n"&gt;FACE_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FACE_APIKEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YourFaceAPIKey&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;FACE_ENDPOINT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FACE_ENDPOINT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YourFaceAPIEndpoint&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# Must match your trained Large Person Group
&lt;/span&gt;&lt;span class="n"&gt;LARGE_PERSON_GROUP_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;my-lpg-local-upload&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;identify_person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.7&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Identify the face in the LPG. Returns (True, person_id) if recognized.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;identify_from_large_person_group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;face_ids&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;large_person_group_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;LARGE_PERSON_GROUP_ID&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;candidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;candidates&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nf"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="n"&gt;threshold&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;candidate&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;person_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[INFO] Starting Real-Time Face Mask &amp;amp; Recognition Detection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Create FaceClient
&lt;/span&gt;    &lt;span class="n"&gt;face_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FaceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FACE_ENDPOINT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;AzureKeyCredential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;FACE_API_KEY&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Open the default webcam
&lt;/span&gt;    &lt;span class="n"&gt;cap&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;VideoCapture&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isOpened&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[ERROR] Could not open webcam.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;ret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[ERROR] Failed to read frame from webcam.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;

            &lt;span class="c1"&gt;# Encode current frame to JPEG
&lt;/span&gt;            &lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;img_encoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;imencode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.jpg&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;img_bytes&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;img_encoded&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tobytes&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

            &lt;span class="c1"&gt;# Detect faces
&lt;/span&gt;            &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="n"&gt;faces&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;detect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                    &lt;span class="n"&gt;image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;img_bytes&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;detection_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FaceDetectionModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DETECTION03&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;recognition_model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;FaceRecognitionModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RECOGNITION04&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;return_face_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="n"&gt;return_face_attributes&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
                        &lt;span class="n"&gt;FaceAttributeTypeDetection03&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;MASK&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="n"&gt;FaceAttributeTypeRecognition04&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;QUALITY_FOR_RECOGNITION&lt;/span&gt;
                    &lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[ERROR] Azure Face detection error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="k"&gt;continue&lt;/span&gt;

            &lt;span class="c1"&gt;# For each face, check mask &amp;amp; recognition
&lt;/span&gt;            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;faces&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                &lt;span class="c1"&gt;# Draw bounding box
&lt;/span&gt;                &lt;span class="n"&gt;rect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_rectangle&lt;/span&gt;
                &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;rect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;
                &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;rectangle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

                &lt;span class="c1"&gt;# Default label
&lt;/span&gt;                &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No Mask Detected&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

                &lt;span class="c1"&gt;# Check mask coverage
&lt;/span&gt;                &lt;span class="n"&gt;mask_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mask&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;mask_data&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;mask_data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;nose_and_mouth_covered&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="c1"&gt;# Check face quality
&lt;/span&gt;                    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_attributes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;quality_for_recognition&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="n"&gt;QualityForRecognition&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;LOW&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;recognized&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;person_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;identify_person&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;face_client&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;face&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;face_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;recognized&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                            &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Recognized + Masked&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                            &lt;span class="c1"&gt;# If you want the person's actual name:
&lt;/span&gt;                            &lt;span class="c1"&gt;# (You’d need the FaceAdministrationClient here)
&lt;/span&gt;                            &lt;span class="c1"&gt;# person_info = face_admin_client.large_person_group.get_person(
&lt;/span&gt;                            &lt;span class="c1"&gt;#     LARGE_PERSON_GROUP_ID, person_id
&lt;/span&gt;                            &lt;span class="c1"&gt;# )
&lt;/span&gt;                            &lt;span class="c1"&gt;# msg = f"{person_info.name} + Masked"
&lt;/span&gt;                        &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                            &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Unknown, Masked&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                    &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                        &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Low Quality Face&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
                &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No/Improper Mask&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

                &lt;span class="c1"&gt;# Put text on frame
&lt;/span&gt;                &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;putText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;top&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FONT_HERSHEY_SIMPLEX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
                            &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Show the result
&lt;/span&gt;            &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Real-Time Mask &amp;amp; Recognition&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;frame&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="c1"&gt;# Press 'q' to quit
&lt;/span&gt;            &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitKey&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="mh"&gt;0xFF&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nf"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;q&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
                &lt;span class="k"&gt;break&lt;/span&gt;

            &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Slight delay to reduce API calls
&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;KeyboardInterrupt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;[INFO] Interrupted by user.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;finally&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;cap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;release&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;cv2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;destroyAllWindows&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How It Works
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenCV obtains frames from the webcam.&lt;/li&gt;
&lt;li&gt;Azure Face detection includes mask and quality attributes.&lt;/li&gt;
&lt;li&gt;Bounding Boxes: We draw rectangles and text in the video.&lt;/li&gt;
&lt;li&gt;If the face is recognized and masked, we label them "Recognized + Masked". Otherwise, we label them "Unknown, Masked" or "No/Improper Mask".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integrating with an Attendance Database
&lt;/h2&gt;

&lt;p&gt;In production, you would:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log recognized individuals in a database with timestamps (e.g., SQL, Cosmos DB).&lt;/li&gt;
&lt;li&gt;Trigger access control systems if recognized and masked.&lt;/li&gt;
&lt;li&gt;Handle notifications or custom logic if an unrecognized or unmasked person is detected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Troubleshooting &amp;amp; Best Practices
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Confidence Threshold&lt;/em&gt;&lt;br&gt;
Adjust 0.7 to balance false accepts vs. false rejects. In higher-security scenarios, go higher (e.g., 0.8).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Low-Light Conditions&lt;/em&gt;&lt;br&gt;
Poor lighting may lower face detection accuracy and quality. Provide good ambient light or an IR camera in low-light environments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;API Rate Limits&lt;/em&gt;&lt;br&gt;
The free tier has certain call-per-minute limits. If you’re capturing 30 frames per second, you’ll exceed it quickly!&lt;br&gt;
Use throttling (time.sleep(...)) or a higher service tier.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Privacy &amp;amp; Security&lt;/em&gt;&lt;br&gt;
Face recognition is subject to data protection laws (GDPR, HIPAA, etc.).&lt;br&gt;
Store face data securely and keep your API Key safe (e.g., Azure Key Vault).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Region Support for Mask&lt;/em&gt;&lt;br&gt;
Check the Azure docs to ensure your region supports the mask feature.&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;By combining Azure AI Face and OpenCV, you can build a robust attendance system that verifies both identity and mask compliance. This meets modern health guidelines, is touchless, and can be extended to real-time logging or controlling physical access points.&lt;/p&gt;

&lt;h3&gt;
  
  
  Next Steps:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Improve multi-person handling, logging, and auditing.&lt;/li&gt;
&lt;li&gt;Integrate with hardware for an actual door lock system or turnstile.&lt;/li&gt;
&lt;li&gt;Explore offline or on-edge solutions if you require higher throughput or internet-independent operation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Happy Building!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Predict NYC Taxi Fares | End-to-end Azure MLOps with GitHub Actions</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Fri, 14 Feb 2025 14:54:35 +0000</pubDate>
      <link>https://forem.com/vivek0712/predict-nyc-taxi-fares-end-to-end-azure-mlops-with-github-actions-33an</link>
      <guid>https://forem.com/vivek0712/predict-nyc-taxi-fares-end-to-end-azure-mlops-with-github-actions-33an</guid>
      <description>&lt;p&gt;Implementation: &lt;a href="https://github.com/Vivek0712/mlops-v2-gha-demo" rel="noopener noreferrer"&gt;https://github.com/Vivek0712/mlops-v2-gha-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AI workload operations revolve around &lt;strong&gt;curation of data&lt;/strong&gt; and &lt;strong&gt;consumption of that data&lt;/strong&gt;. Operations ensure that you maintain &lt;strong&gt;quality&lt;/strong&gt;, &lt;strong&gt;reliability&lt;/strong&gt;, &lt;strong&gt;security&lt;/strong&gt;, &lt;strong&gt;ethics&lt;/strong&gt;, and other standards you prioritize for your AI/ML workloads. In this blog, you’ll learn how to set up an &lt;strong&gt;end-to-end MLOps pipeline on Azure&lt;/strong&gt; using &lt;strong&gt;GitHub Actions&lt;/strong&gt; to predict NYC taxi fares with a linear regression model. This project follows industry best practices like &lt;strong&gt;DevOps&lt;/strong&gt;, &lt;strong&gt;DataOps&lt;/strong&gt;, &lt;strong&gt;MLOps&lt;/strong&gt;, and &lt;strong&gt;GenAIOps&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
Introduction to AI Workloads and Operational Methodologies
&lt;/li&gt;
&lt;li&gt;
Understanding GitHub Actions
&lt;/li&gt;
&lt;li&gt;
Why Azure Machine Learning with GitHub Actions?
&lt;/li&gt;
&lt;li&gt;
Prerequisites
&lt;/li&gt;
&lt;li&gt;
Set Up Authentication with Azure and GitHub Actions

&lt;ul&gt;
&lt;li&gt;
Create a Service Principal
&lt;/li&gt;
&lt;li&gt;
Assign Permissions to the Service Principal
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Set Up the GitHub Repo
&lt;/li&gt;
&lt;li&gt;
Deploy the Machine Learning Project Infrastructure with GitHub Actions
&lt;/li&gt;
&lt;li&gt;
Next Steps
&lt;/li&gt;
&lt;li&gt;
References
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Introduction to AI Workloads and Operational Methodologies
&lt;/h2&gt;

&lt;p&gt;AI workloads can be broken down into three main categories:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Application Development&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Handling&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI Model Management&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Different operational methodologies come into play across these categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DevOps&lt;/strong&gt; focuses on managing the &lt;strong&gt;application development lifecycle&lt;/strong&gt; with automated CI/CD pipelines and monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DataOps&lt;/strong&gt; extends DevOps to handle &lt;strong&gt;data extraction, transformation, and loading (ETL/ELT)&lt;/strong&gt; processes. It monitors data flow, data cleansing, and anomaly detection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MLOps&lt;/strong&gt; operationalizes machine learning workflows, handling &lt;strong&gt;model training, validation, and deployment&lt;/strong&gt; pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GenAIOps&lt;/strong&gt;, a specialized form of MLOps, targets &lt;strong&gt;generative AI&lt;/strong&gt; solutions, focusing on &lt;strong&gt;model discovery&lt;/strong&gt;, refining pretrained models, and handling &lt;strong&gt;unstructured&lt;/strong&gt; or &lt;strong&gt;semi-structured data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These methodologies often overlap. For instance, in &lt;strong&gt;discriminative AI&lt;/strong&gt;, &lt;strong&gt;DataOps&lt;/strong&gt; plays a larger role, while in &lt;strong&gt;generative AI&lt;/strong&gt;, &lt;strong&gt;DevOps&lt;/strong&gt; might be more heavily utilized due to more complex application development pipelines.&lt;/p&gt;




&lt;h2&gt;
  
  
  Understanding GitHub Actions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.github.com/en/actions/about-github-actions/understanding-github-actions" rel="noopener noreferrer"&gt;GitHub Actions&lt;/a&gt; is a &lt;strong&gt;CI/CD platform&lt;/strong&gt; that can automate software development workflows. It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt; and &lt;strong&gt;test&lt;/strong&gt; every pull request or commit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt; merged pull requests to production.&lt;/li&gt;
&lt;li&gt;Automate tasks on other repository events (e.g., add labels to issues on creation).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;GitHub Actions provides &lt;strong&gt;Linux, Windows, and macOS runners&lt;/strong&gt;, or you can use self-hosted runners. This flexibility ensures that you can tailor your workflows to your specific infrastructure needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Azure Machine Learning with GitHub Actions?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/" rel="noopener noreferrer"&gt;Azure Machine Learning&lt;/a&gt; integrates seamlessly with GitHub Actions to automate various stages of the &lt;strong&gt;machine learning lifecycle&lt;/strong&gt;, such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying &lt;strong&gt;infrastructure&lt;/strong&gt; for ML (compute, storage, networking).&lt;/li&gt;
&lt;li&gt;Performing &lt;strong&gt;data preparation&lt;/strong&gt; (ETL/ELT).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Training&lt;/strong&gt; ML models at scale.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploying&lt;/strong&gt; trained models as &lt;strong&gt;real-time endpoints&lt;/strong&gt; or &lt;strong&gt;batch endpoints&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt; deployed models to track performance and detect anomalies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this blog, we’ll build an &lt;strong&gt;end-to-end MLOps pipeline&lt;/strong&gt; to &lt;strong&gt;train a linear regression model&lt;/strong&gt; to predict &lt;strong&gt;NYC taxi fares&lt;/strong&gt;. We’ll be using the &lt;strong&gt;recommended Azure architecture for MLOps&lt;/strong&gt; and the &lt;strong&gt;Azure MLOps (v2) solution accelerator&lt;/strong&gt; to simplify the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Azure Subscription&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;If you don’t have one, you can create a &lt;a href="https://azure.microsoft.com/free/" rel="noopener noreferrer"&gt;free Azure account&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Machine Learning Workspace&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/how-to-create-workspace" rel="noopener noreferrer"&gt;Create a workspace&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w8ciz9f0mzpclkivsfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w8ciz9f0mzpclkivsfd.png" alt="Image description" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wdku1wk0bm26nzlarl2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wdku1wk0bm26nzlarl2.png" alt="Image description" width="776" height="946"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; installed locally.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;GitHub&lt;/strong&gt; repository or a &lt;strong&gt;GitHub organization&lt;/strong&gt; where you can create or fork repositories.&lt;/li&gt;
&lt;li&gt;Basic understanding of &lt;strong&gt;Azure Machine Learning&lt;/strong&gt; concepts like workspaces, compute, and endpoints.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Set Up Authentication with Azure and GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Before setting up an MLOps project using Azure Machine Learning, you need to configure &lt;strong&gt;secure authentication&lt;/strong&gt; between &lt;strong&gt;GitHub Actions&lt;/strong&gt; and &lt;strong&gt;Azure&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Create a Service Principal
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Azure Portal&lt;/strong&gt; &amp;gt; &lt;strong&gt;Azure Active Directory&lt;/strong&gt; &amp;gt; &lt;strong&gt;App registrations&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;New Registration&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyfq8iw8gg6zxwycg1ni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffyfq8iw8gg6zxwycg1ni.png" alt="Image description" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Name&lt;/strong&gt;: &lt;code&gt;Vivek-azureML-GHdemo&lt;/code&gt; (or any name you prefer)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supported account types&lt;/strong&gt;: &lt;code&gt;Accounts in any organizational directory (Any Microsoft Entra directory - Multitenant)&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After creating the app registration, go to &lt;strong&gt;Certificates &amp;amp; Secrets&lt;/strong&gt; and:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbj8eewsobdiblq9amskm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbj8eewsobdiblq9amskm.png" alt="Image description" width="418" height="946"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;New client secret&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Copy the &lt;strong&gt;secret value&lt;/strong&gt; and store it in a safe place (this value will be used in GitHub secrets).&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Copy the &lt;strong&gt;Application (client) ID&lt;/strong&gt;, &lt;strong&gt;Directory (tenant) ID&lt;/strong&gt;, and &lt;strong&gt;Subscription ID&lt;/strong&gt; for the next steps.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: Keep your secret value secure. You will not be able to view it again once you leave this page.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw86hrp8ytftnqonq7m5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhw86hrp8ytftnqonq7m5.png" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Assign Permissions to the Service Principal
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to your &lt;strong&gt;Azure Subscription&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Access Control (IAM)&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99x0wryou8adnopbqg8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F99x0wryou8adnopbqg8q.png" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select &lt;strong&gt;+Add&lt;/strong&gt; and choose &lt;strong&gt;Add role assignment&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Assign the &lt;strong&gt;Contributor&lt;/strong&gt; role to your new Service Principal (&lt;code&gt;Vivek-azureML-GHdemo&lt;/code&gt;) so that it has the necessary permissions to create and manage resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlcdsc10xkhxusvfm0oy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlcdsc10xkhxusvfm0oy.png" alt="Image description" width="538" height="624"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Set Up the GitHub Repo
&lt;/h2&gt;

&lt;p&gt;We’ll use the &lt;strong&gt;MLOps v2 Demo Template Repo&lt;/strong&gt; as our starting point:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fork the repository&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://github.com/Azure/mlops-v2-gha-demo/fork" rel="noopener noreferrer"&gt;https://github.com/Azure/mlops-v2-gha-demo/fork&lt;/a&gt; to create a fork in your own GitHub org.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0iew2a0c8khv5hs4m0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx0iew2a0c8khv5hs4m0h.png" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure secrets&lt;/strong&gt; in your forked repository:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rhmdoz9guunqknkzzih.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3rhmdoz9guunqknkzzih.png" alt="Image description" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;From your GitHub repo, go to &lt;strong&gt;Settings&lt;/strong&gt; &amp;gt; &lt;strong&gt;Secrets&lt;/strong&gt; &amp;gt; &lt;strong&gt;Actions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;New repository secret&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Set the following secrets using the corresponding values from your Azure Service Principal:

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;AZURE_CREDENTIALS&lt;/code&gt; (Paste the full JSON output you obtained when creating the SP)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ARM_CLIENT_ID&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ARM_CLIENT_SECRET&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ARM_SUBSCRIPTION_ID&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ARM_TENANT_ID&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Here’s an example of what your &lt;code&gt;AZURE_CREDENTIALS&lt;/code&gt; secret might look like (JSON snippet):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"clientId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_SERVICE_PRINCIPAL_APP_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"clientSecret"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_SERVICE_PRINCIPAL_SECRET&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"subscriptionId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_AZURE_SUBSCRIPTION_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"tenantId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;YOUR_AZURE_TENANT_ID&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"activeDirectoryEndpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://login.microsoftonline.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"resourceManagerEndpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://management.azure.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"activeDirectoryGraphResourceId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://graph.windows.net/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"sqlManagementEndpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://management.core.windows.net:8443/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"galleryEndpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://gallery.azure.com/"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
     &lt;/span&gt;&lt;span class="nl"&gt;"managementEndpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://management.core.windows.net/"&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploy the Machine Learning Project Infrastructure with GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Once your secrets are in place, you can use the &lt;strong&gt;Azure MLOps (v2) solution accelerator&lt;/strong&gt; code in the forked repository to deploy the required &lt;strong&gt;Azure Machine Learning resources&lt;/strong&gt; (e.g., workspace, compute, data stores, etc.).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In your forked repo, go to &lt;strong&gt;Actions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Find the workflow that corresponds to &lt;strong&gt;infrastructure deployment&lt;/strong&gt;—usually named something like &lt;strong&gt;&lt;code&gt;.github/workflows/infra-deploy.yml&lt;/code&gt;&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Manually &lt;strong&gt;run&lt;/strong&gt; the workflow or wait for the next &lt;strong&gt;push/merge&lt;/strong&gt; to trigger it automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt; the workflow’s progress on the &lt;strong&gt;Actions&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Once completed, verify the resources in the &lt;strong&gt;Azure portal&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Azure Machine Learning Workspace&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Any associated &lt;strong&gt;resource group&lt;/strong&gt; and &lt;strong&gt;compute resources&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If you need more specific instructions (for example, customizing the workflow), refer to the official documentation:&lt;br&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-mlops-github-azure-ml?view=azureml-api-2&amp;amp;tabs=azure-portal#deploy-machine-learning-project-infrastructure-with-github-actions" rel="noopener noreferrer"&gt;Deploy machine learning project infrastructure with GitHub Actions&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;After your infrastructure is deployed, you can proceed to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Configure Data Preparation&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Use your new Azure Machine Learning workspace to set up &lt;strong&gt;data ingestion&lt;/strong&gt; and &lt;strong&gt;data versioning&lt;/strong&gt; (e.g., using Azure Blob Storage or Azure Data Lake).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Train and Evaluate the Model&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Commit your training scripts (e.g., a linear regression training script) to the GitHub repo.&lt;/li&gt;
&lt;li&gt;Update your GitHub Actions workflow to &lt;strong&gt;automatically trigger&lt;/strong&gt; model training and evaluation upon code updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model Deployment&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Deploy the trained model to an &lt;strong&gt;Azure Container Instance&lt;/strong&gt; or &lt;strong&gt;Azure Kubernetes Service&lt;/strong&gt; for real-time inference.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor Your Model&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Set up alerts and performance monitoring for your deployed endpoints.&lt;/li&gt;
&lt;li&gt;Integrate logs, metrics, and triggers for data drift detection or model re-training.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;For a full walkthrough of these steps, follow the official documentation:&lt;br&gt;&lt;br&gt;
&lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/how-to-setup-mlops-github-azure-ml?view=azureml-api-2&amp;amp;tabs=azure-portal" rel="noopener noreferrer"&gt;Set up an MLOps project with GitHub Actions&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  References
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/architecture/ai-ml/guide/machine-learning-operations-v2" rel="noopener noreferrer"&gt;Microsoft Learn: MLOps v2 Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/" rel="noopener noreferrer"&gt;Azure Machine Learning Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/actions" rel="noopener noreferrer"&gt;GitHub Actions Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Azure/mlops-v2-gha-demo" rel="noopener noreferrer"&gt;Azure MLOps (v2) Solution Accelerator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; You’ve set up an end-to-end MLOps pipeline using &lt;strong&gt;Azure Machine Learning&lt;/strong&gt; and &lt;strong&gt;GitHub Actions&lt;/strong&gt; to predict &lt;strong&gt;NYC taxi fares&lt;/strong&gt;. With these best practices, you can continuously integrate and deploy changes to your ML models, ensuring reliability and scalability in your AI solutions.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Happy MLOps!&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Build a Production LLM-Powered QC Visual Inspection System Using Azure AI Foundry</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Thu, 13 Feb 2025 15:31:53 +0000</pubDate>
      <link>https://forem.com/vivek0712/build-a-production-llm-powered-qc-visual-inspection-system-using-azure-ai-foundry-468j</link>
      <guid>https://forem.com/vivek0712/build-a-production-llm-powered-qc-visual-inspection-system-using-azure-ai-foundry-468j</guid>
      <description>&lt;p&gt;In many manufacturing and quality-control (QC) processes, visual inspection is a critical step. However, building an automated inspection system has traditionally required specialized machine vision tools and complex integrations. With &lt;strong&gt;Azure AI Foundry&lt;/strong&gt; and its &lt;strong&gt;Prompt Flow&lt;/strong&gt; feature, you can now orchestrate powerful large language models (LLMs)—like GPT-4 with Vision—to handle sophisticated visual inspection tasks with minimal friction.&lt;/p&gt;

&lt;p&gt;In this post, we’ll walk through how to set up a new project in Azure AI Foundry, clone a ready-made quality-inspection sample, and then review how you can customize and deploy it for your own production needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Sign in to Azure AI Foundry
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Head to the &lt;strong&gt;Azure AI Foundry portal&lt;/strong&gt; (provided by your Azure environment).&lt;/li&gt;
&lt;li&gt;Sign in using your Azure account credentials.&lt;/li&gt;
&lt;li&gt;You’ll land on the &lt;strong&gt;Home&lt;/strong&gt; page of Azure AI Foundry once authenticated.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0dctdgbianv7dlmwgo5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft0dctdgbianv7dlmwgo5.png" alt="Image description" width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Create a New Hub and Project
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;From the &lt;strong&gt;Home&lt;/strong&gt; page, click &lt;strong&gt;+ Create project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter a &lt;strong&gt;Name&lt;/strong&gt; for your project (for instance, “QC Visual Inspection”).&lt;/li&gt;
&lt;li&gt;Choose an &lt;strong&gt;existing hub&lt;/strong&gt; or click &lt;strong&gt;Create new hub&lt;/strong&gt; to create one from scratch.&lt;/li&gt;
&lt;li&gt;Give your new hub a &lt;strong&gt;memorable name&lt;/strong&gt; (e.g., “ProductionQC”), then select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now your &lt;strong&gt;Azure AI Foundry workspace&lt;/strong&gt; has a &lt;strong&gt;hub&lt;/strong&gt; (which is like a container or environment) and a &lt;strong&gt;project&lt;/strong&gt; (your application context).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70vqv6eis26rqgy3iptg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70vqv6eis26rqgy3iptg.png" alt="Image description" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4djlyxp09o648x40f141.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4djlyxp09o648x40f141.png" alt="Image description" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yv827fma4fj8fcjcmon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5yv827fma4fj8fcjcmon.png" alt="Image description" width="800" height="605"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Introduction to Prompt Flow
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prompt Flow&lt;/strong&gt; is a development tool in &lt;strong&gt;Azure AI Foundry&lt;/strong&gt; that helps you &lt;strong&gt;orchestrate LLMs, prompts, and Python tools&lt;/strong&gt; in a visual, node-based interface. It speeds up the cycle of prototyping, experimenting, iterating, and deploying AI applications that rely on LLMs.&lt;/p&gt;

&lt;p&gt;With &lt;strong&gt;Prompt Flow&lt;/strong&gt;, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Orchestrate&lt;/strong&gt;: Combine Large Language Models, Python scripts, and prompts into a reproducible pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visualize&lt;/strong&gt;: Build flows via a &lt;strong&gt;drag-and-drop&lt;/strong&gt; style interface—no heavy coding required.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiment &amp;amp; Iterate&lt;/strong&gt;: Quickly &lt;strong&gt;test&lt;/strong&gt; variations of prompts, compare outputs, and optimize your AI solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jyi5wq3jqdzxdv3h5ph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jyi5wq3jqdzxdv3h5ph.png" alt="Image description" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Clone the Quality Inspection Sample
&lt;/h2&gt;

&lt;p&gt;Under &lt;strong&gt;Prompt flow&lt;/strong&gt; in the &lt;strong&gt;Azure AI Foundry portal&lt;/strong&gt;, you will see &lt;strong&gt;sample flows&lt;/strong&gt; you can clone. For a &lt;strong&gt;visual inspection&lt;/strong&gt; use case, the &lt;strong&gt;Detect Defects&lt;/strong&gt; sample is an excellent starting point:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Find the &lt;strong&gt;Detect Defects&lt;/strong&gt; tile (as shown in the “Create a new flow” screenshot).&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Clone&lt;/strong&gt; to create your own copy.&lt;/li&gt;
&lt;li&gt;Name the flow (e.g., &lt;strong&gt;“QC_VisualInspection_Flow”&lt;/strong&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7kl0uxkalj2ezz5zibr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm7kl0uxkalj2ezz5zibr.png" alt="Image description" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Dive into the Flow Details
&lt;/h2&gt;

&lt;p&gt;Inside the &lt;strong&gt;Detect Defects&lt;/strong&gt; flow, you’ll see several key components:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Inputs&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;reference_image&lt;/strong&gt;: The “perfect” or expected product image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zrnr6x0zfbs7cinbkkj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5zrnr6x0zfbs7cinbkkj.png" alt="Image description" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;test_image&lt;/strong&gt;: The image of the item to be inspected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfcg0yvmf4u2f0dpte7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfcg0yvmf4u2f0dpte7j.png" alt="Image description" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;system_message&lt;/strong&gt;: A text prompt that instructs the LLM (e.g., &lt;em&gt;“You’re a professional defect detector. Your job is to compare…”&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yhyx919qn9acjssxwfy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4yhyx919qn9acjssxwfy.png" alt="Image description" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Resize Image (Python)&lt;/strong&gt;:
&lt;/h3&gt;

&lt;p&gt;This step ensures the &lt;strong&gt;reference and test images&lt;/strong&gt; are &lt;strong&gt;standardized in size/format&lt;/strong&gt; before they’re fed into the LLM.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;GPT4V_AOAI Node&lt;/strong&gt;:
&lt;/h3&gt;

&lt;p&gt;This node calls &lt;strong&gt;GPT-4 with Vision capabilities in Azure OpenAI&lt;/strong&gt; to analyze whether the two images match. The model is instructed to respond with &lt;strong&gt;“No defect detected”&lt;/strong&gt; or &lt;strong&gt;“Defect detected”&lt;/strong&gt; along with a &lt;strong&gt;detailed reason&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhpbu7yfk6yfi2kd5u0b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhpbu7yfk6yfi2kd5u0b.png" alt="Image description" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Outputs&lt;/strong&gt;:
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;final result&lt;/strong&gt; from &lt;strong&gt;GPT-4&lt;/strong&gt; is captured in the &lt;strong&gt;response&lt;/strong&gt; field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwz66xvn9memthtv0a8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwz66xvn9memthtv0a8y.png" alt="Image description" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Testing &amp;amp; Iterating
&lt;/h2&gt;

&lt;p&gt;Once your flow is &lt;strong&gt;cloned and configured&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Upload or drag-and-drop your &lt;strong&gt;reference_image&lt;/strong&gt; and &lt;strong&gt;test_image&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Adjust your &lt;strong&gt;prompt&lt;/strong&gt; in &lt;strong&gt;system_message&lt;/strong&gt; if needed.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Start compute session&lt;/strong&gt; (or &lt;strong&gt;Run&lt;/strong&gt; once the session is ready).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdpllvcnvmzc1hqwp59l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsdpllvcnvmzc1hqwp59l.png" alt="Image description" width="501" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;View the logs and final output to see whether the &lt;strong&gt;system detected any defects&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If results aren’t accurate enough, you can:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fine-tune&lt;/strong&gt; the &lt;strong&gt;prompt&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add &lt;strong&gt;additional Python logic&lt;/strong&gt; in your flow to enhance the &lt;strong&gt;pre-processing&lt;/strong&gt; or &lt;strong&gt;post-processing&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Prompt Flow makes it easy to iterate&lt;/strong&gt; by adjusting nodes, &lt;strong&gt;re-running&lt;/strong&gt;, and comparing performance.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Deployment Considerations
&lt;/h2&gt;

&lt;p&gt;For a &lt;strong&gt;production QC system&lt;/strong&gt;, you’ll likely want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Automate Input&lt;/strong&gt;: Feed images from your &lt;strong&gt;production line&lt;/strong&gt; into the flow automatically (e.g., from a &lt;strong&gt;camera&lt;/strong&gt; or an &lt;strong&gt;upload process&lt;/strong&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale&lt;/strong&gt;: Use the &lt;strong&gt;Azure AI Foundry’s distributed compute&lt;/strong&gt; capabilities if you have &lt;strong&gt;high throughput&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor&lt;/strong&gt;: Track &lt;strong&gt;performance metrics&lt;/strong&gt;, &lt;strong&gt;run times&lt;/strong&gt;, and &lt;strong&gt;defect-detection accuracy&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate&lt;/strong&gt;: Provide the &lt;strong&gt;resulting output&lt;/strong&gt; to a &lt;strong&gt;database, a dashboard,&lt;/strong&gt; or an &lt;strong&gt;alert system&lt;/strong&gt; to ensure &lt;strong&gt;real-time responses&lt;/strong&gt; to quality issues.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following these steps, you’ll have a running &lt;strong&gt;LLM-powered QC Visual Inspection&lt;/strong&gt; system in &lt;strong&gt;Azure AI Foundry&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a hub&lt;/strong&gt; and &lt;strong&gt;project&lt;/strong&gt; to organize your application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clone the Detect Defects flow&lt;/strong&gt; (sample) to jumpstart your solution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customize&lt;/strong&gt; prompts, inputs, or Python scripts to match your use case.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test and iterate&lt;/strong&gt; using &lt;strong&gt;Prompt Flow’s built-in debugging and evaluation features&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy&lt;/strong&gt; your final solution to production for &lt;strong&gt;real-time defect detection&lt;/strong&gt; and &lt;strong&gt;automated QC&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Azure AI Foundry removes much of the complexity normally involved in building AI solutions—especially those requiring &lt;strong&gt;visual and language understanding&lt;/strong&gt;. With &lt;strong&gt;GPT-4 (Vision) under the hood&lt;/strong&gt;, you can quickly set up &lt;strong&gt;advanced visual inspections&lt;/strong&gt; that would otherwise take a team of &lt;strong&gt;vision experts&lt;/strong&gt; to perfect.&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;Happy building!&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Analyse Customer Sentiment using Azure Data Factory pipeline</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Wed, 12 Feb 2025 16:30:55 +0000</pubDate>
      <link>https://forem.com/vivek0712/analyse-customer-sentiment-using-azure-data-factory-pipeline-3o6k</link>
      <guid>https://forem.com/vivek0712/analyse-customer-sentiment-using-azure-data-factory-pipeline-3o6k</guid>
      <description>&lt;p&gt;This guide demonstrates how to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy Data&lt;/strong&gt; from Azure Blob Storage to a sink.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transform&lt;/strong&gt; (preprocess) the data via an Azure Data Factory &lt;strong&gt;Data Flow&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Invoke an &lt;strong&gt;Azure ML pipeline&lt;/strong&gt; to run an inference script (using the &lt;strong&gt;AzureMLExecutePipeline&lt;/strong&gt; activity).&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Azure Subscription&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;You need an active Azure subscription.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Data Factory (V2)&lt;/strong&gt; instance
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Blob Storage&lt;/strong&gt; (with data to be processed)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure Machine Learning Workspace&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;A published ML pipeline that can be triggered
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sufficient Permissions&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Admin or Contributor on the above resources
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  High-Level Flow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Linked Service&lt;/strong&gt; in ADF to Azure Blob Storage
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Datasets&lt;/strong&gt; (input and output)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Copy Data Activity&lt;/strong&gt; (Blob -&amp;gt; Blob or other sink)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mapping Data Flow&lt;/strong&gt; (for data preprocessing)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AzureMLExecutePipeline&lt;/strong&gt; (to run inference in Azure ML)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference Script&lt;/strong&gt; in Azure ML pipeline (e.g., scoring with a trained model)&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  1. Create a Linked Service (Blob Storage)
&lt;/h2&gt;

&lt;p&gt;In Azure Data Factory, navigate to &lt;strong&gt;Manage&lt;/strong&gt; &amp;gt; &lt;strong&gt;Linked services&lt;/strong&gt; and create a new linked service for your Blob Storage. Below is an example JSON (if you prefer the code view). &lt;strong&gt;Store your connection string or SAS token securely&lt;/strong&gt; (e.g., in Key Vault).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureBlobStorage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AzureBlobStorage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"connectionString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@pipeline().parameters.blobConnectionString"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In production, reference your &lt;strong&gt;connectionString&lt;/strong&gt; from Azure Key Vault rather than hardcoding credentials in ADF.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Create Datasets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  2.1 Dataset for Input (Blob)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobInput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"linkedServiceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureBlobStorage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LinkedServiceReference"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Blob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"folderPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"input-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fileName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mydata.csv"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;If you need to handle dynamic folder paths or filenames, parameterize &lt;code&gt;folderPath&lt;/code&gt; and &lt;code&gt;fileName&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2.2 Dataset for Output (Blob)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobOutput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"linkedServiceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureBlobStorage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LinkedServiceReference"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Blob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"folderPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"output-data"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"fileName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mytransformeddata.csv"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"schema"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. Create the ADF Pipeline
&lt;/h2&gt;

&lt;p&gt;We will define a pipeline that contains three activities:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Copy Data&lt;/strong&gt; from Blob to Blob (or another sink)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Flow&lt;/strong&gt; to transform the data
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Azure ML Execute Pipeline&lt;/strong&gt; to perform inference&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Below is an example &lt;strong&gt;pipeline JSON&lt;/strong&gt; named &lt;code&gt;PL_CopyTransformAML.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"PL_CopyTransformAML"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"activities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CopyFromBlob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Copy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"dependsOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7.00:00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retryIntervalInSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureOutput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureInput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"userProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BlobSource"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sink"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BlobSink"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"enableStaging"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"dataIntegrationUnits"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"inputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobInput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DatasetReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"outputs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobOutput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DatasetReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TransformDataFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DataFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"dependsOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"activity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CopyFromBlob"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"dependencyConditions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"Succeeded"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7.00:00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retryIntervalInSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureOutput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureInput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"dataflow"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DF_PreprocessingFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DataFlowReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"staging"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"linkedServiceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureBlobStorage"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LinkedServiceReference"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"folderPath"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"temp/staging"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RunAzureMLPipeline"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AzureMLExecutePipeline"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"dependsOn"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"activity"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"TransformDataFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"dependencyConditions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
              &lt;/span&gt;&lt;span class="s2"&gt;"Succeeded"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"timeout"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"7.00:00:00"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retry"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"retryIntervalInSeconds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureOutput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"secureInput"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mlPipelineId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@pipeline().parameters.mlPipelineId"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"mlWorkspaceLinkedServiceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureMLWorkspace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LinkedServiceReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"experimentName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"InferenceExperiment"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"pipelineParameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"input_data_path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@concat('https://&amp;lt;yourstorageaccount&amp;gt;.blob.core.windows.net/output-data/mytransformeddata.csv')"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"output_data_path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@concat('https://&amp;lt;yourstorageaccount&amp;gt;.blob.core.windows.net/output-data/predictions.csv')"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mlPipelineId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"String"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"defaultValue"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyRG/providers/Microsoft.MachineLearningServices/workspaces/MyAMLWorkspace/Pipelines/my-ml-pipeline-id"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"blobConnectionString"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SecureString"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Points
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CopyFromBlob&lt;/strong&gt; copies data from the &lt;code&gt;DS_BlobInput&lt;/code&gt; dataset to &lt;code&gt;DS_BlobOutput&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TransformDataFlow&lt;/strong&gt; references a data flow named &lt;code&gt;DF_PreprocessingFlow&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RunAzureMLPipeline&lt;/strong&gt; uses the &lt;code&gt;AzureMLExecutePipeline&lt;/code&gt; activity to trigger a published pipeline in Azure ML.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Define the Data Flow (Preprocessing)
&lt;/h2&gt;

&lt;p&gt;Below is an example &lt;strong&gt;Mapping Data Flow&lt;/strong&gt; definition (&lt;code&gt;DF_PreprocessingFlow.json&lt;/code&gt;) that filters out rows with null values in certain columns. It reads from &lt;code&gt;DS_BlobOutput&lt;/code&gt; (as input) and writes back to &lt;code&gt;DS_BlobOutput&lt;/code&gt; (or a different dataset).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DF_PreprocessingFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MappingDataFlow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sources"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"source1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"dataset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobOutput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DatasetReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"streamName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"inputStream"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"sinks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sink1"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"dataset"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"referenceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DS_BlobOutput"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DatasetReference"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"streamName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"outputStream"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transformations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"FilterNulls"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Filter"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"streamName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"inputStream"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"conditions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"isNull(columnA) == false &amp;amp;&amp;amp; isNull(columnB) == false"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In a real-world scenario, your transformations could be more complex (e.g., derived columns, joins, aggregations, etc.).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. Azure ML Linked Service in ADF
&lt;/h2&gt;

&lt;p&gt;Create a &lt;strong&gt;Linked Service&lt;/strong&gt; to your Azure Machine Learning workspace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"LS_AzureMLWorkspace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AzureMLService"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typeProperties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"subscriptionId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"resourceGroupName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MyRG"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"mlWorkspaceName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MyAMLWorkspace"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"servicePrincipalId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@pipeline().parameters.servicePrincipalId"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"servicePrincipalKey"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@pipeline().parameters.servicePrincipalKey"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"tenantId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@pipeline().parameters.tenantId"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Authentication&lt;/strong&gt;: Example uses &lt;strong&gt;Service Principal&lt;/strong&gt; credentials. You can leverage &lt;strong&gt;Managed Identity&lt;/strong&gt; if configured.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  6. Azure ML Pipeline &amp;amp; Inference Script
&lt;/h2&gt;

&lt;h3&gt;
  
  
  6.1 Creating/Publishing an Azure ML Pipeline
&lt;/h3&gt;

&lt;p&gt;Use the &lt;strong&gt;Azure ML Python SDK&lt;/strong&gt; (or CLI v2) in a notebook or script to define, validate, and publish the pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# azure_ml_pipeline.py
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azureml.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Workspace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Datastore&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azureml.core.runconfig&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RunConfiguration&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azureml.pipeline.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Pipeline&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azureml.pipeline.steps&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PythonScriptStep&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;azureml.pipeline.core&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PipelineParameter&lt;/span&gt;

&lt;span class="c1"&gt;# Connect to AML Workspace
&lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Workspace&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_config&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Create environment
&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Environment&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;inference-env&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conda_dependencies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_pip_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pandas&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;python&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conda_dependencies&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_pip_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;scikit-learn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;run_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RunConfiguration&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;run_config&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;

&lt;span class="c1"&gt;# Pipeline parameters
&lt;/span&gt;&lt;span class="n"&gt;input_data_path_param&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PipelineParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_data_path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_path_placeholder&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;output_data_path_param&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PipelineParameter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output_data_path&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;default_value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;output_path_placeholder&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create a PythonScriptStep
&lt;/span&gt;&lt;span class="n"&gt;inference_step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;PythonScriptStep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;InferenceStep&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;script_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;score.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;arguments&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--input_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_data_path_param&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--output_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;output_data_path_param&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;compute_target&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;cpu-cluster&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# AML compute name
&lt;/span&gt;    &lt;span class="n"&gt;source_directory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./scripts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# folder containing score.py
&lt;/span&gt;    &lt;span class="n"&gt;runconfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;run_config&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Build pipeline
&lt;/span&gt;&lt;span class="n"&gt;pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Pipeline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;workspace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ws&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;steps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;inference_step&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Publish pipeline
&lt;/span&gt;&lt;span class="n"&gt;published_pipeline&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;publish&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;InferencePipeline&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Published pipeline ID: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;published_pipeline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once published, you’ll receive a &lt;strong&gt;Pipeline ID&lt;/strong&gt; (used in the ADF &lt;code&gt;mlPipelineId&lt;/code&gt; parameter).&lt;/p&gt;

&lt;h3&gt;
  
  
  6.2 Example Inference Script (&lt;code&gt;score.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A simple inference script using a &lt;strong&gt;scikit-learn&lt;/strong&gt; model (&lt;code&gt;model.pkl&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# score.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--input_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;--output_data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;required&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Read data (assuming CSV from a publicly accessible URL or local path)
&lt;/span&gt;    &lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Load model
&lt;/span&gt;    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;joblib&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.pkl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Predict
&lt;/span&gt;    &lt;span class="n"&gt;predictions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Convert predictions to DataFrame
&lt;/span&gt;    &lt;span class="n"&gt;pred_df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;predictions&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;columns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prediction&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Write predictions to CSV
&lt;/span&gt;    &lt;span class="n"&gt;pred_df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;to_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Inference complete. Predictions saved.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  7. Putting It All Together
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload/Deploy&lt;/strong&gt; your pipeline JSON, data flow JSON, dataset JSON, and linked service JSON to your ADF.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish&lt;/strong&gt; your ADF changes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trigger&lt;/strong&gt; the pipeline (&lt;code&gt;PL_CopyTransformAML&lt;/code&gt;).
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pipeline Flow Recap
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;CopyFromBlob&lt;/strong&gt; pulls data from &lt;code&gt;DS_BlobInput&lt;/code&gt; to &lt;code&gt;DS_BlobOutput&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TransformDataFlow&lt;/strong&gt; applies filtering (or other transformations) via &lt;code&gt;DF_PreprocessingFlow&lt;/code&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;RunAzureMLPipeline&lt;/strong&gt; invokes the &lt;strong&gt;published Azure ML pipeline&lt;/strong&gt;, passing the processed data path as input for inference.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  7.1 Run &amp;amp; Monitor
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;In the ADF &lt;strong&gt;Author&lt;/strong&gt; pane, select your pipeline.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Debug&lt;/strong&gt; or &lt;strong&gt;Trigger Now&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Track the status in the &lt;strong&gt;Monitor&lt;/strong&gt; pane.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With these steps, you've built a fully orchestrated solution:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Data ingestion&lt;/strong&gt; from Blob Storage
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data preprocessing&lt;/strong&gt; in ADF Data Flows
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inference&lt;/strong&gt; using an Azure ML pipeline and script
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can extend or modify these steps for more complex transformations, multiple models, or advanced parameterization. Always remember to keep secrets secure (via Key Vault) and optimize your compute usage in both ADF and AML.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Building!&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Electronics-Datasheet-GPT: A Step-by-Step Guide to Building Your Own Datasheet Q&amp;A AI Agent</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Tue, 11 Feb 2025 14:50:50 +0000</pubDate>
      <link>https://forem.com/vivek0712/electronics-datasheet-gpt-a-step-by-step-guide-to-building-your-own-datasheet-qa-ai-agent-5532</link>
      <guid>https://forem.com/vivek0712/electronics-datasheet-gpt-a-step-by-step-guide-to-building-your-own-datasheet-qa-ai-agent-5532</guid>
      <description>&lt;h1&gt;
  
  
  Electronics-Datasheet-GPT: A Step-by-Step Guide to Building Your Own Datasheet Q&amp;amp;A Azure AI Agent
&lt;/h1&gt;

&lt;p&gt;Are you tired of digging through endless PDF datasheets and scrolling past pages of technical jargon just to find a single spec? Meet &lt;strong&gt;Electronics-Datasheet-GPT&lt;/strong&gt;—an Azure AI Agent that can answer your hardware and electronics questions directly from product datasheets. In this blog, we’ll walk through the exact steps to create and deploy your own agent in Azure AI Foundry, using a basic setup.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Build an Electronics-Datasheet-GPT?
&lt;/h2&gt;

&lt;p&gt;Whether you’re tinkering with microcontrollers like Arduino or working on advanced PCB designs, quick and accurate access to component specifications is essential. Instead of searching manually for that elusive voltage rating or I/O pin number, an AI Agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Instantly Search and Retrieve&lt;/strong&gt; key info from thousands of lines of datasheets.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduce Mistakes&lt;/strong&gt; by delivering exact technical data on demand.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve Productivity&lt;/strong&gt;—spend more time building, less time reading.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part? You don’t need to spin up a bunch of complicated resources or code it from scratch—&lt;strong&gt;Azure AI Foundry&lt;/strong&gt; handles the heavy lifting.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Prerequisites
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Azure Subscription&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If you don’t already have one, sign up for a &lt;a href="https://azure.microsoft.com/free/" rel="noopener noreferrer"&gt;free Azure account&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Azure AI Developer Role&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure you have the &lt;strong&gt;Azure AI Developer&lt;/strong&gt; RBAC role assigned. This permission is necessary to create AI Agents and deploy models.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscfy9n7cttx58za6os8b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fscfy9n7cttx58za6os8b.png" alt="Image description" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi1qvbin93iapxn9nvry.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxi1qvbin93iapxn9nvry.png" alt="Image description" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Basic Familiarity with Azure AI Foundry&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;We’ll be using the Azure AI Foundry portal, which supports a &lt;strong&gt;basic&lt;/strong&gt; agent setup.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  2. Basic vs. Standard Setup
&lt;/h2&gt;

&lt;p&gt;Azure AI Foundry offers two agent deployment models:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Basic Setup&lt;/strong&gt;: Quick, fully-managed approach. Azure handles all the storage and search resources for you.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard Setup&lt;/strong&gt;: You manage (and pay for) your own single-tenant search and storage. More control, but more complexity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since &lt;strong&gt;basic setup&lt;/strong&gt; is supported directly in the Azure AI Foundry portal, that’s the easiest path to start building your Electronics-Datasheet-GPT.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Create a Hub and Project in Azure AI Foundry
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sign In to Azure AI Foundry&lt;/strong&gt;
Head to the &lt;a href="https://portal.azure.com" rel="noopener noreferrer"&gt;Azure AI Foundry portal&lt;/a&gt; and sign in with your Azure account.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpomgv2r2w46m77u1woc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpomgv2r2w46m77u1woc1.png" alt="Image description" width="702" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Create a New Project&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;+ Create project&lt;/strong&gt; on the Home page.
&lt;/li&gt;
&lt;li&gt;Give your project a &lt;strong&gt;Name&lt;/strong&gt; (e.g., “Electronics-Datasheet-GPT-Project”).
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uzayoyjzxvii2t0kk9x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uzayoyjzxvii2t0kk9x.png" alt="Image description" width="800" height="687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose an existing &lt;strong&gt;hub&lt;/strong&gt; or &lt;strong&gt;Create new hub&lt;/strong&gt; and name it.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdqeyisiq50pz5d3qbgf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmdqeyisiq50pz5d3qbgf.png" alt="Image description" width="800" height="687"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your new project is now ready to host your custom AI Agent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhf9xdv6pqjp3d04cvq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmhf9xdv6pqjp3d04cvq0.png" alt="Image description" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Deploy a Model (Pick Your Brain: &lt;code&gt;gpt-4o&lt;/code&gt;, &lt;code&gt;gpt-4&lt;/code&gt;, etc.)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In the Azure AI Foundry portal, open your newly created (or existing) project.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;From the &lt;strong&gt;Project Overview&lt;/strong&gt;, click &lt;strong&gt;Agents&lt;/strong&gt;.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojg8v0tcg4zc40uf4rba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojg8v0tcg4zc40uf4rba.png" alt="Image description" width="328" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select the Azure OpenAI Service Resource&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhagap4d2vag5b8dlxy4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhagap4d2vag5b8dlxy4y.png" alt="Image description" width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;If no model is currently deployed, select &lt;strong&gt;Deploy a model&lt;/strong&gt;. You’ll be presented with a list of available LLMs (e.g., &lt;code&gt;gpt-4o&lt;/code&gt;, &lt;code&gt;gpt-4&lt;/code&gt;, &lt;code&gt;gpt-35-turbo&lt;/code&gt;).  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose the model that suits your performance and cost needs. For instance, &lt;strong&gt;&lt;code&gt;gpt-4o&lt;/code&gt;&lt;/strong&gt; is a great choice for robust Q&amp;amp;A.  &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4rwb2enzmay8pp1pune.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4rwb2enzmay8pp1pune.png" alt="Image description" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Confirm&lt;/strong&gt; to spin up the deployment.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4p43q0l9wxglzwmcfb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw4p43q0l9wxglzwmcfb4.png" alt="Image description" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This step essentially sets up the core “brain” that your agent will use to interpret and answer queries.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Create Your Electronics-Datasheet-GPT Agent
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Go to the &lt;strong&gt;Agents&lt;/strong&gt; section and select &lt;strong&gt;New agent&lt;/strong&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Give your agent a &lt;strong&gt;Name&lt;/strong&gt;—for instance, “Electronics-Datasheet-GPT.”  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under &lt;strong&gt;Instructions&lt;/strong&gt;, add a clear directive for your agent. For example:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;Your task is to analyze any user query and reference the attached datasheet knowledge base (Arduino datasheet, etc.). If the question is outside this scope, respond with “This is out of scope.”&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwf4od6eozk71t72duecf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwf4od6eozk71t72duecf.png" alt="Image description" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This clarifies your agent’s primary job: to help with datasheet queries, nothing else.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Attach the Datasheet Knowledge
&lt;/h2&gt;

&lt;p&gt;Now you’ll give your agent the data it needs to answer questions—i.e., your Arduino or other electronics datasheets.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the &lt;strong&gt;Setup&lt;/strong&gt; pane (usually on the right):&lt;/li&gt;
&lt;li&gt;Scroll to &lt;strong&gt;Knowledge&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Add&lt;/strong&gt; to attach your existing knowledge store or upload a new one.
&lt;/li&gt;
&lt;li&gt;If you have a preprocessed PDF or document with the datasheet info, select that to add it to the agent’s knowledge base. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4emsg8hfpyy8jyl2v4d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg4emsg8hfpyy8jyl2v4d.png" alt="Image description" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Once uploaded, your agent will now be able to &lt;strong&gt;search&lt;/strong&gt; this data to find relevant answers.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  7. (Optional) Add Tools and Actions
&lt;/h2&gt;

&lt;p&gt;If you want your agent to do more than just Q&amp;amp;A—like run code snippets or scrape the web—scroll down to &lt;strong&gt;Actions&lt;/strong&gt; in the &lt;strong&gt;Setup&lt;/strong&gt; pane and select &lt;strong&gt;Add&lt;/strong&gt;. However, for a straightforward datasheet Q&amp;amp;A, you may not need additional actions or tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Test Your Agent in the Playground
&lt;/h2&gt;

&lt;p&gt;Here’s the fun part—seeing your Electronics-Datasheet-GPT in action!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open the Agent Playground&lt;/strong&gt;: In the &lt;strong&gt;Create and debug your agents&lt;/strong&gt; screen, select your new agent.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivv9uclvo3jvmgqhjk6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivv9uclvo3jvmgqhjk6p.png" alt="Image description" width="800" height="247"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You’ll see a chat interface. Ask your first question, for example:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;What is the recommended operating voltage for Arduino Uno?&lt;/code&gt;&lt;br&gt;
&lt;code&gt;What is the function of PIN 11, and P15&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsobeve0s009179xtdtg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsobeve0s009179xtdtg7.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent will comb through the datasheet knowledge base and respond with the correct voltage range (usually 7-12V recommended, 5V operating).
&lt;/li&gt;
&lt;li&gt;If a user question is irrelevant or not found in the datasheet, the agent should respond:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;This is out of scope.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7opuwgrn9p2yt3ujbepf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7opuwgrn9p2yt3ujbepf.png" alt="Image description" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Fine-Tune and Refine
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Edit Agent Instructions&lt;/strong&gt;: Tweak the instructions if you notice the agent drifting off-topic or not providing enough detail.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add More Datasheets&lt;/strong&gt;: If your project evolves to include more components, simply upload additional PDFs or documents to your knowledge store.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable or Disable Tools&lt;/strong&gt;: As needs grow, you might incorporate code execution or web search to further empower your agent.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  10. Wrap-Up and Next Steps
&lt;/h2&gt;

&lt;p&gt;Congratulations—you’ve built &lt;strong&gt;Electronics-Datasheet-GPT&lt;/strong&gt;! You now have an AI Agent that can handle your electronics queries quickly by referencing the technical documentation you provided.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where to go from here?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Deploy to Production&lt;/strong&gt;: Integrate your agent into a web or mobile app through the provided endpoints.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor and Optimize&lt;/strong&gt;: Keep an eye on costs and usage.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore Standard Setup&lt;/strong&gt;: If you outgrow the basic approach, consider a standard setup for more control over resources.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;No more scrolling through multi-page PDFs to find that tiny detail—your new Azure AI Agent has you covered. By following these steps, you’ve harnessed Azure AI Foundry’s powerful tools in a &lt;strong&gt;basic&lt;/strong&gt;, fully-managed setup. It’s never been easier to get an AI up and running for specialized tasks like datasheet Q&amp;amp;A.&lt;/p&gt;

&lt;p&gt;Try it out yourself, and enjoy watching your agent streamline your electronics research and build process. And if you’re feeling adventurous, add more data sources, tools, or even transition to a standard setup. The possibilities are endless with &lt;strong&gt;Electronics-Datasheet-GPT&lt;/strong&gt; on Azure!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Experimenting with DeepSeek-R1 Model in VS Code Hosted via GitHub Models</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Mon, 10 Feb 2025 13:52:22 +0000</pubDate>
      <link>https://forem.com/vivek0712/experimenting-with-deepseek-r1-model-in-vs-code-hosted-via-github-models-2ohp</link>
      <guid>https://forem.com/vivek0712/experimenting-with-deepseek-r1-model-in-vs-code-hosted-via-github-models-2ohp</guid>
      <description>&lt;h1&gt;
  
  
  Experimenting with DeepSeek-R1 Model in VS Code Using GitHub Models Platform
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;AI-assisted development is revolutionizing how developers write and test code. &lt;strong&gt;GitHub Models&lt;/strong&gt; provides a range of AI-powered tools that enhance workflows, including &lt;strong&gt;DeepSeek-R1&lt;/strong&gt;, a text generation model. By integrating this model into &lt;strong&gt;Visual Studio Code (VS Code)&lt;/strong&gt; using the &lt;strong&gt;AI Toolkit&lt;/strong&gt;, developers can streamline coding tasks and improve productivity.&lt;/p&gt;

&lt;p&gt;If you want to develop a generative AI application, you can use GitHub Models to find and experiment with AI models for free. Once you are ready to bring your application to production, you can switch to a token from a paid Azure account.&lt;/p&gt;

&lt;p&gt;This guide outlines the setup process, model selection, and how to use DeepSeek-R1 effectively within VS Code.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 1: Installing the AI Toolkit in VS Code&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;AI Toolkit for Visual Studio Code&lt;/strong&gt; allows seamless interaction with generative AI models. To install it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Open VS Code&lt;/strong&gt; and navigate to the &lt;strong&gt;Extensions Marketplace&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;"AI Toolkit for Visual Studio Code"&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Install&lt;/strong&gt; to add the extension.&lt;/li&gt;
&lt;li&gt;Once installed, click on the &lt;strong&gt;AI Toolkit icon&lt;/strong&gt; in the Activity Bar to access the toolkit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvgwjbq9snuy4sng4d3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgvgwjbq9snuy4sng4d3r.png" alt="Image description" width="800" height="268"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 2: Exploring the Model Catalog&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Once authorized, you can browse and select models from the &lt;strong&gt;Model Catalog&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;AI Toolkit&lt;/strong&gt; and click &lt;strong&gt;Open Model Catalog&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Browse through the list of available models.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;DeepSeek-R1&lt;/strong&gt;, a robust text generation model.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Try in Playground&lt;/strong&gt; under the DeepSeek-R1 model.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvy1lggkznx62ryrkgaps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvy1lggkznx62ryrkgaps.png" alt="Image description" width="800" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Step 3: Authorizing the AI Toolkit with GitHub&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To access AI models hosted on GitHub, you must authorize the AI Toolkit:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on &lt;strong&gt;AI Toolkit&lt;/strong&gt; in the &lt;strong&gt;Activity Bar&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;A prompt will appear requesting you to &lt;strong&gt;sign in using GitHub&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Allow&lt;/strong&gt; to grant the necessary permissions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo4z1p9jlmy5dbaeyonw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbo4z1p9jlmy5dbaeyonw.png" alt="Image description" width="800" height="189"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 4: Using DeepSeek-R1 in the Playground&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;After selecting DeepSeek-R1, you can test it in the AI Playground:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enter a prompt, such as &lt;strong&gt;"Write me a simple HTML code to say Hi, bloggers!"&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Adjust inference parameters (e.g., response length) as needed.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Run&lt;/strong&gt; to generate a response.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah1utxr41yg5wqejh80a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fah1utxr41yg5wqejh80a.png" alt="Image description" width="669" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8e2llucfjpwzxw17h0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq8e2llucfjpwzxw17h0e.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Step 5: Implementing the Generated Code in VS Code&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With the generated HTML snippet from DeepSeek-R1, you can integrate it into your project:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Copy the generated HTML code.&lt;/li&gt;
&lt;li&gt;Create a new file in VS Code (e.g., &lt;code&gt;deepseek.html&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Paste the HTML code and save the file.&lt;/li&gt;
&lt;li&gt;Open the file in a browser to preview the output.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexcnu5xgids8108kojea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fexcnu5xgids8108kojea.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w98glhoozdhipshuf3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2w98glhoozdhipshuf3k.png" alt="Image description" width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;AI Toolkit for Visual Studio Code&lt;/strong&gt; simplifies interactions with AI models, enabling developers to integrate AI-powered functionalities into their workflows. &lt;strong&gt;DeepSeek-R1&lt;/strong&gt; assists in generating code snippets, automating tasks, and boosting productivity.&lt;/p&gt;

&lt;p&gt;Explore different models available in &lt;strong&gt;GitHub Models&lt;/strong&gt; and see how AI can optimize your coding process.&lt;/p&gt;

&lt;p&gt;Happy coding! 🚀&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How AWS GenAI boosted my day to day Productivity</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Fri, 31 May 2024 17:49:16 +0000</pubDate>
      <link>https://forem.com/aws-heroes/how-aws-genai-boosted-my-day-to-day-productivity-1i8k</link>
      <guid>https://forem.com/aws-heroes/how-aws-genai-boosted-my-day-to-day-productivity-1i8k</guid>
      <description>&lt;p&gt;GenAI is everywhere these days, and it's no surprise why—it’s the tech world's latest obsession and has skyrocketed to the top of the Gartner hype cycle. But like any hyped technology, it comes with its share of pros and cons. On the plus side, it can automate mundane tasks, boost productivity, and spark creativity. On the downside, it raises questions about job displacement and ethical use. Despite the mixed feelings, one thing is clear: GenAI is here to stay, and it's transforming how we think about technology and its potential.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdsbwbii5395efsx7xc2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcdsbwbii5395efsx7xc2.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The agenda is fairly simple and packed with exciting highlights. First up, there's &lt;strong&gt;Amazon PartyRock&lt;/strong&gt; for Newbies (or anyone!)—a fun and engaging way to get introduced to the world of GenAI. &lt;br&gt;
Next, we dive into &lt;strong&gt;Amazon CodeWhisperer&lt;/strong&gt;, a powerful tool for developers that offers real-time code suggestions and automation to streamline coding tasks. &lt;br&gt;
Finally, we explore &lt;strong&gt;Amazon Q&lt;/strong&gt; for Business and beyond, a tool that integrates with Amazon QuickSight to provide insightful data analysis and business intelligence, helping businesses make informed decisions quickly. Whether you're a beginner or a seasoned developer, there's something in this agenda to supercharge your productivity with GenAI on AWS.&lt;/p&gt;
&lt;h2&gt;
  
  
  Amazon PartyRock
&lt;/h2&gt;

&lt;p&gt;Imagine diving into the world of generative AI without needing to write a single line of code. With Amazon PartyRock, learning generative AI fundamentals becomes an exciting and hands-on experience. PartyRock is a code-free app builder designed to make learning easy and fun. You can experiment with prompt engineering techniques, review generated responses, and develop a solid intuition for generative AI, all while creating and exploring entertaining apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrt9c8txkm0pdlxnxvh7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrt9c8txkm0pdlxnxvh7.jpg" alt="Image description" width="359" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the heart of PartyRock is access to powerful foundation models from Amazon Bedrock. Amazon Bedrock is a fully managed service that provides foundation models (FMs) from Amazon and other leading AI companies, available right on AWS. It’s the simplest way to build and scale generative AI applications with these foundation models. With PartyRock, you get to tap into the full potential of these FMs in an intuitive, code-free app-building playground. This setup is perfect for learning the essentials of prompt engineering and generative AI, making it accessible and engaging for everyone, regardless of their coding background.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam2z1a6qn6ij4yr12u51.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam2z1a6qn6ij4yr12u51.png" alt="Image description" width="512" height="291"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Amazon PartyRock, you can revolutionize your daily routine by creating custom AI apps without writing a single line of code. Imagine a smart meal planner that suggests recipes based on your pantry, a personalized workout coach that designs fitness plans, or a daily task organizer that prioritizes your to-do list. You can even build a budget tracker to oversee your finances. &lt;/p&gt;

&lt;p&gt;PartyRock makes it easy and fun to automate everyday tasks, enhancing your productivity and well-being with intuitive, AI-driven solutions. Dive in and start building your personalized AI apps today!&lt;/p&gt;

&lt;p&gt;Also do check out one of the amazing project from AWS Community by &lt;em&gt;Stephen Sennett&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiigv00zhf5bmt5sbazyl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiigv00zhf5bmt5sbazyl.png" alt="Image description" width="512" height="395"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  A Day in the Developer Life of Vivek
&lt;/h3&gt;

&lt;p&gt;Today, I log into work and am greeted with a new task assignment: upload all 'CSV' data in the 'temp' folder to an S3 bucket named 'code-demo'. This involves writing a Python function to read the CSV files and upload them to the specified S3 bucket. It’s time to nail the task.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyu542c0t8s1e6rr730g8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyu542c0t8s1e6rr730g8.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I choose my favorite IDE—VSCode (no doubt!). But sometimes, even with the best tools, you need a bit of extra help. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kw382m5v7q5kurd0qok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kw382m5v7q5kurd0qok.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like many developers, I head over to Stack Overflow to get the relevant code snippet. After some searching, I find a solution that fits my needs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvhoj6zc1t9rtwv65584.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcvhoj6zc1t9rtwv65584.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the Python code I found and used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;upload_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;objname&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;resource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Bucket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;objname&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;put&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;rb&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;csv_files_from_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;folderpath&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;folderpath&lt;/span&gt;
    &lt;span class="n"&gt;table_list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;endswith&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.csv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;table_list&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;table_list&lt;/span&gt;

&lt;span class="n"&gt;files&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;csv_files_from_folder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tempfolder&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;files&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;upload_to_s3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;codedemo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This script iterates through all CSV files in the 'tempfolder', uploading each one to the 'codedemo' S3 bucket.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Amazon CodeWhisperer Enhances My Productivity
&lt;/h2&gt;

&lt;p&gt;Amazon CodeWhisperer is my ML-powered coding companion, and it has become an invaluable part of my development workflow. Here’s how it helps me become a more productive developer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time Code Recommendations: CodeWhisperer generates code recommendations based on my comments and method names. This feature saves me time by providing relevant suggestions as I type, reducing the need to search for solutions online.&lt;/li&gt;
&lt;li&gt;Powered by Machine Learning: It leverages machine learning to offer customized code recommendations for all my Java, Python, and JavaScript projects, ensuring that I write efficient and effective code.&lt;/li&gt;
&lt;li&gt;Responsibly Use AI: CodeWhisperer empowers me to use AI responsibly, helping me create syntactically correct and secure applications. This not only boosts my productivity but also enhances the quality of my code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With Amazon CodeWhisperer integrated into my IDE, I can focus more on solving complex problems and less on repetitive coding tasks. It’s like having a knowledgeable co-pilot who guides me through the development process, making my coding experience smoother and more efficient.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4j205a5ebpldv1zfyz4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft4j205a5ebpldv1zfyz4.png" alt="Image description" width="512" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How Amazon Q Enhances Business Productivity
&lt;/h3&gt;

&lt;p&gt;Amazon Q is a game-changer for business productivity, providing a generative AI-powered assistant tailored to work seamlessly with your business needs. By leveraging the vast data and expertise available within your company's information repositories, code, and enterprise systems, Amazon Q offers fast, relevant answers to pressing questions, solves problems, generates content, and takes actions based on the data provided. Here's how Amazon Q can enhance productivity on the business side:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Amazon Q in VSCode Extension:&lt;/strong&gt;&lt;br&gt;
Amazon Q is available as part of the AWS Toolkit extension in VSCode, making it accessible directly within your development environment. This integration allows you to leverage Amazon Q's powerful capabilities without leaving your IDE, further enhancing your productivity and streamlining your workflow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0lru5moucpfoz55bv3x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc0lru5moucpfoz55bv3x.png" alt="Image description" width="512" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Enhanced Decision-Making:&lt;/strong&gt;&lt;br&gt;
Integrating with Amazon QuickSight, Amazon Q allows you to generate analysis and visualizations from simple prompts. This capability enables you to make data-driven decisions swiftly, reducing the time spent on data gathering and interpretation. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Integration with AWS Best Practices:&lt;/strong&gt;&lt;br&gt;
Amazon Q helps you adhere to AWS best practices, ensuring that your use of AWS services is optimized and secure. By offering guidance and recommendations on AWS usage, it helps maintain the integrity and efficiency of your cloud operations, reducing the risk of errors and enhancing overall productivity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faleef7y25r58p87f3irq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faleef7y25r58p87f3irq.png" alt="Image description" width="512" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Example of Amazon Q in Action:
&lt;/h3&gt;

&lt;p&gt;Imagine you're analyzing the difference between website unique visits and total paid conversions. With Amazon Q, you can simply type a natural language query, and it will generate a visual representation of the data, helping you quickly identify trends and insights without the need for complex queries or manual data manipulation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk8y2y53q79pz04ktaid.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhk8y2y53q79pz04ktaid.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sample Query:&lt;/strong&gt;&lt;br&gt;
"Show the difference in number of website unique visits versus total paid conversions."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqzzixzu9rmxxq9y4ekt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwqzzixzu9rmxxq9y4ekt.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt;&lt;br&gt;
Amazon Q interprets the query and generates a visual analysis, providing a clear and concise view of the data, which you can then use to make informed business decisions.&lt;/p&gt;

&lt;p&gt;GenAI is not here to take over your jobs but to supercharge your productivity! With tools like Amazon CodeWhisperer and Amazon Q, you can streamline your development workflow, make data-driven business decisions, and foster creativity and innovation. These powerful AI-driven solutions are designed to assist you, making complex tasks more manageable and freeing you to focus on what truly matters. Embrace the future of productivity with GenAI on AWS and watch your efficiency and effectiveness soar.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>genai</category>
    </item>
    <item>
      <title>What If Amazon Prime A/B Tests IPL Broadcasting?</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Wed, 21 Feb 2024 17:53:40 +0000</pubDate>
      <link>https://forem.com/vivek0712/what-if-amazon-prime-ab-tests-ipl-broadcasting-2ee7</link>
      <guid>https://forem.com/vivek0712/what-if-amazon-prime-ab-tests-ipl-broadcasting-2ee7</guid>
      <description>&lt;p&gt;In a rapidly evolving digital marketplace, Amazon Prime seeks to solidify its leadership by critically analyzing competitors, understanding user preferences, and innovating its pricing and benefits structure. This exploration involves a detailed comparative analysis to identify competitive edges, thorough market research to capture current trends and user demands, and strategic recommendations for diversifying pricing tiers to better meet diverse consumer needs. Central to this strategy is the implementation of A/B testing, a methodical approach to refine and perfect the Prime experience. Through this multifaceted strategy, Amazon Prime aims to not only keep pace with market dynamics but to set new standards for customer satisfaction and engagement in the digital subscription space.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Views are my own&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Shipping and Delivery Benefits
&lt;/h3&gt;

&lt;p&gt;Amazon Prime revolutionizes the online shopping experience with exceptional shipping and delivery perks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free Delivery&lt;/strong&gt;: Eligible addresses enjoy no shipping costs on Prime-eligible items.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast Delivery Options&lt;/strong&gt;: Ranging from One-Day to Same-Day Delivery, ensuring swift arrivals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No-Rush Shipping&lt;/strong&gt;: Opt for slower delivery and earn ₹25 cashback, perfect for non-urgent orders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discounted Delivery Charges&lt;/strong&gt;: Morning Delivery available at reduced rates per item.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No Minimum Order&lt;/strong&gt;: Free Standard Delivery without a minimum purchase requirement.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Shopping and Savings
&lt;/h3&gt;

&lt;p&gt;Prime membership is synonymous with exclusive savings and shopping benefits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Pay ICICI Bank Credit Card&lt;/strong&gt;: 5% back on Amazon.in purchases, plus additional rewards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prime Early Access &amp;amp; Exclusive Deals&lt;/strong&gt;: Get first dibs on Lightning Deals and exclusive offers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prime Advantage&lt;/strong&gt;: Enjoy No Cost EMI on smartphones and 6 months of Free Screen Replacement by Acko.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Digital Content
&lt;/h3&gt;

&lt;p&gt;Dive into a world of endless entertainment with Prime's digital content offerings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prime Reading&lt;/strong&gt;: Access a vast catalog of eBooks, comics, and more.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Music&lt;/strong&gt;: Stream millions of songs and albums ad-free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Prime Video&lt;/strong&gt;: Unlimited streaming of movies, original series, live sports, and TV shows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prime Gaming&lt;/strong&gt;: Free games every month and more gaming benefits.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exclusive Member Benefits
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Prime Lite Membership&lt;/strong&gt;: A lighter version offering similar benefits but with some limitations, such as Morning Delivery at a higher rate and access to Prime Video on one device in HD quality with ads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Navigating the Competitive Landscape in India
&lt;/h2&gt;

&lt;p&gt;In the vibrant Indian market, Amazon Prime faces stiff competition across its multiple service categories:&lt;/p&gt;

&lt;h3&gt;
  
  
  E-commerce and Membership Programs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flipkart Plus&lt;/strong&gt;: Offers free delivery and early access to sales, with benefits earned through SuperCoins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Snapdeal Gold&lt;/strong&gt;: Provides free shipping, extended returns, and exclusive offers for digital payment users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Video Streaming Services
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hotstar (Disney+ Hotstar)&lt;/strong&gt;, &lt;strong&gt;ZEE5&lt;/strong&gt;, &lt;strong&gt;SonyLIV&lt;/strong&gt;, &lt;strong&gt;Voot&lt;/strong&gt;, and &lt;strong&gt;Netflix&lt;/strong&gt; offer a diverse range of content, from live sports to original series, catering to varied viewer preferences.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MX Player&lt;/strong&gt;: A free platform with a wide selection of TV shows, movies, and originals.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Music Streaming Services
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Competitors like &lt;strong&gt;Gaana&lt;/strong&gt;, &lt;strong&gt;Wynk Music&lt;/strong&gt;, &lt;strong&gt;JioSaavn&lt;/strong&gt;, and &lt;strong&gt;Spotify&lt;/strong&gt; feature extensive music libraries and podcasts, appealing to music enthusiasts with their curated playlists and exclusive content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A Diverse Competitive Landscape
&lt;/h3&gt;

&lt;p&gt;The Indian market thrives on diversity, providing consumers with a plethora of choices tailored to their preferences. Amazon Prime, with its comprehensive bundle of services, stands out by offering an all-encompassing subscription that addresses a wide range of needs, from shopping and savings to unmatched digital entertainment.&lt;/p&gt;

&lt;p&gt;This landscape ensures that Indian consumers can enjoy a variety of options, pushing service providers, including Amazon, to continuously innovate and enhance their offerings to meet and exceed customer expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Service Benefits Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit/Service&lt;/th&gt;
&lt;th&gt;Amazon Prime&lt;/th&gt;
&lt;th&gt;Flipkart Plus&lt;/th&gt;
&lt;th&gt;Disney+ Hotstar&lt;/th&gt;
&lt;th&gt;ZEE5&lt;/th&gt;
&lt;th&gt;Gaana&lt;/th&gt;
&lt;th&gt;JioSaavn&lt;/th&gt;
&lt;th&gt;Netflix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;E-commerce Benefits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Free Delivery&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Exclusive Deals&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Early Access to Sales&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Video Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Original Series&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Movies &amp;amp; TV Shows&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Live Sports&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Music Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Large Music Library&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;- Ad-Free Listening&lt;/td&gt;
&lt;td&gt;✓&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;In the competitive world of online subscriptions, various platforms offer distinct benefits and pricing models to attract and retain users. This matrix provides a comprehensive overview of the key features and costs associated with some of the leading services available in India.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pricing Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Service Provider&lt;/th&gt;
&lt;th&gt;Subscription Tier&lt;/th&gt;
&lt;th&gt;Cost (INR)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Amazon Prime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Annual&lt;/td&gt;
&lt;td&gt;₹1,499&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;₹179&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Flipkart Plus&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Membership&lt;/td&gt;
&lt;td&gt;Free (Earn SuperCoins)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Disney+ Hotstar&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile&lt;/td&gt;
&lt;td&gt;₹499/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Super&lt;/td&gt;
&lt;td&gt;₹899/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;₹1,499/year&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ZEE5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;₹299&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Annual&lt;/td&gt;
&lt;td&gt;₹999&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Gaana&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Plus Monthly&lt;/td&gt;
&lt;td&gt;₹99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Plus Annual&lt;/td&gt;
&lt;td&gt;₹399&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JioSaavn&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pro Monthly&lt;/td&gt;
&lt;td&gt;₹99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Pro Annual&lt;/td&gt;
&lt;td&gt;₹399&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Netflix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mobile&lt;/td&gt;
&lt;td&gt;₹199/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;td&gt;₹499/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;₹649/month&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Premium&lt;/td&gt;
&lt;td&gt;₹799/month&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Key Statistics for Amazon Prime in India
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Over 60 million active users of Amazon Prime Video.&lt;/li&gt;
&lt;li&gt;65% of Prime members are male, and 60% are under the age of 35.&lt;/li&gt;
&lt;li&gt;Approximately 55% have a college degree.&lt;/li&gt;
&lt;li&gt;Subscription services generated nearly $32 billion in revenue in 2021.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Global Impact of Amazon Prime
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Over 200 million Prime members worldwide.&lt;/li&gt;
&lt;li&gt;Sales during Prime Day reached $11.79 billion in 2021.&lt;/li&gt;
&lt;li&gt;Accessible in 22 countries.&lt;/li&gt;
&lt;li&gt;Retail subscription fees contribute $25.21 billion to Amazon’s annual revenue.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing Tiers Recommendation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Prime Tier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing&lt;/strong&gt;: ₹999/year or ₹99/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Free Two-Day Delivery on eligible items&lt;/li&gt;
&lt;li&gt;Access to Prime Video with ads (limited content)&lt;/li&gt;
&lt;li&gt;Prime Music with ads&lt;/li&gt;
&lt;li&gt;Limited access to Prime Reading and Prime Gaming&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Rationale&lt;/strong&gt;: Targets price-sensitive customers, offering a lower entry point with basic Prime benefits.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Standard Prime Tier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing&lt;/strong&gt;: ₹1,499/year or ₹149/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;All Basic Tier benefits without ads&lt;/li&gt;
&lt;li&gt;Free One-Day Delivery on eligible items&lt;/li&gt;
&lt;li&gt;Expanded Prime Video content&lt;/li&gt;
&lt;li&gt;Exclusive deals and early access to sales&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Rationale&lt;/strong&gt;: Aligns with current Prime offering, balancing cost and value for the average consumer.&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prime Plus Tier
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pricing&lt;/strong&gt;: ₹2,499/year or ₹249/month&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Benefits&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;All Standard Tier benefits&lt;/li&gt;
&lt;li&gt;Free Same-Day Delivery in select cities&lt;/li&gt;
&lt;li&gt;Access to premium content on Prime Video, including international titles&lt;/li&gt;
&lt;li&gt;Family sharing for up to 4 family members&lt;/li&gt;
&lt;li&gt;Higher cashback on Amazon Pay&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Rationale&lt;/strong&gt;: Targets premium segment willing to pay more for enhanced services and exclusive content.&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pricing Approaches and Process
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cost Plus Pricing&lt;/strong&gt;: Ensure each tier covers the cost of services provided, including delivery logistics and licensing fees for content, plus a fixed margin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Pricing&lt;/strong&gt;: The Basic and Standard tiers should be competitively priced against rivals like Disney+ Hotstar and Netflix, ensuring Amazon remains an attractive option for cost-conscious consumers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value Based Pricing&lt;/strong&gt;: The Prime Plus tier is priced based on the perceived value of comprehensive benefits, exclusive content, and convenience, targeting customers willing to pay more for a premium experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation and Experimentation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bundling Options&lt;/strong&gt;: Offer bundled services with Amazon devices (like Kindle or Echo) and partnerships with ISPs or mobile operators to increase value perception.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discounted Rates&lt;/strong&gt;: Provide introductory offers, student discounts, and annual payment discounts to encourage long-term commitments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experimentation&lt;/strong&gt;: Pilot the new tiers in select markets to gather data on customer preferences and willingness to pay, adjusting strategies based on feedback and performance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Learning&lt;/strong&gt;: Monitor customer satisfaction, renewal rates, and competitive landscape adjustments, refining the pricing and benefits structure as necessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A/B Testing Proposals for the Indian Market
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Video Streaming Content Preferences
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Adding more regional language films and series will increase subscription rates and viewer engagement among non-Hindi speaking demographics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Introduce a new section of regional content in two different formats: one as a separate category on the homepage and another integrated within existing categories but with a regional filter option.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Compare engagement rates (subscriptions, watch time) between users exposed to separate regional categories versus those with integrated regional filters.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. E-commerce Delivery Options
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Offering a late-night delivery option for prime products will increase conversions and customer satisfaction in metro cities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Implement a late-night delivery option (post 9 PM) for a select range of products in two major cities, comparing against the standard delivery options in control groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Measure the increase in Prime subscriptions and repeat purchases in test cities versus control groups with standard delivery times.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Prime Membership Tiers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Introducing a lower-priced, mobile-only Prime Video tier will attract younger demographics and increase overall Prime memberships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Offer a mobile-only Prime Video subscription at a reduced rate to a segment of users, and compare the subscription uptake against the standard Prime membership offering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Analyze the number of subscriptions, average watch time, and retention rates between the mobile-only tier and the full Prime membership.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Exclusive Deals and Offers
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Exclusive access to flash sales on electronics and high-value items will increase Prime membership renewals and upgrades.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Provide early or exclusive access to flash sales on popular electronics to Prime members, and a regular sale for non-Prime users, measuring the impact on Prime sign-ups and renewals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Compare the Prime membership renewal rate and customer lifetime value before and after implementing exclusive flash sales.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Customized User Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Personalized homepage recommendations based on past purchases and browsing history will increase product discovery and purchases among Prime members.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Create two versions of the Prime homepage: one with standard, popular product listings and another with personalized recommendations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Evaluate the change in purchase frequency and basket size between users exposed to personalized homepages versus the control group.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Sports and Live Events
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Expanding live sports content beyond cricket to include local sports like Kabaddi and Football will broaden the user base and engagement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Stream select live Kabaddi and Football matches available exclusively to Prime members, and assess viewership and engagement metrics compared to IPL viewership.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Measure new Prime sign-ups, average watch time, and retention rates during the sports season for both cricket and new sports offerings.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Local Delivery Services for Last-Mile Delivery in Rural Areas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hypothesis&lt;/strong&gt;: Partnering with local delivery services for last-mile delivery in rural areas will improve Prime accessibility and customer satisfaction in underserved regions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test&lt;/strong&gt;: Collaborate with local delivery partners to offer Prime delivery services in rural areas, measuring the impact on delivery speed, customer feedback, and subscription.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example&lt;/strong&gt;: Compare delivery times and customer reviews between rural areas with and without local delivery partnerships, assessing the effectiveness of the initiative in expanding Prime's reach.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By conducting these strategic A/B tests, Amazon Prime can identify opportunities within the Indian market to drive growth and enhance its competitive edge.&lt;/p&gt;

&lt;p&gt;In the dynamic landscape of digital subscriptions, Amazon Prime stands as a testament to innovation, customer-centricity, and strategic foresight, promising an enriched experience for its members across India.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Speed-Dataing for hackers!</title>
      <dc:creator>Vivek0712</dc:creator>
      <pubDate>Sat, 06 Jan 2024 17:40:30 +0000</pubDate>
      <link>https://forem.com/vivek0712/speed-dataing-for-hackers-2ll</link>
      <guid>https://forem.com/vivek0712/speed-dataing-for-hackers-2ll</guid>
      <description>&lt;p&gt;For the ML enthusiasts, self-taught developers engaging in hackathons, and the professionals and data scientists striving to streamline ML processes, this blog is your compass in the world of machine learning. Whether you're tuning your ML operations or seeking a Rapid Application Development (RAD) strategy for Data Science, you've come to the right place. &lt;/p&gt;

&lt;p&gt;You, my friend, are a &lt;strong&gt;&lt;em&gt;hacker&lt;/em&gt;&lt;/strong&gt; at heart if you resonate with any of the roles mentioned. As a seasoned hackathon expert engaged in 60+ hackathons and a professional MLOps Architect and startup consultant for AI/ML, I will demonstrate how to accelerate the machine learning journey from start to finish, all while maintaining the integrity and accuracy of your data and models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tackling Stroke Prediction with ML: A No-Code Journey with Cleanlab, Azure, and Amazon SageMaker
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Unraveling the Stroke Prediction Dataset from Kaggle
&lt;/h3&gt;

&lt;p&gt;In this blog, we embark on an insightful journey through the realm of machine learning, utilizing the Stroke Prediction Dataset from Kaggle as our guiding star. This dataset holds the potential to unravel predictive insights about stroke occurrences, based on parameters such as gender, age, health conditions, and smoking status. Each data entry is a window into a patient's profile, aiding us in understanding the likelihood of a stroke. Our goal? To predict whether a patient is at risk of a stroke (1) or not (0), using this rich dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  The No-Code Edge: Introducing Cleanlab
&lt;/h3&gt;

&lt;p&gt;But here's the twist – we are going to do all of this without writing a single line of code! I introduce you to one of my secret weapons: Cleanlab. This tool is designed to simplify the entire machine learning process, from data cleaning to model selection, making it accessible even to those without extensive coding experience. To validate our approach, we will be benchmarking our results specifically against one of the prominent cloud-based AutoML tools: Azure Automated Machine Learning.&lt;/p&gt;

&lt;h1&gt;
  
  
  Exploring Cleanlab Studio: Uploading Your Dataset
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Getting Started with Cleanlab Studio
&lt;/h2&gt;

&lt;p&gt;To begin your no-code machine learning journey with Cleanlab Studio, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://cleanlab.ai"&gt;Cleanlab.ai&lt;/a&gt; and sign up for an account or visit their &lt;a href="https://github.com/cleanlab/cleanlab"&gt;GitHub account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Utilize the free trial offer to get started.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Navigating the Dashboard
&lt;/h2&gt;

&lt;p&gt;Once logged in, you'll be greeted with an intuitive dashboard. Here's what you'll find:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6eldqzy5zydiai4k6q0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6eldqzy5zydiai4k6q0x.png" alt="Cleanlab Dashboard" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Projects Section
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;List of ML Projects&lt;/strong&gt;: Each project is associated with a dataset and includes details such as dataset quality and issues resolved.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Datasets Section
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Dataset Listings&lt;/strong&gt;: Find datasets by name along with details like modality, the number of rows, and upload date.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uploading Your Dataset
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Upload Dataset&lt;/strong&gt;: Click "Upload Dataset" on your dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Select File&lt;/strong&gt;: Choose "Upload from your computer" and select the stroke prediction dataset file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dataset Details&lt;/strong&gt;: Confirm dataset name and designate an "ID column" for unique data identification.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuwwnm9gd32u30qvahmz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhuwwnm9gd32u30qvahmz.png" alt="Upload Dataset" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Schema Confirmation&lt;/strong&gt;: Review the detected fields (columns) by Cleanlab Studio.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frry7o1o9dhmn6tv3bfkd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frry7o1o9dhmn6tv3bfkd.png" alt="STEP 2" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dataset Preview&lt;/strong&gt;: Visually inspect a sample of your dataset to ensure correctness.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kvxv20pj385ywp1z8u5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5kvxv20pj385ywp1z8u5.png" alt="Preview" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;## Creating a Project and Cleaning Data in Cleanlab Studio&lt;/p&gt;

&lt;p&gt;After uploading your dataset, proceed with the following steps to create a project and clean your data:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create Project
&lt;/h3&gt;

&lt;p&gt;Click on the &lt;code&gt;+ Create Project&lt;/code&gt; button once your dataset is ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89eaptjdtqah7janfp0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89eaptjdtqah7janfp0v.png" alt="Image description" width="389" height="138"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Project Details
&lt;/h3&gt;

&lt;p&gt;Enter a name for your new project, such as "Stroke Prediction". Select the appropriate cleaning task for your data, which in this case is "Tabular Classification".&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Type of Classification
&lt;/h3&gt;

&lt;p&gt;Choose "Multi-Class" as the type of classification since each data point in the stroke prediction dataset corresponds to one outcome.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fypnr9u6k41daui6awb6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fypnr9u6k41daui6awb6h.png" alt="Image description" width="800" height="697"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Label Column
&lt;/h3&gt;

&lt;p&gt;Identify the "stroke" column as the label for prediction within your dataset.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Dataset Sample
&lt;/h3&gt;

&lt;p&gt;A sample of your dataset is provided for review. Ensure that the data appears as expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Feature Fields
&lt;/h3&gt;

&lt;p&gt;Check the feature fields you wish to include in your machine learning model.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51y1b9axrw9d60xx35q8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51y1b9axrw9d60xx35q8.png" alt="Image description" width="800" height="759"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Use Cleanlab Auto-ML
&lt;/h3&gt;

&lt;p&gt;Enable Cleanlab Auto-ML to allow the platform to automatically train and combine multiple models for optimal data cleaning.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Project Setting
&lt;/h3&gt;

&lt;p&gt;Select between the "Fast" and "Regular" cleaning options. "Fast" provides quicker but potentially less precise results, while "Regular" is more thorough and yields higher quality at the cost of more time.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Start Cleaning
&lt;/h3&gt;

&lt;p&gt;Click &lt;code&gt;Clean my data&lt;/code&gt; to initiate the auto-cleaning process. Cleanlab will process your data and send an email notification when the results are ready.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlwfw2li89hmuwepiuv4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnlwfw2li89hmuwepiuv4.png" alt="Image description" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Insights from Data Cleaning and Model Evaluation
&lt;/h2&gt;

&lt;p&gt;After the data cleaning process, Cleanlab Studio has meticulously identified specific issues within our dataset. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk89y38oedeb7ml4mfpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flk89y38oedeb7ml4mfpx.png" alt="Issues" width="800" height="301"&gt;&lt;/a&gt;&lt;br&gt;
The platform's auto-training feature has evaluated several machine learning models to determine the best performer with the cleaned data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xw9rljkhnw0xlcqsbiu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xw9rljkhnw0xlcqsbiu.png" alt="Auto trained models" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Improving Data Quality with Cleanlab Studio
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Clean Top K
&lt;/h4&gt;

&lt;p&gt;This feature offers a bulk action capability, allowing you to address issues across numerous data points at once. The actions you select here will affect the top data points, which are determined by the currently applied sort and filter settings within Cleanlab Studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2tm0jk47dvtf3c7l9a7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2tm0jk47dvtf3c7l9a7.png" alt="Top K" width="681" height="112"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Auto-fix
&lt;/h4&gt;

&lt;p&gt;When you choose the 'Auto-fix' option, Cleanlab Studio automatically applies its recommended actions to the selected data points. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctsqnns73fyw8do44yvm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctsqnns73fyw8do44yvm.png" alt="Autofix" width="667" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Steps for Training and Deployment
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Name your model, e.g., &lt;code&gt;stroke-prediction-cleaned-model&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfclt5p42gyg9ii4hmmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfclt5p42gyg9ii4hmmx.png" alt="Image description" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;code&gt;Deploy Model&lt;/code&gt; to begin the process.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flephav3rscv0zoar7l3c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flephav3rscv0zoar7l3c.png" alt="Image description" width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Post-deployment
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95qkj2ybzv4cx0jtyae6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F95qkj2ybzv4cx0jtyae6.png" alt="Image description" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Track the deployment status on the dashboard.&lt;/li&gt;
&lt;li&gt;Review the model evaluation for accuracy and performance metrics.&lt;/li&gt;
&lt;li&gt;Use the provided Python API for integration, with your API key for secure access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tku125ga3r7nn1lc6bc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7tku125ga3r7nn1lc6bc.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;br&gt;
Deploying your model is now just a click away, paving the way for insightful predictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benchmarking Against Azure Automated Machine Learning
&lt;/h2&gt;

&lt;p&gt;Typically, following the established &lt;a href="https://learn.microsoft.com/en-us/azure/machine-learning/how-to-use-automated-ml-for-ml-models?view=azureml-api-2"&gt;steps&lt;/a&gt; for creating a machine learning model with Azure Automated Machine Learning, we now compare the results.&lt;/p&gt;

&lt;h3&gt;
  
  
  Azure Model Training Overview
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Algorithm&lt;/strong&gt;: A Voting Ensemble approach was utilized.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AUC Weighted&lt;/strong&gt;: Achieved an AUC weighted score of 0.85427.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accuracy&lt;/strong&gt;: The model attained an accuracy of 95.127%.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbqswwjvkjgtph5yu1ni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbqswwjvkjgtph5yu1ni.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdz5m85r3q6790sn4svet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdz5m85r3q6790sn4svet.png" alt="Image description" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Cleanlab's AutoML Advantages
&lt;/h3&gt;

&lt;p&gt;When juxtaposing Cleanlab's AutoML results with those from Azure's Automated Machine Learning, it's evident that Cleanlab stands out, particularly in terms of accuracy. Cleanlab not only matches but often surpasses the precision of Azure's offerings in term of straightforwardness of cleaning and training data, lesser training time&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp2qzl17qtw49ukey0j1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvp2qzl17qtw49ukey0j1.png" alt="Image description" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fij2qsvbskwvs9xrwf7c7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fij2qsvbskwvs9xrwf7c7.png" alt="Image description" width="800" height="511"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Streamlined Model Deployment and Evaluation
&lt;/h2&gt;

&lt;p&gt;Cleanlab's platform is designed for simplicity and ease of use, streamlining the deployment process. It ensures that models are not only deployed efficiently but also monitored with a user-friendly interface, offering a clear and concise view of your model's performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The Stroke Prediction Dataset from Kaggle served not just as a dataset but as a gateway to understanding a critical global health issue. With the World Health Organization citing stroke as the 2nd leading cause of death, our problem statement transcended a mere technical challenge; it became a mission to potentially save lives through predictive analysis.&lt;/p&gt;

&lt;p&gt;The Cleanlab Studio, with its no-code AutoML solution, demonstrated that sophisticated machine learning is not confined to experts. It showed that with the right tools, we could make significant strides in medical predictions, even under the crunch of hackathon and organisation deadlines. Our comparative analysis with Azure's Automated Machine Learning further highlighted Cleanlab's efficiency and accuracy, bolstering our confidence in the solutions we developed.&lt;/p&gt;

&lt;p&gt;As we draw this blog to a close, the key takeaway is clear: the union of purposeful problem statements with powerful, accessible ML tools like Cleanlab can lead to breakthroughs in not just technology but also in societal well-being. This project was more than an exercise in ML proficiency; it was a step towards leveraging technology for the greater good. The path ahead is promising, and as we continue to innovate, we do so with the hope of making a tangible impact on the world.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>cleanlab</category>
      <category>azureml</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
