|
1 | | -## Object Model Requirements |
| 1 | +# Object Model Requirements |
2 | 2 |
|
3 | | -#### Definition |
| 3 | +## **Types** |
4 | 4 |
|
5 | | -Name|Copilot Studio|Foundry|Note |
6 | | -:--|:--:|:--:|:-- |
7 | | -ActionScope|✔|✔|Container for actions |
8 | | -ActivateExternalTrigger|✔|❌ |
| 5 | +- ✔ **Message** |
| 6 | + - Corresponds with user input or an agent response. |
| 7 | + - Requires robust support for how to access, identify most recent, transfer, count, etc... |
| 8 | + |
| 9 | +- ❌ **Thread** |
| 10 | + - Every workflow invocation is associated with a single "user thread" |
| 11 | + - Each agent is associated with its own dedicated thread that is implicitly managed. |
| 12 | + - Exposing an explicit thread primative within a workflow introduces additional complexity that is not required. |
| 13 | + |
| 14 | +## **Actions** |
| 15 | + |
| 16 | +The following table enumerates the actions currently supported by _Copilot Studio_ |
| 17 | +and those to be introduced specific to _Foundry_ workflows. |
| 18 | +_CopilotStudio_ actions not supported by _Foundry_ workflows are marked with `❌`. |
| 19 | + |
| 20 | +Name|Copilot Studio|Foundry|Priority|Note |
| 21 | +:--|:--:|:--:|:--:|:-- |
| 22 | +ActionScope|✔|✔|✔|Container for actions |
| 23 | +ActivateExternalTrigger|✔|❓||Not supported for v0. Evaluate trigger actions in next phase. |
9 | 24 | AdaptiveCardPrompt|✔|❌ |
10 | | -AnswerQuestionWithAI|✔|✔|Requires additional property: model (`ExternalModelConfiguration`) |
| 25 | +AnswerQuestionWithAI|✔|❌||Insufficient definition for _Foundry_. Use `InvokeChatCompletion` instead. |
11 | 26 | BeginDialog|✔|❌ |
12 | | -BreakLoop|✔|✔ |
| 27 | +BreakLoop|✔|✔|✔ |
13 | 28 | CSATQuestion|✔|❌ |
14 | 29 | CancelAllDialogs|✔|❌ |
15 | 30 | CancelDialog|✔|❌ |
16 | | -ClearAllVariables|✔|✔ |
17 | | -ConditionGroup|✔|✔|Includes one or more `ConditionItem` and an `ElseActions` |
18 | | -ContinueLoop|✔|✔ |
| 31 | +ClearAllVariables|✔|✔|✔ |
| 32 | +ConditionGroup|✔|✔|✔|Includes one or more `ConditionItem` and an `ElseActions`. |
| 33 | +ContinueLoop|✔|✔|✔ |
19 | 34 | CreateSearchQuery|✔|❌ |
20 | | -DeleteActivity|✔|❓ |
21 | | -DisableTrigger|✔|❌ |
| 35 | +DeleteActivity|✔|❓|❓|How does an _Activity_ differ from a _Message_? |
| 36 | +DisableTrigger|✔|❓||Not supported for v0. Evaluate trigger actions in next phase. |
22 | 37 | DisconnectedNodeContainer|✔|❌ |
23 | | -EditTable|✔|❓ |
24 | | -EditTableV2|✔|✔|Are both `EditTable*` actions needed? |
25 | | -EmitEvent|✔|❓ |
26 | | -EndConversation|✔|✔ |
| 38 | +EditTable|✔|❌||Favor `EditTableV2` instead. |
| 39 | +EditTableV2|✔|✔|✔ |
| 40 | +EmitEvent|✔|❌ |
| 41 | +EndConversation|✔|✔|✔|Terminal action when specified. A sequential workflow will automatically end after the final action. |
27 | 42 | EndDialog|✔|❌ |
28 | | -Foreach|✔|✔ |
29 | | -GetActivityMembers|✔|❓ |
30 | | -GetConversationMembers|✔|❓ |
31 | | -GotoAction|✔|✔ |
32 | | -HttpRequestAction|✔|❌ |
| 43 | +Foreach|✔|✔|✔ |
| 44 | +GetActivityMembers|✔|❌ |
| 45 | +GetConversationMembers|✔|❌ |
| 46 | +GotoAction|✔|✔|✔ |
| 47 | +HttpRequestAction|✔|❌||Favor usage of `InvokeTool` instead. |
33 | 48 | InvokeAIBuilderModelAction|✔|❌ |
34 | | -InvokeFoundryAgent|❌|✔|Based on _Foundry_ agent identifier |
| 49 | +InvokeAgent|❌|✔|✔|Produce a response for _Foundry_ agent based on its name or identifier. |
| 50 | +InvokeChatCompletion|❌|✔|✔|Invoke model using chat-completion API. |
35 | 51 | InvokeConnectorAction|✔|❌ |
36 | 52 | InvokeCustomModelAction|✔|❌ |
37 | 53 | InvokeFlowAction|✔|❌ |
| 54 | +InvokeResponse|❌|✔||Invoke model using response API. Not supported for v0. |
38 | 55 | InvokeSkillAction|✔|❌ |
39 | | -LogCustomTelemetryEvent|✔|✔ |
| 56 | +InvokeTool|❌|✔|❓|Unify how tools are defined and invoke directly (outside of agent invocation). Can include _Open API_, _Azure Function_, _Search_, etc... |
| 57 | +LogCustomTelemetryEvent|✔|❓||Not supported for v0. Could be captured as part of a [_Foundry_ Observability](https://learn.microsoft.com/azure/ai-foundry/agents/concepts/tracing). |
40 | 58 | OAuthInput|✔|❌ |
41 | | -ParseValue|✔|✔ |
42 | | -Question|✔|❓|Solicits user input |
43 | | -RecognizeIntent|✔|❓ |
| 59 | +ParseValue|✔|✔|✔ |
| 60 | +Question|✔|✔|✔|Solicits user input (human-in-the-loop). |
| 61 | +RecognizeIntent|✔|❌ |
44 | 62 | RepeatDialog|✔|❌ |
45 | 63 | ReplaceDialog|✔|❌ |
46 | | -ResetVariable|✔|✔ |
| 64 | +ResetVariable|✔|✔|✔ |
47 | 65 | SearchAndSummarizeContent|✔|❌ |
48 | 66 | SearchAndSummarizeWithCustomModel|✔|❌ |
49 | 67 | SearchKnowledgeSources|✔|❌ |
50 | | -SendActivity|✔|✔ |
51 | | -SetTextVariable|✔|✔ |
52 | | -SetVariable|✔|✔ |
| 68 | +SendActivity|✔|❓|❓|How does an _Activity_ differ from a _Message_? |
| 69 | +SetTextVariable|✔|✔|✔ |
| 70 | +SetVariable|✔|✔|✔ |
53 | 71 | SignOutUser|✔|❌ |
54 | | -TransferConversation|✔|❌ |
55 | | -TransferConversationV2|✔|❌ |
56 | | -UnknownDialogAction|✔|❓ |
57 | | -UpdateActivity|✔|❓ |
58 | | -WaitForConnectorTrigger|✔|❌ |
59 | | - |
60 | | -#### Open Questions |
61 | | -- Can a _Copilot Studio_ workflow be hosted in _Foundry_? **NO** |
62 | | -- Can a _Foundry_ workflow be utlized in _Copilot Studio_? **NO** |
63 | | -- Can a _Foundry_ workflow be hosted in different projects without modification? **NO** |
64 | | - (Agent identifiers differ even if model deployments match.) |
65 | | -- Is a _Foundry_ workfow specific to a single _Foundry_ project? **YES** |
66 | | -- Can user defined workflow YAML be uploaded to a _Foundry_ project? **YES** |
67 | | - (YAML can be authored in VS Code via a designer extension.) |
68 | | -- What is the validation process for a declarative YAML workflow? |
| 72 | +TransferConversation|✔|❌||Favor `TransferConversationV2` instead, if at all. |
| 73 | +TransferConversationV2|✔|❌||Not supported for v0. Could invoke invoke a different workflow; although, overloading action may be undesirable. |
| 74 | +UnknownDialogAction|✔|❌||Serialization construct that represents an unknown action. Not explicitly expressed as a workflow action. |
| 75 | +UpdateActivity|✔|❓|❓|How does an _Activity_ differ from a _Message_? |
| 76 | +WaitForConnectorTrigger|✔|❓||Not supported for v0. Evaluate trigger actions in next phase. |
| 77 | + |
| 78 | +## Behaviors |
| 79 | + |
| 80 | +### Is a _Foundry_ workfow specific to a single _Foundry_ project? |
| 81 | + |
| 82 | +Always. |
| 83 | +This implies that a _Foundry_ workflow has access to the resources associated with its project, |
| 84 | +including: models, agents, and connections. |
| 85 | + |
| 86 | +### Can user defined workflow YAML be uploaded to a _Foundry_ project? |
| 87 | + |
| 88 | +Yes. |
| 89 | +As _VS Code_ extension will support the authoring of _Foundry_ workflows in YAML. |
| 90 | +The resulting YAML can be uploaded to a _Foundry_ project. |
| 91 | +Ostensibly, one could directly author raw YAML and upload. |
| 92 | + |
| 93 | + |
| 94 | +### Can a Foundry workflow be hosted in different projects without modification? |
| 95 | + |
| 96 | +Agent identifiers differ across projects even if model deployments match. |
| 97 | +This creates an incompatibility between projects, |
| 98 | +exception in the case where an agent is identified by name only. |
| 99 | + |
| 100 | + |
| 101 | +### Can a _Copilot Studio_ workflow be hosted in _Foundry_ or vice-versa? |
| 102 | + |
| 103 | +Since the actions diverge between what is supported for _Copilot Studio_ and _Foundry_, |
| 104 | +interoperability between platforms is not generally supported. |
| 105 | +The special case where a workflow contains only the core actions that are supported by both platforms |
| 106 | +might allow for interoperablity. |
| 107 | + |
| 108 | +### How and when are declarative workflows (YAML) validated? |
| 109 | + |
| 110 | +Validating a declarative workflow prior to execution provides a superior user experience. |
| 111 | +This validation should be triggered for any workflow update: |
| 112 | +- Uploading a YAML file that creates or overwrites a workflow. |
| 113 | +- Creating or editing a workflow from the designer. |
| 114 | + |
| 115 | +Validation must include: |
| 116 | +- Schema validation: |
| 117 | + Can the YAML be deserialized and parsed? |
| 118 | +- Functional validation: |
| 119 | + Does the YAML consist of only the actions supported by the _Foundry_ object model? |
| 120 | + Is each action properly defined with valid identifiers? |
| 121 | +- Reference validation: |
| 122 | + Are all referenced resources (models, agents, connections) valid and accessible? |
| 123 | + |
| 124 | +At runtime the references shall be re-validated and, where relevant, logical names translated into physical identifiers. |
0 commit comments