Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7f3b021
add limition to py
nadoylemsft Nov 24, 2025
b14ea37
rmv mjs node
nadoylemsft Nov 24, 2025
b15a032
add agent templating poc
nadoylemsft Nov 24, 2025
25c0d61
upd pipeline
nadoylemsft Nov 24, 2025
685622a
add agent template gallery and start of ai foundry agents
nadoylemsft Dec 4, 2025
2bffb24
Merge branch 'Development' into feature/aifoundryagents
nadoylemsft Dec 21, 2025
9b1e83b
push for paul
nadoylemsft Jan 13, 2026
8d9c0d8
add conversationid query param
nadoylemsft Jan 20, 2026
d6e5072
move abp docs
nadoylemsft Jan 20, 2026
c271874
Merge branch 'Development' into feature/aifoundryagents
nadoylemsft Jan 20, 2026
17eefbb
add plugin/tool auth definitions
nadoylemsft Jan 22, 2026
2427cda
upd lang instructions + fix
nadoylemsft Jan 22, 2026
b2b8db9
adad web search--upd/fixes for control center
nadoylemsft Jan 22, 2026
08fa386
Merge branch 'Development' into feature/aifoundryagents
nadoylemsft Jan 22, 2026
f8bef03
upd pipelines
nadoylemsft Jan 22, 2026
6484c7e
add swagger
nadoylemsft Jan 22, 2026
a17853a
Merge branch 'Development' into feature/aifoundryagents
paullizer Jan 22, 2026
cab705c
upd to pipelines
nadoylemsft Jan 22, 2026
ac60d46
add max lengths checks for payload and templates
nadoylemsft Jan 22, 2026
46e12d2
Merge branch 'feature/aifoundryagents' of https://github.com/microsof…
nadoylemsft Jan 22, 2026
2f59693
fix missing swagger import
nadoylemsft Jan 22, 2026
83f6198
add code doc for behavior
nadoylemsft Jan 22, 2026
3323685
add submittedAt back
nadoylemsft Jan 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions .github/instructions/javascript-lang.instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
applyTo: '**/*.js'
---

# JavaScript Language Guide

- Files should start with a comment of the file name. Ex: `// functions_personal_agents.js`

- Imports should be grouped at the top of the document after the module docstring, unless otherwise indicated by the user or for performance reasons in which case the import should be as close as possible to the usage with a documented note as to why the import is not at the top of the file.

- Use 4 spaces per indentation level. No tabs.

- Code and definitions should occur after the imports block.

- Use camelCase for variable and function names. Ex: `myVariable`, `getUserData()`

- Use PascalCase for class names. Ex: `MyClass`

- Do not use display:none. Instead add and remove the d-none class when hiding or showing elements.

- Prefer inline html notifications or toast messages using Bootstrap alert classes over browser alert() calls.
6 changes: 4 additions & 2 deletions .github/instructions/python-lang.instructions.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
---
applyTo: '**'
applyTo: '**/*.py'
---

# Python Language Guide
Expand All @@ -10,4 +10,6 @@ applyTo: '**'

- Use 4 spaces per indentation level. No tabs.

- Code and definitions should occur after the imports block.
- Code and definitions should occur after the imports block.

