diff --git a/.github/agents/lab-generator.agent.md b/.github/agents/lab-generator.agent.md
index d478537..45f2b88 100644
--- a/.github/agents/lab-generator.agent.md
+++ b/.github/agents/lab-generator.agent.md
@@ -27,7 +27,9 @@ You are modeled after the TireForge Industries foundry-hackathon lab. You know:
├── requirements.txt # Python dependencies (always the same base set)
├── challenge-0-setup/
│ ├── README.md
-│ └── deploy.sh # Provisions Azure resources + writes .env
+│ ├── azure.yaml # azd project definition
+│ ├── infra/main.bicep # Azure infrastructure
+│ └── scripts/write-env.ps1 # Writes the scenario .env
├── challenge-1-build/
│ ├── README.md
│ ├── agents.py # Two agents with system prompts + tool
@@ -80,7 +82,7 @@ Follow the exact code patterns from the reference lab:
- `README.md`: Scenario intro, entity table with statuses, prerequisites, challenge table, architecture diagram
- `FACILITATOR_GUIDE.md`: Timing guide, reconvene talking points connecting challenges, common errors
-- `deploy.sh`: Same Azure provisioning (AI Foundry project + model + App Insights)
+- `azure.yaml` and `infra/main.bicep`: Azure provisioning (AI Foundry project + model + App Insights)
- `requirements.txt`: Same Python dependencies
## Agent Design Patterns
@@ -124,7 +126,7 @@ When generating a lab, produce all files in order:
3. Domain data JSON
4. `evaluation_dataset.json`
5. Each challenge folder's `README.md` + Python file
-6. `deploy.sh`
+6. `azure.yaml` and `infra/main.bicep`
7. `FACILITATOR_GUIDE.md` last (references all challenges)
Always confirm the use case with the user before generating. Ask if they want any specific twists (e.g., "one entity should have compound failures" or "include a seasonal pattern").
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 686e5e7..f8e15c3 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -1,10 +1,10 @@
-# Microsoft Open Source Code of Conduct
+# Código de Conduta de Código Aberto da Microsoft
-This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
+Este projeto adotou o [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/).
-Resources:
+Recursos:
-- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
-- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
-- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
-- Employees can reach out at [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)
+- [Código de Conduta de Código Aberto da Microsoft](https://opensource.microsoft.com/codeofconduct/)
+- [Perguntas frequentes sobre o Código de Conduta da Microsoft](https://opensource.microsoft.com/codeofconduct/faq/)
+- Entre em contato com [opencode@microsoft.com](mailto:opencode@microsoft.com) em caso de dúvidas ou preocupações
+- Funcionários podem entrar em contato pelo endereço [aka.ms/opensource/moderation-support](https://aka.ms/opensource/moderation-support)
diff --git a/README.md b/README.md
index 58c79fd..a14460e 100644
--- a/README.md
+++ b/README.md
@@ -1,81 +1,83 @@
-# Build and Scale AI Agents with Microsoft Foundry
-## The Level 3: Architect learning path
+# Frontier Week Hack
+## Microsoft Foundry: Crie, escale, observa e proteja seus agentes de IA
-Welcome to the hands-on lab experience where ideas turn into real, enterprise-ready solutions. This is the most advanced of the three agent-building learning paths. Where the Explorer path builds your first no-code agent and the Maker path automates work with low-code tools, this path is for developers, engineers, and architects who want complete control over models, orchestration, and operations.
+Boas-vindas à experiência de laboratório prático onde ideias se transformam em soluções reais e prontas para empresas. Esta é a mais avançada das três trilhas de criação de agentes. Enquanto a trilha Explorer cria seu primeiro agente sem código e a trilha Maker automatiza tarefas com ferramentas low-code, esta trilha é voltada a desenvolvedores, engenheiros e arquitetos que desejam controle total sobre modelos, orquestração e operações.
-In this lab, you’ll build, monitor, evaluate, and orchestrate AI agents using the Microsoft Foundry SDK. You’ll follow a guided, scenario-based experience designed to help you move from concept to a working, enterprise-ready multi-agent system.
+Neste laboratório, você criará, monitorará, avaliará e orquestrará agentes de IA usando o SDK do Microsoft Foundry. Você seguirá uma experiência guiada e baseada em cenários, projetada para ajudar a transformar um conceito em um sistema multiagente funcional e pronto para empresas.
-By the end, you won’t just understand how agents work — you’ll have built one you can trace, evaluate, and deploy.
+Ao final, você não apenas entenderá como os agentes funcionam: terá criado um agente que pode rastrear, avaliar e implantar.
-All challenge instructions are also available at [microsoft.github.io/FrontierWeekHack](https://microsoft.github.io/FrontierWeekHack/).
+## O que você aprenderá
-## What You'll Learn
+Este laboratório orienta você por todo o ciclo de vida da criação de agentes de IA prontos para produção com o [Microsoft Foundry](https://learn.microsoft.com/azure/ai-foundry/):
-This lab walks you through the full lifecycle of building production-ready AI agents with [Microsoft Foundry](https://learn.microsoft.com/azure/ai-foundry/):
+- **Design de agentes** — Criar agentes especializados com prompts de sistema, ferramentas e dados específicos do domínio
+- **Observabilidade** — Instrumentar agentes com rastreamento de GenAI baseado em OpenTelemetry por meio do Application Insights
+- **Avaliação de qualidade** — Executar avaliações com LLM como juiz para medir sistematicamente a qualidade das saídas dos agentes
+- **Orquestração multiagente** — Conectar agentes a fluxos de trabalho automatizados usando o SDK do Python e o portal do Foundry
-- **Agent design** — Create purpose-built agents with system prompts, tools, and domain-specific data
-- **Observability** — Instrument agents with OpenTelemetry-based GenAI tracing via Application Insights
-- **Quality evaluation** — Run LLM-as-judge evaluations to systematically measure agent output quality
-- **Multi-agent orchestration** — Wire agents into automated workflows using the Python SDK and the Foundry portal
+Este é um **hackathon code-first**: você escreverá e executará Python ao longo de todo o percurso. No entanto, vários desafios também exigem interação com o **portal do Microsoft Foundry** para implantar modelos, explorar rastreamentos, revisar avaliações e criar fluxos de trabalho visualmente. Espere alternar regularmente entre seu IDE e o portal.
-This is a **code-first hackathon** — you'll write and run Python throughout. However, several challenges also have you interact with the **Microsoft Foundry portal** to deploy models, explore traces, review evaluations, and build workflows visually. Expect to move between your IDE and the portal regularly.
+## Escolha seu cenário
-## Choose Your Scenario
+Todas as trilhas ensinam os mesmos conceitos do Foundry — escolha aquela com a qual você mais se identifica:
-All paths teach the same Foundry concepts — pick the one that resonates with you the most:
-
-| Scenario | Description | Start Here |
+| Cenário | Descrição | Comece aqui |
|----------|-------------|------------|
-| 🏭 **Factory** | Detect machine anomalies and diagnose faults at TireForge Industries | [Factory Lab](./factory/README.md) |
-| 📋 **Claims** | Triage incoming claims and recommend actions at ClaimSight Insurance | [Claims Lab](./claims/README.md) |
-| 📞 **Call Center** | Classify call intents and advise resolutions at NovaTel Communications | [Call Center Lab](./callcenter/README.md) |
+| 🏭 **Fábrica** | Detectar anomalias em máquinas e diagnosticar falhas na TireForge Industries | [Laboratório de fábrica](./factory/README.md) |
+| 📋 **Sinistros** | Fazer a triagem de sinistros recebidos e recomendar ações na ClaimSight Insurance | [Laboratório de sinistros](./claims/README.md) |
+| 📞 **Central de atendimento** | Classificar intenções de chamadas e orientar resoluções na NovaTel Communications | [Laboratório de central de atendimento](./callcenter/README.md) |
-All scenarios follow the same 5-challenge structure:
+Todos os cenários seguem a mesma estrutura de cinco desafios:
-| # | Challenge | Duration | What You'll Learn |
+| # | Desafio | Duração | O que você aprenderá |
|---|-----------|----------|-------------------|
-| 0 | **Setup** | 20 min | Provision Microsoft Foundry, deploy a model, verify auth |
-| 1 | **Build Agents** | 35 min | Create two agents with tools and system prompts |
-| 2 | **Monitor** | 20 min | Enable GenAI tracing with Application Insights |
-| 3 | **Evaluate** | 25 min | Run LLM-as-judge evaluations against test datasets |
-| 4 | **Workflow** | 20 min | Orchestrate agents in a multi-step pipeline |
+| 0 | **Configuração** | 20 min | Provisionar o Microsoft Foundry, implantar um modelo e verificar a autenticação |
+| 1 | **Criar agentes** | 35 min | Criar dois agentes com ferramentas e prompts de sistema |
+| 2 | **Monitorar** | 20 min | Habilitar o rastreamento de GenAI com o Application Insights |
+| 3 | **Avaliar** | 25 min | Executar avaliações com LLM como juiz em conjuntos de dados de teste |
+| 4 | **Workflow** | 20 min | Orquestrar agentes em um pipeline de várias etapas |
-## Prerequisites
+## Pré-requisitos
-- **Azure subscription** with **Contributor** and **Foundry User** access
-- A **GitHub account**
-- **Python 3.10+** installed locally (pre-installed when using Codespaces)
-- **Azure CLI** (`az`) installed (pre-installed when using Codespaces)
+- **Assinatura do Azure** com acesso de **Colaborador** e **Usuário do Foundry**
+- Uma **conta do GitHub**
+- **Python 3.10 ou posterior** instalado localmente (pré-instalado ao usar Codespaces)
+- **Azure CLI** (`az`) instalada (pré-instalada ao usar Codespaces)
+- **Azure Developer CLI** (`azd`) instalada (pré-instalada ao usar Codespaces)
-## Ready to Expand Your Knowledge?
+## Implantar pelo diretório raiz
-### 1. Put Your Skills to the Test at the Microsoft Agent-a-Thon!
-You’ve built production-grade agents — now bring them to a live, hands-on build experience. The Microsoft Agent-a-Thon is where you apply everything from this path, get real-time support as you build, and compete for recognition and prizes. Register at [Microsoft Agent-a-Thon](https://www.microsoft.com/en-us/events/local-events/microsoft-agent-a-thon).
+O projeto `azd` na raiz provisiona o cenário da central de atendimento. Depois de autenticar no Azure, execute:
-### 2. Join the Tour!
+```bash
+az login
+azd auth login
+azd up
+```
-
+O comando cria os recursos no grupo de recursos do ambiente `azd` e gera o arquivo `.env` na raiz do repositório. Para alterar o ambiente ou a assinatura, use `azd env set` antes de executar `azd up`.
-Prefer to build alongside experts in the room? Spend a full day exploring advanced use cases, hands-on builds, and expert-led sessions designed to turn ideas into real business impact. Find the event nearest you on [EMEA Agentic AI Hacks - Microsoft Pulse](https://pulse.microsoft.com/en/build-ai-hacks-agentic-ai/).
+## Pronto para ampliar seus conhecimentos?
-### 3. Go deeper with the docs
+### 1. Aprofunde-se com a documentação
-- [What is Microsoft Foundry?](https://learn.microsoft.com/azure/foundry/what-is-foundry)
-- [Foundry Agent Service overview](https://learn.microsoft.com/azure/foundry/agents/overview)
-- [Trace your agents with Microsoft Foundry](https://learn.microsoft.com/azure/foundry/observability/how-to/trace-agent-setup)
-- [Evaluate agentic workflows](https://learn.microsoft.com/azure/foundry/observability/how-to/evaluate-agent)
-- [azure-ai-projects SDK Reference](https://learn.microsoft.com/python/api/azure-ai-projects/)
+- [O que é o Microsoft Foundry?](https://learn.microsoft.com/azure/foundry/what-is-foundry)
+- [Visão geral do Foundry Agent Service](https://learn.microsoft.com/azure/foundry/agents/overview)
+- [Rastreie seus agentes com o Microsoft Foundry](https://learn.microsoft.com/azure/foundry/observability/how-to/trace-agent-setup)
+- [Avalie fluxos de trabalho agentivos](https://learn.microsoft.com/azure/foundry/observability/how-to/evaluate-agent)
+- [Referência do SDK azure-ai-projects](https://learn.microsoft.com/python/api/azure-ai-projects/)
-### 4. Keep learning on Microsoft Learn
+### 2. Continue aprendendo no Microsoft Learn
-- [Develop an AI agent with Microsoft Foundry Agent Service](https://learn.microsoft.com/training/modules/develop-ai-agent-azure/) — 55 min module
-- [Build agent-driven workflows using Microsoft Foundry](https://learn.microsoft.com/training/modules/build-agent-workflows-microsoft-foundry/) — 1 hr module
-- [Analyze and debug your generative AI app with tracing](https://learn.microsoft.com/training/modules/tracing-generative-ai-app/) — 1 hr module
-- [Evaluate generative AI performance in Microsoft Foundry portal](https://learn.microsoft.com/training/modules/evaluate-models-azure-ai-studio/) — 38 min module
-- [Monitor your generative AI application](https://learn.microsoft.com/training/modules/monitor-generative-ai-app/) — 1 hr module
-- [Develop generative AI apps in Azure](https://learn.microsoft.com/training/paths/develop-generative-ai-apps/) — learning path
-- [Monitor AI workloads on Azure](https://learn.microsoft.com/training/paths/monitor-ai-workloads-on-azure/) — learning path
-- [Operationalize AI responsibly with Azure AI Foundry](https://learn.microsoft.com/training/paths/operationalize-ai-responsibly/) — learning path
+- [Desenvolva um agente de IA com o Foundry Agent Service](https://learn.microsoft.com/training/modules/develop-ai-agent-azure/) — módulo de 55 min
+- [Crie fluxos de trabalho orientados por agentes usando o Microsoft Foundry](https://learn.microsoft.com/training/modules/build-agent-workflows-microsoft-foundry/) — módulo de 1 hora
+- [Analise e depure seu aplicativo de IA generativa com rastreamento](https://learn.microsoft.com/training/modules/tracing-generative-ai-app/) — módulo de 1 hora
+- [Avalie o desempenho de IA generativa no portal do Microsoft Foundry](https://learn.microsoft.com/training/modules/evaluate-models-azure-ai-studio/) — módulo de 38 min
+- [Monitore seu aplicativo de IA generativa](https://learn.microsoft.com/training/modules/monitor-generative-ai-app/) — módulo de 1 hora
+- [Desenvolva aplicativos de IA generativa no Azure](https://learn.microsoft.com/training/paths/develop-generative-ai-apps/) — trilha de aprendizagem
+- [Monitore cargas de trabalho de IA no Azure](https://learn.microsoft.com/training/paths/monitor-ai-workloads-on-azure/) — trilha de aprendizagem
+- [Operacionalize a IA com responsabilidade usando o Azure AI Foundry](https://learn.microsoft.com/training/paths/operationalize-ai-responsibly/) — trilha de aprendizagem
diff --git a/SECURITY.md b/SECURITY.md
index e751608..57d9478 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -1,14 +1,14 @@
-## Security
+## Segurança
-Microsoft takes the security of our software products and services seriously, which
-includes all source code repositories in our GitHub organizations.
+A Microsoft leva a segurança de seus produtos e serviços de software a sério, o que
+inclui todos os repositórios de código-fonte em suas organizações do GitHub.
-**Please do not report security vulnerabilities through public GitHub issues.**
+**Não relate vulnerabilidades de segurança por meio de issues públicas do GitHub.**
-For security reporting information, locations, contact information, and policies,
-please review the latest guidance for Microsoft repositories at
+Para obter informações sobre como relatar problemas de segurança, locais, contatos e políticas,
+consulte as orientações mais recentes para repositórios da Microsoft em
[https://aka.ms/SECURITY.md](https://aka.ms/SECURITY.md).
\ No newline at end of file
diff --git a/SUPPORT.md b/SUPPORT.md
index eaf439a..427d7c7 100644
--- a/SUPPORT.md
+++ b/SUPPORT.md
@@ -1,25 +1,25 @@
-# TODO: The maintainer of this repo has not yet edited this file
+# TODO: O mantenedor deste repositório ainda não editou este arquivo
-**REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project?
+**PROPRIETÁRIO DO REPOSITÓRIO**: Você deseja suporte do Atendimento e Suporte ao Cliente (CSS) para este produto/projeto?
-- **No CSS support:** Fill out this template with information about how to file issues and get help.
-- **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps.
-- **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide.
+- **Sem suporte do CSS:** Preencha este modelo com informações sobre como registrar issues e obter ajuda.
+- **Com suporte do CSS:** Preencha um formulário de entrada em [aka.ms/onboardsupport](https://aka.ms/onboardsupport). O CSS trabalhará com você e ajudará a determinar os próximos passos.
+- **Não tem certeza?** Preencha a entrada como se a resposta fosse "Sim". O CSS ajudará você a decidir.
-*Then remove this first heading from this SUPPORT.MD file before publishing your repo.*
+*Depois, remova este primeiro título do arquivo SUPPORT.MD antes de publicar seu repositório.*
-# Support
+# Suporte
-## How to file issues and get help
+## Como registrar issues e obter ajuda
-This project uses GitHub Issues to track bugs and feature requests. Please search the existing
-issues before filing new issues to avoid duplicates. For new issues, file your bug or
-feature request as a new Issue.
+Este projeto usa o GitHub Issues para acompanhar bugs e solicitações de recursos. Pesquise as
+issues existentes antes de registrar novas issues para evitar duplicatas. Para novas issues, registre seu bug ou
+solicitação de recurso como uma nova Issue.
-For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE
-FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER
-CHANNEL. WHERE WILL YOU HELP PEOPLE?**.
+Para obter ajuda e tirar dúvidas sobre o uso deste projeto, **MANTENEDOR DO REPOSITÓRIO: INSIRA AQUI AS INSTRUÇÕES
+SOBRE COMO INTERAGIR COM OS PROPRIETÁRIOS DO REPOSITÓRIO OU COM A COMUNIDADE PARA OBTER AJUDA. PODE SER UMA TAG DO STACK OVERFLOW OU OUTRO
+CANAL. ONDE VOCÊ AJUDARÁ AS PESSOAS?**.
-## Microsoft Support Policy
+## Política de suporte da Microsoft
-Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
+O suporte para este **PROJETO ou PRODUTO** está limitado aos recursos listados acima.
diff --git a/azure.yaml b/azure.yaml
new file mode 100644
index 0000000..a536ac1
--- /dev/null
+++ b/azure.yaml
@@ -0,0 +1,15 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
+
+name: callcenter
+
+metadata:
+ template: callcenter-foundry@1.0
+
+infra:
+ provider: bicep
+ path: infra
+
+hooks:
+ postprovision:
+ shell: pwsh
+ run: ./scripts/write-env.ps1
diff --git a/banner.png b/banner.png
deleted file mode 100644
index 6a18b71..0000000
Binary files a/banner.png and /dev/null differ
diff --git a/callcenter/.gitignore b/callcenter/.gitignore
new file mode 100644
index 0000000..8e84380
--- /dev/null
+++ b/callcenter/.gitignore
@@ -0,0 +1 @@
+.azure
diff --git a/callcenter/README.md b/callcenter/README.md
index ae0d4db..a246f68 100644
--- a/callcenter/README.md
+++ b/callcenter/README.md
@@ -1,10 +1,10 @@
-# 📞 Scenario: Call Center Triage — NovaTel Communications
+# 📞 Cenário: Triagem de Central de Atendimento — NovaTel Communications
-## Background
+## Contexto

-**NovaTel Communications** is a telecom provider handling hundreds of customer calls daily across their support center. Today's queue has 7 active calls spanning different issue types:
+**NovaTel Communications** é uma operadora de telecomunicações que atende centenas de chamadas de clientes diariamente em sua central de suporte. A fila de hoje tem 7 chamadas ativas, abrangendo diferentes tipos de problemas:
- **CALL-001** — Maria Gonzalez (Premium, 3 years) — Unexpected charge dispute
- **CALL-002** — James Liu (Basic, 4 months) — Internet dropping repeatedly
@@ -16,65 +16,65 @@
-## Your Mission
+## Sua missão

-Build an AI agent system that:
+Crie um sistema de agentes de IA que:
-1. **Classifies intent** — Determines what each customer needs (billing, tech, cancellation, upsell, support, security)
-2. **Advises resolution** — Recommends the best handling strategy based on customer context
-3. **Produces a shift report** — Consolidated triage with prioritized action items
+1. **Classifica a intenção** — Determina o que cada cliente precisa (cobrança, suporte técnico, cancelamento, upsell, suporte, segurança)
+2. **Recomenda uma resolução** — Recomenda a melhor estratégia de atendimento com base no contexto do cliente
+3. **Produz um relatório do turno** — Triagem consolidada com itens de ação priorizados
-## Challenges
+## Desafios
-| # | Challenge | What You'll Do | Time |
+| # | Desafio | O que você fará | Tempo |
|---|-----------|---------------|------|
-| 0 | [Setup](./challenge-0-setup/README.md) | Deploy Microsoft Foundry infrastructure | 20 min |
-| 1 | [Build Agents](./challenge-1-build/README.md) | Create Intent Classification + Resolution Advisor agents | 30 min |
-| 2 | [Monitor](./challenge-2-monitor/README.md) | Enable GenAI tracing with Application Insights | 20 min |
-| 3 | [Evaluate](./challenge-3-evaluate/README.md) | Run systematic quality evaluations | 30 min |
-| 4 | [Production Workflow](./challenge-4-deploy/README.md) | Multi-agent orchestration + portal workflow | 20 min |
+| 0 | [Configuração](./challenge-0-setup/README.md) | Implantar a infraestrutura do Microsoft Foundry | 20 min |
+| 1 | [Criar agentes](./challenge-1-build/README.md) | Criar agentes de Classificação de Intenção e Consultoria de Resolução | 30 min |
+| 2 | [Monitorar](./challenge-2-monitor/README.md) | Habilitar o tracing de GenAI com o Application Insights | 20 min |
+| 3 | [Avaliar](./challenge-3-evaluate/README.md) | Executar avaliações sistemáticas de qualidade | 30 min |
+| 4 | [Fluxo de produção](./challenge-4-deploy/README.md) | Orquestração multiagente e fluxo no portal | 20 min |
-## Why the Challenges Are in This Order
+## Por que os desafios estão nesta ordem
-**Build first.** Intent classification only works if the agent has sharp instructions and real account context. An agent that can't tell a cancellation risk from a billing dispute will route calls wrong — sending retention offers to customers who just have a billing question, and putting high-value accounts in the wrong queue. The `lookup_customer` tool gives the Intent Agent actual account data: tier, tenure, open cases. Without it, the agent is guessing.
+**Crie primeiro.** A classificação de intenção só funciona se o agente tiver instruções precisas e contexto real da conta. Um agente que não consegue distinguir um risco de cancelamento de uma contestação de cobrança encaminhará as chamadas incorretamente — enviando ofertas de retenção a clientes que só têm uma dúvida sobre cobrança e colocando contas de alto valor na fila errada. A ferramenta `lookup_customer` fornece ao Agente de Intenção dados reais da conta: nível, tempo de relacionamento e casos abertos. Sem ela, o agente fica apenas supondo.
-**Then monitor.** A call triage system runs all day across hundreds of calls. Application Insights traces let you see what the agent actually did for each one — whether it called `lookup_customer`, how long it took, and exactly what it recommended. When a supervisor says "the system gave wrong advice on CALL-007," traces are how you find out why.
+**Depois monitore.** Um sistema de triagem de chamadas funciona o dia todo, processando centenas de chamadas. Os traces do Application Insights permitem ver o que o agente realmente fez em cada uma — se chamou `lookup_customer`, quanto tempo levou e exatamente o que recomendou. Quando um supervisor diz "o sistema deu uma orientação errada na CALL-007", é pelos traces que você descobre o motivo.
-**Then evaluate.** The test dataset has known right answers. Running the agents against it — before and after every change — gives you a score that tells you whether classification is improving or quietly degrading. A prompt tweak that looks fine on five spot-checked responses can still break precision on edge cases you didn't happen to check.
+**Depois avalie.** O conjunto de dados de teste tem respostas corretas conhecidas. Executar os agentes com ele — antes e depois de cada alteração — fornece uma pontuação que mostra se a classificação está melhorando ou se deteriorando silenciosamente. Um ajuste no prompt que parece bom em cinco respostas verificadas pontualmente ainda pode prejudicar a precisão em casos extremos que você não conferiu.
-**Then deploy.** The portal workflow produces the shift report supervisors can actually act on: prioritized queue, recommended actions, customer context, full trace history. That's the gap between a Python script you run manually and something the operations team trusts at the start of every shift.
+**Depois implante.** O fluxo do portal produz um relatório do turno sobre o qual os supervisores podem agir: fila priorizada, ações recomendadas, contexto do cliente e histórico completo de traces. Essa é a diferença entre um script Python executado manualmente e algo em que a equipe de operações confia no início de cada turno.
-## Architecture
+## Arquitetura

-## Next Steps
+## Próximos passos
-Completing these challenges gives you a working multi-agent system with observability and evaluation in place. Here are the directions you can take it further:
+Ao concluir estes desafios, você terá um sistema multiagente funcional, com observabilidade e avaliação configuradas. Veja algumas direções para evoluí-lo:
-**Deploy as a hosted agent endpoint**
-Microsoft Foundry can host your agents as persistent, scalable API endpoints — no infrastructure to manage. Once hosted, your telephony platform (Twilio, Genesys, Azure Communication Services) can push live call transcripts directly to the Intent Classification Agent and receive triage decisions in real time, replacing manual queue review.
+**Implante como um endpoint de agente hospedado**
+O Microsoft Foundry pode hospedar seus agentes como endpoints de API persistentes e escaláveis — sem infraestrutura para gerenciar. Depois de hospedados, sua plataforma de telefonia (Twilio, Genesys, Azure Communication Services) poderá enviar transcrições de chamadas ao vivo diretamente ao Agente de Classificação de Intenção e receber decisões de triagem em tempo real, substituindo a revisão manual da fila.
-**Add more tools to your agents**
-The `lookup_customer` function in this lab uses local mock data. In production you’d replace it with tools that call real systems:
-- A `fetch_crm_history` tool querying Salesforce or Dynamics 365 for the customer’s full interaction history
-- A `check_active_offers` tool pulling current retention promotions and eligibility rules from a pricing API
-- A `create_case` tool that automatically opens a CRM ticket and assigns it to the right queue based on the Resolution Advisor’s recommendation
+**Adicione mais ferramentas aos seus agentes**
+A função `lookup_customer` deste laboratório usa dados simulados locais. Em produção, você a substituiria por ferramentas que chamam sistemas reais:
+- Uma ferramenta `fetch_crm_history` que consulta o Salesforce ou o Dynamics 365 para obter o histórico completo de interações do cliente
+- Uma ferramenta `check_active_offers` que busca promoções de retenção atuais e regras de elegibilidade em uma API de preços
+- Uma ferramenta `create_case` que abre automaticamente um tíquete no CRM e o atribui à fila correta com base na recomendação do Consultor de Resolução
-**Build a knowledge base**
-Upload NovaTel’s customer service policy manual, resolution scripts, and product documentation to a Microsoft Foundry knowledge base. Attach it to the Resolution Advisor Agent as a File Search tool so its scripts are grounded in the actual approved playbook — not a hallucinated version of it.
+**Crie uma base de conhecimento**
+Carregue o manual de políticas de atendimento ao cliente da NovaTel, os scripts de resolução e a documentação de produtos em uma base de conhecimento do Microsoft Foundry. Anexe-a ao Agente Consultor de Resolução como uma ferramenta de Pesquisa de Arquivos para que seus scripts se baseiem no manual aprovado — e não em uma versão inventada.
-**Integrate evaluations into CI/CD**
-Run your evaluation dataset automatically on every pull request or deployment. If the coherence or relevance score drops below a threshold (e.g. 3.5 out of 5), block the release. This prevents a system prompt edit or model update from silently degrading classification accuracy during peak call hours.
+**Integre as avaliações ao CI/CD**
+Execute automaticamente seu conjunto de avaliação em cada pull request ou implantação. Se a pontuação de coerência ou relevância cair abaixo de um limite (por exemplo, 3,5 de 5), bloqueie a versão. Isso impede que uma edição do prompt do sistema ou uma atualização do modelo reduza silenciosamente a precisão da classificação durante os horários de pico.
-**Explore advanced agent patterns**
-- **Parallelise** intent classification across all 7 calls simultaneously instead of sequentially
-- **Add confidence thresholds** — if the Intent Agent is uncertain between cancellation and billing, flag the call for human review rather than auto-assigning
-- **Human-in-the-loop** — for CALL-007 (security incidents), always escalate to a human supervisor regardless of the agent’s confidence level
+**Explore padrões avançados de agentes**
+- **Paralelize** a classificação de intenção nas 7 chamadas simultaneamente, em vez de sequencialmente
+- **Adicione limites de confiança** — se o Agente de Intenção estiver em dúvida entre cancelamento e cobrança, sinalize a chamada para revisão humana em vez de atribuí-la automaticamente
+- **Humano no circuito** — para a CALL-007 (incidentes de segurança), sempre encaminhe a um supervisor humano, independentemente do nível de confiança do agente
-**Fine-tune for your domain**
-Use your evaluation results to identify systematic errors — intent types the agent consistently confuses or customer segments it handles poorly. Use those cases to refine system prompts, add targeted few-shot examples, or fine-tune the underlying model on NovaTel call transcripts.
+**Ajuste para seu domínio**
+Use os resultados das avaliações para identificar erros sistemáticos — tipos de intenção que o agente confunde consistentemente ou segmentos de clientes que ele atende mal. Use esses casos para refinar os prompts do sistema, adicionar exemplos few-shot direcionados ou ajustar o modelo subjacente com transcrições de chamadas da NovaTel.
diff --git a/callcenter/challenge-0-setup/.env.template b/callcenter/challenge-0-setup/.env.template
index c8f40ba..1c2622a 100644
--- a/callcenter/challenge-0-setup/.env.template
+++ b/callcenter/challenge-0-setup/.env.template
@@ -1,6 +1,6 @@
# =============================================================================
# Foundry Hackathon — Environment Variables
-# Fill in values from deploy.sh output
+# Generated by azd provision
# =============================================================================
# Azure Subscription
@@ -13,7 +13,7 @@ PROJECT_NAME=tire-factory-project
FOUNDRY_ENDPOINT=
PROJECT_CONNECTION_STRING=
MODEL_DEPLOYMENT_NAME=gpt-5.4
-# Optional deploy.sh overrides (GlobalStandard supports gpt-5.4)
+# Optional azd parameter overrides (GlobalStandard supports gpt-5.4)
# MODEL_NAME=gpt-5.4
# MODEL_VERSION=2026-03-05
diff --git a/callcenter/challenge-0-setup/README.md b/callcenter/challenge-0-setup/README.md
index 9dcbfae..ddee71e 100644
--- a/callcenter/challenge-0-setup/README.md
+++ b/callcenter/challenge-0-setup/README.md
@@ -1,56 +1,56 @@
-# Challenge 0: Setup & Authentication
+# Desafio 0: Configuração e autenticação
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ A fully provisioned Microsoft Foundry project with a deployed model
-- ✅ Application Insights provisioned and connection string available
-- ✅ Verified authentication from your local machine to Foundry
-- ✅ Confirmed your agent endpoint is working
+- ✅ Um projeto do Microsoft Foundry totalmente provisionado com um modelo implantado
+- ✅ O Application Insights provisionado e a cadeia de conexão disponível
+- ✅ A autenticação da sua máquina local no Foundry verificada
+- ✅ A confirmação de que seu endpoint de agente está funcionando

-## Get Started
+## Comece agora
> [!NOTE]
-> Before you begin, make sure you have:
-> - An **Azure subscription** where you hold both the **Contributor** role (to deploy the infrastructure) and the **Foundry User** role (to build, evaluate, and run agents in Challenges 1–4).
-> - A **GitHub handle** (account) to fork this repository and run it in GitHub Codespaces.
+> Antes de começar, certifique-se de que você tem:
+> - Uma **assinatura do Azure** na qual você tenha as funções **Contributor** (para implantar a infraestrutura) e **Foundry User** (para criar, avaliar e executar agentes nos Desafios 1–4).
+> - Uma **conta do GitHub** para fazer fork deste repositório e executá-lo no GitHub Codespaces.
>
-> Subscription **Owner** (or Contributor) rights alone are **not** sufficient. Those grant control-plane access to create and manage resources, but building and running agents are data-plane operations that require the separate **Foundry User** role assigned on the Foundry account. An Owner can self-assign it; a Contributor must ask an admin to assign it after deployment.
+> Os direitos de **Owner** (ou Contributor) da assinatura, sozinhos, **não** são suficientes. Eles concedem acesso ao plano de controle para criar e gerenciar recursos, mas criar e executar agentes são operações do plano de dados que exigem a função separada **Foundry User** atribuída na conta do Foundry. Um Owner pode atribuí-la a si mesmo; um Contributor deve pedir a um administrador que a atribua após a implantação.
-There are two ways to get started — pick one:
+Há duas maneiras de começar — escolha uma:
-> **First step for both options:** [Fork this repository](https://github.com/microsoft/FrontierWeekHack/fork) to your own GitHub account.
+> **Primeiro passo para ambas as opções:** faça [fork deste repositório](https://github.com/diegodocs/FrontierWeekHack/fork) para sua própria conta do GitHub.
-### Option A: GitHub Codespaces (recommended)
+### Opção A: GitHub Codespaces (recomendado)
-No local installs needed. Everything runs in a cloud dev environment.
+Não é necessário instalar nada localmente. Tudo é executado em um ambiente de desenvolvimento na nuvem.
-[](https://codespaces.new/microsoft/FrontierWeekHack)
+[](https://codespaces.new/diegodocs/FrontierWeekHack)
-1. Click the badge above (select your fork if applicable)
-2. Wait for the Codespace to build (~2 min)
-3. In the terminal, log in to Azure:
+1. Clique no selo acima (se aplicável, selecione seu fork)
+2. Aguarde o Codespace ser criado (~2 min)
+3. No terminal, entre no Azure:
```bash
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar infraestrutura** abaixo.
---
-### Option B: Local environment
+### Opção B: Ambiente local
-Run everything on your own machine. Requires Python 3.10+ and Azure CLI.
+Execute tudo na sua própria máquina. Requer Python 3.10+ e a CLI do Azure.
```bash
# 1. Clone this repo
-git clone https://github.com/microsoft/FrontierWeekHack.git
+git clone https://github.com/diegodocs/FrontierWeekHack.git
cd FrontierWeekHack
# 2. Create and activate a virtual environment
@@ -64,45 +64,47 @@ pip install -r requirements.txt
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar infraestrutura** abaixo.
-## Deploy Infrastructure
+## Implantar infraestrutura
-From the **callcenter** folder, run the deploy script:
+Na pasta **callcenter**, inicialize o ambiente `azd` e provisione a infraestrutura:
```bash
-bash challenge-0-setup/deploy.sh
+cd callcenter
+azd auth login
+azd provision
```
-This will provision all resources **and** automatically write your `.env` file to the repository root as `.env`. The deployment will take a couple of minutes to complete.
+Isso provisionará todos os recursos e gravará automaticamente seu arquivo `.env` na pasta **callcenter**. A implantação levará alguns minutos para ser concluída. Para alterar a região ou os nomes, use `azd env set` antes de executar `azd provision`.
-## Verify the creation of your resources
+## Verificar a criação dos recursos
-Go to the [Azure Portal](https://portal.azure.com/) and find your resource group, which should now contain resources like this:
+Acesse o [Portal do Azure](https://portal.azure.com/) e encontre seu grupo de recursos, que agora deve conter recursos como estes:

> [!NOTE]
-> The resource name prefixes vary by scenario and the suffixes are unique for each deployment
+> Os prefixos dos nomes dos recursos variam conforme o cenário, e os sufixos são exclusivos para cada implantação.
-Go to the [Microsoft Foundry Portal](https://ai.azure.com/nextgen) and verify that you can access the Foundry project.
+Acesse o [Portal do Microsoft Foundry](https://ai.azure.com/nextgen) e verifique se você consegue acessar o projeto do Foundry.

-Select **Build** in the top navigation, then **Models**, and verify that the **gpt-5.4** model is deployed.
+Selecione **Build** na navegação superior, depois **Models**, e verifique se o modelo **gpt-5.4** está implantado.
>[!NOTE]
-> In some versions of the Foundry Portal the **Models** tab is rebranded to **Deployments** but they serve the same purpose.
+> Em algumas versões do Portal do Foundry, a guia **Models** aparece com o nome **Deployments**, mas ambas têm a mesma finalidade.

-Select **gpt-5.4**, enter a test message in the model playground, and verify that you get a response.
+Selecione **gpt-5.4**, insira uma mensagem de teste no playground do modelo e verifique se recebe uma resposta.

-## Success Criteria
+## Critérios de sucesso
-- [ ] You can see your Microsoft Foundry project in the Azure Portal
-- [ ] A model deployment for gpt-5.4 shows "Succeeded" status
-- [ ] You can send a test message in the Foundry Model Playground
+- [ ] Você consegue ver seu projeto do Microsoft Foundry no Portal do Azure
+- [ ] Uma implantação do modelo gpt-5.4 mostra o status "Succeeded"
+- [ ] Você consegue enviar uma mensagem de teste no Playground de Modelos do Foundry
diff --git a/callcenter/challenge-0-setup/deploy.sh b/callcenter/challenge-0-setup/deploy.sh
deleted file mode 100644
index cc61de8..0000000
--- a/callcenter/challenge-0-setup/deploy.sh
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Infrastructure Deployment Script
-# Provisions: AI Foundry (hub + project + model), Log Analytics, App Insights
-# Region: swedencentral
-# =============================================================================
-
-# --- Azure CLI extensions ----------------------------------------------------
-# Auto-install required CLI extensions non-interactively (no Y/n prompts).
-az config set extension.use_dynamic_install=yes_without_prompt --only-show-errors >/dev/null 2>&1 || true
-az extension add --name application-insights --only-show-errors >/dev/null 2>&1 || true
-
-# --- Configuration -----------------------------------------------------------
-SUFFIX="${SUFFIX:-$(openssl rand -hex 4)}"
-RESOURCE_GROUP="${RESOURCE_GROUP:-foundry-hackathon-rg-$SUFFIX}"
-LOCATION="${LOCATION:-swedencentral}"
-FOUNDRY_RESOURCE_NAME="${FOUNDRY_RESOURCE_NAME:-foundry-hack-$SUFFIX}"
-PROJECT_NAME="${PROJECT_NAME:-callcenter-project}"
-MODEL_DEPLOYMENT_NAME="${MODEL_DEPLOYMENT_NAME:-gpt-5.4}"
-MODEL_NAME="${MODEL_NAME:-gpt-5.4}"
-MODEL_VERSION="${MODEL_VERSION:-2026-03-05}"
-LOG_ANALYTICS_NAME="${LOG_ANALYTICS_NAME:-foundry-hack-logs-$SUFFIX}"
-APP_INSIGHTS_NAME="${APP_INSIGHTS_NAME:-foundry-hack-insights-$SUFFIX}"
-
-# --- Argument parsing --------------------------------------------------------
-# Resource tags always include the default below. Provide additional tags with:
-# deploy.sh --tags 'MyTag=MyValue' 'Owner=Jane'
-TAGS=("environment=hack")
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --tags)
- shift
- while [[ $# -gt 0 && "$1" != --* ]]; do
- TAGS+=("$1")
- shift
- done
- ;;
- *)
- echo "Unknown argument: $1" >&2
- echo "Usage: deploy.sh [--tags 'Key=Value' ...]" >&2
- exit 1
- ;;
- esac
-done
-
-echo "=============================================="
-echo " Foundry Hackathon — Infrastructure Deploy"
-echo "=============================================="
-echo ""
-echo "Suffix: $SUFFIX"
-echo "Resource Group: $RESOURCE_GROUP"
-echo "Location: $LOCATION"
-echo "Foundry Resource: $FOUNDRY_RESOURCE_NAME"
-echo "Project: $PROJECT_NAME"
-echo "Model Deployment: $MODEL_DEPLOYMENT_NAME"
-echo "Model Name: $MODEL_NAME"
-echo "Model Version: $MODEL_VERSION"
-echo "Tags: ${TAGS[*]}"
-echo ""
-
-# --- Resource Group ----------------------------------------------------------
-echo ">>> Creating resource group..."
-az group create \
- --name "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --output none \
- --tags "${TAGS[@]}"
-
-# --- AI Foundry Hub ----------------------------------------------------------
-echo ">>> Creating Microsoft Foundry Account resource (AIServices)..."
-SUBSCRIPTION_ID=$(az account show --query id -o tsv)
-az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME?api-version=2026-03-01" \
- --body "{\"kind\": \"AIServices\", \"sku\": {\"name\": \"S0\"}, \"location\": \"$LOCATION\", \"identity\": {\"type\": \"SystemAssigned\"}, \"properties\": {\"customSubDomainName\": \"$FOUNDRY_RESOURCE_NAME\", \"publicNetworkAccess\": \"Enabled\", \"allowProjectManagement\": true}}" \
- --output none || true
-
-echo ">>> Waiting for AIServices resource to reach Succeeded state..."
-for i in $(seq 1 36); do
- PROV_STATE=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.provisioningState" -o tsv 2>/dev/null || echo "Pending")
- if [ "$PROV_STATE" = "Succeeded" ]; then
- echo " ✓ Provisioning complete."
- break
- elif [ "$PROV_STATE" = "Failed" ]; then
- echo "❌ AIServices resource provisioning failed. Check the Azure portal for details."
- exit 1
- fi
- echo " State: $PROV_STATE — retrying in 10s... ($i/36)"
- sleep 10
-done
-
-# Some tenants enforce this with Azure Policy. Try to force-enable key auth and verify.
-FOUNDRY_RESOURCE_ID=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.disableLocalAuth=false \
- --output none || true
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.allowProjectManagement=true \
- --output none
-
-DISABLE_LOCAL_AUTH=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query properties.disableLocalAuth -o tsv)
-
-if [ "$DISABLE_LOCAL_AUTH" = "true" ]; then
- echo "⚠️ API key authentication is disabled by Azure Policy on this tenant."
- echo " The deployment will continue — use DefaultAzureCredential (Entra ID) in your code."
-fi
-
-echo ">>> Creating Microsoft Foundry project..."
-az cognitiveservices account project create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --location "$LOCATION" \
- --output none
-
-# --- Model Deployment --------------------------------------------------------
-echo ">>> Deploying model: $MODEL_NAME ($MODEL_VERSION)..."
-az cognitiveservices account deployment create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --deployment-name "$MODEL_DEPLOYMENT_NAME" \
- --model-name "$MODEL_NAME" \
- --model-version "$MODEL_VERSION" \
- --model-format OpenAI \
- --sku-capacity 10 \
- --sku-name GlobalStandard \
- --output none
-
-# --- Log Analytics Workspace -------------------------------------------------
-echo ">>> Creating Log Analytics workspace..."
-az monitor log-analytics workspace create \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --location "$LOCATION" \
- --output none
-
-LOG_ANALYTICS_ID=$(az monitor log-analytics workspace show \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --query id -o tsv)
-
-# --- Application Insights ----------------------------------------------------
-echo ">>> Creating Application Insights (linked to Log Analytics)..."
-az monitor app-insights component create \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --workspace "$LOG_ANALYTICS_ID" \
- --output none
-
-APP_INSIGHTS_CONN_STRING=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query connectionString -o tsv)
-
-APP_INSIGHTS_INSTRUMENTATION_KEY=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query instrumentationKey -o tsv)
-
-APP_INSIGHTS_RESOURCE_ID=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-# --- Connect App Insights to the Foundry account ----------------------------
-# In the new Foundry, monitoring resources surface as "connection" child
-# resources (visible under Management center > Connected resources), not as a
-# project property. The connection uses ApiKey auth (the App Insights
-# connection string); the platform stores that key using the account's
-# system-assigned managed identity, which is why the identity is enabled above.
-echo ">>> Connecting Application Insights to Foundry account..."
-if ! az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME/connections/appinsights-conn?api-version=2025-06-01" \
- --body "{\"properties\": {\"category\": \"AppInsights\", \"target\": \"$APP_INSIGHTS_RESOURCE_ID\", \"authType\": \"ApiKey\", \"credentials\": {\"key\": \"$APP_INSIGHTS_CONN_STRING\"}, \"isSharedToAll\": true, \"metadata\": {\"ApiType\": \"Azure\", \"ResourceId\": \"$APP_INSIGHTS_RESOURCE_ID\"}}}" \
- --output none; then
- echo "⚠️ Could not link Application Insights to the account automatically."
- echo " Tracing (Challenge 2) can still be configured later from the Foundry portal."
-fi
-
-# --- Retrieve endpoint and connection details -------------------------------
-echo ">>> Retrieving Foundry endpoint and keys..."
-FOUNDRY_ENDPOINT=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.endpoint" -o tsv)
-
-PROJECT_CONNECTION_STRING=$(az cognitiveservices account project show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --query "properties.endpoints.\"AI Foundry API\"" -o tsv)
-
-# --- Write .env file ----------------------------------------------------------
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
-ENV_FILE="$ROOT_DIR/.env"
-
-echo ">>> Writing .env file to: $ENV_FILE"
-
-cat > "$ENV_FILE" << EOF
-# =============================================================================
-# Foundry Hackathon — Environment Variables
-# Auto-generated by deploy.sh on $(date)
-# =============================================================================
-
-# Azure Subscription
-AZURE_SUBSCRIPTION_ID=$SUBSCRIPTION_ID
-RESOURCE_GROUP=$RESOURCE_GROUP
-
-# AI Foundry
-FOUNDRY_RESOURCE_NAME=$FOUNDRY_RESOURCE_NAME
-PROJECT_NAME=$PROJECT_NAME
-FOUNDRY_ENDPOINT=$FOUNDRY_ENDPOINT
-PROJECT_CONNECTION_STRING=$PROJECT_CONNECTION_STRING
-MODEL_DEPLOYMENT_NAME=$MODEL_DEPLOYMENT_NAME
-
-# Application Insights & Monitoring
-APPLICATIONINSIGHTS_CONNECTION_STRING=$APP_INSIGHTS_CONN_STRING
-APPINSIGHTS_INSTRUMENTATION_KEY=$APP_INSIGHTS_INSTRUMENTATION_KEY
-
-# Tracing (set to true to enable GenAI tracing)
-AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
-OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
-EOF
-
-echo ""
-echo "=============================================="
-echo " ✅ DEPLOYMENT COMPLETE"
-echo "=============================================="
-echo ""
-echo " .env file written to: $ENV_FILE"
-echo ""
diff --git a/callcenter/challenge-1-build/README.md b/callcenter/challenge-1-build/README.md
index f52f2eb..cc9d5f7 100644
--- a/callcenter/challenge-1-build/README.md
+++ b/callcenter/challenge-1-build/README.md
@@ -1,92 +1,92 @@
-# Challenge 1: Build Agents
+# Desafio 1: Criar agentes
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ An **Intent Classification Agent** that analyzes call summaries and categorizes customer intent
-- ✅ A **Resolution Advisor Agent** that recommends optimal handling strategies
-- ✅ Both agents tested against real call center data
+- ✅ Um **Agente de Classificação de Intenção** que analisa resumos de chamadas e categoriza a intenção do cliente
+- ✅ Um **Agente Consultor de Resolução** que recomenda estratégias ideais de atendimento
+- ✅ Os dois agentes testados com dados reais da central de atendimento

-## Context
+## Contexto
-NovaTel Communications receives hundreds of calls daily. Each call has a summary, customer history, and account context. Your agents need to:
+A NovaTel Communications recebe centenas de chamadas diariamente. Cada chamada tem um resumo, o histórico do cliente e o contexto da conta. Seus agentes precisam:
-1. **Intent Classification**: Analyze the call to determine what the customer needs (billing dispute, tech issue, cancellation risk, upsell opportunity, etc.)
-2. **Resolution Advisory**: Given a classified intent + customer context, recommend the best resolution path with scripts, escalation decisions, and available offers
+1. **Classificação de intenção**: analisar a chamada para determinar o que o cliente precisa (contestação de cobrança, problema técnico, risco de cancelamento, oportunidade de upsell etc.)
+2. **Consultoria de resolução**: dada uma intenção classificada e o contexto do cliente, recomendar o melhor caminho de resolução com scripts, decisões de encaminhamento e ofertas disponíveis
-Check out [call_data.json](./call_data.json) to see today's incoming calls.
+Consulte [call_data.json](./call_data.json) para ver as chamadas recebidas hoje.
-## Portal or SDK?
+## Portal ou SDK?
-Microsoft Foundry gives you two ways to build agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) provides a visual, no-code interface where you can create agents, attach tools, and test them interactively in a playground — great for exploration and rapid prototyping. The **Azure AI Agents SDK** gives you full programmatic control: you define agent behavior, tools, and orchestration logic in Python, which makes it easy to version, test, and integrate into automated pipelines.
+O Microsoft Foundry oferece duas maneiras de criar agentes. O **portal do Foundry** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) fornece uma interface visual sem código na qual você pode criar agentes, anexar ferramentas e testá-los interativamente em um playground — ideal para exploração e prototipagem rápida. O **Azure AI Agents SDK** oferece controle programático completo: você define o comportamento dos agentes, as ferramentas e a lógica de orquestração em Python, facilitando o versionamento, os testes e a integração a pipelines automatizados.

-In this challenge we use the **SDK**. The code in [agents.py](./agents.py) creates both agents, registers their tools, and runs them against every call in `call_data.json` — all from the terminal. After the script runs, both agents will also be visible in the portal under **Agents**, so you can inspect them, tweak their instructions, and test them interactively without touching any code.
+Neste desafio usamos o **SDK**. O código em [agents.py](./agents.py) cria os dois agentes, registra suas ferramentas e os executa com cada chamada em `call_data.json` — tudo pelo terminal. Depois que o script for executado, os dois agentes também estarão visíveis no portal em **Agents**, para que você possa inspecioná-los, ajustar suas instruções e testá-los interativamente sem alterar código.
-## Agents and Tools
+## Agentes e ferramentas
-### What is an agent?
+### O que é um agente?
-An agent in Microsoft Foundry is a persistent, stateful AI assistant backed by a large language model. Unlike a plain API call — where you send a prompt and get a single response — an agent maintains a **conversation thread**, can **invoke tools autonomously**, and **retains context** across multiple turns. You configure it with:
+Um agente no Microsoft Foundry é um assistente de IA persistente e com estado, apoiado por um modelo de linguagem grande. Diferentemente de uma chamada de API simples — na qual você envia um prompt e recebe uma única resposta — um agente mantém uma **thread de conversa**, pode **invocar ferramentas de forma autônoma** e **mantém o contexto** entre várias interações. Você o configura com:
-- A **name** and **model** (e.g. `gpt-5.4`)
-- A **system prompt** — instructions that define its role, personality, and constraints
-- One or more **tools** it can call when it needs information or actions beyond its training data
+- Um **nome** e um **modelo** (por exemplo, `gpt-5.4`)
+- Um **prompt do sistema** — instruções que definem sua função, personalidade e restrições
+- Uma ou mais **ferramentas** que ele pode chamar quando precisa de informações ou ações além dos seus dados de treinamento
-Agents are managed resources in your Foundry project. They persist between runs, appear in the portal under **Agents**, and can be versioned, shared, and reused.
+Os agentes são recursos gerenciados no seu projeto do Foundry. Eles persistem entre execuções, aparecem no portal em **Agents** e podem ser versionados, compartilhados e reutilizados.
-### What are tools?
+### O que são ferramentas?
-Tools extend an agent's capabilities beyond pure language generation. When the model decides it needs information it doesn't have in its context window, it emits a **tool call** — a structured JSON request specifying the tool name and arguments. The SDK intercepts this, runs the corresponding Python function, and feeds the result back to the model. This reasoning loop continues until the agent produces a final response.
+As ferramentas ampliam as capacidades de um agente para além da geração de linguagem. Quando o modelo decide que precisa de uma informação que não está na janela de contexto, ele emite uma **chamada de ferramenta** — uma solicitação JSON estruturada que especifica o nome da ferramenta e seus argumentos. O SDK intercepta essa solicitação, executa a função Python correspondente e devolve o resultado ao modelo. Esse ciclo de raciocínio continua até o agente produzir uma resposta final.
-From the model's perspective, tools are described by a **JSON schema** (name, description, parameters). The model reads these descriptions and decides autonomously when and how to call them — you never hard-code the decision logic.
+Do ponto de vista do modelo, as ferramentas são descritas por um **esquema JSON** (nome, descrição e parâmetros). O modelo lê essas descrições e decide autonomamente quando e como chamá-las — você nunca codifica a lógica de decisão diretamente.
-### What tools can you add?
+### Quais ferramentas você pode adicionar?
-| Tool type | What it does | Best for |
+| Tipo de ferramenta | O que ela faz | Melhor para |
|-----------|-------------|----------|
-| **Function** | Calls a local Python function you define | Any custom logic: database lookups, APIs, calculations |
-| **Code Interpreter** | Lets the agent write and execute Python in a sandbox | Data analysis, chart generation, file processing |
-| **File Search** | Semantic search over a Microsoft Foundry knowledge base | Policy docs, manuals, historical records |
-| **Bing Search** | Live web search | Real-time information, news |
-| **Azure AI Search** | Queries an Azure Search index | Grounded retrieval over your own data at scale |
+| **Function** | Chama uma função Python local que você define | Qualquer lógica personalizada: consultas a bancos de dados, APIs e cálculos |
+| **Code Interpreter** | Permite que o agente escreva e execute Python em um sandbox | Análise de dados, geração de gráficos e processamento de arquivos |
+| **File Search** | Pesquisa semântica em uma base de conhecimento do Microsoft Foundry | Documentos de políticas, manuais e registros históricos |
+| **Bing Search** | Pesquisa na web em tempo real | Informações em tempo real e notícias |
+| **Azure AI Search** | Consulta um índice do Azure Search | Recuperação fundamentada em seus próprios dados em escala |
-#### Vector databases and Microsoft Foundry knowledge bases
+#### Bancos de dados vetoriais e bases de conhecimento do Microsoft Foundry
-When your agent needs to answer questions grounded in a large body of documents — policy manuals, product specs, historical records — you need a **vector database**. Unlike keyword search, a vector database converts text into numerical embeddings and finds semantically similar passages at query time. This lets the agent ask a natural-language question and retrieve the right content even when the exact words don’t appear in the query.
+Quando seu agente precisa responder a perguntas fundamentadas em um grande conjunto de documentos — manuais de políticas, especificações de produtos e registros históricos — você precisa de um **banco de dados vetorial**. Diferentemente da pesquisa por palavras-chave, um banco vetorial converte texto em embeddings numéricos e encontra trechos semanticamente semelhantes no momento da consulta. Assim, o agente pode fazer uma pergunta em linguagem natural e recuperar o conteúdo correto mesmo quando as palavras exatas não aparecem na consulta.
-**Microsoft Foundry** includes a built-in knowledge base backed by a vector store. You upload documents (PDFs, Word files, plain text) and the service automatically chunks, embeds, and indexes them. When you attach this knowledge base to an agent as a **File Search** tool, the agent queries it at inference time — pulling relevant passages into its context before generating a response, so its answers are grounded in your actual documents rather than model training data alone.
+O **Microsoft Foundry** inclui uma base de conhecimento integrada apoiada por um armazenamento vetorial. Você carrega documentos (PDFs, arquivos do Word e texto simples), e o serviço os divide em trechos, gera embeddings e cria o índice automaticamente. Quando você anexa essa base de conhecimento a um agente como ferramenta de **File Search**, o agente a consulta durante a inferência — trazendo trechos relevantes para o contexto antes de gerar uma resposta, para que suas respostas se baseiem nos seus documentos reais, e não apenas nos dados de treinamento do modelo.
-For the NovaTel call center, useful knowledge bases would include:
+Para a central de atendimento da NovaTel, bases de conhecimento úteis incluiriam:
-- **Customer service policy manual** — refund thresholds, escalation rules, retention offer eligibility by plan tier
-- **Product & plan documentation** — features by tier, billing cycles, device return windows, roaming policies
-- **Resolution scripts** — approved language for billing disputes, cancellation saves, and upsell conversations
+- **Manual de políticas de atendimento ao cliente** — limites de reembolso, regras de encaminhamento e elegibilidade de ofertas de retenção por nível do plano
+- **Documentação de produtos e planos** — recursos por nível, ciclos de cobrança, prazos para devolução de dispositivos e políticas de roaming
+- **Scripts de resolução** — linguagem aprovada para contestações de cobrança, retenção em cancelamentos e conversas de upsell
-With this in place, the **Resolution Advisor Agent** could query “what retention offers apply to a Premium customer of 3+ years wanting to cancel?” and retrieve the exact offer details from the playbook — rather than hallucinating plausible-sounding but potentially incorrect policies.
+Com isso, o **Agente Consultor de Resolução** poderia consultar “quais ofertas de retenção se aplicam a um cliente Premium com mais de 3 anos que quer cancelar?” e recuperar os detalhes exatos da oferta no manual — em vez de inventar políticas plausíveis, mas potencialmente incorretas.
-In this challenge the agents use **function tools**. The **Intent Classification Agent** uses `lookup_customer` to pull account history and customer tier before deciding intent. Without this tool, the agent would have to guess from the call summary alone — with it, every classification is grounded in real account data.
+Neste desafio, os agentes usam **ferramentas de função**. O **Agente de Classificação de Intenção** usa `lookup_customer` para obter o histórico da conta e o nível do cliente antes de decidir a intenção. Sem essa ferramenta, o agente teria de adivinhar apenas a partir do resumo da chamada — com ela, toda classificação se baseia em dados reais da conta.
-## Get Started
+## Comece agora
-Open [agents.py](./agents.py) and review the implementation of both agents.
+Abra [agents.py](./agents.py) e revise a implementação dos dois agentes.
```bash
cd callcenter/challenge-1-build
python agents.py
```
-As the script runs, watch the terminal closely — you'll see each agent being created, then each call from `call_data.json` being sent through the **Intent Classification Agent** first, and its output handed off to the **Resolution Advisor Agent**. You'll see the raw agent responses printed for every call, giving you a live view of how the two agents collaborate. Once it completes, head to the [Microsoft Foundry portal](https://ai.azure.com/nextgen), open your project, and navigate to **Agents** in the left sidebar — hit **Refresh** if the agents don't appear immediately, as it can take a few seconds for newly created agents to show up in the portal.
+Enquanto o script é executado, observe atentamente o terminal — você verá cada agente sendo criado e, em seguida, cada chamada de `call_data.json` passando primeiro pelo **Agente de Classificação de Intenção**, com sua saída sendo encaminhada ao **Agente Consultor de Resolução**. As respostas brutas dos agentes serão exibidas para cada chamada, oferecendo uma visão ao vivo de como eles colaboram. Quando terminar, acesse o [portal do Microsoft Foundry](https://ai.azure.com/nextgen), abra seu projeto e navegue até **Agents** na barra lateral esquerda — clique em **Refresh** se os agentes não aparecerem imediatamente, pois pode levar alguns segundos para que novos agentes sejam exibidos no portal.
-## Success Criteria
+## Critérios de sucesso
-- [ ] Intent Classification Agent correctly identifies all 6 intent types across 7 calls
-- [ ] Resolution Advisor provides actionable recommendations with scripts and escalation decisions
-- [ ] Security concerns are always escalated; billing disputes offer appropriate credits
+- [ ] O Agente de Classificação de Intenção identifica corretamente os 6 tipos de intenção nas 7 chamadas
+- [ ] O Consultor de Resolução fornece recomendações acionáveis com scripts e decisões de encaminhamento
+- [ ] As preocupações de segurança sempre são encaminhadas; as contestações de cobrança oferecem créditos apropriados
diff --git a/callcenter/challenge-2-monitor/README.md b/callcenter/challenge-2-monitor/README.md
index 0a026c8..1715aaa 100644
--- a/callcenter/challenge-2-monitor/README.md
+++ b/callcenter/challenge-2-monitor/README.md
@@ -1,138 +1,138 @@
-# Challenge 2: Monitor with Application Insights
+# Desafio 2: Monitorar com o Application Insights
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ GenAI tracing enabled for your Foundry agents
-- ✅ Agent interactions visible as traces in Application Insights
-- ✅ Understanding of how to debug agent behaviour in production
+- ✅ Tracing de GenAI habilitado para seus agentes do Foundry
+- ✅ Interações dos agentes visíveis como traces no Application Insights
+- ✅ Compreensão de como depurar o comportamento dos agentes em produção

-## Context
+## Contexto
-Your agents work — but how do you know they're working **well**? What if an agent misclassifies a security concern as a billing dispute? What if resolution recommendations take too long to generate during peak hours?
+Seus agentes funcionam — mas como saber se estão funcionando **bem**? E se um agente classificar incorretamente uma preocupação de segurança como uma contestação de cobrança? E se as recomendações de resolução demorarem demais para serem geradas nos horários de pico?
-**Application Insights** with **GenAI tracing** gives you:
+O **Application Insights** com **tracing de GenAI** oferece:
-- Full trace of every agent interaction (user message → model call → tool calls → response)
-- Token usage per request
-- Latency breakdown (network, model inference, tool execution)
-- Error tracking and alerting
+- Trace completo de cada interação do agente (mensagem do usuário → chamada do modelo → chamadas de ferramentas → resposta)
+- Uso de tokens por solicitação
+- Detalhamento da latência (rede, inferência do modelo e execução de ferramentas)
+- Rastreamento de erros e alertas
-## Why Monitor?
+## Por que monitorar?
-AI agents behave differently from traditional software. A conventional API either returns the right data or throws an error — you can test it deterministically. An agent's output is probabilistic: the same input can produce subtly different responses on each run, tool calls can succeed but return unexpected data, and failures can be silent (the agent responds confidently but incorrectly). Without observability, these issues are invisible until a user reports them.
+Agentes de IA se comportam de maneira diferente de softwares tradicionais. Uma API convencional retorna os dados corretos ou lança um erro — você pode testá-la de forma determinística. A saída de um agente é probabilística: a mesma entrada pode produzir respostas sutilmente diferentes a cada execução, chamadas de ferramentas podem ter sucesso e ainda assim retornar dados inesperados, e as falhas podem ser silenciosas (o agente responde com confiança, mas incorretamente). Sem observabilidade, esses problemas ficam invisíveis até que um usuário os relate.
-Monitoring serves three critical functions for AI agents:
+O monitoramento cumpre três funções críticas para agentes de IA:
-- **Reliability** — Detect when agents stop working (tool call failures, timeouts, empty responses) before users do
-- **Performance** — Track latency and token usage over time, catch regressions when you update a system prompt, and right-size your deployments for cost efficiency
-- **Debugging** — When something goes wrong, distributed traces give you a complete record of what the model reasoned, what tools were called, what they returned, and exactly where the chain broke
+- **Confiabilidade** — Detectar quando os agentes param de funcionar (falhas nas chamadas de ferramentas, timeouts e respostas vazias) antes dos usuários
+- **Desempenho** — Acompanhar latência e uso de tokens ao longo do tempo, detectar regressões ao atualizar um prompt do sistema e dimensionar corretamente suas implantações para obter eficiência de custos
+- **Depuração** — Quando algo dá errado, traces distribuídos fornecem um registro completo do raciocínio do modelo, das ferramentas chamadas, do que elas retornaram e de exatamente onde a cadeia foi interrompida
-For production AI systems, monitoring is the foundation that makes improvement possible. You can't fix what you can't see.
+Para sistemas de IA em produção, o monitoramento é a base que torna a melhoria possível. Você não pode corrigir o que não consegue ver.
-For the NovaTel call center specifically: a misclassified security concern (CALL-007) routed to the billing queue means a hacked account goes unaddressed for hours. A latency spike during the morning rush means agents can't keep pace with the call queue. Without traces, you'd never know which specific tool call or model reasoning step caused the problem — or even that it happened.
+Especificamente para a central de atendimento da NovaTel: uma preocupação de segurança classificada incorretamente (CALL-007) e encaminhada à fila de cobrança significa que uma conta invadida ficará sem atendimento por horas. Um pico de latência durante o movimento da manhã significa que os agentes não conseguirão acompanhar a fila de chamadas. Sem traces, você nunca saberia qual chamada de ferramenta ou etapa de raciocínio do modelo causou o problema — ou sequer que ele ocorreu.
-## Portal or SDK?
+## Portal ou SDK?
-Microsoft Foundry gives you two ways to monitor agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) has a built-in **Tracing** view where you can browse agent interactions, inspect individual spans, and see token usage and latency — no code required. **Application Insights** (via the Azure portal) gives you deeper analytics: Kusto queries, custom dashboards, and alerting rules.
+O Microsoft Foundry oferece duas maneiras de monitorar agentes. O **portal do Foundry** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) tem uma exibição integrada de **Tracing**, na qual você pode navegar pelas interações dos agentes, inspecionar spans individuais e ver o uso de tokens e a latência — sem precisar escrever código. O **Application Insights** (pelo portal do Azure) fornece análises mais profundas: consultas Kusto, dashboards personalizados e regras de alerta.
-In this challenge we use the **SDK** — `monitor.py` instruments your agents so every interaction is automatically captured as a distributed trace. Once the script runs, you'll explore those traces using both portal options, seeing how each one presents the same data differently.
+Neste desafio usamos o **SDK** — `monitor.py` instrumenta seus agentes para que cada interação seja capturada automaticamente como um trace distribuído. Depois que o script for executado, você explorará esses traces usando as duas opções de portal e verá como cada uma apresenta os mesmos dados de maneira diferente.
-## Prerequisites
+## Pré-requisitos
-Make sure your `.env` has:
+Certifique-se de que seu `.env` tenha:
```
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;...
```
-## Connect Application Insights to the Portal
+## Conectar o Application Insights ao portal
-The deploy script automatically links Application Insights to your Foundry project. To confirm it worked, open the [Microsoft Foundry portal](https://ai.azure.com/nextgen), navigate to your project, and click **Tracing** in the left sidebar — you should see the Application Insights resource already connected.
+O script de implantação vincula automaticamente o Application Insights ao seu projeto do Foundry. Para confirmar que funcionou, abra o [portal do Microsoft Foundry](https://ai.azure.com/nextgen), navegue até seu projeto e clique em **Tracing** na barra lateral esquerda — você deverá ver o recurso do Application Insights já conectado.
-If you see a **"Create or connect an App Insights resource to get started"** banner, the automatic connection was blocked by a tenant policy. Fix it in one click: click **Connect**, select the `foundry-hack-insights-` resource from the dropdown, and confirm. You only need to do this once.
+Se você vir um banner **"Create or connect an App Insights resource to get started"**, a conexão automática foi bloqueada por uma política do tenant. Corrija com um clique: clique em **Connect**, selecione o recurso `foundry-hack-insights-` no menu suspenso e confirme. Você só precisa fazer isso uma vez.
-## Get Started
+## Comece agora
-Open [monitor.py](./monitor.py) and review the tracing setup.
+Abra [monitor.py](./monitor.py) e revise a configuração do tracing.
```bash
cd callcenter/challenge-2-monitor
python monitor.py
```
-Once the script finishes, your traces are live. Explore them in the Azure Portal.
+Quando o script terminar, seus traces estarão ativos. Explore-os no Portal do Azure.
---
-### Step 1: Microsoft Foundry Portal
+### Etapa 1: Portal do Microsoft Foundry
-1. Go to [Microsoft Foundry Portal](https://ai.azure.com/nextgen) → open your project
-2. Click on the `resolution-advisor-agent` -> **Traces**
+1. Acesse o [Portal do Microsoft Foundry](https://ai.azure.com/nextgen) → abra seu projeto
+2. Clique em `resolution-advisor-agent` -> **Traces**
- - **Traces panel** — The **Conversations** tab lists every agent run as a row, showing the conversation ID, trace ID, response ID, status, creation time, duration, tokens in/out, estimated cost, evaluation results, and agent version. Use the search box and the **Status**, **Duration**, **Tokens**, and **Estimated Cost** filters (plus the date-range selector) to narrow results, switch to the **Responses** tab for individual model responses, or click **Create dataset** to turn these traces into an evaluation dataset.
+ - **Painel Traces** — A guia **Conversations** lista cada execução de agente como uma linha, mostrando o ID da conversa, o ID do trace, o ID da resposta, o status, o horário de criação, a duração, os tokens de entrada/saída, o custo estimado, os resultados da avaliação e a versão do agente. Use a caixa de pesquisa e os filtros **Status**, **Duration**, **Tokens** e **Estimated Cost** (além do seletor de intervalo de datas) para restringir os resultados, alterne para a guia **Responses** para ver respostas individuais do modelo ou clique em **Create dataset** para transformar esses traces em um conjunto de dados de avaliação.

-3. You’ll see a list of recent traces — click any row to open it
+3. Você verá uma lista de traces recentes — clique em qualquer linha para abri-la

-4. Inside a trace you can see:
- - Each **agent turn** as a span (input → output)
- - **Tool calls** (`lookup_customer`, etc.) as child spans with inputs/outputs
- - **Token usage** and **latency** per span
- - The full model prompt and completion if `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`
-5. Use the **timeline view** to spot slow spans, and the **details panel** to inspect individual messages
-6. Click on the `resolution-advisor-agent` -> **Monitor**
+4. Dentro de um trace, você pode ver:
+ - Cada **turno do agente** como um span (entrada → saída)
+ - **Chamadas de ferramentas** (`lookup_customer`, etc.) como spans filhos com entradas/saídas
+ - **Uso de tokens** e **latência** por span
+ - O prompt completo do modelo e a conclusão se `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`
+5. Use a **exibição da linha do tempo** para encontrar spans lentos e o **painel de detalhes** para inspecionar mensagens individuais
+6. Clique em `resolution-advisor-agent` -> **Monitor**
- - **Monitor panel** — The **Overview** tab gives an at-a-glance health summary with cards for **Operational metrics** (estimated cost and total token usage), **Evaluations**, **Scheduled evaluations**, and **Scheduled red teaming run issues**. Below, the **Operational metrics** charts plot **Agent runs** (how often the agent was called) and **Runs and token metrics** (calls vs. tokens consumed) over the selected time range. Use the **Tools** tab, date filters, **Settings**, or **Open in Azure Monitor** for deeper analysis.
+ - **Painel Monitor** — A guia **Overview** oferece um resumo rápido da saúde, com cartões de **Operational metrics** (custo estimado e uso total de tokens), **Evaluations**, **Scheduled evaluations** e **Scheduled red teaming run issues**. Abaixo, os gráficos de **Operational metrics** mostram **Agent runs** (com que frequência o agente foi chamado) e **Runs and token metrics** (chamadas versus tokens consumidos) no intervalo selecionado. Use a guia **Tools**, os filtros de data, **Settings** ou **Open in Azure Monitor** para uma análise mais profunda.

-### Step 2 - Application Insights
+### Etapa 2 - Application Insights
-1. Go to [portal.azure.com](https://portal.azure.com) → search for **Application Insights** → open `foundry-hack-insights-`
-2. Left sidebar → **Investigate** → **Search**
+1. Acesse [portal.azure.com](https://portal.azure.com) → pesquise por **Application Insights** → abra `foundry-hack-insights-`
+2. Barra lateral esquerda → **Investigate** → **Search**

-3. Set the time range to **Last 30 minutes** and click **Search** — you'll see individual trace events
-4. Look for traces where your agents were invoked.
- You can inspect the timestamp, operation ID, and message payload to confirm calls reached the model.
-5. Click on `Resolution Advisor Agent` instance.
-You will see the **end-to-end transaction trace** showing:
- - The full agent conversation (user input with call summaries → agent response with resolution recommendations)
- - Nested spans for each model call with latency breakdowns (e.g., `gpt-5.4-2026-03-05` taking 5.1 seconds)
- - The exact system prompt and generated reasoning the agent used to reach its conclusion
- - Resource details (AKS cluster, region) where the agent executed
- - Any content filtering blockers that violated default Responsible AI standards
- - This view lets you inspect exactly what the agent "saw" and "reasoned" to understand any misclassifications or performance issues
-6. In the left sidebar → **Investigate** → **Agents (preview)** to open the agent-centric operations dashboard.
+3. Defina o intervalo de tempo como **Last 30 minutes** e clique em **Search** — você verá eventos de trace individuais
+4. Procure traces nos quais seus agentes foram invocados.
+ Você pode inspecionar o carimbo de data e hora, o ID da operação e o payload da mensagem para confirmar que as chamadas chegaram ao modelo.
+5. Clique na instância `Resolution Advisor Agent`.
+Você verá o **trace da transação de ponta a ponta**, mostrando:
+ - A conversa completa do agente (entrada do usuário com resumos de chamadas → resposta do agente com recomendações de resolução)
+ - Spans aninhados para cada chamada de modelo com detalhamento da latência (por exemplo, `gpt-5.4-2026-03-05` levando 5,1 segundos)
+ - O prompt exato do sistema e o raciocínio gerado que o agente usou para chegar à conclusão
+ - Detalhes do recurso (cluster do AKS e região) onde o agente foi executado
+ - Quaisquer bloqueios de filtragem de conteúdo que violaram os padrões padrão de IA Responsável
+ - Essa exibição permite inspecionar exatamente o que o agente "viu" e "raciocinou" para entender classificações incorretas ou problemas de desempenho
+6. Na barra lateral esquerda → **Investigate** → **Agents (preview)** para abrir o dashboard operacional centrado nos agentes.

- - Use the **Time range** and **Agent** filters at the top to scope the view, switch between the **Dashboard** and **All agents** tabs, or click **Explore in Grafana** for deeper analysis.
- - **Agent Operational Metrics**:
- - **Agent Runs** — total invocations broken down per agent (e.g., `resolution-advisor-agent`, `intent-classification-agent`). Click **View Traces with Agent Runs** to jump to the underlying traces.
- - **Gen AI Errors** — surfaces any traces with GenAI errors in the selected window; a green check means none were found.
- - **Tool Calls** — a table of each tool (e.g., `multi_tool_use.parallel`) with its error count, average duration, and number of calls, so you can spot slow or failing tools.
- - **Models** — per-model breakdown (e.g., `gpt-5.4-2026-03-05`, `gpt-5.4`) showing errors, average duration, and call counts.
- - **Token Consumption**:
- - **Token Consumption by Model** — total tokens consumed per model (e.g., ~22.1K for `gpt-5.4-2026-03-05`).
- - **Input vs Output Tokens** — input versus output token totals over time (e.g., 17K input vs 5.1K output), useful for tracking cost drivers.
+ - Use os filtros **Time range** e **Agent** na parte superior para delimitar a exibição, alterne entre as guias **Dashboard** e **All agents** ou clique em **Explore in Grafana** para uma análise mais profunda.
+ - **Métricas operacionais dos agentes**:
+ - **Agent Runs** — total de invocações dividido por agente (por exemplo, `resolution-advisor-agent`, `intent-classification-agent`). Clique em **View Traces with Agent Runs** para acessar os traces subjacentes.
+ - **Gen AI Errors** — mostra traces com erros de GenAI na janela selecionada; uma marca verde significa que nenhum foi encontrado.
+ - **Tool Calls** — uma tabela de cada ferramenta (por exemplo, `multi_tool_use.parallel`) com sua contagem de erros, duração média e número de chamadas, para que você identifique ferramentas lentas ou com falhas.
+ - **Models** — detalhamento por modelo (por exemplo, `gpt-5.4-2026-03-05`, `gpt-5.4`) mostrando erros, duração média e contagem de chamadas.
+ - **Consumo de tokens**:
+ - **Token Consumption by Model** — total de tokens consumidos por modelo (por exemplo, ~22,1K para `gpt-5.4-2026-03-05`).
+ - **Input vs Output Tokens** — totais de tokens de entrada versus saída ao longo do tempo (por exemplo, 17K de entrada versus 5,1K de saída), útil para acompanhar os fatores de custo.
---
-## Success Criteria
+## Critérios de sucesso
-- [ ] GenAI tracing is enabled and `monitor.py` ran successfully
-- [ ] You can browse agent traces in the Foundry portal **Traces** view and open a conversation
-- [ ] You can read the **Monitor** panel (agent runs, token usage, estimated cost)
-- [ ] You can see at least one agent trace in Application Insights and open its end-to-end transaction trace
-- [ ] You can use the **Agents (preview)** dashboard to view agent runs, tool calls, models, and token consumption
-- [ ] You understand where to look when an agent misbehaves
+- [ ] O tracing de GenAI está habilitado e `monitor.py` foi executado com sucesso
+- [ ] Você consegue navegar pelos traces dos agentes na exibição **Traces** do portal do Foundry e abrir uma conversa
+- [ ] Você consegue ler o painel **Monitor** (execuções dos agentes, uso de tokens e custo estimado)
+- [ ] Você consegue ver pelo menos um trace de agente no Application Insights e abrir seu trace de transação de ponta a ponta
+- [ ] Você consegue usar o dashboard **Agents (preview)** para visualizar execuções de agentes, chamadas de ferramentas, modelos e consumo de tokens
+- [ ] Você entende onde procurar quando um agente se comporta mal
diff --git a/callcenter/challenge-3-evaluate/README.md b/callcenter/challenge-3-evaluate/README.md
index 04ae5ee..7780cce 100644
--- a/callcenter/challenge-3-evaluate/README.md
+++ b/callcenter/challenge-3-evaluate/README.md
@@ -1,96 +1,96 @@
-# Challenge 3: Evaluate
+# Desafio 3: Avaliar
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ Run a systematic evaluation of your agents against a test dataset
-- ✅ Used built-in evaluators (coherence, fluency) to measure quality
-- ✅ Interpreted evaluation metrics and identified areas for improvement
-- ✅ Understanding of how to integrate evaluations into a CI/CD pipeline
+- ✅ Executado uma avaliação sistemática dos seus agentes com um conjunto de dados de teste
+- ✅ Usado avaliadores integrados (coerência e fluência) para medir a qualidade
+- ✅ Interpretado métricas de avaliação e identificado áreas de melhoria
+- ✅ Compreendido como integrar avaliações a um pipeline de CI/CD

-## Context
+## Contexto
-Monitoring tells you **what's happening** (latency, errors, token usage). Evaluation tells you **if the classifications are actually correct**.
+O monitoramento informa **o que está acontecendo** (latência, erros e uso de tokens). A avaliação informa **se as classificações estão realmente corretas**.
-You have a dataset of 10 test cases — each with a call scenario and the expected correct classification (intent, priority, sentiment, recommended action). You'll run your agents against these test cases and measure how well they perform using LLM-as-judge scoring.
+Você tem um conjunto de dados com 10 casos de teste — cada um com um cenário de chamada e a classificação correta esperada (intenção, prioridade, sentimento e ação recomendada). Você executará seus agentes com esses casos de teste e medirá o desempenho usando pontuação LLM-as-judge.
-## Why Evaluate?
+## Por que avaliar?
-Monitoring tells you your agents are *running* — evaluation tells you they're doing the *right thing*. These are fundamentally different questions.
+O monitoramento informa que seus agentes estão *executando* — a avaliação informa se estão fazendo a *coisa certa*. São perguntas fundamentalmente diferentes.
-Monitoring captures **operational signals**: latency, token count, error rates, uptime. These tell you *how* the system behaves mechanically. Evaluation captures **quality signals**: are the agent's outputs correct, relevant, coherent, and consistent with expected outcomes? These tell you *whether* the system is actually doing its job.
+O monitoramento captura **sinais operacionais**: latência, contagem de tokens, taxas de erro e disponibilidade. Eles informam *como* o sistema se comporta mecanicamente. A avaliação captura **sinais de qualidade**: as saídas do agente são corretas, relevantes, coerentes e consistentes com os resultados esperados? Eles informam *se* o sistema está realmente cumprindo sua função.
-Without systematic evaluation, you're relying on spot-checks — reading a handful of responses and judging them subjectively. This doesn't scale, isn't repeatable, and can't catch regressions when you update a prompt or switch models. Evaluation gives you a measurable baseline: a score you can track over time and compare across versions.
+Sem uma avaliação sistemática, você depende de verificações pontuais — lê algumas respostas e as julga subjetivamente. Isso não escala, não é repetível e não detecta regressões quando você atualiza um prompt ou troca de modelo. A avaliação fornece uma linha de base mensurável: uma pontuação que pode ser acompanhada ao longo do tempo e comparada entre versões.
-Evaluation also surfaces issues that monitoring is blind to. An agent that always responds quickly and without errors but consistently misclassifies intent — or gives scripted resolutions that don't match the customer's actual situation — looks perfectly healthy to monitoring. Evaluation catches it immediately.
+A avaliação também revela problemas que o monitoramento não consegue detectar. Um agente que sempre responde rapidamente e sem erros, mas classifica intenções de forma incorreta ou fornece resoluções roteirizadas que não correspondem à situação real do cliente, parece perfeitamente saudável para o monitoramento. A avaliação detecta isso imediatamente.
-For production AI, evaluations should run:
+Para IA em produção, as avaliações devem ser executadas:
-- **Before deployment** — establish a quality baseline and gate releases on minimum scores
-- **After any change** — to system prompts, models, tools, or retrieval data
-- **On a schedule** — to detect drift as the underlying model updates or call patterns shift
+- **Antes da implantação** — estabelecer uma linha de base de qualidade e controlar versões com pontuações mínimas
+- **Depois de qualquer alteração** — em prompts do sistema, modelos, ferramentas ou dados de recuperação
+- **Em uma agenda** — detectar desvios à medida que o modelo subjacente é atualizado ou os padrões de chamadas mudam
-For the NovaTel call center specifically: an agent that classifies CALL-007 (suspected account hack) as a billing dispute is dangerous — it's a security incident that needs immediate escalation. Monitoring sees a successful, low-latency response. Only evaluation — comparing the output against the expected classification — catches the mistake.
+Especificamente para a central de atendimento da NovaTel: um agente que classifica a CALL-007 (suspeita de invasão da conta) como uma contestação de cobrança é perigoso — trata-se de um incidente de segurança que precisa ser encaminhado imediatamente. O monitoramento vê uma resposta bem-sucedida e de baixa latência. Somente a avaliação — comparando a saída com a classificação esperada — detecta o erro.
-## The Evaluation Dataset
+## O conjunto de dados de avaliação
-The dataset lives at [challenge-4-deploy/evaluation_dataset.json](../challenge-4-deploy/evaluation_dataset.json) — it contains:
+O conjunto de dados está em [challenge-4-deploy/evaluation_dataset.json](../challenge-4-deploy/evaluation_dataset.json) — ele contém:
-- 10 call scenarios covering all 6 intent types
-- Each has an `input` (call summary you send to the agent)
-- Each has an `expected_output` (the correct classification and action)
+- 10 cenários de chamadas cobrindo os 6 tipos de intenção
+- Cada um tem um `input` (resumo da chamada enviado ao agente)
+- Cada um tem um `expected_output` (a classificação e ação corretas)
-## About the Evaluators
+## Sobre os avaliadores
-Microsoft Foundry uses an **LLM-as-judge** approach — a separate model reads each agent response alongside the input and ground truth, then scores it on a 1–5 scale. You'll use two built-in evaluators:
+O Microsoft Foundry usa uma abordagem **LLM-as-judge** — um modelo separado lê cada resposta do agente junto com a entrada e a verdade de referência, depois atribui uma pontuação de 1 a 5. Você usará dois avaliadores integrados:
-- **Coherence** — measures whether the agent's response is logically structured and internally consistent. A score of 5 means the output is clear, well-organised, and flows naturally. A low score means the response is contradictory, jumbled, or hard to follow. For a call centre agent this catches things like recommending an upsell while simultaneously classifying the intent as a cancellation risk.
+- **Coerência** — mede se a resposta do agente é estruturada logicamente e consistente internamente. Uma pontuação 5 significa que a saída é clara, bem organizada e flui naturalmente. Uma pontuação baixa significa que a resposta é contraditória, confusa ou difícil de acompanhar. Para um agente de central de atendimento, isso detecta situações como recomendar um upsell enquanto classifica simultaneamente a intenção como risco de cancelamento.
-- **Fluency** — measures the grammatical and linguistic quality of the agent's response. A score of 5 means the output is well-written, natural, and easy to read. A low score means the response is awkwardly phrased, grammatically broken, or hard to parse — which undermines trust in the classification even when the underlying decision is correct.
+- **Fluência** — mede a qualidade gramatical e linguística da resposta do agente. Uma pontuação 5 significa que a saída é bem escrita, natural e fácil de ler. Uma pontuação baixa significa que a resposta é formulada de maneira estranha, apresenta problemas gramaticais ou é difícil de interpretar — o que reduz a confiança na classificação mesmo quando a decisão subjacente está correta.
-These two scores together give you a quick signal on output quality. When you see a low coherence score, look at the agent's system prompt structure. When you see a low fluency score, look at how the agent phrases its output and whether its system prompt encourages clear, well-formed responses.
+Juntas, essas duas pontuações fornecem um sinal rápido da qualidade da saída. Ao ver uma pontuação baixa de coerência, examine a estrutura do prompt do sistema do agente. Ao ver uma pontuação baixa de fluência, observe como o agente formula sua saída e se o prompt do sistema incentiva respostas claras e bem estruturadas.
-## Get Started
+## Comece agora
-The evaluation dataset has already been prepared for you as [eval_portal.jsonl](./eval_portal.jsonl) — 10 call scenarios ready to upload.
+O conjunto de dados de avaliação já foi preparado para você em [eval_portal.jsonl](./eval_portal.jsonl) — são 10 cenários de chamadas prontos para upload.
---
-### Step 1: Open the Evaluation tab
+### Etapa 1: Abrir a guia de avaliação
-1. Go to the [Microsoft Foundry portal](https://ai.azure.com/nextgen) → your project
-2. On the top bar → **Build** → **Evaluations** → **Create**
+1. Acesse o [portal do Microsoft Foundry](https://ai.azure.com/nextgen) → seu projeto
+2. Na barra superior → **Build** → **Evaluations** → **Create**
-### Step 2: Configure the evaluation
+### Etapa 2: Configurar a avaliação
-3. Select **Agent** as the evaluation target
-4. Choose `intent-classification-agent` from the dropdown
-5. Select **Individual Turns** and then **Existing Dataset**
-6. Click on **Upload new dataset**. You must enter a dataset name first — the upload stays disabled until you do. Type a name (e.g. `callcenter-eval`), then add the file located on `callcenter/challenge-3-evaluate/eval_portal.jsonl` and confirm the upload.
-7. Leave the **Field Mapping** and **Configure Agents** fields as is.
-8. In the **Criteria** step, keep only **Coherence** and **Fluency**. Remove every other evaluator — in particular **deselect Tool Call Accuracy**, since the agents can't execute the local tools during evaluation and will always score low on it. Trimming the evaluator list also makes the run significantly faster.
-9. Leave the Evaluation Name as is or configure to your liking.
-10. Submit your Evaluation. This will take some time to run.
+3. Selecione **Agent** como destino da avaliação
+4. Escolha `intent-classification-agent` no menu suspenso
+5. Selecione **Individual Turns** e depois **Existing Dataset**
+6. Clique em **Upload new dataset**. Primeiro, você precisa inserir um nome para o conjunto de dados — o upload permanecerá desabilitado até que você faça isso. Digite um nome (por exemplo, `callcenter-eval`), depois adicione o arquivo localizado em `callcenter/challenge-3-evaluate/eval_portal.jsonl` e confirme o upload.
+7. Deixe os campos **Field Mapping** e **Configure Agents** como estão.
+8. Na etapa **Criteria**, mantenha apenas **Coherence** e **Fluency**. Remova todos os outros avaliadores — em especial **desmarque Tool Call Accuracy**, pois os agentes não conseguem executar as ferramentas locais durante a avaliação e sempre terão uma pontuação baixa nesse item. Reduzir a lista de avaliadores também torna a execução significativamente mais rápida.
+9. Mantenha o nome da avaliação como está ou configure-o como preferir.
+10. Envie sua avaliação. A execução levará algum tempo.
-### Step 3: View results
+### Etapa 3: Ver os resultados
-Results appear in the **Evaluate** tab within a few minutes. Click the run name to open the results.
+Os resultados aparecem na guia **Evaluate** em alguns minutos. Clique no nome da execução para abrir os resultados.
-There are two ways to read the results, and they answer different questions:
+Há duas maneiras de ler os resultados, e elas respondem a perguntas diferentes:
-- **Aggregate metrics** — the average score for each evaluator across all 10 test cases (e.g. an overall Coherence of 4.2). This is your single-number quality baseline — the headline figure you track over time and compare across agent versions.
-- **Per-row analysis** — the score for each individual test case, so you can see *which specific scenarios* dragged the average down. The aggregate tells you *if* there's a problem; the per-row view tells you *where* it is. Sort by the lowest scores to find the cases worth investigating.
+- **Métricas agregadas** — a pontuação média de cada avaliador nos 10 casos de teste (por exemplo, uma Coerência geral de 4,2). Essa é sua linha de base de qualidade em um único número — o indicador principal que você acompanha ao longo do tempo e compara entre versões dos agentes.
+- **Análise por linha** — a pontuação de cada caso de teste individual, para que você veja *quais cenários específicos* reduziram a média. O agregado informa *se* existe um problema; a exibição por linha informa *onde* ele está. Ordene pelas pontuações mais baixas para encontrar os casos que merecem investigação.
---
-## Success Criteria
+## Critérios de sucesso
-- [ ] Evaluation runs against all 10 test cases without errors
-- [ ] You can see per-row scores for coherence and fluency
-- [ ] You've identified at least one case where the agent could improve
-- [ ] You understand the difference between aggregate metrics and per-row analysis
+- [ ] A avaliação é executada nos 10 casos de teste sem erros
+- [ ] Você consegue ver as pontuações por linha de coerência e fluência
+- [ ] Você identificou pelo menos um caso em que o agente pode melhorar
+- [ ] Você entende a diferença entre métricas agregadas e análise por linha
diff --git a/callcenter/challenge-4-deploy/README.md b/callcenter/challenge-4-deploy/README.md
index 60d033d..b72dbab 100644
--- a/callcenter/challenge-4-deploy/README.md
+++ b/callcenter/challenge-4-deploy/README.md
@@ -1,26 +1,26 @@
-# Challenge 4: Production Workflow
+# Desafio 4: Fluxo de produção
-Time: ~20 minutes
+Tempo: ~20 minutos
-Build a multi-agent orchestration workflow for NovaTel Communications and take it to production.
+Crie um fluxo de orquestração multiagente para a NovaTel Communications e leve-o à produção.
-## Scenario
+## Cenário
-The individual agents you built in Challenge 1 are valuable — but in production, agents need to work
-**together** as an automated pipeline. In this challenge you wire the two agents into a full
-call center triage workflow, run it from code, then build and test it visually in the Foundry portal.
+Os agentes individuais que você criou no Desafio 1 são valiosos — mas, em produção, os agentes precisam trabalhar
+**juntos** como um pipeline automatizado. Neste desafio, você conectará os dois agentes em um fluxo completo
+de triagem da central de atendimento, executará o fluxo pelo código e depois o criará e testará visualmente no portal do Foundry.

-## Learning Objectives
+## Objetivos de aprendizagem
-- Deploy persistent production agents (create once, reuse forever)
-- Orchestrate multiple agents step-by-step in a Python workflow
-- Build the same workflow visually in the Foundry portal
-- Invoke the portal workflow from Python with live streaming
-- View run history and traces in the portal
+- Implantar agentes de produção persistentes (criar uma vez e reutilizar sempre)
+- Orquestrar vários agentes passo a passo em um fluxo Python
+- Criar visualmente o mesmo fluxo no portal do Foundry
+- Invocar o fluxo do portal pelo Python com streaming ao vivo
+- Visualizar o histórico de execuções e traces no portal
-## The Workflow
+## O fluxo
```
ensure_agents_deployed()
@@ -37,25 +37,25 @@ print_shift_report() <-- Consolidated Shift Report
---
-## Part 1 — SDK: Build and Run the Python Workflow
+## Parte 1 — SDK: criar e executar o fluxo Python
-### Step 1: Review the implementation
+### Etapa 1: Revisar a implementação
-Open [deploy.py](./deploy.py) and review:
+Abra [deploy.py](./deploy.py) e revise:
-- **`ensure_agents_deployed()`** — lists existing agents, creates `intent-classification-agent` and `resolution-advisor-agent` if not present
-- **`run_intent_classification()`** — calls the intent agent, handles the `lookup_customer` function call loop
-- **`run_resolution_advisory()`** — calls the resolution agent for each high-priority call
-- **`run_call_center_workflow()`** — orchestrates all steps and returns the consolidated report
+- **`ensure_agents_deployed()`** — lista os agentes existentes e cria `intent-classification-agent` e `resolution-advisor-agent` se não estiverem presentes
+- **`run_intent_classification()`** — chama o agente de intenção e trata o loop de chamadas de função `lookup_customer`
+- **`run_resolution_advisory()`** — chama o agente de resolução para cada chamada de alta prioridade
+- **`run_call_center_workflow()`** — orquestra todas as etapas e retorna o relatório consolidado
-### Step 2: Run the workflow
+### Etapa 2: Executar o fluxo
```bash
cd callcenter/challenge-4-deploy
python deploy.py
```
-Expected output:
+Saída esperada:
```
=== Step 1: Ensure Agents Are Deployed ===
Found existing: intent-classification-agent
@@ -84,64 +84,64 @@ NOVATEL CALL CENTER — SHIFT REPORT
---
-## Part 2 — Portal: Build and Test the Visual Workflow
+## Parte 2 — Portal: criar e testar o fluxo visual
-### Step 3: Verify agents are deployed in the portal
+### Etapa 3: Verificar se os agentes estão implantados no portal
-1. Open the [Microsoft Foundry portal](https://ai.azure.com/nextgen)
-2. Select your project
-3. Select **Build** → **Agents** in the top bar
-4. Confirm both agents appear:
+1. Abra o [portal do Microsoft Foundry](https://ai.azure.com/nextgen)
+2. Selecione seu projeto
+3. Selecione **Build** → **Agents** na barra superior
+4. Confirme que os dois agentes aparecem:
- `intent-classification-agent`
- `resolution-advisor-agent`
-### Step 4: Build the workflow in the portal designer
+### Etapa 4: Criar o fluxo no designer do portal
-1. Select **Build** → **Agents** → **Workflows**
-2. Notice that the workflow created using the SDK in Part 1 is listed. Let's create a new workflow by selecting **Create** → **Blank workflow**
+1. Selecione **Build** → **Agents** → **Workflows**
+2. Observe que o fluxo criado usando o SDK na Parte 1 está listado. Vamos criar um novo fluxo selecionando **Create** → **Blank workflow**

-3. In the visual designer **Add a workflow node** dialog choose **Agent**
+3. No designer visual, na caixa de diálogo **Add a workflow node**, escolha **Agent**

-4. In the **Select an agent** picker select `intent-classification-agent`
+4. No seletor **Select an agent**, selecione `intent-classification-agent`

-5. In the **Next node** picker select **Agent** and click **Done** button
+5. No seletor **Next node**, selecione **Agent** e clique no botão **Done**
\

-6. Select the new agent node in the canvas and in the **Select and agent** picker select `resolution-advisor-agent`
+6. Selecione o novo nó de agente na tela e, no seletor **Select and agent**, selecione `resolution-advisor-agent`

-7. In the **Next node** picker select **End** and click **Done** button
+7. No seletor **Next node**, selecione **End** e clique no botão **Done**

-8. Select **Save** and name it `callcenter-triage-workflow-portal`
+8. Selecione **Save** e dê a ele o nome `callcenter-triage-workflow-portal`

-### Step 5: Test the workflow in the portal playground
+### Etapa 5: Testar o fluxo no playground do portal
-> **Why you must include the call data in your message**
+> **Por que você precisa incluir os dados da chamada na mensagem**
>
-> The agents use a `lookup_customer` tool that reads from a local Python file.
-> The portal playground **cannot execute Python functions** — if you send a generic
-> prompt, the agent will try to call the tool and stall waiting for a result that
-> never arrives. Paste the call data directly into your message so the agents can
-> work without needing the tool.
+> Os agentes usam uma ferramenta `lookup_customer` que lê dados de um arquivo Python local.
+> O playground do portal **não consegue executar funções Python** — se você enviar um
+> prompt genérico, o agente tentará chamar a ferramenta e ficará parado esperando um resultado que
+> nunca chegará. Cole os dados da chamada diretamente na mensagem para que os agentes possam
+> trabalhar sem precisar da ferramenta.
-1. Open **callcenter-triage-workflow-portal** → **Preview**
+1. Abra **callcenter-triage-workflow-portal** → **Preview**

-2. Paste the following message (data is pre-embedded so no tool calls are needed):
+2. Cole a mensagem a seguir (os dados já estão incorporados, portanto não são necessárias chamadas de ferramentas):
```
All call data for today is below — analyse it directly, do not call lookup_customer.
@@ -171,50 +171,50 @@ NOVATEL CALL CENTER — SHIFT REPORT
Then recommend resolution strategies for high-priority and security calls.
```
-3. Watch the steps execute in sequence — classification first, then resolution advisory
-4. Review the final consolidated report
+3. Observe as etapas serem executadas em sequência — primeiro a classificação e depois a consultoria de resolução
+4. Revise o relatório consolidado final
-### Step 6: View run history and traces
+### Etapa 6: Ver o histórico de execuções e os traces
-1. In the **callcenter-triage-workflow-portal** workflow click **Traces**
+1. No fluxo **callcenter-triage-workflow-portal**, clique em **Traces**

-2. Click the latest run to see the execution timeline — each step, duration, and output
+2. Clique na execução mais recente para ver a linha do tempo — cada etapa, duração e saída
---
-## Success Criteria
+## Critérios de sucesso
-- [ ] Python workflow runs end-to-end: classification → resolution → shift report
-- [ ] Both agents visible in the Foundry portal as persistent assets
-- [ ] Visual workflow created in the portal and tested in its playground
+- [ ] O fluxo Python é executado de ponta a ponta: classificação → resolução → relatório do turno
+- [ ] Os dois agentes estão visíveis no portal do Foundry como ativos persistentes
+- [ ] O fluxo visual foi criado no portal e testado em seu playground
---
-## Beyond the Lab: Production Deployment Options
+## Além do laboratório: opções de implantação em produção
-You've built and tested your agents locally. Here's how to take them to production:
+Você criou e testou seus agentes localmente. Veja como levá-los à produção:
-### Option 1: Hosted Agents (What You Already Have)
+### Opção 1: Agentes hospedados (o que você já tem)
-Your agents created with `agents.create_version()` are already production-ready hosted agents. They live in Foundry indefinitely — any client can invoke them by name via the Responses API. No infrastructure to manage; Foundry handles scaling, versioning, and availability.
+Seus agentes criados com `agents.create_version()` já são agentes hospedados prontos para produção. Eles permanecem no Foundry indefinidamente — qualquer cliente pode invocá-los pelo nome usando a Responses API. Não há infraestrutura para gerenciar; o Foundry cuida do dimensionamento, versionamento e disponibilidade.
-- **Versioning**: Each `create_version()` produces an immutable version. Roll back by referencing an older version.
-- **Multi-tenant**: Multiple users/apps can call the same agent simultaneously.
-- **Portal visibility**: Agents appear under Build → Agents with playground, run history, and tracing.
+- **Versionamento**: Cada `create_version()` produz uma versão imutável. Reverta referenciando uma versão anterior.
+- **Multi-tenant**: Vários usuários/aplicativos podem chamar o mesmo agente simultaneamente.
+- **Visibilidade no portal**: os agentes aparecem em Build → Agents com playground, histórico de execuções e tracing.
-### Option 2: Foundry Workflows (Visual Orchestration)
+### Opção 2: Fluxos do Foundry (orquestração visual)
-What you built in Part 2 — wire multiple hosted agents into a DAG using the portal designer. The workflow becomes a deployable agent invoked via the same Responses API.
+O que você criou na Parte 2 — conecte vários agentes hospedados em um DAG usando o designer do portal. O fluxo se torna um agente implantável, invocado pela mesma Responses API.
-- Step sequencing with automatic output passing
-- Streaming `workflow_action` events showing progress
-- Run history with per-step timing
+- Sequenciamento de etapas com passagem automática de saídas
+- Streaming de eventos `workflow_action` mostrando o progresso
+- Histórico de execuções com tempo por etapa
-### Option 3: Azure App Service / Container Apps
+### Opção 3: Azure App Service / Container Apps
-Wrap your Python workflow in a FastAPI/Flask app for custom middleware, auth, or business logic:
+Envolva seu fluxo Python em um aplicativo FastAPI/Flask para obter middleware personalizado, autenticação ou lógica de negócio:
```python
# Example: FastAPI endpoint that calls your Foundry agents
@@ -224,32 +224,32 @@ async def triage_calls():
return report
```
-Deploy to **App Service** (managed PaaS) or **Container Apps** (auto-scaling containers).
+Implante no **App Service** (PaaS gerenciado) ou no **Container Apps** (contêineres com escalonamento automático).
-### Option 4: Azure Functions (Event-Driven)
+### Opção 4: Azure Functions (orientado a eventos)
-Trigger agent workflows from events:
+Dispare fluxos de agentes a partir de eventos:
-- **Service Bus trigger**: Classify and resolve each call as it enters the queue
-- **Timer trigger**: Generate shift reports every hour during business hours
-- **HTTP trigger**: On-demand endpoint for supervisors to request triage updates
+- **Gatilho do Service Bus**: classificar e resolver cada chamada quando ela entrar na fila
+- **Gatilho de timer**: gerar relatórios do turno a cada hora durante o horário comercial
+- **Gatilho HTTP**: endpoint sob demanda para que supervisores solicitem atualizações da triagem
-Pay-per-execution, scales to zero when idle.
+Pagamento por execução, com escala até zero quando ocioso.
-### Option 5: CI/CD Quality Gates
+### Opção 5: Gates de qualidade no CI/CD
-Integrate evaluation into your deployment pipeline:
+Integre a avaliação ao seu pipeline de implantação:
-- Run `evaluate.py` on every PR — block merge if quality drops below threshold
-- Promote agent versions: `v1-dev` → `v1-staging` → `v1-prod` after evaluation passes
-- Blue/green: Deploy new version to 10% traffic, compare metrics, then promote
+- Execute `evaluate.py` em cada PR — bloqueie o merge se a qualidade cair abaixo do limite
+- Promova versões dos agentes: `v1-dev` → `v1-staging` → `v1-prod` depois que a avaliação for aprovada
+- Blue/green: implante a nova versão para 10% do tráfego, compare as métricas e depois promova-a
-### Summary
+### Resumo
-| Pattern | Best For |
+| Padrão | Melhor para |
|---------|----------|
-| Hosted Agents | Always-on, invoke by name, no infra management |
-| Foundry Workflows | Multi-agent orchestration without code |
-| App Service / Containers | Custom auth, middleware, webhooks |
-| Azure Functions | Event-driven, pay-per-use, queue processing |
-| CI/CD Gates | Automated quality assurance before promotion |
+| Agentes hospedados | Sempre ativos, invocação pelo nome e sem gerenciamento de infraestrutura |
+| Fluxos do Foundry | Orquestração multiagente sem código |
+| App Service / Contêineres | Autenticação personalizada, middleware e webhooks |
+| Azure Functions | Orientado a eventos, pagamento por uso e processamento de filas |
+| Gates de CI/CD | Garantia de qualidade automatizada antes da promoção |
diff --git a/callcenter/cleanup.sh b/callcenter/cleanup.sh
deleted file mode 100644
index ba4a2a1..0000000
--- a/callcenter/cleanup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Resource Cleanup Script (Call Center)
-# Deletes the resource group and all resources created by deploy.sh
-# =============================================================================
-
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ENV_FILE="$SCRIPT_DIR/challenge-0-setup/.env"
-
-# Load .env if it exists
-if [[ -f "$ENV_FILE" ]]; then
- # shellcheck disable=SC1090
- source "$ENV_FILE"
- echo "Loaded environment from: $ENV_FILE"
-else
- echo "Warning: .env file not found at $ENV_FILE"
- echo "Set RESOURCE_GROUP manually or re-run challenge-0-setup/deploy.sh first."
-fi
-
-RESOURCE_GROUP="${RESOURCE_GROUP:-}"
-
-if [[ -z "$RESOURCE_GROUP" ]]; then
- echo ""
- echo "Error: RESOURCE_GROUP is not set."
- echo "Usage: RESOURCE_GROUP=foundry-hackathon-rg- bash callcenter/cleanup.sh"
- exit 1
-fi
-
-echo ""
-echo "=============================================="
-echo " Foundry Hackathon — Resource Cleanup"
-echo "=============================================="
-echo ""
-echo " Resource Group: $RESOURCE_GROUP"
-echo ""
-echo " This will permanently delete the resource group and ALL resources inside it:"
-echo " - Microsoft Foundry Resource + project"
-echo " - GPT model deployment"
-echo " - Log Analytics workspace"
-echo " - Application Insights instance"
-echo ""
-read -r -p " Are you sure you want to delete '$RESOURCE_GROUP'? (yes/no): " CONFIRM
-
-if [[ "$CONFIRM" != "yes" ]]; then
- echo "Cancelled. No resources were deleted."
- exit 0
-fi
-
-echo ""
-echo "Deleting resource group '$RESOURCE_GROUP'..."
-az group delete --name "$RESOURCE_GROUP" --yes --no-wait
-
-echo ""
-echo "=============================================="
-echo " ✅ Deletion initiated"
-echo "=============================================="
-echo ""
-echo " The resource group is being deleted in the background."
-echo " It may take a few minutes to fully remove all resources."
-echo ""
-echo " Verify in the Azure Portal:"
-echo " https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups"
-echo ""
diff --git a/callcenter/wrapup.md b/callcenter/wrapup.md
index e0693e9..9445427 100644
--- a/callcenter/wrapup.md
+++ b/callcenter/wrapup.md
@@ -1,72 +1,72 @@
-# 🎉 Lab Complete — Call Center Triage (NovaTel Communications)
+# 🎉 Laboratório concluído — Triagem de Central de Atendimento (NovaTel Communications)
-Congratulations — you've built, instrumented, evaluated, and deployed a production-ready multi-agent AI system from scratch. Here's what you accomplished.
+Parabéns — você criou, instrumentou, avaliou e implantou do zero um sistema de IA multiagente pronto para produção. Veja o que você realizou.
---
-## Recap
+## Recapitulação
-| # | Challenge | What You Built |
+| # | Desafio | O que você criou |
|---|-----------|----------------|
-| 0 | **Setup** | Provisioned a Microsoft Foundry Resource, project, GPT model deployment, Log Analytics workspace, and Application Insights instance via a single `deploy.sh` script |
-| 1 | **Build Agents** | Created an **Intent Classification Agent** (classifies billing, tech, cancellation, upsell, security intents with a `lookup_customer` tool) and a **Resolution Advisor Agent** (recommends retention offers and actions per customer tier) |
-| 2 | **Monitor** | Enabled OpenTelemetry GenAI tracing — every model call, tool invocation, and token count is captured as a distributed trace in Application Insights |
-| 3 | **Evaluate** | Ran systematic LLM-as-judge evaluations across the full call dataset, producing repeatable coherence and fluency scores you can version-track across prompt changes |
-| 4 | **Production Workflow** | Wired both agents into an orchestrated pipeline in the Foundry portal — a stable, testable endpoint with run history that supervisors can inspect |
+| 0 | **Configuração** | Provisionou um recurso do Microsoft Foundry, projeto, implantação de modelo GPT, workspace do Log Analytics e instância do Application Insights usando `azd provision` |
+| 1 | **Criar agentes** | Criou um **Agente de Classificação de Intenção** (classifica intenções de cobrança, tecnologia, cancelamento, upsell e segurança com uma ferramenta `lookup_customer`) e um **Agente Consultor de Resolução** (recomenda ofertas de retenção e ações por nível de cliente) |
+| 2 | **Monitorar** | Habilitou o tracing de GenAI do OpenTelemetry — cada chamada de modelo, invocação de ferramenta e contagem de tokens é capturada como um trace distribuído no Application Insights |
+| 3 | **Avaliar** | Executou avaliações sistemáticas LLM-as-judge em todo o conjunto de chamadas, produzindo pontuações repetíveis de coerência e fluência que podem ser acompanhadas entre versões dos prompts |
+| 4 | **Fluxo de produção** | Conectou os dois agentes em um pipeline orquestrado no portal do Foundry — um endpoint estável e testável, com histórico de execuções que os supervisores podem inspecionar |
-### Skills you practiced
+### Habilidades praticadas
-- Designing agent system prompts with clear role boundaries and constraints
-- Grounding agents in real data via tool calls (function calling)
-- Distributed tracing for AI systems with OpenTelemetry
-- LLM-as-judge evaluation with the Azure AI Evaluation SDK
-- Multi-agent orchestration in the Foundry portal
+- Projetar prompts de sistema para agentes com limites claros de função e restrições
+- Fundamentar agentes em dados reais por meio de chamadas de ferramentas (function calling)
+- Tracing distribuído para sistemas de IA com OpenTelemetry
+- Avaliação LLM-as-judge com o Azure AI Evaluation SDK
+- Orquestração multiagente no portal do Foundry
---
-## Next Steps
+## Próximos passos
-Want to take the NovaTel system further? Here are some directions:
+Quer levar o sistema da NovaTel além? Veja algumas direções:
-- **Add more agents** — a Sentiment Analysis agent that scores call tone, or a Knowledge Base agent that retrieves troubleshooting articles before the resolution advisor responds
-- **Connect real data** — replace the static `call_data.json` with a live CRM query or a telephony webhook
-- **Improve evaluation** — add task-specific evaluators (e.g., "did the agent offer a retention discount to a cancellation-risk Premium customer?") alongside the generic coherence scores
-- **Set up CI/CD** — run your evaluation dataset automatically on every prompt change using GitHub Actions and fail the build if quality scores drop below a threshold
-- **Explore fine-tuning** — use your traced conversations as training data to fine-tune a smaller, cheaper model for intent classification
-- **Try another scenario** — the [Factory](../factory/README.md) and [Claims](../claims/README.md) scenarios cover predictive maintenance and insurance processing using the same lifecycle
+- **Adicione mais agentes** — um agente de Análise de Sentimento que pontue o tom da chamada ou um agente de Base de Conhecimento que recupere artigos de solução de problemas antes de o consultor de resolução responder
+- **Conecte dados reais** — substitua o `call_data.json` estático por uma consulta ao CRM ao vivo ou por um webhook de telefonia
+- **Melhore a avaliação** — adicione avaliadores específicos da tarefa (por exemplo, "o agente ofereceu um desconto de retenção a um cliente Premium com risco de cancelamento?") além das pontuações genéricas de coerência
+- **Configure o CI/CD** — execute automaticamente seu conjunto de avaliação a cada alteração de prompt usando o GitHub Actions e faça o build falhar se as pontuações de qualidade caírem abaixo de um limite
+- **Explore o fine-tuning** — use suas conversas rastreadas como dados de treinamento para ajustar um modelo menor e mais barato para classificação de intenção
+- **Experimente outro cenário** — os cenários de [Factory](../factory/README.md) e [Claims](../claims/README.md) abordam manutenção preditiva e processamento de seguros usando o mesmo ciclo de vida
---
-## Clean Up Azure Resources
+## Limpar recursos do Azure
-> **Important:** The resources deployed in Challenge 0 incur Azure costs while they exist. Delete them when you're done.
+> **Importante:** os recursos implantados no Desafio 0 geram custos do Azure enquanto existirem. Exclua-os quando terminar.
-### What gets deleted
+### O que será excluído
-- The resource group `foundry-hackathon-rg-` and everything inside it:
+- O grupo de recursos `foundry-hackathon-rg-` e tudo dentro dele:
- Microsoft Foundry Resource + project
- GPT model deployment
- Log Analytics workspace
- Application Insights instance
-### Option 1 — Script
+### Opção 1 — azd down
-Run the cleanup script from the repo root:
+Na raiz do repositório (onde o ambiente `azd` foi inicializado), execute:
```bash
-bash callcenter/cleanup.sh
+azd down --purge
```
-The script reads the `.env` file written by `deploy.sh` so it knows exactly which resource group to target. It asks for confirmation before deleting.
+O comando usa o ambiente `azd` criado por `azd provision` para saber exatamente qual grupo de recursos deve ser excluído. Ele pede confirmação antes da exclusão.
-### Option 2 — Azure Portal
+### Opção 2 — Portal do Azure
1. Go to [portal.azure.com](https://portal.azure.com)
-2. Search for **Resource groups**
-3. Find `foundry-hackathon-rg-`
-4. Click **Delete resource group** and confirm
+2. Pesquise por **Resource groups**
+3. Encontre `foundry-hackathon-rg-`
+4. Clique em **Delete resource group** e confirme
-### Option 3 — Azure CLI
+### Opção 3 — Azure CLI
```bash
# Replace with the value shown in your .env file
diff --git a/claims/README.md b/claims/README.md
index dd2ee7b..85b5512 100644
--- a/claims/README.md
+++ b/claims/README.md
@@ -1,21 +1,21 @@
-# 📋 Scenario: AI Agents for Insurance Claims Processing
+# 📋 Cenário: Agentes de IA para Processamento de Sinistros
-## Scenario
+## Cenário

-You work at **ClaimSight Insurance**, a property and auto insurance company that processes hundreds of claims daily. Each claim has associated metrics: document completeness, damage-vs-estimate consistency, fraud risk scoring, and policy coverage matching. Lately, fraudulent claims and processing delays have been costing the company millions.
+Você trabalha na **ClaimSight Insurance**, uma seguradora de propriedades e automóveis que processa centenas de sinistros diariamente. Cada sinistro tem métricas associadas: completude dos documentos, consistência entre dano e estimativa, pontuação de risco de fraude e correspondência com a cobertura da apólice. Ultimamente, sinistros fraudulentos e atrasos no processamento têm custado milhões à empresa.
-Your mission: **Build AI agents using Microsoft Foundry** that can triage incoming claims and make intelligent processing decisions — flagging suspicious claims for investigation while fast-tracking legitimate ones.
+Sua missão: **criar agentes de IA usando o Microsoft Foundry** que façam a triagem dos sinistros recebidos e tomem decisões inteligentes de processamento, sinalizando sinistros suspeitos para investigação e acelerando os legítimos.

-You'll build two agents:
+Você criará dois agentes:
-1. **Claims Triage Agent** — Assesses claim metrics against acceptable thresholds and flags anomalies
-2. **Claims Decision Agent** — Takes flagged claims and recommends actions (approve, investigate, request documents, deny)
+1. **Claims Triage Agent** — Avalia as métricas dos sinistros em relação aos limites aceitáveis e sinaliza anomalias
+2. **Claims Decision Agent** — Recebe sinistros sinalizados e recomenda ações (aprovar, investigar, solicitar documentos, negar)
-## The Claims
+## Os sinistros
| Claim | Type | Claimant | Status |
|-------|------|----------|--------|
@@ -25,67 +25,67 @@ You'll build two agents:
| CLM-004 | Property Fire | Sarah Williams | ✅ Normal |
| CLM-005 | Auto Collision | David Okafor | ⚠️ Warning |
-## Prerequisites
+## Pré-requisitos
-- **Azure subscription** with Contributor access
-- **Python 3.10+** installed locally
+- **Assinatura do Azure** com acesso de Colaborador
+- **Python 3.10+** instalado localmente
- **Azure CLI** (`az`) installed and logged in (`az login`)
-- A terminal (bash, PowerShell, or WSL)
-- ~20 minutes for infrastructure provisioning (run `challenge-0-setup/deploy.sh` from the repo root first!)
+- Um terminal (bash, PowerShell ou WSL)
+- Cerca de 20 minutos para provisionar a infraestrutura (execute `azd provision` primeiro na pasta `claims`!)
-## Structure
+## Estrutura
-All challenges are Python SDK-based. Challenge 4 also walks you through the Foundry portal to build and test the multi-agent workflow visually.
+Todos os desafios usam o SDK do Python. O Desafio 4 também orienta você pelo portal do Foundry para criar e testar visualmente o Workflow multiagente.
-## Challenges
+## Desafios
-| # | Challenge | Duration | What You'll Do |
+| # | Desafio | Duração | O que você fará |
|---|-----------|----------|----------------|
-| 0 | [Setup](./challenge-0-setup/README.md) | 20 min | Provision resources, verify auth |
-| 1 | [Build Agents](./challenge-1-build/README.md) | 30 min | Create claims triage & decision agents |
-| 2 | [Monitor](./challenge-2-monitor/README.md) | 20 min | Enable tracing, explore App Insights |
-| 3 | [Evaluate](./challenge-3-evaluate/README.md) | 30 min | Run evaluations, interpret quality metrics |
-| 4 | [Workflow](./challenge-4-deploy/README.md) | 20 min | Build a multi-agent workflow: triage → decision → claims report |
+| 0 | [Configuração](./challenge-0-setup/README.md) | 20 min | Provisionar recursos, verificar autenticação |
+| 1 | [Criar agentes](./challenge-1-build/README.md) | 30 min | Criar agentes de triagem e decisão de sinistros |
+| 2 | [Monitorar](./challenge-2-monitor/README.md) | 20 min | Habilitar rastreamento, explorar o Application Insights |
+| 3 | [Avaliar](./challenge-3-evaluate/README.md) | 30 min | Executar avaliações, interpretar métricas de qualidade |
+| 4 | [Workflow](./challenge-4-deploy/README.md) | 20 min | Criar um fluxo multiagente: triagem → decisão → relatório de sinistros |
-## Why the Challenges Are in This Order
+## Por que os desafios estão nesta ordem
-**Build first.** Without precise instructions and real claim data, the agents can't make useful decisions. The Claims Triage Agent without `assess_claim` is pattern-matching on claim descriptions — it has no way to check actual fraud scores, document completeness ratios, or damage-estimate variance. Ambiguous system prompts mean inconsistent decisions: the same risk profile might get approved one day and flagged the next.
+**Crie primeiro.** Sem instruções precisas e dados reais de sinistros, os agentes não conseguem tomar decisões úteis. Sem `assess_claim`, o Claims Triage Agent apenas identifica padrões nas descrições dos sinistros: não há como verificar pontuações reais de fraude, índices de completude dos documentos ou variações entre danos e estimativas. Prompts de sistema ambíguos geram decisões inconsistentes: o mesmo perfil de risco pode ser aprovado em um dia e sinalizado no outro.
-**Then monitor.** Every decision the Claims Decision Agent makes needs to be traceable. For insurance claims, that's not optional — it's a business and regulatory requirement. Application Insights traces give you a complete record: what data the agent received, which tools it called, and exactly what it recommended. When an auditor asks why CLM-003 was sent for investigation, that trace is your answer.
+**Depois monitore.** Toda decisão tomada pelo Claims Decision Agent precisa ser rastreável. Para sinistros de seguros, isso não é opcional: é uma exigência comercial e regulatória. Os traces do Application Insights fornecem um registro completo: quais dados o agente recebeu, quais ferramentas chamou e exatamente o que recomendou. Quando um auditor perguntar por que CLM-003 foi enviado para investigação, esse trace será sua resposta.
-**Then evaluate.** Two claims with the same fraud score and document completeness should get the same recommendation. Evaluation gives you a repeatable way to check that they do — and catches it when a prompt update breaks that consistency before it affects real claims.
+**Depois avalie.** Dois sinistros com a mesma pontuação de fraude e a mesma completude documental devem receber a mesma recomendação. A avaliação oferece uma forma repetível de verificar isso e detecta quando uma atualização do prompt quebra essa consistência, antes que afete sinistros reais.
-**Then deploy.** The portal workflow connects triage to decision, processes a full claims batch, and produces a report that compliance teams can sign off on. That's the difference between a demo and something you'd put in front of an actual adjuster.
+**Depois implante.** O fluxo do portal conecta a triagem à decisão, processa um lote completo de sinistros e produz um relatório que as equipes de conformidade podem aprovar. Essa é a diferença entre uma demonstração e algo que você colocaria diante de um regulador de sinistros.
-## Architecture
+## Arquitetura

-## Next Steps
+## Próximos passos
-Completing these challenges gives you a working multi-agent system with observability and evaluation in place. Here are the directions you can take it further:
+Ao concluir estes desafios, você terá um sistema multiagente funcional, com observabilidade e avaliação configuradas. Veja algumas direções para avançar:
-**Deploy as a hosted agent endpoint**
-Microsoft Foundry can host your agents as persistent, scalable API endpoints — no infrastructure to manage. Once hosted, your claims intake system can submit new claims directly to the Triage Agent and receive a structured decision (approve / investigate / request documents / deny) without any manual triage step.
+**Implantar como endpoint de agente hospedado**
+O Microsoft Foundry pode hospedar seus agentes como endpoints de API persistentes e escaláveis, sem infraestrutura para gerenciar. Depois de hospedado, seu sistema de entrada de sinistros poderá enviar novos sinistros diretamente ao Triage Agent e receber uma decisão estruturada (aprovar / investigar / solicitar documentos / negar), sem uma etapa manual de triagem.
-**Add more tools to your agents**
-The `assess_claim` function in this lab uses local mock data. In production you'd replace it with tools that call real systems:
-- A `fetch_policy` tool querying your policy management system for the exact coverage terms, exclusions, and limits applicable to a specific claim
-- A `check_fraud_database` tool querying a fraud intelligence service for known patterns matching the claimant's history
-- A `request_documents` tool that automatically triggers a document request workflow in your DMS when the agent recommends it
+**Adicionar mais ferramentas aos seus agentes**
+A função `assess_claim` neste laboratório usa dados simulados locais. Em produção, você a substituiria por ferramentas que chamam sistemas reais:
+- Uma ferramenta `fetch_policy` que consulta seu sistema de gerenciamento de apólices em busca dos termos de cobertura, exclusões e limites exatos aplicáveis a um sinistro específico
+- Uma ferramenta `check_fraud_database` que consulta um serviço de inteligência contra fraudes em busca de padrões conhecidos correspondentes ao histórico do segurado
+- Uma ferramenta `request_documents` que aciona automaticamente um fluxo de solicitação de documentos no seu DMS quando o agente fizer essa recomendação
-**Build a knowledge base**
-Upload ClaimSight's insurance policy documents, regulatory compliance guidelines, and fraud pattern library to a Microsoft Foundry knowledge base. Attach it to the Claims Decision Agent as a File Search tool so its recommendations cite actual policy language — producing decisions that are auditable and defensible to regulators.
+**Criar uma base de conhecimento**
+Carregue os documentos de apólices da ClaimSight, as diretrizes de conformidade regulatória e a biblioteca de padrões de fraude em uma base de conhecimento do Microsoft Foundry. Anexe-a ao Claims Decision Agent como uma ferramenta de File Search para que suas recomendações citem a linguagem real das apólices, produzindo decisões auditáveis e defensáveis perante os órgãos reguladores.
-**Integrate evaluations into CI/CD**
-Run your evaluation dataset automatically on every pull request or deployment. If the coherence or relevance score drops below a threshold (e.g. 3.5 out of 5), block the release. In a regulated industry, this isn't just good practice — it's the kind of quality gate that compliance and audit teams expect to see documented.
+**Integrar avaliações ao CI/CD**
+Execute seu conjunto de dados de avaliação automaticamente em cada pull request ou implantação. Se a pontuação de coerência ou relevância cair abaixo de um limite (por exemplo, 3,5 de 5), bloqueie a versão. Em um setor regulado, isso não é apenas uma boa prática: é o tipo de gate de qualidade que as equipes de conformidade e auditoria esperam ver documentado.
-**Explore advanced agent patterns**
-- **Parallelise** triage across all incoming claims simultaneously instead of sequentially
-- **Add confidence thresholds** — if the Triage Agent's fraud risk assessment falls in an ambiguous range, route to a senior adjuster rather than passing to the Decision Agent automatically
-- **Human-in-the-loop** — for high-value claims (above a configurable threshold), always require human adjuster sign-off before the Decision Agent's recommendation is acted on
+**Explorar padrões avançados de agentes**
+- **Paralelize** a triagem de todos os sinistros recebidos simultaneamente, em vez de sequencialmente
+- **Adicionar limites de confiança**: se a avaliação de risco de fraude do Triage Agent ficar em uma faixa ambígua, encaminhe-a a um regulador sênior em vez de passá-la automaticamente ao Decision Agent
+- **Humano no circuito**: para sinistros de alto valor (acima de um limite configurável), sempre exija a aprovação de um regulador humano antes de executar a recomendação do Decision Agent
-**Fine-tune for your domain**
-Use your evaluation results to identify systematic errors — claim types the agent consistently misjudges or fraud indicators it underweights. Use those cases to refine system prompts, add targeted few-shot examples, or fine-tune the underlying model on ClaimSight's historical claim decisions.
+**Ajustar para seu domínio**
+Use os resultados das avaliações para identificar erros sistemáticos, como tipos de sinistro que o agente julga incorretamente com frequência ou indicadores de fraude aos quais atribui pouco peso. Use esses casos para refinar os prompts de sistema, adicionar exemplos few-shot direcionados ou ajustar o modelo subjacente com base nas decisões históricas de sinistros da ClaimSight.
diff --git a/claims/azure.yaml b/claims/azure.yaml
new file mode 100644
index 0000000..b97b16b
--- /dev/null
+++ b/claims/azure.yaml
@@ -0,0 +1,11 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
+name: claims
+
+infra:
+ provider: bicep
+ path: infra
+
+hooks:
+ postprovision:
+ shell: pwsh
+ run: ./scripts/write-env.ps1
\ No newline at end of file
diff --git a/claims/challenge-0-setup/.env.template b/claims/challenge-0-setup/.env.template
index c8f40ba..1c2622a 100644
--- a/claims/challenge-0-setup/.env.template
+++ b/claims/challenge-0-setup/.env.template
@@ -1,6 +1,6 @@
# =============================================================================
# Foundry Hackathon — Environment Variables
-# Fill in values from deploy.sh output
+# Generated by azd provision
# =============================================================================
# Azure Subscription
@@ -13,7 +13,7 @@ PROJECT_NAME=tire-factory-project
FOUNDRY_ENDPOINT=
PROJECT_CONNECTION_STRING=
MODEL_DEPLOYMENT_NAME=gpt-5.4
-# Optional deploy.sh overrides (GlobalStandard supports gpt-5.4)
+# Optional azd parameter overrides (GlobalStandard supports gpt-5.4)
# MODEL_NAME=gpt-5.4
# MODEL_VERSION=2026-03-05
diff --git a/claims/challenge-0-setup/README.md b/claims/challenge-0-setup/README.md
index 40f1838..9c13501 100644
--- a/claims/challenge-0-setup/README.md
+++ b/claims/challenge-0-setup/README.md
@@ -1,56 +1,56 @@
-# Challenge 0: Setup & Authentication
+# Desafio 0: Configuração e autenticação
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ A fully provisioned Microsoft Foundry project with a deployed model
-- ✅ Application Insights provisioned and connection string available
-- ✅ Verified authentication from your local machine to Foundry
-- ✅ Confirmed your agent endpoint is working
+- ✅ Um projeto do Microsoft Foundry totalmente provisionado com um modelo implantado
+- ✅ O Application Insights provisionado e a cadeia de conexão disponível
+- ✅ A autenticação da sua máquina local no Foundry verificada
+- ✅ A confirmação de que o endpoint do seu agente está funcionando

-## Get Started
+## Primeiros passos
> [!NOTE]
-> Before you begin, make sure you have:
-> - An **Azure subscription** where you hold both the **Contributor** role (to deploy the infrastructure) and the **Foundry User** role (to build, evaluate, and run agents in Challenges 1–4).
-> - A **GitHub handle** (account) to fork this repository and run it in GitHub Codespaces.
+> Antes de começar, certifique-se de que você tem:
+> - Uma **assinatura do Azure** na qual você tenha as funções de **Colaborador** (para implantar a infraestrutura) e **Usuário do Foundry** (para criar, avaliar e executar agentes nos Desafios 1–4).
+> - Uma **conta do GitHub** para criar um fork deste repositório e executá-lo no GitHub Codespaces.
>
-> Subscription **Owner** (or Contributor) rights alone are **not** sufficient. Those grant control-plane access to create and manage resources, but building and running agents are data-plane operations that require the separate **Foundry User** role assigned on the Foundry account. An Owner can self-assign it; a Contributor must ask an admin to assign it after deployment.
+> Os direitos de **Proprietário** (ou Colaborador) da assinatura, sozinhos, **não** são suficientes. Eles concedem acesso ao plano de controle para criar e gerenciar recursos, mas criar e executar agentes são operações do plano de dados que exigem a função separada de **Usuário do Foundry** atribuída na conta do Foundry. Um Proprietário pode atribuí-la a si mesmo; um Colaborador deve pedir a um administrador que a atribua após a implantação.
-There are two ways to get started — pick one:
+Há duas formas de começar: escolha uma:
-> **First step for both options:** [Fork this repository](https://github.com/microsoft/FrontierWeekHack/fork) to your own GitHub account.
+> **Primeiro passo para as duas opções:** [crie um fork deste repositório](https://github.com/diegodocs/FrontierWeekHack/fork) na sua conta do GitHub.
-### Option A: GitHub Codespaces (recommended)
+### Opção A: GitHub Codespaces (recomendado)
-No local installs needed. Everything runs in a cloud dev environment.
+Não é necessário instalar nada localmente. Tudo é executado em um ambiente de desenvolvimento na nuvem.
-[](https://codespaces.new/microsoft/FrontierWeekHack)
+[](https://codespaces.new/diegodocs/FrontierWeekHack)
-1. Click the badge above (select your fork if applicable)
-2. Wait for the Codespace to build (~2 min)
-3. In the terminal, log in to Azure:
+1. Clique no selo acima (se aplicável, selecione seu fork)
+2. Aguarde a criação do Codespace (~2 min)
+3. No terminal, entre no Azure:
```bash
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar infraestrutura** abaixo.
---
-### Option B: Local environment
+### Opção B: Ambiente local
-Run everything on your own machine. Requires Python 3.10+ and Azure CLI.
+Execute tudo na sua própria máquina. Requer Python 3.10+ e o Azure CLI.
```bash
# 1. Clone this repo
-git clone https://github.com/microsoft/FrontierWeekHack.git
+git clone https://github.com/diegodocs/FrontierWeekHack.git
cd FrontierWeekHack
# 2. Create and activate a virtual environment
@@ -64,45 +64,47 @@ pip install -r requirements.txt
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar infraestrutura** abaixo.
-## Deploy Infrastructure
+## Implantar infraestrutura
-From the **claims** folder, run the deploy script:
+Na pasta **claims**, inicialize o ambiente `azd` e provisione a infraestrutura:
```bash
-bash challenge-0-setup/deploy.sh
+cd claims
+azd auth login
+azd provision
```
-This will provision all resources **and** automatically write your `.env` file to the repository root as `.env`. The deployment will take a couple of minutes to complete.
+Isso provisionará todos os recursos **e** gravará automaticamente seu arquivo `.env` na pasta **claims**. A implantação levará alguns minutos para ser concluída.
-## Verify the creation of your resources
+## Verificar a criação dos recursos
-Go to the [Azure Portal](https://portal.azure.com/) and find your resource group, which should now contain resources like this:
+Vá ao [Portal do Azure](https://portal.azure.com/) e encontre seu grupo de recursos, que agora deve conter recursos semelhantes a estes:

> [!NOTE]
-> The resource name prefixes vary by scenario and the suffixes are unique for each deployment
+> Os prefixos dos nomes dos recursos variam conforme o cenário, e os sufixos são exclusivos para cada implantação
-Go to the [Microsoft Foundry Portal](https://ai.azure.com/nextgen) and verify that you can access the Foundry project.
+Vá ao [Portal do Microsoft Foundry](https://ai.azure.com/nextgen) e verifique se você consegue acessar o projeto do Foundry.

-Select **Build** in the top navigation, then **Models**, and verify that the **gpt-5.4** model is deployed.
+Selecione **Build** na navegação superior, depois **Models**, e verifique se o modelo **gpt-5.4** está implantado.
>[!NOTE]
-> In some versions of the Foundry Portal the **Models** tab is rebranded to **Deployments** but they serve the same purpose.
+> Em algumas versões do Portal do Foundry, a guia **Models** aparece como **Deployments**, mas ambas têm a mesma finalidade.

-Select **gpt-5.4**, enter a test message in the model playground, and verify that you get a response.
+Selecione **gpt-5.4**, insira uma mensagem de teste no playground do modelo e verifique se recebe uma resposta.

-## Success Criteria
+## Critérios de sucesso
-- [ ] You can see your Microsoft Foundry project in the Azure Portal
-- [ ] A model deployment for gpt-5.4 shows "Succeeded" status
-- [ ] You can send a test message in the Foundry Model Playground
+- [ ] Você consegue ver seu projeto do Microsoft Foundry no Portal do Azure
+- [ ] Uma implantação do modelo gpt-5.4 mostra o status "Succeeded"
+- [ ] Você consegue enviar uma mensagem de teste no Playground de Modelos do Foundry
diff --git a/claims/challenge-0-setup/deploy.sh b/claims/challenge-0-setup/deploy.sh
deleted file mode 100644
index 997ee7b..0000000
--- a/claims/challenge-0-setup/deploy.sh
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Infrastructure Deployment Script
-# Provisions: AI Foundry (hub + project + model), Log Analytics, App Insights
-# Region: swedencentral
-# =============================================================================
-
-# --- Azure CLI extensions ----------------------------------------------------
-# Auto-install required CLI extensions non-interactively (no Y/n prompts).
-az config set extension.use_dynamic_install=yes_without_prompt --only-show-errors >/dev/null 2>&1 || true
-az extension add --name application-insights --only-show-errors >/dev/null 2>&1 || true
-
-# --- Configuration -----------------------------------------------------------
-SUFFIX="${SUFFIX:-$(openssl rand -hex 4)}"
-RESOURCE_GROUP="${RESOURCE_GROUP:-foundry-hackathon-rg-$SUFFIX}"
-LOCATION="${LOCATION:-swedencentral}"
-FOUNDRY_RESOURCE_NAME="${FOUNDRY_RESOURCE_NAME:-foundry-hack-$SUFFIX}"
-PROJECT_NAME="${PROJECT_NAME:-claims-project}"
-MODEL_DEPLOYMENT_NAME="${MODEL_DEPLOYMENT_NAME:-gpt-5.4}"
-MODEL_NAME="${MODEL_NAME:-gpt-5.4}"
-MODEL_VERSION="${MODEL_VERSION:-2026-03-05}"
-LOG_ANALYTICS_NAME="${LOG_ANALYTICS_NAME:-foundry-hack-logs-$SUFFIX}"
-APP_INSIGHTS_NAME="${APP_INSIGHTS_NAME:-foundry-hack-insights-$SUFFIX}"
-
-# --- Argument parsing --------------------------------------------------------
-# Resource tags always include the default below. Provide additional tags with:
-# deploy.sh --tags 'MyTag=MyValue' 'Owner=Jane'
-TAGS=("environment=hack")
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --tags)
- shift
- while [[ $# -gt 0 && "$1" != --* ]]; do
- TAGS+=("$1")
- shift
- done
- ;;
- *)
- echo "Unknown argument: $1" >&2
- echo "Usage: deploy.sh [--tags 'Key=Value' ...]" >&2
- exit 1
- ;;
- esac
-done
-
-echo "=============================================="
-echo " Foundry Hackathon — Infrastructure Deploy"
-echo "=============================================="
-echo ""
-echo "Suffix: $SUFFIX"
-echo "Resource Group: $RESOURCE_GROUP"
-echo "Location: $LOCATION"
-echo "Foundry Resource: $FOUNDRY_RESOURCE_NAME"
-echo "Project: $PROJECT_NAME"
-echo "Model Deployment: $MODEL_DEPLOYMENT_NAME"
-echo "Model Name: $MODEL_NAME"
-echo "Model Version: $MODEL_VERSION"
-echo "Tags: ${TAGS[*]}"
-echo ""
-
-# --- Resource Group ----------------------------------------------------------
-echo ">>> Creating resource group..."
-az group create \
- --name "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --output none \
- --tags "${TAGS[@]}"
-
-# --- AI Foundry Hub ----------------------------------------------------------
-echo ">>> Creating Microsoft Foundry Account resource (AIServices)..."
-SUBSCRIPTION_ID=$(az account show --query id -o tsv)
-az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME?api-version=2026-03-01" \
- --body "{\"kind\": \"AIServices\", \"sku\": {\"name\": \"S0\"}, \"location\": \"$LOCATION\", \"identity\": {\"type\": \"SystemAssigned\"}, \"properties\": {\"customSubDomainName\": \"$FOUNDRY_RESOURCE_NAME\", \"publicNetworkAccess\": \"Enabled\", \"allowProjectManagement\": true}}" \
- --output none || true
-
-echo ">>> Waiting for AIServices resource to reach Succeeded state..."
-for i in $(seq 1 36); do
- PROV_STATE=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.provisioningState" -o tsv 2>/dev/null || echo "Pending")
- if [ "$PROV_STATE" = "Succeeded" ]; then
- echo " ✓ Provisioning complete."
- break
- elif [ "$PROV_STATE" = "Failed" ]; then
- echo "❌ AIServices resource provisioning failed. Check the Azure portal for details."
- exit 1
- fi
- echo " State: $PROV_STATE — retrying in 10s... ($i/36)"
- sleep 10
-done
-
-# Some tenants enforce this with Azure Policy. Try to force-enable key auth and verify.
-FOUNDRY_RESOURCE_ID=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.disableLocalAuth=false \
- --output none || true
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.allowProjectManagement=true \
- --output none
-
-DISABLE_LOCAL_AUTH=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query properties.disableLocalAuth -o tsv)
-
-if [ "$DISABLE_LOCAL_AUTH" = "true" ]; then
- echo "⚠️ API key authentication is disabled by Azure Policy on this tenant."
- echo " The deployment will continue — use DefaultAzureCredential (Entra ID) in your code."
-fi
-
-echo ">>> Creating Microsoft Foundry project..."
-az cognitiveservices account project create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --location "$LOCATION" \
- --output none
-
-# --- Model Deployment --------------------------------------------------------
-echo ">>> Deploying model: $MODEL_NAME ($MODEL_VERSION)..."
-az cognitiveservices account deployment create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --deployment-name "$MODEL_DEPLOYMENT_NAME" \
- --model-name "$MODEL_NAME" \
- --model-version "$MODEL_VERSION" \
- --model-format OpenAI \
- --sku-capacity 10 \
- --sku-name GlobalStandard \
- --output none
-
-# --- Log Analytics Workspace -------------------------------------------------
-echo ">>> Creating Log Analytics workspace..."
-az monitor log-analytics workspace create \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --location "$LOCATION" \
- --output none
-
-LOG_ANALYTICS_ID=$(az monitor log-analytics workspace show \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --query id -o tsv)
-
-# --- Application Insights ----------------------------------------------------
-echo ">>> Creating Application Insights (linked to Log Analytics)..."
-az monitor app-insights component create \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --workspace "$LOG_ANALYTICS_ID" \
- --output none
-
-APP_INSIGHTS_CONN_STRING=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query connectionString -o tsv)
-
-APP_INSIGHTS_INSTRUMENTATION_KEY=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query instrumentationKey -o tsv)
-
-APP_INSIGHTS_RESOURCE_ID=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-# --- Connect App Insights to the Foundry account ----------------------------
-# In the new Foundry, monitoring resources surface as "connection" child
-# resources (visible under Management center > Connected resources), not as a
-# project property. The connection uses ApiKey auth (the App Insights
-# connection string); the platform stores that key using the account's
-# system-assigned managed identity, which is why the identity is enabled above.
-echo ">>> Connecting Application Insights to Foundry account..."
-if ! az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME/connections/appinsights-conn?api-version=2025-06-01" \
- --body "{\"properties\": {\"category\": \"AppInsights\", \"target\": \"$APP_INSIGHTS_RESOURCE_ID\", \"authType\": \"ApiKey\", \"credentials\": {\"key\": \"$APP_INSIGHTS_CONN_STRING\"}, \"isSharedToAll\": true, \"metadata\": {\"ApiType\": \"Azure\", \"ResourceId\": \"$APP_INSIGHTS_RESOURCE_ID\"}}}" \
- --output none; then
- echo "⚠️ Could not link Application Insights to the account automatically."
- echo " Tracing (Challenge 2) can still be configured later from the Foundry portal."
-fi
-
-# --- Retrieve endpoint and connection details -------------------------------
-echo ">>> Retrieving Foundry endpoint and keys..."
-FOUNDRY_ENDPOINT=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.endpoint" -o tsv)
-
-PROJECT_CONNECTION_STRING=$(az cognitiveservices account project show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --query "properties.endpoints.\"AI Foundry API\"" -o tsv)
-
-# --- Write .env file ----------------------------------------------------------
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
-ENV_FILE="$ROOT_DIR/.env"
-
-echo ">>> Writing .env file to: $ENV_FILE"
-
-cat > "$ENV_FILE" << EOF
-# =============================================================================
-# Foundry Hackathon — Environment Variables
-# Auto-generated by deploy.sh on $(date)
-# =============================================================================
-
-# Azure Subscription
-AZURE_SUBSCRIPTION_ID=$SUBSCRIPTION_ID
-RESOURCE_GROUP=$RESOURCE_GROUP
-
-# AI Foundry
-FOUNDRY_RESOURCE_NAME=$FOUNDRY_RESOURCE_NAME
-PROJECT_NAME=$PROJECT_NAME
-FOUNDRY_ENDPOINT=$FOUNDRY_ENDPOINT
-PROJECT_CONNECTION_STRING=$PROJECT_CONNECTION_STRING
-MODEL_DEPLOYMENT_NAME=$MODEL_DEPLOYMENT_NAME
-
-# Application Insights & Monitoring
-APPLICATIONINSIGHTS_CONNECTION_STRING=$APP_INSIGHTS_CONN_STRING
-APPINSIGHTS_INSTRUMENTATION_KEY=$APP_INSIGHTS_INSTRUMENTATION_KEY
-
-# Tracing (set to true to enable GenAI tracing)
-AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
-OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
-EOF
-
-echo ""
-echo "=============================================="
-echo " ✅ DEPLOYMENT COMPLETE"
-echo "=============================================="
-echo ""
-echo " .env file written to: $ENV_FILE"
-echo ""
diff --git a/claims/challenge-1-build/README.md b/claims/challenge-1-build/README.md
index cf1de98..5e319f7 100644
--- a/claims/challenge-1-build/README.md
+++ b/claims/challenge-1-build/README.md
@@ -1,10 +1,10 @@
-# Challenge 1: Build Agents
+# Desafio 1: Criar agentes
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
- ✅ A **Claims Triage Agent** that assesses incoming claims and flags risks
- ✅ A **Claims Decision Agent** that analyzes flagged claims and recommends actions
@@ -12,26 +12,26 @@ By the end of this challenge, you will have:

-## Context
+## Contexto
-ClaimSight Insurance processes hundreds of claims daily. Each claim has associated metrics: document completeness, damage-vs-estimate consistency, fraud risk score, and policy coverage match. Your agents need to:
+A ClaimSight Insurance processa centenas de sinistros diariamente. Cada sinistro tem métricas associadas: completude dos documentos, consistência entre dano e estimativa, pontuação de risco de fraude e correspondência com a cobertura da apólice. Seus agentes precisam:
-1. **Claims Triage**: Compare claim metrics against acceptable thresholds and flag claims that need attention
-2. **Claims Decision**: Given a flagged claim, determine the recommended action (approve, investigate, request documents, or deny)
+1. **Triagem de sinistros**: comparar as métricas com limites aceitáveis e sinalizar sinistros que precisam de atenção
+2. **Decisão sobre sinistros**: dado um sinistro sinalizado, determinar a ação recomendada (aprovar, investigar, solicitar documentos ou negar)
Check out [claims_data.json](./claims_data.json) to see the current batch of claims.
-## Portal or SDK?
+## Portal ou SDK?
Microsoft Foundry gives you two ways to build agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) provides a visual, no-code interface where you can create agents, attach tools, and test them interactively in a playground — great for exploration and rapid prototyping. The **Azure AI Agents SDK** gives you full programmatic control: you define agent behavior, tools, and orchestration logic in Python, which makes it easy to version, test, and integrate into automated pipelines.

-In this challenge we use the **SDK**. The code in [agents.py](./agents.py) creates both agents, registers their tools, and runs them against every claim in `claims_data.json` — all from the terminal. After the script runs, both agents will also be visible in the portal under **Agents**, so you can inspect them, tweak their instructions, and test them interactively without touching any code.
+Neste desafio usamos o **SDK**. O código em [agents.py](./agents.py) cria os dois agentes, registra suas ferramentas e os executa com cada sinistro em `claims_data.json`, tudo pelo terminal. Depois que o script for executado, os dois agentes também estarão visíveis no portal em **Agents**, para que você possa inspecioná-los, ajustar suas instruções e testá-los interativamente sem tocar no código.
## Agents and Tools
-### What is an agent?
+### O que é um agente?
An agent in Microsoft Foundry is a persistent, stateful AI assistant backed by a large language model. Unlike a plain API call — where you send a prompt and get a single response — an agent maintains a **conversation thread**, can **invoke tools autonomously**, and **retains context** across multiple turns. You configure it with:
@@ -41,13 +41,13 @@ An agent in Microsoft Foundry is a persistent, stateful AI assistant backed by a
Agents are managed resources in your Foundry project. They persist between runs, appear in the portal under **Agents**, and can be versioned, shared, and reused.
-### What are tools?
+### O que são ferramentas?
Tools extend an agent's capabilities beyond pure language generation. When the model decides it needs information it doesn't have in its context window, it emits a **tool call** — a structured JSON request specifying the tool name and arguments. The SDK intercepts this, runs the corresponding Python function, and feeds the result back to the model. This reasoning loop continues until the agent produces a final response.
From the model's perspective, tools are described by a **JSON schema** (name, description, parameters). The model reads these descriptions and decides autonomously when and how to call them — you never hard-code the decision logic.
-### What tools can you add?
+### Quais ferramentas você pode adicionar?
| Tool type | What it does | Best for |
|-----------|-------------|----------|
@@ -57,7 +57,7 @@ From the model's perspective, tools are described by a **JSON schema** (name, de
| **Bing Search** | Live web search | Real-time information, news |
| **Azure AI Search** | Queries an Azure Search index | Grounded retrieval over your own data at scale |
-#### Vector databases and Microsoft Foundry knowledge bases
+#### Bancos de dados vetoriais e bases de conhecimento do Microsoft Foundry
When your agent needs to answer questions grounded in a large body of documents — policy manuals, product specs, historical records — you need a **vector database**. Unlike keyword search, a vector database converts text into numerical embeddings and finds semantically similar passages at query time. This lets the agent ask a natural-language question and retrieve the right content even when the exact words don’t appear in the query.
@@ -73,7 +73,7 @@ With this in place, the **Claims Decision Agent** could query “what is the cov
In this challenge the agents use **function tools**. The **Claims Triage Agent** uses `assess_claim` to retrieve full claim metrics — document completeness, fraud risk score, damage estimates — before scoring risk. Without this tool, the agent would have to guess from context alone — with it, every triage decision is grounded in the claim's actual data.
-## Get Started
+## Primeiros passos
Open [agents.py](./agents.py) and review the implementation of both agents.
@@ -84,7 +84,7 @@ python agents.py
As the script runs, watch the terminal closely — you'll see each agent being created, then each claim from `claims_data.json` being sent through the **Claims Triage Agent** first, and its output handed off to the **Claims Decision Agent**. You'll see the raw agent responses printed for every claim, giving you a live view of how the two agents collaborate. Once it completes, head to the [Microsoft Foundry portal](https://ai.azure.com/nextgen), open your project, and navigate to **Agents** in the left sidebar — hit **Refresh** if the agents don't appear immediately, as it can take a few seconds for newly created agents to show up in the portal.
-## Success Criteria
+## Critérios de sucesso
- [ ] Claims Triage Agent correctly identifies the 2 warning + 1 critical claim
- [ ] Claims Decision Agent provides reasonable action recommendations
diff --git a/claims/challenge-2-monitor/README.md b/claims/challenge-2-monitor/README.md
index cfc15fc..c1e7307 100644
--- a/claims/challenge-2-monitor/README.md
+++ b/claims/challenge-2-monitor/README.md
@@ -1,10 +1,10 @@
-# Challenge 2: Monitor with Application Insights
+# Desafio 2: Monitorar com o Application Insights
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
- ✅ GenAI tracing enabled for your Foundry agents
- ✅ Agent interactions visible as traces in Application Insights
@@ -12,9 +12,9 @@ By the end of this challenge, you will have:

-## Context
+## Contexto
-Your agents work — but how do you know they're working **well**? What if an agent misclassifies a legitimate claim as fraud? What if latency spikes during peak filing hours? What if a tool call fails silently?
+Seus agentes funcionam, mas como saber se estão funcionando **bem**? E se um agente classificar incorretamente um sinistro legítimo como fraude? E se a latência aumentar nos horários de pico? E se uma chamada de ferramenta falhar silenciosamente?
**Application Insights** with **GenAI tracing** gives you:
@@ -23,7 +23,7 @@ Your agents work — but how do you know they're working **well**? What if an ag
- Latency breakdown (network, model inference, tool execution)
- Error tracking and alerting
-## Why Monitor?
+## Por que monitorar?
AI agents behave differently from traditional software. A conventional API either returns the right data or throws an error — you can test it deterministically. An agent's output is probabilistic: the same input can produce subtly different responses on each run, tool calls can succeed but return unexpected data, and failures can be silent (the agent responds confidently but incorrectly). Without observability, these issues are invisible until a user reports them.
@@ -37,13 +37,13 @@ For production AI systems, monitoring is the foundation that makes improvement p
For ClaimSight specifically: a tool call timeout on `assess_claim` might cause the triage agent to fall back to a generic response, silently approving a claim it should have flagged for fraud review. To monitoring, that looks like a successful response. Without traces, you'd have no way to link the bad decision to the failed tool call — or even know it happened.
-## Portal or SDK?
+## Portal ou SDK?
Microsoft Foundry gives you two ways to monitor agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) has a built-in **Tracing** view where you can browse agent interactions, inspect individual spans, and see token usage and latency — no code required. **Application Insights** (via the Azure portal) gives you deeper analytics: Kusto queries, custom dashboards, and alerting rules.
In this challenge we use the **SDK** — `monitor.py` instruments your agents so every interaction is automatically captured as a distributed trace. Once the script runs, you'll explore those traces using both portal options, seeing how each one presents the same data differently.
-## Prerequisites
+## Pré-requisitos
Make sure your `.env` has:
```
@@ -52,13 +52,13 @@ OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;...
```
-## Connect Application Insights to the Portal
+## Conectar o Application Insights ao portal
The deploy script automatically links Application Insights to your Foundry project. To confirm it worked, open the [Microsoft Foundry portal](https://ai.azure.com/nextgen), navigate to your project, and click **Tracing** in the left sidebar — you should see the Application Insights resource already connected.
If you see a **"Create or connect an App Insights resource to get started"** banner, the automatic connection was blocked by a tenant policy. Fix it in one click: click **Connect**, select the `foundry-hack-insights-` resource from the dropdown, and confirm. You only need to do this once.
-## Get Started
+## Primeiros passos
Open [monitor.py](./monitor.py) and review the tracing setup.
@@ -67,14 +67,14 @@ cd claims/challenge-2-monitor
python monitor.py
```
-Once the script finishes, your traces are live. Explore them in the Azure Portal.
+Quando o script terminar, seus traces estarão ativos. Explore-os no Portal do Azure.
---
-### Step 1: Microsoft Foundry Portal
+### Etapa 1: Portal do Microsoft Foundry
1. Go to [Microsoft Foundry Portal](https://ai.azure.com/nextgen) → open your project
-2. Click on the `claims-decision-agent` -> **Traces**
+2. Click on the `claims-decision-agent` -> **Traces**
- **Traces panel** — The **Conversations** tab lists every agent run as a row, showing the conversation ID, trace ID, response ID, status, creation time, duration, tokens in/out, estimated cost, evaluation results, and agent version. Use the search box and the **Status**, **Duration**, **Tokens**, and **Estimated Cost** filters (plus the date-range selector) to narrow results, switch to the **Responses** tab for individual model responses, or click **Create dataset** to turn these traces into an evaluation dataset.
@@ -90,13 +90,13 @@ Once the script finishes, your traces are live. Explore them in the Azure Portal
- **Token usage** and **latency** per span
- The full model prompt and completion if `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`
5. Use the **timeline view** to spot slow spans, and the **details panel** to inspect individual messages
-6. Click on the `claims-decision-agent` -> **Monitor**
+6. Click on the `claims-decision-agent` -> **Monitor**
- **Monitor panel** — The **Overview** tab gives an at-a-glance health summary with cards for **Operational metrics** (estimated cost and total token usage), **Evaluations**, **Scheduled evaluations**, and **Scheduled red teaming run issues**. Below, the **Operational metrics** charts plot **Agent runs** (how often the agent was called) and **Runs and token metrics** (calls vs. tokens consumed) over the selected time range. Use the **Tools** tab, date filters, **Settings**, or **Open in Azure Monitor** for deeper analysis.

-### Step 2 - Application Insights
+### Etapa 2 - Application Insights
1. Go to [portal.azure.com](https://portal.azure.com) → search for **Application Insights** → open `foundry-hack-insights-`
2. Left sidebar → **Investigate** → **Search**
@@ -129,7 +129,7 @@ You will see the **end-to-end transaction trace** showing:
- **Input vs Output Tokens** — input versus output token totals over time (e.g., 17K input vs 5.1K output), useful for tracking cost drivers.
---
-## Success Criteria
+## Critérios de sucesso
- [ ] GenAI tracing is enabled and `monitor.py` ran successfully
- [ ] You can browse agent traces in the Foundry portal **Traces** view and open a conversation
diff --git a/claims/challenge-3-evaluate/README.md b/claims/challenge-3-evaluate/README.md
index 9c36ccb..36b33b2 100644
--- a/claims/challenge-3-evaluate/README.md
+++ b/claims/challenge-3-evaluate/README.md
@@ -1,43 +1,43 @@
-# Challenge 3: Evaluate
+# Desafio 3: Avaliar
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ Run a systematic evaluation of your agents against a test dataset
-- ✅ Used built-in evaluators (coherence, fluency) to measure quality
-- ✅ Interpreted evaluation metrics and identified areas for improvement
-- ✅ Understanding of how to integrate evaluations into a CI/CD pipeline
+- ✅ Executado uma avaliação sistemática dos seus agentes com um conjunto de dados de teste
+- ✅ Usado avaliadores integrados (coerência, fluência) para medir a qualidade
+- ✅ Interpretado métricas de avaliação e identificado áreas de melhoria
+- ✅ Entendido como integrar avaliações a um pipeline de CI/CD

-## Context
+## Contexto
-Monitoring tells you **what's happening** (latency, errors, token usage). Evaluation tells you **if the decisions are actually correct**.
+O monitoramento informa **o que está acontecendo** (latência, erros, uso de tokens). A avaliação informa **se as decisões estão realmente corretas**.
-You have a dataset of 10 test cases — each with claim metrics and the expected correct output (classification + recommended action). You'll run your agents against these test cases and measure how well they perform using LLM-as-judge scoring.
+Você tem um conjunto de dados com 10 casos de teste, cada um com métricas do sinistro e a saída correta esperada (classificação + ação recomendada). Você executará seus agentes nesses casos e medirá o desempenho usando pontuação com LLM como juiz.
-## Why Evaluate?
+## Por que avaliar?
-Monitoring tells you your agents are *running* — evaluation tells you they're doing the *right thing*. These are fundamentally different questions.
+O monitoramento informa que seus agentes estão *executando*; a avaliação informa se estão fazendo a *coisa certa*. Essas são perguntas fundamentalmente diferentes.
-Monitoring captures **operational signals**: latency, token count, error rates, uptime. These tell you *how* the system behaves mechanically. Evaluation captures **quality signals**: are the agent's outputs correct, relevant, coherent, and consistent with expected outcomes? These tell you *whether* the system is actually doing its job.
+O monitoramento captura **sinais operacionais**: latência, contagem de tokens, taxas de erro e disponibilidade. Eles mostram *como* o sistema se comporta mecanicamente. A avaliação captura **sinais de qualidade**: as saídas do agente são corretas, relevantes, coerentes e consistentes com os resultados esperados? Eles mostram *se* o sistema está realmente cumprindo sua função.
-Without systematic evaluation, you're relying on spot-checks — reading a handful of responses and judging them subjectively. This doesn't scale, isn't repeatable, and can't catch regressions when you update a prompt or switch models. Evaluation gives you a measurable baseline: a score you can track over time and compare across versions.
+Sem avaliação sistemática, você depende de verificações pontuais: lê algumas respostas e as julga subjetivamente. Isso não escala, não é repetível e não detecta regressões quando você atualiza um prompt ou troca de modelo. A avaliação fornece uma linha de base mensurável: uma pontuação que você pode acompanhar ao longo do tempo e comparar entre versões.
-Evaluation also surfaces issues that monitoring is blind to. An agent that always responds quickly and without errors but consistently approves high-risk claims — or flags legitimate claims for unnecessary investigation — looks perfectly healthy to monitoring. Evaluation catches it immediately.
+A avaliação também revela problemas que o monitoramento não enxerga. Um agente que sempre responde rapidamente e sem erros, mas aprova consistentemente sinistros de alto risco ou sinaliza sinistros legítimos para investigação desnecessária, parece perfeitamente saudável no monitoramento. A avaliação detecta isso imediatamente.
-For production AI, evaluations should run:
+Para IA em produção, as avaliações devem ser executadas:
-- **Before deployment** — establish a quality baseline and gate releases on minimum scores
-- **After any change** — to system prompts, models, tools, or policy documents in the knowledge base
-- **On a schedule** — to detect drift as fraud patterns evolve or new claim types emerge
+- **Antes da implantação**: estabeleça uma linha de base de qualidade e condicione as versões a pontuações mínimas
+- **Após qualquer alteração**: em prompts de sistema, modelos, ferramentas ou documentos de política na base de conhecimento
+- **Em uma programação**: para detectar desvios à medida que os padrões de fraude evoluem ou novos tipos de sinistro surgem
For ClaimSight specifically: an agent that approves CLM-001 (fraud risk score 0.87, document completeness 45%) because it generated a coherent-sounding rationale is a direct financial risk. Monitoring sees a successful response. Only evaluation — comparing the output against the expected "investigate" decision — catches the mistake.
-## The Evaluation Dataset
+## O conjunto de dados de avaliação
The dataset lives at [challenge-4-deploy/evaluation_dataset.json](../challenge-4-deploy/evaluation_dataset.json) — it contains:
@@ -45,28 +45,28 @@ The dataset lives at [challenge-4-deploy/evaluation_dataset.json](../challenge-4
- Each has an `input` (what you send to the agent)
- Each has an `expected_output` (the correct classification and action)
-## About the Evaluators
+## Sobre os avaliadores
-Microsoft Foundry uses an **LLM-as-judge** approach — a separate model reads each agent response alongside the input and ground truth, then scores it on a 1–5 scale. You'll use two built-in evaluators:
+O Microsoft Foundry usa uma abordagem de **LLM como juiz**: um modelo separado lê cada resposta do agente junto com a entrada e a verdade de referência, e então atribui uma pontuação de 1 a 5. Você usará dois avaliadores integrados:
-- **Coherence** — measures whether the agent's response is logically structured and internally consistent. A score of 5 means the output is clear, well-organised, and flows naturally. A low score means the response is contradictory, jumbled, or hard to follow. For a claims agent this catches things like recommending approval while simultaneously flagging a high fraud risk score.
+- **Coerência**: mede se a resposta do agente é logicamente estruturada e internamente consistente. Uma pontuação 5 significa que a saída é clara, bem organizada e flui naturalmente. Uma pontuação baixa indica uma resposta contraditória, confusa ou difícil de acompanhar. Para um agente de sinistros, isso detecta situações como recomendar aprovação e, ao mesmo tempo, sinalizar uma pontuação alta de risco de fraude.
-- **Fluency** — measures the grammatical and linguistic quality of the agent's response. A score of 5 means the output is well-written, natural, and easy to read. A low score means the response is awkwardly phrased, grammatically broken, or hard to parse — which undermines trust in the decision even when the underlying assessment is correct.
+- **Fluência**: mede a qualidade gramatical e linguística da resposta do agente. Uma pontuação 5 significa que a saída é bem escrita, natural e fácil de ler. Uma pontuação baixa indica uma resposta com formulação estranha, erros gramaticais ou difícil de interpretar, o que reduz a confiança na decisão mesmo quando a avaliação subjacente está correta.
These two scores together give you a quick signal on output quality. When you see a low coherence score, look at the agent's system prompt structure. When you see a low fluency score, look at how the agent phrases its output and whether its system prompt encourages clear, well-formed responses.
-## Get Started
+## Primeiros passos
The evaluation dataset has already been prepared for you as [eval_portal.jsonl](./eval_portal.jsonl) — 10 insurance claim scenarios ready to upload.
---
-### Step 1: Open the Evaluation tab
+### Etapa 1: Abrir a guia de avaliação
1. Go to the [Microsoft Foundry portal](https://ai.azure.com/nextgen) → your project
2. On the top bar → **Build** → **Evaluations** → **Create**
-### Step 2: Configure the evaluation
+### Etapa 2: Configurar a avaliação
3. Select **Agent** as the evaluation target
4. Choose `claims-triage-agent` from the dropdown
@@ -78,7 +78,7 @@ You must enter a dataset name first — the upload stays disabled until you do.
9. Leave the Evaluation Name as is or configure to your liking.
10. Submit your Evaluation. This will take some time to run.
-### Step 3: View results
+### Etapa 3: Exibir resultados
Results appear in the **Evaluate** tab within a few minutes. Click the run name to open the results.
@@ -89,9 +89,9 @@ There are two ways to read the results, and they answer different questions:
---
-## Success Criteria
+## Critérios de sucesso
-- [ ] Evaluation runs against all 10 test cases without errors
-- [ ] You can see per-row scores for coherence and fluency
-- [ ] You've identified at least one case where the agent could improve
-- [ ] You understand the difference between aggregate metrics and per-row analysis
+- [ ] A avaliação é executada nos 10 casos de teste sem erros
+- [ ] Você consegue ver as pontuações por linha de coerência e fluência
+- [ ] Você identificou pelo menos um caso em que o agente pode melhorar
+- [ ] Você entende a diferença entre métricas agregadas e análise por linha
diff --git a/claims/challenge-4-deploy/README.md b/claims/challenge-4-deploy/README.md
index bd34ae3..9c32897 100644
--- a/claims/challenge-4-deploy/README.md
+++ b/claims/challenge-4-deploy/README.md
@@ -1,10 +1,10 @@
-# Challenge 4: Production Workflow
+# Desafio 4: Fluxo de produção
-Time: ~20 minutes
+Tempo: ~20 minutos
-Build a multi-agent orchestration workflow for ClaimSight Insurance and take it to production.
+Crie um fluxo de orquestração multiagente para a ClaimSight Insurance e leve-o à produção.
-## Scenario
+## Cenário
The individual agents you built in Challenge 1 are valuable — but in production, agents need to work
**together** as an automated pipeline. In this challenge you wire the two agents into a full
@@ -12,7 +12,7 @@ claims processing workflow, run it from code, then build and test it visually in

-## Learning Objectives
+## Objetivos de aprendizagem
- Deploy persistent production agents (create once, reuse forever)
- Orchestrate multiple agents step-by-step in a Python workflow
@@ -20,7 +20,7 @@ claims processing workflow, run it from code, then build and test it visually in
- Invoke the portal workflow from Python with live streaming
- View run history and traces in the portal
-## The Workflow
+## O Workflow
```
ensure_agents_deployed()
@@ -37,25 +37,25 @@ print_claims_report() <-- Consolidated Claims Processing Report
---
-## Part 1 — SDK: Build and Run the Python Workflow
+## Parte 1 — SDK: Criar e executar o fluxo Python
-### Step 1: Review the implementation
+### Etapa 1: Revisar a implementação
-Open [deploy.py](./deploy.py) and review:
+Abra [deploy.py](./deploy.py) e revise:
- **`ensure_agents_deployed()`** — lists existing agents, creates `claims-triage-agent` and `claims-decision-agent` if not present
- **`run_claims_triage()`** — calls the triage agent, handles the `assess_claim` function call loop
- **`run_claims_decision()`** — calls the decision agent for each flagged claim
- **`run_claims_workflow()`** — orchestrates all steps and returns the consolidated report
-### Step 2: Run the workflow
+### Etapa 2: Executar o fluxo
```bash
cd claims/challenge-4-deploy
python deploy.py
```
-Expected output:
+Saída esperada:
```
=== Step 1: Ensure Agents Are Deployed ===
Found existing: claims-triage-agent
@@ -80,9 +80,9 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT
---
-## Part 2 — Portal: Build and Test the Visual Workflow
+## Parte 2 — Portal: Criar e testar o fluxo visual
-### Step 3: Verify agents are deployed in the portal
+### Etapa 3: Verificar se os agentes estão implantados no portal
1. Open the [Microsoft Foundry portal](https://ai.azure.com/nextgen)
2. Select your project
@@ -92,7 +92,7 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT
- `claims-decision-agent`
-### Step 4: Build the workflow in the portal designer
+### Etapa 4: Criar o fluxo no designer do portal
1. Select **Build** → **Agents** → **Workflows**
2. Notice that the workflow created using the SDK in Part 1 is listed. Let's create a new workflow by selecting **Create** → **Blank workflow**
@@ -123,7 +123,7 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT

-### Step 5: Test the workflow in the portal playground
+### Etapa 5: Testar o fluxo no playground do portal
> **Why you must include the claims data in your message**
>
@@ -183,7 +183,7 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT
3. Watch the steps execute in sequence — triage first, then decisions
4. Review the approval/denial decisions with justifications
-### Step 6: View run history and traces
+### Etapa 6: Exibir o histórico de execuções e os traces
1. In the **claims-processing-workflow-portal** workflow click **Traces**
@@ -193,7 +193,7 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT
---
-## Success Criteria
+## Critérios de sucesso
- [ ] Python workflow runs end-to-end: triage → decisions → claims report
- [ ] Both agents visible in the Foundry portal as persistent assets
@@ -201,11 +201,11 @@ CLAIMSIGHT INSURANCE — CLAIMS PROCESSING REPORT
---
-## Beyond the Lab: Production Deployment Options
+## Além do laboratório: opções de implantação em produção
You've built and tested your agents locally. Here's how to take them to production:
-### Option 1: Hosted Agents (What You Already Have)
+### Opção 1: Agentes hospedados (o que você já tem)
Your agents created with `agents.create_version()` are already production-ready hosted agents. They live in Foundry indefinitely — any client can invoke them by name via the Responses API. No infrastructure to manage; Foundry handles scaling, versioning, and availability.
@@ -213,7 +213,7 @@ Your agents created with `agents.create_version()` are already production-ready
- **Multi-tenant**: Multiple users/apps can call the same agent simultaneously.
- **Portal visibility**: Agents appear under Build → Agents with playground, run history, and tracing.
-### Option 2: Foundry Workflows (Visual Orchestration)
+### Opção 2: Fluxos do Foundry (orquestração visual)
What you built in Part 2 — wire multiple hosted agents into a DAG using the portal designer. The workflow becomes a deployable agent invoked via the same Responses API.
@@ -221,7 +221,7 @@ What you built in Part 2 — wire multiple hosted agents into a DAG using the po
- Streaming `workflow_action` events showing progress
- Run history with per-step timing
-### Option 3: Azure App Service / Container Apps
+### Opção 3: Azure App Service / Container Apps
Wrap your Python workflow in a FastAPI/Flask app for custom middleware, auth, or business logic:
@@ -233,9 +233,9 @@ async def process_claims():
return report
```
-Deploy to **App Service** (managed PaaS) or **Container Apps** (auto-scaling containers).
+Implante no **App Service** (PaaS gerenciado) ou no **Container Apps** (contêineres com dimensionamento automático).
-### Option 4: Azure Functions (Event-Driven)
+### Opção 4: Azure Functions (orientado a eventos)
Trigger agent workflows from events:
@@ -243,9 +243,9 @@ Trigger agent workflows from events:
- **Service Bus trigger**: Handle claims from a message queue
- **HTTP trigger**: On-demand endpoint for claims adjusters
-Pay-per-execution, scales to zero when idle.
+Pague por execução; o serviço reduz a escala a zero quando está ocioso.
-### Option 5: CI/CD Quality Gates
+### Opção 5: Gates de qualidade de CI/CD
Integrate evaluation into your deployment pipeline:
@@ -253,7 +253,7 @@ Integrate evaluation into your deployment pipeline:
- Promote agent versions: `v1-dev` → `v1-staging` → `v1-prod` after evaluation passes
- Blue/green: Deploy new version to 10% traffic, compare metrics, then promote
-### Summary
+### Resumo
| Pattern | Best For |
|---------|----------|
diff --git a/claims/cleanup.sh b/claims/cleanup.sh
deleted file mode 100644
index 89018bc..0000000
--- a/claims/cleanup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Resource Cleanup Script (Claims)
-# Deletes the resource group and all resources created by deploy.sh
-# =============================================================================
-
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ENV_FILE="$SCRIPT_DIR/challenge-0-setup/.env"
-
-# Load .env if it exists
-if [[ -f "$ENV_FILE" ]]; then
- # shellcheck disable=SC1090
- source "$ENV_FILE"
- echo "Loaded environment from: $ENV_FILE"
-else
- echo "Warning: .env file not found at $ENV_FILE"
- echo "Set RESOURCE_GROUP manually or re-run challenge-0-setup/deploy.sh first."
-fi
-
-RESOURCE_GROUP="${RESOURCE_GROUP:-}"
-
-if [[ -z "$RESOURCE_GROUP" ]]; then
- echo ""
- echo "Error: RESOURCE_GROUP is not set."
- echo "Usage: RESOURCE_GROUP=foundry-hackathon-rg- bash claims/cleanup.sh"
- exit 1
-fi
-
-echo ""
-echo "=============================================="
-echo " Foundry Hackathon — Resource Cleanup"
-echo "=============================================="
-echo ""
-echo " Resource Group: $RESOURCE_GROUP"
-echo ""
-echo " This will permanently delete the resource group and ALL resources inside it:"
-echo " - Microsoft Foundry Resource + project"
-echo " - GPT model deployment"
-echo " - Log Analytics workspace"
-echo " - Application Insights instance"
-echo ""
-read -r -p " Are you sure you want to delete '$RESOURCE_GROUP'? (yes/no): " CONFIRM
-
-if [[ "$CONFIRM" != "yes" ]]; then
- echo "Cancelled. No resources were deleted."
- exit 0
-fi
-
-echo ""
-echo "Deleting resource group '$RESOURCE_GROUP'..."
-az group delete --name "$RESOURCE_GROUP" --yes --no-wait
-
-echo ""
-echo "=============================================="
-echo " ✅ Deletion initiated"
-echo "=============================================="
-echo ""
-echo " The resource group is being deleted in the background."
-echo " It may take a few minutes to fully remove all resources."
-echo ""
-echo " Verify in the Azure Portal:"
-echo " https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups"
-echo ""
diff --git a/claims/infra/main.bicep b/claims/infra/main.bicep
new file mode 100644
index 0000000..7e5ba2d
--- /dev/null
+++ b/claims/infra/main.bicep
@@ -0,0 +1,87 @@
+param location string = 'swedencentral'
+param suffix string = take(uniqueString(subscription().id, location), 8)
+param foundryResourceName string = 'foundry-hack-${suffix}'
+param projectName string = 'claims-project'
+param modelDeploymentName string = 'gpt-5.4'
+param modelName string = 'gpt-5.4'
+param modelVersion string = '2026-03-05'
+param logAnalyticsName string = 'foundry-hack-logs-${suffix}'
+param appInsightsName string = 'foundry-hack-insights-${suffix}'
+param tags object = { environment: 'hack' }
+
+resource foundry 'Microsoft.CognitiveServices/accounts@2025-06-01' = {
+ name: foundryResourceName
+ location: location
+ kind: 'AIServices'
+ sku: { name: 'S0' }
+ identity: { type: 'SystemAssigned' }
+ properties: {
+ customSubDomainName: foundryResourceName
+ allowProjectManagement: true
+ disableLocalAuth: false
+ publicNetworkAccess: 'Enabled'
+ }
+}
+resource project 'Microsoft.CognitiveServices/accounts/projects@2025-06-01' = {
+ parent: foundry
+ name: projectName
+ location: location
+ identity: { type: 'SystemAssigned' }
+ properties: { displayName: projectName }
+}
+resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2025-06-01' = {
+ parent: foundry
+ name: modelDeploymentName
+ sku: {
+ name: 'GlobalStandard'
+ capacity: 10
+ }
+ properties: {
+ model: {
+ format: 'OpenAI'
+ name: modelName
+ version: modelVersion
+ }
+ }
+ dependsOn: [project]
+}
+resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
+ name: logAnalyticsName
+ location: location
+ tags: tags
+ properties: { retentionInDays: 30 }
+}
+resource appInsights 'Microsoft.Insights/components@2020-02-02' = {
+ name: appInsightsName
+ location: location
+ kind: 'web'
+ tags: tags
+ properties: {
+ Application_Type: 'web'
+ WorkspaceResourceId: logAnalytics.id
+ }
+}
+resource appInsightsConnection 'Microsoft.CognitiveServices/accounts/connections@2025-06-01' = {
+ parent: foundry
+ name: 'appinsights-conn'
+ properties: {
+ category: 'AppInsights'
+ target: appInsights.id
+ authType: 'ApiKey'
+ credentials: { key: appInsights.properties.ConnectionString }
+ isSharedToAll: true
+ metadata: {
+ ApiType: 'Azure'
+ ResourceId: appInsights.id
+ }
+ }
+}
+output subscriptionId string = subscription().id
+output resourceGroupName string = resourceGroup().name
+output foundryResourceName string = foundry.name
+output projectName string = project.name
+output foundryEndpoint string = foundry.properties.endpoint
+output projectConnectionString string = 'https://${foundry.name}.services.ai.azure.com/api/projects/${project.name}'
+output modelDeploymentName string = modelDeployment.name
+output appInsightsConnectionString string = appInsights.properties.ConnectionString
+output appInsightsInstrumentationKey string = appInsights.properties.InstrumentationKey
\ No newline at end of file
diff --git a/claims/scripts/write-env.ps1 b/claims/scripts/write-env.ps1
new file mode 100644
index 0000000..0701718
--- /dev/null
+++ b/claims/scripts/write-env.ps1
@@ -0,0 +1,17 @@
+$ErrorActionPreference = 'Stop'
+function Get-AzdValue([string] $Name) { $value = azd env get-value $Name 2>$null; if ([string]::IsNullOrWhiteSpace($value)) { throw "azd value '$Name' was not produced." }; return $value.Trim() }
+$envFile = Join-Path $PSScriptRoot '..\.env'
+@"
+AZURE_SUBSCRIPTION_ID=$(Get-AzdValue subscriptionId)
+RESOURCE_GROUP=$(Get-AzdValue resourceGroupName)
+FOUNDRY_RESOURCE_NAME=$(Get-AzdValue foundryResourceName)
+PROJECT_NAME=$(Get-AzdValue projectName)
+FOUNDRY_ENDPOINT=$(Get-AzdValue foundryEndpoint)
+PROJECT_CONNECTION_STRING=$(Get-AzdValue projectConnectionString)
+MODEL_DEPLOYMENT_NAME=$(Get-AzdValue modelDeploymentName)
+APPLICATIONINSIGHTS_CONNECTION_STRING=$(Get-AzdValue appInsightsConnectionString)
+APPINSIGHTS_INSTRUMENTATION_KEY=$(Get-AzdValue appInsightsInstrumentationKey)
+AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
+OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
+"@ | Set-Content -Path $envFile -Encoding utf8NoBOM
+Write-Host "Environment file written to $envFile"
\ No newline at end of file
diff --git a/claims/wrapup.md b/claims/wrapup.md
index 29aea1d..5e7c7b0 100644
--- a/claims/wrapup.md
+++ b/claims/wrapup.md
@@ -1,72 +1,73 @@
-# 🎉 Lab Complete — Insurance Claims Processing (ClaimSight Insurance)
+# 🎉 Laboratório concluído — Processamento de Sinistros (ClaimSight Insurance)
-Congratulations — you've built, instrumented, evaluated, and deployed a production-ready multi-agent AI system from scratch. Here's what you accomplished.
+Parabéns: você criou, instrumentou, avaliou e implantou do zero um sistema de IA multiagente pronto para produção. Veja o que você realizou.
---
-## Recap
+## Recapitulação
-| # | Challenge | What You Built |
+| # | Desafio | O que você criou |
|---|-----------|----------------|
-| 0 | **Setup** | Provisioned a Microsoft Foundry Resource, project, GPT model deployment, Log Analytics workspace, and Application Insights instance via a single `deploy.sh` script |
-| 1 | **Build Agents** | Created a **Claims Triage Agent** (assesses document completeness, fraud risk, and policy coverage) and a **Claims Decision Agent** (recommends approve, fast-track, flag for investigation, or deny — with supporting rationale) |
-| 2 | **Monitor** | Enabled OpenTelemetry GenAI tracing — every model call, tool invocation, and token count is captured as a distributed trace in Application Insights |
-| 3 | **Evaluate** | Ran systematic LLM-as-judge evaluations across the full claims dataset, producing repeatable coherence and fluency scores you can version-track across prompt changes |
-| 4 | **Production Workflow** | Wired both agents into an orchestrated pipeline in the Foundry portal — a stable, testable endpoint with run history that adjusters can inspect and audit |
+| 0 | **Configuração** | Provisionou um recurso do Microsoft Foundry, um projeto, uma implantação de modelo GPT, um workspace do Log Analytics e uma instância do Application Insights usando `azd provision` |
+| 1 | **Criar agentes** | Criou um **Claims Triage Agent** (avalia completude documental, risco de fraude e cobertura da apólice) e um **Claims Decision Agent** (recomenda aprovar, acelerar, sinalizar para investigação ou negar, com justificativa) |
+| 2 | **Monitorar** | Habilitou o rastreamento GenAI do OpenTelemetry: cada chamada de modelo, invocação de ferramenta e contagem de tokens é capturada como um trace distribuído no Application Insights |
+| 3 | **Avaliar** | Executou avaliações sistemáticas com LLM como juiz em todo o conjunto de dados de sinistros, produzindo pontuações repetíveis de coerência e fluência que podem ser acompanhadas por versão entre alterações de prompt |
+| 4 | **Fluxo de produção** | Conectou os dois agentes em um pipeline orquestrado no portal do Foundry, um endpoint estável e testável com histórico de execuções que os reguladores podem inspecionar e auditar |
-### Skills you practiced
+### Habilidades praticadas
-- Designing agent system prompts with clear role boundaries and constraints
-- Grounding agents in real claims data via tool calls (function calling)
-- Distributed tracing for AI systems with OpenTelemetry
-- LLM-as-judge evaluation with the Azure AI Evaluation SDK
-- Multi-agent orchestration in the Foundry portal
+- Projetar prompts de sistema para agentes com limites claros de função e restrições
+- Fundamentar agentes em dados reais de sinistros por meio de chamadas de ferramentas (function calling)
+- Rastreamento distribuído de sistemas de IA com OpenTelemetry
+- Avaliação com LLM como juiz usando o Azure AI Evaluation SDK
+- Orquestração multiagente no portal do Foundry
---
-## Next Steps
+## Próximos passos
-Want to take the ClaimSight system further? Here are some directions:
+Quer levar o sistema ClaimSight mais longe? Veja algumas direções:
-- **Add more agents** — a Document Extraction agent that parses uploaded PDFs, or a Fraud Pattern agent that cross-references claim history across policyholders
-- **Connect real data** — replace the static `claims_data.json` with a live policy management system or document storage query
-- **Improve evaluation** — add task-specific evaluators (e.g., "did the agent correctly flag a claim with a fraud score above 0.7?") alongside the generic coherence scores
-- **Set up CI/CD** — run your evaluation dataset automatically on every prompt change using GitHub Actions and fail the build if quality scores drop below a threshold
-- **Explore fine-tuning** — use your traced claim decisions as training data to fine-tune a smaller model for the initial triage step
-- **Try another scenario** — the [Factory](../factory/README.md) and [Call Center](../callcenter/README.md) scenarios cover predictive maintenance and customer support using the same lifecycle
+- **Adicionar mais agentes**: um agente de Extração de Documentos que analise PDFs carregados ou um agente de Padrões de Fraude que cruze o histórico de sinistros dos segurados
+- **Conectar dados reais**: substitua o `claims_data.json` estático por um sistema ativo de gerenciamento de apólices ou uma consulta ao armazenamento de documentos
+- **Melhorar a avaliação**: adicione avaliadores específicos da tarefa (por exemplo, "o agente sinalizou corretamente um sinistro com pontuação de fraude acima de 0,7?") junto às pontuações genéricas de coerência
+- **Configurar CI/CD**: execute seu conjunto de dados de avaliação automaticamente a cada alteração de prompt usando o GitHub Actions e faça o build falhar se as pontuações de qualidade caírem abaixo de um limite
+- **Explorar ajuste fino**: use suas decisões de sinistros rastreadas como dados de treinamento para ajustar um modelo menor para a etapa inicial de triagem
+- **Experimentar outro cenário**: os cenários de [Fábrica](../factory/README.md) e [Central de atendimento](../callcenter/README.md) abordam manutenção preditiva e suporte ao cliente usando o mesmo ciclo de vida
---
-## Clean Up Azure Resources
+## Limpar recursos do Azure
-> **Important:** The resources deployed in Challenge 0 incur Azure costs while they exist. Delete them when you're done.
+> **Importante:** os recursos implantados no Desafio 0 geram custos do Azure enquanto existirem. Exclua-os quando terminar.
-### What gets deleted
+### O que será excluído
-- The resource group `foundry-hackathon-rg-` and everything inside it:
+- O grupo de recursos `foundry-hackathon-rg-` e tudo dentro dele:
- Microsoft Foundry Resource + project
- GPT model deployment
- Log Analytics workspace
- Application Insights instance
-### Option 1 — Script
+### Opção 1 — azd down
-Run the cleanup script from the repo root:
+Na pasta **claims** (onde o ambiente `azd` foi inicializado), execute:
```bash
-bash claims/cleanup.sh
+cd claims
+azd down --purge
```
-The script reads the `.env` file written by `deploy.sh` so it knows exactly which resource group to target. It asks for confirmation before deleting.
+O comando usa o ambiente `azd` criado por `azd provision` para saber exatamente qual grupo de recursos deve ser alvo. Ele pede confirmação antes de excluir.
-### Option 2 — Azure Portal
+### Opção 2 — Portal do Azure
1. Go to [portal.azure.com](https://portal.azure.com)
-2. Search for **Resource groups**
-3. Find `foundry-hackathon-rg-`
-4. Click **Delete resource group** and confirm
+2. Pesquise por **Grupos de recursos**
+3. Encontre `foundry-hackathon-rg-`
+4. Clique em **Excluir grupo de recursos** e confirme
-### Option 3 — Azure CLI
+### Opção 3 — Azure CLI
```bash
# Replace with the value shown in your .env file
diff --git a/factory/README.md b/factory/README.md
index 66d41f4..da90018 100644
--- a/factory/README.md
+++ b/factory/README.md
@@ -1,50 +1,50 @@
-# 🏭 Scenario: Predictive Maintenance — TireForge Industries
+# 🏭 Cenário: Manutenção Preditiva — TireForge Industries
-## Background
+## Contexto

-**TireForge Industries** operates a tire manufacturing plant with 5 critical machines:
+**TireForge Industries** opera uma fábrica de pneus com 5 máquinas críticas:
-- **MX-001** (Mixer) — Blends raw rubber compounds
-- **EX-002** (Extruder) — Shapes rubber into tire tread profiles
-- **CP-003** (Curing Press) — Vulcanizes tires under heat and pressure
-- **CU-004** (Cooling Unit) — Gradually cools cured tires
-- **IS-005** (Inspection Station) — Quality assurance via vibration analysis
+- **MX-001** (Misturador) — Mistura compostos de borracha bruta
+- **EX-002** (Extrusora) — Molda a borracha nos perfis da banda de rodagem
+- **CP-003** (Prensa de Cura) — Vulcaniza pneus sob calor e pressão
+- **CU-004** (Unidade de Resfriamento) — Resfria gradualmente os pneus curados
+- **IS-005** (Estação de Inspeção) — Garantia de qualidade por análise de vibração
-Each machine emits real-time sensor data: temperature, pressure, vibration, and RPM.
+Cada máquina emite dados de sensores em tempo real: temperatura, pressão, vibração e RPM.
-## Your Mission
+## Sua Missão

-Build an AI agent system that:
+Crie um sistema de agentes de IA que:
-1. **Detects anomalies** — Compares sensor readings against thresholds
-2. **Diagnoses faults** — Reasons about root causes from anomaly patterns
-3. **Reports health** — Produces a consolidated factory health report
+1. **Detecte anomalias** — Compare as leituras dos sensores com os limites
+2. **Diagnostique falhas** — Raciocine sobre as causas raiz a partir dos padrões de anomalia
+3. **Relate a saúde** — Produza um relatório consolidado da saúde da fábrica
-## Challenges
+## Desafios
-| # | Challenge | What You'll Do | Time |
+| # | Desafio | O que você fará | Tempo |
|---|-----------|---------------|------|
-| 0 | [Setup](./challenge-0-setup/README.md) | Deploy Microsoft Foundry infrastructure | 20 min |
-| 1 | [Build Agents](./challenge-1-build/README.md) | Create Anomaly Detection + Fault Diagnosis agents | 30 min |
-| 2 | [Monitor](./challenge-2-monitor/README.md) | Enable GenAI tracing with Application Insights | 20 min |
-| 3 | [Evaluate](./challenge-3-evaluate/README.md) | Run systematic quality evaluations | 30 min |
-| 4 | [Production Workflow](./challenge-4-deploy/README.md) | Multi-agent orchestration + portal workflow | 20 min |
+| 0 | [Configuração](./challenge-0-setup/README.md) | Implantar a infraestrutura do Microsoft Foundry | 20 min |
+| 1 | [Criar Agentes](./challenge-1-build/README.md) | Criar agentes de Detecção de Anomalias + Diagnóstico de Falhas | 30 min |
+| 2 | [Monitorar](./challenge-2-monitor/README.md) | Habilitar rastreamento de GenAI com o Application Insights | 20 min |
+| 3 | [Avaliar](./challenge-3-evaluate/README.md) | Executar avaliações sistemáticas de qualidade | 30 min |
+| 4 | [Fluxo de Produção](./challenge-4-deploy/README.md) | Orquestração multiagente + fluxo no portal | 20 min |
-## Why the Challenges Are in This Order
+## Por que os Desafios Estão Nesta Ordem
-**Build first.** An agent with a vague system prompt or missing tools will hallucinate plausible-sounding diagnoses. For a tire manufacturing plant, that's not an academic problem — it means maintenance crews chasing phantom faults, or missing real ones until a machine fails mid-shift. The `check_thresholds` tool grounds the Anomaly Agent in actual machine specs, not general LLM knowledge about what "normal" vibration looks like for an extruder.
+**Crie primeiro.** Um agente com um prompt de sistema vago ou sem ferramentas produzirá diagnósticos plausíveis, mas inventados. Em uma fábrica de pneus, isso não é um problema acadêmico — significa equipes de manutenção perseguindo falhas inexistentes ou não detectando falhas reais até que uma máquina pare no meio do turno. A ferramenta `check_thresholds` fundamenta o Agente de Anomalias nas especificações reais das máquinas, e não no conhecimento geral do LLM sobre como é a vibração "normal" de uma extrusora.
-**Then monitor.** When the Fault Diagnosis Agent recommends pulling CP-003 offline, did it actually examine the sensor readings you fed it? Did `check_thresholds` get called, or did the agent reason from context alone? Application Insights traces answer that. Without them, the only signal you have is a machine failure that should have been caught earlier.
+**Depois monitore.** Quando o Agente de Diagnóstico de Falhas recomendar tirar a CP-003 de operação, ele realmente examinou as leituras dos sensores que você forneceu? `check_thresholds` foi chamado ou o agente raciocinou apenas com base no contexto? Os rastreamentos do Application Insights respondem a isso. Sem eles, o único sinal que você tem é uma falha de máquina que deveria ter sido detectada antes.
-**Then evaluate.** Tracing tells you the agent ran. Evaluation tells you it ran correctly. The curated test dataset gives you a repeatable score to compare before and after any prompt change or model swap — so you catch regressions before they reach the production floor.
+**Depois avalie.** O rastreamento informa que o agente foi executado. A avaliação informa que ele foi executado corretamente. O conjunto de testes selecionado fornece uma pontuação repetível para comparar antes e depois de qualquer mudança de prompt ou troca de modelo, permitindo detectar regressões antes que cheguem ao chão de fábrica.
-**Then deploy.** The portal workflow turns what you built in scripts into something the maintenance team can actually hand off: a stable endpoint, a per-shift factory health report, and a trace history for every diagnosis. That's the gap between a demo and a tool someone will actually trust before scheduling an unplanned maintenance window.
+**Depois implante.** O fluxo do portal transforma o que você criou em scripts em algo que a equipe de manutenção pode realmente utilizar: um endpoint estável, um relatório da saúde da fábrica por turno e um histórico de rastreamento para cada diagnóstico. Essa é a diferença entre uma demonstração e uma ferramenta em que alguém confiará antes de agendar uma janela de manutenção não planejada.
## Architecture
@@ -52,29 +52,29 @@ Build an AI agent system that:

-## Next Steps
+## Próximos Passos
-Completing these challenges gives you a working multi-agent system with observability and evaluation in place. Here are the directions you can take it further:
+Ao concluir estes desafios, você terá um sistema multiagente funcional, com observabilidade e avaliação configuradas. Veja alguns caminhos para levá-lo adiante:
-**Deploy as a hosted agent endpoint**
-Microsoft Foundry can host your agents as persistent, scalable API endpoints — no infrastructure to manage. Once hosted, any system (a SCADA dashboard, a mobile maintenance app, a Slack bot) can send a machine ID and receive a diagnosis in real time, rather than running a Python script manually.
+**Implante como endpoint de agente hospedado**
+O Microsoft Foundry pode hospedar seus agentes como endpoints de API persistentes e escaláveis, sem infraestrutura para gerenciar. Depois de hospedados, qualquer sistema (um painel SCADA, um aplicativo móvel de manutenção ou um bot do Slack) pode enviar um ID de máquina e receber um diagnóstico em tempo real, em vez de executar manualmente um script Python.
-**Add more tools to your agents**
-The `check_thresholds` function in this lab uses local mock data. In production you’d replace it with tools that call real systems:
-- A `fetch_maintenance_history` tool querying your CMMS (e.g. SAP PM, IBM Maximo) for past failures on that machine
-- A `lookup_spare_parts` tool checking inventory availability before recommending a replacement
-- A `create_work_order` tool that automatically opens a ServiceNow ticket when the Fault Diagnosis Agent flags a critical issue
+**Adicione mais ferramentas aos seus agentes**
+A função `check_thresholds` deste laboratório usa dados simulados locais. Em produção, você a substituiria por ferramentas que chamam sistemas reais:
+- Uma ferramenta `fetch_maintenance_history` que consulta seu CMMS (por exemplo, SAP PM ou IBM Maximo) em busca de falhas anteriores nessa máquina
+- Uma ferramenta `lookup_spare_parts` que verifica a disponibilidade no estoque antes de recomendar uma substituição
+- Uma ferramenta `create_work_order` que abre automaticamente um tíquete no ServiceNow quando o Agente de Diagnóstico de Falhas sinaliza um problema crítico
-**Build a knowledge base**
-Upload TireForge’s machine manuals, supplier spec sheets, and historical incident reports to a Microsoft Foundry knowledge base. Attach it to the Fault Diagnosis Agent as a File Search tool so its recommendations are grounded in documented procedures rather than general LLM knowledge.
+**Crie uma base de conhecimento**
+Carregue os manuais das máquinas da TireForge, as fichas de especificações dos fornecedores e os relatórios históricos de incidentes em uma base de conhecimento do Microsoft Foundry. Anexe-a ao Agente de Diagnóstico de Falhas como uma ferramenta de Pesquisa de Arquivos para que suas recomendações se baseiem em procedimentos documentados, e não no conhecimento geral do LLM.
-**Integrate evaluations into CI/CD**
-Run your evaluation dataset automatically on every pull request or deployment. If the coherence or relevance score drops below a threshold (e.g. 3.5 out of 5), block the release. This prevents a system prompt edit or model update from silently degrading diagnosis quality in production.
+**Integre avaliações ao CI/CD**
+Execute automaticamente seu conjunto de avaliação em cada pull request ou implantação. Se a pontuação de coerência ou relevância cair abaixo de um limite (por exemplo, 3,5 de 5), bloqueie a versão. Isso impede que uma edição do prompt de sistema ou uma atualização do modelo degrade silenciosamente a qualidade do diagnóstico em produção.
-**Explore advanced agent patterns**
-- **Parallelise** the anomaly checks across all 5 machines simultaneously instead of sequentially
-- **Add confidence thresholds** — if the Anomaly Detection Agent is uncertain, escalate to a human operator rather than passing to Fault Diagnosis automatically
-- **Human-in-the-loop** — for critical faults, require a maintenance engineer to approve the recommended action before it triggers a work order
+**Explore padrões avançados de agentes**
+- **Paralelize** as verificações de anomalias nas 5 máquinas simultaneamente, em vez de sequencialmente
+- **Adicione limites de confiança** — se o Agente de Detecção de Anomalias estiver incerto, encaminhe o caso a um operador humano em vez de passá-lo automaticamente ao Diagnóstico de Falhas
+- **Humano no circuito** — para falhas críticas, exija que um engenheiro de manutenção aprove a ação recomendada antes que ela acione uma ordem de serviço
-**Fine-tune for your domain**
-Use your evaluation results to identify systematic errors — machines the agent consistently misclassifies or fault types it handles poorly. Use those cases to refine system prompts, add targeted few-shot examples, or fine-tune the underlying model on TireForge-specific sensor patterns.
+**Faça o ajuste fino para seu domínio**
+Use os resultados da avaliação para identificar erros sistemáticos — máquinas que o agente classifica incorretamente de forma recorrente ou tipos de falha que ele trata mal. Use esses casos para refinar os prompts de sistema, adicionar exemplos few-shot direcionados ou fazer o ajuste fino do modelo subjacente com padrões de sensores específicos da TireForge.
diff --git a/factory/azure.yaml b/factory/azure.yaml
new file mode 100644
index 0000000..0feb174
--- /dev/null
+++ b/factory/azure.yaml
@@ -0,0 +1,11 @@
+# yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json
+name: factory
+
+infra:
+ provider: bicep
+ path: infra
+
+hooks:
+ postprovision:
+ shell: pwsh
+ run: ./scripts/write-env.ps1
\ No newline at end of file
diff --git a/factory/challenge-0-setup/.env.template b/factory/challenge-0-setup/.env.template
index c8f40ba..1c2622a 100644
--- a/factory/challenge-0-setup/.env.template
+++ b/factory/challenge-0-setup/.env.template
@@ -1,6 +1,6 @@
# =============================================================================
# Foundry Hackathon — Environment Variables
-# Fill in values from deploy.sh output
+# Generated by azd provision
# =============================================================================
# Azure Subscription
@@ -13,7 +13,7 @@ PROJECT_NAME=tire-factory-project
FOUNDRY_ENDPOINT=
PROJECT_CONNECTION_STRING=
MODEL_DEPLOYMENT_NAME=gpt-5.4
-# Optional deploy.sh overrides (GlobalStandard supports gpt-5.4)
+# Optional azd parameter overrides (GlobalStandard supports gpt-5.4)
# MODEL_NAME=gpt-5.4
# MODEL_VERSION=2026-03-05
diff --git a/factory/challenge-0-setup/README.md b/factory/challenge-0-setup/README.md
index c46cf56..6338a62 100644
--- a/factory/challenge-0-setup/README.md
+++ b/factory/challenge-0-setup/README.md
@@ -1,56 +1,56 @@
-# Challenge 0: Setup & Authentication
+# Desafio 0: Configuração e Autenticação
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ A fully provisioned Microsoft Foundry project with a deployed model
-- ✅ Application Insights provisioned and connection string available
-- ✅ Verified authentication from your local machine to Foundry
-- ✅ Confirmed your agent endpoint is working
+- ✅ Um projeto do Microsoft Foundry totalmente provisionado com um modelo implantado
+- ✅ O Application Insights provisionado e a cadeia de conexão disponível
+- ✅ A autenticação da sua máquina local para o Foundry verificada
+- ✅ A confirmação de que o endpoint do seu agente está funcionando

-## Get Started
+## Comece Aqui
> [!NOTE]
-> Before you begin, make sure you have:
-> - An **Azure subscription** where you hold both the **Contributor** role (to deploy the infrastructure) and the **Foundry User** role (to build, evaluate, and run agents in Challenges 1–4).
-> - A **GitHub handle** (account) to fork this repository and run it in GitHub Codespaces.
+> Antes de começar, verifique se você tem:
+> - Uma **assinatura do Azure** na qual você tenha as funções **Colaborador** (para implantar a infraestrutura) e **Usuário do Foundry** (para criar, avaliar e executar agentes nos Desafios 1–4).
+> - Uma **conta do GitHub** para criar um fork deste repositório e executá-lo no GitHub Codespaces.
>
-> Subscription **Owner** (or Contributor) rights alone are **not** sufficient. Those grant control-plane access to create and manage resources, but building and running agents are data-plane operations that require the separate **Foundry User** role assigned on the Foundry account. An Owner can self-assign it; a Contributor must ask an admin to assign it after deployment.
+> Os direitos de **Proprietário** (ou Colaborador) da assinatura, sozinhos, **não** são suficientes. Eles concedem acesso ao plano de controle para criar e gerenciar recursos, mas criar e executar agentes são operações do plano de dados que exigem a função separada **Usuário do Foundry** atribuída na conta do Foundry. Um Proprietário pode atribuí-la a si mesmo; um Colaborador deve pedir a um administrador que a atribua após a implantação.
-There are two ways to get started — pick one:
+Há duas maneiras de começar — escolha uma:
-> **First step for both options:** [Fork this repository](https://github.com/microsoft/FrontierWeekHack/fork) to your own GitHub account.
+> **Primeiro passo para as duas opções:** [Crie um fork deste repositório](https://github.com/diegodocs/FrontierWeekHack/fork) na sua conta do GitHub.
-### Option A: GitHub Codespaces (recommended)
+### Opção A: GitHub Codespaces (recomendado)
-No local installs needed. Everything runs in a cloud dev environment.
+Não é necessário instalar nada localmente. Tudo é executado em um ambiente de desenvolvimento na nuvem.
-[](https://codespaces.new/microsoft/FrontierWeekHack)
+[](https://codespaces.new/diegodocs/FrontierWeekHack)
-1. Click the badge above (select your fork if applicable)
-2. Wait for the Codespace to build (~2 min)
-3. In the terminal, log in to Azure:
+1. Clique no selo acima (se aplicável, selecione seu fork)
+2. Aguarde a criação do Codespace (~2 min)
+3. No terminal, entre no Azure:
```bash
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar a Infraestrutura** abaixo.
---
-### Option B: Local environment
+### Opção B: Ambiente local
-Run everything on your own machine. Requires Python 3.10+ and Azure CLI.
+Execute tudo na sua própria máquina. Requer Python 3.10+ e a CLI do Azure.
```bash
# 1. Clone this repo
-git clone https://github.com/microsoft/FrontierWeekHack.git
+git clone https://github.com/diegodocs/FrontierWeekHack.git
cd FrontierWeekHack
# 2. Create and activate a virtual environment
@@ -64,45 +64,47 @@ pip install -r requirements.txt
az login
```
-4. Continue to **Deploy Infrastructure** below.
+4. Continue em **Implantar a Infraestrutura** abaixo.
-## Deploy Infrastructure
+## Implantar a Infraestrutura
-From the **factory** folder, run the deploy script:
+Na pasta **factory**, inicialize o ambiente `azd` e provisione a infraestrutura:
```bash
-bash challenge-0-setup/deploy.sh
+cd factory
+azd auth login
+azd provision
```
-This will provision all resources **and** automatically write your `.env` file to the repository root as `.env`. The deployment will take a couple of minutes to complete.
+Isso provisionará todos os recursos **e** gravará automaticamente seu arquivo `.env` na pasta **factory**. A implantação levará alguns minutos para ser concluída.
-## Verify the creation of your resources
+## Verificar a criação dos seus recursos
-Go to the [Azure Portal](https://portal.azure.com/) and find your resource group, which should now contain resources like this:
+Acesse o [Portal do Azure](https://portal.azure.com/) e localize seu grupo de recursos, que agora deverá conter recursos como estes:

> [!NOTE]
-> The resource name prefixes vary by scenario and the suffixes are unique for each deployment
+> Os prefixos dos nomes dos recursos variam por cenário e os sufixos são exclusivos para cada implantação
-Go to the [Microsoft Foundry Portal](https://ai.azure.com/nextgen) and verify that you can access the Foundry project.
+Acesse o [Portal do Microsoft Foundry](https://ai.azure.com/nextgen) e verifique se você consegue acessar o projeto do Foundry.

-Select **Build** in the top navigation, then **Models**, and verify that the **gpt-5.4** model is deployed.
+Selecione **Criar** na navegação superior, depois **Modelos**, e verifique se o modelo **gpt-5.4** está implantado.
>[!NOTE]
-> In some versions of the Foundry Portal the **Models** tab is rebranded to **Deployments** but they serve the same purpose.
+> Em algumas versões do Portal do Foundry, a guia **Modelos** aparece com o nome **Implantações**, mas ambas têm a mesma finalidade.

-Select **gpt-5.4**, enter a test message in the model playground, and verify that you get a response.
+Selecione **gpt-5.4**, insira uma mensagem de teste no playground do modelo e verifique se você recebe uma resposta.

-## Success Criteria
+## Critérios de Sucesso
-- [ ] You can see your Microsoft Foundry project in the Azure Portal
-- [ ] A model deployment for gpt-5.4 shows "Succeeded" status
-- [ ] You can send a test message in the Foundry Model Playground
+- [ ] Você consegue ver seu projeto do Microsoft Foundry no Portal do Azure
+- [ ] Uma implantação do modelo gpt-5.4 mostra o status "Succeeded"
+- [ ] Você consegue enviar uma mensagem de teste no Playground de Modelos do Foundry
diff --git a/factory/challenge-0-setup/deploy.sh b/factory/challenge-0-setup/deploy.sh
deleted file mode 100644
index e017074..0000000
--- a/factory/challenge-0-setup/deploy.sh
+++ /dev/null
@@ -1,249 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Infrastructure Deployment Script
-# Provisions: AI Foundry (hub + project + model), Log Analytics, App Insights
-# Region: swedencentral
-# =============================================================================
-
-# --- Azure CLI extensions ----------------------------------------------------
-# Auto-install required CLI extensions non-interactively (no Y/n prompts).
-az config set extension.use_dynamic_install=yes_without_prompt --only-show-errors >/dev/null 2>&1 || true
-az extension add --name application-insights --only-show-errors >/dev/null 2>&1 || true
-
-# --- Configuration -----------------------------------------------------------
-SUFFIX="${SUFFIX:-$(openssl rand -hex 4)}"
-RESOURCE_GROUP="${RESOURCE_GROUP:-foundry-hackathon-rg-$SUFFIX}"
-LOCATION="${LOCATION:-swedencentral}"
-FOUNDRY_RESOURCE_NAME="${FOUNDRY_RESOURCE_NAME:-foundry-hack-$SUFFIX}"
-PROJECT_NAME="${PROJECT_NAME:-factory-project}"
-MODEL_DEPLOYMENT_NAME="${MODEL_DEPLOYMENT_NAME:-gpt-5.4}"
-MODEL_NAME="${MODEL_NAME:-gpt-5.4}"
-MODEL_VERSION="${MODEL_VERSION:-2026-03-05}"
-LOG_ANALYTICS_NAME="${LOG_ANALYTICS_NAME:-foundry-hack-logs-$SUFFIX}"
-APP_INSIGHTS_NAME="${APP_INSIGHTS_NAME:-foundry-hack-insights-$SUFFIX}"
-
-# --- Argument parsing --------------------------------------------------------
-# Resource tags always include the default below. Provide additional tags with:
-# deploy.sh --tags 'MyTag=MyValue' 'Owner=Jane'
-TAGS=("environment=hack")
-while [[ $# -gt 0 ]]; do
- case "$1" in
- --tags)
- shift
- while [[ $# -gt 0 && "$1" != --* ]]; do
- TAGS+=("$1")
- shift
- done
- ;;
- *)
- echo "Unknown argument: $1" >&2
- echo "Usage: deploy.sh [--tags 'Key=Value' ...]" >&2
- exit 1
- ;;
- esac
-done
-
-echo "=============================================="
-echo " Foundry Hackathon — Infrastructure Deploy"
-echo "=============================================="
-echo ""
-echo "Suffix: $SUFFIX"
-echo "Resource Group: $RESOURCE_GROUP"
-echo "Location: $LOCATION"
-echo "Foundry Resource: $FOUNDRY_RESOURCE_NAME"
-echo "Project: $PROJECT_NAME"
-echo "Model Deployment: $MODEL_DEPLOYMENT_NAME"
-echo "Model Name: $MODEL_NAME"
-echo "Model Version: $MODEL_VERSION"
-echo "Tags: ${TAGS[*]}"
-echo ""
-
-# --- Resource Group ----------------------------------------------------------
-echo ">>> Creating resource group..."
-az group create \
- --name "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --output none \
- --tags "${TAGS[@]}"
-
-# --- AI Foundry Hub ----------------------------------------------------------
-echo ">>> Creating Microsoft Foundry Account resource (AIServices)..."
-SUBSCRIPTION_ID=$(az account show --query id -o tsv)
-az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME?api-version=2026-03-01" \
- --body "{\"kind\": \"AIServices\", \"sku\": {\"name\": \"S0\"}, \"location\": \"$LOCATION\", \"identity\": {\"type\": \"SystemAssigned\"}, \"properties\": {\"customSubDomainName\": \"$FOUNDRY_RESOURCE_NAME\", \"publicNetworkAccess\": \"Enabled\", \"allowProjectManagement\": true}}" \
- --output none || true
-
-echo ">>> Waiting for AIServices resource to reach Succeeded state..."
-for i in $(seq 1 36); do
- PROV_STATE=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.provisioningState" -o tsv 2>/dev/null || echo "Pending")
- if [ "$PROV_STATE" = "Succeeded" ]; then
- echo " ✓ Provisioning complete."
- break
- elif [ "$PROV_STATE" = "Failed" ]; then
- echo "❌ AIServices resource provisioning failed. Check the Azure portal for details."
- exit 1
- fi
- echo " State: $PROV_STATE — retrying in 10s... ($i/36)"
- sleep 10
-done
-
-# Some tenants enforce this with Azure Policy. Try to force-enable key auth and verify.
-FOUNDRY_RESOURCE_ID=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.disableLocalAuth=false \
- --output none || true
-
-az resource update \
- --ids "$FOUNDRY_RESOURCE_ID" \
- --set properties.allowProjectManagement=true \
- --output none
-
-DISABLE_LOCAL_AUTH=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query properties.disableLocalAuth -o tsv)
-
-if [ "$DISABLE_LOCAL_AUTH" = "true" ]; then
- echo "⚠️ API key authentication is disabled by Azure Policy on this tenant."
- echo " The deployment will continue — use DefaultAzureCredential (Entra ID) in your code."
-fi
-
-echo ">>> Creating Microsoft Foundry project..."
-az cognitiveservices account project create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --location "$LOCATION" \
- --output none
-
-# --- Model Deployment --------------------------------------------------------
-echo ">>> Deploying model: $MODEL_NAME ($MODEL_VERSION)..."
-az cognitiveservices account deployment create \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --deployment-name "$MODEL_DEPLOYMENT_NAME" \
- --model-name "$MODEL_NAME" \
- --model-version "$MODEL_VERSION" \
- --model-format OpenAI \
- --sku-capacity 10 \
- --sku-name GlobalStandard \
- --output none
-
-# --- Log Analytics Workspace -------------------------------------------------
-echo ">>> Creating Log Analytics workspace..."
-az monitor log-analytics workspace create \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --location "$LOCATION" \
- --output none
-
-LOG_ANALYTICS_ID=$(az monitor log-analytics workspace show \
- --resource-group "$RESOURCE_GROUP" \
- --workspace-name "$LOG_ANALYTICS_NAME" \
- --query id -o tsv)
-
-# --- Application Insights ----------------------------------------------------
-echo ">>> Creating Application Insights (linked to Log Analytics)..."
-az monitor app-insights component create \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --location "$LOCATION" \
- --workspace "$LOG_ANALYTICS_ID" \
- --output none
-
-APP_INSIGHTS_CONN_STRING=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query connectionString -o tsv)
-
-APP_INSIGHTS_INSTRUMENTATION_KEY=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query instrumentationKey -o tsv)
-
-APP_INSIGHTS_RESOURCE_ID=$(az monitor app-insights component show \
- --app "$APP_INSIGHTS_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query id -o tsv)
-
-# --- Connect App Insights to the Foundry account ----------------------------
-# In the new Foundry, monitoring resources surface as "connection" child
-# resources (visible under Management center > Connected resources), not as a
-# project property. The connection uses ApiKey auth (the App Insights
-# connection string); the platform stores that key using the account's
-# system-assigned managed identity, which is why the identity is enabled above.
-echo ">>> Connecting Application Insights to Foundry account..."
-if ! az rest \
- --method PUT \
- --url "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.CognitiveServices/accounts/$FOUNDRY_RESOURCE_NAME/connections/appinsights-conn?api-version=2025-06-01" \
- --body "{\"properties\": {\"category\": \"AppInsights\", \"target\": \"$APP_INSIGHTS_RESOURCE_ID\", \"authType\": \"ApiKey\", \"credentials\": {\"key\": \"$APP_INSIGHTS_CONN_STRING\"}, \"isSharedToAll\": true, \"metadata\": {\"ApiType\": \"Azure\", \"ResourceId\": \"$APP_INSIGHTS_RESOURCE_ID\"}}}" \
- --output none; then
- echo "⚠️ Could not link Application Insights to the account automatically."
- echo " Tracing (Challenge 2) can still be configured later from the Foundry portal."
-fi
-
-# --- Retrieve endpoint and connection details -------------------------------
-echo ">>> Retrieving Foundry endpoint and keys..."
-FOUNDRY_ENDPOINT=$(az cognitiveservices account show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --query "properties.endpoint" -o tsv)
-
-PROJECT_CONNECTION_STRING=$(az cognitiveservices account project show \
- --name "$FOUNDRY_RESOURCE_NAME" \
- --resource-group "$RESOURCE_GROUP" \
- --project-name "$PROJECT_NAME" \
- --query "properties.endpoints.\"AI Foundry API\"" -o tsv)
-
-# --- Write .env file ----------------------------------------------------------
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
-ENV_FILE="$ROOT_DIR/.env"
-
-echo ">>> Writing .env file to: $ENV_FILE"
-
-cat > "$ENV_FILE" << EOF
-# =============================================================================
-# Foundry Hackathon — Environment Variables
-# Auto-generated by deploy.sh on $(date)
-# =============================================================================
-
-# Azure Subscription
-AZURE_SUBSCRIPTION_ID=$SUBSCRIPTION_ID
-RESOURCE_GROUP=$RESOURCE_GROUP
-
-# AI Foundry
-FOUNDRY_RESOURCE_NAME=$FOUNDRY_RESOURCE_NAME
-PROJECT_NAME=$PROJECT_NAME
-FOUNDRY_ENDPOINT=$FOUNDRY_ENDPOINT
-PROJECT_CONNECTION_STRING=$PROJECT_CONNECTION_STRING
-MODEL_DEPLOYMENT_NAME=$MODEL_DEPLOYMENT_NAME
-
-# Application Insights & Monitoring
-APPLICATIONINSIGHTS_CONNECTION_STRING=$APP_INSIGHTS_CONN_STRING
-APPINSIGHTS_INSTRUMENTATION_KEY=$APP_INSIGHTS_INSTRUMENTATION_KEY
-
-# Tracing (set to true to enable GenAI tracing)
-AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
-OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
-EOF
-
-echo ""
-echo "=============================================="
-echo " ✅ DEPLOYMENT COMPLETE"
-echo "=============================================="
-echo ""
-echo " .env file written to: $ENV_FILE"
-echo ""
diff --git a/factory/challenge-1-build/README.md b/factory/challenge-1-build/README.md
index 98f7161..f492f72 100644
--- a/factory/challenge-1-build/README.md
+++ b/factory/challenge-1-build/README.md
@@ -1,91 +1,91 @@
-# Challenge 1: Build Agents
+# Desafio 1: Criar Agentes
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ An **Anomaly Detection Agent** that monitors sensor data and flags abnormal readings
-- ✅ A **Fault Diagnosis Agent** that analyzes flagged anomalies and recommends maintenance actions
-- ✅ Both agents tested against real sensor data from the factory floor
+- ✅ Um **Agente de Detecção de Anomalias** que monitora dados de sensores e sinaliza leituras anormais
+- ✅ Um **Agente de Diagnóstico de Falhas** que analisa anomalias sinalizadas e recomenda ações de manutenção
+- ✅ Os dois agentes testados com dados reais de sensores do chão de fábrica

-## Context
+## Contexto
-TireForge Industries has 5 machines on the production floor. Each machine emits sensor data including temperature, pressure, vibration, and RPM. Your agents need to:
+A TireForge Industries tem 5 máquinas no chão de fábrica. Cada máquina emite dados de sensores, incluindo temperatura, pressão, vibração e RPM. Seus agentes precisam:
-1. **Anomaly Detection**: Compare current readings against known thresholds and flag machines that are out of spec
-2. **Fault Diagnosis**: Given an anomaly, reason about what might be wrong and recommend an action
+1. **Detecção de Anomalias**: Comparar as leituras atuais com limites conhecidos e sinalizar máquinas fora das especificações
+2. **Diagnóstico de Falhas**: Dada uma anomalia, raciocinar sobre o que pode estar errado e recomendar uma ação
-Check out [sensor_data.json](./sensor_data.json) to see the current state of all machines.
+Consulte [sensor_data.json](./sensor_data.json) para ver o estado atual de todas as máquinas.
-## Portal or SDK?
+## Portal ou SDK?
-Microsoft Foundry gives you two ways to build agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) provides a visual, no-code interface where you can create agents, attach tools, and test them interactively in a playground — great for exploration and rapid prototyping. The **Azure AI Agents SDK** gives you full programmatic control: you define agent behavior, tools, and orchestration logic in Python, which makes it easy to version, test, and integrate into automated pipelines.
+O Microsoft Foundry oferece duas maneiras de criar agentes. O **portal do Foundry** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) fornece uma interface visual sem código na qual você pode criar agentes, anexar ferramentas e testá-los interativamente em um playground, ideal para exploração e prototipagem rápida. O **SDK de Agentes de IA do Azure** oferece controle programático completo: você define o comportamento dos agentes, as ferramentas e a lógica de orquestração em Python, facilitando o versionamento, os testes e a integração a pipelines automatizados.

-In this challenge we use the **SDK**. The code in [agents.py](./agents.py) creates both agents, registers their tools, and runs them against every machine in `sensor_data.json` — all from the terminal. After the script runs, both agents will also be visible in the portal under **Agents**, so you can inspect them, tweak their instructions, and test them interactively without touching any code.
+Neste desafio usamos o **SDK**. O código em [agents.py](./agents.py) cria os dois agentes, registra suas ferramentas e os executa em cada máquina de `sensor_data.json`, tudo pelo terminal. Depois da execução do script, os dois agentes também estarão visíveis no portal em **Agentes**, para que você possa inspecioná-los, ajustar suas instruções e testá-los interativamente sem tocar no código.
-## Agents and Tools
+## Agentes e Ferramentas
-### What is an agent?
+### O que é um agente?
-An agent in Microsoft Foundry is a persistent, stateful AI assistant backed by a large language model. Unlike a plain API call — where you send a prompt and get a single response — an agent maintains a **conversation thread**, can **invoke tools autonomously**, and **retains context** across multiple turns. You configure it with:
+Um agente no Microsoft Foundry é um assistente de IA persistente e com estado, apoiado por um modelo de linguagem grande. Diferentemente de uma chamada de API simples, na qual você envia um prompt e recebe uma única resposta, um agente mantém uma **thread de conversa**, pode **invocar ferramentas de forma autônoma** e **retém contexto** entre várias interações. Você o configura com:
-- A **name** and **model** (e.g. `gpt-5.4`)
-- A **system prompt** — instructions that define its role, personality, and constraints
-- One or more **tools** it can call when it needs information or actions beyond its training data
+- Um **nome** e um **modelo** (por exemplo, `gpt-5.4`)
+- Um **prompt de sistema** — instruções que definem sua função, personalidade e restrições
+- Uma ou mais **ferramentas** que ele pode chamar quando precisa de informações ou ações além dos dados de treinamento
-Agents are managed resources in your Foundry project. They persist between runs, appear in the portal under **Agents**, and can be versioned, shared, and reused.
+Os agentes são recursos gerenciados no seu projeto do Foundry. Eles persistem entre execuções, aparecem no portal em **Agentes** e podem ser versionados, compartilhados e reutilizados.
-### What are tools?
+### O que são ferramentas?
-Tools extend an agent's capabilities beyond pure language generation. When the model decides it needs information it doesn't have in its context window, it emits a **tool call** — a structured JSON request specifying the tool name and arguments. The SDK intercepts this, runs the corresponding Python function, and feeds the result back to the model. This reasoning loop continues until the agent produces a final response.
+As ferramentas ampliam as capacidades de um agente para além da geração de linguagem. Quando o modelo decide que precisa de uma informação que não está na janela de contexto, ele emite uma **chamada de ferramenta**, uma solicitação JSON estruturada que especifica o nome da ferramenta e seus argumentos. O SDK intercepta a chamada, executa a função Python correspondente e devolve o resultado ao modelo. Esse ciclo de raciocínio continua até o agente produzir uma resposta final.
-From the model's perspective, tools are described by a **JSON schema** (name, description, parameters). The model reads these descriptions and decides autonomously when and how to call them — you never hard-code the decision logic.
+Do ponto de vista do modelo, as ferramentas são descritas por um **schema JSON** (nome, descrição e parâmetros). O modelo lê essas descrições e decide de forma autônoma quando e como chamá-las; você nunca codifica a lógica de decisão diretamente.
-### What tools can you add?
+### Quais ferramentas você pode adicionar?
-| Tool type | What it does | Best for |
+| Tipo de ferramenta | O que faz | Melhor para |
|-----------|-------------|----------|
-| **Function** | Calls a local Python function you define | Any custom logic: database lookups, APIs, calculations |
-| **Code Interpreter** | Lets the agent write and execute Python in a sandbox | Data analysis, chart generation, file processing |
-| **File Search** | Semantic search over a Microsoft Foundry knowledge base | Policy docs, manuals, historical records |
-| **Bing Search** | Live web search | Real-time information, news |
-| **Azure AI Search** | Queries an Azure Search index | Grounded retrieval over your own data at scale |
+| **Função** | Chama uma função Python local definida por você | Qualquer lógica personalizada: consultas a bancos, APIs e cálculos |
+| **Interpretador de Código** | Permite que o agente escreva e execute Python em um sandbox | Análise de dados, geração de gráficos e processamento de arquivos |
+| **Pesquisa de Arquivos** | Pesquisa semântica em uma base de conhecimento do Microsoft Foundry | Documentos de políticas, manuais e registros históricos |
+| **Bing Search** | Pesquisa na web em tempo real | Informações em tempo real e notícias |
+| **Azure AI Search** | Consulta um índice do Azure Search | Recuperação fundamentada dos seus dados em escala |
-#### Vector databases and Microsoft Foundry knowledge bases
+#### Bancos de dados vetoriais e bases de conhecimento do Microsoft Foundry
-When your agent needs to answer questions grounded in a large body of documents — policy manuals, product specs, historical records — you need a **vector database**. Unlike keyword search, a vector database converts text into numerical embeddings and finds semantically similar passages at query time. This lets the agent ask a natural-language question and retrieve the right content even when the exact words don’t appear in the query.
+Quando seu agente precisa responder a perguntas fundamentadas em um grande volume de documentos, como manuais de políticas, especificações de produtos e registros históricos, você precisa de um **banco de dados vetorial**. Diferentemente da pesquisa por palavras-chave, um banco vetorial converte o texto em embeddings numéricos e encontra trechos semanticamente semelhantes no momento da consulta. Assim, o agente pode fazer uma pergunta em linguagem natural e recuperar o conteúdo correto mesmo quando as palavras exatas não aparecem na consulta.
-**Microsoft Foundry** includes a built-in knowledge base backed by a vector store. You upload documents (PDFs, Word files, plain text) and the service automatically chunks, embeds, and indexes them. When you attach this knowledge base to an agent as a **File Search** tool, the agent queries it at inference time — pulling relevant passages into its context before generating a response, so its answers are grounded in your actual documents rather than model training data alone.
+O **Microsoft Foundry** inclui uma base de conhecimento integrada apoiada por um armazenamento vetorial. Você carrega documentos (PDFs, arquivos do Word e texto simples), e o serviço os divide em trechos, gera embeddings e cria o índice automaticamente. Quando você anexa essa base a um agente como ferramenta de **Pesquisa de Arquivos**, o agente a consulta durante a inferência, trazendo trechos relevantes para o contexto antes de gerar uma resposta. Assim, as respostas se baseiam nos seus documentos reais, e não apenas nos dados de treinamento do modelo.
-For TireForge Industries, useful knowledge bases would include:
+Para a TireForge Industries, bases de conhecimento úteis incluiriam:
-- **Machine maintenance manuals** — repair procedures, lubrication schedules, torque specs, and replacement part numbers for each machine
-- **Historical incident reports** — past failures, their root causes, and the corrective actions that resolved them
-- **Supplier specification sheets** — acceptable operating tolerances, warranty conditions, and recommended sensor thresholds per machine model
+- **Manuais de manutenção das máquinas** — procedimentos de reparo, cronogramas de lubrificação, especificações de torque e números de peças de reposição para cada máquina
+- **Relatórios históricos de incidentes** — falhas anteriores, suas causas raiz e as ações corretivas que as resolveram
+- **Fichas de especificações dos fornecedores** — tolerâncias operacionais aceitáveis, condições de garantia e limites de sensores recomendados por modelo de máquina
-With this in place, the **Fault Diagnosis Agent** could query “what are the known failure modes of the CP-003 curing press when vibration exceeds 9.0 mm/s?” and retrieve relevant maintenance history — grounding its recommendation in documented precedent rather than general LLM knowledge.
+Com isso, o **Agente de Diagnóstico de Falhas** poderia consultar "quais são os modos de falha conhecidos da prensa de cura CP-003 quando a vibração excede 9,0 mm/s?" e recuperar o histórico de manutenção relevante, fundamentando sua recomendação em precedentes documentados, e não no conhecimento geral do LLM.
-In this challenge the agents use **function tools**. The **Anomaly Detection Agent** uses `check_thresholds` to look up the acceptable operating ranges for each machine and compare them against live sensor readings. Without this tool, the agent would have to reason from memory alone — with it, every threshold check is grounded in actual machine spec data.
+Neste desafio, os agentes usam **ferramentas de função**. O **Agente de Detecção de Anomalias** usa `check_thresholds` para consultar as faixas operacionais aceitáveis de cada máquina e compará-las com as leituras ao vivo dos sensores. Sem essa ferramenta, o agente teria de raciocinar apenas com base na memória; com ela, cada verificação de limite se fundamenta em dados reais das especificações da máquina.
-## Get Started
+## Comece Aqui
-Open [agents.py](./agents.py) and review the implementation of both agents.
+Abra [agents.py](./agents.py) e examine a implementação dos dois agentes.
```bash
cd factory/challenge-1-build
python agents.py
```
-As the script runs, watch the terminal closely — you'll see each agent being created, then each machine from `sensor_data.json` being sent through the **Anomaly Detection Agent** first, and its output handed off to the **Fault Diagnosis Agent**. You'll see the raw agent responses printed for every machine, giving you a live view of how the two agents collaborate. Once it completes, head to the [Microsoft Foundry portal](https://ai.azure.com/nextgen), open your project, and navigate to **Agents** in the left sidebar — hit **Refresh** if the agents don't appear immediately, as it can take a few seconds for newly created agents to show up in the portal.
+Enquanto o script é executado, observe o terminal: você verá cada agente sendo criado e, em seguida, cada máquina de `sensor_data.json` passando primeiro pelo **Agente de Detecção de Anomalias**, com sua saída encaminhada ao **Agente de Diagnóstico de Falhas**. As respostas brutas dos agentes serão impressas para cada máquina, oferecendo uma visão ao vivo de como os dois agentes colaboram. Quando terminar, acesse o [portal do Microsoft Foundry](https://ai.azure.com/nextgen), abra seu projeto e navegue até **Agentes** na barra lateral esquerda. Clique em **Atualizar** se os agentes não aparecerem imediatamente, pois pode levar alguns segundos para que agentes recém-criados apareçam no portal.
-## Success Criteria
+## Critérios de Sucesso
-- [ ] Anomaly Detection Agent correctly identifies the 2 warning + 1 critical machine
-- [ ] Fault Diagnosis Agent provides reasonable maintenance recommendations
-- [ ] Both agents respond coherently when given a machine's sensor readings
+- [ ] O Agente de Detecção de Anomalias identifica corretamente as 2 máquinas em alerta e a 1 crítica
+- [ ] O Agente de Diagnóstico de Falhas fornece recomendações de manutenção razoáveis
+- [ ] Os dois agentes respondem de forma coerente quando recebem as leituras dos sensores de uma máquina
diff --git a/factory/challenge-2-monitor/README.md b/factory/challenge-2-monitor/README.md
index 3d4e7a8..026704c 100644
--- a/factory/challenge-2-monitor/README.md
+++ b/factory/challenge-2-monitor/README.md
@@ -1,138 +1,138 @@
-# Challenge 2: Monitor with Application Insights
+# Desafio 2: Monitorar com o Application Insights
-Time: ~20 minutes
+Tempo: ~20 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ GenAI tracing enabled for your Foundry agents
-- ✅ Agent interactions visible as traces in Application Insights
-- ✅ Understanding of how to debug agent behaviour in production
+- ✅ O rastreamento GenAI habilitado para seus agentes do Foundry
+- ✅ As interações dos agentes visíveis como rastreamentos no Application Insights
+- ✅ Entendimento de como depurar o comportamento dos agentes em produção

-## Context
+## Contexto
-Your agents work — but how do you know they're working **well**? What if an agent gives a bad answer? What if latency spikes? What if a tool call fails silently?
+Seus agentes funcionam, mas como saber se estão funcionando **bem**? E se um agente der uma resposta ruim? E se a latência aumentar? E se uma chamada de ferramenta falhar silenciosamente?
-**Application Insights** with **GenAI tracing** gives you:
+O **Application Insights** com **rastreamento GenAI** oferece:
-- Full trace of every agent interaction (user message → model call → tool calls → response)
-- Token usage per request
-- Latency breakdown (network, model inference, tool execution)
-- Error tracking and alerting
+- Rastreamento completo de cada interação do agente (mensagem do usuário → chamada do modelo → chamadas de ferramentas → resposta)
+- Uso de tokens por solicitação
+- Detalhamento da latência (rede, inferência do modelo e execução de ferramentas)
+- Rastreamento e alertas de erros
-## Why Monitor?
+## Por que Monitorar?
-AI agents behave differently from traditional software. A conventional API either returns the right data or throws an error — you can test it deterministically. An agent's output is probabilistic: the same input can produce subtly different responses on each run, tool calls can succeed but return unexpected data, and failures can be silent (the agent responds confidently but incorrectly). Without observability, these issues are invisible until a user reports them.
+Os agentes de IA se comportam de maneira diferente do software tradicional. Uma API convencional retorna os dados corretos ou lança um erro, e você pode testá-la de forma determinística. A saída de um agente é probabilística: a mesma entrada pode produzir respostas sutilmente diferentes a cada execução, chamadas de ferramentas podem ter sucesso mas retornar dados inesperados, e as falhas podem ser silenciosas (o agente responde com confiança, mas incorretamente). Sem observabilidade, esses problemas ficam invisíveis até que um usuário os relate.
-Monitoring serves three critical functions for AI agents:
+O monitoramento desempenha três funções críticas para agentes de IA:
-- **Reliability** — Detect when agents stop working (tool call failures, timeouts, empty responses) before users do
-- **Performance** — Track latency and token usage over time, catch regressions when you update a system prompt, and right-size your deployments for cost efficiency
-- **Debugging** — When something goes wrong, distributed traces give you a complete record of what the model reasoned, what tools were called, what they returned, and exactly where the chain broke
+- **Confiabilidade** — Detectar quando os agentes param de funcionar (falhas de chamadas de ferramentas, timeouts e respostas vazias) antes dos usuários
+- **Desempenho** — Acompanhar a latência e o uso de tokens ao longo do tempo, detectar regressões ao atualizar um prompt de sistema e dimensionar corretamente suas implantações para obter eficiência de custos
+- **Depuração** — Quando algo dá errado, os rastreamentos distribuídos fornecem um registro completo do raciocínio do modelo, das ferramentas chamadas, do que elas retornaram e do ponto exato em que a cadeia foi interrompida
-For production AI systems, monitoring is the foundation that makes improvement possible. You can't fix what you can't see.
+Para sistemas de IA em produção, o monitoramento é a base que torna possível a melhoria. Você não pode corrigir o que não consegue ver.
-For TireForge specifically: a false negative from the Anomaly Detection Agent — reporting CP-003 as healthy when pressure is drifting toward failure — could mean a curing press breakdown mid-production run, scrapping an entire batch of tires. Traces show you exactly which sensor values the agent saw, what `check_thresholds` returned, and why the agent concluded "normal" — so you can fix the prompt or thresholds before it happens again.
+Especificamente para a TireForge: um falso negativo do Agente de Detecção de Anomalias, que informe a CP-003 como saudável quando a pressão estiver se aproximando de uma falha, poderia significar a quebra da prensa de cura durante a produção e a perda de um lote inteiro de pneus. Os rastreamentos mostram exatamente quais valores de sensores o agente viu, o que `check_thresholds` retornou e por que o agente concluiu "normal", para que você possa corrigir o prompt ou os limites antes que isso aconteça novamente.
-## Portal or SDK?
+## Portal ou SDK?
-Microsoft Foundry gives you two ways to monitor agents. The **Foundry portal** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) has a built-in **Tracing** view where you can browse agent interactions, inspect individual spans, and see token usage and latency — no code required. **Application Insights** (via the Azure portal) gives you deeper analytics: Kusto queries, custom dashboards, and alerting rules.
+O Microsoft Foundry oferece duas maneiras de monitorar agentes. O **portal do Foundry** ([ai.azure.com/nextgen](https://ai.azure.com/nextgen)) tem uma visualização integrada de **Rastreamento**, na qual você pode navegar pelas interações dos agentes, inspecionar spans individuais e ver o uso de tokens e a latência, sem precisar escrever código. O **Application Insights** (pelo portal do Azure) oferece análises mais profundas: consultas Kusto, painéis personalizados e regras de alerta.
-In this challenge we use the **SDK** — `monitor.py` instruments your agents so every interaction is automatically captured as a distributed trace. Once the script runs, you'll explore those traces using both portal options, seeing how each one presents the same data differently.
+Neste desafio usamos o **SDK** — `monitor.py` instrumenta seus agentes para que cada interação seja capturada automaticamente como um rastreamento distribuído. Depois que o script for executado, você explorará esses rastreamentos usando as duas opções de portal e verá como cada uma apresenta os mesmos dados de maneira diferente.
-## Prerequisites
+## Pré-requisitos
-Make sure your `.env` has:
+Verifique se seu `.env` tem:
```
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxx;...
```
-## Connect Application Insights to the Portal
+## Conectar o Application Insights ao Portal
-The deploy script automatically links Application Insights to your Foundry project. To confirm it worked, open the [Microsoft Foundry portal](https://ai.azure.com/nextgen), navigate to your project, and click **Tracing** in the left sidebar — you should see the Application Insights resource already connected.
+O script de implantação vincula automaticamente o Application Insights ao seu projeto do Foundry. Para confirmar que funcionou, abra o [portal do Microsoft Foundry](https://ai.azure.com/nextgen), navegue até seu projeto e clique em **Rastreamento** na barra lateral esquerda. O recurso do Application Insights já deverá aparecer conectado.
-If you see a **"Create or connect an App Insights resource to get started"** banner, the automatic connection was blocked by a tenant policy. Fix it in one click: click **Connect**, select the `foundry-hack-insights-` resource from the dropdown, and confirm. You only need to do this once.
+Se você vir o banner **"Create or connect an App Insights resource to get started"**, a conexão automática foi bloqueada por uma política do locatário. Corrija com um clique: clique em **Connect**, selecione o recurso `foundry-hack-insights-` na lista suspensa e confirme. Você só precisa fazer isso uma vez.
-## Get Started
+## Comece Aqui
-Open [monitor.py](./monitor.py) and review the tracing setup.
+Abra [monitor.py](./monitor.py) e examine a configuração do rastreamento.
```bash
cd factory/challenge-2-monitor
python monitor.py
```
-Once the script finishes, your traces are live. Explore them in the Azure Portal.
+Quando o script terminar, seus rastreamentos estarão ativos. Explore-os no Portal do Azure.
---
-### Step 1: Microsoft Foundry Portal
+### Etapa 1: Portal do Microsoft Foundry
-1. Go to [Microsoft Foundry Portal](https://ai.azure.com/nextgen) → open your project
-2. Click on the `anomaly-detection-agent` -> **Traces**
+1. Acesse o [Portal do Microsoft Foundry](https://ai.azure.com/nextgen) → abra seu projeto
+2. Clique em `anomaly-detection-agent` -> **Traces**
- - **Traces panel** — The **Conversations** tab lists every agent run as a row, showing the conversation ID, trace ID, response ID, status, creation time, duration, tokens in/out, estimated cost, evaluation results, and agent version. Use the search box and the **Status**, **Duration**, **Tokens**, and **Estimated Cost** filters (plus the date-range selector) to narrow results, switch to the **Responses** tab for individual model responses, or click **Create dataset** to turn these traces into an evaluation dataset.
+ - **Painel de rastreamentos** — A guia **Conversations** lista cada execução do agente em uma linha, mostrando o ID da conversa, o ID do rastreamento, o ID da resposta, o status, o horário de criação, a duração, os tokens de entrada/saída, o custo estimado, os resultados da avaliação e a versão do agente. Use a caixa de pesquisa e os filtros **Status**, **Duration**, **Tokens** e **Estimated Cost** (além do seletor de intervalo de datas) para restringir os resultados, alterne para a guia **Responses** para ver respostas individuais do modelo ou clique em **Create dataset** para transformar esses rastreamentos em um conjunto de dados de avaliação.

-3. You’ll see a list of recent traces — click any row to open it
+3. Você verá uma lista de rastreamentos recentes; clique em qualquer linha para abri-la

-4. Inside a trace you can see:
- - Each **agent turn** as a span (input → output)
- - **Tool calls** (`check_thresholds`, etc.) as child spans with inputs/outputs
- - **Token usage** and **latency** per span
- - The full model prompt and completion if `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`
-5. Use the **timeline view** to spot slow spans, and the **details panel** to inspect individual messages
-6. Click on the `anomaly-detection-agent` -> **Monitor**
+4. Dentro de um rastreamento, você pode ver:
+ - Cada **turno do agente** como um span (entrada → saída)
+ - **Chamadas de ferramentas** (`check_thresholds`, etc.) como spans filhos com entradas/saídas
+ - **Uso de tokens** e **latência** por span
+ - O prompt completo e a conclusão do modelo se `OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true`
+5. Use a **visualização da linha do tempo** para localizar spans lentos e o **painel de detalhes** para inspecionar mensagens individuais
+6. Clique em `anomaly-detection-agent` -> **Monitor**
- - **Monitor panel** — The **Overview** tab gives an at-a-glance health summary with cards for **Operational metrics** (estimated cost and total token usage), **Evaluations**, **Scheduled evaluations**, and **Scheduled red teaming run issues**. Below, the **Operational metrics** charts plot **Agent runs** (how often the agent was called) and **Runs and token metrics** (calls vs. tokens consumed) over the selected time range. Use the **Tools** tab, date filters, **Settings**, or **Open in Azure Monitor** for deeper analysis.
+ - **Painel Monitor** — A guia **Overview** oferece um resumo rápido da saúde, com cartões para **Operational metrics** (custo estimado e uso total de tokens), **Evaluations**, **Scheduled evaluations** e **Scheduled red teaming run issues**. Abaixo, os gráficos de **Operational metrics** mostram **Agent runs** (com que frequência o agente foi chamado) e **Runs and token metrics** (chamadas versus tokens consumidos) no intervalo de tempo selecionado. Use a guia **Tools**, os filtros de data, **Settings** ou **Open in Azure Monitor** para uma análise mais profunda.

-### Step 2 - Application Insights
+### Etapa 2 - Application Insights
-1. Go to [portal.azure.com](https://portal.azure.com) → search for **Application Insights** → open `foundry-hack-insights-`
-2. Left sidebar → **Investigate** → **Search**
+1. Acesse [portal.azure.com](https://portal.azure.com) → pesquise por **Application Insights** → abra `foundry-hack-insights-`
+2. Barra lateral esquerda → **Investigate** → **Search**

-3. Set the time range to **Last 30 minutes** and click **Search** — you'll see individual trace events
-4. Look for traces where your agents were invoked.
- You can inspect the timestamp, operation ID, and message payload to confirm calls reached the model.
-5. Click on `Anomaly Detection Agent` instance.
-You will see the **end-to-end transaction trace** showing:
- - The full agent conversation (user input with sensor anomalies → agent response with diagnosis)
- - Nested spans for each model call with latency breakdowns (e.g., `gpt-5.4-2026-03-05` taking 5.1 seconds)
- - The exact system prompt and generated reasoning the agent used to reach its conclusion
- - Resource details (AKS cluster, region) where the agent executed
- - Any content filtering blockers that violated default Responsible AI standards
- - This view lets you inspect exactly what the agent "saw" and "reasoned" to understand any misclassifications or performance issues
-6. In the left sidebar → **Investigate** → **Agents (preview)** to open the agent-centric operations dashboard.
+3. Defina o intervalo de tempo como **Last 30 minutes** e clique em **Search**; você verá eventos individuais de rastreamento
+4. Procure rastreamentos nos quais seus agentes foram invocados.
+ Você pode inspecionar o carimbo de data/hora, o ID da operação e o conteúdo da mensagem para confirmar que as chamadas chegaram ao modelo.
+5. Clique na instância `Anomaly Detection Agent`.
+Você verá o **rastreamento da transação de ponta a ponta**, mostrando:
+ - A conversa completa do agente (entrada do usuário com anomalias dos sensores → resposta do agente com diagnóstico)
+ - Spans aninhados para cada chamada de modelo com detalhamento da latência (por exemplo, `gpt-5.4-2026-03-05` levando 5,1 segundos)
+ - O prompt de sistema exato e o raciocínio gerado pelo agente para chegar à conclusão
+ - Detalhes do recurso (cluster AKS e região) onde o agente foi executado
+ - Quaisquer bloqueios de filtragem de conteúdo que tenham violado os padrões padrão de IA Responsável
+ - Essa visualização permite inspecionar exatamente o que o agente "viu" e "raciocinou" para entender classificações incorretas ou problemas de desempenho
+6. Na barra lateral esquerda → **Investigate** → **Agents (preview)** para abrir o painel de operações centrado nos agentes.

- - Use the **Time range** and **Agent** filters at the top to scope the view, switch between the **Dashboard** and **All agents** tabs, or click **Explore in Grafana** for deeper analysis.
- - **Agent Operational Metrics**:
- - **Agent Runs** — total invocations broken down per agent (e.g., `fault-diagnosis-agent`, `anomaly-detection-agent`). Click **View Traces with Agent Runs** to jump to the underlying traces.
- - **Gen AI Errors** — surfaces any traces with GenAI errors in the selected window; a green check means none were found.
- - **Tool Calls** — a table of each tool (e.g., `multi_tool_use.parallel`) with its error count, average duration, and number of calls, so you can spot slow or failing tools.
- - **Models** — per-model breakdown (e.g., `gpt-5.4-2026-03-05`, `gpt-5.4`) showing errors, average duration, and call counts.
- - **Token Consumption**:
- - **Token Consumption by Model** — total tokens consumed per model (e.g., ~22.1K for `gpt-5.4-2026-03-05`).
- - **Input vs Output Tokens** — input versus output token totals over time (e.g., 17K input vs 5.1K output), useful for tracking cost drivers.
+ - Use os filtros **Time range** e **Agent** na parte superior para delimitar a visualização, alterne entre as guias **Dashboard** e **All agents** ou clique em **Explore in Grafana** para uma análise mais profunda.
+ - **Métricas Operacionais dos Agentes**:
+ - **Agent Runs** — total de invocações dividido por agente (por exemplo, `fault-diagnosis-agent`, `anomaly-detection-agent`). Clique em **View Traces with Agent Runs** para acessar os rastreamentos subjacentes.
+ - **Gen AI Errors** — mostra rastreamentos com erros de GenAI na janela selecionada; uma marca verde significa que nenhum foi encontrado.
+ - **Tool Calls** — uma tabela de cada ferramenta (por exemplo, `multi_tool_use.parallel`) com sua contagem de erros, duração média e número de chamadas, para que você identifique ferramentas lentas ou com falhas.
+ - **Models** — detalhamento por modelo (por exemplo, `gpt-5.4-2026-03-05`, `gpt-5.4`) mostrando erros, duração média e contagens de chamadas.
+ - **Consumo de Tokens**:
+ - **Token Consumption by Model** — total de tokens consumidos por modelo (por exemplo, ~22,1 mil para `gpt-5.4-2026-03-05`).
+ - **Input vs Output Tokens** — totais de tokens de entrada versus saída ao longo do tempo (por exemplo, 17 mil de entrada contra 5,1 mil de saída), útil para acompanhar os fatores de custo.
---
-## Success Criteria
+## Critérios de Sucesso
-- [ ] GenAI tracing is enabled and `monitor.py` ran successfully
-- [ ] You can browse agent traces in the Foundry portal **Traces** view and open a conversation
-- [ ] You can read the **Monitor** panel (agent runs, token usage, estimated cost)
-- [ ] You can see at least one agent trace in Application Insights and open its end-to-end transaction trace
-- [ ] You can use the **Agents (preview)** dashboard to view agent runs, tool calls, models, and token consumption
-- [ ] You understand where to look when an agent misbehaves
+- [ ] O rastreamento GenAI está habilitado e `monitor.py` foi executado com sucesso
+- [ ] Você consegue navegar pelos rastreamentos dos agentes na visualização **Traces** do portal do Foundry e abrir uma conversa
+- [ ] Você consegue ler o painel **Monitor** (execuções dos agentes, uso de tokens e custo estimado)
+- [ ] Você consegue ver pelo menos um rastreamento de agente no Application Insights e abrir seu rastreamento de transação de ponta a ponta
+- [ ] Você consegue usar o painel **Agents (preview)** para ver execuções de agentes, chamadas de ferramentas, modelos e consumo de tokens
+- [ ] Você entende onde procurar quando um agente se comporta incorretamente
diff --git a/factory/challenge-3-evaluate/README.md b/factory/challenge-3-evaluate/README.md
index d827971..089050b 100644
--- a/factory/challenge-3-evaluate/README.md
+++ b/factory/challenge-3-evaluate/README.md
@@ -1,97 +1,97 @@
-# Challenge 3: Evaluate
+# Desafio 3: Avaliar
-Time: ~30 minutes
+Tempo: ~30 minutos
-## Objectives
+## Objetivos
-By the end of this challenge, you will have:
+Ao final deste desafio, você terá:
-- ✅ Run a systematic evaluation of your agents against a test dataset
-- ✅ Used built-in evaluators (coherence, fluency) to measure quality
-- ✅ Interpreted evaluation metrics and identified areas for improvement
-- ✅ Understanding of how to integrate evaluations into a CI/CD pipeline
+- ✅ Executado uma avaliação sistemática dos seus agentes com um conjunto de testes
+- ✅ Usado avaliadores integrados (coerência e fluência) para medir a qualidade
+- ✅ Interpretado métricas de avaliação e identificado áreas de melhoria
+- ✅ Entendido como integrar avaliações a um pipeline de CI/CD

-## Context
+## Contexto
-Monitoring tells you **what's happening** (latency, errors, token usage). Evaluation tells you **if the answers are actually good**.
+O monitoramento informa **o que está acontecendo** (latência, erros e uso de tokens). A avaliação informa **se as respostas são realmente boas**.
-You have a dataset of 10 test cases — each with a sensor reading snapshot and the expected correct output (classification + recommended action). You'll run your agents against these test cases and measure how well they perform using LLM-as-judge scoring.
+Você tem um conjunto de dados com 10 casos de teste, cada um com um instantâneo das leituras dos sensores e a saída correta esperada (classificação + ação recomendada). Você executará seus agentes nesses casos e medirá o desempenho usando pontuação com LLM como juiz.
-## Why Evaluate?
+## Por que Avaliar?
-Monitoring tells you your agents are *running* — evaluation tells you they're doing the *right thing*. These are fundamentally different questions.
+O monitoramento informa que seus agentes estão *executando*; a avaliação informa se estão fazendo a *coisa certa*. Essas são perguntas fundamentalmente diferentes.
-Monitoring captures **operational signals**: latency, token count, error rates, uptime. These tell you *how* the system behaves mechanically. Evaluation captures **quality signals**: are the agent's outputs correct, relevant, coherent, and consistent with expected outcomes? These tell you *whether* the system is actually doing its job.
+O monitoramento captura **sinais operacionais**: latência, contagem de tokens, taxas de erro e disponibilidade. Eles informam *como* o sistema se comporta mecanicamente. A avaliação captura **sinais de qualidade**: as saídas do agente estão corretas, relevantes, coerentes e consistentes com os resultados esperados? Esses sinais informam *se* o sistema está realmente cumprindo sua função.
-Without systematic evaluation, you're relying on spot-checks — reading a handful of responses and judging them subjectively. This doesn't scale, isn't repeatable, and can't catch regressions when you update a prompt or switch models. Evaluation gives you a measurable baseline: a score you can track over time and compare across versions.
+Sem uma avaliação sistemática, você depende de verificações pontuais: lê algumas respostas e as julga subjetivamente. Isso não escala, não é repetível e não detecta regressões quando você atualiza um prompt ou troca de modelo. A avaliação fornece uma linha de base mensurável: uma pontuação que você pode acompanhar ao longo do tempo e comparar entre versões.
-Evaluation also surfaces issues that monitoring is blind to. An agent that always responds quickly and without errors but consistently misdiagnoses fault conditions — or recommends "schedule routine maintenance" for a machine that needs immediate shutdown — looks perfectly healthy to monitoring. Evaluation catches it immediately.
+A avaliação também revela problemas que o monitoramento não enxerga. Um agente que sempre responde rapidamente e sem erros, mas diagnostica incorretamente as condições de falha de forma recorrente, ou recomenda "agendar manutenção de rotina" para uma máquina que precisa ser desligada imediatamente, parece perfeitamente saudável para o monitoramento. A avaliação detecta isso na hora.
-For production AI, evaluations should run:
+Para IA em produção, as avaliações devem ser executadas:
-- **Before deployment** — establish a quality baseline and gate releases on minimum scores
-- **After any change** — to system prompts, models, tools, or threshold data
-- **On a schedule** — to detect drift as machine configurations or operating conditions evolve
+- **Antes da implantação** — estabelecer uma linha de base de qualidade e controlar versões com pontuações mínimas
+- **Após qualquer mudança** — em prompts de sistema, modelos, ferramentas ou dados de limites
+- **Em uma programação** — detectar desvios à medida que as configurações das máquinas ou as condições operacionais evoluem
-For TireForge specifically: an agent that confidently diagnoses a CP-003 anomaly as "normal vibration" when thresholds are actually exceeded could delay a critical maintenance action by hours. Monitoring sees a clean, fast response. Only evaluation — comparing the output against the known correct classification — reveals the miss.
+Especificamente para a TireForge: um agente que diagnostique com confiança uma anomalia da CP-003 como "vibração normal" quando os limites foram excedidos pode atrasar uma ação crítica de manutenção por horas. O monitoramento vê uma resposta rápida e sem erros. Somente a avaliação, comparando a saída com a classificação correta conhecida, revela o problema.
-## The Evaluation Dataset
+## O Conjunto de Dados de Avaliação
-The dataset lives at [challenge-4-deploy/evaluation_dataset.json](../challenge-4-deploy/evaluation_dataset.json) — it contains:
+O conjunto de dados está em [challenge-4-deploy/evaluation_dataset.json](../challenge-4-deploy/evaluation_dataset.json) e contém:
-- 10 scenarios covering normal, warning, and critical machines
-- Each has an `input` (what you send to the agent)
-- Each has an `expected_output` (the correct classification and action)
+- 10 cenários que abrangem máquinas normais, em alerta e críticas
+- Cada um tem um `input` (o que você envia ao agente)
+- Cada um tem um `expected_output` (a classificação e a ação corretas)
-## About the Evaluators
+## Sobre os Avaliadores
-Microsoft Foundry uses an **LLM-as-judge** approach — a separate model reads each agent response alongside the input and ground truth, then scores it on a 1–5 scale. You'll use two built-in evaluators:
+O Microsoft Foundry usa uma abordagem de **LLM como juiz**: um modelo separado lê cada resposta do agente junto com a entrada e a verdade de referência e atribui uma pontuação de 1 a 5. Você usará dois avaliadores integrados:
-- **Coherence** — measures whether the agent's response is logically structured and internally consistent. A score of 5 means the output is clear, well-organised, and flows naturally. A low score means the response is contradictory, jumbled, or hard to follow. For a factory agent this catches things like recommending "no action" while simultaneously listing critical anomalies.
+- **Coerência** — mede se a resposta do agente é logicamente estruturada e internamente consistente. Uma pontuação 5 significa que a saída é clara, bem organizada e flui naturalmente. Uma pontuação baixa significa que a resposta é contraditória, confusa ou difícil de acompanhar. Para um agente de fábrica, isso detecta situações como recomendar "nenhuma ação" enquanto lista anomalias críticas.
-- **Fluency** — measures the grammatical and linguistic quality of the agent's response. A score of 5 means the output is well-written, natural, and easy to read. A low score means the response is awkwardly phrased, grammatically broken, or hard to parse — which undermines trust in the classification even when the underlying diagnosis is correct.
+- **Fluência** — mede a qualidade gramatical e linguística da resposta do agente. Uma pontuação 5 significa que a saída é bem escrita, natural e fácil de ler. Uma pontuação baixa significa que a resposta tem formulação estranha, erros gramaticais ou é difícil de interpretar, o que reduz a confiança na classificação mesmo quando o diagnóstico subjacente está correto.
-These two scores together give you a quick signal on output quality. When you see a low coherence score, look at the agent's system prompt structure. When you see a low fluency score, look at how the agent phrases its output and whether its system prompt encourages clear, well-formed responses.
+Juntas, essas duas pontuações fornecem um sinal rápido da qualidade da saída. Ao ver uma pontuação baixa de coerência, examine a estrutura do prompt de sistema do agente. Ao ver uma pontuação baixa de fluência, examine como o agente formula a saída e se o prompt de sistema incentiva respostas claras e bem construídas.
-## Get Started
+## Comece Aqui
-The evaluation dataset has already been prepared for you as [eval_portal.jsonl](./eval_portal.jsonl) — 10 machine sensor scenarios ready to upload.
+O conjunto de dados de avaliação já foi preparado para você em [eval_portal.jsonl](./eval_portal.jsonl): são 10 cenários de sensores de máquinas prontos para upload.
---
-### Step 1: Open the Evaluation tab
+### Etapa 1: Abrir a guia de avaliação
-1. Go to the [Microsoft Foundry portal](https://ai.azure.com/nextgen) → your project
-2. On the top bar → **Build** → **Evaluations** → **Create**
+1. Acesse o [portal do Microsoft Foundry](https://ai.azure.com/nextgen) → seu projeto
+2. Na barra superior → **Criar** → **Avaliações** → **Criar**
-### Step 2: Configure the evaluation
+### Etapa 2: Configurar a avaliação
-3. Select **Agent** as the evaluation target
-4. Choose `anomaly-detection-agent` from the dropdown
-5. Select **Individual Turns** and then **Existing Dataset**
-6. Click on **Upload new dataset**.
-You must enter a dataset name first — the upload stays disabled until you do. Type a name (e.g. `factory-eval`), then add the file located on `factory/challenge-3-evaluate/eval_portal.jsonl` and confirm the upload.
-7. Leave the **Field Mapping** and **Configure Agents** fields as is.
-8. In the **Criteria** step, keep only **Coherence** and **Fluency**. Remove every other evaluator — in particular **deselect Tool Call Accuracy**, since the agents can't execute the local tools during evaluation and will always score low on it. Trimming the evaluator list also makes the run significantly faster.
-9. Leave the Evaluation Name as is or configure to your liking.
-10. Submit your Evaluation. This will take some time to run.
+3. Selecione **Agente** como destino da avaliação
+4. Escolha `anomaly-detection-agent` na lista suspensa
+5. Selecione **Turnos individuais** e depois **Conjunto de dados existente**
+6. Clique em **Carregar novo conjunto de dados**.
+Primeiro, você deve inserir um nome para o conjunto de dados; o upload permanecerá desabilitado até isso ser feito. Digite um nome (por exemplo, `factory-eval`), adicione o arquivo localizado em `factory/challenge-3-evaluate/eval_portal.jsonl` e confirme o upload.
+7. Deixe os campos **Mapeamento de campos** e **Configurar agentes** como estão.
+8. Na etapa **Critérios**, mantenha apenas **Coerência** e **Fluência**. Remova todos os outros avaliadores, especialmente **desmarque Tool Call Accuracy**, pois os agentes não podem executar as ferramentas locais durante a avaliação e sempre terão uma pontuação baixa nesse item. Reduzir a lista de avaliadores também torna a execução significativamente mais rápida.
+9. Mantenha o Nome da avaliação como está ou configure-o como preferir.
+10. Envie sua avaliação. A execução levará algum tempo.
-### Step 3: View results
+### Etapa 3: Ver os resultados
-Results appear in the **Evaluate** tab within a few minutes. Click the run name to open the results.
+Os resultados aparecem na guia **Avaliar** em alguns minutos. Clique no nome da execução para abrir os resultados.
-There are two ways to read the results, and they answer different questions:
+Há duas maneiras de ler os resultados, e elas respondem a perguntas diferentes:
-- **Aggregate metrics** — the average score for each evaluator across all 10 test cases (e.g. an overall Coherence of 4.2). This is your single-number quality baseline — the headline figure you track over time and compare across agent versions.
-- **Per-row analysis** — the score for each individual test case, so you can see *which specific scenarios* dragged the average down. The aggregate tells you *if* there's a problem; the per-row view tells you *where* it is. Sort by the lowest scores to find the cases worth investigating.
+- **Métricas agregadas** — a pontuação média de cada avaliador nos 10 casos de teste (por exemplo, uma Coerência geral de 4,2). Essa é sua linha de base de qualidade em um único número, o principal valor que você acompanha ao longo do tempo e compara entre versões dos agentes.
+- **Análise por linha** — a pontuação de cada caso de teste individual, para que você veja *quais cenários específicos* reduziram a média. O agregado informa *se* há um problema; a visualização por linha informa *onde* ele está. Ordene pelas pontuações mais baixas para encontrar os casos que merecem investigação.
---
-## Success Criteria
+## Critérios de Sucesso
-- [ ] Evaluation runs against all 10 test cases without errors
-- [ ] You can see per-row scores for coherence and fluency
-- [ ] You've identified at least one case where the agent could improve
-- [ ] You understand the difference between aggregate metrics and per-row analysis
+- [ ] A avaliação é executada nos 10 casos de teste sem erros
+- [ ] Você consegue ver as pontuações por linha de coerência e fluência
+- [ ] Você identificou pelo menos um caso em que o agente poderia melhorar
+- [ ] Você entende a diferença entre métricas agregadas e análise por linha
diff --git a/factory/challenge-4-deploy/README.md b/factory/challenge-4-deploy/README.md
index d343441..8b68c34 100644
--- a/factory/challenge-4-deploy/README.md
+++ b/factory/challenge-4-deploy/README.md
@@ -1,26 +1,26 @@
-# Challenge 4: Production Workflow
+# Desafio 4: Fluxo de Produção
-Time: ~20 minutes
+Tempo: ~20 minutos
-Build a multi-agent orchestration workflow for TireForge Industries and take it to production.
+Crie um fluxo de orquestração multiagente para a TireForge Industries e leve-o à produção.
-## Scenario
+## Cenário
-The individual agents you built in Challenge 1 are valuable — but in production, agents need to work
-**together** as an automated pipeline. In this challenge you wire the two agents into a full
-factory health workflow, run it from code, then build and test it visually in the Foundry portal.
+Os agentes individuais que você criou no Desafio 1 são valiosos, mas em produção os agentes precisam trabalhar
+**juntos** como um pipeline automatizado. Neste desafio, você conectará os dois agentes em um
+fluxo de saúde da fábrica, executá-lo pelo código e depois criá-lo e testá-lo visualmente no portal do Foundry.

-## Learning Objectives
+## Objetivos de Aprendizagem
-- Deploy persistent production agents (create once, reuse forever)
-- Orchestrate multiple agents step-by-step in a Python workflow
-- Build the same workflow visually in the Foundry portal
-- Invoke the portal workflow from Python with live streaming
-- View run history and traces in the portal
+- Implantar agentes de produção persistentes (criar uma vez e reutilizar sempre)
+- Orquestrar vários agentes passo a passo em um fluxo Python
+- Criar o mesmo fluxo visualmente no portal do Foundry
+- Invocar o fluxo do portal pelo Python com streaming ao vivo
+- Ver o histórico de execuções e rastreamentos no portal
-## The Workflow
+## O Fluxo
```
ensure_agents_deployed()
@@ -37,25 +37,25 @@ print_factory_report() <-- Consolidated Health Report
---
-## Part 1 — SDK: Build and Run the Python Workflow
+## Parte 1 — SDK: Criar e Executar o Fluxo Python
-### Step 1: Review the implementation
+### Etapa 1: Examinar a implementação
-Open [deploy.py](./deploy.py) and review:
+Abra [deploy.py](./deploy.py) e examine:
-- **`ensure_agents_deployed()`** — lists existing agents, creates `anomaly-detection-agent` and `fault-diagnosis-agent` if not present
-- **`run_anomaly_scan()`** — calls the anomaly agent, handles the `check_thresholds` function call loop
-- **`run_fault_diagnosis()`** — calls the diagnosis agent for each affected machine
-- **`run_factory_health_workflow()`** — orchestrates all steps and returns the consolidated report
+- **`ensure_agents_deployed()`** — lista os agentes existentes e cria `anomaly-detection-agent` e `fault-diagnosis-agent` se não estiverem presentes
+- **`run_anomaly_scan()`** — chama o agente de anomalias e trata o loop de chamada da função `check_thresholds`
+- **`run_fault_diagnosis()`** — chama o agente de diagnóstico para cada máquina afetada
+- **`run_factory_health_workflow()`** — orquestra todas as etapas e retorna o relatório consolidado
-### Step 2: Run the workflow
+### Etapa 2: Executar o fluxo
```bash
cd factory/challenge-4-deploy
python deploy.py
```
-Expected output:
+Saída esperada:
```
=== Step 1: Ensure Agents Are Deployed ===
Found existing: anomaly-detection-agent
@@ -80,64 +80,64 @@ TIREFORGE FACTORY HEALTH REPORT
---
-## Part 2 — Portal: Build and Test the Visual Workflow
+## Parte 2 — Portal: Criar e Testar o Fluxo Visual
-### Step 3: Verify agents are deployed in the portal
+### Etapa 3: Verificar se os agentes estão implantados no portal
-1. Open the [Microsoft Foundry portal](https://ai.azure.com/nextgen)
-2. Select your project
-3. Select **Build** → **Agents** in the top bar
-4. Confirm both agents appear:
+1. Abra o [portal do Microsoft Foundry](https://ai.azure.com/nextgen)
+2. Selecione seu projeto
+3. Selecione **Criar** → **Agentes** na barra superior
+4. Confirme que os dois agentes aparecem:
- `anomaly-detection-agent`
- `fault-diagnosis-agent`
-### Step 4: Build the workflow in the portal designer
+### Etapa 4: Criar o fluxo no designer do portal
-1. Select **Build** → **Agents** → **Workflows**
-2. Notice that the workflow created using the SDK in Part 1 is listed. Let's create a new workflow by selecting **Create** → **Blank workflow**
+1. Selecione **Criar** → **Agentes** → **Fluxos de trabalho**
+2. Observe que o fluxo criado usando o SDK na Parte 1 está listado. Crie um novo fluxo selecionando **Criar** → **Fluxo em branco**

-3. In the visual designer **Add a workflow node** dialog choose **Agent**
+3. No designer visual, na caixa de diálogo **Adicionar um nó de fluxo**, escolha **Agente**

-4. In the **Select an agent** picker select `anomaly-detection-agent`
+4. No seletor **Selecionar um agente**, selecione `anomaly-detection-agent`

-5. In the **Next node** picker select **Agent** and click **Done** button
+5. No seletor **Próximo nó**, selecione **Agente** e clique no botão **Concluído**
\

-6. Select the new agent node in the canvas and in the **Select and agent** picker select `fault-diagnosis-agent`
+6. Selecione o novo nó de agente na tela e, no seletor **Selecionar um agente**, selecione `fault-diagnosis-agent`

-7. In the **Next node** picker select **End** and click **Done** button
+7. No seletor **Próximo nó**, selecione **Fim** e clique no botão **Concluído**

-8. Select **Save** and name it `factory-health-workflow-portal`
+8. Selecione **Salvar** e dê a ele o nome `factory-health-workflow-portal`

-### Step 5: Test the workflow in the portal playground
+### Etapa 5: Testar o fluxo no playground do portal
-> **Why you must include the sensor data in your message**
+> **Por que você deve incluir os dados dos sensores na mensagem**
>
-> The agents use a `check_thresholds` tool that reads from a local Python file.
-> The portal playground **cannot execute Python functions** — if you send a generic
-> prompt, the agent will try to call the tool and stall waiting for a result that
-> never arrives. Paste the sensor readings directly into your message so the agents
-> can work without needing the tool.
+> Os agentes usam uma ferramenta `check_thresholds` que lê um arquivo Python local.
+> O playground do portal **não consegue executar funções Python**; se você enviar um prompt
+> genérico, o agente tentará chamar a ferramenta e ficará aguardando um resultado que nunca
+> chegará. Cole as leituras dos sensores diretamente na mensagem para que os agentes
+> possam trabalhar sem precisar da ferramenta.
-1. In the **factory-health-workflow-portal** workflow canvas select **Preview**
+1. Na tela do fluxo **factory-health-workflow-portal**, selecione **Visualizar**

-2. Paste the following message (data is pre-embedded so no tool calls are needed):
+2. Cole a mensagem a seguir (os dados já estão incorporados, portanto não são necessárias chamadas de ferramentas):
```
All sensor readings for today are below — analyse them directly, do not call check_thresholds.
@@ -175,52 +175,52 @@ TIREFORGE FACTORY HEALTH REPORT
Detect all anomalies, then diagnose root causes and recommend remediation for affected machines.
```
-3. Watch the steps execute in sequence — anomaly scan first, then fault diagnosis
-4. Review the final consolidated report
+3. Observe as etapas serem executadas em sequência: primeiro a varredura de anomalias e depois o diagnóstico de falhas
+4. Examine o relatório consolidado final
-### Step 6: View run history and traces
+### Etapa 6: Ver o histórico de execuções e rastreamentos
-1. In the **factory-health-workflow-portal** workflow click **Traces**
+1. No fluxo **factory-health-workflow-portal**, clique em **Rastreamentos**

-2. Click the latest run to see the execution timeline — each step, duration, and output
+2. Clique na execução mais recente para ver a linha do tempo, cada etapa, duração e saída
---
-## Success Criteria
+## Critérios de Sucesso
-- [ ] Python workflow runs end-to-end: anomaly scan → diagnosis → factory health report
-- [ ] Both agents visible in the Foundry portal as persistent assets
-- [ ] Visual workflow created in the portal and tested in its playground
+- [ ] O fluxo Python é executado de ponta a ponta: varredura de anomalias → diagnóstico → relatório da saúde da fábrica
+- [ ] Os dois agentes estão visíveis no portal do Foundry como ativos persistentes
+- [ ] O fluxo visual foi criado no portal e testado em seu playground
---
-## Beyond the Lab: Production Deployment Options
+## Além do Laboratório: Opções de Implantação em Produção
-You've built and tested your agents locally. Here's how to take them to production:
+Você criou e testou seus agentes localmente. Veja como levá-los à produção:
-### Option 1: Hosted Agents (What You Already Have)
+### Opção 1: Agentes Hospedados (o que você já tem)
-Your agents created with `agents.create_version()` are already production-ready hosted agents. They live in Foundry indefinitely — any client can invoke them by name via the Responses API. No infrastructure to manage; Foundry handles scaling, versioning, and availability.
+Seus agentes criados com `agents.create_version()` já são agentes hospedados prontos para produção. Eles permanecem no Foundry indefinidamente; qualquer cliente pode invocá-los pelo nome usando a Responses API. Não há infraestrutura para gerenciar: o Foundry cuida do dimensionamento, versionamento e disponibilidade.
-- **Versioning**: Each `create_version()` produces an immutable version. Roll back by referencing an older version.
-- **Multi-tenant**: Multiple users/apps can call the same agent simultaneously.
-- **Portal visibility**: Agents appear under Build → Agents with playground, run history, and tracing.
+- **Versionamento**: Cada `create_version()` produz uma versão imutável. Reverta referenciando uma versão anterior.
+- **Multi-inquilino**: Vários usuários/aplicativos podem chamar o mesmo agente simultaneamente.
+- **Visibilidade no portal**: Os agentes aparecem em Criar → Agentes com playground, histórico de execuções e rastreamento.
-### Option 2: Foundry Workflows (Visual Orchestration)
+### Opção 2: Fluxos do Foundry (Orquestração Visual)
-What you built in Part 2 — wire multiple hosted agents into a DAG using the portal designer. The workflow becomes a deployable agent invoked via the same Responses API.
+O que você criou na Parte 2: conecte vários agentes hospedados em um DAG usando o designer do portal. O fluxo se torna um agente implantável, invocado pela mesma Responses API.
-- Step sequencing with automatic output passing
-- Streaming `workflow_action` events showing progress
-- Run history with per-step timing
+- Sequenciamento de etapas com passagem automática de saída
+- Streaming de eventos `workflow_action` mostrando o progresso
+- Histórico de execuções com tempo por etapa
-### Option 3: Azure App Service / Container Apps
+### Opção 3: Azure App Service / Container Apps
-Wrap your Python workflow in a FastAPI/Flask app for custom middleware, auth, or business logic:
+Envolva seu fluxo Python em um aplicativo FastAPI/Flask para obter middleware personalizado, autenticação ou lógica de negócio:
```python
# Example: FastAPI endpoint that calls your Foundry agents
@@ -230,32 +230,32 @@ async def health_check():
return report
```
-Deploy to **App Service** (managed PaaS) or **Container Apps** (auto-scaling containers).
+Implante no **App Service** (PaaS gerenciado) ou no **Container Apps** (contêineres com dimensionamento automático).
-### Option 4: Azure Functions (Event-Driven)
+### Opção 4: Azure Functions (Orientado a Eventos)
-Trigger agent workflows from events:
+Acione fluxos de agentes a partir de eventos:
-- **Timer trigger**: Run the factory health check every hour
-- **Service Bus trigger**: Process each anomaly alert as it arrives from IoT Hub
-- **HTTP trigger**: On-demand endpoint for maintenance teams
+- **Gatilho de timer**: Execute a verificação da saúde da fábrica a cada hora
+- **Gatilho do Service Bus**: Processe cada alerta de anomalia assim que chegar do IoT Hub
+- **Gatilho HTTP**: Endpoint sob demanda para as equipes de manutenção
-Pay-per-execution, scales to zero when idle.
+Pagamento por execução, com redução para zero quando ocioso.
-### Option 5: CI/CD Quality Gates
+### Opção 5: Gates de Qualidade de CI/CD
-Integrate evaluation into your deployment pipeline:
+Integre a avaliação ao seu pipeline de implantação:
-- Run `evaluate.py` on every PR — block merge if quality drops below threshold
-- Promote agent versions: `v1-dev` → `v1-staging` → `v1-prod` after evaluation passes
-- Blue/green: Deploy new version to 10% traffic, compare metrics, then promote
+- Execute `evaluate.py` em cada PR; bloqueie o merge se a qualidade ficar abaixo do limite
+- Promova versões dos agentes: `v1-dev` → `v1-staging` → `v1-prod` depois que a avaliação for aprovada
+- Blue/green: implante a nova versão para 10% do tráfego, compare as métricas e depois promova-a
-### Summary
+### Resumo
-| Pattern | Best For |
+| Padrão | Melhor para |
|---------|----------|
-| Hosted Agents | Always-on, invoke by name, no infra management |
-| Foundry Workflows | Multi-agent orchestration without code |
-| App Service / Containers | Custom auth, middleware, webhooks |
-| Azure Functions | Event-driven, pay-per-use, IoT integration |
-| CI/CD Gates | Automated quality assurance before promotion |
+| Agentes hospedados | Sempre ativos, invocação por nome e sem gerenciamento de infraestrutura |
+| Fluxos do Foundry | Orquestração multiagente sem código |
+| App Service / Contêineres | Autenticação personalizada, middleware e webhooks |
+| Azure Functions | Orientado a eventos, pagamento por uso e integração com IoT |
+| Gates de CI/CD | Garantia de qualidade automatizada antes da promoção |
diff --git a/factory/cleanup.sh b/factory/cleanup.sh
deleted file mode 100644
index faef04a..0000000
--- a/factory/cleanup.sh
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-# =============================================================================
-# Foundry Hackathon — Resource Cleanup Script (Factory)
-# Deletes the resource group and all resources created by deploy.sh
-# =============================================================================
-
-SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
-ENV_FILE="$SCRIPT_DIR/challenge-0-setup/.env"
-
-# Load .env if it exists
-if [[ -f "$ENV_FILE" ]]; then
- # shellcheck disable=SC1090
- source "$ENV_FILE"
- echo "Loaded environment from: $ENV_FILE"
-else
- echo "Warning: .env file not found at $ENV_FILE"
- echo "Set RESOURCE_GROUP manually or re-run challenge-0-setup/deploy.sh first."
-fi
-
-RESOURCE_GROUP="${RESOURCE_GROUP:-}"
-
-if [[ -z "$RESOURCE_GROUP" ]]; then
- echo ""
- echo "Error: RESOURCE_GROUP is not set."
- echo "Usage: RESOURCE_GROUP=foundry-hackathon-rg- bash factory/cleanup.sh"
- exit 1
-fi
-
-echo ""
-echo "=============================================="
-echo " Foundry Hackathon — Resource Cleanup"
-echo "=============================================="
-echo ""
-echo " Resource Group: $RESOURCE_GROUP"
-echo ""
-echo " This will permanently delete the resource group and ALL resources inside it:"
-echo " - Microsoft Foundry Resource + project"
-echo " - GPT model deployment"
-echo " - Log Analytics workspace"
-echo " - Application Insights instance"
-echo ""
-read -r -p " Are you sure you want to delete '$RESOURCE_GROUP'? (yes/no): " CONFIRM
-
-if [[ "$CONFIRM" != "yes" ]]; then
- echo "Cancelled. No resources were deleted."
- exit 0
-fi
-
-echo ""
-echo "Deleting resource group '$RESOURCE_GROUP'..."
-az group delete --name "$RESOURCE_GROUP" --yes --no-wait
-
-echo ""
-echo "=============================================="
-echo " ✅ Deletion initiated"
-echo "=============================================="
-echo ""
-echo " The resource group is being deleted in the background."
-echo " It may take a few minutes to fully remove all resources."
-echo ""
-echo " Verify in the Azure Portal:"
-echo " https://portal.azure.com/#view/HubsExtension/BrowseResourceGroups"
-echo ""
diff --git a/factory/infra/main.bicep b/factory/infra/main.bicep
new file mode 100644
index 0000000..2cba4bd
--- /dev/null
+++ b/factory/infra/main.bicep
@@ -0,0 +1,87 @@
+param location string = 'swedencentral'
+param suffix string = take(uniqueString(subscription().id, location), 8)
+param foundryResourceName string = 'foundry-hack-${suffix}'
+param projectName string = 'factory-project'
+param modelDeploymentName string = 'gpt-5.4'
+param modelName string = 'gpt-5.4'
+param modelVersion string = '2026-03-05'
+param logAnalyticsName string = 'foundry-hack-logs-${suffix}'
+param appInsightsName string = 'foundry-hack-insights-${suffix}'
+param tags object = { environment: 'hack' }
+
+resource foundry 'Microsoft.CognitiveServices/accounts@2025-06-01' = {
+ name: foundryResourceName
+ location: location
+ kind: 'AIServices'
+ sku: { name: 'S0' }
+ identity: { type: 'SystemAssigned' }
+ properties: {
+ customSubDomainName: foundryResourceName
+ allowProjectManagement: true
+ disableLocalAuth: false
+ publicNetworkAccess: 'Enabled'
+ }
+}
+resource project 'Microsoft.CognitiveServices/accounts/projects@2025-06-01' = {
+ parent: foundry
+ name: projectName
+ location: location
+ identity: { type: 'SystemAssigned' }
+ properties: { displayName: projectName }
+}
+resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2025-06-01' = {
+ parent: foundry
+ name: modelDeploymentName
+ sku: {
+ name: 'GlobalStandard'
+ capacity: 10
+ }
+ properties: {
+ model: {
+ format: 'OpenAI'
+ name: modelName
+ version: modelVersion
+ }
+ }
+ dependsOn: [project]
+}
+resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
+ name: logAnalyticsName
+ location: location
+ tags: tags
+ properties: { retentionInDays: 30 }
+}
+resource appInsights 'Microsoft.Insights/components@2020-02-02' = {
+ name: appInsightsName
+ location: location
+ kind: 'web'
+ tags: tags
+ properties: {
+ Application_Type: 'web'
+ WorkspaceResourceId: logAnalytics.id
+ }
+}
+resource appInsightsConnection 'Microsoft.CognitiveServices/accounts/connections@2025-06-01' = {
+ parent: foundry
+ name: 'appinsights-conn'
+ properties: {
+ category: 'AppInsights'
+ target: appInsights.id
+ authType: 'ApiKey'
+ credentials: { key: appInsights.properties.ConnectionString }
+ isSharedToAll: true
+ metadata: {
+ ApiType: 'Azure'
+ ResourceId: appInsights.id
+ }
+ }
+}
+output subscriptionId string = subscription().id
+output resourceGroupName string = resourceGroup().name
+output foundryResourceName string = foundry.name
+output projectName string = project.name
+output foundryEndpoint string = foundry.properties.endpoint
+output projectConnectionString string = 'https://${foundry.name}.services.ai.azure.com/api/projects/${project.name}'
+output modelDeploymentName string = modelDeployment.name
+output appInsightsConnectionString string = appInsights.properties.ConnectionString
+output appInsightsInstrumentationKey string = appInsights.properties.InstrumentationKey
\ No newline at end of file
diff --git a/factory/scripts/write-env.ps1 b/factory/scripts/write-env.ps1
new file mode 100644
index 0000000..0701718
--- /dev/null
+++ b/factory/scripts/write-env.ps1
@@ -0,0 +1,17 @@
+$ErrorActionPreference = 'Stop'
+function Get-AzdValue([string] $Name) { $value = azd env get-value $Name 2>$null; if ([string]::IsNullOrWhiteSpace($value)) { throw "azd value '$Name' was not produced." }; return $value.Trim() }
+$envFile = Join-Path $PSScriptRoot '..\.env'
+@"
+AZURE_SUBSCRIPTION_ID=$(Get-AzdValue subscriptionId)
+RESOURCE_GROUP=$(Get-AzdValue resourceGroupName)
+FOUNDRY_RESOURCE_NAME=$(Get-AzdValue foundryResourceName)
+PROJECT_NAME=$(Get-AzdValue projectName)
+FOUNDRY_ENDPOINT=$(Get-AzdValue foundryEndpoint)
+PROJECT_CONNECTION_STRING=$(Get-AzdValue projectConnectionString)
+MODEL_DEPLOYMENT_NAME=$(Get-AzdValue modelDeploymentName)
+APPLICATIONINSIGHTS_CONNECTION_STRING=$(Get-AzdValue appInsightsConnectionString)
+APPINSIGHTS_INSTRUMENTATION_KEY=$(Get-AzdValue appInsightsInstrumentationKey)
+AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
+OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
+"@ | Set-Content -Path $envFile -Encoding utf8NoBOM
+Write-Host "Environment file written to $envFile"
\ No newline at end of file
diff --git a/factory/wrapup.md b/factory/wrapup.md
index 52cdc38..3bbe13e 100644
--- a/factory/wrapup.md
+++ b/factory/wrapup.md
@@ -1,72 +1,73 @@
-# 🎉 Lab Complete — Predictive Maintenance (TireForge Industries)
+# 🎉 Laboratório Concluído — Manutenção Preditiva (TireForge Industries)
-Congratulations — you've built, instrumented, evaluated, and deployed a production-ready multi-agent AI system from scratch. Here's what you accomplished.
+Parabéns — você criou, instrumentou, avaliou e implantou do zero um sistema de IA multiagente pronto para produção. Veja o que você realizou.
---
-## Recap
+## Recapitulação
-| # | Challenge | What You Built |
+| # | Desafio | O que você criou |
|---|-----------|----------------|
-| 0 | **Setup** | Provisioned a Microsoft Foundry Resource, project, GPT model deployment, Log Analytics workspace, and Application Insights instance via a single `deploy.sh` script |
-| 1 | **Build Agents** | Created an **Anomaly Detection Agent** (reads live sensor telemetry — temperature, vibration, pressure — and identifies machines operating outside safe thresholds) and a **Fault Diagnosis Agent** (determines root cause and recommends maintenance actions per machine type) |
-| 2 | **Monitor** | Enabled OpenTelemetry GenAI tracing — every model call, tool invocation, and token count is captured as a distributed trace in Application Insights |
-| 3 | **Evaluate** | Ran systematic LLM-as-judge evaluations across the full sensor dataset, producing repeatable coherence and fluency scores you can version-track across prompt changes |
-| 4 | **Production Workflow** | Wired both agents into an orchestrated pipeline in the Foundry portal — a stable, testable endpoint with run history that plant operators can inspect |
+| 0 | **Configuração** | Provisionou um recurso e projeto do Microsoft Foundry, uma implantação de modelo GPT, um workspace do Log Analytics e uma instância do Application Insights usando `azd provision` |
+| 1 | **Criar Agentes** | Criou um **Agente de Detecção de Anomalias** (lê telemetria de sensores ao vivo — temperatura, vibração e pressão — e identifica máquinas operando fora dos limites seguros) e um **Agente de Diagnóstico de Falhas** (determina a causa raiz e recomenda ações de manutenção por tipo de máquina) |
+| 2 | **Monitorar** | Habilitou o rastreamento GenAI do OpenTelemetry — cada chamada de modelo, invocação de ferramenta e contagem de tokens é capturada como um rastreamento distribuído no Application Insights |
+| 3 | **Avaliar** | Executou avaliações sistemáticas com LLM como juiz em todo o conjunto de dados de sensores, produzindo pontuações repetíveis de coerência e fluência que podem ser acompanhadas por versão entre mudanças de prompt |
+| 4 | **Fluxo de Produção** | Conectou os dois agentes em um pipeline orquestrado no portal do Foundry — um endpoint estável e testável, com histórico de execuções que os operadores da fábrica podem inspecionar |
-### Skills you practiced
+### Habilidades praticadas
-- Designing agent system prompts with clear role boundaries and constraints
-- Grounding agents in real sensor telemetry via tool calls (function calling)
-- Distributed tracing for AI systems with OpenTelemetry
-- LLM-as-judge evaluation with the Azure AI Evaluation SDK
-- Multi-agent orchestration in the Foundry portal
+- Projetar prompts de sistema de agentes com limites claros de função e restrições
+- Fundamentar agentes em telemetria real de sensores por meio de chamadas de ferramentas (function calling)
+- Rastreamento distribuído de sistemas de IA com OpenTelemetry
+- Avaliação com LLM como juiz usando o SDK de Avaliação de IA do Azure
+- Orquestração multiagente no portal do Foundry
---
-## Next Steps
+## Próximos Passos
-Want to take the TireForge system further? Here are some directions:
+Quer levar o sistema da TireForge adiante? Veja alguns caminhos:
-- **Add more agents** — a Parts Inventory agent that checks whether replacement components are in stock before recommending maintenance, or a Scheduling agent that finds the earliest maintenance window with minimal production impact
-- **Connect real data** — replace the static `sensor_data.json` with a live IoT Hub or Azure Event Hub stream
-- **Improve evaluation** — add task-specific evaluators (e.g., "did the agent correctly identify a Curing Press failure from elevated temperature + abnormal pressure combination?") alongside the generic coherence scores
-- **Set up CI/CD** — run your evaluation dataset automatically on every prompt change using GitHub Actions and fail the build if quality scores drop below a threshold
-- **Explore fine-tuning** — use your traced fault diagnoses as training data to fine-tune a smaller, cheaper model for the initial anomaly detection step
-- **Try another scenario** — the [Claims](../claims/README.md) and [Call Center](../callcenter/README.md) scenarios cover insurance processing and customer support using the same lifecycle
+- **Adicione mais agentes** — um agente de Inventário de Peças que verifica se os componentes de reposição estão em estoque antes de recomendar a manutenção, ou um agente de Agendamento que encontra a primeira janela de manutenção com o menor impacto na produção
+- **Conecte dados reais** — substitua o `sensor_data.json` estático por um fluxo ativo do IoT Hub ou Azure Event Hub
+- **Melhore a avaliação** — adicione avaliadores específicos da tarefa (por exemplo, "o agente identificou corretamente uma falha na Prensa de Cura a partir da combinação de temperatura elevada e pressão anormal?") junto às pontuações genéricas de coerência
+- **Configure CI/CD** — execute automaticamente seu conjunto de avaliação a cada mudança de prompt usando o GitHub Actions e faça o build falhar se as pontuações de qualidade caírem abaixo de um limite
+- **Explore o ajuste fino** — use seus diagnósticos de falha rastreados como dados de treinamento para ajustar um modelo menor e mais barato para a etapa inicial de detecção de anomalias
+- **Experimente outro cenário** — os cenários de [Claims](../claims/README.md) e [Call Center](../callcenter/README.md) abordam processamento de seguros e suporte ao cliente usando o mesmo ciclo de vida
---
-## Clean Up Azure Resources
+## Limpar Recursos do Azure
-> **Important:** The resources deployed in Challenge 0 incur Azure costs while they exist. Delete them when you're done.
+> **Importante:** Os recursos implantados no Desafio 0 geram custos do Azure enquanto existirem. Exclua-os quando terminar.
-### What gets deleted
+### O que será excluído
-- The resource group `foundry-hackathon-rg-` and everything inside it:
- - Microsoft Foundry Resource + project
- - GPT model deployment
- - Log Analytics workspace
- - Application Insights instance
+- O grupo de recursos `foundry-hackathon-rg-` e tudo o que estiver dentro dele:
+ - Recurso e projeto do Microsoft Foundry
+ - Implantação do modelo GPT
+ - Workspace do Log Analytics
+ - Instância do Application Insights
-### Option 1 — Script
+### Opção 1 — azd down
-Run the cleanup script from the repo root:
+Na pasta **factory** (onde o ambiente `azd` foi inicializado), execute:
```bash
-bash factory/cleanup.sh
+cd factory
+azd down --purge
```
-The script reads the `.env` file written by `deploy.sh` so it knows exactly which resource group to target. It asks for confirmation before deleting.
+O comando usa o ambiente `azd` criado por `azd provision` para saber exatamente qual grupo de recursos deve atingir. Ele pede confirmação antes de excluir.
-### Option 2 — Azure Portal
+### Opção 2 — Portal do Azure
-1. Go to [portal.azure.com](https://portal.azure.com)
-2. Search for **Resource groups**
-3. Find `foundry-hackathon-rg-`
-4. Click **Delete resource group** and confirm
+1. Acesse [portal.azure.com](https://portal.azure.com)
+2. Pesquise por **Grupos de recursos**
+3. Localize `foundry-hackathon-rg-`
+4. Clique em **Excluir grupo de recursos** e confirme
-### Option 3 — Azure CLI
+### Opção 3 — CLI do Azure
```bash
# Replace with the value shown in your .env file
diff --git a/index.md b/index.md
index 3e8b85a..82355a8 100644
--- a/index.md
+++ b/index.md
@@ -1,46 +1,46 @@
-
+# Laboratório — Crie agentes de IA com o Microsoft Foundry
+Boas-vindas ao laboratório prático do **Hackathon Microsoft Cloud & AI Frontier Week** — onde ideias se transformam em soluções reais.
-# Lab — Build AI Agents with Microsoft Foundry
-Welcome to the hands-on lab for the **Microsoft Cloud & AI Frontier Week Hackathon** — where ideas turn into real solutions.
+Ao longo da Frontier Week, você explorou como a IA está transformando as organizações. Aqui você colocará esse conhecimento em prática.
-Throughout Frontier Week, you've explored how AI is transforming organizations. This is where you put that into practice.
+Neste laboratório, você **criará, monitorará, avaliará e orquestrará agentes de IA** usando o SDK do Microsoft Foundry — seguindo uma experiência guiada e baseada em cenários, projetada para levar você do conceito a um sistema multiagente funcional e pronto para empresas.
-In this lab, you'll **build, monitor, evaluate, and orchestrate AI agents** using the Microsoft Foundry SDK — following a guided, scenario-based experience designed to take you from concept to a working, enterprise-ready multi-agent system.
+Ao final, você não apenas entenderá como os agentes funcionam: terá criado um agente que pode **rastrear, avaliar e implantar**.
-By the end, you won't just understand how agents work — you'll have built one you can **trace, evaluate, and deploy**.
+## Escolha seu cenário
-## Choose Your Scenario
+Os três cenários usam a mesma estrutura de cinco desafios. Escolha o setor que mais combina com seus interesses.
-All three scenarios use the same five-challenge structure. Pick whichever industry fits your interest.
-
-| Scenario | Domain | What You Build |
+| Cenário | Domínio | O que você criará |
|----------|--------|----------------|
-| [🏭 Factory](./factory/README.md) | Predictive Maintenance | Anomaly Detection + Fault Diagnosis agents |
-| [📋 Claims](./claims/README.md) | Insurance Processing | Claims Triage + Claims Decision agents |
-| [📞 Call Center](./callcenter/README.md) | Customer Support | Intent Classification + Resolution Advisor agents |
+| [🏭 Fábrica](./factory/README.md) | Manutenção preditiva | Agentes de detecção de anomalias e diagnóstico de falhas |
+| [📋 Sinistros](./claims/README.md) | Processamento de seguros | Agentes de triagem de sinistros e decisão sobre sinistros |
+| [📞 Central de atendimento](./callcenter/README.md) | Suporte ao cliente | Agentes de classificação de intenção e orientação de resolução |
-## Challenge Structure
+## Estrutura dos desafios
-Every scenario follows the same five challenges:
+Todos os cenários seguem os mesmos cinco desafios:
-| # | Challenge | Duration |
+| # | Desafio | Duração |
|---|-----------|----------|
-| 0 | **Setup** — Deploy Azure AI Foundry infrastructure | 20 min |
-| 1 | **Build Agents** — Create two AI agents with tools | 30 min |
-| 2 | **Monitor** — Enable GenAI tracing with Application Insights | 20 min |
-| 3 | **Evaluate** — Run systematic quality evaluations | 30 min |
-| 4 | **Workflow** — Multi-agent orchestration via the Foundry portal | 20 min |
-
-## Prerequisites
-
-- Azure subscription with Contributor access
-- Python 3.10+
-- Azure CLI (`az`) installed and authenticated (`az login`)
-- A terminal (bash, PowerShell, or WSL)
-
-## Getting Started
-
-1. Clone this repo and pick a scenario folder (`factory/`, `claims/`, or `callcenter/`)
-2. Start with **Challenge 0** — it provisions everything you need
-3. Work through challenges 1–4 in order; each builds on the previous one
-4. The `agents.py` and `deploy.py` scripts are ready to run — read the README in each challenge folder for what to do
+| 0 | **Configuração** — Implantar a infraestrutura do Azure AI Foundry | 20 min |
+| 1 | **Criar agentes** — Criar dois agentes de IA com ferramentas | 30 min |
+| 2 | **Monitorar** — Habilitar o rastreamento de GenAI com o Application Insights | 20 min |
+| 3 | **Avaliar** — Executar avaliações sistemáticas de qualidade | 30 min |
+| 4 | **Workflow** — Orquestração multiagente pelo portal do Foundry | 20 min |
+
+## Pré-requisitos
+
+- Assinatura do Azure com acesso de Colaborador
+- Python 3.10 ou posterior
+- Azure CLI (`az`) instalada e autenticada (`az login`)
+- Azure Developer CLI (`azd`) instalada
+- Um terminal (bash, PowerShell ou WSL)
+
+## Primeiros passos
+
+1. Clone este repositório e autentique-se com `az login` e `azd auth login`
+2. Para provisionar o cenário padrão da central de atendimento, execute `azd up` na raiz do repositório
+3. Para um cenário específico, entre em `factory/`, `claims/` ou `callcenter/` e execute `azd up`
+4. Percorra os desafios 1–4 na ordem; cada um se baseia no anterior
+5. Os scripts `agents.py` e `deploy.py` estão prontos para execução — leia o README em cada pasta de desafio para saber o que fazer
diff --git a/infra/main.bicep b/infra/main.bicep
new file mode 100644
index 0000000..0f3b179
--- /dev/null
+++ b/infra/main.bicep
@@ -0,0 +1,99 @@
+@description('Azure region for the lab resources.')
+param location string = 'swedencentral'
+
+@description('Unique suffix used in globally unique resource names.')
+param suffix string = take(uniqueString(resourceGroup().id), 8)
+
+param foundryResourceName string = 'foundry-hack-${suffix}'
+param projectName string = 'callcenter-project'
+param modelDeploymentName string = 'gpt-5.4'
+param modelName string = 'gpt-5.4'
+param modelVersion string = '2026-03-05'
+param logAnalyticsName string = 'foundry-hack-logs-${suffix}'
+param appInsightsName string = 'foundry-hack-insights-${suffix}'
+param tags object = {
+ environment: 'hack'
+}
+
+resource foundry 'Microsoft.CognitiveServices/accounts@2025-06-01' = {
+ name: foundryResourceName
+ location: location
+ kind: 'AIServices'
+ sku: { name: 'S0' }
+ identity: { type: 'SystemAssigned' }
+ properties: {
+ customSubDomainName: foundryResourceName
+ allowProjectManagement: true
+ disableLocalAuth: false
+ publicNetworkAccess: 'Enabled'
+ }
+}
+
+resource project 'Microsoft.CognitiveServices/accounts/projects@2025-06-01' = {
+ parent: foundry
+ name: projectName
+ location: location
+ identity: { type: 'SystemAssigned' }
+ properties: { displayName: projectName }
+}
+
+resource modelDeployment 'Microsoft.CognitiveServices/accounts/deployments@2025-06-01' = {
+ parent: foundry
+ name: modelDeploymentName
+ sku: {
+ name: 'GlobalStandard'
+ capacity: 10
+ }
+ properties: {
+ model: {
+ format: 'OpenAI'
+ name: modelName
+ version: modelVersion
+ }
+ }
+ dependsOn: [project]
+}
+
+resource logAnalytics 'Microsoft.OperationalInsights/workspaces@2023-09-01' = {
+ name: logAnalyticsName
+ location: location
+ tags: tags
+ properties: { retentionInDays: 30 }
+}
+
+resource appInsights 'Microsoft.Insights/components@2020-02-02' = {
+ name: appInsightsName
+ location: location
+ kind: 'web'
+ tags: tags
+ properties: {
+ Application_Type: 'web'
+ WorkspaceResourceId: logAnalytics.id
+ }
+}
+
+resource appInsightsConnection 'Microsoft.CognitiveServices/accounts/connections@2025-06-01' = {
+ parent: foundry
+ name: 'appinsights-conn'
+ properties: {
+ category: 'AppInsights'
+ target: appInsights.id
+ authType: 'ApiKey'
+ credentials: { key: appInsights.properties.ConnectionString }
+ isSharedToAll: true
+ metadata: {
+ ApiType: 'Azure'
+ ResourceId: appInsights.id
+ }
+ }
+}
+
+output subscriptionId string = subscription().id
+output resourceGroupName string = resourceGroup().name
+output foundryResourceName string = foundry.name
+output projectName string = project.name
+output foundryEndpoint string = foundry.properties.endpoint
+output projectConnectionString string = 'https://${foundry.name}.services.ai.azure.com/api/projects/${project.name}'
+output modelDeploymentName string = modelDeployment.name
+output appInsightsConnectionString string = appInsights.properties.ConnectionString
+output appInsightsInstrumentationKey string = appInsights.properties.InstrumentationKey
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
index d65898d..35723cd 100644
--- a/mkdocs.yml
+++ b/mkdocs.yml
@@ -1,8 +1,8 @@
site_name: Build AI Agents with Microsoft Foundry
site_description: A hands-on lab teaching you to build, monitor, evaluate, and orchestrate AI agents using the Microsoft Foundry SDK.
-site_url: https://microsoft.github.io/FrontierWeekHack/
-repo_url: https://github.com/microsoft/FrontierWeekHack
-repo_name: microsoft/FrontierWeekHack
+site_url: https://diegodocs.github.io/FrontierWeekHack/
+repo_url: https://github.com/diegodocs/FrontierWeekHack
+repo_name: diegodocs/FrontierWeekHack
theme:
name: material
diff --git a/scripts/write-env.ps1 b/scripts/write-env.ps1
new file mode 100644
index 0000000..957b458
--- /dev/null
+++ b/scripts/write-env.ps1
@@ -0,0 +1,34 @@
+$ErrorActionPreference = 'Stop'
+
+function Get-AzdValue([string] $Name) {
+ $value = azd env get-value $Name 2>$null
+ if ([string]::IsNullOrWhiteSpace($value)) { throw "azd value '$Name' was not produced." }
+ return $value.Trim()
+}
+
+$subscriptionId = Get-AzdValue 'subscriptionId'
+$resourceGroupName = Get-AzdValue 'resourceGroupName'
+$foundryResourceName = Get-AzdValue 'foundryResourceName'
+$projectName = Get-AzdValue 'projectName'
+$foundryEndpoint = Get-AzdValue 'foundryEndpoint'
+$projectConnectionString = Get-AzdValue 'projectConnectionString'
+$modelDeploymentName = Get-AzdValue 'modelDeploymentName'
+$appInsightsConnectionString = Get-AzdValue 'appInsightsConnectionString'
+$appInsightsInstrumentationKey = Get-AzdValue 'appInsightsInstrumentationKey'
+$envFile = Join-Path $PSScriptRoot '..\.env'
+
+@"
+AZURE_SUBSCRIPTION_ID=$subscriptionId
+RESOURCE_GROUP=$resourceGroupName
+FOUNDRY_RESOURCE_NAME=$foundryResourceName
+PROJECT_NAME=$projectName
+FOUNDRY_ENDPOINT=$foundryEndpoint
+PROJECT_CONNECTION_STRING=$projectConnectionString
+MODEL_DEPLOYMENT_NAME=$modelDeploymentName
+APPLICATIONINSIGHTS_CONNECTION_STRING=$appInsightsConnectionString
+APPINSIGHTS_INSTRUMENTATION_KEY=$appInsightsInstrumentationKey
+AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING=true
+OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
+"@ | Set-Content -Path $envFile -Encoding utf8NoBOM
+
+Write-Host "Environment file written to $envFile"
\ No newline at end of file