From f8c93122b448e53bd1fbc06ec302be5983990816 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:12:13 -0700 Subject: [PATCH 01/57] boilerplate for LP --- .../copilot-extension/_index.md | 36 ++++++++++++++++++ .../copilot-extension/_next-steps.md | 27 +++++++++++++ .../copilot-extension/example-picture.png | Bin 0 -> 63167 bytes .../copilot-extension/how-to-1.md | 10 +++++ .../copilot-extension/how-to-2.md | 13 +++++++ 5 files changed, 86 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md new file mode 100644 index 0000000000..cb9ffb0e50 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -0,0 +1,36 @@ +--- +title: PLACEHOLDER TITLE + +minutes_to_complete: 10 + +who_is_this_for: PLACEHOLDER SENTENCE + +learning_objectives: + - PLACEHOLDER OBJECTIVE 1 + - PLACEHOLDER OBJECTIVE 2 + +prerequisites: + - PLACEHOLDER PREREQ 1 + - PLACEHOLDER PREREQ 2 + +author_primary: PLACEHOLDER NAME + +### Tags +skilllevels: PLACEHOLDER SKILLLEVEL +subjects: PLACEHOLDER SUBJECT +armips: + - PLACEHOLDER IP A + - PLACEHOLDER IP B +tools_software_languages: + - PLACEHOLDER TOOL OR SOFTWARE C + - PLACEHOLDER TOOL OR SOFTWARE D +operatingsystems: + - PLACEHOLDER OS G + + +### FIXED, DO NOT MODIFY +# ================================================================================ +weight: 1 # _index.md always has weight of 1 to order correctly +layout: "learningpathall" # All files under learning paths have this same wrapper +learning_path_main_page: "yes" # This should be surfaced when looking for related content. Only set for _index.md of learning path content. +--- diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md new file mode 100644 index 0000000000..c4ae77cc92 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md @@ -0,0 +1,27 @@ +--- +next_step_guidance: PLACEHOLDER TEXT 1 + +recommended_path: /learning-paths/PLACEHOLDER_CATEGORY/PLACEHOLDER_LEARNING_PATH/ + +further_reading: + - resource: + title: PLACEHOLDER MANUAL + link: PLACEHOLDER MANUAL LINK + type: documentation + - resource: + title: PLACEHOLDER BLOG + link: PLACEHOLDER BLOG LINK + type: blog + - resource: + title: PLACEHOLDER GENERAL WEBSITE + link: PLACEHOLDER GENERAL WEBSITE LINK + type: website + + +# ================================================================================ +# FIXED, DO NOT MODIFY +# ================================================================================ +weight: 21 # set to always be larger than the content in this path, and one more than 'review' +title: "Next Steps" # Always the same +layout: "learningpathall" # All files under learning paths have this same wrapper +--- diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png new file mode 100644 index 0000000000000000000000000000000000000000..c69844bed44b65c7f5bc6cf511f93987fdcd7b95 GIT binary patch literal 63167 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 q-Mv3pxc`&l*gyNt{xlEs;Qs>q{#983 literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md new file mode 100644 index 0000000000..8b23cb6bf1 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md @@ -0,0 +1,10 @@ +--- +title: PLACEHOLDER STEP TITLE 1 +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER +YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md new file mode 100644 index 0000000000..f884b5592b --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md @@ -0,0 +1,13 @@ +--- +title: PLACEHOLDER STEP TITLE 2 +weight: 3 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER OF SECOND STEP +YOUR CONTENT GOES HERE + +IMAGE HERE: +![example image alt-text#center](example-picture.png "Figure 1. Example image caption") From 2752db974c729a225edfcbd7db4e80eb58d782df Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Tue, 28 Jan 2025 10:17:07 -0700 Subject: [PATCH 02/57] todo file --- .../servers-and-cloud-computing/copilot-extension/todo.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md new file mode 100644 index 0000000000..a40469fc8a --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -0,0 +1,4 @@ +# TODO + +* copy extension code to new ArmDeveloperEcosystem repo, clean up extension +* \ No newline at end of file From cd4a7d8c16adf1ac4b1066f7796797199527c3e4 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:41:43 -0800 Subject: [PATCH 03/57] Init flow list Co-authored-by: Joe Stech --- .../copilot-extension/todo.md | 32 +++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md index a40469fc8a..b0c8f9fe3d 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -1,4 +1,32 @@ # TODO -* copy extension code to new ArmDeveloperEcosystem repo, clean up extension -* \ No newline at end of file +- [ ] copy extension code to new ArmDeveloperEcosystem repo, clean up extension +- [ ] + +## Learning Path flow + +- What is a GitHub Copilot Extension + - What can it do + - What it can't do (What data is transmitted) + - Overview of flow (flask app, etc) +- Requirements + - Install needed developer tools / SDKs + - NOTE: Don't mention CDK, will handle in deployment section + - Clone the example repo +- Walk through the main elements + - Flask webapp / API + - oauth2 implementation + - agent endpoint + - marketplace endpoint + - Vector database + - What is a vector database + - bin file generation + - Deployment (AWS only) + - Disclaimers "There are a lot of ways to run a flask app" + - CDK Setup / Install + - Run CDK code +- Configuring with GitHub + - Creating the extension in UI + - Create client ID/secret + - input callback endpoints + - optional: registering the extension with marketplace \ No newline at end of file From 80283c3bc0b7ec5e3c3bcd3c5920ff8239ff4040 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:52:05 -0800 Subject: [PATCH 04/57] Tasks by person --- .../copilot-extension/todo.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md index b0c8f9fe3d..4b54dc5d56 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -1,7 +1,17 @@ # TODO +## Tasks by Person + +### Joe: + - [ ] copy extension code to new ArmDeveloperEcosystem repo, clean up extension -- [ ] +- [ ] Flask Webapp +- [ ] Deployment + +### Avin: + +- [ ] Vector Database +- [ ] Configuring with GitHub ## Learning Path flow @@ -12,6 +22,8 @@ - Requirements - Install needed developer tools / SDKs - NOTE: Don't mention CDK, will handle in deployment section + - Python (version?) + - Python local environment + package install - Clone the example repo - Walk through the main elements - Flask webapp / API From c395e57567411ffbb1a9d52a6820515a62a97683 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 28 Jan 2025 09:58:41 -0800 Subject: [PATCH 05/57] Init structure --- ...{how-to-1.md => 1-what-is-an-extension.md} | 0 .../{how-to-2.md => 2-requirements.md} | 0 .../copilot-extension/3-flask.md | 10 ++++++++ .../copilot-extension/4-vector.md | 10 ++++++++ .../copilot-extension/5-deployment.md | 10 ++++++++ .../copilot-extension/6-github.md | 10 ++++++++ .../copilot-extension/todo.md | 23 +++++++++---------- 7 files changed, 51 insertions(+), 12 deletions(-) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{how-to-1.md => 1-what-is-an-extension.md} (100%) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{how-to-2.md => 2-requirements.md} (100%) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md similarity index 100% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-1.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md similarity index 100% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/how-to-2.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md new file mode 100644 index 0000000000..60e135f95a --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md @@ -0,0 +1,10 @@ +--- +title: PLACEHOLDER STEP TITLE 1 +weight: 4 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER +YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md new file mode 100644 index 0000000000..6e7a902509 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -0,0 +1,10 @@ +--- +title: PLACEHOLDER STEP TITLE 1 +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER +YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md new file mode 100644 index 0000000000..299b9cab86 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md @@ -0,0 +1,10 @@ +--- +title: PLACEHOLDER STEP TITLE 1 +weight: 6 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER +YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md new file mode 100644 index 0000000000..aed533f132 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md @@ -0,0 +1,10 @@ +--- +title: PLACEHOLDER STEP TITLE 1 +weight: 7 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## PLACEHOLDER HEADER +YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md index 4b54dc5d56..26ddeff2e6 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -25,18 +25,17 @@ - Python (version?) - Python local environment + package install - Clone the example repo -- Walk through the main elements - - Flask webapp / API - - oauth2 implementation - - agent endpoint - - marketplace endpoint - - Vector database - - What is a vector database - - bin file generation - - Deployment (AWS only) - - Disclaimers "There are a lot of ways to run a flask app" - - CDK Setup / Install - - Run CDK code +- Flask webapp / API + - oauth2 implementation + - agent endpoint + - marketplace endpoint +- Vector database + - What is a vector database + - bin file generation +- Deployment (AWS only) + - Disclaimers "There are a lot of ways to run a flask app" + - CDK Setup / Install + - Run CDK code - Configuring with GitHub - Creating the extension in UI - Create client ID/secret From 29dbbffc9042c78cd17620cba78219e2189017e3 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 28 Jan 2025 23:49:41 +0000 Subject: [PATCH 06/57] Init vector writeup --- .../copilot-extension/4-vector.md | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 6e7a902509..9c3c913184 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -6,5 +6,34 @@ weight: 5 layout: learningpathall --- -## PLACEHOLDER HEADER -YOUR CONTENT GOES HERE +## What is a Vector Database? + +A vector database is a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? + +Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. Vector databases, on the other hand, is simply an array of numbers, making it much easier to identify similarities. + +We can take complex ideas, like words, and translate them into an Nth dimensional vector using a process called embedding. + +## Embeddings + +Embeddings are vectors generated through an AI model. We can convert "tokens" (sections of text) into a point in Nth dimensional space. + +Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. This is typically done using distance metrics like cosine similarity or Euclidean distance1. + +For example, if we want to know which Arm learning path is most relavent to a question a user asks, what we have to do is: + +1. Convert the raw data into more comsumable "chunks". In our case, small `yaml` files. +1. Embed the content of the chunks and place into a vector database +1. Take the input from the user and embed it using the same model +1. Find the closest (meaning, most similar) vector in the database, and the original chunk file that vector came from. +1. Use the data from that `chunk.yaml` to retrive the Arm resource(s) most relavent for the user's questions + +These retrieved resources are then used to augment the context for the LLM, which generates a final response that is both accurate and contextually relevant. + +## Collecting Data into Chunks + +To convert data into `chunk.yaml` files, we used... + +## Combine Chunks into `.bin` file + +Some words will go here \ No newline at end of file From 633995446babd67a793dbf0a1169be1192d69b94 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 28 Jan 2025 23:51:35 +0000 Subject: [PATCH 07/57] For commit signing --- .devcontainer/devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 7eb712efe8..1feea6a0be 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -7,6 +7,9 @@ "remoteUser": "ubuntu", - "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' " + "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' ", + "mounts": [ + "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,type=bind,consistency=cached" + ], } From 96c1094b6d0ce1617cacfd4c3cc7ac8480d4aca6 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Thu, 30 Jan 2025 01:11:37 +0000 Subject: [PATCH 08/57] Iteration --- .devcontainer/devcontainer.json | 1 + .../copilot-extension/4-vector.md | 18 ++++++++---------- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1feea6a0be..95fb077d49 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -9,6 +9,7 @@ "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' ", + // This line is for including ssh key path in order to be able to do commit signing via ssh within devcontainer "mounts": [ "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,type=bind,consistency=cached" ], diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 9c3c913184..8909627b81 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -10,25 +10,23 @@ layout: learningpathall A vector database is a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? -Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. Vector databases, on the other hand, is simply an array of numbers, making it much easier to identify similarities. +Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. Vector databases, on the other hand, is simply an array of numbers. That makes it much easier to identify similarities by comparing the vector locations in Nth dimensional space. This is typically done using distance metrics like cosine similarity or Euclidean distance. -We can take complex ideas, like words, and translate them into an Nth dimensional vector using a process called embedding. +How can we take complex ideas, like words, and translate them into number based vector? We do so using a process called embedding. ## Embeddings Embeddings are vectors generated through an AI model. We can convert "tokens" (sections of text) into a point in Nth dimensional space. -Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. This is typically done using distance metrics like cosine similarity or Euclidean distance1. +Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. -For example, if we want to know which Arm learning path is most relavent to a question a user asks, what we have to do is: +For example, for our use case let's say we want to know which Arm learning path is most relavent to a question a user asks. -1. Convert the raw data into more comsumable "chunks". In our case, small `yaml` files. -1. Embed the content of the chunks and place into a vector database -1. Take the input from the user and embed it using the same model -1. Find the closest (meaning, most similar) vector in the database, and the original chunk file that vector came from. -1. Use the data from that `chunk.yaml` to retrive the Arm resource(s) most relavent for the user's questions +First, ahead of time, we have to convert the raw data (Arm learning path content) into more comsumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into a vector database. -These retrieved resources are then used to augment the context for the LLM, which generates a final response that is both accurate and contextually relevant. +Now in our application, we can take the input from the user and embed it using the same model. Now we have a database of vectors representing our data, and a new vector based on user input. We find the closest (meaning, most similar) vector in the database, and that connects us to the original chunk file that vector came from. Using the data from that `chunk.yaml`, we can retrive the Arm resource(s) most relavent for that user's question. + +The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. ## Collecting Data into Chunks From 61475cf72a215857ff80e30f8047eebfab415686 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Thu, 30 Jan 2025 01:21:37 +0000 Subject: [PATCH 09/57] Trailing comma --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 95fb077d49..28b89863a6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -12,5 +12,5 @@ // This line is for including ssh key path in order to be able to do commit signing via ssh within devcontainer "mounts": [ "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,type=bind,consistency=cached" - ], + ] } From a04ec03d077ddcbc9015455c03a9d41bc91637f0 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Thu, 30 Jan 2025 01:26:08 +0000 Subject: [PATCH 10/57] Github init --- .../copilot-extension/4-vector.md | 2 +- .../copilot-extension/6-github.md | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 8909627b81..1285a25dec 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -1,5 +1,5 @@ --- -title: PLACEHOLDER STEP TITLE 1 +title: Vector Database weight: 5 ### FIXED, DO NOT MODIFY diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md index aed533f132..00988f73e9 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md @@ -1,10 +1,15 @@ --- -title: PLACEHOLDER STEP TITLE 1 +title: Configuring with GitHub weight: 7 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## PLACEHOLDER HEADER -YOUR CONTENT GOES HERE +## Creating the extension in UI + +## Create Client ID and Secret + +## Input Callback Endpoints + +## OPTIONAL: Register the extension with the marketplace \ No newline at end of file From 786226e3db8eea417cece8f199ce2b75313b584f Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 29 Jan 2025 17:45:41 -0800 Subject: [PATCH 11/57] GitHub Steps and documentatiopn --- .../copilot-extension/6-github.md | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md index 00988f73e9..4818f45d89 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md @@ -6,7 +6,32 @@ weight: 7 layout: learningpathall --- -## Creating the extension in UI +Now we need to create a Copilot extension on GitHub to connect to our deployed application. + +## Creating a GitHub app + +> For the most up to date instructions, follow the [official documentation for creating a GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). + +On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and create a GitHub App. + +Your GitHub App must have: + - A name + - A homepage URL + - Webhooks deselected + +After you create your app, click **Install App** in the sidebar, then install your app on your account. + +## Configure GitHub App for Copilot Extension + +> For the most up to date instructions, follow the [official documentation for configuring your GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension#configuring-your-github-app). + +Make the following changes to your GitHub App settings: + +- In the "General" settings, in the "Callback URL" field, paste the local address for your agent. +- In the "Permissions & events" settings, grant read-only permissions to Copilot Chat. +- In the "Copilot" settings, set your app type to "Agent," then fill out the remaining fields. + +After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, then sending a prompt as normal. ## Create Client ID and Secret From 8f0d5b4c314a49b42ff0e21c9864d96473f22c47 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:53:37 -0800 Subject: [PATCH 12/57] More GitHub documentation --- .../copilot-extension/6-github.md | 36 +++++++++++++++---- .../copilot-extension/_next-steps.md | 12 ++----- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md index 4818f45d89..f046d208be 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md @@ -27,14 +27,38 @@ After you create your app, click **Install App** in the sidebar, then install yo Make the following changes to your GitHub App settings: -- In the "General" settings, in the "Callback URL" field, paste the local address for your agent. -- In the "Permissions & events" settings, grant read-only permissions to Copilot Chat. -- In the "Copilot" settings, set your app type to "Agent," then fill out the remaining fields. +### In the "General" settings + +In the "Callback URL" field, paste the address for your agent. + +If you want to test locally and use an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. + +### In the "Permissions & events" settings + +Grant read-only permissions to Copilot Chat. + +### In the "Copilot" settings + +Set your app type to "Agent," then fill out the remaining fields. + +## Test it out After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, then sending a prompt as normal. -## Create Client ID and Secret +## OPTIONAL: Publish your extension on the marketplace + +> For the most up to date instructions, follow the [official documentation for listing your extension on the marketplace](https://docs.github.com/en/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension#listing-your-copilot-extension-on-the-github-marketplace). + +If you would like to make your extension public so that anyone can use it, go into your GitHub App advanced settings. + +You will see one of two options: + +### Make public + +If you see the Make public option, your extension is currently private. It can only be installed by your organization (or the user) that created the app. You can click Make public to allow any other account to install your Copilot Extension, or leave your settings as they are to keep your app private. + +### Make private + +If you see the Make private option, your extension is currently public. The extension can be installed by any account. You can click Make private to only allow your organization (or user) that created the app to install it, or leave your settings as they are to keep your app public. -## Input Callback Endpoints -## OPTIONAL: Register the extension with the marketplace \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md index c4ae77cc92..e461690ee2 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md @@ -5,17 +5,9 @@ recommended_path: /learning-paths/PLACEHOLDER_CATEGORY/PLACEHOLDER_LEARNING_PATH further_reading: - resource: - title: PLACEHOLDER MANUAL - link: PLACEHOLDER MANUAL LINK + title: GitHub Copilot Extension Documentation + link: https://docs.github.com/en/copilot/building-copilot-extensions/about-building-copilot-extensions type: documentation - - resource: - title: PLACEHOLDER BLOG - link: PLACEHOLDER BLOG LINK - type: blog - - resource: - title: PLACEHOLDER GENERAL WEBSITE - link: PLACEHOLDER GENERAL WEBSITE LINK - type: website # ================================================================================ From 0a3a1b3eead8c1757e8320679c1e076edd306b5f Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 29 Jan 2025 19:56:28 -0800 Subject: [PATCH 13/57] Wording tweak --- .../servers-and-cloud-computing/copilot-extension/6-github.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md index f046d208be..2d6d00a014 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md @@ -29,7 +29,7 @@ Make the following changes to your GitHub App settings: ### In the "General" settings -In the "Callback URL" field, paste the address for your agent. +In the "Callback URL" field, put the URL of your agent you deployed in the previous step. If you want to test locally and use an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. From 6ec7c726ccfc8ac04406ee19d9c9005bb0f8f457 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 29 Jan 2025 20:16:47 -0800 Subject: [PATCH 14/57] Vector --- .../copilot-extension/4-vector.md | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 1285a25dec..ee5d6964f6 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -32,6 +32,38 @@ The retrieved resources are then used to augment the context for the LLM, which To convert data into `chunk.yaml` files, we used... -## Combine Chunks into `.bin` file +### TODO: Write how to generate yaml files? Explanation of how we made example chunks? -Some words will go here \ No newline at end of file +To use our example data, you can download our example from S3 using the AWS CLI. + +```bash +aws s3 cp s3://arm-github-copilot-extension/yaml_data.zip . +``` + +Unzip the contents: + +```bash +unzip yaml_data.zip +``` + +## Combine Chunks into FAISS index + +Once you have a folder full of yaml files, copy the vectorstore creation script to that yaml directory. + +The file is located in the root of the example repo. + +```bash +cp local_vectorstore_creation.py yaml_data +``` + +### Run the script: + +Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDPOINT` set. + +Then run the python script + +```bash +python local_vectorstore_creation.py +``` + +The FAISS index bin file then be created. \ No newline at end of file From 23984b71ca2a5f688b99cadfb0eec8496a4d685b Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 29 Jan 2025 20:36:44 -0800 Subject: [PATCH 15/57] Tweaked wording --- .../servers-and-cloud-computing/copilot-extension/4-vector.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index ee5d6964f6..63f3e7ff1a 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -60,10 +60,8 @@ cp local_vectorstore_creation.py yaml_data Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDPOINT` set. -Then run the python script +Then run the python script to create the FAISS index bin file. ```bash python local_vectorstore_creation.py ``` - -The FAISS index bin file then be created. \ No newline at end of file From bde5cfe9d5280567b53b371df0ff69e11a4660cc Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 3 Feb 2025 14:07:03 -0800 Subject: [PATCH 16/57] Spelling --- .../copilot-extension/4-vector.md | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 63f3e7ff1a..5d428f0667 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -20,35 +20,25 @@ Embeddings are vectors generated through an AI model. We can convert "tokens" (s Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. -For example, for our use case let's say we want to know which Arm learning path is most relavent to a question a user asks. +For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. -First, ahead of time, we have to convert the raw data (Arm learning path content) into more comsumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into a vector database. +First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into a vector database. -Now in our application, we can take the input from the user and embed it using the same model. Now we have a database of vectors representing our data, and a new vector based on user input. We find the closest (meaning, most similar) vector in the database, and that connects us to the original chunk file that vector came from. Using the data from that `chunk.yaml`, we can retrive the Arm resource(s) most relavent for that user's question. +Now in our application, we can take the input from the user and embed it using the same model. Now we have a database of vectors representing our data, and a new vector based on user input. We find the closest (meaning, most similar) vector in the database, and that connects us to the original chunk file that vector came from. Using the data from that `chunk.yaml`, we can retrieve the Arm resource(s) most relevant for that user's question. The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. ## Collecting Data into Chunks -To convert data into `chunk.yaml` files, we used... +We have provided chunk files for you in this example repo. -### TODO: Write how to generate yaml files? Explanation of how we made example chunks? +To access it... -To use our example data, you can download our example from S3 using the AWS CLI. - -```bash -aws s3 cp s3://arm-github-copilot-extension/yaml_data.zip . -``` - -Unzip the contents: - -```bash -unzip yaml_data.zip -``` +### TODO: Finish this section once we have example data. ## Combine Chunks into FAISS index -Once you have a folder full of yaml files, copy the vectorstore creation script to that yaml directory. +Once you have a folder full of yaml files, copy the vector store creation script to that yaml directory. The file is located in the root of the example repo. From a9b7ceb08a08742e97bc54e5b6515286e5158028 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:53:51 -0700 Subject: [PATCH 17/57] add changes to todo --- .../copilot-extension/todo.md | 57 +++++++++++-------- 1 file changed, 32 insertions(+), 25 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md index 4b54dc5d56..39a88bfa57 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -4,41 +4,48 @@ ### Joe: -- [ ] copy extension code to new ArmDeveloperEcosystem repo, clean up extension +- [x] copy extension code to new ArmDeveloperEcosystem repo, clean up extension - [ ] Flask Webapp -- [ ] Deployment +- [ ] Deployment LP +- [ ] Requirements section ### Avin: +- [ ] Creating GitHub App - [ ] Vector Database -- [ ] Configuring with GitHub +- [ ] Configuring GitHub App + +## Jason: + +- [x] Python hello world extension LP ## Learning Path flow -- What is a GitHub Copilot Extension - - What can it do - - What it can't do (What data is transmitted) - - Overview of flow (flask app, etc) -- Requirements +- 1 Requirements - Install needed developer tools / SDKs - - NOTE: Don't mention CDK, will handle in deployment section - Python (version?) - Python local environment + package install - - Clone the example repo -- Walk through the main elements - - Flask webapp / API - - oauth2 implementation - - agent endpoint - - marketplace endpoint - - Vector database - - What is a vector database - - bin file generation - - Deployment (AWS only) - - Disclaimers "There are a lot of ways to run a flask app" - - CDK Setup / Install - - Run CDK code -- Configuring with GitHub + - Ensure have the example repo cloned +- 10 Creating GitHub App - Creating the extension in UI - - Create client ID/secret + - Getting application ID and client secret for Flask web app +- 20 Flask webapp / API + - oauth2 implementation (refresher) + - Link to previous learning path + - agent endpoint + - RAG augmentations + - Create client ID/secret + - marketplace endpoint (optional step, if users want to deploy to the marketplace) +- 30 Vector database + - What is a vector database + - Describe FAISS, and why it is the fastest similarity search algorithm (efficient ANN, in-memory) + - Mention that deploying a static in-memory vector store in every instance prevents a centralized bottleneck when scaling + - bin file generation +- 40 Deployment (AWS only) + - Disclaimers "There are a lot of ways to run a flask app" + - Link to other learning path for full explanation +- 50 Configuring GitHub App - input callback endpoints - - optional: registering the extension with marketplace \ No newline at end of file + - get URLs from LP #2, that are specfied in Route 53 + - optional: registering the extension with marketplace +- 100 Next steps From 38a6f5394dbf7c7c855e2e8303bad9b6ec388fbd Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Wed, 5 Feb 2025 10:59:42 -0700 Subject: [PATCH 18/57] fix merge conflict --- .../copilot-extension/todo.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md index cf6fcb0425..39a88bfa57 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md @@ -25,24 +25,8 @@ - Install needed developer tools / SDKs - Python (version?) - Python local environment + package install -<<<<<<< HEAD - Ensure have the example repo cloned - 10 Creating GitHub App -======= - - Clone the example repo -- Flask webapp / API - - oauth2 implementation - - agent endpoint - - marketplace endpoint -- Vector database - - What is a vector database - - bin file generation -- Deployment (AWS only) - - Disclaimers "There are a lot of ways to run a flask app" - - CDK Setup / Install - - Run CDK code -- Configuring with GitHub ->>>>>>> c395e57567411ffbb1a9d52a6820515a62a97683 - Creating the extension in UI - Getting application ID and client secret for Flask web app - 20 Flask webapp / API From 5e7a174b34c7b214f91179158cf0f3b4460639e3 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 5 Feb 2025 14:04:32 -0800 Subject: [PATCH 19/57] Changed wording --- .../copilot-extension/4-vector.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index 5d428f0667..fe1acd389a 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -8,15 +8,17 @@ layout: learningpathall ## What is a Vector Database? -A vector database is a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? +A vector databases are a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? -Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. Vector databases, on the other hand, is simply an array of numbers. That makes it much easier to identify similarities by comparing the vector locations in Nth dimensional space. This is typically done using distance metrics like cosine similarity or Euclidean distance. +Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. + +Vector databases, on the other hand, are designed to store a large numbers of vectors (arrays of numbers), and provide algorithms to be able to search through those stored vectors. That makes it much easier to identify similarities by comparing the vector locations in N dimensional space. This is typically done using distance metrics like cosine similarity or Euclidean distance. How can we take complex ideas, like words, and translate them into number based vector? We do so using a process called embedding. -## Embeddings +### Embeddings -Embeddings are vectors generated through an AI model. We can convert "tokens" (sections of text) into a point in Nth dimensional space. +Embeddings are vectors generated through an AI model. We can convert "tokens" (sections of text) into a point in N dimensional space. Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. @@ -28,6 +30,10 @@ Now in our application, we can take the input from the user and embed it using t The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. +### FAISS + +#### TODO: Write about FAISS + ## Collecting Data into Chunks We have provided chunk files for you in this example repo. @@ -36,7 +42,7 @@ To access it... ### TODO: Finish this section once we have example data. -## Combine Chunks into FAISS index +### Combine Chunks into FAISS index Once you have a folder full of yaml files, copy the vector store creation script to that yaml directory. From 3d6314e464c6afa73249d5d013cd8bdbda8ccc72 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 5 Feb 2025 14:06:46 -0800 Subject: [PATCH 20/57] semantic --- .../servers-and-cloud-computing/copilot-extension/4-vector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md index fe1acd389a..334579c842 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md @@ -14,7 +14,7 @@ Traditional databases store data in tables or objects with defined attributes. H Vector databases, on the other hand, are designed to store a large numbers of vectors (arrays of numbers), and provide algorithms to be able to search through those stored vectors. That makes it much easier to identify similarities by comparing the vector locations in N dimensional space. This is typically done using distance metrics like cosine similarity or Euclidean distance. -How can we take complex ideas, like words, and translate them into number based vector? We do so using a process called embedding. +How can we convert complex ideas, like the semantic meaning of a series of words, into a series of of number based vectors? We do so using a process called embedding. ### Embeddings From 0f9656df378e69258d228526b43511a00203e276 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 5 Feb 2025 15:11:41 -0800 Subject: [PATCH 21/57] FAISS --- .../copilot-extension/{4-vector.md => 30-vector.md} | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{4-vector.md => 30-vector.md} (79%) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md similarity index 79% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md index 334579c842..39880de231 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md @@ -1,6 +1,6 @@ --- title: Vector Database -weight: 5 +weight: 30 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -24,15 +24,15 @@ Then for any given vector, like the embedded token input of a user, we can query For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. -First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into a vector database. +First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into our FAISS vector database. -Now in our application, we can take the input from the user and embed it using the same model. Now we have a database of vectors representing our data, and a new vector based on user input. We find the closest (meaning, most similar) vector in the database, and that connects us to the original chunk file that vector came from. Using the data from that `chunk.yaml`, we can retrieve the Arm resource(s) most relevant for that user's question. +### FAISS -The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. +FAISS (Facebook AI Similarity Search) is a library developed by Facebook AI Research that is designed to efficiently search for similar vectors in large datasets. FAISS is highly optimized for both memory usage and speed, and best in class nearest neighbor search. -### FAISS +Now in our application, we can take the input from the user and embed it using the same model we used for our database. We then use FAISS nearest neighbor search to compare the user input to the nearest vectors in the database. We then look at the original chunk files for those closest vector. Using the data from those `chunk.yaml` files, we can retrieve the Arm resource(s) most relevant for that user's question. -#### TODO: Write about FAISS +The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. ## Collecting Data into Chunks From 4d16c65435db7ee5cfce36d2fe0919ed226dd130 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Wed, 5 Feb 2025 16:14:09 -0800 Subject: [PATCH 22/57] Chunking --- .../copilot-extension/30-vector.md | 60 ++++++++++++++++--- 1 file changed, 51 insertions(+), 9 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md index 39880de231..35965dd5dc 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md @@ -36,28 +36,70 @@ The retrieved resources are then used to augment the context for the LLM, which ## Collecting Data into Chunks -We have provided chunk files for you in this example repo. +We have provided a script in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) we used before to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. -To access it... +### Chunk Creation Script Set p -### TODO: Finish this section once we have example data. +It is recommended to use a virtual environment to manage dependencies. You can set up a virtual environment using `virtualenv`: -### Combine Chunks into FAISS index +```sh +# Install virtualenv if you haven't already +pip install virtualenv -Once you have a folder full of yaml files, copy the vector store creation script to that yaml directory. +# Create a virtual environment +virtualenv venv + +# Activate the virtual environment +# On Windows +venv\Scripts\activate +# On macOS/Linux +source venv/bin/activate +``` + +Once your virtual environment is set up, install the requirements from the [single_lp_chunker/requirements.txt](https://github.com/ArmDeveloperEcosystem/python-rag-extension/blob/main/single_lp_chunker/requirements.txt) file. + +```sh +pip install -r single_lp_chunker/requirements.txt +``` + +### Generate Chunk Files + +To generate chunks, use the following command: + +```sh +python single_lp_chunker/chunk_a_learning_path.py --url +``` + +Replace `` with the URL of the learning path you want to process. If no URL is provided, the script will default to a [known learning path URL](https://learn.arm.com/learning-paths/cross-platform/kleidiai-explainer). + +The script will process the specified learning path and save the chunks as YAML files in a `./chunks/` directory. + +## Combine Chunks into FAISS index + +Once you have a `./chunks/` directory full of yaml files, we now need to use FAISS to create our vector database. + +### Database Creation Script Set Up + +copy the vector store creation script to that yaml directory. The file is located in the root of the example repo. ```bash -cp local_vectorstore_creation.py yaml_data +cp local_vectorstore_creation.py chunks ``` -### Run the script: - Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDPOINT` set. -Then run the python script to create the FAISS index bin file. +#### TODO: Guidance to how to get these keys. + +### Generate Vector Database Files + +Run the python script to create the FAISS index `.bin` and `.json` files. ```bash python local_vectorstore_creation.py ``` + +Place those generated files in the root directory of your Flask application. + +Your flask application is now ready for deployment. \ No newline at end of file From 75d43992186179a735606f5d6be6623e836f0634 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Thu, 6 Feb 2025 13:34:47 -0800 Subject: [PATCH 23/57] Add todo --- .../copilot-extension/30-vector.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md index 35965dd5dc..4ecd465676 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md @@ -43,11 +43,8 @@ We have provided a script in the [python-rag-extension github repo](https://gith It is recommended to use a virtual environment to manage dependencies. You can set up a virtual environment using `virtualenv`: ```sh -# Install virtualenv if you haven't already -pip install virtualenv - # Create a virtual environment -virtualenv venv +python -m venv venv # Activate the virtual environment # On Windows @@ -96,8 +93,10 @@ Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDP Run the python script to create the FAISS index `.bin` and `.json` files. +#### TODO: Confirm package installation - Need to install openai? + ```bash -python local_vectorstore_creation.py +python chunks/local_vectorstore_creation.py ``` Place those generated files in the root directory of your Flask application. From d8a07aae28f5b65576794a264596dd67622c7b6d Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:29:37 -0800 Subject: [PATCH 24/57] AI instructions --- .../copilot-extension/30-vector.md | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md index 4ecd465676..dad56b4b70 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md @@ -40,6 +40,8 @@ We have provided a script in the [python-rag-extension github repo](https://gith ### Chunk Creation Script Set p +#### TODO: Change this to a local conda + It is recommended to use a virtual environment to manage dependencies. You can set up a virtual environment using `virtualenv`: ```sh @@ -87,18 +89,48 @@ cp local_vectorstore_creation.py chunks Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDPOINT` set. -#### TODO: Guidance to how to get these keys. +### If needed, generate Azure OpenAI keys and deployment + +1. **Create an OpenAI Resource**: + - Go to the [Azure Portal](https://portal.azure.com/). + - Click on "Create a resource". + - Search for "OpenAI" and select "Azure OpenAI Service". + - Click "Create". + +1. **Configure the OpenAI Resource**: + - Fill in the required details such as Subscription, Resource Group, Region, and Name. + - Click "Review + create" and then "Create" to deploy the resource. + +1. **Generate API Key and Endpoint**: + - Once the resource is created, navigate to the resource page. + - Under the "Resource Management->Keys and Endpoint" section, you will find the key and endpoint values. + - Copy these values and set them in your local environment. + + ```sh + export AZURE_OPENAI_KEY="" + export AZURE_OPENAI_ENDPOINT="https://.openai.azure.com/" + ``` + + You now have the necessary keys to use Azure OpenAI in your application. + +1. **Deploy text-embedding-ada-002 model** + - Go inside Azure AI Foundry for your new deployment + - Under "Deployments", ensure you have a deployment for "text-embedding-ada-002" ### Generate Vector Database Files Run the python script to create the FAISS index `.bin` and `.json` files. -#### TODO: Confirm package installation - Need to install openai? - ```bash -python chunks/local_vectorstore_creation.py +cd chunks +python local_vectorstore_creation.py ``` -Place those generated files in the root directory of your Flask application. +Copy those generated files in the root directory of your Flask application. + +```bash +cp faiss_index.bin ../ +cp metadata.json ../ +``` Your flask application is now ready for deployment. \ No newline at end of file From c1b6c838ec42eb16e50b79d140279c1afbacee41 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:30:39 -0800 Subject: [PATCH 25/57] Remove dev container piece from this PR --- .devcontainer/devcontainer.json | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 28b89863a6..76e592a8f9 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -8,9 +8,4 @@ "remoteUser": "ubuntu", "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' ", - - // This line is for including ssh key path in order to be able to do commit signing via ssh within devcontainer - "mounts": [ - "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,type=bind,consistency=cached" - ] } From e34704c92e6694d18d810f51e956e99134fe44c6 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:32:37 -0800 Subject: [PATCH 26/57] No comma --- .devcontainer/devcontainer.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 76e592a8f9..ea4308ca07 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -7,5 +7,6 @@ "remoteUser": "ubuntu", - "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' ", + "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' " + } From 54778337c907bd514ea537849e19f9c5f80177cd Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:33:37 -0800 Subject: [PATCH 27/57] Whitespace --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index ea4308ca07..7eb712efe8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -8,5 +8,5 @@ "remoteUser": "ubuntu", "postStartCommand": "nohup bash -c 'hugo ; bin/pagefind --site public --output-subdir ../static/pagefind ; hugo server --baseUrl=/ --liveReloadPort=443 --appendPort=false --bind=0.0.0.0 &' " - + } From 3d65ad0f52aaed9a2439f5cd42e03cf9dae3b0d9 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:50:38 -0800 Subject: [PATCH 28/57] Split github --- .../copilot-extension/10-github-app.md | 22 +++++++++++++++ .../{6-github.md => 50-github-configure.md} | 27 ++++++------------- 2 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{6-github.md => 50-github-configure.md} (68%) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md new file mode 100644 index 0000000000..1755872c42 --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md @@ -0,0 +1,22 @@ +--- +title: Create GitHub Application +weight: 10 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +Now we need to create a Copilot extension on GitHub to connect to our deployed application. + +## Creating a GitHub app + +> For the most up to date instructions, follow the [official documentation for creating a GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). + +On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and create a GitHub App. + +Your GitHub App must have: + - A name + - A homepage URL + - Webhooks deselected + +After you create your app, click **Install App** in the sidebar, then install your app on your account. diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md similarity index 68% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md index 2d6d00a014..816bcd6338 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md @@ -1,37 +1,26 @@ --- -title: Configuring with GitHub -weight: 7 +title: Configure GitHub Application +weight: 50 ### FIXED, DO NOT MODIFY layout: learningpathall --- -Now we need to create a Copilot extension on GitHub to connect to our deployed application. - -## Creating a GitHub app - -> For the most up to date instructions, follow the [official documentation for creating a GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). - -On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and create a GitHub App. - -Your GitHub App must have: - - A name - - A homepage URL - - Webhooks deselected - -After you create your app, click **Install App** in the sidebar, then install your app on your account. +Now we need to configure the GitHub Application we created before to connect to our deployed Copilot extension application. ## Configure GitHub App for Copilot Extension > For the most up to date instructions, follow the [official documentation for configuring your GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/configuring-your-github-app-for-your-copilot-extension#configuring-your-github-app). -Make the following changes to your GitHub App settings: +On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and open the GitHub App we made previously. + +Make the following changes: ### In the "General" settings -In the "Callback URL" field, put the URL of your agent you deployed in the previous step. +In the "Callback URL" field, put the URL of your agent that you deployed in the previous step. -If you want to test locally and use an ephemeral domain in ngrok, you will need to update this URL every time you restart your ngrok server. +**Note:** If you are not using a deployed application and you want to test locally, you can use an ephemeral domain in ngrok. However you will need to update this URL every time you restart your ngrok server. ### In the "Permissions & events" settings From 52ab9d4ad8b018ff7a19c52ce0341dddfe64f322 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 10:58:21 -0800 Subject: [PATCH 29/57] Generate client id and secret --- .../copilot-extension/10-github-app.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md index 1755872c42..c2fb5512b0 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md @@ -8,7 +8,7 @@ layout: learningpathall Now we need to create a Copilot extension on GitHub to connect to our deployed application. -## Creating a GitHub app +## Create a GitHub app > For the most up to date instructions, follow the [official documentation for creating a GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). @@ -19,4 +19,12 @@ Your GitHub App must have: - A homepage URL - Webhooks deselected -After you create your app, click **Install App** in the sidebar, then install your app on your account. +## Get Client ID and Secret + +After you create your app, open it up. You will see listed your Client ID under General -> About. + +Under that is **Client Secrets**, click "Generate a new client secret" and save the value. You will need it for the next step as part of the flash application. + +## Install Application + +Click **Install App** in the sidebar, then install your app onto your account. From 5f0c9e462e562b7cf4de4ac8c3b568151168d9f2 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 11:30:45 -0800 Subject: [PATCH 30/57] Swap vector to front --- .../copilot-extension/{30-vector.md => 10-vector.md} | 2 +- .../copilot-extension/{10-github-app.md => 20-github-app.md} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{30-vector.md => 10-vector.md} (99%) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{10-github-app.md => 20-github-app.md} (99%) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md index dad56b4b70..2d91055a01 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/30-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md @@ -1,6 +1,6 @@ --- title: Vector Database -weight: 30 +weight: 10 ### FIXED, DO NOT MODIFY layout: learningpathall diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md index c2fb5512b0..df9dca3656 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-github-app.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md @@ -1,6 +1,6 @@ --- title: Create GitHub Application -weight: 10 +weight: 20 ### FIXED, DO NOT MODIFY layout: learningpathall From f049130b5ed32437542d436413f1df975ea59519 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 12:57:27 -0800 Subject: [PATCH 31/57] Updated --- .../copilot-extension/10-vector.md | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md index 2d91055a01..78502d560c 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md @@ -36,29 +36,36 @@ The retrieved resources are then used to augment the context for the LLM, which ## Collecting Data into Chunks -We have provided a script in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) we used before to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. +We have provided scripts in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. -### Chunk Creation Script Set p +### Chunk Creation Script Set up -#### TODO: Change this to a local conda +Navigate to the `vectorstore` folder in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/). -It is recommended to use a virtual environment to manage dependencies. You can set up a virtual environment using `virtualenv`: +```bash +cd vectorstore +``` + +It is recommended to use a virtual environment to manage dependencies. + +Ensure you have `conda` set up in your development environment. If you aren't sure how, you can follow this [Installation Guide](https://learn.arm.com/install-guides/anaconda/). + +To create a new conda environment, use the following command: + +```sh +conda create --name vectorstore python=3.11 +``` + +Once set up is complete, activate the new environment: ```sh -# Create a virtual environment -python -m venv venv - -# Activate the virtual environment -# On Windows -venv\Scripts\activate -# On macOS/Linux -source venv/bin/activate +conda activate vectorstore ``` -Once your virtual environment is set up, install the requirements from the [single_lp_chunker/requirements.txt](https://github.com/ArmDeveloperEcosystem/python-rag-extension/blob/main/single_lp_chunker/requirements.txt) file. +Install the required packages: ```sh -pip install -r single_lp_chunker/requirements.txt +conda install --file vectorstore-requirements.txt ``` ### Generate Chunk Files @@ -66,7 +73,7 @@ pip install -r single_lp_chunker/requirements.txt To generate chunks, use the following command: ```sh -python single_lp_chunker/chunk_a_learning_path.py --url +python chunk_a_learning_path.py --url ``` Replace `` with the URL of the learning path you want to process. If no URL is provided, the script will default to a [known learning path URL](https://learn.arm.com/learning-paths/cross-platform/kleidiai-explainer). @@ -77,19 +84,11 @@ The script will process the specified learning path and save the chunks as YAML Once you have a `./chunks/` directory full of yaml files, we now need to use FAISS to create our vector database. -### Database Creation Script Set Up - -copy the vector store creation script to that yaml directory. - -The file is located in the root of the example repo. - -```bash -cp local_vectorstore_creation.py chunks -``` +### OpenAI Key and Endpoint Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDPOINT` set. -### If needed, generate Azure OpenAI keys and deployment +#### If needed, generate Azure OpenAI keys and deployment 1. **Create an OpenAI Resource**: - Go to the [Azure Portal](https://portal.azure.com/). @@ -121,16 +120,19 @@ Ensure your local environment has your `AZURE_OPENAI_KEY` and `AZURE_OPENAI_ENDP Run the python script to create the FAISS index `.bin` and `.json` files. +**NOTE:** This assumes the chunk files are located in a `chunks` subfolder, as they should automatically be. + ```bash -cd chunks python local_vectorstore_creation.py ``` -Copy those generated files in the root directory of your Flask application. +Copy the generated `bin` and `json` files to the root directory of your Flask application. + +THey should be in the `vectorstore/chunks` folder. Since you are likely still in the `vectorstore` folder, run this command to copy: ```bash -cp faiss_index.bin ../ -cp metadata.json ../ +cp chunks/faiss_index.bin ../ +cp chunks/metadata.json ../ ``` Your flask application is now ready for deployment. \ No newline at end of file From 430f662887d37aa144cb1c0e8c7c633e7baf2af6 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Mon, 10 Feb 2025 13:40:41 -0800 Subject: [PATCH 32/57] images --- .../copilot-extension/20-github-app.md | 19 +++++++++++++++--- .../copilot-extension/50-github-configure.md | 6 ++++-- .../images/githubapp-clientid.png | Bin 0 -> 58338 bytes .../images/githubapp-create.png | Bin 0 -> 48886 bytes .../images/githubapp-deselected.png | Bin 0 -> 20855 bytes .../images/githubapp-install.png | Bin 0 -> 28095 bytes .../images/githubapp-name.png | Bin 0 -> 43813 bytes 7 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-clientid.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-create.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-deselected.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-install.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-name.png diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md index df9dca3656..2a0bd806db 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md @@ -12,19 +12,32 @@ Now we need to create a Copilot extension on GitHub to connect to our deployed a > For the most up to date instructions, follow the [official documentation for creating a GitHub App for Copilot Extension](https://docs.github.com/en/copilot/building-copilot-extensions/creating-a-copilot-extension/creating-a-github-app-for-your-copilot-extension#creating-a-github-app). -On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and create a GitHub App. +On any page of [GitHub](https://github.com/), click your profile picture and go to Settings. Scroll down to developer settings, and go to [create a GitHub App](https://github.com/settings/apps). + +![Create GitHub Application screen](images/githubapp-create.png) Your GitHub App must have: - A name - A homepage URL - - Webhooks deselected + - Make sure Webhook -> Active is deselected + +![GitHub App name and URL](images/githubapp-name.png) +![Webhook deselected](images/githubapp-deselected.png) + +The rest can be the default values. + +Scroll to the bottom and click "Create GitHub App" ## Get Client ID and Secret After you create your app, open it up. You will see listed your Client ID under General -> About. -Under that is **Client Secrets**, click "Generate a new client secret" and save the value. You will need it for the next step as part of the flash application. +![Client ID and Secret](images/githubapp-clientid.png) + +Under that is **Client Secrets**, click "Generate a new client secret" and save the value. Make sure you copy it before it goes away, you will need it for the next step as part of the flask application. ## Install Application Click **Install App** in the sidebar, then install your app onto your account. + +![Install](images/githubapp-install.png) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md index 816bcd6338..30ebdd1b05 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md @@ -18,18 +18,20 @@ Make the following changes: ### In the "General" settings -In the "Callback URL" field, put the URL of your agent that you deployed in the previous step. +In the "Callback URL" field, put the callback URL of your agent that you deployed in the previous step. **Note:** If you are not using a deployed application and you want to test locally, you can use an ephemeral domain in ngrok. However you will need to update this URL every time you restart your ngrok server. ### In the "Permissions & events" settings -Grant read-only permissions to Copilot Chat. +Under "Account permissions", grant read-only permissions to "GitHub Copilot Chat". ### In the "Copilot" settings Set your app type to "Agent," then fill out the remaining fields. +Under "URL," enter your server's hostname (aka forwarding endpoint) that you deployed in the previous step. + ## Test it out After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, then sending a prompt as normal. diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-clientid.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-clientid.png new file mode 100644 index 0000000000000000000000000000000000000000..2d801638a4d09eff56bd2dc0707bdb448e2a11c0 GIT binary patch literal 58338 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ﭟ`)yATXlFMDX)q4Py0h2@gM0oQ(MOShd|V;PbVFlRSEeURJ}IJ+$IA8zC>41CS4}|@7Gx-hKXigY~u?+u-P+* z0rvjkpGOe?$`_(O8US9b$s)6d8)K zMhp*i)ni{vRtoFMq-9NOn!F#0;%zV}WoToqE%YFk8Zw?#r?@(e(pd!`YJB(O2BVECJAI&CaDImouHh$jkIq^26Xt&xszjEX+5xqI&uK1M4_hs=5zRwpl!}J(!#7ViqEF51W8z$wZg63h zWqTB1ot=qj!-^iAHr=I|-=6Jyv*hT~H=GU9@IrLONYE8j^4lsU4@*6SJ9rEnazy-? z9udQfi%<{x^zfoX-0rYvv28-WF|}*~O0Kq0i!OHJ)a%63Z)A z7P)LwLSzAR%EqEEG^l^^^{9+lB%$k4Qx}KNEzyRD<$6x&a8TkM>HawU^{1A_)i~~j z=R{Gm#uv^UR$bVsdZBeYA1;)3HKs5md9Y6yrF93Ve=IoYm8V4jve&TEhtg`tR*t@` zmO55G$$n=8`>j=W3W}}XfNAA*ziK;t?9{Bx4OT-4kkiN1jly#i^Wu6V4MPq-5)P+v z5fey5W`yqGfu|Sc$?V78s=B#j!bu5QNkiMJuzZ&{UD{$AKX4}B1Spw1$|lE5M{%v} zo`9P-9_=&M{XTT0`rG?GO8aSxJuJyF1)@SAw^mv{exS79h`#kWecY?5A9HxPSXE!G zC;9AygY196#Qc42n@+E`zYV%qD>hAcS8860r9uquBGj|pvh3-B;NHT1` zXA4+m01C2xKf7vHE1d7sG;&AMr1NPgQuAW8l2=RZ=Du9fguU-hgkQWX3gg1#nV&DZ zYUp&UA*a49c5ZyxCE|y5X=^!!R2FA~K+ zaa`K%-p=#waNe($PiUxFpps+yz}|-2Z*D3+o=3wONbDTWpF_%Aq-K=5 zQ^*Oh*Qj&zIcA#8P>WnE&!Bj8wT;A}>!TqTqTgD?>hzvq2lEtiGWg{|w_=#xv|fY) z2sZqLzW==lX{Q$J2HNqL96>88L&AWIRA`DUQHLmMBm{THP~j_6&{!ramZlV2SbexJtjDLkr!UJ)Ic4g0B7zo~wYE literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-install.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-install.png new file mode 100644 index 0000000000000000000000000000000000000000..9a4af01a3446e638d2f747e491a7719dc815e7db GIT binary patch literal 28095 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

