diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..9c7e095 Binary files /dev/null and b/.DS_Store differ diff --git a/.github/steps/-step.txt b/.github/steps/-step.txt deleted file mode 100644 index 573541a..0000000 --- a/.github/steps/-step.txt +++ /dev/null @@ -1 +0,0 @@ -0 diff --git a/.github/steps/0-welcome.md b/.github/steps/0-welcome.md deleted file mode 100644 index c0ca82a..0000000 --- a/.github/steps/0-welcome.md +++ /dev/null @@ -1,56 +0,0 @@ - - -# πŸŽ‰ Welcome to the JS AI Build-a-thon! - -This is a hands-on experience designed for you to work through a series of quests, each designed to guide you through the process of building AI apps step by step. - -🧠 Concepts you will cover include:- - -- GitHub Models -- Azure AI Foundry VS Code Extension -- Azure AI Foundry Portal -- AI Toolkit VS Code Extension -- Azure Developer CLI (azd) -- Express.js -- Vite, Lit -- LangChain.js -- Azure AI Agents Service -- MCP Tools -- Automation with GenAIScript - -## πŸ—ΊοΈ How it works - -This build-a-thon is organized into **quests** β€” choose the one that matches your goals and click its badge to begin. - -Each quest has a required activity (e.g., push code). After you complete it, **GitHub Actions** will automatically unlock your next step. - -**Tips:** -⭐ **Recommended path**⭐ Start with the first quest and go in order for the **best** learning experience. - -πŸ”„ To restart, click the **Reset** button at the top of any page. - - -## βœ… Activity: Select a quest - -Click on a quest and follow the instructions to get started. - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_build_a_local_GenAI_prototype-green)](../../issues/new?title=Quest:+I+want+to+build+a+local+GenAI+prototype&labels=quest&body=πŸš€+I%27m+ready+to+build+my+first+local+GenAI+prototype%21+Let%27s+get+started+with+AI+in+JavaScript%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_move_my_prototype_to_Azure-orange)](../../issues/new?title=Quest:+I+have+a+prototype.+Let's+move+to+Azure&labels=quest&body=☁️+Time+to+take+my+AI+prototype+to+the+cloud%21+Excited+to+deploy+on+Azure+and+scale+up%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_add_a_simple_chat_interface_to_my_app-blue)](../../issues/new?title=Quest:+I+want+to+add+a+simple+chat+interface&labels=quest&body=%F0%9F%92%AC+Let%27s+add+a+chat+interface+and+make+my+AI+app+interactive%21+Ready+for+some+real-time+conversations%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_integrate_external_data_using_RAG-purple)](../../issues/new?title=Quest:+I+want+to+create+my+first+AI+app+with+RAG&labels=quest&body=%F0%9F%93%9A+I%27m+diving+into+RAG+and+building+my+first+retrieval-augmented+AI+app%21+Let%27s+do+this%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_explore_frameworks-yellow)](../../issues/new?title=Quest:+I+want+to+explore+frameworks&labels=quest&body=πŸ› οΈ+Let%27s+explore+frameworks+and+build+something+amazing%21+Excited+to+learn+and+experiment%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_build_an_AI_Agent-violet)](../../issues/new?title=Quest:+I+want+to+build+an+agent&labels=quest&body=%F0%9F%A4%96+Let%27s+build+an+AI+agent+that+can+help+and+interact+with+users%21+Excited+for+this+step%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_use_MCP_tools-cyan)](../../issues/new?title=Quest:+I+want+to+use+MCP+tools&labels=quest&body=πŸ”§+Time+to+dive+into+MCP+tools%21+Let%27s+get+started%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_automate_code_reviews-crimson)](../../issues/new?title=Quest:+I+want+to+automate+code+reviews&labels=quest&body=πŸ“„+Let%27s+use+AI+to+review+your+code%21%0A%0A**Please+click+on+Create+below,+then+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - -[![Static Badge](https://img.shields.io/badge/Quest-I_want_to_create_templates-pink)](../../issues/new?title=Quest:+I+want+to+create+templates&labels=quest&body=πŸ“„+Let%27s+create+templates+to+streamline+future+projects%21+Excited+to+design+and+build%21%0A%0A**Please+wait+about+15+seconds.+This+issue+will+automatically+close+and+the+README+will+update+with+your+next+instructions.**) - - - diff --git a/.github/steps/10-finish.md b/.github/steps/10-finish.md deleted file mode 100644 index 5d5267f..0000000 --- a/.github/steps/10-finish.md +++ /dev/null @@ -1,37 +0,0 @@ - - -## Finish - -_Congratulations friend, you've completed this course!_ - -celebrate - -Here's a recap of all the tasks you've accomplished in your repository: - -- πŸ’» Built a Local AI Prototypes with **GitHub Models** & **AI Toolkit Extension** -- πŸ”„ Migrated your prototype to Azure **(GitHub Models → Azure AI Foundry)** -- ☁️ Deployed models and used it in your project with the **Azure AI Foundry Extension** -- πŸ“Š Connected to external data with RAG, add conversation history with **LangChain.js** -- πŸ€– Built an AI Agent with **Azure AI Foundry Extension** -- 🧰 Extended the AI Agent with MCP Tools using the **AI Toolkit Extension** -- ⚑ Automated your dev workflows with **GitHub Models** and **GenAIScript** - -## Your creativity should be shared. - -In the quests, you have been building and implementing different AI components in Azure. If you have built an awesome project, [submit your project as a GitHub issue](https://github.com/Azure-Samples/JS-AI-Build-a-thon/issues/new?template=project-submission.md) and get your projects featured. - -## Is it a celebration without goodies? - -Upon completion of all the quests, you will be issued a badge to mark your milestone. To get your badge, fill in the form xxx and add your project repository link. - -Once you receive your badge, be sure to post on social media using the #JSAIBuildathon. - -## The momentum does not stop here. -- [We'd love to hear what you thought of this course](https://aka.ms/JSAIBuildathon-feedback). -- Continue the interaction on our [Discord channel](https://aka.ms/JSAIonDiscord), channel name #js-ai-buildathon. -- Encountered any bugs or issues in the products you used? Share your feedback on our [feedback board](https://github.com/orgs/azure-ai-foundry/discussions). -- If you enjoyed the course, remember to take a minute and [leave star on our GitHub repo.](https://aka.ms/jsaibuildathon) -- [Explore additional courses and ideas you can start around JavaScript and Microsoft](https://developer.microsoft.com/en-us/javascript/). diff --git a/.github/workflows/0-welcome.yml b/.github/workflows/0-welcome.yml deleted file mode 100644 index f6a2955..0000000 --- a/.github/workflows/0-welcome.yml +++ /dev/null @@ -1,162 +0,0 @@ -name: Step 0, Welcome - -on: - workflow_dispatch: - issues: - types: [opened, edited, labeled] - -permissions: - contents: write - issues: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_quest_selection: - name: Handle quest selection - needs: get_current_step - if: >- - ${{ github.event_name == 'issues' && - (contains(github.event.issue.title, 'Quest') || - contains(join(github.event.issue.labels.*.name, ' '), 'quest')) }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Determine selected quest - id: determine_quest - run: | - TITLE="${{ github.event.issue.title }}" - if [[ "$TITLE" == *"GenAI prototype"* ]]; then - echo "quest=1" >> $GITHUB_OUTPUT - echo "to_step=1" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"move to Azure"* ]]; then - echo "quest=2" >> $GITHUB_OUTPUT - echo "to_step=2" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"simple chat interface"* ]]; then - echo "quest=3" >> $GITHUB_OUTPUT - echo "to_step=3" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"first AI app with RAG"* ]]; then - echo "quest=4" >> $GITHUB_OUTPUT - echo "to_step=4" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"explore frameworks"* ]]; then - echo "quest=5" >> $GITHUB_OUTPUT - echo "to_step=5" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"build an agent"* ]]; then - echo "quest=6" >> $GITHUB_OUTPUT - echo "to_step=6" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"MCP tools"* ]]; then - echo "quest=7" >> $GITHUB_OUTPUT - echo "to_step=7" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"automate code reviews"* ]]; then - echo "quest=8" >> $GITHUB_OUTPUT - echo "to_step=8" >> $GITHUB_OUTPUT - elif [[ "$TITLE" == *"create templates"* ]]; then - echo "quest=9" >> $GITHUB_OUTPUT - echo "to_step=9" >> $GITHUB_OUTPUT - else - echo "quest=0" >> $GITHUB_OUTPUT - echo "to_step=1" >> $GITHUB_OUTPUT - fi - - - name: Update step based on quest selection - if: steps.determine_quest.outputs.quest != '0' - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 0 - to_step: ${{ steps.determine_quest.outputs.to_step }} - - - name: Rewrite badge links in README.md to relative paths - run: | - OWNER_REPO="${GITHUB_REPOSITORY}" - # Ensure relative issue links like ](/issues/new?...) remain unchanged - sed -i 's|](https://github.com/'"${OWNER_REPO}"'/issues/new?|](/issues/new?|g' README.md - # Remove any malformed absolute links that include blob/main in the path - sed -i "s#github.com/${OWNER_REPO}/blob/main/issues/new?#/issues/new?#g" README.md - - - - name: Comment on issue - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - const quest = process.env['DETERMINE_QUEST_OUTPUTS_QUEST'] || '${{ steps.determine_quest.outputs.quest }}'; - let message = ''; - const readmeUrl = `https://github.com/${context.repo.owner}/${context.repo.repo}/blob/main/README.md`; - if (quest === '0') { - message = "I couldn't determine which quest you selected. Please try again with one of the quests listed in the README."; - } else { - message = `Thanks for selecting this quest! The repository has been updated to guide you through this path. You can close this issue and continue with the instructions in the [README](${readmeUrl}).`; - } - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: message - }); - if (quest !== '0') { - github.rest.issues.update({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - state: 'closed' - }); - } - - reset_quest: - name: Handle reset quest - needs: get_current_step - if: >- - ${{ github.event_name == 'issues' && - contains(join(github.event.issue.labels.*.name, ' '), 'reset') }} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Reset to step 0 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: ${{ needs.get_current_step.outputs.current_step }} - to_step: 0 - - - name: Rewrite badge links in README.md to relative paths - run: | - OWNER_REPO="${GITHUB_REPOSITORY}" - # Ensure relative issue links like ](/issues/new?...) remain unchanged - sed -i 's|](https://github.com/'"${OWNER_REPO}"'/issues/new?|](/issues/new?|g' README.md - # Remove any malformed absolute links that include blob/main in the path - sed -i "s#github.com/${OWNER_REPO}/blob/main/issues/new?#/issues/new?#g" README.md - - - name: Comment and close issue - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: "Your quest has been reset! You can now select a new quest from the README." - }); - github.rest.issues.update({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - state: 'closed' - }); \ No newline at end of file diff --git a/.github/workflows/1-genai-prototype.yml b/.github/workflows/1-genai-prototype.yml deleted file mode 100644 index 674aeba..0000000 --- a/.github/workflows/1-genai-prototype.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Step 1, GH Models and AI Toolkit - -on: - workflow_dispatch: - push: - paths: - - "sample.js" - branches: - - main - -# Reference: https://docs.github.com/en/actions/security-guides/automatic-token-authentication -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - - on_ghmodelcode: - name: On addition of the basic code connecting to GitHub Models - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 1 }} - - # We'll run Ubuntu for performance instead of Mac or Windows. - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository so that we can edit the README. - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches. - - - name: Check package.json - uses: skills/action-check-file@v1 - with: - file: "sample.js" - search: "GITHUB_TOKEN" - - # In README.md, switch step 2 for step 3. - - name: Update to step 2 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 1 - to_step: 2 diff --git a/.github/workflows/2-to-azure.yml b/.github/workflows/2-to-azure.yml deleted file mode 100644 index dcf9b99..0000000 --- a/.github/workflows/2-to-azure.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Step 2, Local to Azure - -on: - workflow_dispatch: - push: - paths: - - "ai-foundry.js" - branches: - - main - -# Reference: https://docs.github.com/en/actions/security-guides/automatic-token-authentication -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_aifoundrycode: - name: On addition of the basic code connecting to Azure AI Foundry - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 2 }} - - # We'll run Ubuntu for performance instead of Mac or Windows. - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository so that we can edit the README. - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches. - - - name: Check package.json - uses: skills/action-check-file@v1 - with: - file: "ai-foundry.js" - search: "completions" - - # In README.md, switch step 3 for step 4. - - name: Update to step 3 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 2 - to_step: 3 diff --git a/.github/workflows/3-add-chat-ui.yml b/.github/workflows/3-add-chat-ui.yml deleted file mode 100644 index c0744af..0000000 --- a/.github/workflows/3-add-chat-ui.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Step 3, Chat UI - -on: - workflow_dispatch: - push: - paths: - - "azure.yaml" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_azureconfig: - name: On addition of infrastructure code to deploy to Azure - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 3 }} - - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository so that we can edit the README. - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches. - - - name: Check azure.yaml - uses: skills/action-check-file@v1 - with: - file: "azure.yaml" - search: "staticwebapp" - - - name: Update to step 4 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 3 - to_step: 4 \ No newline at end of file diff --git a/.github/workflows/4-add-rag.yml b/.github/workflows/4-add-rag.yml deleted file mode 100644 index 1569f2b..0000000 --- a/.github/workflows/4-add-rag.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Step 4, Add RAG - -on: - workflow_dispatch: - push: - paths: - - "data/**" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_data_directory: - name: On addition of data directory - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 4 }} - - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository to verify the data directory exists - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches - - - name: Check data directory exists - id: check_data - run: | - if [ -d "data" ]; then - echo "data_exists=true" >> $GITHUB_OUTPUT - else - echo "data_exists=false" >> $GITHUB_OUTPUT - fi - - - name: Update to step 5 - if: steps.check_data.outputs.data_exists == 'true' - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 4 - to_step: 5 \ No newline at end of file diff --git a/.github/workflows/5-frameworks.yml b/.github/workflows/5-frameworks.yml deleted file mode 100644 index 9e68826..0000000 --- a/.github/workflows/5-frameworks.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Step 5, Add Conversation Memory - -on: - workflow_dispatch: - push: - paths: - - "packages/webapi/package.json" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_langchain_dependency: - name: On addition of LangChain to package.json - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 5 }} - - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository to verify the package.json content - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches - - - name: Check for LangChain in package.json - id: check_langchain - run: | - if [ -f "packages/webapi/package.json" ] && grep -q "@langchain/openai" packages/webapi/package.json; then - echo "langchain_exists=true" >> $GITHUB_OUTPUT - else - echo "langchain_exists=false" >> $GITHUB_OUTPUT - fi - - - name: Update to step 6 - if: steps.check_langchain.outputs.langchain_exists == 'true' - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 5 - to_step: 6 \ No newline at end of file diff --git a/.github/workflows/6-build-agent.yml b/.github/workflows/6-build-agent.yml deleted file mode 100644 index 633452d..0000000 --- a/.github/workflows/6-build-agent.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Step 6, Add Agent and Tools - -on: - workflow_dispatch: - push: - paths: - - "packages/webapi/agentService.js" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_agent_directory: - name: On addition of an agentService module - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 6 }} - - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository to verify the agent directory exists - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches - - - name: Check agentService.js file exists - id: check_agent - run: | - if [ -f "packages/webapi/agentService.js" ]; then - echo "agent_exists=true" >> $GITHUB_OUTPUT - else - echo "agent_exists=false" >> $GITHUB_OUTPUT - fi - - - name: Update to step 7 - if: steps.check_agent.outputs.agent_exists == 'true' - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 6 - to_step: 7 \ No newline at end of file diff --git a/.github/workflows/7-mcp.yml b/.github/workflows/7-mcp.yml deleted file mode 100644 index d794215..0000000 --- a/.github/workflows/7-mcp.yml +++ /dev/null @@ -1,59 +0,0 @@ -name: Step 7, Connect Agent to MCP Tools - -on: - workflow_dispatch: - push: - paths: - - "packages/**" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - on_agent_directory: - name: On addition of node-os-mcp directory - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 7 }} - - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository to verify the agent directory exists - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches - - - name: Check node-os-mcp directory exists - id: check_node-os-mcp - run: | - if [ -d "packages/node-os-mcp" ]; then - echo "agent_exists=true" >> $GITHUB_OUTPUT - else - echo "agent_exists=false" >> $GITHUB_OUTPUT - fi - - - name: Update to step 8 - if: steps.check_node-os-mcp.outputs.node-os-mcp_exists == 'true' - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 7 - to_step: 8 \ No newline at end of file diff --git a/.github/workflows/8-code-review.yml b/.github/workflows/8-code-review.yml deleted file mode 100644 index b34e2ab..0000000 --- a/.github/workflows/8-code-review.yml +++ /dev/null @@ -1,57 +0,0 @@ -name: Step 8, Complete Quest - Code Review - -on: - workflow_dispatch: - push: - paths: - - "code-review.genai.js" - branches: - - main - -permissions: - contents: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - id: get_step - run: echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - - on_ghmodelcode: - name: Add code review script - needs: get_current_step - - if: >- - ${{ !github.event.repository.is_template - && needs.get_current_step.outputs.current_step == 8 }} - - # We'll run Ubuntu for performance instead of Mac or Windows. - runs-on: ubuntu-latest - - steps: - # We'll need to check out the repository so that we can edit the README. - - name: Checkout - uses: actions/checkout@v4 - with: - fetch-depth: 0 # Let's get all the branches. - - - name: Check package.json - uses: skills/action-check-file@v1 - with: - file: "code-review.genai.js" - search: "GITHUB_TOKEN" - - # In README.md, switch step 2 for step 3. - - name: Update to step 9 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 8 - to_step: 9 diff --git a/.github/workflows/9-template.yml b/.github/workflows/9-template.yml deleted file mode 100644 index 36915bd..0000000 --- a/.github/workflows/9-template.yml +++ /dev/null @@ -1,34 +0,0 @@ -name: Step 9, Complete Quest - Templates - -on: - workflow_dispatch: - issues: - types: [opened] - -permissions: - contents: write - issues: write - -jobs: - update_step_on_complete_quest: - if: | - github.event.issue.title == 'Quest: I want a Production-Ready Template to customize' - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Update to step 10 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: 9 - to_step: 10 - - - name: Comment and close issue - uses: peter-evans/close-issue@v3 - with: - comment: | - πŸŽ‰ Congratulations! You've completed the Templates quest. Your progress has been updated and you can now continue to the next step. - - πŸ‘‰ [Go to the main README to continue](../README.md) \ No newline at end of file diff --git a/.github/workflows/init-step0.yml b/.github/workflows/init-step0.yml deleted file mode 100644 index fa63d5f..0000000 --- a/.github/workflows/init-step0.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: Initialize README to Step 0 - -on: - push: - branches: - - main - # Only run on the very first commit (when the repo is created from the template) - # This works because the first commit after template creation is always the initial commit - # Optionally, you can add a path filter if you want to be even more specific - -permissions: - contents: write - -jobs: - init_readme: - runs-on: ubuntu-latest - if: ${{ github.event.head_commit.message == 'Initial commit' && !github.event.repository.is_template }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Check if README already contains Step 0 - id: check_readme - run: | - if grep -q "Welcome to the JS AI Build-a-thon" README.md; then - echo "already_step0=true" >> $GITHUB_OUTPUT - else - echo "already_step0=false" >> $GITHUB_OUTPUT - fi - - - name: Prepare personalized welcome and badge links - if: steps.check_readme.outputs.already_step0 == 'false' - run: | - OWNER="$(echo "${GITHUB_REPOSITORY}" | cut -d'/' -f1)" - REPO="$(echo "${GITHUB_REPOSITORY}" | cut -d'/' -f2)" - OWNER_REPO="${GITHUB_REPOSITORY}" - - cp .github/steps/0-welcome.md 0-welcome-tmp.md - sed -i "s/^## Welcome to the JS AI Build-a-thon!/## Welcome ${OWNER}, to the JS AI Build-a-thon!/" 0-welcome-tmp.md - sed -i "s#(\/issues/new?#(https://github.com/${OWNER_REPO}/issues/new?#g" 0-welcome-tmp.md - - - name: Copy personalized step 0 to README.md - if: steps.check_readme.outputs.already_step0 == 'false' - run: cp 0-welcome-tmp.md README.md - - - name: Rewrite badge links in README.md to absolute URLs - if: steps.check_readme.outputs.already_step0 == 'false' - run: | - OWNER_REPO="${GITHUB_REPOSITORY}" - # Use pipe as delimiter and target the specific pattern ](/issues/new? - # This replaces relative issue links like ](/issues/new?...) with absolute ones - sed -i 's|](/issues/new?|](https://github.com/'"${OWNER_REPO}"'/issues/new?|g' README.md - - - name: Commit and push README update - if: steps.check_readme.outputs.already_step0 == 'false' - run: | - git config --global user.name "github-actions[bot]" - git config --global user.email "github-actions[bot]@users.noreply.github.com" - git add README.md - git commit -m "Initialize README with personalized step 0 instructions" - git push \ No newline at end of file diff --git a/.github/workflows/reset-progress.yml b/.github/workflows/reset-progress.yml deleted file mode 100644 index 6931874..0000000 --- a/.github/workflows/reset-progress.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Reset Progress - -on: - issues: - types: [opened, labeled] - -permissions: - contents: write - issues: write - -jobs: - get_current_step: - name: Check current step number - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Check step file existence - run: | - if [ -f ./.github/steps/-step.txt ]; then - echo "Step file exists. Contents:"; - cat ./.github/steps/-step.txt; - else - echo "Step file does not exist."; - fi - - id: get_step - run: | - echo "current_step=$(cat ./.github/steps/-step.txt)" >> $GITHUB_OUTPUT - outputs: - current_step: ${{ steps.get_step.outputs.current_step }} - - reset_quest: - needs: get_current_step - if: >- - ${{ github.event_name == 'issues' && - (contains(github.event.issue.title, 'Reset') || - contains(github.event.issue.title, 'Skip') || - contains(join(github.event.issue.labels.*.name, ''), 'reset'))}} - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Debug event payload - run: | - echo "Event name: ${{ github.event_name }}" - echo "Event labels: ${{ toJson(github.event.issue.labels) }}" - echo "Event title: ${{ github.event.issue.title }}" - - - name: Debug issue labels - run: | - echo "Issue labels: ${{ toJson(github.event.issue.labels) }}" - - - name: Reset to step 0 - uses: skills/action-update-step@v2 - with: - token: ${{ secrets.GITHUB_TOKEN }} - from_step: ${{ needs.get_current_step.outputs.current_step }} - to_step: 0 - - - name: Rewrite badge links in README.md to absolute URLs - run: | - OWNER_REPO="${GITHUB_REPOSITORY}" - # Use pipe as delimiter and target the specific pattern ](/issues/new? - # This replaces relative issue links like ](/issues/new?...) with absolute ones - sed -i 's|](/issues/new?|](https://github.com/'"${OWNER_REPO}"'/issues/new?|g' README.md - # Fix any malformed issue links that include blob/main in the path - sed -i "s#github.com/${OWNER_REPO}/blob/main/issues/new?#github.com/${OWNER_REPO}/issues/new?#g" README.md - - - name: Comment and close issue - uses: actions/github-script@v7 - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - script: | - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: "Your progress has been reset! You can now select a new user quest from the [Welcome step](../../../README.md)." - }); - github.rest.issues.update({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - state: 'closed' - }); \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 55a250d..0000000 --- a/.gitignore +++ /dev/null @@ -1,404 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -# but not Directory.Build.rsp, as it configures directory-level build defaults -!Directory.Build.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml - -# Environment variables -.env diff --git a/.github/steps/1-genai-prototype.md b/01-local-genai-prototype/README.md similarity index 88% rename from .github/steps/1-genai-prototype.md rename to 01-local-genai-prototype/README.md index 61541c3..3820808 100644 --- a/.github/steps/1-genai-prototype.md +++ b/01-local-genai-prototype/README.md @@ -1,10 +1,6 @@ # πŸ€– Quest: I want to build a local Gen AI prototype -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progress](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Progress:+Back+to+Welcome&labels=reset&body=πŸ”„+I+want+to+reset+my+progress+and+go+back+to+the+Welcome+page.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+page+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -136,7 +132,7 @@ Now that you have a better understanding of the models from the GitHub Models pl Follow the instructions provided to: - Get a free developer key, (Personal Access Token (classic)) and store it in an environment variable either using bash, PowerShell or command line. - Install dependencies - - Run basic code sample. **Ensure your local file is named `sample.js`** + - Run basic code sample. **This quest assumes the file is named `sample.js`** ![Run node sample file](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/node-sample.png?raw=true) @@ -185,30 +181,6 @@ The AI Toolkit in Visual Studio Code is a powerful extension that provides a set ![AI Toolkit - html preview](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/html-preview.png?raw=true) -## βœ… Activity: Push `sample.js` code to your repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** -- [ ] Have a `sample.js` file at the root of your project -- [ ] The file MUST include a reference to your GITHUB_TOKEN environment variable - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Working with GitHub Models and AI Toolkit" - git push - ``` - -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+Quest:+Back+to+Welcome&labels=reset&body=πŸ”„+I+want+to+skip+this+quest+and+go+back+to+the+Welcome+page.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+page+to+select+a+new+quest.**) ## πŸ“š Further Reading diff --git a/.github/steps/2-to-azure.md b/02-local-to-azure/README.md similarity index 66% rename from .github/steps/2-to-azure.md rename to 02-local-to-azure/README.md index 6205627..37c0599 100644 --- a/.github/steps/2-to-azure.md +++ b/02-local-to-azure/README.md @@ -1,10 +1,6 @@ # ☁️ Quest: I want to move my AI prototype to Azure -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -14,16 +10,14 @@ ## πŸ“ Overview -In this step, you will learn how to deploy your AI model to Azure AI Foundry after testing it locally with GitHub Models. +In this step, you will learn how to deploy your AI model to Microsoft Foundry after testing it locally with GitHub Models. ### Assumption ⚠️ - You have already completed the previous steps in this project and have opened the **model playground on GitHub Models.** -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. +## 🧠 GitHub Models to Microsoft Foundry -## 🧠 GitHub Models to Azure AI Foundry > [!Note] > The following steps on GitHub Models should be in A SEPARATE BROWSER TAB. Keep this tab open for reference. @@ -44,9 +38,9 @@ In this step, you will learn how to deploy your AI model to Azure AI Foundry aft ## 🧰 AI Foundry VS Code Extension -To continue working with your deployed model in VS Code, you will need to install the AI Foundry VS Code extension, which will allow you to deploy and manage models in Azure AI Foundry without leaving your IDE. +To continue working with your deployed model in VS Code, you will need to install the AI Foundry VS Code extension, which will allow you to deploy and manage models in Microsoft Foundry without leaving your IDE. -1. Click on the **Extensions** icon in the left sidebar of Visual Studio Code, search for **Azure AI Foundry** and **install**. +1. Click on the **Extensions** icon in the left sidebar of Visual Studio Code, search for **Microsoft Foundry** and **install**. 2. Once installed, click on the **AI Foundry** icon in the left sidebar and click on **Set Default Project**. Select your project and expand the **Models** section. You should see your deployed model(s) listed there. @@ -94,37 +88,11 @@ To continue working with your deployed model in VS Code, you will need to instal ![AI Foundry sample code](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/run-ai-foundry-sample.png?raw=true) - -## βœ… Activity: Push `ai-foundry.js` code to your repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Have a `ai-foundry.js` file at the root of your project -- [ ] The file MUST include a call to the `chat/completion` endpoint of your deployed model - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Connect to Azure AI Foundry" - git push - ``` - -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading -Here are some additional resources to help you learn more about getting started with Azure AI Foundry and deploying models: +Here are some additional resources to help you learn more about getting started with Microsoft Foundry and deploying models: -- [Azure AI Foundry Extension for Visual Studio Code is Available in Preview](https://devblogs.microsoft.com/foundry/azure-ai-foundry-vscode-extension-preview/) -- [Work with the Azure AI Foundry for Visual Studio Code extension docs](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/develop/get-started-projects-vs-code) -- [πŸ“Ή BRK107: Develop, Build and Deploy LLM Apps using GitHub Models and Azure AI Foundry](https://build.microsoft.com/en-US/sessions/BRK107?source=sessions) +- [Microsoft Foundry Extension for Visual Studio Code is Available in Preview](https://devblogs.microsoft.com/foundry/azure-ai-foundry-vscode-extension-preview/) +- [Work with the Microsoft Foundry for Visual Studio Code extension docs](https://learn.microsoft.com/en-us/azure/ai-foundry/how-to/develop/get-started-projects-vs-code) +- [πŸ“Ή BRK107: Develop, Build and Deploy LLM Apps using GitHub Models and Microsoft Foundry](https://build.microsoft.com/en-US/sessions/BRK107?source=sessions) - [Microsoft AI Tools Extension Pack](https://marketplace.visualstudio.com/items?itemName=ms-windows-ai-studio.microsoft-ai-tools-pack), a curated set of essential extensions for building generative AI applications and agents in VS Code \ No newline at end of file diff --git a/.github/steps/3-add-chat-ui.md b/03-add-chat-interface/README.md similarity index 87% rename from .github/steps/3-add-chat-ui.md rename to 03-add-chat-interface/README.md index a333ccb..65a94c5 100644 --- a/.github/steps/3-add-chat-ui.md +++ b/03-add-chat-interface/README.md @@ -1,9 +1,5 @@ # πŸ’¬ Quest: I want to add a simple chat interface -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -315,32 +311,6 @@ To deploy the application, ![azd up](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/azd-up.png?raw=true) - -## βœ… Activity: Push deployment infra code to your repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Have an `azure.yaml` file at the root of your project -- [ ] The file MUST include a service being deployed to `staticwebapp` - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Added a simple chat interface" - git push - ``` - -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading Here are some additional resources to help you learn more about tools used in this step: diff --git a/.github/steps/4-add-rag.md b/04-rag-integration/README.md similarity index 89% rename from .github/steps/4-add-rag.md rename to 04-rag-integration/README.md index 73d03f6..6a64a46 100644 --- a/.github/steps/4-add-rag.md +++ b/04-rag-integration/README.md @@ -1,9 +1,5 @@ # πŸ“š Quest: I want to integrate external data RAG -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -18,10 +14,7 @@ In this step, you will learn how to add RAG (**R**etrieval-**A**ugmented **G**en ### Assumption ⚠️ -- You have completed the previous steps and have a working AI app that can answer questions. If you haven't, please click the **Reset Progress** button above to select the _Add a simple chat interface_ quest. - -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. +- You have completed the previous steps and have a working AI app that can answer questions. To complete this step, you will need to get a sample dataset in any format (e.g., PDF, CSV, JSON) to work with. @@ -384,31 +377,6 @@ Open your browser to use the app, usually at `http://localhost:5123`. ![AI Foundry no RAG general question](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/no-rag-general.png?raw=true) Notice how, with RAG enabled, the AI is strictly limited to the handbook and refuses to answer unrelated questions. With RAG disabled, the AI is more flexible and answers any question to the best of its ability. - - -## βœ… Activity: Push your updated code to the repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Have a `data` folder in the root of your project - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Connected to external data using RAG technique" - git push - ``` -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading diff --git a/.github/steps/5-frameworks.md b/05-explore-frameworks/README.md similarity index 81% rename from .github/steps/5-frameworks.md rename to 05-explore-frameworks/README.md index a6a0e80..df768a6 100644 --- a/.github/steps/5-frameworks.md +++ b/05-explore-frameworks/README.md @@ -1,9 +1,5 @@ # 🧠 Quest: I want to add conversation memory to my app -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -18,10 +14,7 @@ In this step, you will learn you can simplify integrating AI features into your ### Assumption ⚠️ -This step assumes you have already completed the previous steps in this project and have a working web application that uses Azure's LLM endpoints. If you haven't done so, please click the **Reset Progress** button above to select the _Add a simple chat interface_ quest. - -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. +This step assumes you have already completed the previous steps in this project and have a working web application that uses Azure's LLM endpoints. ## Step 1️⃣: Add LangChain.js to your project We'll first install LangChain.js in our project to ensure our backend can communicate with Azure's LLM endpoints using LangChain's abstractions. @@ -208,30 +201,6 @@ To test this, open the chat UI in your browser and send a message like _"Hey, yo ![Memory test passed](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/memory-test-passed.png?raw=true) -## βœ… Activity: Push your updated code to the repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Have a `@langchain/azure-openai` dependency in your package.json in the webapi directory - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Updated to use LangChain.js and added conversation memory" - git push - ``` - -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading Here are some additional resources to help you learn more about LangChain.js and its features: diff --git a/.github/steps/6-build-agent.md b/06-build-agent/README.md similarity index 87% rename from .github/steps/6-build-agent.md rename to 06-build-agent/README.md index 5a03a52..a2e1bc1 100644 --- a/.github/steps/6-build-agent.md +++ b/06-build-agent/README.md @@ -1,9 +1,5 @@ # πŸ€– Quest: I want to build an AI Agent -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -19,21 +15,17 @@ In this step, you will learn how to build a basic AI agent using the AI Foundry ### Assumption ⚠️ -This step assumes you have already completed previous steps and that you have the Azure AI Foundry VS Code extension installed with a default project set up. If you haven't done so, please click the **Reset Progress** button above and start from the _Move AI prototype to Azure_ quest. - -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. +This step assumes you have already completed previous steps and that you have the Microsoft Foundry VS Code extension installed with a default project set up. ## Step 1️⃣: Create an Agent - **‼️IMPORTANT NOTE** Currently, agents are only supported in the following regions: **australiaeast, centraluseuap, eastus, eastus2, francecentral, japaneast, norwayeast, southindia, swedencentral, uksouth, westus, westus3** At a later stage, you will add **bing grounding** to your agent, a service that works with **all Azure OpenAI models except _gpt-4o-mini, 2024-07-18_**. We therefore recommend using the _gpt-4o_ model for this quest. -If you used a different region, please [create a new Azure AI Foundry project](https://ai.azure.com/build), _(On the AI Foundry portal)_, in one of the supported regions and deploy a model, (gpt-4o), there. +If you used a different region, please [create a new Microsoft Foundry project](https://ai.azure.com/build), _(On the Microsoft Foundry portal)_, in one of the supported regions and deploy a model, (gpt-4o), there. **‼️END OF NOTE** @@ -82,9 +74,9 @@ If you used a different region, please [create a new Azure AI Foundry project](h ```` 3. **Create Agent** - Click on the **Create Agent on Azure AI Foundry** button in the Agent Designer to create and deploy your agent to Azure AI Foundry. Once created, the agent will pop up in the AI Foundry extension under the "Agents" section. + Click on the **Create Agent on Microsoft Foundry** button in the Agent Designer to create and deploy your agent to Microsoft Foundry. Once created, the agent will pop up in the AI Foundry extension under the "Agents" section. - ![Deploy to Azure AI Foundry Button](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/deploy-to-ai-foundry.png?raw=true) + ![Deploy to Microsoft Foundry Button](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/deploy-to-ai-foundry.png?raw=true) ## Step 2️⃣: Test the Agent in the Playground @@ -162,7 +154,7 @@ On the `yaml` file, scroll down to the `tools` section and delete the empty arra - `project_name` = Your Project name on AI Foundry - `bing_grounding_connection_name` = The connection name **NOT** the bing resource name -- A Bing Grounding connection should appear under the **Tool** section on the Agent Designer. Click on **Update Agent on Azure AI Foundry** to update your agent with the new tool configuration. +- A Bing Grounding connection should appear under the **Tool** section on the Agent Designer. Click on **Update Agent on Microsoft Foundry** to update your agent with the new tool configuration. Now that you've added the Bing Grounding to your agent, you can test it in the Playground. Open the "Agent Playground" and send the agent a message like _"What's the weather in Nairobi right now?"_ The agent should use the Bing Search API tool to fetch the current weather information and respond with a friendly message. @@ -477,31 +469,6 @@ If you ask the agent a question that requires real-time information, such as _"W ![Weather in Spain in Agent mode](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/weather-in-spain.png?raw=true) - -## βœ… Activity: Push your updated code to the repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Ensure your agent configuration file is added to `.gitignore` to prevent it from being committed. DON'T PUSH IT TO THE REPOSITORY. -- [ ] Have an `agentService.js` file in the `packages/webapi` directory - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Added agent mode" - git push - ``` -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading Here are some additional resources to help you learn more about building AI agents and extending their capabilities with tools: diff --git a/.github/steps/7-mcp.md b/07-use-mcp/README.md similarity index 85% rename from .github/steps/7-mcp.md rename to 07-use-mcp/README.md index 87626f6..5f973b1 100644 --- a/.github/steps/7-mcp.md +++ b/07-use-mcp/README.md @@ -1,9 +1,5 @@ # πŸ”— Quest: Create an AI Agent with Tools from an MCP Server -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -15,10 +11,7 @@ ## πŸ“ Overview -This quest will guide you through the process of creating an AI Agent with tools from an MCP (Model Context Protocol) server using the AI Toolkit extension for Visual Studio Code. - -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. +This quest will guide you through the process of creating an AI Agent with tools from an MCP (Model Context Protocol) server using the AI Toolkit extension for Visual Studio Code. ## Step 1️⃣: Add a tool-compatible model @@ -240,30 +233,6 @@ Run `npm install` to install the dependencies for the MCP server. ![Add to prompts](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/os-summary-response.png?raw=true) - -## βœ… Activity: Push your mcp server code to the repository - -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** - -- [ ] Have a `node-os-mcp` folder in the packages directory - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Added os mcp server" - git push - ``` -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading Here are some additional resources to help you learn more about the Model Context Protocol (MCP) and how to use it with the AI Toolkit extension for Visual Studio Code: diff --git a/.github/steps/8-code-review.md b/08-automate-code-reviews/README.md similarity index 72% rename from .github/steps/8-code-review.md rename to 08-automate-code-reviews/README.md index c623fdd..8e99070 100644 --- a/.github/steps/8-code-review.md +++ b/08-automate-code-reviews/README.md @@ -1,9 +1,5 @@ # βš™οΈ Quest: I want to automate code reviews -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+click+on+Create+below,+then+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -12,9 +8,6 @@ ## πŸ“ Overview -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. - You will build an **automated code review system** that uses AI to analyze code changes and provide feedback. This system will help you ensure that your code meets the quality standards best practices of your project, while also learning how to use AI to automate some of your development tasks. ## 🧠 Use GenAIScript in VS Code @@ -88,27 +81,6 @@ Then while your `code-review.genai.js` file is open, select the **Run GenAIScrip You should then see a new tab open with the AI's code review feedback. It should point out a few things since the model has no knowledge of GenAIScript here, but you can use this as a starting point. Experiment with tweaking the prompt to get more specific feedback based on your coding standards and practices. -### Quest Checklist - -To complete this quest and **AUTOMATICALLY UPDATE** your progress, you MUST push your code to the repository as described below. - -**Checklist** -- [ ] Have a `code-review.genai.js` file at the root of your project - -1. In the terminal, run the following commands to add, commit, and push your changes to the repository: - - ```bash - git add . - git commit -m "Add code review script" - git push - ``` - -2. After pushing your changes, **WAIT ABOUT 15 SECONDS FOR GITHUB ACTIONS TO UPDATE YOUR README**. - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“š Further Reading Here are some additional resources to help you learn more about GenAIScript: diff --git a/.github/steps/9-templates.md b/09-create-templates/README.md similarity index 82% rename from .github/steps/9-templates.md rename to 09-create-templates/README.md index 7aabb9d..4ff3c64 100644 --- a/.github/steps/9-templates.md +++ b/09-create-templates/README.md @@ -1,9 +1,5 @@ # ⚑️ Quest: I want a Production-Ready Template to customize -> To reset your progress and select a different quest, click this button: -> -> [![Reset Progess](https://img.shields.io/badge/Reset--Progress-ff3860?logo=mattermost)](../../issues/new?title=Reset+Quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) - ## πŸ“‹ Pre-requisites 1. A GitHub account @@ -14,8 +10,6 @@ ## πŸ“ Overview -> [!IMPORTANT] -> If you have done the previous quest, ensure you pull your changes from GitHub using `git pull` before continuing with this project to update the project README. Throughout all quests in this project, you have been following a minimalistic approach to building functional AI applications. However, in today's fast-paced world of technology, building robust production-ready AI solutions demands the use of the right tools and frameworks, and adoption of industry best practices. @@ -114,13 +108,6 @@ To complete this final challenge and unlock the true power of **AI + Cloud**, yo - [ ] Encourage your peers to upvote your issue for the **People’s Choice spotlight**! ⏳ After submission: Keep updating your project as you build. You can edit your issue to reflect new progress and keep your voters informed. - - - - -> To skip this quest and select a different one, click this button: -> -> [![Skip to another quest](https://img.shields.io/badge/Skip--to--another--quest-ff3860?logo=mattermost)](../../issues/new?title=Skip+quest&labels=reset-quest&body=πŸ”„+I+want+to+reset+my+AI+learning+quest+and+start+from+the+beginning.%0A%0A**Please+wait+about+15+seconds.+Your+progress+will+be+reset,+this+issue+will+automatically+close,+and+you+will+be+taken+back+to+the+Welcome+step+to+select+a+new+quest.**) ## πŸ“š Further Reading diff --git a/LICENSE b/LICENSE index 6c5bc3d..7965606 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,21 @@ -Copyright (c) GitHub, Inc. + MIT License -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the β€œSoftware”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + Copyright (c) Microsoft Corporation. -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: -THE SOFTWARE IS PROVIDED β€œAS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE \ No newline at end of file diff --git a/README.md b/README.md index f6a63b0..3291a59 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,46 @@
-# πŸš€ JS AI Build-a-thon +# The JavaScript AI Build-a-thon ![banner](https://github.com/Azure-Samples/JS-AI-Build-a-thon/blob/assets/jsai-buildathon-assets/practical-ai-learning.png?raw=true) -Unique Hands-On Quests for JS/ TS Developers to Build AI Apps on Azure AI Foundry, and gain a deeper understanding of AI Technologies, Tools and Frameworks. +[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -✨ [Check the Study Guide for additional resources](https://aka.ms/JSAIStudyGuide) ✨ - -
+Unique Hands-On Quests for JavaScript/ TypeScript Developers to Build AI Apps on Microsoft Foundry, and gain a deeper understanding of AI Technologies, Tools and Frameworks. This is a hands-on experience designed for you to work through a series of quests, each designed to guide you through the process of building AI apps step by step. -- **πŸ‘©β€πŸ’» Who this is for:** Developers → AI Engineers -- **🧠 What you'll learn:** To Seamlessly Integrate AI Capabilities into Web Applications. The build-a-thon is designed to get you from _Not having worked with AI_ → _building local AI prototypes_ → _deploying and extending AI applications on Azure_ -- **πŸ› οΈ What you'll do:** - - πŸ’» Build Local AI Prototypes with **GitHub Models** & **AI Toolkit Extension** _(NO AZURE ACCOUNT NEEDED)_ - - πŸ”„ Migrate Prototype to Azure **(GitHub Models → Azure AI Foundry)** - - ☁️ Deploy Models and Use in Code with the **Azure AI Foundry Extension** - - πŸ“Š Connect to external data with RAG, add conversation history with **LangChain.js** - - πŸ€– Build an AI Agent with **Azure AI Foundry Extension** - - 🧰 Extend Agent with MCP Tools using the **AI Toolkit Extension** - - ⚑ Automate your dev workflows with **GitHub Models** and **GenAIScript** _(NO AZURE ACCOUNT NEEDED)_ +## πŸ—ΊοΈ How it works -## 🏁 How to get started +This build-a-thon is organized into **quests** β€” choose the one that matches your goals and click its badge to begin. The quests are ordered in a sequence that **builds your skills progressively** - so **we recommend starting with the first quest and working your way through them in the given order** for the best learning experience. -1️⃣ Right Click on the **Start Course** ↓ button below and open in a new tab. +## 🏁 Your Quests - - **Owner**: _Your personal account_ - - **Repository name**: (e.g. `JSAI-Build-a-thon`) - - **We recommend creating a public repository**, as private repositories will [use Actions minutes](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions). - - Optionally give your repository a description, such as `JS-AI-Build-a-thon` - - **Privacy**: _Public_ - - ⚠️ Ensure you select **Public**. If you select Private, GitHub Actions will not work. - - Scroll down and click the **Create repository** button at the bottom of the form. - -2️⃣ After you click the **Create repository** button, ⏳ **WAIT FOR ABOUT 20 SECONDS, THEN REFRESH THE PAGE.** - - [GitHub Actions](https://docs.github.com/actions) will AUTOMATICALLY UPDATE YOUR README WITH THE NEXT STEP +| # | **Quest** | **Tools** | +| --- | ---------------------------------------------| --------------- | +| 01 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_build_a_local_GenAI_prototype-green)](./01-local-genai-prototype/README.md)| GitHub Models, AI Toolkit Extension | +| 02 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_move_my_prototype_to_Azure-orange)](./02-local-to-azure/README.md) | Microsoft Foundry Extension | +| 03 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_add_a_simple_chat_interface_to_my_app-blue)](./03-add-chat-interface/README.md) | Azure Developer CLI (azd), Vite, Lit | +| 04 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_integrate_external_data_using_RAG-purple)](./04-rag-integration/README.md) | LangChain.js | +| 05 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_explore_frameworks-yellow)](./05-explore-frameworks/README.md) | Next.js, React | +| 06 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_build_an_AI_Agent-violet)](./06-build-agent/README.md) | Microsoft Foundry Agents Service | +| 07 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_use_MCP_tools-cyan)](./07-use-mcp/README.md) | AI Toolkit Extension | +| 08 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_automate_code_reviews-crimson)](./08-automate-code-reviews/README.md) | GitHub Models, GenAIScript | +| 09 | [![Static Badge](https://img.shields.io/badge/Quest-I_want_to_create_templates-pink)](./09-create-templates/README.md) | Azure Developer CLI (azd) | +✨ [Check the Study Guide for additional resources](https://aka.ms/JSAIStudyGuide) ✨ - [![start-course](https://user-images.githubusercontent.com/1221423/235727646-4a590299-ffe5-480d-8cd5-8194ea184546.svg)](https://github.com/new?template_name=JS-AI-Build-a-thon&template_owner=Azure-Samples) -