mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
Compare commits
32
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
40a2dd5cd0 | ||
|
|
7e9c043c4c | ||
|
|
d7e8d2206d | ||
|
|
d7027fc1f9 | ||
|
|
df0bd4da82 | ||
|
|
ed4ff188fc | ||
|
|
0f483fa968 | ||
|
|
5e830f4dc9 | ||
|
|
1acd242550 | ||
|
|
3f77c555cf | ||
|
|
cd512da731 | ||
|
|
76b2b1bf39 | ||
|
|
4c1b9efa8c | ||
|
|
e7937947d9 | ||
|
|
3d5421edc1 | ||
|
|
8b0405de1b | ||
|
|
df29af611c | ||
|
|
c79f886dc3 | ||
|
|
c9e2a490be | ||
|
|
12ce099165 | ||
|
|
8e1998ddcb | ||
|
|
4149f24791 | ||
|
|
3753d938f5 | ||
|
|
60cc5ee4e4 | ||
|
|
dd29f9aa65 | ||
|
|
a5f4e0078e | ||
|
|
3c0c12cd46 | ||
|
|
8dde9ef627 | ||
|
|
93cbf6b3f0 | ||
|
|
9a56bc9f16 | ||
|
|
cea83bd8d5 | ||
|
|
7ae73a68d6 |
@@ -20,7 +20,10 @@ ignorePatterns:
|
|||||||
- pattern: "https://your-resource.openai.azure.com/"
|
- pattern: "https://your-resource.openai.azure.com/"
|
||||||
- pattern: "http://host.docker.internal"
|
- pattern: "http://host.docker.internal"
|
||||||
- pattern: "https://openai.github.io/openai-agents-js/openai/agents/classes/"
|
- pattern: "https://openai.github.io/openai-agents-js/openai/agents/classes/"
|
||||||
- pattern: "https:\/\/dotnet.microsoft.com\/download"
|
# dotnet.microsoft.com bot-blocks CI link checkers with intermittent 403s on any
|
||||||
|
# path (including localized variants like /en-us/download/...), so ignore the
|
||||||
|
# whole domain rather than just /download.
|
||||||
|
- pattern: "https:\/\/dotnet.microsoft.com"
|
||||||
- pattern: "https://github.com/Rel1cx/eslint-react"
|
- pattern: "https://github.com/Rel1cx/eslint-react"
|
||||||
# excludedDirs:
|
# excludedDirs:
|
||||||
# Folders which include links to localhost, since it's not ignored with regular expressions
|
# Folders which include links to localhost, since it's not ignored with regular expressions
|
||||||
|
|||||||
@@ -1,23 +1,43 @@
|
|||||||
### Motivation and Context
|
### Motivation & Context
|
||||||
|
|
||||||
<!-- Thank you for your contribution to the Agent Framework repo!
|
<!-- Thank you for your contribution to the Agent Framework repo!
|
||||||
Please help reviewers and future users, providing the following information:
|
Please help reviewers and future users, providing the following information:
|
||||||
1. Why is this change required?
|
1. Why is this change required?
|
||||||
2. What problem does it solve?
|
2. What problem does it solve?
|
||||||
3. What scenario does it contribute to?
|
3. What scenario does it contribute to?
|
||||||
4. If it fixes an open issue, please link to the issue here.
|
4. If it fixes an open issue, please link to the issue below.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
### Description
|
### Description & Review Guide
|
||||||
|
|
||||||
<!-- Describe your changes, the overall approach, the underlying design.
|
<!-- Describe your changes, the overall approach, the underlying design.
|
||||||
|
Highlight what you want the reviewers to focus on.
|
||||||
These notes will help understanding how your code works. Thanks! -->
|
These notes will help understanding how your code works. Thanks! -->
|
||||||
|
|
||||||
|
- **What are the major changes?**
|
||||||
|
- **What is the impact of these changes?**
|
||||||
|
- **What do you want reviewers to focus on?**
|
||||||
|
<!-- NOTE FOR AUTOMATED/AI REVIEWERS: the "What do you want reviewers to focus on?"
|
||||||
|
item above is intended for human reviewers only. Automated/AI reviewers should
|
||||||
|
ignore it and review the entire change rather than narrowing scope to it. -->
|
||||||
|
|
||||||
|
|
||||||
|
### Related Issue
|
||||||
|
|
||||||
|
<!-- Which issue does this PR fix? Link it using a GitHub closing keyword so it is
|
||||||
|
closed automatically when this PR is merged, e.g. "Fixes #123" or "Closes #123".
|
||||||
|
PRs that are not linked to an issue may be closed, no matter how valid the change is.
|
||||||
|
Also check whether an open PR already exists for this issue; if so,
|
||||||
|
explain how this PR is different. -->
|
||||||
|
|
||||||
|
Fixes #
|
||||||
|
|
||||||
### Contribution Checklist
|
### Contribution Checklist
|
||||||
|
|
||||||
<!-- Before submitting this PR, please make sure: -->
|
<!-- Before submitting this PR, please make sure: -->
|
||||||
|
|
||||||
- [ ] The code builds clean without any errors or warnings
|
- [ ] The code builds clean without any errors or warnings
|
||||||
- [ ] The PR follows the [Contribution Guidelines](https://github.com/microsoft/agent-framework/blob/main/CONTRIBUTING.md)
|
|
||||||
- [ ] All unit tests pass, and I have added new tests where possible
|
- [ ] All unit tests pass, and I have added new tests where possible
|
||||||
- [ ] **Is this a breaking change?** If yes, add "[BREAKING]" prefix to the title of the PR.
|
- [ ] The PR follows the [Contribution Guidelines](https://github.com/microsoft/agent-framework/blob/main/CONTRIBUTING.md)
|
||||||
|
- [ ] This PR is linked to an issue and there is no other open PR for this issue (see Related Issue above).
|
||||||
|
- [x] **This is not a breaking change.** If it _is_ a breaking change, add the `breaking change` label (or add "[BREAKING]" to the title prefix, before or after any language prefix) — a workflow keeps the label and title prefix in sync automatically.
|
||||||
|
|||||||
@@ -0,0 +1,253 @@
|
|||||||
|
// Copyright (c) Microsoft. All rights reserved.
|
||||||
|
|
||||||
|
const BREAKING_CHANGE_LABEL = 'breaking change';
|
||||||
|
const BREAKING_PREFIX = '[BREAKING]';
|
||||||
|
|
||||||
|
const DEFAULT_PREFIX_LABELS = Object.freeze({
|
||||||
|
python: 'Python',
|
||||||
|
'.NET': '.NET',
|
||||||
|
});
|
||||||
|
|
||||||
|
const DEFAULT_BRACKET_PREFIX_LABELS = Object.freeze({
|
||||||
|
[BREAKING_CHANGE_LABEL]: BREAKING_PREFIX,
|
||||||
|
});
|
||||||
|
|
||||||
|
function escapeRegExp(value) {
|
||||||
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
||||||
|
}
|
||||||
|
|
||||||
|
function getMatchingValueByKey(valuesByKey, keyToFind) {
|
||||||
|
const matchingKey = Object.keys(valuesByKey).find((key) => key.toLowerCase() === keyToFind.toLowerCase());
|
||||||
|
return matchingKey === undefined ? null : valuesByKey[matchingKey];
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPrefixPattern(prefixes) {
|
||||||
|
return prefixes.map(escapeRegExp).join('|');
|
||||||
|
}
|
||||||
|
|
||||||
|
function canonicalizePrefix(prefix, prefixes) {
|
||||||
|
return prefixes.find((knownPrefix) => knownPrefix.toLowerCase() === prefix.toLowerCase()) ?? prefix;
|
||||||
|
}
|
||||||
|
|
||||||
|
function normalizeLeadingBracketPrefix(title, bracketPrefixes) {
|
||||||
|
const bracketPattern = getPrefixPattern(bracketPrefixes);
|
||||||
|
if (!bracketPattern) {
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
const leadingBracketPrefix = new RegExp(`^(${bracketPattern})(?=\\s|$)`, 'i');
|
||||||
|
return title.replace(
|
||||||
|
leadingBracketPrefix,
|
||||||
|
(bracketPrefix) => canonicalizePrefix(bracketPrefix, bracketPrefixes),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
function parseLeadingTitlePrefix(title, titlePrefixes) {
|
||||||
|
const titlePrefixPattern = getPrefixPattern(titlePrefixes);
|
||||||
|
if (!titlePrefixPattern) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const match = title.match(new RegExp(`^(${titlePrefixPattern}):\\s*`, 'i'));
|
||||||
|
if (!match) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
prefix: canonicalizePrefix(match[1], titlePrefixes),
|
||||||
|
rest: title.slice(match[0].length).trimStart(),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeBracketPrefixToken(title, bracketPrefix) {
|
||||||
|
const bracketPrefixPattern = escapeRegExp(bracketPrefix);
|
||||||
|
return title
|
||||||
|
.replace(new RegExp(`(^|\\s+)${bracketPrefixPattern}(?=\\s|$)`, 'ig'), '$1')
|
||||||
|
.replace(/\s{2,}/g, ' ')
|
||||||
|
.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTitlePrefix(title, prefix, bracketPrefixes = Object.values(DEFAULT_BRACKET_PREFIX_LABELS)) {
|
||||||
|
const bracketPattern = getPrefixPattern(bracketPrefixes);
|
||||||
|
const prefixPattern = escapeRegExp(prefix);
|
||||||
|
|
||||||
|
if (bracketPattern) {
|
||||||
|
const bracketThenTitlePrefix = new RegExp(`^(${bracketPattern})(\\s+)(${prefixPattern})(?=:)`, 'i');
|
||||||
|
if (bracketThenTitlePrefix.test(title)) {
|
||||||
|
return title.replace(
|
||||||
|
bracketThenTitlePrefix,
|
||||||
|
(match, bracketPrefix, spacing) => `${canonicalizePrefix(bracketPrefix, bracketPrefixes)}${spacing}${prefix}`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
title = normalizeLeadingBracketPrefix(title, bracketPrefixes);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!title.startsWith(`${prefix}: `)) {
|
||||||
|
const existingTitlePrefix = new RegExp(`^${prefixPattern}:\\s*`, 'i');
|
||||||
|
if (existingTitlePrefix.test(title)) {
|
||||||
|
return title.replace(existingTitlePrefix, `${prefix}: `);
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${prefix}: ${title}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
return title;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasBracketPrefix(title, bracketPrefix, titlePrefixes = Object.values(DEFAULT_PREFIX_LABELS)) {
|
||||||
|
const bracketPrefixPattern = escapeRegExp(bracketPrefix);
|
||||||
|
const leadingBracketPrefix = new RegExp(`^${bracketPrefixPattern}(?=\\s|$)`, 'i');
|
||||||
|
if (leadingBracketPrefix.test(title)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
const leadingTitlePrefix = parseLeadingTitlePrefix(title, titlePrefixes);
|
||||||
|
if (!leadingTitlePrefix) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return leadingBracketPrefix.test(leadingTitlePrefix.rest);
|
||||||
|
}
|
||||||
|
|
||||||
|
function addBracketPrefix(title, bracketPrefix, titlePrefixes = Object.values(DEFAULT_PREFIX_LABELS)) {
|
||||||
|
const bracketPrefixPattern = escapeRegExp(bracketPrefix);
|
||||||
|
const leadingBracketPrefix = new RegExp(`^${bracketPrefixPattern}(?=\\s|$)`, 'i');
|
||||||
|
if (leadingBracketPrefix.test(title)) {
|
||||||
|
return title.replace(leadingBracketPrefix, bracketPrefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
const leadingTitlePrefix = parseLeadingTitlePrefix(title, titlePrefixes);
|
||||||
|
if (leadingTitlePrefix) {
|
||||||
|
if (leadingBracketPrefix.test(leadingTitlePrefix.rest)) {
|
||||||
|
const normalizedRest = leadingTitlePrefix.rest.replace(leadingBracketPrefix, bracketPrefix);
|
||||||
|
return `${leadingTitlePrefix.prefix}: ${normalizedRest}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const titleWithoutBracketPrefix = removeBracketPrefixToken(leadingTitlePrefix.rest, bracketPrefix);
|
||||||
|
return `${leadingTitlePrefix.prefix}: ${bracketPrefix}`
|
||||||
|
+ (titleWithoutBracketPrefix ? ` ${titleWithoutBracketPrefix}` : '');
|
||||||
|
}
|
||||||
|
|
||||||
|
const titleWithoutBracketPrefix = removeBracketPrefixToken(title, bracketPrefix);
|
||||||
|
return `${bracketPrefix}${titleWithoutBracketPrefix ? ` ${titleWithoutBracketPrefix}` : ''}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function hasLabel(labels, labelName) {
|
||||||
|
return labels.some((label) => label.toLowerCase() === labelName.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
function getCurrentTitle(context) {
|
||||||
|
switch (context.eventName) {
|
||||||
|
case 'issues':
|
||||||
|
return context.payload.issue.title;
|
||||||
|
case 'pull_request_target':
|
||||||
|
return context.payload.pull_request.title;
|
||||||
|
default:
|
||||||
|
throw new Error(`Unrecognized eventName: ${context.eventName}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function updateTitleForAddedLabel({
|
||||||
|
github,
|
||||||
|
context,
|
||||||
|
core,
|
||||||
|
prefixLabels = DEFAULT_PREFIX_LABELS,
|
||||||
|
bracketPrefixLabels = DEFAULT_BRACKET_PREFIX_LABELS,
|
||||||
|
}) {
|
||||||
|
const labelAdded = context.payload.label?.name;
|
||||||
|
if (!labelAdded) {
|
||||||
|
throw new Error('This script must be run from a labeled event.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const currentTitle = getCurrentTitle(context);
|
||||||
|
let newTitle = null;
|
||||||
|
|
||||||
|
const titlePrefix = getMatchingValueByKey(prefixLabels, labelAdded);
|
||||||
|
if (titlePrefix !== null) {
|
||||||
|
newTitle = addTitlePrefix(currentTitle, titlePrefix, Object.values(bracketPrefixLabels));
|
||||||
|
}
|
||||||
|
|
||||||
|
const bracketPrefix = getMatchingValueByKey(bracketPrefixLabels, labelAdded);
|
||||||
|
if (bracketPrefix !== null) {
|
||||||
|
newTitle = addBracketPrefix(currentTitle, bracketPrefix, Object.values(prefixLabels));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newTitle === null) {
|
||||||
|
core.info(`No title prefix configured for label "${labelAdded}".`);
|
||||||
|
return { updated: false, newTitle: currentTitle };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newTitle === currentTitle) {
|
||||||
|
core.info(`Title already includes the prefix for label "${labelAdded}".`);
|
||||||
|
return { updated: false, newTitle };
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (context.eventName) {
|
||||||
|
case 'issues':
|
||||||
|
await github.rest.issues.update({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
title: newTitle,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'pull_request_target':
|
||||||
|
await github.rest.pulls.update({
|
||||||
|
pull_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
title: newTitle,
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new Error(`Unrecognized eventName: ${context.eventName}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
return { updated: true, newTitle };
|
||||||
|
}
|
||||||
|
|
||||||
|
async function syncBreakingChangeLabelFromTitle({
|
||||||
|
github,
|
||||||
|
context,
|
||||||
|
core,
|
||||||
|
labelName = BREAKING_CHANGE_LABEL,
|
||||||
|
bracketPrefix = BREAKING_PREFIX,
|
||||||
|
titlePrefixes = Object.values(DEFAULT_PREFIX_LABELS),
|
||||||
|
}) {
|
||||||
|
const pullRequest = context.payload.pull_request;
|
||||||
|
if (!pullRequest) {
|
||||||
|
throw new Error('This script must be run from a pull_request_target event.');
|
||||||
|
}
|
||||||
|
|
||||||
|
const title = pullRequest.title || '';
|
||||||
|
if (!hasBracketPrefix(title, bracketPrefix, titlePrefixes)) {
|
||||||
|
core.info(`Title does not include ${bracketPrefix} in the title prefix.`);
|
||||||
|
return { added: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
const labels = pullRequest.labels?.map((label) => label.name).filter(Boolean) ?? [];
|
||||||
|
if (hasLabel(labels, labelName)) {
|
||||||
|
core.info(`PR already has the "${labelName}" label.`);
|
||||||
|
return { added: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
issue_number: context.issue.number,
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
labels: [labelName],
|
||||||
|
});
|
||||||
|
|
||||||
|
return { added: true };
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
addBracketPrefix,
|
||||||
|
addTitlePrefix,
|
||||||
|
hasBracketPrefix,
|
||||||
|
syncBreakingChangeLabelFromTitle,
|
||||||
|
updateTitleForAddedLabel,
|
||||||
|
};
|
||||||
@@ -0,0 +1,116 @@
|
|||||||
|
---
|
||||||
|
name: pull-requests
|
||||||
|
description: >
|
||||||
|
Guidance for creating pull requests and handling PR review comments in the
|
||||||
|
Agent Framework repository. Use this when writing a PR description (filling out
|
||||||
|
the PR template) or when responding to and resolving review comments on an
|
||||||
|
existing PR.
|
||||||
|
---
|
||||||
|
|
||||||
|
# Pull Request Workflow
|
||||||
|
|
||||||
|
This skill covers two tasks: (1) writing a high-quality PR description, and
|
||||||
|
(2) handling review comments on an existing PR.
|
||||||
|
|
||||||
|
## 1. Writing the PR description
|
||||||
|
|
||||||
|
Always follow the repository PR template at
|
||||||
|
[`.github/pull_request_template.md`](../../pull_request_template.md). Keep its
|
||||||
|
exact structure and headings. Fill every section:
|
||||||
|
|
||||||
|
### `### Motivation & Context`
|
||||||
|
Explain *why* the change is needed: the problem it solves and the scenario it
|
||||||
|
contributes to. Describe the net change relative to `main` — this is implied, so
|
||||||
|
do **not** spell out "vs main" explicitly.
|
||||||
|
|
||||||
|
### `### Description & Review Guide`
|
||||||
|
Describe the changes, the overall approach, and the design. Answer the three
|
||||||
|
prompts:
|
||||||
|
- **What are the major changes?**
|
||||||
|
- **What is the impact of these changes?**
|
||||||
|
- **What do you want reviewers to focus on?** — This item is for **human
|
||||||
|
reviewers only**. Automated/AI reviewers must ignore it and review the entire
|
||||||
|
change rather than narrowing scope to it.
|
||||||
|
|
||||||
|
### `### Related Issue`
|
||||||
|
Link the issue the PR fixes using a GitHub closing keyword (`Fixes #123` /
|
||||||
|
`Closes #123`) so it closes automatically on merge. A PR with no linked issue may
|
||||||
|
be closed regardless of how valid the change is. Before opening, confirm there is
|
||||||
|
no other open PR for the same issue; if there is, explain how this PR differs.
|
||||||
|
|
||||||
|
### `### Contribution Checklist`
|
||||||
|
Check every item that applies. For the breaking-change item:
|
||||||
|
- Leave **"This is not a breaking change."** checked for the common case.
|
||||||
|
- If the change **is** breaking, add the `breaking change` label **or** put
|
||||||
|
`[BREAKING]` in the title prefix, before or after a language prefix such as
|
||||||
|
`Python:` or `.NET:` — workflows keep the label and the title prefix in sync
|
||||||
|
automatically (see `.github/workflows/label-title-prefix.yml` and
|
||||||
|
`.github/workflows/label-pr.yml`).
|
||||||
|
|
||||||
|
### Do not
|
||||||
|
- Do **not** add ad-hoc sections such as "Validation" or "Tests run"; CI/CD and
|
||||||
|
the checklist already cover validation status.
|
||||||
|
- Do **not** remove or reorder the template's headings.
|
||||||
|
|
||||||
|
### Creating the PR
|
||||||
|
Open new PRs as **drafts** until they are ready for review. Example:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh pr create --repo microsoft/agent-framework --base main \
|
||||||
|
--head <your-fork-owner>:<branch> --draft \
|
||||||
|
--title "<concise title>" --body "<body following the template>"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Handling review comments
|
||||||
|
|
||||||
|
When a PR receives review comments, follow this sequence — **do not start editing
|
||||||
|
code before the user has reviewed the plan**:
|
||||||
|
|
||||||
|
1. **Review the comments.** Read every review comment and thread on the PR,
|
||||||
|
including inline code comments and general review summaries.
|
||||||
|
2. **Make a plan.** Produce a concrete plan describing how each comment will be
|
||||||
|
addressed (or why it should not be, with reasoning).
|
||||||
|
3. **Let the user review the plan.** Present the plan and wait for the user's
|
||||||
|
approval or adjustments before implementing anything.
|
||||||
|
4. **Implement.** Make the agreed changes.
|
||||||
|
5. **Reply to every comment.** Add a reply to **all** comments explaining how it
|
||||||
|
was addressed (or the agreed outcome) — leave none unanswered.
|
||||||
|
6. **Resolve resolved threads.** Mark a review thread as resolved only when the
|
||||||
|
comment has actually been addressed.
|
||||||
|
|
||||||
|
### Useful commands
|
||||||
|
|
||||||
|
List review comments and threads:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Inline review comments
|
||||||
|
gh api repos/{owner}/{repo}/pulls/{pr}/comments
|
||||||
|
|
||||||
|
# Review threads with resolution state (GraphQL)
|
||||||
|
gh api graphql -f query='
|
||||||
|
query($owner:String!,$repo:String!,$pr:Int!){
|
||||||
|
repository(owner:$owner,name:$repo){
|
||||||
|
pullRequest(number:$pr){
|
||||||
|
reviewThreads(first:100){
|
||||||
|
nodes{ id isResolved comments(first:50){ nodes{ id body author{login} } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}' -F owner={owner} -F repo={repo} -F pr={pr}
|
||||||
|
```
|
||||||
|
|
||||||
|
Reply to an inline review comment:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh api repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies \
|
||||||
|
-f body="Addressed in <commit>: <explanation>"
|
||||||
|
```
|
||||||
|
|
||||||
|
Resolve a review thread (needs the thread node id from the GraphQL query above):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
gh api graphql -f query='
|
||||||
|
mutation($threadId:ID!){
|
||||||
|
resolveReviewThread(input:{threadId:$threadId}){ thread{ isResolved } }
|
||||||
|
}' -F threadId={thread_id}
|
||||||
|
```
|
||||||
@@ -48,6 +48,10 @@ jobs:
|
|||||||
filters: |
|
filters: |
|
||||||
dotnet:
|
dotnet:
|
||||||
- 'dotnet/**'
|
- 'dotnet/**'
|
||||||
|
- '!dotnet/AGENTS.md'
|
||||||
|
- '!dotnet/**/AGENTS.md'
|
||||||
|
- '!dotnet/.github/skills/*'
|
||||||
|
- '!dotnet/.github/skills/**'
|
||||||
cosmosdb:
|
cosmosdb:
|
||||||
- 'dotnet/src/Microsoft.Agents.AI.CosmosNoSql/**'
|
- 'dotnet/src/Microsoft.Agents.AI.CosmosNoSql/**'
|
||||||
# The Foundry hosted-agent IT is costly (builds a container, pushes to ACR,
|
# The Foundry hosted-agent IT is costly (builds a container, pushes to ACR,
|
||||||
|
|||||||
@@ -10,6 +10,10 @@ on:
|
|||||||
branches: ["main", "feature*"]
|
branches: ["main", "feature*"]
|
||||||
paths:
|
paths:
|
||||||
- dotnet/**
|
- dotnet/**
|
||||||
|
- '!dotnet/AGENTS.md'
|
||||||
|
- '!dotnet/**/AGENTS.md'
|
||||||
|
- '!dotnet/.github/skills/*'
|
||||||
|
- '!dotnet/.github/skills/**'
|
||||||
- '.github/workflows/dotnet-format.yml'
|
- '.github/workflows/dotnet-format.yml'
|
||||||
|
|
||||||
concurrency:
|
concurrency:
|
||||||
|
|||||||
@@ -88,6 +88,7 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
COSMOSDB_ENDPOINT: https://localhost:8081
|
COSMOSDB_ENDPOINT: https://localhost:8081
|
||||||
COSMOSDB_KEY: C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
|
COSMOSDB_KEY: C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==
|
||||||
|
COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_GITHUB_TOKEN }}
|
||||||
OpenAI__ApiKey: ${{ secrets.OPENAI__APIKEY }}
|
OpenAI__ApiKey: ${{ secrets.OPENAI__APIKEY }}
|
||||||
OpenAI__ChatModelId: ${{ vars.OPENAI__CHATMODELID }}
|
OpenAI__ChatModelId: ${{ vars.OPENAI__CHATMODELID }}
|
||||||
OpenAI__ChatReasoningModelId: ${{ vars.OPENAI__CHATREASONINGMODELID }}
|
OpenAI__ChatReasoningModelId: ${{ vars.OPENAI__CHATREASONINGMODELID }}
|
||||||
|
|||||||
@@ -6,16 +6,34 @@
|
|||||||
# https://github.com/actions/labeler
|
# https://github.com/actions/labeler
|
||||||
|
|
||||||
name: Label pull request
|
name: Label pull request
|
||||||
on: [pull_request_target]
|
on:
|
||||||
|
pull_request_target:
|
||||||
|
types: [opened, synchronize, reopened, edited]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
add_label:
|
add_label:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
issues: write
|
||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6
|
- uses: actions/labeler@f27b608878404679385c85cfa523b85ccb86e213 # v6
|
||||||
with:
|
with:
|
||||||
repo-token: "${{ secrets.GH_ACTIONS_PR_WRITE }}"
|
repo-token: "${{ secrets.GH_ACTIONS_PR_WRITE }}"
|
||||||
|
|
||||||
|
- name: Checkout scripts
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
with:
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
fetch-depth: 1
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
|
- name: "PR: add breaking change label from title"
|
||||||
|
uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GH_ACTIONS_PR_WRITE }}
|
||||||
|
script: |
|
||||||
|
const { syncBreakingChangeLabelFromTitle } = require('./.github/scripts/title_prefix.js');
|
||||||
|
await syncBreakingChangeLabelFromTitle({ github, context, core });
|
||||||
|
|||||||
@@ -15,58 +15,17 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Checkout scripts
|
||||||
|
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
||||||
|
with:
|
||||||
|
sparse-checkout: .github/scripts
|
||||||
|
fetch-depth: 1
|
||||||
|
persist-credentials: false
|
||||||
|
|
||||||
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
- uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8
|
||||||
name: "Issue/PR: update title"
|
name: "Issue/PR: update title"
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
script: |
|
script: |
|
||||||
let prefixLabels = {
|
const { updateTitleForAddedLabel } = require('./.github/scripts/title_prefix.js');
|
||||||
"python": "Python",
|
await updateTitleForAddedLabel({ github, context, core });
|
||||||
".NET": ".NET"
|
|
||||||
};
|
|
||||||
|
|
||||||
function addTitlePrefix(title, prefix)
|
|
||||||
{
|
|
||||||
// Update the title based on the label and prefix
|
|
||||||
// Check if the title starts with the prefix (case-sensitive)
|
|
||||||
if (!title.startsWith(prefix + ": ")) {
|
|
||||||
// If not, check if the first word is the label (case-insensitive)
|
|
||||||
if (title.match(new RegExp(`^${prefix}`, 'i'))) {
|
|
||||||
// If yes, replace it with the prefix (case-sensitive)
|
|
||||||
title = title.replace(new RegExp(`^${prefix}`, 'i'), prefix);
|
|
||||||
} else {
|
|
||||||
// If not, prepend the prefix to the title
|
|
||||||
title = prefix + ": " + title;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return title;
|
|
||||||
}
|
|
||||||
|
|
||||||
labelAdded = context.payload.label.name
|
|
||||||
|
|
||||||
// Check if the issue or PR has the label
|
|
||||||
if (labelAdded in prefixLabels) {
|
|
||||||
let prefix = prefixLabels[labelAdded];
|
|
||||||
switch(context.eventName) {
|
|
||||||
case 'issues':
|
|
||||||
github.rest.issues.update({
|
|
||||||
issue_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
title: addTitlePrefix(context.payload.issue.title, prefix)
|
|
||||||
});
|
|
||||||
break
|
|
||||||
|
|
||||||
case 'pull_request_target':
|
|
||||||
github.rest.pulls.update({
|
|
||||||
pull_number: context.issue.number,
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
title: addTitlePrefix(context.payload.pull_request.title, prefix)
|
|
||||||
});
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
core.setFailed('Unrecognited eventName: ' + context.eventName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ jobs:
|
|||||||
# "Cleanup artifacts", "Agent", "Prepare", and "Upload results" are check runs
|
# "Cleanup artifacts", "Agent", "Prepare", and "Upload results" are check runs
|
||||||
# created by an org-level GitHub App (MSDO), not by any workflow in this repo.
|
# created by an org-level GitHub App (MSDO), not by any workflow in this repo.
|
||||||
# They are outside our control and their transient failures should not block merges.
|
# They are outside our control and their transient failures should not block merges.
|
||||||
IGNORED_NAMES: "CodeQL,CodeQL analysis (csharp),Cleanup artifacts,Agent,Prepare,Upload results"
|
IGNORED_NAMES: "CodeQL,CodeQL analysis (csharp),Cleanup artifacts,Agent,Prepare,Upload results,review"
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
const timeoutSeconds = Number(process.env.TIMEOUT_SECONDS);
|
const timeoutSeconds = Number(process.env.TIMEOUT_SECONDS);
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ on:
|
|||||||
branches: ["main"]
|
branches: ["main"]
|
||||||
paths:
|
paths:
|
||||||
- "python/**"
|
- "python/**"
|
||||||
|
- "!python/AGENTS.md"
|
||||||
|
- "!python/**/AGENTS.md"
|
||||||
|
- "!python/.github/skills/*"
|
||||||
|
- "!python/.github/skills/**"
|
||||||
|
|
||||||
env:
|
env:
|
||||||
# Configure a constant location for the uv cache
|
# Configure a constant location for the uv cache
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ jobs:
|
|||||||
filters: |
|
filters: |
|
||||||
python:
|
python:
|
||||||
- 'python/**'
|
- 'python/**'
|
||||||
|
- '!python/AGENTS.md'
|
||||||
|
- '!python/**/AGENTS.md'
|
||||||
|
- '!python/.github/skills/*'
|
||||||
|
- '!python/.github/skills/**'
|
||||||
# run only if 'python' files were changed
|
# run only if 'python' files were changed
|
||||||
- name: python tests
|
- name: python tests
|
||||||
if: steps.filter.outputs.python == 'true'
|
if: steps.filter.outputs.python == 'true'
|
||||||
|
|||||||
@@ -49,6 +49,10 @@ jobs:
|
|||||||
filters: |
|
filters: |
|
||||||
python:
|
python:
|
||||||
- 'python/**'
|
- 'python/**'
|
||||||
|
- '!python/AGENTS.md'
|
||||||
|
- '!python/**/AGENTS.md'
|
||||||
|
- '!python/.github/skills/*'
|
||||||
|
- '!python/.github/skills/**'
|
||||||
- '.github/actions/setup-local-mcp-server/**'
|
- '.github/actions/setup-local-mcp-server/**'
|
||||||
- '.github/workflows/python-merge-tests.yml'
|
- '.github/workflows/python-merge-tests.yml'
|
||||||
- '.github/workflows/python-integration-tests.yml'
|
- '.github/workflows/python-integration-tests.yml'
|
||||||
|
|||||||
@@ -5,6 +5,10 @@ on:
|
|||||||
branches: ["main", "feature*"]
|
branches: ["main", "feature*"]
|
||||||
paths:
|
paths:
|
||||||
- "python/**"
|
- "python/**"
|
||||||
|
- "!python/AGENTS.md"
|
||||||
|
- "!python/**/AGENTS.md"
|
||||||
|
- "!python/.github/skills/*"
|
||||||
|
- "!python/.github/skills/**"
|
||||||
env:
|
env:
|
||||||
# Configure a constant location for the uv cache
|
# Configure a constant location for the uv cache
|
||||||
UV_CACHE_DIR: /tmp/.uv-cache
|
UV_CACHE_DIR: /tmp/.uv-cache
|
||||||
|
|||||||
@@ -206,6 +206,7 @@ temp*/
|
|||||||
.temp/
|
.temp/
|
||||||
|
|
||||||
# AI
|
# AI
|
||||||
|
**/.checkpoints/
|
||||||
.claude/
|
.claude/
|
||||||
.omc/
|
.omc/
|
||||||
.omx/
|
.omx/
|
||||||
@@ -213,6 +214,7 @@ WARP.md
|
|||||||
**/memory-bank/
|
**/memory-bank/
|
||||||
**/projectBrief.md
|
**/projectBrief.md
|
||||||
**/tmpclaude*
|
**/tmpclaude*
|
||||||
|
.kiro/
|
||||||
# Dependency-bound validation reports
|
# Dependency-bound validation reports
|
||||||
python/scripts/dependency-*-results.json
|
python/scripts/dependency-*-results.json
|
||||||
python/scripts/dependencies/dependency-*-results.json
|
python/scripts/dependencies/dependency-*-results.json
|
||||||
|
|||||||
@@ -1125,7 +1125,7 @@ Naming (Python): N/A (Composable Components)
|
|||||||
Supports: N
|
Supports: N
|
||||||
Observation: No explicit middleware/filters; modularity allows composable units but no dedicated interception hooks or callbacks for custom reading/modification mid-execution.
|
Observation: No explicit middleware/filters; modularity allows composable units but no dedicated interception hooks or callbacks for custom reading/modification mid-execution.
|
||||||
|
|
||||||
For more details, see the official documentation: [Atomic Agents Docs](https://brainblend-ai.github.io/atomic-agents/). No specific code examples available for interception.
|
No specific code examples available for interception.
|
||||||
|
|
||||||
#### Smolagents (Hugging Face)
|
#### Smolagents (Hugging Face)
|
||||||
|
|
||||||
|
|||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
../../../.github/skills/pull-requests
|
||||||
@@ -10,6 +10,10 @@ See `./.github/skills/build-and-test/SKILL.md` for detailed instructions on buil
|
|||||||
|
|
||||||
See `./.github/skills/project-structure/SKILL.md` for an overview of the project structure.
|
See `./.github/skills/project-structure/SKILL.md` for an overview of the project structure.
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
|
||||||
|
See `./.github/skills/pull-requests/SKILL.md` for guidance on writing PR descriptions and handling/resolving PR review comments.
|
||||||
|
|
||||||
### Core types
|
### Core types
|
||||||
|
|
||||||
- `AIAgent`: The abstract base class that all agents derive from, providing common methods for interacting with an agent.
|
- `AIAgent`: The abstract base class that all agents derive from, providing common methods for interacting with an agent.
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
<PackageVersion Include="Aspire.Hosting.Azure.CognitiveServices" Version="$(AspireAppHostSdkVersion)" />
|
<PackageVersion Include="Aspire.Hosting.Azure.CognitiveServices" Version="$(AspireAppHostSdkVersion)" />
|
||||||
<PackageVersion Include="Aspire.Microsoft.Azure.Cosmos" Version="$(AspireAppHostSdkVersion)" />
|
<PackageVersion Include="Aspire.Microsoft.Azure.Cosmos" Version="$(AspireAppHostSdkVersion)" />
|
||||||
<PackageVersion Include="CommunityToolkit.Aspire.OllamaSharp" Version="13.0.0" />
|
<PackageVersion Include="CommunityToolkit.Aspire.OllamaSharp" Version="13.0.0" />
|
||||||
|
<PackageVersion Include="MessagePack" Version="3.1.7" /> <!-- Transitive dependency of Aspire pinned to newer version due to vulnerability in 2.5.192 -->
|
||||||
<!-- Azure.* -->
|
<!-- Azure.* -->
|
||||||
<PackageVersion Include="Azure.AI.AgentServer.Core" Version="1.0.0-beta.25" />
|
<PackageVersion Include="Azure.AI.AgentServer.Core" Version="1.0.0-beta.25" />
|
||||||
<PackageVersion Include="Azure.AI.AgentServer.Invocations" Version="1.0.0-beta.4" />
|
<PackageVersion Include="Azure.AI.AgentServer.Invocations" Version="1.0.0-beta.4" />
|
||||||
@@ -41,19 +42,19 @@
|
|||||||
<!-- Newtonsoft.Json -->
|
<!-- Newtonsoft.Json -->
|
||||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
<!-- System.* -->
|
<!-- System.* -->
|
||||||
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.8" />
|
||||||
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
|
<PackageVersion Include="Microsoft.Bcl.HashCode" Version="6.0.0" />
|
||||||
<PackageVersion Include="Microsoft.Bcl.Memory" Version="10.0.5" />
|
<PackageVersion Include="Microsoft.Bcl.Memory" Version="10.0.5" />
|
||||||
<PackageVersion Include="System.ClientModel" Version="1.12.0" />
|
<PackageVersion Include="System.ClientModel" Version="1.12.0" />
|
||||||
<PackageVersion Include="System.CodeDom" Version="10.0.0" />
|
<PackageVersion Include="System.CodeDom" Version="10.0.0" />
|
||||||
<PackageVersion Include="System.Collections.Immutable" Version="10.0.1" />
|
<PackageVersion Include="System.Collections.Immutable" Version="10.0.1" />
|
||||||
<PackageVersion Include="System.CommandLine" Version="2.0.0-rc.2.25502.107" />
|
<PackageVersion Include="System.CommandLine" Version="2.0.0-rc.2.25502.107" />
|
||||||
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.6" />
|
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.8" />
|
||||||
<PackageVersion Include="System.Linq.AsyncEnumerable" Version="10.0.5" />
|
<PackageVersion Include="System.Linq.AsyncEnumerable" Version="10.0.5" />
|
||||||
<PackageVersion Include="System.Net.Http.Json" Version="10.0.0" />
|
<PackageVersion Include="System.Net.Http.Json" Version="10.0.0" />
|
||||||
<PackageVersion Include="System.Net.ServerSentEvents" Version="10.0.5" />
|
<PackageVersion Include="System.Net.ServerSentEvents" Version="10.0.5" />
|
||||||
<PackageVersion Include="System.Text.Json" Version="10.0.6" />
|
<PackageVersion Include="System.Text.Json" Version="10.0.8" />
|
||||||
<PackageVersion Include="System.Threading.Channels" Version="10.0.6" />
|
<PackageVersion Include="System.Threading.Channels" Version="10.0.8" />
|
||||||
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
|
<PackageVersion Include="System.Threading.Tasks.Extensions" Version="4.6.3" />
|
||||||
<PackageVersion Include="System.Net.Security" Version="4.3.2" />
|
<PackageVersion Include="System.Net.Security" Version="4.3.2" />
|
||||||
<!-- OpenTelemetry -->
|
<!-- OpenTelemetry -->
|
||||||
@@ -72,12 +73,12 @@
|
|||||||
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" />
|
<PackageVersion Include="Microsoft.AspNetCore.OpenApi" Version="10.0.0" />
|
||||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.0.0" />
|
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="10.0.0" />
|
||||||
<!-- Microsoft.Extensions.* -->
|
<!-- Microsoft.Extensions.* -->
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI" Version="10.5.1" />
|
<PackageVersion Include="Microsoft.Extensions.AI" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.5.1" />
|
<PackageVersion Include="Microsoft.Extensions.AI.Abstractions" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation" Version="10.4.0" />
|
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation.Quality" Version="10.4.0" />
|
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation.Quality" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation.Safety" Version="10.3.0-preview.1.26109.11" />
|
<PackageVersion Include="Microsoft.Extensions.AI.Evaluation.Safety" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.5.1" />
|
<PackageVersion Include="Microsoft.Extensions.AI.OpenAI" Version="10.6.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
|
<PackageVersion Include="Microsoft.Extensions.Caching.Memory" Version="10.0.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Compliance.Abstractions" Version="10.5.0" />
|
<PackageVersion Include="Microsoft.Extensions.Compliance.Abstractions" Version="10.5.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.1" />
|
||||||
@@ -86,12 +87,12 @@
|
|||||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.UserSecrets" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="10.0.8" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.FileSystemGlobbing" Version="10.0.6" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
|
<PackageVersion Include="Microsoft.Extensions.Http.Resilience" Version="10.0.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.6" />
|
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.8" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.1" />
|
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.1" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.0.0" />
|
<PackageVersion Include="Microsoft.Extensions.ServiceDiscovery" Version="10.0.0" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.VectorData.Abstractions" Version="9.7.0" />
|
<PackageVersion Include="Microsoft.Extensions.VectorData.Abstractions" Version="9.7.0" />
|
||||||
@@ -138,10 +139,15 @@
|
|||||||
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.1.0" />
|
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Http.AspNetCore" Version="2.1.0" />
|
||||||
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Mcp" Version="1.0.0" />
|
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Extensions.Mcp" Version="1.0.0" />
|
||||||
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.7" />
|
<PackageVersion Include="Microsoft.Azure.Functions.Worker.Sdk" Version="2.0.7" />
|
||||||
|
<!-- Valkey -->
|
||||||
<!-- Redis -->
|
<!-- Redis -->
|
||||||
<PackageVersion Include="StackExchange.Redis" Version="2.10.1" />
|
<PackageVersion Include="StackExchange.Redis" Version="2.10.1" />
|
||||||
|
<!-- Valkey -->
|
||||||
|
<PackageVersion Include="Valkey.Glide" Version="1.1.0" />
|
||||||
<!-- Console UX -->
|
<!-- Console UX -->
|
||||||
<PackageVersion Include="Spectre.Console" Version="0.49.1" />
|
<PackageVersion Include="Spectre.Console" Version="0.49.1" />
|
||||||
|
<!-- AWS -->
|
||||||
|
<PackageVersion Include="AWSSDK.Extensions.Bedrock.MEAI" Version="4.0.6.10" />
|
||||||
<!-- Test -->
|
<!-- Test -->
|
||||||
<PackageVersion Include="FluentAssertions" Version="8.8.0" />
|
<PackageVersion Include="FluentAssertions" Version="8.8.0" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Condition="'$(TargetFramework)' == 'net8.0'" Version="8.0.22" />
|
<PackageVersion Include="Microsoft.AspNetCore.TestHost" Condition="'$(TargetFramework)' == 'net8.0'" Version="8.0.22" />
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
<File Path="samples/02-agents/AgentProviders/README.md" />
|
<File Path="samples/02-agents/AgentProviders/README.md" />
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_A2A/Agent_With_A2A.csproj" />
|
<Project Path="samples/02-agents/AgentProviders/Agent_With_A2A/Agent_With_A2A.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_Anthropic/Agent_With_Anthropic.csproj" />
|
<Project Path="samples/02-agents/AgentProviders/Agent_With_Anthropic/Agent_With_Anthropic.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureAIAgentsPersistent/Agent_With_AzureAIAgentsPersistent.csproj" />
|
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureAIProject/Agent_With_AzureAIProject.csproj" />
|
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureAIProject/Agent_With_AzureAIProject.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureFoundryModel/Agent_With_AzureFoundryModel.csproj" />
|
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureFoundryModel/Agent_With_AzureFoundryModel.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureOpenAIChatCompletion/Agent_With_AzureOpenAIChatCompletion.csproj" />
|
<Project Path="samples/02-agents/AgentProviders/Agent_With_AzureOpenAIChatCompletion/Agent_With_AzureOpenAIChatCompletion.csproj" />
|
||||||
@@ -129,6 +128,7 @@
|
|||||||
<Project Path="samples/02-agents/Harness/Harness_Step02_Research_WithBackgroundAgents/Harness_Step02_Research_WithBackgroundAgents.csproj" />
|
<Project Path="samples/02-agents/Harness/Harness_Step02_Research_WithBackgroundAgents/Harness_Step02_Research_WithBackgroundAgents.csproj" />
|
||||||
<Project Path="samples/02-agents/Harness/Harness_Step03_DataProcessing/Harness_Step03_DataProcessing.csproj" />
|
<Project Path="samples/02-agents/Harness/Harness_Step03_DataProcessing/Harness_Step03_DataProcessing.csproj" />
|
||||||
<Project Path="samples/02-agents/Harness/Harness_Step04_CodeExecution/Harness_Step04_CodeExecution.csproj" />
|
<Project Path="samples/02-agents/Harness/Harness_Step04_CodeExecution/Harness_Step04_CodeExecution.csproj" />
|
||||||
|
<Project Path="samples/02-agents/Harness/Harness_Step05_Loop/Harness_Step05_Loop.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder Name="/Samples/02-agents/AGUI/Step05_StateManagement/">
|
<Folder Name="/Samples/02-agents/AGUI/Step05_StateManagement/">
|
||||||
<Project Path="samples/02-agents/AGUI/Step05_StateManagement/Client/Client.csproj" />
|
<Project Path="samples/02-agents/AGUI/Step05_StateManagement/Client/Client.csproj" />
|
||||||
@@ -194,6 +194,8 @@
|
|||||||
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step02_MemoryUsingMem0/AgentWithMemory_Step02_MemoryUsingMem0.csproj" />
|
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step02_MemoryUsingMem0/AgentWithMemory_Step02_MemoryUsingMem0.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step04_MemoryUsingFoundry/AgentWithMemory_Step04_MemoryUsingFoundry.csproj" />
|
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step04_MemoryUsingFoundry/AgentWithMemory_Step04_MemoryUsingFoundry.csproj" />
|
||||||
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step05_BoundedChatHistory/AgentWithMemory_Step05_BoundedChatHistory.csproj" />
|
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step05_BoundedChatHistory/AgentWithMemory_Step05_BoundedChatHistory.csproj" />
|
||||||
|
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step03_MemoryUsingValkey/AgentWithMemory_Step03_MemoryUsingValkey.csproj" />
|
||||||
|
<Project Path="samples/02-agents/AgentWithMemory/AgentWithMemory_Step03_MemoryUsingValkey_Bedrock/AgentWithMemory_Step03_MemoryUsingValkey_Bedrock.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder Name="/Samples/02-agents/AgentWithOpenAI/">
|
<Folder Name="/Samples/02-agents/AgentWithOpenAI/">
|
||||||
<File Path="samples/02-agents/AgentWithOpenAI/README.md" />
|
<File Path="samples/02-agents/AgentWithOpenAI/README.md" />
|
||||||
@@ -344,6 +346,9 @@
|
|||||||
<Folder Name="/Samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/">
|
<Folder Name="/Samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/">
|
||||||
<Project Path="samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj" />
|
<Project Path="samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox/HostedToolbox.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
|
<Folder Name="/Samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox-AuthPaths/">
|
||||||
|
<Project Path="samples/04-hosting/FoundryHostedAgents/responses/Hosted-Toolbox-AuthPaths/Hosted-Toolbox-AuthPaths.csproj" />
|
||||||
|
</Folder>
|
||||||
<Folder Name="/Samples/04-hosting/FoundryHostedAgents/responses/Hosted-ToolboxMcpSkills/">
|
<Folder Name="/Samples/04-hosting/FoundryHostedAgents/responses/Hosted-ToolboxMcpSkills/">
|
||||||
<Project Path="samples/04-hosting/FoundryHostedAgents/responses/Hosted-ToolboxMcpSkills/HostedToolboxMcpSkills.csproj" />
|
<Project Path="samples/04-hosting/FoundryHostedAgents/responses/Hosted-ToolboxMcpSkills/HostedToolboxMcpSkills.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
@@ -622,6 +627,7 @@
|
|||||||
<Project Path="src/Microsoft.Agents.AI.Workflows.Generators/Microsoft.Agents.AI.Workflows.Generators.csproj" />
|
<Project Path="src/Microsoft.Agents.AI.Workflows.Generators/Microsoft.Agents.AI.Workflows.Generators.csproj" />
|
||||||
<Project Path="src/Microsoft.Agents.AI.Workflows/Microsoft.Agents.AI.Workflows.csproj" />
|
<Project Path="src/Microsoft.Agents.AI.Workflows/Microsoft.Agents.AI.Workflows.csproj" />
|
||||||
<Project Path="src/Microsoft.Agents.AI/Microsoft.Agents.AI.csproj" />
|
<Project Path="src/Microsoft.Agents.AI/Microsoft.Agents.AI.csproj" />
|
||||||
|
<Project Path="src/Microsoft.Agents.AI.Valkey/Microsoft.Agents.AI.Valkey.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
<Folder Name="/Tests/" />
|
<Folder Name="/Tests/" />
|
||||||
<Folder Name="/Tests/IntegrationTests/">
|
<Folder Name="/Tests/IntegrationTests/">
|
||||||
@@ -675,5 +681,6 @@
|
|||||||
<Project Path="tests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests.csproj" />
|
<Project Path="tests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests/Microsoft.Agents.AI.Workflows.Declarative.UnitTests.csproj" />
|
||||||
<Project Path="tests/Microsoft.Agents.AI.Workflows.Generators.UnitTests/Microsoft.Agents.AI.Workflows.Generators.UnitTests.csproj" />
|
<Project Path="tests/Microsoft.Agents.AI.Workflows.Generators.UnitTests/Microsoft.Agents.AI.Workflows.Generators.UnitTests.csproj" />
|
||||||
<Project Path="tests/Microsoft.Agents.AI.Workflows.UnitTests/Microsoft.Agents.AI.Workflows.UnitTests.csproj" />
|
<Project Path="tests/Microsoft.Agents.AI.Workflows.UnitTests/Microsoft.Agents.AI.Workflows.UnitTests.csproj" />
|
||||||
|
<Project Path="tests/Microsoft.Agents.AI.Valkey.UnitTests/Microsoft.Agents.AI.Valkey.UnitTests.csproj" />
|
||||||
</Folder>
|
</Folder>
|
||||||
</Solution>
|
</Solution>
|
||||||
|
|||||||
@@ -50,19 +50,6 @@ internal static class AgentsSamples
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
new SampleDefinition
|
|
||||||
{
|
|
||||||
Name = "Agent_With_AzureAIAgentsPersistent",
|
|
||||||
ProjectPath = "samples/02-agents/AgentProviders/Agent_With_AzureAIAgentsPersistent",
|
|
||||||
RequiredEnvironmentVariables = ["AZURE_AI_PROJECT_ENDPOINT"],
|
|
||||||
OptionalEnvironmentVariables = ["AZURE_AI_MODEL_DEPLOYMENT_NAME"],
|
|
||||||
ExpectedOutputDescription =
|
|
||||||
[
|
|
||||||
"The output should contain a joke about a pirate.",
|
|
||||||
"The output should not contain error messages or stack traces.",
|
|
||||||
],
|
|
||||||
},
|
|
||||||
|
|
||||||
new SampleDefinition
|
new SampleDefinition
|
||||||
{
|
{
|
||||||
Name = "Agent_With_AzureAIProject",
|
Name = "Agent_With_AzureAIProject",
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<!-- Central version prefix - applies to all nuget packages. -->
|
<!-- Central version prefix - applies to all nuget packages. -->
|
||||||
<VersionPrefix>1.9.0</VersionPrefix>
|
<VersionPrefix>1.10.0</VersionPrefix>
|
||||||
<RCNumber>1</RCNumber>
|
<RCNumber>1</RCNumber>
|
||||||
<DateSuffix>260603</DateSuffix>
|
<DateSuffix>260610</DateSuffix>
|
||||||
<PackageVersion Condition="'$(IsReleaseCandidate)' == 'true'">$(VersionPrefix)-rc$(RCNumber)</PackageVersion>
|
<PackageVersion Condition="'$(IsReleaseCandidate)' == 'true'">$(VersionPrefix)-rc$(RCNumber)</PackageVersion>
|
||||||
<PackageVersion Condition="'$(IsReleaseCandidate)' != 'true' AND '$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix).$(DateSuffix).1</PackageVersion>
|
<PackageVersion Condition="'$(IsReleaseCandidate)' != 'true' AND '$(VersionSuffix)' != ''">$(VersionPrefix)-$(VersionSuffix).$(DateSuffix).1</PackageVersion>
|
||||||
<PackageVersion Condition="'$(IsReleaseCandidate)' != 'true' AND '$(VersionSuffix)' == ''">$(VersionPrefix)-preview.$(DateSuffix).1</PackageVersion>
|
<PackageVersion Condition="'$(IsReleaseCandidate)' != 'true' AND '$(VersionSuffix)' == ''">$(VersionPrefix)-preview.$(DateSuffix).1</PackageVersion>
|
||||||
<PackageVersion Condition="'$(IsReleased)' == 'true'">$(VersionPrefix)</PackageVersion>
|
<PackageVersion Condition="'$(IsReleased)' == 'true'">$(VersionPrefix)</PackageVersion>
|
||||||
<GitTag>1.9.0</GitTag>
|
<GitTag>1.10.0</GitTag>
|
||||||
|
|
||||||
<Configurations>Debug;Release;Publish</Configurations>
|
<Configurations>Debug;Release;Publish</Configurations>
|
||||||
<IsPackable>true</IsPackable>
|
<IsPackable>true</IsPackable>
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
// Copyright (c) Microsoft. All rights reserved.
|
|
||||||
|
|
||||||
#pragma warning disable CS0618 // Type or member is obsolete - sample uses deprecated PersistentAgentsClientExtensions
|
|
||||||
|
|
||||||
// This sample shows how to create and use a simple AI agent with Microsoft Foundry Agents as the backend.
|
|
||||||
|
|
||||||
using Azure.AI.Agents.Persistent;
|
|
||||||
using Azure.Identity;
|
|
||||||
using Microsoft.Agents.AI;
|
|
||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
|
||||||
var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
|
||||||
|
|
||||||
const string JokerName = "Joker";
|
|
||||||
const string JokerInstructions = "You are good at telling jokes.";
|
|
||||||
|
|
||||||
// Get a client to create/retrieve server side agents with.
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
|
||||||
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
|
||||||
var persistentAgentsClient = new PersistentAgentsClient(endpoint, new DefaultAzureCredential());
|
|
||||||
|
|
||||||
// You can create a server side persistent agent with the Azure.AI.Agents.Persistent SDK.
|
|
||||||
var agentMetadata = await persistentAgentsClient.Administration.CreateAgentAsync(
|
|
||||||
model: deploymentName,
|
|
||||||
name: JokerName,
|
|
||||||
instructions: JokerInstructions);
|
|
||||||
|
|
||||||
// You can retrieve an already created server side persistent agent as an AIAgent.
|
|
||||||
AIAgent agent1 = await persistentAgentsClient.GetAIAgentAsync(agentMetadata.Value.Id);
|
|
||||||
|
|
||||||
// You can also create a server side persistent agent and return it as an AIAgent directly.
|
|
||||||
AIAgent agent2 = await persistentAgentsClient.CreateAIAgentAsync(
|
|
||||||
model: deploymentName,
|
|
||||||
name: JokerName,
|
|
||||||
instructions: JokerInstructions);
|
|
||||||
|
|
||||||
// You can then invoke the agent like any other AIAgent.
|
|
||||||
AgentSession session = await agent1.CreateSessionAsync();
|
|
||||||
Console.WriteLine(await agent1.RunAsync("Tell me a joke about a pirate.", session));
|
|
||||||
|
|
||||||
// Cleanup for sample purposes.
|
|
||||||
await persistentAgentsClient.Administration.DeleteAgentAsync(agent1.Id);
|
|
||||||
await persistentAgentsClient.Administration.DeleteAgentAsync(agent2.Id);
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
# Classic Foundry Agents
|
|
||||||
|
|
||||||
This sample demonstrates how to create an agent using the classic Foundry Agents experience.
|
|
||||||
|
|
||||||
# Classic vs New Foundry Agents
|
|
||||||
|
|
||||||
Below is a comparison between the classic and new Foundry Agents approaches:
|
|
||||||
|
|
||||||
[Migration Guide](https://learn.microsoft.com/en-us/azure/ai-foundry/agents/how-to/migrate?view=foundry)
|
|
||||||
|
|
||||||
# Prerequisites
|
|
||||||
|
|
||||||
Before you begin, ensure you have the following prerequisites:
|
|
||||||
|
|
||||||
- .NET 10 SDK or later
|
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
|
||||||
- Azure CLI installed and authenticated (for Azure credential authentication)
|
|
||||||
|
|
||||||
**Note**: This demo uses Azure CLI credentials for authentication. Make sure you're logged in with `az login` and have access to the Microsoft Foundry resource. For more information, see the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively).
|
|
||||||
|
|
||||||
Set the following environment variables:
|
|
||||||
|
|
||||||
```powershell
|
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project" # Replace with your Microsoft Foundry resource endpoint
|
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini" # Optional, defaults to gpt-5.4-mini
|
|
||||||
```
|
|
||||||
@@ -8,8 +8,8 @@ using Azure.Identity;
|
|||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
using Microsoft.Agents.AI.Foundry;
|
using Microsoft.Agents.AI.Foundry;
|
||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
var deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
const string JokerName = "JokerAgent";
|
const string JokerName = "JokerAgent";
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# New Foundry Agents
|
# New Foundry Agents
|
||||||
|
|
||||||
This sample demonstrates how to create an agent using the new Foundry Agents experience.
|
This sample demonstrates how to create an agent using the new Foundry Agents experience.
|
||||||
|
|
||||||
@@ -21,6 +21,6 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project" # Replace with your Microsoft Foundry resource endpoint
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project" # Replace with your Microsoft Foundry resource endpoint
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini" # Optional, defaults to gpt-5.4-mini
|
$env:FOUNDRY_MODEL="gpt-5.4-mini" # Optional, defaults to gpt-5.4-mini
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ using OpenAI.Chat;
|
|||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
|
||||||
var apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
|
var apiKey = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");
|
||||||
var model = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "Phi-4-mini-instruct";
|
var model = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "Phi-4-mini-instruct";
|
||||||
|
|
||||||
// Since we are using the OpenAI Client SDK, we need to override the default endpoint to point to Microsoft Foundry.
|
// Since we are using the OpenAI Client SDK, we need to override the default endpoint to point to Microsoft Foundry.
|
||||||
var clientOptions = new OpenAIClientOptions() { Endpoint = new Uri(endpoint) };
|
var clientOptions = new OpenAIClientOptions() { Endpoint = new Uri(endpoint) };
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
This sample shows how to use the OpenAI SDK to create and use a simple AI agent with any model hosted in Microsoft Foundry.
|
This sample shows how to use the OpenAI SDK to create and use a simple AI agent with any model hosted in Microsoft Foundry.
|
||||||
|
|
||||||
@@ -13,7 +13,7 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry resource
|
- Microsoft Foundry resource
|
||||||
- A model deployment in your Microsoft Foundry resource. This example defaults to using the `Phi-4-mini-instruct` model,
|
- A model deployment in your Microsoft Foundry resource. This example defaults to using the `Phi-4-mini-instruct` model,
|
||||||
so if you want to use a different model, ensure that you set your `AZURE_AI_MODEL_DEPLOYMENT_NAME` environment
|
so if you want to use a different model, ensure that you set your `FOUNDRY_MODEL` environment
|
||||||
variable to the name of your deployed model.
|
variable to the name of your deployed model.
|
||||||
- An API key or role based authentication to access the Microsoft Foundry resource
|
- An API key or role based authentication to access the Microsoft Foundry resource
|
||||||
|
|
||||||
@@ -30,5 +30,5 @@ $env:AZURE_OPENAI_ENDPOINT="https://ai-foundry-<myresourcename>.services.ai.azur
|
|||||||
$env:AZURE_OPENAI_API_KEY="************"
|
$env:AZURE_OPENAI_API_KEY="************"
|
||||||
|
|
||||||
# Optional, defaults to Phi-4-mini-instruct
|
# Optional, defaults to Phi-4-mini-instruct
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="Phi-4-mini-instruct"
|
$env:FOUNDRY_MODEL="Phi-4-mini-instruct"
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ See the README.md for each sample for the prerequisites for that sample.
|
|||||||
|---|---|
|
|---|---|
|
||||||
|[Creating an AIAgent with A2A](./Agent_With_A2A/)|This sample demonstrates how to create AIAgent for an existing A2A agent.|
|
|[Creating an AIAgent with A2A](./Agent_With_A2A/)|This sample demonstrates how to create AIAgent for an existing A2A agent.|
|
||||||
|[Creating an AIAgent with Anthropic](./Agent_With_Anthropic/)|This sample demonstrates how to create an AIAgent using Anthropic Claude models as the underlying inference service|
|
|[Creating an AIAgent with Anthropic](./Agent_With_Anthropic/)|This sample demonstrates how to create an AIAgent using Anthropic Claude models as the underlying inference service|
|
||||||
|[Creating an AIAgent with Foundry Agents using Azure.AI.Agents.Persistent](./Agent_With_AzureAIAgentsPersistent/)|This sample demonstrates how to create a Foundry Persistent agent and expose it as an AIAgent using the Azure.AI.Agents.Persistent SDK|
|
|
||||||
|[Creating an AIAgent with Foundry Agents using Azure.AI.Project](./Agent_With_AzureAIProject/)|This sample demonstrates how to create an Foundry Project agent and expose it as an AIAgent using the Azure.AI.Project SDK|
|
|[Creating an AIAgent with Foundry Agents using Azure.AI.Project](./Agent_With_AzureAIProject/)|This sample demonstrates how to create an Foundry Project agent and expose it as an AIAgent using the Azure.AI.Project SDK|
|
||||||
|[Creating an AIAgent with Foundry Model](./Agent_With_AzureFoundryModel/)|This sample demonstrates how to use any model deployed to Microsoft Foundry to create an AIAgent|
|
|[Creating an AIAgent with Foundry Model](./Agent_With_AzureFoundryModel/)|This sample demonstrates how to use any model deployed to Microsoft Foundry to create an AIAgent|
|
||||||
|[Creating an AIAgent with Azure OpenAI ChatCompletion](./Agent_With_AzureOpenAIChatCompletion/)|This sample demonstrates how to create an AIAgent using Azure OpenAI ChatCompletion as the underlying inference service|
|
|[Creating an AIAgent with Azure OpenAI ChatCompletion](./Agent_With_AzureOpenAIChatCompletion/)|This sample demonstrates how to create an AIAgent using Azure OpenAI ChatCompletion as the underlying inference service|
|
||||||
|
|||||||
@@ -26,6 +26,9 @@ var skillsProvider = new AgentSkillsProvider(
|
|||||||
SubprocessScriptRunner.RunAsync);
|
SubprocessScriptRunner.RunAsync);
|
||||||
|
|
||||||
// --- Agent Setup ---
|
// --- Agent Setup ---
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetResponsesClient()
|
.GetResponsesClient()
|
||||||
.AsAIAgent(new ChatClientAgentOptions
|
.AsAIAgent(new ChatClientAgentOptions
|
||||||
|
|||||||
@@ -67,6 +67,9 @@ var unitConverterSkill = new AgentInlineSkill(
|
|||||||
var skillsProvider = new AgentSkillsProvider(unitConverterSkill);
|
var skillsProvider = new AgentSkillsProvider(unitConverterSkill);
|
||||||
|
|
||||||
// --- Agent Setup ---
|
// --- Agent Setup ---
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetResponsesClient()
|
.GetResponsesClient()
|
||||||
.AsAIAgent(new ChatClientAgentOptions
|
.AsAIAgent(new ChatClientAgentOptions
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ var unitConverter = new UnitConverterSkill();
|
|||||||
var skillsProvider = new AgentSkillsProvider(unitConverter);
|
var skillsProvider = new AgentSkillsProvider(unitConverter);
|
||||||
|
|
||||||
// --- Agent Setup ---
|
// --- Agent Setup ---
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetResponsesClient()
|
.GetResponsesClient()
|
||||||
.AsAIAgent(new ChatClientAgentOptions
|
.AsAIAgent(new ChatClientAgentOptions
|
||||||
|
|||||||
@@ -64,6 +64,9 @@ var skillsProvider = new AgentSkillsProviderBuilder()
|
|||||||
.Build();
|
.Build();
|
||||||
|
|
||||||
// --- Agent Setup ---
|
// --- Agent Setup ---
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetResponsesClient()
|
.GetResponsesClient()
|
||||||
.AsAIAgent(new ChatClientAgentOptions
|
.AsAIAgent(new ChatClientAgentOptions
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ var weightSkill = new WeightConverterSkill();
|
|||||||
var skillsProvider = new AgentSkillsProvider(distanceSkill, weightSkill);
|
var skillsProvider = new AgentSkillsProvider(distanceSkill, weightSkill);
|
||||||
|
|
||||||
// --- Agent Setup ---
|
// --- Agent Setup ---
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetResponsesClient()
|
.GetResponsesClient()
|
||||||
.AsAIAgent(
|
.AsAIAgent(
|
||||||
|
|||||||
+3
@@ -16,6 +16,9 @@ var guestPath = Environment.GetEnvironmentVariable("HYPERLIGHT_PYTHON_GUEST_PATH
|
|||||||
|
|
||||||
using var codeAct = new HyperlightCodeActProvider(HyperlightCodeActProviderOptions.CreateForWasm(guestPath));
|
using var codeAct = new HyperlightCodeActProvider(HyperlightCodeActProviderOptions.CreateForWasm(guestPath));
|
||||||
|
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(
|
AIAgent agent = new AzureOpenAIClient(
|
||||||
new Uri(endpoint),
|
new Uri(endpoint),
|
||||||
new DefaultAzureCredential())
|
new DefaultAzureCredential())
|
||||||
|
|||||||
+3
@@ -39,6 +39,9 @@ options.Tools = [fetchDocs, queryData, sendEmail];
|
|||||||
|
|
||||||
using var codeAct = new HyperlightCodeActProvider(options);
|
using var codeAct = new HyperlightCodeActProvider(options);
|
||||||
|
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(
|
AIAgent agent = new AzureOpenAIClient(
|
||||||
new Uri(endpoint),
|
new Uri(endpoint),
|
||||||
new DefaultAzureCredential())
|
new DefaultAzureCredential())
|
||||||
|
|||||||
+3
@@ -31,6 +31,9 @@ var instructions =
|
|||||||
+ "and calling `execute_code` instead of computing values yourself.\n\n"
|
+ "and calling `execute_code` instead of computing values yourself.\n\n"
|
||||||
+ executeCode.BuildInstructions(toolsVisibleToModel: false);
|
+ executeCode.BuildInstructions(toolsVisibleToModel: false);
|
||||||
|
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIAgent agent = new AzureOpenAIClient(
|
AIAgent agent = new AzureOpenAIClient(
|
||||||
new Uri(endpoint),
|
new Uri(endpoint),
|
||||||
new DefaultAzureCredential())
|
new DefaultAzureCredential())
|
||||||
|
|||||||
+22
@@ -0,0 +1,22 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFrameworks>net10.0</TargetFrameworks>
|
||||||
|
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Azure.AI.OpenAI" />
|
||||||
|
<PackageReference Include="Azure.Identity" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.OpenAI\Microsoft.Agents.AI.OpenAI.csproj" />
|
||||||
|
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.Valkey\Microsoft.Agents.AI.Valkey.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+55
@@ -0,0 +1,55 @@
|
|||||||
|
// Copyright (c) Microsoft. All rights reserved.
|
||||||
|
|
||||||
|
// This sample demonstrates using Valkey for persistent chat history with the Agent Framework.
|
||||||
|
// ValkeyChatHistoryProvider persists conversation history across sessions using Valkey lists.
|
||||||
|
//
|
||||||
|
// Prerequisites:
|
||||||
|
// - A running Valkey server (any version):
|
||||||
|
// docker run -d --name valkey -p 6379:6379 valkey/valkey:latest
|
||||||
|
// - Azure OpenAI endpoint and deployment configured via environment variables
|
||||||
|
|
||||||
|
using Azure.AI.OpenAI;
|
||||||
|
using Azure.Identity;
|
||||||
|
using Microsoft.Agents.AI;
|
||||||
|
using Microsoft.Agents.AI.Valkey;
|
||||||
|
using Microsoft.Extensions.AI;
|
||||||
|
using OpenAI.Chat;
|
||||||
|
using Valkey.Glide;
|
||||||
|
|
||||||
|
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
|
||||||
|
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
||||||
|
var valkeyConnection = Environment.GetEnvironmentVariable("VALKEY_CONNECTION") ?? "localhost:6379";
|
||||||
|
|
||||||
|
var connection = await ConnectionMultiplexer.ConnectAsync(valkeyConnection);
|
||||||
|
|
||||||
|
Console.WriteLine("=== ValkeyChatHistoryProvider — Persistent Chat History ===\n");
|
||||||
|
|
||||||
|
var historyProvider = new ValkeyChatHistoryProvider(
|
||||||
|
connection,
|
||||||
|
_ => new ValkeyChatHistoryProvider.State($"sample-{Guid.NewGuid():N}"),
|
||||||
|
new ValkeyChatHistoryProviderOptions
|
||||||
|
{
|
||||||
|
KeyPrefix = "sample_chat",
|
||||||
|
MaxMessages = 20
|
||||||
|
});
|
||||||
|
|
||||||
|
AIAgent historyAgent = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
|
.GetChatClient(deploymentName)
|
||||||
|
.AsAIAgent(new ChatClientAgentOptions()
|
||||||
|
{
|
||||||
|
ChatOptions = new() { Instructions = "You are a helpful assistant that remembers our conversation." },
|
||||||
|
ChatHistoryProvider = historyProvider
|
||||||
|
});
|
||||||
|
|
||||||
|
AgentSession session1 = await historyAgent.CreateSessionAsync();
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("Hello! My name is Alex and I'm a software engineer.", session1));
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("I'm working on a project using Valkey for caching.", session1));
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("What do you remember about me?", session1));
|
||||||
|
|
||||||
|
var messageCount = await historyProvider.GetMessageCountAsync(session1);
|
||||||
|
Console.WriteLine($"\n Stored {messageCount} messages in Valkey.\n");
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
connection.Dispose();
|
||||||
|
|
||||||
|
Console.WriteLine("Done!");
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
# Agent with Memory Using Valkey
|
||||||
|
|
||||||
|
This sample demonstrates using Valkey for persistent chat history with the Agent Framework.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
- **ValkeyChatHistoryProvider** — Persists conversation history across sessions using Valkey lists. Works with any Valkey or Redis OSS server (no search module required).
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- Azure OpenAI endpoint and deployment
|
||||||
|
- A running Valkey server (any version):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d --name valkey -p 6379:6379 valkey/valkey:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
| Variable | Description | Default |
|
||||||
|
|---|---|---|
|
||||||
|
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI endpoint URL | (required) |
|
||||||
|
| `AZURE_OPENAI_DEPLOYMENT_NAME` | Model deployment name | `gpt-5.4-mini` |
|
||||||
|
| `VALKEY_CONNECTION` | Valkey connection string | `localhost:6379` |
|
||||||
|
|
||||||
|
## Running
|
||||||
|
|
||||||
|
```bash
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFrameworks>net10.0</TargetFrameworks>
|
||||||
|
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="AWSSDK.Extensions.Bedrock.MEAI" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI\Microsoft.Agents.AI.csproj" />
|
||||||
|
<ProjectReference Include="..\..\..\..\src\Microsoft.Agents.AI.Valkey\Microsoft.Agents.AI.Valkey.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
||||||
+57
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright (c) Microsoft. All rights reserved.
|
||||||
|
|
||||||
|
// This sample demonstrates using Valkey for persistent chat history with the Agent Framework,
|
||||||
|
// powered by Amazon Bedrock.
|
||||||
|
//
|
||||||
|
// Prerequisites:
|
||||||
|
// - A running Valkey server (any version):
|
||||||
|
// docker run -d --name valkey -p 6379:6379 valkey/valkey:latest
|
||||||
|
// - AWS credentials configured (environment variables, AWS profile, or IAM role)
|
||||||
|
// - Access to an Amazon Bedrock model (e.g., Anthropic Claude)
|
||||||
|
|
||||||
|
using Amazon;
|
||||||
|
using Amazon.BedrockRuntime;
|
||||||
|
using Microsoft.Agents.AI;
|
||||||
|
using Microsoft.Agents.AI.Valkey;
|
||||||
|
using Microsoft.Extensions.AI;
|
||||||
|
using Valkey.Glide;
|
||||||
|
|
||||||
|
var awsRegion = Environment.GetEnvironmentVariable("AWS_REGION") ?? "us-east-1";
|
||||||
|
var modelId = Environment.GetEnvironmentVariable("BEDROCK_MODEL_ID") ?? "anthropic.claude-3-5-sonnet-20241022-v2:0";
|
||||||
|
var valkeyConnection = Environment.GetEnvironmentVariable("VALKEY_CONNECTION") ?? "localhost:6379";
|
||||||
|
|
||||||
|
// Create the Bedrock runtime client.
|
||||||
|
var bedrockRuntime = new AmazonBedrockRuntimeClient(RegionEndpoint.GetBySystemName(awsRegion));
|
||||||
|
IChatClient chatClient = bedrockRuntime.AsIChatClient(modelId);
|
||||||
|
|
||||||
|
var connection = await ConnectionMultiplexer.ConnectAsync(valkeyConnection);
|
||||||
|
|
||||||
|
Console.WriteLine("=== ValkeyChatHistoryProvider — Persistent Chat History (Bedrock) ===\n");
|
||||||
|
|
||||||
|
var historyProvider = new ValkeyChatHistoryProvider(
|
||||||
|
connection,
|
||||||
|
_ => new ValkeyChatHistoryProvider.State($"bedrock-sample-{Guid.NewGuid():N}"),
|
||||||
|
new ValkeyChatHistoryProviderOptions
|
||||||
|
{
|
||||||
|
KeyPrefix = "bedrock_chat",
|
||||||
|
MaxMessages = 20
|
||||||
|
});
|
||||||
|
|
||||||
|
AIAgent historyAgent = chatClient.AsAIAgent(new ChatClientAgentOptions()
|
||||||
|
{
|
||||||
|
ChatOptions = new() { Instructions = "You are a helpful assistant that remembers our conversation." },
|
||||||
|
ChatHistoryProvider = historyProvider
|
||||||
|
});
|
||||||
|
|
||||||
|
AgentSession session1 = await historyAgent.CreateSessionAsync();
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("Hello! My name is Alex and I'm a software engineer.", session1));
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("I'm working on a project using Valkey for caching.", session1));
|
||||||
|
Console.WriteLine(await historyAgent.RunAsync("What do you remember about me?", session1));
|
||||||
|
|
||||||
|
var messageCount = await historyProvider.GetMessageCountAsync(session1);
|
||||||
|
Console.WriteLine($"\n Stored {messageCount} messages in Valkey.\n");
|
||||||
|
|
||||||
|
// Clean up
|
||||||
|
connection.Dispose();
|
||||||
|
|
||||||
|
Console.WriteLine("Done!");
|
||||||
+41
@@ -0,0 +1,41 @@
|
|||||||
|
# Agent with Memory Using Valkey + Amazon Bedrock
|
||||||
|
|
||||||
|
This sample demonstrates using Valkey for persistent chat history with the Agent Framework, powered by Amazon Bedrock via the `AWSSDK.Extensions.Bedrock.MEAI` adapter.
|
||||||
|
|
||||||
|
## Components
|
||||||
|
|
||||||
|
- **ValkeyChatHistoryProvider** — Persists conversation history across sessions using Valkey lists. Works with any Valkey or Redis OSS server (no search module required).
|
||||||
|
- **Amazon Bedrock** — Provides the LLM via `AWSSDK.Extensions.Bedrock.MEAI`, which implements `IChatClient` from `Microsoft.Extensions.AI`.
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
- AWS credentials configured (environment variables, AWS CLI profile, or IAM role)
|
||||||
|
- Access to an Amazon Bedrock model (e.g., Anthropic Claude 3.5 Sonnet)
|
||||||
|
- A running Valkey server (any version):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d --name valkey -p 6379:6379 valkey/valkey:latest
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
| Variable | Description | Default |
|
||||||
|
|---|---|---|
|
||||||
|
| `AWS_REGION` | AWS region for Bedrock | `us-east-1` |
|
||||||
|
| `BEDROCK_MODEL_ID` | Bedrock model identifier | `anthropic.claude-3-5-sonnet-20241022-v2:0` |
|
||||||
|
| `VALKEY_CONNECTION` | Valkey connection string | `localhost:6379` |
|
||||||
|
| `AWS_ACCESS_KEY_ID` | AWS access key (if not using profile/role) | — |
|
||||||
|
| `AWS_SECRET_ACCESS_KEY` | AWS secret key (if not using profile/role) | — |
|
||||||
|
|
||||||
|
## Running
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Using default AWS credential chain (profile, env vars, or IAM role)
|
||||||
|
dotnet run
|
||||||
|
|
||||||
|
# Or with explicit credentials
|
||||||
|
export AWS_ACCESS_KEY_ID="your-access-key"
|
||||||
|
export AWS_SECRET_ACCESS_KEY="your-secret-key"
|
||||||
|
export AWS_REGION="us-east-1"
|
||||||
|
dotnet run
|
||||||
|
```
|
||||||
+2
-2
@@ -13,9 +13,9 @@ using Azure.Identity;
|
|||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
using Microsoft.Agents.AI.Foundry;
|
using Microsoft.Agents.AI.Foundry;
|
||||||
|
|
||||||
string foundryEndpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string foundryEndpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string memoryStoreName = Environment.GetEnvironmentVariable("AZURE_AI_MEMORY_STORE_ID") ?? "memory-store-sample";
|
string memoryStoreName = Environment.GetEnvironmentVariable("AZURE_AI_MEMORY_STORE_ID") ?? "memory-store-sample";
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
string embeddingModelName = Environment.GetEnvironmentVariable("AZURE_AI_EMBEDDING_DEPLOYMENT_NAME") ?? "text-embedding-ada-002";
|
string embeddingModelName = Environment.GetEnvironmentVariable("AZURE_AI_EMBEDDING_DEPLOYMENT_NAME") ?? "text-embedding-ada-002";
|
||||||
|
|
||||||
// Create an AIProjectClient for Foundry with Azure Identity authentication.
|
// Create an AIProjectClient for Foundry with Azure Identity authentication.
|
||||||
|
|||||||
+3
-3
@@ -1,4 +1,4 @@
|
|||||||
# Agent with Memory Using Microsoft Foundry
|
# Agent with Memory Using Microsoft Foundry
|
||||||
|
|
||||||
This sample demonstrates how to create and run an agent that uses Microsoft Foundry's managed memory service to extract and retrieve individual memories across sessions.
|
This sample demonstrates how to create and run an agent that uses Microsoft Foundry's managed memory service to extract and retrieve individual memories across sessions.
|
||||||
|
|
||||||
@@ -22,11 +22,11 @@ This sample demonstrates how to create and run an agent that uses Microsoft Foun
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Microsoft Foundry project endpoint and memory store name
|
# Microsoft Foundry project endpoint and memory store name
|
||||||
export AZURE_AI_PROJECT_ENDPOINT="https://your-account.services.ai.azure.com/api/projects/your-project"
|
export FOUNDRY_PROJECT_ENDPOINT="https://your-account.services.ai.azure.com/api/projects/your-project"
|
||||||
export AZURE_AI_MEMORY_STORE_ID="my_memory_store"
|
export AZURE_AI_MEMORY_STORE_ID="my_memory_store"
|
||||||
|
|
||||||
# Model deployment names (models deployed in your Foundry project)
|
# Model deployment names (models deployed in your Foundry project)
|
||||||
export AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
export FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
export AZURE_AI_EMBEDDING_DEPLOYMENT_NAME="text-embedding-ada-002"
|
export AZURE_AI_EMBEDDING_DEPLOYMENT_NAME="text-embedding-ada-002"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -13,8 +13,8 @@ using OpenAI.Files;
|
|||||||
using OpenAI.Responses;
|
using OpenAI.Responses;
|
||||||
using OpenAI.VectorStores;
|
using OpenAI.VectorStores;
|
||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
var deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// Create an AI Project client and get an OpenAI client that works with the foundry service.
|
// Create an AI Project client and get an OpenAI client that works with the foundry service.
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@
|
|||||||
<PackageReference Include="Azure.AI.OpenAI" Version="2.9.0-beta.1" />
|
<PackageReference Include="Azure.AI.OpenAI" Version="2.9.0-beta.1" />
|
||||||
<PackageReference Include="Azure.Identity" Version="1.19.0" />
|
<PackageReference Include="Azure.Identity" Version="1.19.0" />
|
||||||
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-rc4" />
|
<PackageReference Include="Microsoft.Agents.AI.OpenAI" Version="1.0.0-rc4" />
|
||||||
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.4.0" />
|
<PackageReference Include="Microsoft.Extensions.AI.OpenAI" Version="10.6.0" />
|
||||||
<PackageReference Include="Neo4j.AgentFramework.GraphRAG" Version="0.1.0-preview.2" />
|
<PackageReference Include="Neo4j.AgentFramework.GraphRAG" Version="0.1.0-preview.2" />
|
||||||
<PackageReference Include="Neo4j.Driver" Version="5.28.0" />
|
<PackageReference Include="Neo4j.Driver" Version="5.28.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using ModelContextProtocol.Server;
|
using ModelContextProtocol.Server;
|
||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
var deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
var deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
This sample demonstrates how to expose an existing AI agent as an MCP tool.
|
This sample demonstrates how to expose an existing AI agent as an MCP tool.
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|
||||||
@@ -21,9 +21,9 @@ To use the [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector)
|
|||||||
```
|
```
|
||||||
1. Open a web browser and navigate to the URL displayed in the terminal. If not opened automatically, this will open the MCP Inspector interface.
|
1. Open a web browser and navigate to the URL displayed in the terminal. If not opened automatically, this will open the MCP Inspector interface.
|
||||||
1. In the MCP Inspector interface, add the following environment variables to allow your MCP server to access Microsoft Foundry Project to create and run the agent:
|
1. In the MCP Inspector interface, add the following environment variables to allow your MCP server to access Microsoft Foundry Project to create and run the agent:
|
||||||
- AZURE_AI_PROJECT_ENDPOINT = https://your-resource.openai.azure.com/ # Replace with your Microsoft Foundry Project endpoint
|
- FOUNDRY_PROJECT_ENDPOINT = https://your-resource.openai.azure.com/ # Replace with your Microsoft Foundry Project endpoint
|
||||||
- AZURE_AI_MODEL_DEPLOYMENT_NAME = gpt-5.4-mini # Replace with your model deployment name
|
- FOUNDRY_MODEL = gpt-5.4-mini # Replace with your model deployment name
|
||||||
1. Find and click the `Connect` button in the MCP Inspector interface to connect to the MCP server.
|
1. Find and click the `Connect` button in the MCP Inspector interface to connect to the MCP server.
|
||||||
1. As soon as the connection is established, open the `Tools` tab in the MCP Inspector interface and select the `Joker` tool from the list.
|
1. As soon as the connection is established, open the `Tools` tab in the MCP Inspector interface and select the `Joker` tool from the list.
|
||||||
1. Specify your prompt as a value for the `query` argument, for example: `Tell me a joke about a pirate` and click the `Run Tool` button to run the tool.
|
1. Specify your prompt as a value for the `query` argument, for example: `Tell me a joke about a pirate` and click the `Run Tool` button to run the tool.
|
||||||
1. The agent will process the request and return a response in accordance with the provided instructions that instruct it to always start each joke with 'Aye aye, captain!'.
|
1. The agent will process the request and return a response in accordance with the provided instructions that instruct it to always start each joke with 'Aye aye, captain!'.
|
||||||
|
|||||||
@@ -8,9 +8,9 @@ using Azure.AI.Agents.Persistent;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
|
|
||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
var deepResearchDeploymentName = Environment.GetEnvironmentVariable("AZURE_AI_REASONING_DEPLOYMENT_NAME") ?? "o3-deep-research";
|
var deepResearchDeploymentName = Environment.GetEnvironmentVariable("AZURE_AI_REASONING_DEPLOYMENT_NAME") ?? "o3-deep-research";
|
||||||
var modelDeploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
var modelDeploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
var bingConnectionId = Environment.GetEnvironmentVariable("AZURE_AI_BING_CONNECTION_ID") ?? throw new InvalidOperationException("AZURE_AI_BING_CONNECTION_ID is not set.");
|
var bingConnectionId = Environment.GetEnvironmentVariable("AZURE_AI_BING_CONNECTION_ID") ?? throw new InvalidOperationException("AZURE_AI_BING_CONNECTION_ID is not set.");
|
||||||
|
|
||||||
// Configure extended network timeout for long-running Deep Research tasks.
|
// Configure extended network timeout for long-running Deep Research tasks.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# What this sample demonstrates
|
# What this sample demonstrates
|
||||||
|
|
||||||
This sample demonstrates how to create an Azure AI Agent with the Deep Research Tool, which leverages the o3-deep-research reasoning model to perform comprehensive research on complex topics.
|
This sample demonstrates how to create an Azure AI Agent with the Deep Research Tool, which leverages the o3-deep-research reasoning model to perform comprehensive research on complex topics.
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ Set the following environment variables:
|
|||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
# Replace with your Microsoft Foundry project endpoint
|
# Replace with your Microsoft Foundry project endpoint
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com/"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-project.services.ai.azure.com/"
|
||||||
|
|
||||||
# Replace with your Bing Grounding connection ID (full ARM resource URI)
|
# Replace with your Bing Grounding connection ID (full ARM resource URI)
|
||||||
$env:AZURE_AI_BING_CONNECTION_ID="/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<account>/projects/<project>/connections/<connection-name>"
|
$env:AZURE_AI_BING_CONNECTION_ID="/subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.CognitiveServices/accounts/<account>/projects/<project>/connections/<connection-name>"
|
||||||
@@ -46,4 +46,4 @@ $env:AZURE_AI_BING_CONNECTION_ID="/subscriptions/<sub-id>/resourceGroups/<rg>/pr
|
|||||||
$env:AZURE_AI_REASONING_DEPLOYMENT_NAME="o3-deep-research"
|
$env:AZURE_AI_REASONING_DEPLOYMENT_NAME="o3-deep-research"
|
||||||
|
|
||||||
# Optional, defaults to gpt-5.4-mini
|
# Optional, defaults to gpt-5.4-mini
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
|
|||||||
@@ -40,6 +40,9 @@ using OpenAI.Chat;
|
|||||||
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
|
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new InvalidOperationException("AZURE_OPENAI_ENDPOINT is not set.");
|
||||||
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
var chatClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
var chatClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
|
||||||
.GetChatClient(deploymentName);
|
.GetChatClient(deploymentName);
|
||||||
|
|
||||||
|
|||||||
+6
-3
@@ -9,13 +9,16 @@ using Azure.AI.Projects.Agents;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI.Foundry;
|
using Microsoft.Agents.AI.Foundry;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
const string JokerName = "JokerAgent";
|
const string JokerName = "JokerAgent";
|
||||||
|
|
||||||
// Create the AIProjectClient to manage server-side agents.
|
// Create the AIProjectClient to manage server-side agents.
|
||||||
AIProjectClient aiProjectClient = new(new Uri(endpoint), new AzureCliCredential());
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
|
AIProjectClient aiProjectClient = new(new Uri(endpoint), new DefaultAzureCredential());
|
||||||
|
|
||||||
// Create a server-side agent version using the native SDK.
|
// Create a server-side agent version using the native SDK.
|
||||||
ProjectsAgentVersion agentVersion = await aiProjectClient.AgentAdministrationClient.CreateAgentVersionAsync(
|
ProjectsAgentVersion agentVersion = await aiProjectClient.AgentAdministrationClient.CreateAgentVersionAsync(
|
||||||
|
|||||||
+4
-4
@@ -1,4 +1,4 @@
|
|||||||
# Agent Step 00 - FoundryAgent Lifecycle
|
# Agent Step 00 - FoundryAgent Lifecycle
|
||||||
|
|
||||||
This sample demonstrates the full lifecycle of a `FoundryAgent` backed by a server-side versioned agent in Microsoft Foundry: create → run → delete.
|
This sample demonstrates the full lifecycle of a `FoundryAgent` backed by a server-side versioned agent in Microsoft Foundry: create → run → delete.
|
||||||
|
|
||||||
@@ -6,14 +6,14 @@ This sample demonstrates the full lifecycle of a `FoundryAgent` backed by a serv
|
|||||||
|
|
||||||
- A Microsoft Foundry project endpoint
|
- A Microsoft Foundry project endpoint
|
||||||
- A model deployment name (defaults to `gpt-5.4-mini`)
|
- A model deployment name (defaults to `gpt-5.4-mini`)
|
||||||
- Azure CLI installed and authenticated
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
## Environment Variables
|
## Environment Variables
|
||||||
|
|
||||||
| Variable | Description | Required |
|
| Variable | Description | Required |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `AZURE_AI_PROJECT_ENDPOINT` | Microsoft Foundry project endpoint | Yes |
|
| `FOUNDRY_PROJECT_ENDPOINT` | Microsoft Foundry project endpoint | Yes |
|
||||||
| `AZURE_AI_MODEL_DEPLOYMENT_NAME` | Model deployment name | No (defaults to `gpt-5.4-mini`) |
|
| `FOUNDRY_MODEL` | Model deployment name | No (defaults to `gpt-5.4-mini`) |
|
||||||
|
|
||||||
## Running the sample
|
## Running the sample
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ using Azure.AI.Projects;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -14,15 +14,15 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (for Azure credential authentication)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
**Note**: This demo uses Azure CLI credentials for authentication. Make sure you're logged in with `az login` and have access to the Microsoft Foundry resource. For more information, see the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively).
|
**Note**: This sample uses `DefaultAzureCredential`. `az login` is the easiest local development path, but Visual Studio, VS Code, and managed identity credentials also work when available.
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -7,8 +7,8 @@ using Azure.AI.Projects;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+4
-4
@@ -15,15 +15,15 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (for Azure credential authentication)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
**Note**: This demo uses Azure CLI credentials for authentication. Make sure you're logged in with `az login` and have access to the Microsoft Foundry resource. For more information, see the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively).
|
**Note**: This sample uses `DefaultAzureCredential`. `az login` is the easiest local development path, but Visual Studio, VS Code, and managed identity credentials also work when available.
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ using Azure.AI.Projects;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+4
-4
@@ -15,15 +15,15 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (for Azure credential authentication)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
**Note**: This demo uses Azure CLI credentials for authentication. Make sure you're logged in with `az login` and have access to the Microsoft Foundry resource. For more information, see the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively).
|
**Note**: This sample uses `DefaultAzureCredential`. `az login` is the easiest local development path, but Visual Studio, VS Code, and managed identity credentials also work when available.
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -15,8 +15,8 @@ static string GetWeather([Description("The location to get the weather for.")] s
|
|||||||
// Define the function tool.
|
// Define the function tool.
|
||||||
AITool tool = AIFunctionFactory.Create(GetWeather);
|
AITool tool = AIFunctionFactory.Create(GetWeather);
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+4
-4
@@ -16,15 +16,15 @@ Before you begin, ensure you have the following prerequisites:
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (for Azure credential authentication)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
**Note**: This demo uses Azure CLI credentials for authentication. Make sure you're logged in with `az login` and have access to the Microsoft Foundry resource. For more information, see the [Azure CLI documentation](https://learn.microsoft.com/cli/azure/authenticate-azure-cli-interactively).
|
**Note**: This sample uses `DefaultAzureCredential`. `az login` is the easiest local development path, but Visual Studio, VS Code, and managed identity credentials also work when available.
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -12,8 +12,8 @@ using Microsoft.Extensions.AI;
|
|||||||
static string GetWeather([Description("The location to get the weather for.")] string location)
|
static string GetWeather([Description("The location to get the weather for.")] string location)
|
||||||
=> $"The weather in {location} is cloudy with a high of 15°C.";
|
=> $"The weather in {location} is cloudy with a high of 15°C.";
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+3
-3
@@ -13,13 +13,13 @@ This sample demonstrates how to use function tools that require human-in-the-loo
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ using SampleApp;
|
|||||||
|
|
||||||
#pragma warning disable CA5399
|
#pragma warning disable CA5399
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ This sample demonstrates how to configure an agent to produce structured output
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -7,8 +7,8 @@ using Azure.AI.Projects;
|
|||||||
using Azure.Identity;
|
using Azure.Identity;
|
||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+3
-3
@@ -13,13 +13,13 @@ This sample demonstrates how to persist and resume agent conversations using ses
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ using OpenTelemetry;
|
|||||||
using OpenTelemetry.Trace;
|
using OpenTelemetry.Trace;
|
||||||
|
|
||||||
string? applicationInsightsConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING");
|
string? applicationInsightsConnectionString = Environment.GetEnvironmentVariable("APPLICATIONINSIGHTS_CONNECTION_STRING");
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// Create TracerProvider with console exporter.
|
// Create TracerProvider with console exporter.
|
||||||
string sourceName = Guid.NewGuid().ToString("N");
|
string sourceName = Guid.NewGuid().ToString("N");
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample demonstrates how to add OpenTelemetry observability to an agent usin
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
$env:APPLICATIONINSIGHTS_CONNECTION_STRING="..." # Optional
|
$env:APPLICATIONINSIGHTS_CONNECTION_STRING="..." # Optional
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ using Microsoft.Extensions.DependencyInjection;
|
|||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using SampleApp;
|
using SampleApp;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
+3
-3
@@ -13,13 +13,13 @@ This sample demonstrates how to register a `ChatClientAgent` in a dependency inj
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
+2
-2
@@ -9,8 +9,8 @@ using Microsoft.Agents.AI;
|
|||||||
using Microsoft.Extensions.AI;
|
using Microsoft.Extensions.AI;
|
||||||
using ModelContextProtocol.Client;
|
using ModelContextProtocol.Client;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// Connect to the Microsoft Learn MCP server via HTTP (Streamable HTTP transport).
|
// Connect to the Microsoft Learn MCP server via HTTP (Streamable HTTP transport).
|
||||||
Console.WriteLine("Connecting to MCP server at https://learn.microsoft.com/api/mcp ...");
|
Console.WriteLine("Connecting to MCP server at https://learn.microsoft.com/api/mcp ...");
|
||||||
|
|||||||
+3
-3
@@ -12,14 +12,14 @@ This sample shows how to use MCP (Model Context Protocol) client tools with a `C
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
- Node.js installed (for npx/MCP server)
|
- Node.js installed (for npx/MCP server)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ using Azure.Identity;
|
|||||||
using Microsoft.Agents.AI;
|
using Microsoft.Agents.AI;
|
||||||
using Microsoft.Extensions.AI;
|
using Microsoft.Extensions.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample demonstrates how to use image multi-modality with an agent.
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and a vision-capable model deployment (e.g., `gpt-5.4-mini`)
|
- Microsoft Foundry service endpoint and a vision-capable model deployment (e.g., `gpt-5.4-mini`)
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ using Microsoft.Extensions.AI;
|
|||||||
static string GetWeather([Description("The location to get the weather for.")] string location)
|
static string GetWeather([Description("The location to get the weather for.")] string location)
|
||||||
=> $"The weather in {location} is cloudy with a high of 15°C.";
|
=> $"The weather in {location} is cloudy with a high of 15°C.";
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample demonstrates how to use one agent as a function tool for another age
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ static string GetWeather([Description("The location to get the weather for.")] s
|
|||||||
static string GetDateTime()
|
static string GetDateTime()
|
||||||
=> DateTimeOffset.Now.ToString();
|
=> DateTimeOffset.Now.ToString();
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ This sample demonstrates multiple middleware layers working together: PII filter
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ using Microsoft.Extensions.AI;
|
|||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using SampleApp;
|
using SampleApp;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
const string AssistantInstructions = "You are a helpful assistant that helps people find information.";
|
const string AssistantInstructions = "You are a helpful assistant that helps people find information.";
|
||||||
const string AssistantName = "PluginAssistant";
|
const string AssistantName = "PluginAssistant";
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample shows how to use plugins with a `ChatClientAgent` using the Response
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ using OpenAI.Assistants;
|
|||||||
const string AgentInstructions = "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.";
|
const string AgentInstructions = "You are a personal math tutor. When asked a math question, write and run code using the python tool to answer the question.";
|
||||||
const string AgentName = "CoderAgent-RAPI";
|
const string AgentName = "CoderAgent-RAPI";
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ This sample shows how to use the Code Interpreter tool with a `ChatClientAgent`
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -10,9 +10,12 @@ using Microsoft.Agents.AI.Foundry;
|
|||||||
using Microsoft.Extensions.AI;
|
using Microsoft.Extensions.AI;
|
||||||
using OpenAI.Responses;
|
using OpenAI.Responses;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_COMPUTER_USE_DEPLOYMENT_NAME") ?? "computer-use-preview";
|
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_COMPUTER_USE_DEPLOYMENT_NAME") ?? "computer-use-preview";
|
||||||
|
|
||||||
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
// latency issues, unintended credential probing, and potential security risks from fallback mechanisms.
|
||||||
AIProjectClient projectClient = new(new Uri(endpoint), new DefaultAzureCredential());
|
AIProjectClient projectClient = new(new Uri(endpoint), new DefaultAzureCredential());
|
||||||
using IHostedFileClient fileClient = projectClient.GetProjectOpenAIClient().AsIHostedFileClient();
|
using IHostedFileClient fileClient = projectClient.GetProjectOpenAIClient().AsIHostedFileClient();
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
# Computer Use with the Responses API
|
# Computer Use with the Responses API
|
||||||
|
|
||||||
This sample shows how to use the Computer Use tool with `AIProjectClient.AsAIAgent(...)`.
|
This sample shows how to use the Computer Use tool with `AIProjectClient.AsAIAgent(...)`.
|
||||||
|
|
||||||
@@ -39,12 +39,12 @@ The model receives a screenshot as input, analyzes it, and responds with a compu
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_COMPUTER_USE_DEPLOYMENT_NAME="computer-use-preview"
|
$env:AZURE_AI_COMPUTER_USE_DEPLOYMENT_NAME="computer-use-preview"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ using Microsoft.Extensions.AI;
|
|||||||
using OpenAI.Assistants;
|
using OpenAI.Assistants;
|
||||||
using OpenAI.Files;
|
using OpenAI.Files;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
const string AgentInstructions = "You are a helpful assistant that can search through uploaded files to answer questions.";
|
const string AgentInstructions = "You are a helpful assistant that can search through uploaded files to answer questions.";
|
||||||
|
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample shows how to use the File Search tool with a `ChatClientAgent` using
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -9,8 +9,8 @@ using Microsoft.Agents.AI;
|
|||||||
using Microsoft.Agents.AI.Foundry;
|
using Microsoft.Agents.AI.Foundry;
|
||||||
using Microsoft.Extensions.AI;
|
using Microsoft.Extensions.AI;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
const string AgentInstructions = "You are a helpful assistant that can use the countries API to retrieve information about countries by their currency code.";
|
const string AgentInstructions = "You are a helpful assistant that can use the countries API to retrieve information about countries by their currency code.";
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
|
|||||||
@@ -13,13 +13,13 @@ This sample shows how to use OpenAPI tools with a `ChatClientAgent` using the Re
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ BingCustomSearchToolOptions bingCustomSearchToolParameters = new([
|
|||||||
new BingCustomSearchConfiguration(connectionId, instanceName)
|
new BingCustomSearchConfiguration(connectionId, instanceName)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ This sample shows how to use the Bing Custom Search tool with a `ChatClientAgent
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
- Bing Custom Search resource configured with a connection ID
|
- Bing Custom Search resource configured with a connection ID
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
$env:AZURE_AI_CUSTOM_SEARCH_CONNECTION_ID="your-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/your-bing-connection"
|
$env:AZURE_AI_CUSTOM_SEARCH_CONNECTION_ID="your-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/your-bing-connection"
|
||||||
$env:AZURE_AI_CUSTOM_SEARCH_INSTANCE_NAME="your-instance-name" # The Bing Custom Search configuration name (from Azure portal)
|
$env:AZURE_AI_CUSTOM_SEARCH_INSTANCE_NAME="your-instance-name" # The Bing Custom Search configuration name (from Azure portal)
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ const string AgentInstructions = """
|
|||||||
var sharepointOptions = new SharePointGroundingToolOptions();
|
var sharepointOptions = new SharePointGroundingToolOptions();
|
||||||
sharepointOptions.ProjectConnections.Add(new ToolProjectConnection(sharepointConnectionId));
|
sharepointOptions.ProjectConnections.Add(new ToolProjectConnection(sharepointConnectionId));
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ This sample shows how to use the SharePoint Grounding tool with a `ChatClientAge
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
- SharePoint connection configured in your Microsoft Foundry project
|
- SharePoint connection configured in your Microsoft Foundry project
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
$env:SHAREPOINT_PROJECT_CONNECTION_ID="your-sharepoint-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/SharepointTestTool"
|
$env:SHAREPOINT_PROJECT_CONNECTION_ID="your-sharepoint-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/SharepointTestTool"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,8 @@ const string AgentInstructions = "You are a helpful assistant with access to Mic
|
|||||||
var fabricToolOptions = new FabricDataAgentToolOptions();
|
var fabricToolOptions = new FabricDataAgentToolOptions();
|
||||||
fabricToolOptions.ProjectConnections.Add(new ToolProjectConnection(fabricConnectionId));
|
fabricToolOptions.ProjectConnections.Add(new ToolProjectConnection(fabricConnectionId));
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ This sample shows how to use the Microsoft Fabric tool with a `ChatClientAgent`
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
- Microsoft Fabric connection configured in your Microsoft Foundry project
|
- Microsoft Fabric connection configured in your Microsoft Foundry project
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
$env:FABRIC_PROJECT_CONNECTION_ID="your-fabric-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/FabricTestTool"
|
$env:FABRIC_PROJECT_CONNECTION_ID="your-fabric-connection-id" # The full ARM resource URI, e.g., "/subscriptions/.../connections/FabricTestTool"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ using OpenAI.Responses;
|
|||||||
const string AgentInstructions = "You are a helpful assistant that can search the web to find current information and answer questions accurately.";
|
const string AgentInstructions = "You are a helpful assistant that can search the web to find current information and answer questions accurately.";
|
||||||
const string AgentName = "WebSearchAgent-RAPI";
|
const string AgentName = "WebSearchAgent-RAPI";
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
|
|
||||||
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
// WARNING: DefaultAzureCredential is convenient for development but requires careful consideration in production.
|
||||||
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
// In production, consider using a specific credential (e.g., ManagedIdentityCredential) to avoid
|
||||||
|
|||||||
@@ -12,13 +12,13 @@ This sample shows how to use the Web Search tool with a `ChatClientAgent` using
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Run the sample
|
## Run the sample
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ using Microsoft.Agents.AI.Foundry;
|
|||||||
using Microsoft.Extensions.AI;
|
using Microsoft.Extensions.AI;
|
||||||
using OpenAI.Responses;
|
using OpenAI.Responses;
|
||||||
|
|
||||||
string endpoint = Environment.GetEnvironmentVariable("AZURE_AI_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("AZURE_AI_PROJECT_ENDPOINT is not set.");
|
string endpoint = Environment.GetEnvironmentVariable("FOUNDRY_PROJECT_ENDPOINT") ?? throw new InvalidOperationException("FOUNDRY_PROJECT_ENDPOINT is not set.");
|
||||||
string deploymentName = Environment.GetEnvironmentVariable("AZURE_AI_MODEL_DEPLOYMENT_NAME") ?? "gpt-5.4-mini";
|
string deploymentName = Environment.GetEnvironmentVariable("FOUNDRY_MODEL") ?? "gpt-5.4-mini";
|
||||||
string embeddingModelName = Environment.GetEnvironmentVariable("AZURE_AI_EMBEDDING_DEPLOYMENT_NAME") ?? "text-embedding-ada-002";
|
string embeddingModelName = Environment.GetEnvironmentVariable("AZURE_AI_EMBEDDING_DEPLOYMENT_NAME") ?? "text-embedding-ada-002";
|
||||||
string memoryStoreName = Environment.GetEnvironmentVariable("AZURE_AI_MEMORY_STORE_ID") ?? $"foundry-memory-sample-{Guid.NewGuid():N}";
|
string memoryStoreName = Environment.GetEnvironmentVariable("AZURE_AI_MEMORY_STORE_ID") ?? $"foundry-memory-sample-{Guid.NewGuid():N}";
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ This sample demonstrates how to use the Memory Search tool with a `ChatClientAge
|
|||||||
|
|
||||||
- .NET 10 SDK or later
|
- .NET 10 SDK or later
|
||||||
- Microsoft Foundry service endpoint and deployment configured
|
- Microsoft Foundry service endpoint and deployment configured
|
||||||
- Azure CLI installed and authenticated (`az login`)
|
- An authenticated Azure identity (for example, sign in with `az login`)
|
||||||
- A memory store created beforehand via Azure Portal or Python SDK
|
- A memory store created beforehand via Azure Portal or Python SDK
|
||||||
|
|
||||||
Set the following environment variables:
|
Set the following environment variables:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
$env:AZURE_AI_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
$env:FOUNDRY_PROJECT_ENDPOINT="https://your-foundry-service.services.ai.azure.com/api/projects/your-foundry-project"
|
||||||
$env:AZURE_AI_MODEL_DEPLOYMENT_NAME="gpt-5.4-mini"
|
$env:FOUNDRY_MODEL="gpt-5.4-mini"
|
||||||
$env:AZURE_AI_MEMORY_STORE_ID="your-memory-store-name"
|
$env:AZURE_AI_MEMORY_STORE_ID="your-memory-store-name"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user