PUd1$p`T!h`-9NT_%K*+E@&0rK5QZ|8 z5b88#_9pVLvSrL-z!TGdp!)NQ;1f7NQDrwp9^${sI$}W~qr2&Re>H$G6;L!VKTwAH gud@F?jaO$SbXpkwjq{fM#Xp$IN-IgBB@Dd&A9f2LUH||9 literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-name.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubapp-name.png new file mode 100644 index 0000000000000000000000000000000000000000..551eece22aa934bd728fffd8acbd0d377ff88cf4 GIT binary patch literal 43813 zcmeFZWn5I<8#YP{QUi!I44@$0DP4l3Al=eG=d^2-Q5UCN_Tfkcf6bDc~t)I z`FcK_4~O5(Z#H}OTI*hYUDtiD36Ya|gZdQzDHIeGs)V?RJQNg6G4LivL;&u@ov%v+ zAJF#lZ-k(V1_-x+fAkDhB#fk`p{RjtL@4MWQz*EHM}Rjz@P>kdiwT5!0(@cuZ@JIV zP_V!!^uza`VSYaeQ~VkB&owddJ(Qq=u!IEgsi1FXXlP|`V(k!@HKhe495;Qh;-Dfe z#jS5`Nv~^Qt!GFNv9x(e0>uO21}-fP9dyAEOA9M|ZU`^gKTmK2*AKTD$iV+R;$Y58 zrXno|7PhuC1hdmK(le6rJq3foJaz^~-0~t~|0M_h<0Uh3aIoQKU~qPJrgvtcx3)88 zVB+H9Vqj!uU}mNRo}jaLv2xIb&{^4&|C`D0d_)ZG_3cb;989gPzz_NA>RCHF@RE@| z6!hosUpoyUrhiMavj4AIKm{2dzF}aZXJq)3H;|O);V!qFDa6o1Rm9X1Xda*pJ~mcn zo`0VIe|+<|#78Mr{-$K-Tb9myn0yq2`ZT z;@@We=PuCBd{228{`48&)6t9h4k#!ACASZ$OVk6T# z242GVDOpU%MMps}B6X;qK+I?Hm|QrFkEt&Fn?blWWP=8+EX?{J*3GAaH?7hr3&WcU* z_K_h1hdpk8$_FmMblE2vz+37QyR^(F?w8m-amXE1%MM9~Js+c;_GTmpG-_AZ z`%}uy#;B97&lk#UmfCDI;%POh@tBQ12BPA3R~4$a?>SRAxG%v=r18|c-_JSQoo*{` z&`-FAV7|c>yww@#y(TZpS&Pb`=!lkjsrHP{&VbVt0-MzVeE-W6HqdFzUI z(vGfmZ2RQ*;Ar`T5u8A+8L#fFBy#aJUn!sBt5_6TGdU}~Z>D{Y4D-$)f8%;cBoTwt zFM8{f%`c*g1#*ICzh*X^OQU%2Y8JVTQn&|_Sh{|#EWhpKM@h&K4RdYKXh>ycCOcjI z5nFfPbiE&I*qg9(g>!rLL;3bv^5)`jZAF$ZnqZ>1*X>smL3V26_4&?SS(aq)QhQMQ zZaIOr=V=_z7pvx)pcw$>X)&oOh`AZGkyDC|JI>m4Aqr>r-^FMWdK1R5LeKhRDWhn$ zYvsXwq&n!tJg@js2y>UMHh+FmQ)}}_%CelPs@td6nv=mfNx|#m)eE4Zo>{uwSgW^g zM!j+^_x*3?f(Ve{-Z!*epSTC1>DFXQ#l2O+)s1B~e7kkF90rYDoItNB??adkGh0Ir zLvp(PQt_M87&Dmr4GIZyc0zPvFp8@l?SqU!$ec_6ZTd;!cY)~Dy$H$KMW-BG`vJ;g8k@h$C9>X6wjo=pIQ6o4!9#k_*Dl@c