- Prefer log_event from functions_appinsights.py for logging activites.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ When building or working with Python frontend routes (Flask routes that render t

## Required Pattern

### Exception: Admin Routes should NEVER be sanitized as it breaks many admin features.

### ✅ CORRECT - Sanitize Before Sending
```python
from functions_settings import get_settings, sanitize_settings_for_user
Expand Down
26 changes: 16 additions & 10 deletions .github/workflows/docker_image_publish.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

name: SimpleChat Docker Image Publish

on:
Expand All @@ -8,26 +7,33 @@ on:
workflow_dispatch:

jobs:

build:

runs-on: ubuntu-latest

steps:
- name: Azure Container Registry Login
uses: Azure/docker-login@v2
with:
# Container registry username
username: ${{ secrets.ACR_USERNAME }}
username: ${{ secrets.MAIN_ACR_USERNAME }}
# Container registry password
password: ${{ secrets.ACR_PASSWORD }}
password: ${{ secrets.MAIN_ACR_PASSWORD }}
# Container registry server url
login-server: ${{ secrets.ACR_LOGIN_SERVER }}
login-server: ${{ secrets.MAIN_ACR_LOGIN_SERVER }}
- name: Normalize branch name for tag
run: |
REF="${GITHUB_REF_NAME}"
SAFE=$(echo "$REF" \
| tr '[:upper:]' '[:lower:]' \
| sed 's#[^a-z0-9._-]#-#g' \
| sed 's/^-*//;s/-*$//' \
| cut -c1-128)
echo "BRANCH_TAG=$SAFE" >> "$GITHUB_ENV"

- uses: actions/checkout@v3
- name: Build the Docker image
run:
docker build . --file application/single_app/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER;
docker tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:latest;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:latest;
docker build . --file application/single_app/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:latest;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat:latest;
56 changes: 49 additions & 7 deletions .github/workflows/docker_image_publish_dev.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@

name: SimpleChat Docker Image Publish (dev branch)
name: SimpleChat Docker Image Publish (development/staging branch)

on:
push:
branches:
- Development
- staging

workflow_dispatch:

jobs:

build:

build-tomain:
runs-on: ubuntu-latest

steps:
Expand All @@ -25,10 +24,53 @@ jobs:
# Container registry server url
login-server: ${{ secrets.ACR_LOGIN_SERVER }}

- name: Normalize branch name for tag
run: |
REF="${GITHUB_REF_NAME}"
SAFE=$(echo "$REF" \
| tr '[:upper:]' '[:lower:]' \
| sed 's#[^a-z0-9._-]#-#g' \
| sed 's/^-*//;s/-*$//' \
| cut -c1-128)
echo "BRANCH_TAG=$SAFE" >> "$GITHUB_ENV"

- uses: actions/checkout@v3
- name: Build the Docker image
run:
docker build . --file application/single_app/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER;
docker tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:latest;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_$GITHUB_RUN_NUMBER;
docker build . --file application/single_app/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker tag ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:latest;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker push ${{ secrets.ACR_LOGIN_SERVER }}/simple-chat-dev:latest;

build-nadoyle:
runs-on: ubuntu-latest

steps:
- name: Azure Container Registry Login
uses: Azure/docker-login@v2
with:
# Container registry username
username: ${{ secrets.ACR_USERNAME_NADOYLE }}
# Container registry password
password: ${{ secrets.ACR_PASSWORD_NADOYLE }}
# Container registry server url
login-server: ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}

- name: Normalize branch name for tag
run: |
REF="${GITHUB_REF_NAME}"
SAFE=$(echo "$REF" \
| tr '[:upper:]' '[:lower:]' \
| sed 's#[^a-z0-9._-]#-#g' \
| sed 's/^-*//;s/-*$//' \
| cut -c1-128)
echo "BRANCH_TAG=$SAFE" >> "$GITHUB_ENV"

- uses: actions/checkout@v3
- name: Build the Docker image
run:
docker build . --file application/single_app/Dockerfile --tag ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker tag ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}/simple-chat-dev:latest;
docker push ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}/simple-chat-dev:$(date +'%Y-%m-%d')_${BRANCH_TAG}_$GITHUB_RUN_NUMBER;
docker push ${{ secrets.ACR_LOGIN_SERVER_NADOYLE }}/simple-chat-dev:latest;

3 changes: 0 additions & 3 deletions .github/workflows/docker_image_publish_nadoyle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,7 @@ on:
push:
branches:
- nadoyle
- feature/group-agents-actions
- security/containerBuild
- feature/aifoundryagents
- azureBillingPlugin

workflow_dispatch:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# Azure Billing Action Instructions

## Overview
The Azure Billing action is an experimental Semantic Kernel plugin that helps agents explore Azure Cost Management data, generate CSV outputs, and render server-side charts for conversational reporting. It stitches together Azure REST APIs, matplotlib rendering, and Cosmos DB persistence so prototype agents can investigate subscriptions, budgets, alerts, and forecasts without touching the production portal. It leverages message injection (direct cosmos_messages_container access) to store chart images as conversation artifacts in lieu of embedding binary data in chat responses.
The Azure Billing action is an experimental Semantic Kernel plugin that helps agents explore Azure Cost Management data, generate CSV outputs, and render server-side charts for conversational reporting. It stitches together Azure REST APIs, matplotlib rendering, and Cosmos DB persistence so prototype agents can investigate subscriptions, budgets, alerts, and forecasts without touching the production portal. It leverages message injection (direct cosmos_messages_container access) to store chart images as conversation artifacts in lieu of embedding binary data in chat responses. You will need to move the ```azure_billing_plugin.py``` to the [semantic-kernel-plugins](../../../single_app/semantic_kernel_plugins/) folder, and move the ```schema.json``` and ```definition.json``` to the [schemas](../../../single_app/static/json/schemas) folder.

## Core capabilities
- Enumerate subscriptions and resource groups via `list_subscriptions*` helpers for quick scope discovery.
Expand Down Expand Up @@ -48,6 +48,5 @@ The Azure Billing action is an experimental Semantic Kernel plugin that helps ag

## Additional resources
- Review `instructions.md` in the same directory for the autonomous agent persona tailored to this action.
- Inspect `abd_proto.py` for prompt experimentation tied to Azure Billing dialogues.
- Leverage the sample CSV files to validate plotting offline before wiring the plugin into a notebook or agent loop.

2 changes: 2 additions & 0 deletions application/single_app/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
from route_backend_retention_policy import *
from route_backend_plugins import bpap as admin_plugins_bp, bpdp as dynamic_plugins_bp
from route_backend_agents import bpa as admin_agents_bp
from route_backend_agent_templates import bp_agent_templates
from route_backend_public_workspaces import *
from route_backend_public_documents import *
from route_backend_public_prompts import *
Expand Down Expand Up @@ -98,6 +99,7 @@
app.register_blueprint(admin_plugins_bp)
app.register_blueprint(dynamic_plugins_bp)
app.register_blueprint(admin_agents_bp)
app.register_blueprint(bp_agent_templates)
app.register_blueprint(plugin_validation_bp)
app.register_blueprint(bp_migration)
app.register_blueprint(plugin_logging_bp)
Expand Down
6 changes: 6 additions & 0 deletions application/single_app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,12 @@ def get_redis_cache_infrastructure_endpoint(redis_hostname: str) -> str:
partition_key=PartitionKey(path="/id")
)

cosmos_agent_templates_container_name = "agent_templates"
cosmos_agent_templates_container = cosmos_database.create_container_if_not_exists(
id=cosmos_agent_templates_container_name,
partition_key=PartitionKey(path="/id")
)

cosmos_agent_facts_container_name = "agent_facts"
cosmos_agent_facts_container = cosmos_database.create_container_if_not_exists(
id=cosmos_agent_facts_container_name,
Expand Down
Loading