Jl=5==$ju${i2hX{{o zGm;X`7l`)8*O_nsY7W9Gn)JaPC5ccbQd;mwQ=w3h@=V3rZMry;w0zxfa7RkyHQxrZ zXbO%;#$kBgQC62?IbyrgRsU=FO3=WM1hS$98Q2S;nH97`ib!D{`p9v2&L45xA59(v ze&03++V%*IKTgOR#@^@5jO{h_46A+M4baPlxySL(*yyq zO8b?vwin%I+dwi~{zvx<-MP5wU=0+Cp469N{ol~dHVX4A0fZz_$;D1ye7PcIe~}eHE+i@n-DTQ~AVW+ZMO3(JBdxAm4g- zezh~8sXNYpvk04ndF87&bMYmJc-RKxqfeDnRr*>)Ld0t(f124kY(D?j9(4{qq>UH@ z`|RER@r%iYOIj@px91BC)`6XpGahO2-=$REax3udXB{@*eS^hjg6za8YsXDQfF0HH z(@*wjrusc}QDKpzo6C?CT*yug`{&X7Q#gRhRzF=Zon7NakjS|(yw3OL7fi%| zJMl86&&*pUgkpSjgUPomqP~JZrP7#1;pYQU2{J$m*+1$wL1wJgCTcFfEQUq8i7r;i`v*I$5sEc@}|0@P$@`ji44I`4BRm?D6aD zfhLqTM?bt$t$Bzf%|`|X1!)|f0&fh3@z*G_sl4d8*eq?eF&Nzh99HiGu_&bFzg(o~ zKBcklDOKu6)EPxmYSE}?%QR$f!`JY#KYl;MQ%US1qD-1dpJ;w$2pXJ65E^4&TOCZ9 zaO8xnpqG}*_zAdWm?}hh4b;7k3fblM-_c+JqZdfx6`vZkqapaHG<)76hWTy!)2UZU zCA16ayB=aL^@BC4@vU9vrYo~bYAKu8iB)l@aptXa1b?P;lsoX4>y_9RJ8sRY7HQUJ zGjKwdGNS**83G#QpbR}2hcRGh8{T(R=V=HsjCdu?ZBc`f!RX-C-tN)~F(4HwtVUa| z_`sE2fp;;|862`k!2{KX8i@Or#)>os4EOUpn)O$XUMsj5Y%45Esh<`gJxl3xE|I#at3E{+yKG-K{kWXn(VJCIcjG$Wj&=z;BZuzdIWFUvDbsLTgRZArMTSK)G z328aPPa?m}?o*%g~4rpq^`j+H zC4$jNg_Mi5=)49}^U~O*0t^F6s`aBIT|{+3F47TiewuD_2iA6x2@zh?XxQG+W8s(w z&{XNpNL$eR^TRQtXdW;ko+d<0Oqfc>m)^l$aG6I2Q&7O(VP9d7)1nq>Mz2c(GG9q40?NYibiXS-xc$l+9Q z!hT$!ro~RHKiVCg7COS}|GtIid!*;(cO2bi&KZJu9UrQS3^U7!>bckioV6(zt*>fT zylDIdi&h6#?ZaHtL%ir!hhO0s8$>J+Ps8c3^d z0_vM!u+?o+!R1Lv(^HPcJM{SBPyAVu?*jq@ixBK0sfIpJw@kUCfYeKij~LsaV(dQ0 z=?~C-jmU@S^SHF|@dvnH8w-N%;!P(CbNzy_3#u)q^qhYz3i@g6Y&unwpK%0)GEWRZ z6$>!dtLv?po*TJH?-q`jhq}8Qtq$#OrkxvY!rKf)E)uqE@MJsgj581K1%MND_pQcP zLfv{@?hTk32-0W+OuZ(XjjCY&Y|}3v8e$*J�gxDDY+Gj)28YVCSc4!q3X57)Z7| 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 Date: Mon, 10 Feb 2025 13:43:54 -0800 Subject: [PATCH 33/57] Additional Images --- .../copilot-extension/50-github-configure.md | 4 ++++ .../images/githubconfig-makepublic.png | Bin 0 -> 52428 bytes .../images/githubconfig-permissions.png | Bin 0 -> 56067 bytes 3 files changed, 4 insertions(+) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubconfig-makepublic.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubconfig-permissions.png diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md index 30ebdd1b05..1a82305d7f 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md @@ -26,6 +26,8 @@ In the "Callback URL" field, put the callback URL of your agent that you deploye Under "Account permissions", grant read-only permissions to "GitHub Copilot Chat". +![Account Permissions](images/githubconfig-permissions.png) + ### In the "Copilot" settings Set your app type to "Agent," then fill out the remaining fields. @@ -44,6 +46,8 @@ If you would like to make your extension public so that anyone can use it, go in You will see one of two options: +![GitHub App Advanced Settings](images/githubconfig-makepublic.png) + ### Make public If you see the Make public option, your extension is currently private. It can only be installed by your organization (or the user) that created the app. You can click Make public to allow any other account to install your Copilot Extension, or leave your settings as they are to keep your app private. diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubconfig-makepublic.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/githubconfig-makepublic.png new file mode 100644 index 0000000000000000000000000000000000000000..ff10cb5c7db84b795352e30ee9aab73216e80839 GIT binary patch literal 52428 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 z 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 Date: Mon, 10 Feb 2025 15:36:32 -0700 Subject: [PATCH 34/57] rag flask doc --- .../copilot-extension/3-flask.md | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md index 60e135f95a..36b113ba8c 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md @@ -1,10 +1,27 @@ --- -title: PLACEHOLDER STEP TITLE 1 +title: RAG System weight: 4 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## PLACEHOLDER HEADER -YOUR CONTENT GOES HERE +## What is a RAG system? + +RAG stands for "Retrieval Augmented Generation". It describes an AI framework that combines information retrieval with text generation to improve the quality and accuracy of AI-generated content. + +The basic flow of a RAG system looks like this: + +1. Retrieval: The system searches a knowledge base, usually using some combination of vector and/or text search. +2. Augmentation: The retrieved information is then provided as context to a generative AI model to provide additional context for the user's query. +3. The AI model uses both thye retrieved knowledge and its internal understanding to generate a more useful response to the user. + +The benefits of a RAG system revolve around improved factual accuracy of responses. It also allows a system to understand more up-to-date information, since you can add additional knowledge to the knowledge base much more easily than you could retrain the model. + +Most importantly, RAG lets you provide reference links to the user, showing the user where the system is getting its information. + +## How do I implement RAG in Flask? + +In the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, you created a simple Copilot Extension in Python. Here, you'll add RAG functionality to that Flask app. + +To implement RAG in Flask, you'll first need to install \ No newline at end of file From ac5bc15410d9ce61fa48f72cca44163f287102ec Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:29:56 -0800 Subject: [PATCH 35/57] Change step order --- .../servers-and-cloud-computing/copilot-extension/10-vector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md index 78502d560c..c028e896a4 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md @@ -135,4 +135,4 @@ cp chunks/faiss_index.bin ../ cp chunks/metadata.json ../ ``` -Your flask application is now ready for deployment. \ No newline at end of file +Your vector database is now ready for your flask application. \ No newline at end of file From 6fb353e64b4f8e9f403fe76c8b098eeca8bb7866 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 11 Feb 2025 09:33:51 -0800 Subject: [PATCH 36/57] More description --- .../copilot-extension/10-vector.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md index c028e896a4..beed4de1a1 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md @@ -25,15 +25,28 @@ Then for any given vector, like the embedded token input of a user, we can query For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into our FAISS vector database. - ### FAISS -FAISS (Facebook AI Similarity Search) is a library developed by Facebook AI Research that is designed to efficiently search for similar vectors in large datasets. FAISS is highly optimized for both memory usage and speed, and best in class nearest neighbor search. +FAISS (Facebook AI Similarity Search) is a library developed by Facebook AI Research that is designed to efficiently search for similar vectors in large datasets. FAISS is highly optimized for both memory usage and speed, making it the fastest similarity search algorithm available. + +One of the key reasons FAISS is so fast is its implementation of efficient Approximate Nearest Neighbor (ANN) search algorithms. ANN algorithms allow FAISS to quickly find vectors that are close to a given query vector without having to compare it to every single vector in the database. This significantly reduces the search time, especially in large datasets. -Now in our application, we can take the input from the user and embed it using the same model we used for our database. We then use FAISS nearest neighbor search to compare the user input to the nearest vectors in the database. We then look at the original chunk files for those closest vector. Using the data from those `chunk.yaml` files, we can retrieve the Arm resource(s) most relevant for that user's question. +Additionally, FAISS performs all searches in-memory, which means that it can leverage the full speed of the system's RAM. This in-memory search capability ensures that the search operations are extremely fast, as they avoid the latency associated with disk I/O operations. + +In our application, we can take the input from the user and embed it using the same model we used for our database. We then use FAISS nearest neighbor search to compare the user input to the nearest vectors in the database. We then look at the original chunk files for those closest vectors. Using the data from those `chunk.yaml` files, we can retrieve the Arm resource(s) most relevant for that user's question. The retrieved resources are then used to augment the context for the LLM, which generates a final response that is both contextually relevant and contains accurate information. +### In Memory Deployment + +To ensure that our application scales efficiently, we will copy the FAISS database into every deployment instance. By deploying a static in-memory vector store in each instance, we eliminate the need for a centralized database, which can become a bottleneck as the number of requests increases. + +When each instance has its own copy of the FAISS database, it can perform vector searches locally, leveraging the full speed of the system's RAM. This approach ensures that the search operations are extremely fast and reduces the latency associated with network calls to a centralized database. + +Moreover, this method enhances the reliability and fault tolerance of our application. If one instance fails, others can continue to operate independently without being affected by the failure. This decentralized approach also simplifies the deployment process, as each instance is self-contained and does not rely on external resources for vector searches. + +By copying the FAISS database into every deployment, we achieve a scalable, high-performance solution that can handle a large number of requests efficiently. + ## Collecting Data into Chunks We have provided scripts in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. From e6f1d31d45b18583682d32e6a13eabc2a267a199 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:01:45 -0800 Subject: [PATCH 37/57] Changed numbers --- .../copilot-extension/{10-vector.md => 1-vector.md} | 3 ++- .../copilot-extension/{20-github-app.md => 2-github-app.md} | 2 +- .../{50-github-configure.md => 5-github-configure.md} | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{10-vector.md => 1-vector.md} (99%) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{20-github-app.md => 2-github-app.md} (99%) rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{50-github-configure.md => 5-github-configure.md} (99%) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md index beed4de1a1..af4c6b7081 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/10-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md @@ -1,6 +1,6 @@ --- title: Vector Database -weight: 10 +weight: 1 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -25,6 +25,7 @@ Then for any given vector, like the embedded token input of a user, we can query For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into our FAISS vector database. + ### FAISS FAISS (Facebook AI Similarity Search) is a library developed by Facebook AI Research that is designed to efficiently search for similar vectors in large datasets. FAISS is highly optimized for both memory usage and speed, making it the fastest similarity search algorithm available. diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md index 2a0bd806db..775a201da7 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/20-github-app.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md @@ -1,6 +1,6 @@ --- title: Create GitHub Application -weight: 20 +weight: 2 ### FIXED, DO NOT MODIFY layout: learningpathall diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md index 1a82305d7f..ac00f29309 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/50-github-configure.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md @@ -1,6 +1,6 @@ --- title: Configure GitHub Application -weight: 50 +weight: 5 ### FIXED, DO NOT MODIFY layout: learningpathall From aa57290c0ec1f70189565627fb99fa2ab08f9e75 Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Tue, 11 Feb 2025 14:04:52 -0700 Subject: [PATCH 38/57] vector search functions --- .../copilot-extension/3-flask.md | 96 ++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md index 36b113ba8c..fd31e95e22 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md @@ -24,4 +24,98 @@ Most importantly, RAG lets you provide reference links to the user, showing the In the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, you created a simple Copilot Extension in Python. Here, you'll add RAG functionality to that Flask app. -To implement RAG in Flask, you'll first need to install \ No newline at end of file +You already generated a vector store in a previous section, which you will use as the knowledge base for your RAG retrieval. + +As you saw in the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, the `/agent` endpoint is what GitHub will invoke to send a query to your Extension. + +There are a minimum of two things you must add to your existing Extension to obtain RAG functionality: + +1. Vector search functions, to find context from your knowledge base. +2. A system prompt that instructs your system about how to use the context from your knowledge base. + +### Vector search + +First, import necessary Python packages: + +```Python +import faiss +import json +import requests +import numpy as np +``` + +Then create functions to load the FAISS index that you previously created, and invoke them: + +```Python +def load_faiss_index(index_path: str): + """Load the FAISS index from a file.""" + print(f"Loading FAISS index from {index_path}") + index = faiss.read_index(index_path) + print(f"Loaded index containing {index.ntotal} vectors") + return index + +def load_metadata(metadata_path: str): + """Load metadata from a JSON file.""" + print(f"Loading metadata from {metadata_path}") + with open(metadata_path, 'r') as f: + metadata = json.load(f) + print(f"Loaded metadata for {len(metadata)} items") + return metadata + +FAISS_INDEX = load_faiss_index("faiss_index.bin") +FAISS_METADATA = load_metadata("metadata.json") +``` + +You put these objects in global variables so they stay in memory persistently. + +After this, create the functions to make embeddings and search embeddings: + +```Python +def create_embedding(query: str, headers=None): + print(f"Creating embedding using model: {MODEL_NAME}") + copilot_req = { + "model": MODEL_NAME, + "input": [query] + } + r = requests.post(llm_client, json=copilot_req, headers=headers) + r.raise_for_status() + return_dict = r.json() + + return return_dict['data'][0]['embedding'] + + +def embedding_search(query: str, k: int = 5, headers=None): + """ + Search the FAISS index with a text query. + + Args: + query (str): The text to search for. + k (int): The number of results to return. + + Returns: + list: A list of dictionaries containing search results with distances and metadata. + """ + print(f"Searching for: '{query}'") + # Convert query to embedding + query_embedding = create_embedding(query, headers) + query_array = np.array(query_embedding, dtype=np.float32).reshape(1, -1) + + # Perform the search + distances, indices = FAISS_INDEX.search(query_array, k) + print(distances, indices) + # Prepare results + results = [] + for i, (dist, idx) in enumerate(zip(distances[0], indices[0])): + if idx != -1: # -1 index means no result found + if float(dist) < DISTANCE_THRESHOLD: + result = { + "rank": i + 1, + "distance": float(dist), + "metadata": FAISS_METADATA[idx] + } + # store the result in the metrics db but don't block + # store_result(result) + results.append(result) + + return results +``` \ No newline at end of file From 634cf8c644b8f743af536a9917b1c2d3540cffab Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 11 Feb 2025 13:34:13 -0800 Subject: [PATCH 39/57] Added Avin Zarlez author name --- assets/contributors.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/contributors.csv b/assets/contributors.csv index a3a1425fda..ca7f7689c7 100644 --- a/assets/contributors.csv +++ b/assets/contributors.csv @@ -50,3 +50,4 @@ Georgios Mermigkis,VectorCamp,gMerm,georgios-mermigkis,,https://vectorcamp.gr/ Ben Clark,Arm,,,, Han Yin,Arm,hanyin-arm,nacosiren,, Willen Yang,Arm,,,, +Avin Zarlez,Arm,AvinZarlez,avinzarlez,,https://www.avinzarlez.com/ From a68db5f71e1ea9f35b3ac0f1b9d7e4d11a757fce Mon Sep 17 00:00:00 2001 From: Joe <4088382+JoeStech@users.noreply.github.com> Date: Thu, 13 Feb 2025 12:31:25 -0700 Subject: [PATCH 40/57] added a couple new sections at beginning and end, modified the deployment and configuration sections --- .../copilot-extension/1-rag.md | 31 +++ .../1-what-is-an-extension.md | 10 - .../copilot-extension/2-requirements.md | 13 - .../{1-vector.md => 2-vector.md} | 10 +- .../copilot-extension/3-flask.md | 121 ---------- .../{2-github-app.md => 3-github-app.md} | 2 +- .../copilot-extension/4-flask.md | 222 ++++++++++++++++++ .../copilot-extension/5-deployment.md | 20 +- ...hub-configure.md => 6-github-configure.md} | 26 +- .../copilot-extension/7-testing.md | 26 ++ .../copilot-extension/_index.md | 37 +-- .../copilot-extension/_next-steps.md | 16 +- .../copilot-extension/example-picture.png | Bin 63167 -> 0 bytes .../images/extension-test.png | Bin 0 -> 88777 bytes .../copilot-extension/images/marketplace.png | Bin 0 -> 30755 bytes .../copilot-extension/todo.md | 51 ---- 16 files changed, 338 insertions(+), 247 deletions(-) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md delete mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md delete mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{1-vector.md => 2-vector.md} (93%) delete mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{2-github-app.md => 3-github-app.md} (99%) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/4-flask.md rename content/learning-paths/servers-and-cloud-computing/copilot-extension/{5-github-configure.md => 6-github-configure.md} (52%) create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md delete mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/extension-test.png create mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/images/marketplace.png delete mode 100644 content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md new file mode 100644 index 0000000000..5ca247afdd --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md @@ -0,0 +1,31 @@ +--- +title: RAG Overview +weight: 2 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## What is a RAG system? + +RAG stands for "Retrieval Augmented Generation". It describes an AI framework that combines information retrieval with text generation to improve the quality and accuracy of AI-generated content. + +The basic flow of a RAG system looks like this: + +1. Retrieval: The system searches a knowledge base, usually using some combination of vector and/or text search. +2. Augmentation: The retrieved information is then provided as context to a generative AI model to provide additional context for the user's query. +3. The AI model uses both thye retrieved knowledge and its internal understanding to generate a more useful response to the user. + +The benefits of a RAG system revolve around improved factual accuracy of responses. It also allows a system to understand more up-to-date information, since you can add additional knowledge to the knowledge base much more easily than you could retrain the model. + +Most importantly, RAG lets you provide reference links to the user, showing the user where the system is getting its information. + +## The GitHub repository + +Arm has provided a companion GitHub repo for this Learning Path that serves as a Python-based Copilot RAG Extension example. + +To clone the repo for later reference, run + +```bash +git clone https://github.com/ArmDeveloperEcosystem/python-rag-extension.git +``` \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md deleted file mode 100644 index 8b23cb6bf1..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-what-is-an-extension.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: PLACEHOLDER STEP TITLE 1 -weight: 2 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -## PLACEHOLDER HEADER -YOUR CONTENT GOES HERE diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md deleted file mode 100644 index f884b5592b..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-requirements.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: PLACEHOLDER STEP TITLE 2 -weight: 3 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -## PLACEHOLDER HEADER OF SECOND STEP -YOUR CONTENT GOES HERE - -IMAGE HERE: -![example image alt-text#center](example-picture.png "Figure 1. Example image caption") diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md similarity index 93% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md index af4c6b7081..47d8c40441 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md @@ -1,6 +1,6 @@ --- title: Vector Database -weight: 1 +weight: 3 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -8,7 +8,7 @@ layout: learningpathall ## What is a Vector Database? -A vector databases are a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? +A vector database is a specialized database designed to store and query vector representations of data. They are a crucial component of many AI applications. But what exactly are they, and how do they work? Traditional databases store data in tables or objects with defined attributes. However, they struggle to recognize similarities between data points that aren't explicitly defined. @@ -18,9 +18,9 @@ How can we convert complex ideas, like the semantic meaning of a series of words ### Embeddings -Embeddings are vectors generated through an AI model. We can convert "tokens" (sections of text) into a point in N dimensional space. +Embeddings are vectors generated through an AI model. We can convert collections of "tokens" (word fragments) into a point in N dimensional space. -Then for any given vector, like the embedded token input of a user, we can querying our vector database to find embedded data that is most similar. +Then for any given vector (like the embedding of a question asked by a user) we can query our vector database to find embedded data that is most similar. For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. @@ -62,7 +62,7 @@ cd vectorstore It is recommended to use a virtual environment to manage dependencies. -Ensure you have `conda` set up in your development environment. If you aren't sure how, you can follow this [Installation Guide](https://learn.arm.com/install-guides/anaconda/). +Ensure you have `conda` set up in your development environment. If you aren't sure how, you can follow this [Installation Guide](https://docs.anaconda.com/miniconda/install/). To create a new conda environment, use the following command: diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md deleted file mode 100644 index fd31e95e22..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-flask.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: RAG System -weight: 4 - -### FIXED, DO NOT MODIFY -layout: learningpathall ---- - -## What is a RAG system? - -RAG stands for "Retrieval Augmented Generation". It describes an AI framework that combines information retrieval with text generation to improve the quality and accuracy of AI-generated content. - -The basic flow of a RAG system looks like this: - -1. Retrieval: The system searches a knowledge base, usually using some combination of vector and/or text search. -2. Augmentation: The retrieved information is then provided as context to a generative AI model to provide additional context for the user's query. -3. The AI model uses both thye retrieved knowledge and its internal understanding to generate a more useful response to the user. - -The benefits of a RAG system revolve around improved factual accuracy of responses. It also allows a system to understand more up-to-date information, since you can add additional knowledge to the knowledge base much more easily than you could retrain the model. - -Most importantly, RAG lets you provide reference links to the user, showing the user where the system is getting its information. - -## How do I implement RAG in Flask? - -In the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, you created a simple Copilot Extension in Python. Here, you'll add RAG functionality to that Flask app. - -You already generated a vector store in a previous section, which you will use as the knowledge base for your RAG retrieval. - -As you saw in the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, the `/agent` endpoint is what GitHub will invoke to send a query to your Extension. - -There are a minimum of two things you must add to your existing Extension to obtain RAG functionality: - -1. Vector search functions, to find context from your knowledge base. -2. A system prompt that instructs your system about how to use the context from your knowledge base. - -### Vector search - -First, import necessary Python packages: - -```Python -import faiss -import json -import requests -import numpy as np -``` - -Then create functions to load the FAISS index that you previously created, and invoke them: - -```Python -def load_faiss_index(index_path: str): - """Load the FAISS index from a file.""" - print(f"Loading FAISS index from {index_path}") - index = faiss.read_index(index_path) - print(f"Loaded index containing {index.ntotal} vectors") - return index - -def load_metadata(metadata_path: str): - """Load metadata from a JSON file.""" - print(f"Loading metadata from {metadata_path}") - with open(metadata_path, 'r') as f: - metadata = json.load(f) - print(f"Loaded metadata for {len(metadata)} items") - return metadata - -FAISS_INDEX = load_faiss_index("faiss_index.bin") -FAISS_METADATA = load_metadata("metadata.json") -``` - -You put these objects in global variables so they stay in memory persistently. - -After this, create the functions to make embeddings and search embeddings: - -```Python -def create_embedding(query: str, headers=None): - print(f"Creating embedding using model: {MODEL_NAME}") - copilot_req = { - "model": MODEL_NAME, - "input": [query] - } - r = requests.post(llm_client, json=copilot_req, headers=headers) - r.raise_for_status() - return_dict = r.json() - - return return_dict['data'][0]['embedding'] - - -def embedding_search(query: str, k: int = 5, headers=None): - """ - Search the FAISS index with a text query. - - Args: - query (str): The text to search for. - k (int): The number of results to return. - - Returns: - list: A list of dictionaries containing search results with distances and metadata. - """ - print(f"Searching for: '{query}'") - # Convert query to embedding - query_embedding = create_embedding(query, headers) - query_array = np.array(query_embedding, dtype=np.float32).reshape(1, -1) - - # Perform the search - distances, indices = FAISS_INDEX.search(query_array, k) - print(distances, indices) - # Prepare results - results = [] - for i, (dist, idx) in enumerate(zip(distances[0], indices[0])): - if idx != -1: # -1 index means no result found - if float(dist) < DISTANCE_THRESHOLD: - result = { - "rank": i + 1, - "distance": float(dist), - "metadata": FAISS_METADATA[idx] - } - # store the result in the metrics db but don't block - # store_result(result) - results.append(result) - - return results -``` \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-github-app.md similarity index 99% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/3-github-app.md index 775a201da7..b15f12b633 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-github-app.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/3-github-app.md @@ -1,6 +1,6 @@ --- title: Create GitHub Application -weight: 2 +weight: 4 ### FIXED, DO NOT MODIFY layout: learningpathall diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-flask.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-flask.md new file mode 100644 index 0000000000..d7715738cf --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/4-flask.md @@ -0,0 +1,222 @@ +--- +title: Build a RAG System +weight: 5 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## How do I implement RAG in Flask? + +In the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, you created a simple Copilot Extension in Python. Here, you'll add RAG functionality to that Flask app. + +You already generated a vector store in a previous section, which you will use as the knowledge base for your RAG retrieval. + +As you saw in the [Build a GitHub Copilot Extension in Python](learning-paths/servers-and-cloud-computing/gh-copilot-simple/) Learning Path, the `/agent` endpoint is what GitHub will invoke to send a query to your Extension. + +There are a minimum of two things you must add to your existing Extension to obtain RAG functionality: + +1. Vector search functions, to find context from your knowledge base. +2. A system prompt that instructs your system about how to use the context from your knowledge base. + +### Vector search + +First, import necessary Python packages: + +```Python +import faiss +import json +import requests +import numpy as np +``` + +Then create functions to load the FAISS index that you previously created, and invoke them: + +```Python +def load_faiss_index(index_path: str): + """Load the FAISS index from a file.""" + print(f"Loading FAISS index from {index_path}") + index = faiss.read_index(index_path) + print(f"Loaded index containing {index.ntotal} vectors") + return index + +def load_metadata(metadata_path: str): + """Load metadata from a JSON file.""" + print(f"Loading metadata from {metadata_path}") + with open(metadata_path, 'r') as f: + metadata = json.load(f) + print(f"Loaded metadata for {len(metadata)} items") + return metadata + +FAISS_INDEX = load_faiss_index("faiss_index.bin") +FAISS_METADATA = load_metadata("metadata.json") +``` + +You put these objects in global variables so they stay in memory persistently. + +After this, create the functions to make embeddings and search embeddings: + +```Python +def create_embedding(query: str, headers=None): + print(f"Creating embedding using model: {MODEL_NAME}") + copilot_req = { + "model": MODEL_NAME, + "input": [query] + } + r = requests.post(llm_client, json=copilot_req, headers=headers) + r.raise_for_status() + return_dict = r.json() + + return return_dict['data'][0]['embedding'] + + +def embedding_search(query: str, k: int = 5, headers=None): + """ + Search the FAISS index with a text query. + + Args: + query (str): The text to search for. + k (int): The number of results to return. + + Returns: + list: A list of dictionaries containing search results with distances and metadata. + """ + print(f"Searching for: '{query}'") + # Convert query to embedding + query_embedding = create_embedding(query, headers) + query_array = np.array(query_embedding, dtype=np.float32).reshape(1, -1) + + # Perform the search + distances, indices = FAISS_INDEX.search(query_array, k) + print(distances, indices) + # Prepare results + results = [] + for i, (dist, idx) in enumerate(zip(distances[0], indices[0])): + if idx != -1: # -1 index means no result found + if float(dist) < DISTANCE_THRESHOLD: + result = { + "rank": i + 1, + "distance": float(dist), + "metadata": FAISS_METADATA[idx] + } + results.append(result) + + return results +``` + +The context for these functions can be found in the [vectorstore_functions.py](https://github.com/ArmDeveloperEcosystem/python-rag-extension/blob/main/utils/vectorstore_functions.py) file. + +### System Prompt + +A crucial part of any RAG system is constructing the prompt containing the knowledge base context. First, create the base system prompt: + +```Python +# change this System message to fit your application +SYSTEM_MESSAGE = """You are a world-class expert in [add your extension field here]. These are your capabilities, which you should share with users verbatim if prompted: + +[add your extension capabilities here] + +Below is critical information selected specifically to help answer the user's question. Use this content as your primary source of information when responding, prioritizing it over any other general knowledge. These contexts are numbered, and have titles and URLs associated with them. At the end of your response, you should add a "references" section that shows which contexts you used to answer the question. The reference section should be formatted like this: + +References: + +* [precise title of Context 1 denoted by TITLE: below](URL of Context 1) +* [precise title of Context 2 denoted by TITLE: below](URL of Context 2) + +etc. +Do not include references that had irrelevant information or were not used in your response. + +Contexts:\n\n +""" +``` + +Next, call your embedding search function, and add the context to your system prompt: + +```Python +results = vs.embedding_search(user_message, amount_of_context_to_use, headers) +results = vs.deduplicate_urls(results) + +context = "" +for i, result in enumerate(results): + context += f"CONTEXT {i+1}\nTITLE:{result['metadata']['title']}\nURL:{result['metadata']['url']}\n\n{result['metadata']['original_text']}\n\n" + print(f"url: {result['metadata']['url']}") + +system_message = [{ + "role": "system", + "content": system_message + context +}] +``` + +Once the system message is built, add it to the original message to create `full_prompt_messages` and invoke the copilot endpoint: + +```Python +copilot_req = { + "model": model_name, + "messages": full_prompt_messages, + "stream": True +} + +chunk_template = sm.get_chunk_template() +r = requests.post(llm_client, json=copilot_req, headers=headers, stream=True) +r.raise_for_status() +stream = r.iter_lines() +``` + +You can then stream the response back to GitHub. + +The context for this code can be found in the [agent_functions.py](https://github.com/ArmDeveloperEcosystem/python-rag-extension/blob/main/utils/agent_functions.py) file. + +### Marketplace endpoint (optional, but needed to obtain marketplace events) + +If you publish your extension to the marketplace, you can get responses back when users install/uninstall your extension. + +You can write these to the database of your choice for better aggregation, but here is a simple version that writes each invocation to a local json file: + +```Python +@app.route('/marketplace', methods=['POST']) +def marketplace(): + payload_body = request.get_data() + print(payload_body) + + # Verify request has JSON content + if not request.is_json: + return jsonify({ + 'error': 'Content-Type must be application/json' + }), 415 + + try: + # Get JSON payload + payload = request.get_json() + + # Print the payload + print("Received payload:") + print(json.dumps(payload, indent=2)) + + output_dir = Path('marketplace_events') + + # Generate unique filename and save + filename = f"{uuid.uuid4().hex}.json" + file_path = output_dir / filename + + with open(file_path, 'w') as f: + json.dump(payload, f, indent=2) + + print(f"Saved payload to {file_path}") + + return jsonify({ + 'status': 'success', + 'message': 'Event received and processed', + 'file_path': str(file_path) + }), 201 + + except Exception as e: + return jsonify({ + 'error': f'Failed to process request: {str(e)}' + }), 500 +``` + +Before running this function, ensure that the `marketplace_events` directory is created in your root directory (where the main flask file is). + +The context for this code can be found in the [flask_app.py](https://github.com/ArmDeveloperEcosystem/arm-gh-copilot-extension/blob/main/flask_app.py) file. + +Once these elements are in place, you are ready to deploy your app. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md index 299b9cab86..149980b05f 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-deployment.md @@ -1,10 +1,24 @@ --- -title: PLACEHOLDER STEP TITLE 1 +title: Infrastructure Deployment weight: 6 ### FIXED, DO NOT MODIFY layout: learningpathall --- -## PLACEHOLDER HEADER -YOUR CONTENT GOES HERE +## How do I deploy my Copilot RAG Extension? + +You can deploy on whatever cloud infrastructure you'd like to use. These are the suggested requirements: + +1. A domain that you own with DNS settings that you control +2. A load balancer +3. An auto-scaling cluster in a private virtual cloud subnet that you can adjust the size of based on load + +Arm has provided a Copilot Extension deployment Learning Path for AWS, called [Graviton Infrastructure for GitHub Copilot Extensions](../copilot-extension-deployment/). + +Whatever method you use to deploy your Extension, make note of the final endpoint URLs, specifically + +* `/agent` (required) +* `/marketplace` (optional, but needed to obtain marketplace events) + +These are the endpoints that you will need full URLs for to configure your GitHub application. diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github-configure.md similarity index 52% rename from content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md rename to content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github-configure.md index ac00f29309..e313399a5b 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/5-github-configure.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/6-github-configure.md @@ -1,6 +1,6 @@ --- title: Configure GitHub Application -weight: 5 +weight: 7 ### FIXED, DO NOT MODIFY layout: learningpathall @@ -34,26 +34,8 @@ Set your app type to "Agent," then fill out the remaining fields. Under "URL," enter your server's hostname (aka forwarding endpoint) that you deployed in the previous step. -## Test it out - -After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, then sending a prompt as normal. - -## OPTIONAL: Publish your extension on the marketplace - -> For the most up to date instructions, follow the [official documentation for listing your extension on the marketplace](https://docs.github.com/en/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension#listing-your-copilot-extension-on-the-github-marketplace). - -If you would like to make your extension public so that anyone can use it, go into your GitHub App advanced settings. - -You will see one of two options: - -![GitHub App Advanced Settings](images/githubconfig-makepublic.png) - -### Make public - -If you see the Make public option, your extension is currently private. It can only be installed by your organization (or the user) that created the app. You can click Make public to allow any other account to install your Copilot Extension, or leave your settings as they are to keep your app private. - -### Make private - -If you see the Make private option, your extension is currently public. The extension can be installed by any account. You can click Make private to only allow your organization (or user) that created the app to install it, or leave your settings as they are to keep your app public. +### Optional: add your marketplace endpoint +If you would like to get install/uninstall events when users interact with your marketplace posting, set up a webhook. Under the 'general' tab of your application settings, activate the webhook and add your marketplace endpoint: +![Webhook setup](images/marketplace.png) \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md new file mode 100644 index 0000000000..1d21ba9c5d --- /dev/null +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md @@ -0,0 +1,26 @@ +--- +title: Test the installation +weight: 8 + +### FIXED, DO NOT MODIFY +layout: learningpathall +--- + +## Test it out + +After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, followed by your prompt: + +![Test the extension](images/extension-test.png) + + +## Optional: Publish your extension on the marketplace + +> For the most up to date instructions, follow the [official documentation for listing your extension on the marketplace](https://docs.github.com/en/copilot/building-copilot-extensions/managing-the-availability-of-your-copilot-extension#listing-your-copilot-extension-on-the-github-marketplace). + +## Enhancements + +There are many enhancements you can make to your extension, including inserting your own hard-coded links, etc into the response stream. + +Another possibility is adding another copilot invocation to rephrase the previous conversation prior to your main copilot invocation. This yields more robust results, if users reference previous elements of the conversation in their question. + +You can precisely tailor your RAG extension to your use case, to make your extension as useful as possible. \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index cb9ffb0e50..f2e3fa269e 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -1,31 +1,38 @@ --- -title: PLACEHOLDER TITLE +title: Create a RAG-based GitHub Copilot Extension in Python -minutes_to_complete: 10 +minutes_to_complete: 30 -who_is_this_for: PLACEHOLDER SENTENCE +who_is_this_for: This is an advanced topic for software developers who want to learn how to build a RAG-based GitHub Copilot Extension. learning_objectives: - - PLACEHOLDER OBJECTIVE 1 - - PLACEHOLDER OBJECTIVE 2 + - Explain what a RAG system is. + - Create vector embeddings for a RAG knowledge base. + - Implement RAG in a Copilot Extension. + - Configure a GitHub Copilot Extension for your RAG application. prerequisites: - - PLACEHOLDER PREREQ 1 - - PLACEHOLDER PREREQ 2 + - The "[Build a GitHub Copilot Extension in Python](../gh-copilot-simple/)" Learning Path. + - The "[Graviton Infrastructure for GitHub Copilot Extensions](../copilot-extension-deployment/)" Learning Path. + - A GitHub account. + - A Linux-based computer with Python installed. -author_primary: PLACEHOLDER NAME +author_primary: Avin Zarlez, Joe Stech ### Tags -skilllevels: PLACEHOLDER SKILLLEVEL -subjects: PLACEHOLDER SUBJECT +cloud_service_providers: AWS +skilllevels: Advanced +subjects: ML armips: - - PLACEHOLDER IP A - - PLACEHOLDER IP B + - Neoverse tools_software_languages: - - PLACEHOLDER TOOL OR SOFTWARE C - - PLACEHOLDER TOOL OR SOFTWARE D + - Python + - FAISS + - GitHub + - conda + - AWS CDK operatingsystems: - - PLACEHOLDER OS G + - Linux, MacOS ### FIXED, DO NOT MODIFY diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md index e461690ee2..b708fce39b 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_next-steps.md @@ -1,14 +1,18 @@ --- -next_step_guidance: PLACEHOLDER TEXT 1 - -recommended_path: /learning-paths/PLACEHOLDER_CATEGORY/PLACEHOLDER_LEARNING_PATH/ further_reading: - resource: - title: GitHub Copilot Extension Documentation - link: https://docs.github.com/en/copilot/building-copilot-extensions/about-building-copilot-extensions + title: GitHub Marketplace for Copilot extensions + link: https://github.com/marketplace?type=apps&copilot_app=true/ + type: website + - resource: + title: About building Copilot Extensions + link: https://docs.github.com/en/copilot/building-copilot-extensions/about-building-copilot-extensions/ + type: documentation + - resource: + title: Copilot Extensions repository + link: https://github.com/copilot-extensions/ type: documentation - # ================================================================================ # FIXED, DO NOT MODIFY diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/example-picture.png deleted file mode 100644 index c69844bed44b65c7f5bc6cf511f93987fdcd7b95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63167 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 q-Mv3pxc`&l*gyNt{xlEs;Qs>q{#983 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/extension-test.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/extension-test.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8537b31837d8b8ce010a4a9d559a347f48ecb0 GIT binary patch literal 88777 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/marketplace.png b/content/learning-paths/servers-and-cloud-computing/copilot-extension/images/marketplace.png new file mode 100644 index 0000000000000000000000000000000000000000..4c523e1753b671d7a56b741c6595d3d2bb3c9b30 GIT binary patch literal 30755 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

K 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%0DR~I~@s0S&TLgm63h!*pg1P;H5sRsi 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 literal 0 HcmV?d00001 diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md deleted file mode 100644 index 39a88bfa57..0000000000 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/todo.md +++ /dev/null @@ -1,51 +0,0 @@ -# TODO - -## Tasks by Person - -### Joe: - -- [x] copy extension code to new ArmDeveloperEcosystem repo, clean up extension -- [ ] Flask Webapp -- [ ] Deployment LP -- [ ] Requirements section - -### Avin: - -- [ ] Creating GitHub App -- [ ] Vector Database -- [ ] Configuring GitHub App - -## Jason: - -- [x] Python hello world extension LP - -## Learning Path flow - -- 1 Requirements - - Install needed developer tools / SDKs - - Python (version?) - - Python local environment + package install - - Ensure have the example repo cloned -- 10 Creating GitHub App - - Creating the extension in UI - - Getting application ID and client secret for Flask web app -- 20 Flask webapp / API - - oauth2 implementation (refresher) - - Link to previous learning path - - agent endpoint - - RAG augmentations - - Create client ID/secret - - marketplace endpoint (optional step, if users want to deploy to the marketplace) -- 30 Vector database - - What is a vector database - - Describe FAISS, and why it is the fastest similarity search algorithm (efficient ANN, in-memory) - - Mention that deploying a static in-memory vector store in every instance prevents a centralized bottleneck when scaling - - bin file generation -- 40 Deployment (AWS only) - - Disclaimers "There are a lot of ways to run a flask app" - - Link to other learning path for full explanation -- 50 Configuring GitHub App - - input callback endpoints - - get URLs from LP #2, that are specfied in Route 53 - - optional: registering the extension with marketplace -- 100 Next steps From 0e791293268da0b809ca5c02f70937198b725882 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Thu, 13 Feb 2025 11:45:23 -0800 Subject: [PATCH 41/57] Fixing merge conflict --- assets/contributors.csv | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/assets/contributors.csv b/assets/contributors.csv index ca7f7689c7..2427c7a3cf 100644 --- a/assets/contributors.csv +++ b/assets/contributors.csv @@ -15,6 +15,7 @@ Julie Gaskin,Arm,,,, Pranay Bakre,Arm,,,, Elham Harirpoush,Arm,,,, Frédéric -lefred- Descamps,OCI,,,,lefred.be +Fr�d�ric -lefred- Descamps,OCI,,,,lefred.be Kristof Beyls,Arm,,,, David Spickett,Arm,,,, Uma Ramalingam,Arm,uma-ramalingam,,, @@ -22,7 +23,7 @@ Konstantinos Margaritis,VectorCamp,markos,konstantinosmargaritis,@freevec1,https Diego Russo,Arm,diegorusso,diegor,diegor,https://www.diegor.it Jonathan Davies,Arm,,,, Zhengjun Xing,Arm,,,, -Diego Russo and Leandro Nunes,Arm,,,, +Leandro Nunes,Arm,,,, Dawid Borycki,,dawidborycki,,, Ying Yu,Arm,,,, Bolt Liu,Arm,,,, @@ -50,4 +51,32 @@ Georgios Mermigkis,VectorCamp,gMerm,georgios-mermigkis,,https://vectorcamp.gr/ Ben Clark,Arm,,,, Han Yin,Arm,hanyin-arm,nacosiren,, Willen Yang,Arm,,,, +Daniel Gubay,,,,, +Paul Howard,,,,, +Iago Calvo Lista,Arm,,,, +Stephen Theobald,Arm,,,, +ThirdAI,,,,, +Preema Merlin Dsouza,,,,, +Dominica Abena O. Amanfo,,,,, +Arm,,,,, +Albin Bernhardsson,,,,, +Przemyslaw Wirkus,,,,, +Zach Lasiuk,,,,, +Daniel Nguyen,,,,, +Joe Stech,Arm,,,, +visualSilicon,,,,, +Konstantinos Margaritis,VectorCamp,,,, +Kieran Hejmadi,,,,, +Alex Su,,,,, +Chaodong Gong,,,,, +Owen Wu,Arm,,,, +Koki Mitsunami,,,,, +Nikhil Gupta,,,,, +Nobel Chowdary Mandepudi,Arm,,,, +Ravi Malhotra,Arm,,,, +Masoud Koleini,,,,, +Na Li,Arm,,,, +Tom Pilar,,,,, +Cyril Rohr,,,,, +Odin Shen,Arm,odincodeshen,odin-shen-lmshen,, Avin Zarlez,Arm,AvinZarlez,avinzarlez,,https://www.avinzarlez.com/ From 781473cdeade6ec128445c15a930dad6f33ed5ab Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Tue, 18 Feb 2025 08:57:43 -0600 Subject: [PATCH 42/57] Stats fix and enabling Arm ITS filtering --- .../cross-platform/cca_rme/_index.md | 2 + .../dynamic-memory-allocator/_index.md | 2 + .../eigen-linear-algebra-on-arm/_index.md | 2 + .../function-multiversioning/_index.md | 1 + .../github-arm-runners/_index.md | 2 +- .../integer-vs-floats/_index.md | 2 + .../cross-platform/intrinsics/_index.md | 1 + .../kleidiai-explainer/_index.md | 2 + .../cross-platform/loop-reflowing/_index.md | 2 + .../cross-platform/matrix/_index.md | 2 + .../cross-platform/mca-godbolt/_index.md | 2 + .../cross-platform/memory-latency/_index.md | 2 + .../cross-platform/psa-tfm/_index.md | 2 + .../restrict-keyword-c99/_index.md | 2 + .../cross-platform/simd-info-demo/_index.md | 2 + .../cross-platform/simd-on-rust/_index.md | 2 + .../cross-platform/sme2/_index.md | 2 + .../_index.md | 2 + .../embedded-and-microcontrollers/_index.md | 1 + .../laptops-and-desktops/_index.md | 1 + .../mobile-graphics-and-gaming/_index.md | 1 + .../PMUv3_plugin_learning_path/_index.md | 2 + .../servers-and-cloud-computing/_index.md | 1 + .../arm_pmu/_index.md | 2 + .../bolt/_index.md | 2 + .../cca-container/_index.md | 2 + .../cca-essentials/_index.md | 2 + .../cca-veraison/_index.md | 2 + .../envoy_tune/_index.md | 4 +- .../_index.md | 2 + .../flink/_index.md | 2 + .../geekbench/_index.md | 2 + .../gke-multi-arch/_index.md | 1 + .../glibc-with-lse/_index.md | 2 + .../intro/_index.md | 1 + .../java-gc-tuning/_index.md | 2 + .../java-on-axion/_index.md | 2 + .../kubearchinspect/_index.md | 2 + .../libhugetlbfs/_index.md | 2 + .../servers-and-cloud-computing/lse/_index.md | 2 + .../mariadb/_index.md | 2 + .../memcached/_index.md | 2 + .../migration/_index.md | 1 + .../ml-perf/_index.md | 1 + .../mongodb/_index.md | 2 + .../servers-and-cloud-computing/mpi/_index.md | 2 + .../mysql_tune/_index.md | 2 + .../nginx_tune/_index.md | 2 + .../servers-and-cloud-computing/pac/_index.md | 2 + .../postgresql_tune/_index.md | 2 + .../processwatch/_index.md | 2 + .../profiling-for-neoverse/_index.md | 2 + .../servers-and-cloud-computing/ran/_index.md | 2 + .../redis/_index.md | 2 + .../redis_cache/_index.md | 2 + .../redis_tune/_index.md | 2 + .../refinfra-debug/_index.md | 2 + .../refinfra-quick-start/_index.md | 2 + .../rme-cca-basics/_index.md | 2 + .../snappy/_index.md | 2 + .../supervisord/_index.md | 2 + .../servers-and-cloud-computing/sve/_index.md | 1 + .../sysreport/_index.md | 2 + .../top-down-n1/_index.md | 2 + .../triggering-pmu-events-2/_index.md | 2 + .../triggering-pmu-events/_index.md | 2 + tools/stats_data_generate.py | 55 +++++++++++-------- 67 files changed, 152 insertions(+), 26 deletions(-) diff --git a/content/learning-paths/cross-platform/cca_rme/_index.md b/content/learning-paths/cross-platform/cca_rme/_index.md index 3dce41b1d3..60fc409c69 100644 --- a/content/learning-paths/cross-platform/cca_rme/_index.md +++ b/content/learning-paths/cross-platform/cca_rme/_index.md @@ -34,6 +34,8 @@ tools_software_languages: - Arm Development Studio - RME - CCA + - Arm Total Performance + ### Cross-platform metadata only shared_path: true diff --git a/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md b/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md index 241f387c32..c6a85cd1b7 100644 --- a/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md +++ b/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md @@ -28,6 +28,8 @@ title: Write a Dynamic Memory Allocator tools_software_languages: - C - Coding +- Arm Total Performance + further_reading: - resource: title: C Dynamic Memory Management Functions diff --git a/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md b/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md index 260f7f1cb1..9aba8e7f1e 100644 --- a/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md +++ b/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md @@ -23,6 +23,8 @@ tools_software_languages: - GCC - Clang - Coding + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/function-multiversioning/_index.md b/content/learning-paths/cross-platform/function-multiversioning/_index.md index 3482ec018e..8cf239834a 100644 --- a/content/learning-paths/cross-platform/function-multiversioning/_index.md +++ b/content/learning-paths/cross-platform/function-multiversioning/_index.md @@ -29,6 +29,7 @@ armips: - Neoverse tools_software_languages: - C/C++ + - Arm Total Performance operatingsystems: - Linux - Android diff --git a/content/learning-paths/cross-platform/github-arm-runners/_index.md b/content/learning-paths/cross-platform/github-arm-runners/_index.md index 14bd845c37..1af7be171a 100644 --- a/content/learning-paths/cross-platform/github-arm-runners/_index.md +++ b/content/learning-paths/cross-platform/github-arm-runners/_index.md @@ -25,7 +25,7 @@ operatingsystems: tools_software_languages: - GitHub - Docker - + - Arm Total Performance ### Cross-platform metadata only shared_path: true shared_between: diff --git a/content/learning-paths/cross-platform/integer-vs-floats/_index.md b/content/learning-paths/cross-platform/integer-vs-floats/_index.md index 27e48271c6..7bbccf8417 100644 --- a/content/learning-paths/cross-platform/integer-vs-floats/_index.md +++ b/content/learning-paths/cross-platform/integer-vs-floats/_index.md @@ -24,6 +24,8 @@ tools_software_languages: - GCC - Clang - Coding + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/intrinsics/_index.md b/content/learning-paths/cross-platform/intrinsics/_index.md index 5ab8b6d495..76b5198455 100644 --- a/content/learning-paths/cross-platform/intrinsics/_index.md +++ b/content/learning-paths/cross-platform/intrinsics/_index.md @@ -33,6 +33,7 @@ tools_software_languages: - SVE - Coding - Intrinsics + - Arm Total Performance further_reading: - resource: diff --git a/content/learning-paths/cross-platform/kleidiai-explainer/_index.md b/content/learning-paths/cross-platform/kleidiai-explainer/_index.md index 3d380713f3..6d85094458 100644 --- a/content/learning-paths/cross-platform/kleidiai-explainer/_index.md +++ b/content/learning-paths/cross-platform/kleidiai-explainer/_index.md @@ -27,6 +27,8 @@ tools_software_languages: - GenAI - Coding - NEON + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/loop-reflowing/_index.md b/content/learning-paths/cross-platform/loop-reflowing/_index.md index 6e17128bd6..4d2db14bb9 100644 --- a/content/learning-paths/cross-platform/loop-reflowing/_index.md +++ b/content/learning-paths/cross-platform/loop-reflowing/_index.md @@ -23,6 +23,8 @@ tools_software_languages: - GCC - Clang - Coding + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/matrix/_index.md b/content/learning-paths/cross-platform/matrix/_index.md index bf4f78b2b7..6f2b044cce 100644 --- a/content/learning-paths/cross-platform/matrix/_index.md +++ b/content/learning-paths/cross-platform/matrix/_index.md @@ -33,6 +33,8 @@ tools_software_languages: - Clang - CMake - GoogleTest + - Arm Total Performance + operatingsystems: - Linux - macOS diff --git a/content/learning-paths/cross-platform/mca-godbolt/_index.md b/content/learning-paths/cross-platform/mca-godbolt/_index.md index beed62a28c..d46c3a97da 100644 --- a/content/learning-paths/cross-platform/mca-godbolt/_index.md +++ b/content/learning-paths/cross-platform/mca-godbolt/_index.md @@ -25,6 +25,8 @@ armips: tools_software_languages: - assembly - llvm-mca + - Arm Total Performance + operatingsystems: - Linux - Windows diff --git a/content/learning-paths/cross-platform/memory-latency/_index.md b/content/learning-paths/cross-platform/memory-latency/_index.md index dc6d0e53b7..daa6732b4e 100644 --- a/content/learning-paths/cross-platform/memory-latency/_index.md +++ b/content/learning-paths/cross-platform/memory-latency/_index.md @@ -24,6 +24,8 @@ tools_software_languages: - GCC - Clang - Coding + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/psa-tfm/_index.md b/content/learning-paths/cross-platform/psa-tfm/_index.md index 46817d993f..5ba67f4be1 100644 --- a/content/learning-paths/cross-platform/psa-tfm/_index.md +++ b/content/learning-paths/cross-platform/psa-tfm/_index.md @@ -32,6 +32,8 @@ tools_software_languages: - Trusted Firmware - Fixed Virtual Platform - GCC + - Arm Total Performance + ### Cross-platform metadata only shared_path: true diff --git a/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md b/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md index bcf7850fa4..38a5849641 100644 --- a/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md +++ b/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md @@ -25,6 +25,8 @@ tools_software_languages: - Clang - SVE2 - Coding + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/simd-info-demo/_index.md b/content/learning-paths/cross-platform/simd-info-demo/_index.md index cc80c70134..94e5f21d24 100644 --- a/content/learning-paths/cross-platform/simd-info-demo/_index.md +++ b/content/learning-paths/cross-platform/simd-info-demo/_index.md @@ -28,6 +28,8 @@ tools_software_languages: - Clang - Coding - Rust + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/simd-on-rust/_index.md b/content/learning-paths/cross-platform/simd-on-rust/_index.md index 4ab77e0839..260895b7ba 100644 --- a/content/learning-paths/cross-platform/simd-on-rust/_index.md +++ b/content/learning-paths/cross-platform/simd-on-rust/_index.md @@ -24,6 +24,8 @@ tools_software_languages: - Clang - Coding - Rust + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/cross-platform/sme2/_index.md b/content/learning-paths/cross-platform/sme2/_index.md index 1ccd7c91d3..deceae5ea9 100644 --- a/content/learning-paths/cross-platform/sme2/_index.md +++ b/content/learning-paths/cross-platform/sme2/_index.md @@ -32,6 +32,8 @@ armips: tools_software_languages: - C - Clang + - Arm Total Performance + operatingsystems: - Linux - macOS diff --git a/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md b/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md index ad5e05f99f..733518e4f7 100644 --- a/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md +++ b/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md @@ -23,6 +23,8 @@ tools_software_languages: - GCC - Clang - Coding + - Arm Total Performance + operatingsystems: - Linux shared_path: true diff --git a/content/learning-paths/embedded-and-microcontrollers/_index.md b/content/learning-paths/embedded-and-microcontrollers/_index.md index 1a5c99cdbe..bbf99cef0c 100644 --- a/content/learning-paths/embedded-and-microcontrollers/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/_index.md @@ -34,6 +34,7 @@ tools_software_languages_filter: - Arm Compute Library: 1 - Arm Development Studio: 9 - Arm Fast Models: 4 +- Arm Total Performance: 6 - Arm Virtual Hardware: 11 - AVH: 1 - C: 1 diff --git a/content/learning-paths/laptops-and-desktops/_index.md b/content/learning-paths/laptops-and-desktops/_index.md index ca9062959c..b4432aa730 100644 --- a/content/learning-paths/laptops-and-desktops/_index.md +++ b/content/learning-paths/laptops-and-desktops/_index.md @@ -27,6 +27,7 @@ tools_software_languages_filter: - Alacritty: 1 - Android Studio: 1 - Arm Development Studio: 2 +- Arm Total Performance: 16 - Arm64EC: 1 - assembly: 1 - C: 3 diff --git a/content/learning-paths/mobile-graphics-and-gaming/_index.md b/content/learning-paths/mobile-graphics-and-gaming/_index.md index d6c1438337..6fc69273f2 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/_index.md @@ -31,6 +31,7 @@ tools_software_languages_filter: - Arm Development Studio: 1 - Arm Mobile Studio: 1 - Arm Performance Studio: 2 +- Arm Total Performance: 14 - assembly: 1 - Bazel: 1 - C: 1 diff --git a/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md b/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md index 9758cd6a14..d7b04c357d 100644 --- a/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md @@ -27,6 +27,8 @@ tools_software_languages: - C - C++ - Python + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/_index.md b/content/learning-paths/servers-and-cloud-computing/_index.md index dbd38985b1..e9f1192e57 100644 --- a/content/learning-paths/servers-and-cloud-computing/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/_index.md @@ -37,6 +37,7 @@ tools_software_languages_filter: - Android Studio: 1 - Ansible: 2 - Arm Development Studio: 4 +- Arm Total Performance: 60 - armclang: 1 - armie: 1 - ArmRAL: 1 diff --git a/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md b/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md index 0335dbfb78..1e553076b6 100644 --- a/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md @@ -25,6 +25,8 @@ tools_software_languages: - perf - Assembly - GCC + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/bolt/_index.md b/content/learning-paths/servers-and-cloud-computing/bolt/_index.md index 18e20d3dba..2a3010bf72 100644 --- a/content/learning-paths/servers-and-cloud-computing/bolt/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/bolt/_index.md @@ -25,6 +25,8 @@ armips: tools_software_languages: - BOLT - perf + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md index 6c07722876..8564a3722d 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md @@ -29,6 +29,8 @@ tools_software_languages: - RME - CCA - Docker + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md index 688ef65da3..ef5a76d64b 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md @@ -34,6 +34,8 @@ tools_software_languages: - CCA - Docker - Veraison + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md index 0fcf9f4fa0..a06bb7a02e 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md @@ -29,6 +29,8 @@ operatingsystems: - Linux tools_software_languages: - CCA + - Arm Total Performance + diff --git a/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md index be3ec4d4e8..e15338c65e 100644 --- a/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md @@ -23,7 +23,9 @@ subjects: Web armips: - Neoverse tools_software_languages: - - Envoy + - Envoy + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md b/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md index c9bd377fdb..4bb8338edf 100644 --- a/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md @@ -29,6 +29,8 @@ tools_software_languages: - Clang - C - Assembly + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/flink/_index.md b/content/learning-paths/servers-and-cloud-computing/flink/_index.md index fe4b6e3e16..2c6edb91e1 100644 --- a/content/learning-paths/servers-and-cloud-computing/flink/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/flink/_index.md @@ -34,6 +34,8 @@ tools_software_languages: - Flink - Java - Nexmark +- Arm Total Performance + further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md b/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md index 72400c345e..4018d9c132 100644 --- a/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md @@ -29,6 +29,8 @@ test_status: - passed tools_software_languages: - Geekbench + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md b/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md index 7a97f64094..29f2c9d9e7 100644 --- a/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md @@ -28,6 +28,7 @@ armips: tools_software_languages: - Kubernetes + - Arm Total Performance operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md b/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md index 756fc29b2d..b953ef0410 100644 --- a/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md @@ -34,6 +34,8 @@ tools_software_languages: - Glibc - LSE - MongoDB +- Arm Total Performance + further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/intro/_index.md b/content/learning-paths/servers-and-cloud-computing/intro/_index.md index b74faf98ef..841dc401bb 100644 --- a/content/learning-paths/servers-and-cloud-computing/intro/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/intro/_index.md @@ -22,6 +22,7 @@ armips: operatingsystems: - Linux tools_software_languages: + - Arm Total Performance further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md b/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md index 35dfc89a24..2182eb5af2 100644 --- a/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md @@ -24,6 +24,8 @@ armips: - Neoverse tools_software_languages: - Java + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md b/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md index 09562a6657..a499cfff70 100644 --- a/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md @@ -24,6 +24,8 @@ armips: tools_software_languages: - Java - Google Axion + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md b/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md index ee6fe7b2f6..701fb7f593 100644 --- a/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md @@ -23,6 +23,8 @@ armips: - Neoverse tools_software_languages: - Kubernetes + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md b/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md index 7f44bae56b..0dd7f53af6 100644 --- a/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md @@ -24,6 +24,8 @@ operatingsystems: tools_software_languages: - MySQL - GCC + - Arm Total Performance + test_images: - ubuntu:latest diff --git a/content/learning-paths/servers-and-cloud-computing/lse/_index.md b/content/learning-paths/servers-and-cloud-computing/lse/_index.md index 2679a7643c..dcb51d5316 100644 --- a/content/learning-paths/servers-and-cloud-computing/lse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/lse/_index.md @@ -23,6 +23,8 @@ operatingsystems: - Linux tools_software_languages: - GCC + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md b/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md index 0674e4d71d..19096a5f7b 100644 --- a/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md @@ -28,6 +28,8 @@ tools_software_languages: - Ansible - MariaDB - Docker + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/memcached/_index.md b/content/learning-paths/servers-and-cloud-computing/memcached/_index.md index ea62b29110..6f5f8d03c0 100644 --- a/content/learning-paths/servers-and-cloud-computing/memcached/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/memcached/_index.md @@ -23,6 +23,8 @@ test_status: title: Run memcached on Arm servers and measure its performance tools_software_languages: - Memcached +- Arm Total Performance + further_reading: - resource: title: Memcached Wiki diff --git a/content/learning-paths/servers-and-cloud-computing/migration/_index.md b/content/learning-paths/servers-and-cloud-computing/migration/_index.md index dbf5ee70d1..06508973a0 100644 --- a/content/learning-paths/servers-and-cloud-computing/migration/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/migration/_index.md @@ -28,6 +28,7 @@ tools_software_languages: - Neon - SVE - Go + - Arm Total Performance further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md b/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md index 8ea4acd3f4..774f16efc8 100644 --- a/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md @@ -25,6 +25,7 @@ test_status: title: Measure Machine Learning Inference Performance on Arm servers tools_software_languages: - TensorFlow +- Arm Total Performance further_reading: - resource: title: MLPerf Inference Suite Source repo diff --git a/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md b/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md index 2a80d2356c..6f203624e1 100644 --- a/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md @@ -27,6 +27,8 @@ test_maintenance: false tools_software_languages: - MongoDB - GCC +- Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/mpi/_index.md b/content/learning-paths/servers-and-cloud-computing/mpi/_index.md index 5c7594d40d..cc4789adae 100644 --- a/content/learning-paths/servers-and-cloud-computing/mpi/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mpi/_index.md @@ -31,6 +31,8 @@ tools_software_languages: - Linaro Forge - gdb - mpi + - Arm Total Performance + further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md index c23b8119e7..7587afbd0e 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md @@ -24,6 +24,8 @@ tools_software_languages: - SQL - MySQL - InnoDB + - Arm Total Performance + test_images: - ubuntu:latest diff --git a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md index 1bf8b867bc..ca2f454168 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md @@ -25,6 +25,8 @@ armips: - Neoverse tools_software_languages: - Nginx + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/pac/_index.md b/content/learning-paths/servers-and-cloud-computing/pac/_index.md index dd28eb03da..3c8e3cb86b 100644 --- a/content/learning-paths/servers-and-cloud-computing/pac/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/pac/_index.md @@ -26,6 +26,8 @@ operatingsystems: - Linux tools_software_languages: - Coding + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md index 82721d247c..2bcc5ff44c 100644 --- a/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md @@ -30,6 +30,8 @@ tools_software_languages: - SQL - PostgreSQL - HammerDB + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md b/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md index e0ee95c3bd..fe789a40bd 100644 --- a/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md @@ -26,6 +26,8 @@ tools_software_languages: - libbpf - Capstone - C/C++ + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md b/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md index 282f0a8ae7..50f586953a 100644 --- a/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md @@ -22,6 +22,8 @@ armips: - Neoverse tools_software_languages: - Streamline CLI + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/ran/_index.md b/content/learning-paths/servers-and-cloud-computing/ran/_index.md index 9545e3d14b..2642f2e767 100644 --- a/content/learning-paths/servers-and-cloud-computing/ran/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/ran/_index.md @@ -26,6 +26,8 @@ tools_software_languages: - ArmRAL - 5G - GCC +- Arm Total Performance + further_reading: - resource: title: 5G Infrastructure diff --git a/content/learning-paths/servers-and-cloud-computing/redis/_index.md b/content/learning-paths/servers-and-cloud-computing/redis/_index.md index 5ec6356e2a..d6d55da21a 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis/_index.md @@ -25,6 +25,8 @@ operatingsystems: - Linux tools_software_languages: - Redis + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md b/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md index 09a98e2412..1ff6bfbd78 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md @@ -29,6 +29,8 @@ tools_software_languages: - Redis - SQL - MySQL + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md index 246696af4d..fe7b2a6ec7 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md @@ -24,6 +24,8 @@ armips: - Neoverse tools_software_languages: - Redis + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md b/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md index af96ef3568..58cfed5bed 100644 --- a/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md @@ -25,6 +25,8 @@ armips: - Neoverse tools_software_languages: - Arm Development Studio + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md b/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md index 2b3da5c495..8eff32a401 100644 --- a/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md @@ -28,6 +28,8 @@ tools_software_languages: - Docker - FVP - Arm Development Studio + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md b/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md index 8ff44b016e..8bd9c4553b 100644 --- a/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md @@ -28,6 +28,8 @@ tools_software_languages: - FVP - RME - CCA + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/snappy/_index.md b/content/learning-paths/servers-and-cloud-computing/snappy/_index.md index 8953bbf4bf..731e8642dc 100644 --- a/content/learning-paths/servers-and-cloud-computing/snappy/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/snappy/_index.md @@ -24,6 +24,8 @@ test_status: title: Measure performance of compression libraries on Arm servers tools_software_languages: - snappy +- Arm Total Performance + further_reading: - resource: title: Lzbench source diff --git a/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md b/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md index 29db78af1b..fdf079d0e2 100644 --- a/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md @@ -28,6 +28,8 @@ tools_software_languages: - Docker - Remote.It - Supervisor + - Arm Total Performance + further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/sve/_index.md b/content/learning-paths/servers-and-cloud-computing/sve/_index.md index fa17f93e86..606d13bc63 100644 --- a/content/learning-paths/servers-and-cloud-computing/sve/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/sve/_index.md @@ -31,6 +31,7 @@ tools_software_languages: - armie - GCC - armclang + - Arm Total Performance further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md b/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md index 5a5bf691bd..990755eca5 100644 --- a/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md @@ -23,6 +23,8 @@ armips: - Neoverse tools_software_languages: - Python + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md b/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md index c4a612a59e..2101930c3a 100644 --- a/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md @@ -24,6 +24,8 @@ armips: tools_software_languages: - perf - Telemetry + - Arm Total Performance + operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md index b8c0fb0ff8..9d3ba4b693 100644 --- a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md @@ -25,6 +25,8 @@ armips: tools_software_languages: - C - Assembly + - Arm Total Performance + further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md index 21f3b0c6ab..4094544ca5 100644 --- a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md @@ -26,6 +26,8 @@ armips: tools_software_languages: - C - Assembly + - Arm Total Performance + further_reading: diff --git a/tools/stats_data_generate.py b/tools/stats_data_generate.py index ae3f5a8354..cb1dd571c0 100644 --- a/tools/stats_data_generate.py +++ b/tools/stats_data_generate.py @@ -144,31 +144,38 @@ def mdToMetadata(md_file_path): metadata_dic = yaml.safe_load(metadata_text) return metadata_dic -def authorAdd(author_name,tracking_dic): +def authorAdd(author_names,tracking_dic): ### Update 'individual_authors' area, raw number by each author. - # Check if author already exists as key. If not, add new key - author_urlized = urlize(author_name) - if author_urlized in tracking_dic['individual_authors']: - # Update number for this author - tracking_dic['individual_authors'][author_urlized] = tracking_dic['individual_authors'][author_urlized] + 1 - else: - # Add key to dic with 1 to their name - tracking_dic['individual_authors'][author_urlized] = 1 - ### Update 'contributions' area, internal vs external contributions - - # open the contributors CSV file - with open('../assets/contributors.csv', mode ='r')as file: - csvFile = csv.reader(file) - for line in csvFile: - company = line[1] - # If author in the line, check if they work at Arm or not, and increment contributions number for internal or external - if author_name in line: - if company == 'Arm': - tracking_dic['contributions']['internal'] = tracking_dic['contributions']['internal'] + 1 - else: - tracking_dic['contributions']['external'] = tracking_dic['contributions']['external'] + 1 - + # Support multiple authors by iterating through a list. + # First, check if author_name is a list or not. If not, make it a list + if not isinstance(author_names, list): + author_names = [author_names] + for author_name in author_names: + + # Check if author already exists as key. If not, add new key + author_urlized = urlize(author_name) + if author_urlized in tracking_dic['individual_authors']: + # Update number for this author + tracking_dic['individual_authors'][author_urlized] = tracking_dic['individual_authors'][author_urlized] + 1 + else: + # Add key to dic with 1 to their name + tracking_dic['individual_authors'][author_urlized] = 1 + + ### Update 'contributions' area, internal vs external contributions + + # open the contributors CSV file + with open('../assets/contributors.csv', mode ='r')as file: + csvFile = csv.reader(file) + for line in csvFile: + company = line[1] + # If author in the line, check if they work at Arm or not, and increment contributions number for internal or external + if author_name in line: + if company == 'Arm': + tracking_dic['contributions']['internal'] = tracking_dic['contributions']['internal'] + 1 + else: + tracking_dic['contributions']['external'] = tracking_dic['contributions']['external'] + 1 + return tracking_dic def iterateContentIndexMdFiles(): @@ -233,7 +240,7 @@ def iterateContentIndexMdFiles(): weekly_count_dic[category] = weekly_count_dic[category] + 1 ######### AUTHOR info - weekly_authors_contributions_dic = authorAdd(content_metadic['author_primary'],weekly_authors_contributions_dic) + weekly_authors_contributions_dic = authorAdd(content_metadic['author'],weekly_authors_contributions_dic) # Record entry in test file From 5b04c07d55ef891480d2b88a28ae2ea6f6c7b37e Mon Sep 17 00:00:00 2001 From: Arnaud de Grandmaison Date: Tue, 18 Feb 2025 17:45:59 +0100 Subject: [PATCH 43/57] [SME2] Update the link to the code examples. It now only download the content relevant to this learning path. --- .../cross-platform/sme2/1-get-started.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/content/learning-paths/cross-platform/sme2/1-get-started.md b/content/learning-paths/cross-platform/sme2/1-get-started.md index 9905905c57..72a84db8e6 100644 --- a/content/learning-paths/cross-platform/sme2/1-get-started.md +++ b/content/learning-paths/cross-platform/sme2/1-get-started.md @@ -103,19 +103,19 @@ For more examples and ideas, visit: ## Environment -Now, using Git, clone the environment for experimenting with SME2 to a directory -named ``code-examples.git`` and change your current directory to -``code-examples.git/learning-paths/cross-platform/sme2`` : +Now, [download the code examples](https://gitlab.arm.com/learning-code-examples/code-examples/-/archive/main/code-examples-main.tar.gz?path=learning-paths/cross-platform/sme2) +for this learning path, expand the archive and change your current directory to +``code-examples/learning-paths/cross-platform/sme2`` : ```BASH -git clone https://gitlab.arm.com/learning-code-examples/code-examples code-examples.git -cd code-examples.git/learning-paths/cross-platform/sme2 +tar xfz code-examples-main-learning-paths-cross-platform-sme2.tar.gz -s /code-examples-main-learning-paths-cross-platform-sme2/code-examples/ +cd code-examples/learning-paths/cross-platform/sme2 ``` This list of content in this directory should look like this : ```TXT -code-examples.git/learning-paths/cross-platform/sme2/ +code-examples/learning-paths/cross-platform/sme2/ ├── .clang-format ├── .devcontainer/ │ └── devcontainer.json @@ -157,7 +157,7 @@ It contains: {{% notice Note %}} From this point in the Learning Path, all instructions assume that your current -directory is ``code-examples.git/learning-paths/cross-platform/sme2``.{{% /notice %}} +directory is ``code-examples/learning-paths/cross-platform/sme2``.{{% /notice %}} ## Using the environment From 19d850f73a520d8fc25998e364b09d1b4e1e6eba Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 08:52:00 -0800 Subject: [PATCH 44/57] Two authors --- .../servers-and-cloud-computing/copilot-extension/_index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index f2e3fa269e..959c152ed7 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -17,7 +17,9 @@ prerequisites: - A GitHub account. - A Linux-based computer with Python installed. -author_primary: Avin Zarlez, Joe Stech +author: + - Avin Zarlez + - Joe Stech ### Tags cloud_service_providers: AWS From 31b2d7f32837109ec2a1b75001f4751b3ac7aa0b Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 08:54:24 -0800 Subject: [PATCH 45/57] Add Rag explainer to first page --- .../servers-and-cloud-computing/copilot-extension/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index 959c152ed7..e44b5b678b 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -3,7 +3,7 @@ title: Create a RAG-based GitHub Copilot Extension in Python minutes_to_complete: 30 -who_is_this_for: This is an advanced topic for software developers who want to learn how to build a RAG-based GitHub Copilot Extension. +who_is_this_for: This is an advanced topic for software developers who want to learn how to build a Retrieval Augmented Generation (RAG) based GitHub Copilot Extension. learning_objectives: - Explain what a RAG system is. From b5eebf3d6ff7846dec2d084627c4b580b3a0b5f0 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 08:56:08 -0800 Subject: [PATCH 46/57] Removed thye --- .../servers-and-cloud-computing/copilot-extension/1-rag.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md index 5ca247afdd..a8d76965cb 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md @@ -14,7 +14,7 @@ The basic flow of a RAG system looks like this: 1. Retrieval: The system searches a knowledge base, usually using some combination of vector and/or text search. 2. Augmentation: The retrieved information is then provided as context to a generative AI model to provide additional context for the user's query. -3. The AI model uses both thye retrieved knowledge and its internal understanding to generate a more useful response to the user. +3. The AI model uses both the retrieved knowledge and its internal understanding to generate a more useful response to the user. The benefits of a RAG system revolve around improved factual accuracy of responses. It also allows a system to understand more up-to-date information, since you can add additional knowledge to the knowledge base much more easily than you could retrain the model. From fa21ac037dddd66fa2f930c8a724c9107ed0bb2e Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 09:02:24 -0800 Subject: [PATCH 47/57] Vector changes --- .../copilot-extension/1-rag.md | 10 --------- .../copilot-extension/2-vector.md | 22 +++++++++++++------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md index a8d76965cb..53d9c27185 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/1-rag.md @@ -19,13 +19,3 @@ The basic flow of a RAG system looks like this: The benefits of a RAG system revolve around improved factual accuracy of responses. It also allows a system to understand more up-to-date information, since you can add additional knowledge to the knowledge base much more easily than you could retrain the model. Most importantly, RAG lets you provide reference links to the user, showing the user where the system is getting its information. - -## The GitHub repository - -Arm has provided a companion GitHub repo for this Learning Path that serves as a Python-based Copilot RAG Extension example. - -To clone the repo for later reference, run - -```bash -git clone https://github.com/ArmDeveloperEcosystem/python-rag-extension.git -``` \ No newline at end of file diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md index 47d8c40441..8400093bf1 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/2-vector.md @@ -18,11 +18,11 @@ How can we convert complex ideas, like the semantic meaning of a series of words ### Embeddings -Embeddings are vectors generated through an AI model. We can convert collections of "tokens" (word fragments) into a point in N dimensional space. +Embeddings are vectors generated through an AI model. We can convert collections of "tokens" (word fragments) into a point in N dimensional space. -Then for any given vector (like the embedding of a question asked by a user) we can query our vector database to find embedded data that is most similar. +Then for any given vector (like the embedding of a question asked by a user) we can query our vector database to find embedded data that is most similar. -For example, for our use case let's say we want to know which Arm learning path is most relevant to a question a user asks. +For our use case, we want to know which Arm learning path is most relevant to a question a user asks. First, ahead of time, we have to convert the raw data (Arm learning path content) into more consumable "chunks". In our case, small `yaml` files. Then we run those chunks through our LLM model and embed the content into our FAISS vector database. @@ -50,14 +50,22 @@ By copying the FAISS database into every deployment, we achieve a scalable, high ## Collecting Data into Chunks -We have provided scripts in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. +Arm has provided a [companion GitHub repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) for this Learning Path that serves as a Python-based Copilot RAG Extension example. In this repo, we have provided scripts to convert an Arm learning path into a series of `chunk.yaml` files for use in our RAG application. + +### Clone the GitHub repository + +To clone the repo, run + +```bash +git clone https://github.com/ArmDeveloperEcosystem/python-rag-extension.git +``` ### Chunk Creation Script Set up -Navigate to the `vectorstore` folder in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/). +Navigate to the `vectorstore` folder in the [python-rag-extension github repo](https://github.com/ArmDeveloperEcosystem/python-rag-extension/) you just cloned. ```bash -cd vectorstore +cd python-rag-extension/vectorstore ``` It is recommended to use a virtual environment to manage dependencies. @@ -142,7 +150,7 @@ python local_vectorstore_creation.py Copy the generated `bin` and `json` files to the root directory of your Flask application. -THey should be in the `vectorstore/chunks` folder. Since you are likely still in the `vectorstore` folder, run this command to copy: +They should be in the `vectorstore/chunks` folder. Since you are likely still in the `vectorstore` folder, run this command to copy: ```bash cp chunks/faiss_index.bin ../ From 76154a160993ef9ee456d02c79124fac6d5db372 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 09:03:59 -0800 Subject: [PATCH 48/57] testing title --- .../servers-and-cloud-computing/copilot-extension/7-testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md index 1d21ba9c5d..fa699c3a97 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md @@ -6,7 +6,7 @@ weight: 8 layout: learningpathall --- -## Test it out +## Chat with your extension After you update your GitHub App settings, you can start chatting with your extension by typing @YOUR-EXTENSION-NAME in the Copilot Chat window, followed by your prompt: From 67b616f0da41f4e3f5f54c26ce999eada7ea8d2e Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 09:04:44 -0800 Subject: [PATCH 49/57] Removed quotes --- .../servers-and-cloud-computing/copilot-extension/_index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index e44b5b678b..2ab39635ce 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -12,8 +12,8 @@ learning_objectives: - Configure a GitHub Copilot Extension for your RAG application. prerequisites: - - The "[Build a GitHub Copilot Extension in Python](../gh-copilot-simple/)" Learning Path. - - The "[Graviton Infrastructure for GitHub Copilot Extensions](../copilot-extension-deployment/)" Learning Path. + - The [Build a GitHub Copilot Extension in Python](../gh-copilot-simple/) Learning Path. + - The [Graviton Infrastructure for GitHub Copilot Extensions](../copilot-extension-deployment/) Learning Path. - A GitHub account. - A Linux-based computer with Python installed. From d6d583a518c281415c33027edd25ba0f1e7ecda4 Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 09:08:41 -0800 Subject: [PATCH 50/57] Added simple conclusion --- .../copilot-extension/7-testing.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md index fa699c3a97..c12586941d 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/7-testing.md @@ -23,4 +23,8 @@ There are many enhancements you can make to your extension, including inserting Another possibility is adding another copilot invocation to rephrase the previous conversation prior to your main copilot invocation. This yields more robust results, if users reference previous elements of the conversation in their question. -You can precisely tailor your RAG extension to your use case, to make your extension as useful as possible. \ No newline at end of file +You can precisely tailor your RAG extension to your use case, to make your extension as useful as possible. + +## Conclusion + +Congratulations on completing this learning path! By following the steps and processes you learned here, you can now create your own powerful and customized Copilot extensions to enhance your development workflow. From e05f297a61507a4f270a1fc1f54ba19adcb1992e Mon Sep 17 00:00:00 2001 From: Avin Zarlez <4392252+AvinZarlez@users.noreply.github.com> Date: Tue, 18 Feb 2025 09:09:50 -0800 Subject: [PATCH 51/57] List --- .../servers-and-cloud-computing/copilot-extension/_index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index 2ab39635ce..e7b54be90a 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -34,7 +34,8 @@ tools_software_languages: - conda - AWS CDK operatingsystems: - - Linux, MacOS + - Linux + - MacOS ### FIXED, DO NOT MODIFY From 69e0075bedf082185eeaead87dd2f2fecb91b5f6 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Tue, 18 Feb 2025 11:27:10 -0600 Subject: [PATCH 52/57] removed 2 potential tags --- content/learning-paths/cross-platform/psa-tfm/_index.md | 1 - .../servers-and-cloud-computing/supervisord/_index.md | 2 -- 2 files changed, 3 deletions(-) diff --git a/content/learning-paths/cross-platform/psa-tfm/_index.md b/content/learning-paths/cross-platform/psa-tfm/_index.md index 5ba67f4be1..daf7cbb4b0 100644 --- a/content/learning-paths/cross-platform/psa-tfm/_index.md +++ b/content/learning-paths/cross-platform/psa-tfm/_index.md @@ -32,7 +32,6 @@ tools_software_languages: - Trusted Firmware - Fixed Virtual Platform - GCC - - Arm Total Performance ### Cross-platform metadata only diff --git a/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md b/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md index fdf079d0e2..29db78af1b 100644 --- a/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/supervisord/_index.md @@ -28,8 +28,6 @@ tools_software_languages: - Docker - Remote.It - Supervisor - - Arm Total Performance - further_reading: - resource: From 966433efaf9e7392bf49d2ed36dbb8e72787a0f9 Mon Sep 17 00:00:00 2001 From: Zach Lasiuk Date: Wed, 19 Feb 2025 10:24:52 -0600 Subject: [PATCH 53/57] renamed to Runbook --- content/learning-paths/cross-platform/cca_rme/_index.md | 2 +- .../cross-platform/dynamic-memory-allocator/_index.md | 2 +- .../cross-platform/eigen-linear-algebra-on-arm/_index.md | 2 +- .../cross-platform/function-multiversioning/_index.md | 2 +- .../learning-paths/cross-platform/github-arm-runners/_index.md | 2 +- .../learning-paths/cross-platform/integer-vs-floats/_index.md | 2 +- content/learning-paths/cross-platform/intrinsics/_index.md | 2 +- .../learning-paths/cross-platform/kleidiai-explainer/_index.md | 2 +- content/learning-paths/cross-platform/loop-reflowing/_index.md | 2 +- content/learning-paths/cross-platform/matrix/_index.md | 2 +- content/learning-paths/cross-platform/mca-godbolt/_index.md | 2 +- content/learning-paths/cross-platform/memory-latency/_index.md | 2 +- .../cross-platform/restrict-keyword-c99/_index.md | 2 +- content/learning-paths/cross-platform/simd-info-demo/_index.md | 2 +- content/learning-paths/cross-platform/simd-on-rust/_index.md | 2 +- content/learning-paths/cross-platform/sme2/_index.md | 2 +- .../cross-platform/vectorization-friendly-data-layout/_index.md | 2 +- content/learning-paths/embedded-and-microcontrollers/_index.md | 2 +- content/learning-paths/laptops-and-desktops/_index.md | 2 +- content/learning-paths/mobile-graphics-and-gaming/_index.md | 2 +- .../PMUv3_plugin_learning_path/_index.md | 2 +- content/learning-paths/servers-and-cloud-computing/_index.md | 2 +- .../servers-and-cloud-computing/arm_pmu/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/bolt/_index.md | 2 +- .../servers-and-cloud-computing/cca-container/_index.md | 2 +- .../servers-and-cloud-computing/cca-essentials/_index.md | 2 +- .../servers-and-cloud-computing/cca-veraison/_index.md | 2 +- .../servers-and-cloud-computing/envoy_tune/_index.md | 2 +- .../exploiting-stack-buffer-overflow-aarch64/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/flink/_index.md | 2 +- .../servers-and-cloud-computing/geekbench/_index.md | 2 +- .../servers-and-cloud-computing/gke-multi-arch/_index.md | 2 +- .../servers-and-cloud-computing/glibc-with-lse/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/intro/_index.md | 2 +- .../servers-and-cloud-computing/java-gc-tuning/_index.md | 2 +- .../servers-and-cloud-computing/java-on-axion/_index.md | 2 +- .../servers-and-cloud-computing/kubearchinspect/_index.md | 2 +- .../servers-and-cloud-computing/libhugetlbfs/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/lse/_index.md | 2 +- .../servers-and-cloud-computing/mariadb/_index.md | 2 +- .../servers-and-cloud-computing/memcached/_index.md | 2 +- .../servers-and-cloud-computing/migration/_index.md | 2 +- .../servers-and-cloud-computing/ml-perf/_index.md | 2 +- .../servers-and-cloud-computing/mongodb/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/mpi/_index.md | 2 +- .../servers-and-cloud-computing/mysql_tune/_index.md | 2 +- .../servers-and-cloud-computing/nginx_tune/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/pac/_index.md | 2 +- .../servers-and-cloud-computing/postgresql_tune/_index.md | 2 +- .../servers-and-cloud-computing/processwatch/_index.md | 2 +- .../profiling-for-neoverse/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/ran/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/redis/_index.md | 2 +- .../servers-and-cloud-computing/redis_cache/_index.md | 2 +- .../servers-and-cloud-computing/redis_tune/_index.md | 2 +- .../servers-and-cloud-computing/refinfra-debug/_index.md | 2 +- .../servers-and-cloud-computing/refinfra-quick-start/_index.md | 2 +- .../servers-and-cloud-computing/rme-cca-basics/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/snappy/_index.md | 2 +- .../learning-paths/servers-and-cloud-computing/sve/_index.md | 2 +- .../servers-and-cloud-computing/sysreport/_index.md | 2 +- .../servers-and-cloud-computing/top-down-n1/_index.md | 2 +- .../triggering-pmu-events-2/_index.md | 2 +- .../servers-and-cloud-computing/triggering-pmu-events/_index.md | 2 +- 64 files changed, 64 insertions(+), 64 deletions(-) diff --git a/content/learning-paths/cross-platform/cca_rme/_index.md b/content/learning-paths/cross-platform/cca_rme/_index.md index 60fc409c69..2536dbc07f 100644 --- a/content/learning-paths/cross-platform/cca_rme/_index.md +++ b/content/learning-paths/cross-platform/cca_rme/_index.md @@ -34,7 +34,7 @@ tools_software_languages: - Arm Development Studio - RME - CCA - - Arm Total Performance + - Runbook ### Cross-platform metadata only diff --git a/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md b/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md index c6a85cd1b7..fdabfb3bd0 100644 --- a/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md +++ b/content/learning-paths/cross-platform/dynamic-memory-allocator/_index.md @@ -28,7 +28,7 @@ title: Write a Dynamic Memory Allocator tools_software_languages: - C - Coding -- Arm Total Performance +- Runbook further_reading: - resource: diff --git a/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md b/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md index 9aba8e7f1e..da6864147c 100644 --- a/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md +++ b/content/learning-paths/cross-platform/eigen-linear-algebra-on-arm/_index.md @@ -23,7 +23,7 @@ tools_software_languages: - GCC - Clang - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/function-multiversioning/_index.md b/content/learning-paths/cross-platform/function-multiversioning/_index.md index 8cf239834a..64aa1c845e 100644 --- a/content/learning-paths/cross-platform/function-multiversioning/_index.md +++ b/content/learning-paths/cross-platform/function-multiversioning/_index.md @@ -29,7 +29,7 @@ armips: - Neoverse tools_software_languages: - C/C++ - - Arm Total Performance + - Runbook operatingsystems: - Linux - Android diff --git a/content/learning-paths/cross-platform/github-arm-runners/_index.md b/content/learning-paths/cross-platform/github-arm-runners/_index.md index 1af7be171a..0b8559d2e8 100644 --- a/content/learning-paths/cross-platform/github-arm-runners/_index.md +++ b/content/learning-paths/cross-platform/github-arm-runners/_index.md @@ -25,7 +25,7 @@ operatingsystems: tools_software_languages: - GitHub - Docker - - Arm Total Performance + - Runbook ### Cross-platform metadata only shared_path: true shared_between: diff --git a/content/learning-paths/cross-platform/integer-vs-floats/_index.md b/content/learning-paths/cross-platform/integer-vs-floats/_index.md index 7bbccf8417..0a2530792c 100644 --- a/content/learning-paths/cross-platform/integer-vs-floats/_index.md +++ b/content/learning-paths/cross-platform/integer-vs-floats/_index.md @@ -24,7 +24,7 @@ tools_software_languages: - GCC - Clang - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/intrinsics/_index.md b/content/learning-paths/cross-platform/intrinsics/_index.md index 76b5198455..ecf582fcb3 100644 --- a/content/learning-paths/cross-platform/intrinsics/_index.md +++ b/content/learning-paths/cross-platform/intrinsics/_index.md @@ -33,7 +33,7 @@ tools_software_languages: - SVE - Coding - Intrinsics - - Arm Total Performance + - Runbook further_reading: - resource: diff --git a/content/learning-paths/cross-platform/kleidiai-explainer/_index.md b/content/learning-paths/cross-platform/kleidiai-explainer/_index.md index 6d85094458..ffc7303c3e 100644 --- a/content/learning-paths/cross-platform/kleidiai-explainer/_index.md +++ b/content/learning-paths/cross-platform/kleidiai-explainer/_index.md @@ -27,7 +27,7 @@ tools_software_languages: - GenAI - Coding - NEON - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/loop-reflowing/_index.md b/content/learning-paths/cross-platform/loop-reflowing/_index.md index 4d2db14bb9..291a818b9f 100644 --- a/content/learning-paths/cross-platform/loop-reflowing/_index.md +++ b/content/learning-paths/cross-platform/loop-reflowing/_index.md @@ -23,7 +23,7 @@ tools_software_languages: - GCC - Clang - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/matrix/_index.md b/content/learning-paths/cross-platform/matrix/_index.md index 6f2b044cce..5cefa6eb0a 100644 --- a/content/learning-paths/cross-platform/matrix/_index.md +++ b/content/learning-paths/cross-platform/matrix/_index.md @@ -33,7 +33,7 @@ tools_software_languages: - Clang - CMake - GoogleTest - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/mca-godbolt/_index.md b/content/learning-paths/cross-platform/mca-godbolt/_index.md index d46c3a97da..4aa889e061 100644 --- a/content/learning-paths/cross-platform/mca-godbolt/_index.md +++ b/content/learning-paths/cross-platform/mca-godbolt/_index.md @@ -25,7 +25,7 @@ armips: tools_software_languages: - assembly - llvm-mca - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/memory-latency/_index.md b/content/learning-paths/cross-platform/memory-latency/_index.md index daa6732b4e..af5b1cbb14 100644 --- a/content/learning-paths/cross-platform/memory-latency/_index.md +++ b/content/learning-paths/cross-platform/memory-latency/_index.md @@ -24,7 +24,7 @@ tools_software_languages: - GCC - Clang - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md b/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md index 38a5849641..223c436a3b 100644 --- a/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md +++ b/content/learning-paths/cross-platform/restrict-keyword-c99/_index.md @@ -25,7 +25,7 @@ tools_software_languages: - Clang - SVE2 - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/simd-info-demo/_index.md b/content/learning-paths/cross-platform/simd-info-demo/_index.md index 94e5f21d24..dd479f6f49 100644 --- a/content/learning-paths/cross-platform/simd-info-demo/_index.md +++ b/content/learning-paths/cross-platform/simd-info-demo/_index.md @@ -28,7 +28,7 @@ tools_software_languages: - Clang - Coding - Rust - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/simd-on-rust/_index.md b/content/learning-paths/cross-platform/simd-on-rust/_index.md index 260895b7ba..1c7f5fdf7b 100644 --- a/content/learning-paths/cross-platform/simd-on-rust/_index.md +++ b/content/learning-paths/cross-platform/simd-on-rust/_index.md @@ -24,7 +24,7 @@ tools_software_languages: - Clang - Coding - Rust - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/sme2/_index.md b/content/learning-paths/cross-platform/sme2/_index.md index deceae5ea9..f5776e35b1 100644 --- a/content/learning-paths/cross-platform/sme2/_index.md +++ b/content/learning-paths/cross-platform/sme2/_index.md @@ -32,7 +32,7 @@ armips: tools_software_languages: - C - Clang - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md b/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md index 733518e4f7..2533dd7d82 100644 --- a/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md +++ b/content/learning-paths/cross-platform/vectorization-friendly-data-layout/_index.md @@ -23,7 +23,7 @@ tools_software_languages: - GCC - Clang - Coding - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/embedded-and-microcontrollers/_index.md b/content/learning-paths/embedded-and-microcontrollers/_index.md index bbf99cef0c..f7577f6a53 100644 --- a/content/learning-paths/embedded-and-microcontrollers/_index.md +++ b/content/learning-paths/embedded-and-microcontrollers/_index.md @@ -34,7 +34,6 @@ tools_software_languages_filter: - Arm Compute Library: 1 - Arm Development Studio: 9 - Arm Fast Models: 4 -- Arm Total Performance: 6 - Arm Virtual Hardware: 11 - AVH: 1 - C: 1 @@ -78,6 +77,7 @@ tools_software_languages_filter: - Raspberry Pi: 5 - Remote.It: 1 - RTX: 2 +- Runbook: 4 - Slicing software: 1 - STM32: 2 - TensorFlow: 3 diff --git a/content/learning-paths/laptops-and-desktops/_index.md b/content/learning-paths/laptops-and-desktops/_index.md index b4432aa730..00f7847294 100644 --- a/content/learning-paths/laptops-and-desktops/_index.md +++ b/content/learning-paths/laptops-and-desktops/_index.md @@ -27,7 +27,6 @@ tools_software_languages_filter: - Alacritty: 1 - Android Studio: 1 - Arm Development Studio: 2 -- Arm Total Performance: 16 - Arm64EC: 1 - assembly: 1 - C: 3 @@ -64,6 +63,7 @@ tools_software_languages_filter: - Qt: 2 - Remote.It: 1 - RME: 1 +- Runbook: 16 - Rust: 2 - SVE: 1 - SVE2: 1 diff --git a/content/learning-paths/mobile-graphics-and-gaming/_index.md b/content/learning-paths/mobile-graphics-and-gaming/_index.md index 6fc69273f2..17cf354fa2 100644 --- a/content/learning-paths/mobile-graphics-and-gaming/_index.md +++ b/content/learning-paths/mobile-graphics-and-gaming/_index.md @@ -31,7 +31,6 @@ tools_software_languages_filter: - Arm Development Studio: 1 - Arm Mobile Studio: 1 - Arm Performance Studio: 2 -- Arm Total Performance: 14 - assembly: 1 - Bazel: 1 - C: 1 @@ -62,6 +61,7 @@ tools_software_languages_filter: - Python: 2 - QEMU: 1 - RME: 1 +- Runbook: 14 - Rust: 2 - SDDiskTool: 1 - SVE2: 1 diff --git a/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md b/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md index d7b04c357d..55ec4b13a1 100644 --- a/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/PMUv3_plugin_learning_path/_index.md @@ -27,7 +27,7 @@ tools_software_languages: - C - C++ - Python - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/_index.md b/content/learning-paths/servers-and-cloud-computing/_index.md index e9f1192e57..9e0247d6d8 100644 --- a/content/learning-paths/servers-and-cloud-computing/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/_index.md @@ -37,7 +37,6 @@ tools_software_languages_filter: - Android Studio: 1 - Ansible: 2 - Arm Development Studio: 4 -- Arm Total Performance: 60 - armclang: 1 - armie: 1 - ArmRAL: 1 @@ -118,6 +117,7 @@ tools_software_languages_filter: - Redis: 3 - Remote.It: 2 - RME: 4 +- Runbook: 59 - Rust: 2 - snappy: 1 - Snort3: 1 diff --git a/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md b/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md index 1e553076b6..74a618d598 100644 --- a/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/arm_pmu/_index.md @@ -25,7 +25,7 @@ tools_software_languages: - perf - Assembly - GCC - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/bolt/_index.md b/content/learning-paths/servers-and-cloud-computing/bolt/_index.md index 2a3010bf72..f22cef3cdb 100644 --- a/content/learning-paths/servers-and-cloud-computing/bolt/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/bolt/_index.md @@ -25,7 +25,7 @@ armips: tools_software_languages: - BOLT - perf - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md index 8564a3722d..b9ed716d62 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-container/_index.md @@ -29,7 +29,7 @@ tools_software_languages: - RME - CCA - Docker - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md index ef5a76d64b..680f538927 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-essentials/_index.md @@ -34,7 +34,7 @@ tools_software_languages: - CCA - Docker - Veraison - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md b/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md index a06bb7a02e..16b342d0d9 100644 --- a/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/cca-veraison/_index.md @@ -29,7 +29,7 @@ operatingsystems: - Linux tools_software_languages: - CCA - - Arm Total Performance + - Runbook diff --git a/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md index e15338c65e..acb8172d60 100644 --- a/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/envoy_tune/_index.md @@ -24,7 +24,7 @@ armips: - Neoverse tools_software_languages: - Envoy - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md b/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md index 4bb8338edf..bab3f5fdc3 100644 --- a/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/exploiting-stack-buffer-overflow-aarch64/_index.md @@ -29,7 +29,7 @@ tools_software_languages: - Clang - C - Assembly - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/flink/_index.md b/content/learning-paths/servers-and-cloud-computing/flink/_index.md index 2c6edb91e1..9822df5ab5 100644 --- a/content/learning-paths/servers-and-cloud-computing/flink/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/flink/_index.md @@ -34,7 +34,7 @@ tools_software_languages: - Flink - Java - Nexmark -- Arm Total Performance +- Runbook diff --git a/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md b/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md index 4018d9c132..bfb1d90534 100644 --- a/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/geekbench/_index.md @@ -29,7 +29,7 @@ test_status: - passed tools_software_languages: - Geekbench - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md b/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md index 29f2c9d9e7..40d04d4d5b 100644 --- a/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/gke-multi-arch/_index.md @@ -28,7 +28,7 @@ armips: tools_software_languages: - Kubernetes - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md b/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md index b953ef0410..f7e72bddab 100644 --- a/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/glibc-with-lse/_index.md @@ -34,7 +34,7 @@ tools_software_languages: - Glibc - LSE - MongoDB -- Arm Total Performance +- Runbook diff --git a/content/learning-paths/servers-and-cloud-computing/intro/_index.md b/content/learning-paths/servers-and-cloud-computing/intro/_index.md index 841dc401bb..0138f91419 100644 --- a/content/learning-paths/servers-and-cloud-computing/intro/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/intro/_index.md @@ -22,7 +22,7 @@ armips: operatingsystems: - Linux tools_software_languages: - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md b/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md index 2182eb5af2..1aedbc7ca3 100644 --- a/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/java-gc-tuning/_index.md @@ -24,7 +24,7 @@ armips: - Neoverse tools_software_languages: - Java - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md b/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md index a499cfff70..565a239f8f 100644 --- a/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/java-on-axion/_index.md @@ -24,7 +24,7 @@ armips: tools_software_languages: - Java - Google Axion - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md b/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md index 701fb7f593..af97db7fd3 100644 --- a/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/kubearchinspect/_index.md @@ -23,7 +23,7 @@ armips: - Neoverse tools_software_languages: - Kubernetes - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md b/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md index 0dd7f53af6..ea87140d77 100644 --- a/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/libhugetlbfs/_index.md @@ -24,7 +24,7 @@ operatingsystems: tools_software_languages: - MySQL - GCC - - Arm Total Performance + - Runbook test_images: diff --git a/content/learning-paths/servers-and-cloud-computing/lse/_index.md b/content/learning-paths/servers-and-cloud-computing/lse/_index.md index dcb51d5316..c1adae223a 100644 --- a/content/learning-paths/servers-and-cloud-computing/lse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/lse/_index.md @@ -23,7 +23,7 @@ operatingsystems: - Linux tools_software_languages: - GCC - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md b/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md index 19096a5f7b..060fe483b0 100644 --- a/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mariadb/_index.md @@ -28,7 +28,7 @@ tools_software_languages: - Ansible - MariaDB - Docker - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/memcached/_index.md b/content/learning-paths/servers-and-cloud-computing/memcached/_index.md index 6f5f8d03c0..019ff66b14 100644 --- a/content/learning-paths/servers-and-cloud-computing/memcached/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/memcached/_index.md @@ -23,7 +23,7 @@ test_status: title: Run memcached on Arm servers and measure its performance tools_software_languages: - Memcached -- Arm Total Performance +- Runbook further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/migration/_index.md b/content/learning-paths/servers-and-cloud-computing/migration/_index.md index 06508973a0..c5bd50dd1a 100644 --- a/content/learning-paths/servers-and-cloud-computing/migration/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/migration/_index.md @@ -28,7 +28,7 @@ tools_software_languages: - Neon - SVE - Go - - Arm Total Performance + - Runbook further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md b/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md index 774f16efc8..fef4ecf7e0 100644 --- a/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/ml-perf/_index.md @@ -25,7 +25,7 @@ test_status: title: Measure Machine Learning Inference Performance on Arm servers tools_software_languages: - TensorFlow -- Arm Total Performance +- Runbook further_reading: - resource: title: MLPerf Inference Suite Source repo diff --git a/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md b/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md index 6f203624e1..02b4f03acd 100644 --- a/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mongodb/_index.md @@ -27,7 +27,7 @@ test_maintenance: false tools_software_languages: - MongoDB - GCC -- Arm Total Performance +- Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/mpi/_index.md b/content/learning-paths/servers-and-cloud-computing/mpi/_index.md index cc4789adae..943ce437d9 100644 --- a/content/learning-paths/servers-and-cloud-computing/mpi/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mpi/_index.md @@ -31,7 +31,7 @@ tools_software_languages: - Linaro Forge - gdb - mpi - - Arm Total Performance + - Runbook diff --git a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md index 7587afbd0e..8a901a85f3 100644 --- a/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/mysql_tune/_index.md @@ -24,7 +24,7 @@ tools_software_languages: - SQL - MySQL - InnoDB - - Arm Total Performance + - Runbook test_images: diff --git a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md index ca2f454168..2c65a7d8ba 100644 --- a/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/nginx_tune/_index.md @@ -25,7 +25,7 @@ armips: - Neoverse tools_software_languages: - Nginx - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/pac/_index.md b/content/learning-paths/servers-and-cloud-computing/pac/_index.md index 3c8e3cb86b..b593845f51 100644 --- a/content/learning-paths/servers-and-cloud-computing/pac/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/pac/_index.md @@ -26,7 +26,7 @@ operatingsystems: - Linux tools_software_languages: - Coding - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md index 2bcc5ff44c..d4fb21e669 100644 --- a/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/postgresql_tune/_index.md @@ -30,7 +30,7 @@ tools_software_languages: - SQL - PostgreSQL - HammerDB - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md b/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md index fe789a40bd..224d9cc524 100644 --- a/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/processwatch/_index.md @@ -26,7 +26,7 @@ tools_software_languages: - libbpf - Capstone - C/C++ - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md b/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md index 50f586953a..5b9969ac69 100644 --- a/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/profiling-for-neoverse/_index.md @@ -22,7 +22,7 @@ armips: - Neoverse tools_software_languages: - Streamline CLI - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/ran/_index.md b/content/learning-paths/servers-and-cloud-computing/ran/_index.md index 2642f2e767..96d17c4dfa 100644 --- a/content/learning-paths/servers-and-cloud-computing/ran/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/ran/_index.md @@ -26,7 +26,7 @@ tools_software_languages: - ArmRAL - 5G - GCC -- Arm Total Performance +- Runbook further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/redis/_index.md b/content/learning-paths/servers-and-cloud-computing/redis/_index.md index d6d55da21a..2d9e6ec935 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis/_index.md @@ -25,7 +25,7 @@ operatingsystems: - Linux tools_software_languages: - Redis - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md b/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md index 1ff6bfbd78..0c390a043b 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis_cache/_index.md @@ -29,7 +29,7 @@ tools_software_languages: - Redis - SQL - MySQL - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md b/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md index fe7b2a6ec7..a811b2a8ef 100644 --- a/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/redis_tune/_index.md @@ -24,7 +24,7 @@ armips: - Neoverse tools_software_languages: - Redis - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md b/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md index 58cfed5bed..4b695cc6e3 100644 --- a/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/refinfra-debug/_index.md @@ -25,7 +25,7 @@ armips: - Neoverse tools_software_languages: - Arm Development Studio - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md b/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md index 8eff32a401..53598fecaa 100644 --- a/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/refinfra-quick-start/_index.md @@ -28,7 +28,7 @@ tools_software_languages: - Docker - FVP - Arm Development Studio - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md b/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md index 8bd9c4553b..78ef4179a6 100644 --- a/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/rme-cca-basics/_index.md @@ -28,7 +28,7 @@ tools_software_languages: - FVP - RME - CCA - - Arm Total Performance + - Runbook further_reading: diff --git a/content/learning-paths/servers-and-cloud-computing/snappy/_index.md b/content/learning-paths/servers-and-cloud-computing/snappy/_index.md index 731e8642dc..e17321a6b3 100644 --- a/content/learning-paths/servers-and-cloud-computing/snappy/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/snappy/_index.md @@ -24,7 +24,7 @@ test_status: title: Measure performance of compression libraries on Arm servers tools_software_languages: - snappy -- Arm Total Performance +- Runbook further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/sve/_index.md b/content/learning-paths/servers-and-cloud-computing/sve/_index.md index 606d13bc63..5fb8a7512c 100644 --- a/content/learning-paths/servers-and-cloud-computing/sve/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/sve/_index.md @@ -31,7 +31,7 @@ tools_software_languages: - armie - GCC - armclang - - Arm Total Performance + - Runbook further_reading: - resource: diff --git a/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md b/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md index 990755eca5..0dcc72db18 100644 --- a/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/sysreport/_index.md @@ -23,7 +23,7 @@ armips: - Neoverse tools_software_languages: - Python - - Arm Total Performance + - Runbook operatingsystems: - Linux diff --git a/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md b/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md index 2101930c3a..9edf15ab66 100644 --- a/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/top-down-n1/_index.md @@ -24,7 +24,7 @@ armips: tools_software_languages: - perf - Telemetry - - Arm Total Performance + - Runbook operatingsystems: diff --git a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md index 9d3ba4b693..af5b873cd0 100644 --- a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events-2/_index.md @@ -25,7 +25,7 @@ armips: tools_software_languages: - C - Assembly - - Arm Total Performance + - Runbook diff --git a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md index 4094544ca5..2decd7e628 100644 --- a/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/triggering-pmu-events/_index.md @@ -26,7 +26,7 @@ armips: tools_software_languages: - C - Assembly - - Arm Total Performance + - Runbook From c6cc80252bc9d3cc4b4b70210c0d24e63f3f6669 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Wed, 19 Feb 2025 14:37:03 -0500 Subject: [PATCH 54/57] Update hugo version used in deploy.yml --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e8f320a3cc..30d9b06151 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,7 +23,7 @@ on: required: true env: - HUGO_VERSION: 0.130.0 + HUGO_VERSION: 0.144.0 jobs: build_and_deploy: From c3c2e167d19c4bb71f510c830c9c96970fa1fed0 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Wed, 19 Feb 2025 14:46:47 -0500 Subject: [PATCH 55/57] Update deploy.yml --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 30d9b06151..e8f320a3cc 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -23,7 +23,7 @@ on: required: true env: - HUGO_VERSION: 0.144.0 + HUGO_VERSION: 0.130.0 jobs: build_and_deploy: From 5b35f39f57e4db86d815fbc1ee04918a6054ec77 Mon Sep 17 00:00:00 2001 From: Arnaud de Grandmaison Date: Thu, 20 Feb 2025 09:54:34 +0100 Subject: [PATCH 56/57] [SME2] Directory renaming to cope with attribute mixe with the sme directory. --- .../1-get-started.md | 0 .../2-check-your-environment.md | 0 .../3-vanilla-matmul.md | 0 .../4-outer-product.md | 0 .../5-SME2-matmul-asm.md | 0 .../6-SME2-matmul-intr.md | 0 .../7-debugging.md | 0 .../8-going-further.md | 0 .../VSCode.png | Bin .../_index.md | 0 .../_next-steps.md | 0 .../_review.md | 0 .../matmul.png | Bin .../outer_product.png | Bin .../overview.md | 0 15 files changed, 0 insertions(+), 0 deletions(-) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/1-get-started.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/2-check-your-environment.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/3-vanilla-matmul.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/4-outer-product.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/5-SME2-matmul-asm.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/6-SME2-matmul-intr.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/7-debugging.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/8-going-further.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/VSCode.png (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/_index.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/_next-steps.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/_review.md (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/matmul.png (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/outer_product.png (100%) rename content/learning-paths/cross-platform/{sme2 => multiplying-matrices-with-sme2}/overview.md (100%) diff --git a/content/learning-paths/cross-platform/sme2/1-get-started.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/1-get-started.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/1-get-started.md diff --git a/content/learning-paths/cross-platform/sme2/2-check-your-environment.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/2-check-your-environment.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/2-check-your-environment.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/2-check-your-environment.md diff --git a/content/learning-paths/cross-platform/sme2/3-vanilla-matmul.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/3-vanilla-matmul.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/3-vanilla-matmul.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/3-vanilla-matmul.md diff --git a/content/learning-paths/cross-platform/sme2/4-outer-product.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/4-outer-product.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/4-outer-product.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/4-outer-product.md diff --git a/content/learning-paths/cross-platform/sme2/5-SME2-matmul-asm.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/5-SME2-matmul-asm.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/5-SME2-matmul-asm.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/5-SME2-matmul-asm.md diff --git a/content/learning-paths/cross-platform/sme2/6-SME2-matmul-intr.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/6-SME2-matmul-intr.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/6-SME2-matmul-intr.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/6-SME2-matmul-intr.md diff --git a/content/learning-paths/cross-platform/sme2/7-debugging.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/7-debugging.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/7-debugging.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/7-debugging.md diff --git a/content/learning-paths/cross-platform/sme2/8-going-further.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/8-going-further.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/8-going-further.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/8-going-further.md diff --git a/content/learning-paths/cross-platform/sme2/VSCode.png b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/VSCode.png similarity index 100% rename from content/learning-paths/cross-platform/sme2/VSCode.png rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/VSCode.png diff --git a/content/learning-paths/cross-platform/sme2/_index.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_index.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/_index.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_index.md diff --git a/content/learning-paths/cross-platform/sme2/_next-steps.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_next-steps.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/_next-steps.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_next-steps.md diff --git a/content/learning-paths/cross-platform/sme2/_review.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_review.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/_review.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/_review.md diff --git a/content/learning-paths/cross-platform/sme2/matmul.png b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/matmul.png similarity index 100% rename from content/learning-paths/cross-platform/sme2/matmul.png rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/matmul.png diff --git a/content/learning-paths/cross-platform/sme2/outer_product.png b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/outer_product.png similarity index 100% rename from content/learning-paths/cross-platform/sme2/outer_product.png rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/outer_product.png diff --git a/content/learning-paths/cross-platform/sme2/overview.md b/content/learning-paths/cross-platform/multiplying-matrices-with-sme2/overview.md similarity index 100% rename from content/learning-paths/cross-platform/sme2/overview.md rename to content/learning-paths/cross-platform/multiplying-matrices-with-sme2/overview.md From 7f0f4eee519badb3453f1756f731ead2a2b4a969 Mon Sep 17 00:00:00 2001 From: pareenaverma Date: Thu, 20 Feb 2025 09:18:48 -0500 Subject: [PATCH 57/57] Update _index.md In draft for editorial review --- .../servers-and-cloud-computing/copilot-extension/_index.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md index e7b54be90a..bc787d2929 100644 --- a/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md +++ b/content/learning-paths/servers-and-cloud-computing/copilot-extension/_index.md @@ -1,6 +1,10 @@ --- title: Create a RAG-based GitHub Copilot Extension in Python +draft: true +cascade: + draft: true + minutes_to_complete: 30 who_is_this_for: This is an advanced topic for software developers who want to learn how to build a Retrieval Augmented Generation (RAG) based GitHub Copilot Extension.