mirror of
https://github.com/microsoft/agent-framework.git
synced 2026-06-16 21:04:09 +08:00
24ad03af6f
* test: Add Reflection/Invocation tests * fix: Terminate on Completion event * refactor: Update public API surface * feat: Add support for external requests * feat: Support hosting AIAgent instances in Workflows * fix: Fix routing to go through Executor.ExecuteAsync * test: Update samples for "must SendMessage" semantics * Add invoking samples to unit tests to avoid future breaks * fix: ExternalRequest should block Workflow completion * feat: Normalize API surface against Python * Also adds xmldoc to all public APIs * refactor: Normalize UnitTest and Sample namespaces * fix: Formatting * refactor: Normalize project/folder names * feat: Remove DynamicCodeExecution from ValueTaskTypeErasure * fix: Fix ILTrim warnings * docs: Add missing docs and fix typos * feat: Hosted Agents should report Run events * fix: Fix type propagation for ILTrim changes * refactor: Simplify DynamicallyAccessedMembers annotations * sample: Use static-Type construction of InputPort * feat: Support non-Streaming Run Mode * test: Add test for non-streaming execution * Conversion checkpoint * Fix namespace error * Restructure * Completion * Executor checkpoint * Conditional checkpoint * Cleanup * Exception cleanup * Sample cleanup * Updates * feat: Define Workflow and Executor APIs * feat: Define IExecutionContext and Events * feat: Simple Workflow Demos * refactor: Move Workflows classes to separate assembly * feat: Move FanOut/In to LowLevel API with new semantics * feat: Implement Local Execution * refactor: Assembly name .Workflow => .Workflows * feat: Enable Default Message Handling * also lifts Bind in MessageHandlerInfo to better be able to direclty invoke handlers (for AOT, later) * feat: Implement StreamingHandle APIs This allows the user to respond to WorkflowEvents with external messages, enabling HIL. * feat: Add checks for duplicate edges and chain cycles * feat: Add built-in WorkflowEvents * refactor: Pull classes into own files * refactor: Simplify Disposal pattern in Executor * refactor: Break EdgeRunner file into per-type files * refactor: Use Throw.IfNull() * refactor: Remove AddLoop() Per https://github.com/microsoft/agent-framework/pull/272#discussion_r2241739079 we decided this was not very useful. * refactor: Normalize use of ValueTask * fix: Build Break from removing .AddLoop * refactor: Explicit routing and RouteBuilder Split out reflection from MessageRouter implemention into build phase, enabling AOT compilation to drive RouteBuilding without reflection. * test: Add Reflection/Invocation tests * fix: Terminate on Completion event * refactor: Update public API surface * feat: Add support for external requests * feat: Support hosting AIAgent instances in Workflows * fix: Fix routing to go through Executor.ExecuteAsync * test: Update samples for "must SendMessage" semantics * Add invoking samples to unit tests to avoid future breaks * fix: ExternalRequest should block Workflow completion * feat: Normalize API surface against Python * Also adds xmldoc to all public APIs * refactor: Normalize UnitTest and Sample namespaces * fix: Formatting * refactor: Normalize project/folder names * feat: Remove DynamicCodeExecution from ValueTaskTypeErasure * fix: Fix ILTrim warnings * docs: Add missing docs and fix typos * feat: Hosted Agents should report Run events * fix: Fix type propagation for ILTrim changes * refactor: Simplify DynamicallyAccessedMembers annotations * sample: Use static-Type construction of InputPort * feat: Support non-Streaming Run Mode * test: Add test for non-streaming execution * refactor: Remove unused types * refactor: Simplify Event and EdgeData type hierarchies * feat: Add Switch (=Conditional Edge Group) control flow * Fix unit-tests * Add sample * Comment cleanup * Fix debug output * Formating helpers * feat: Define Workflow and Executor APIs * feat: Define IExecutionContext and Events * feat: Simple Workflow Demos * refactor: Move Workflows classes to separate assembly * feat: Move FanOut/In to LowLevel API with new semantics * feat: Implement Local Execution * refactor: Assembly name .Workflow => .Workflows * feat: Enable Default Message Handling * also lifts Bind in MessageHandlerInfo to better be able to direclty invoke handlers (for AOT, later) * feat: Implement StreamingHandle APIs This allows the user to respond to WorkflowEvents with external messages, enabling HIL. * feat: Add checks for duplicate edges and chain cycles * feat: Add built-in WorkflowEvents * refactor: Pull classes into own files * refactor: Simplify Disposal pattern in Executor * refactor: Break EdgeRunner file into per-type files * refactor: Use Throw.IfNull() * refactor: Remove AddLoop() Per https://github.com/microsoft/agent-framework/pull/272#discussion_r2241739079 we decided this was not very useful. * refactor: Normalize use of ValueTask * fix: Build Break from removing .AddLoop * refactor: Explicit routing and RouteBuilder Split out reflection from MessageRouter implemention into build phase, enabling AOT compilation to drive RouteBuilding without reflection. * test: Add Reflection/Invocation tests * fix: Terminate on Completion event * refactor: Update public API surface * feat: Add support for external requests * feat: Support hosting AIAgent instances in Workflows * fix: Fix routing to go through Executor.ExecuteAsync * test: Update samples for "must SendMessage" semantics * Add invoking samples to unit tests to avoid future breaks * fix: ExternalRequest should block Workflow completion * feat: Normalize API surface against Python * Also adds xmldoc to all public APIs * refactor: Normalize UnitTest and Sample namespaces * fix: Formatting * refactor: Normalize project/folder names * feat: Remove DynamicCodeExecution from ValueTaskTypeErasure * fix: Fix ILTrim warnings * docs: Add missing docs and fix typos * feat: Hosted Agents should report Run events * fix: Fix type propagation for ILTrim changes * refactor: Simplify DynamicallyAccessedMembers annotations * sample: Use static-Type construction of InputPort * feat: Support non-Streaming Run Mode * test: Add test for non-streaming execution * refactor: Remove unused types * refactor: Simplify Event and EdgeData type hierarchies * feat: Add Switch (=Conditional Edge Group) control flow * feat: Make .NET AutoSend the MessageHandler result * feat: Implement State APIs * Add tests * Fix merge from main * Test coverage * Message event * Comments and clean-up * Format * Cleanup * Test checkpoint * Clean-up - comments / test * Test baseline - 100% * More clean-up * Comments * Streaming...sort've... * Fix build / test * Stable * Checkpoint * Checkpoint * Stable * Update sample after merge * Add "Question" workflow * State clean-up checkpoint * State clean-up * Sample updated * Expression bug fix * Sample formatting * Add unit test * Comments * Scope cleanup * Refine cleanup * Fill gaps * fcs * Finalize data-types * Add unit-test * Debug cleanup * Bug fixes * Demo progress * Sample clean-up * Update samples * Sample updates * Sync demo workflows * Sample formatting * Sample formatting * Demo complete * Workflow formatting * Demo formatting #2 * Readme + Sample clean-up * Scope update * Update diagnostics * Variable initiaization * Rollback * Tune research summary * State management * Fix merge * Fix merge - demo * Add readme * Overload for workflow builder * Fault tolerance - scope equivalency * Fix feed * Update sample * Add default for "Bot" * Nuget.config patchwork * Scope assignment check * Rollback nuget.config haxx * Sample format * Namespace * Namespace * Agent-Provider * Clean-up extra files * Renaming * Update sample * Prune junk files * Clean-up * Use transform * agent provider fix * Typo * Null check fix * Fix merge * Checkpoint * Cleanup * Exception cleanup * Exception message * Clean-up * Sample config update * Update handling of "Env" scope * Sample agent templates * Add readme * Event cleanup * Rename event * Update workflows/README.md Co-authored-by: Eric Zhu <ekzhu@users.noreply.github.com> --------- Co-authored-by: Jacob Alber <jaalber@microsoft.com> Co-authored-by: Eric Zhu <ekzhu@users.noreply.github.com>
487 lines
18 KiB
YAML
487 lines
18 KiB
YAML
#
|
|
# This workflow demonstrates a multi-agent orchestrator that attempts to address complex user requests.
|
|
#
|
|
# For this workflow, several agents used, each with a prompt specific to their role:
|
|
#
|
|
# 1. Analyst Agent: Able to analyze the current task.
|
|
# Enable "Bing Grounding Tool" in the agent settings.
|
|
# See: ./setup/AnalystAgent.yaml
|
|
#
|
|
# 2. Manager Agent: Able to create plans and delegate tasks to other agents.
|
|
# See: ./setup/ManagerAgent.yaml
|
|
#
|
|
# 3. Research Agent:
|
|
# Enable "Bing Grounding" in the agent settings.
|
|
# See: ./setup/WebAgent.yaml
|
|
#
|
|
# With instructions:
|
|
#
|
|
# Only provide requested information in a way that is throughfully organized and formatted.
|
|
# Never include any analysis or code.
|
|
# Never generate a file.
|
|
# Avoid repeating yourself.
|
|
#
|
|
# 4. Coder Agent:
|
|
# Enable "Code Interpreter" in the agent settings.
|
|
# See: ./setup/CoderAgent.yaml
|
|
#
|
|
# 5. Weather Agent: Able to retrieve factual information from the web.
|
|
# Enable "Open API" in the agent settings using the wttr.json schema.
|
|
# See: ./setup/WeatherAgent.yaml
|
|
#
|
|
kind: AdaptiveDialog
|
|
beginDialog:
|
|
|
|
kind: OnActivity
|
|
id: activity_xyz123
|
|
type: Message
|
|
actions:
|
|
- kind: SetVariable
|
|
id: setVariable_aASlmF
|
|
displayName: List all available agents for this orchestrator
|
|
variable: Topic.AvailableAgents
|
|
value: |-
|
|
=[
|
|
{
|
|
name: "WeatherAgent",
|
|
description: "Able to retrieve weather information",
|
|
agentid: Env.FOUNDRY_AGENT_RESEARCHWEATHER
|
|
},
|
|
{
|
|
name: "CoderAgent",
|
|
description: "Able to write and execute Python code",
|
|
agentid: Env.FOUNDRY_AGENT_RESEARCHCODER
|
|
},
|
|
{
|
|
name: "WebAgent",
|
|
description: "Able to perform generic websearches",
|
|
agentid: Env.FOUNDRY_AGENT_RESEARCHWEB
|
|
}
|
|
]
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_V6yEbo
|
|
displayName: Get a summary of all the agents for use in prompts
|
|
variable: Topic.TeamDescription
|
|
value: "=Concat(ForAll(Topic.AvailableAgents, $\"- \" & name & $\": \" & description), Value, \"\n\")"
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_NZ2u0l
|
|
displayName: Set Task
|
|
variable: Topic.InputTask
|
|
value: =System.LastMessage.Text
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_10u2ZN
|
|
displayName: Set Task
|
|
variable: Topic.SeedTask
|
|
value: =Topic.InputTask
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_yFsbRy
|
|
activity: Analyzing facts...
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_UDoMUw
|
|
displayName: Get Facts
|
|
autoSend: false
|
|
variable: Topic.TaskFacts
|
|
userInput: =Topic.InputTask
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHANALYST},
|
|
In order to help begin addressing the user request, please answer the following pre-survey to the best of your ability.
|
|
Keep in mind that you are Ken Jennings-level with trivia, and Mensa-level with puzzles, so there should be a deep well to draw from.
|
|
|
|
Here is the pre-survey:
|
|
|
|
1. Please list any specific facts or figures that are GIVEN in the request itself. It is possible that there are none.
|
|
2. Please list any facts that may need to be looked up, and WHERE SPECIFICALLY they might be found. In some cases, authoritative sources are mentioned in the request itself.
|
|
3. Please list any facts that may need to be derived (e.g., via logical deduction, simulation, or computation)
|
|
4. Please list any facts that are recalled from memory, hunches, well-reasoned guesses, etc.
|
|
|
|
When answering this survey, keep in mind that 'facts' will typically be specific names, dates, statistics, etc. Your answer must only use the headings:
|
|
|
|
1. GIVEN OR VERIFIED FACTS
|
|
2. FACTS TO LOOK UP
|
|
3. FACTS TO DERIVE
|
|
4. EDUCATED GUESSES
|
|
|
|
DO NOT include any other headings or sections in your response. DO NOT list next steps or plans until asked to do so.
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_yFsbRz
|
|
activity: Creating a plan...
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_DsBaJU
|
|
displayName: Create a Plan
|
|
autoSend: false
|
|
variable: Topic.Plan
|
|
userInput: =""
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHMANAGER},
|
|
Your only job is to devise an efficient plan that identifies (by name) how a team member may contribute to addressing the user request.
|
|
|
|
Only select the following team which is listed as "- [Name]: [Description]"
|
|
|
|
{Topic.TeamDescription}
|
|
|
|
The plan must be a bullet point list must be in the form "- [AgentName]: [Specific action or task for that agent to perform]"
|
|
|
|
Remember, there is no requirement to involve the entire team -- only select team member's whose particular expertise is required for this task.
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_Kk2LDL
|
|
displayName: Define instructions
|
|
variable: Topic.TaskInstructions
|
|
value: |-
|
|
="# TASK
|
|
Address the following user request:
|
|
|
|
" & Topic.InputTask & "
|
|
|
|
|
|
# TEAM
|
|
Use the following team to answer this request:
|
|
|
|
" & Topic.TeamDescription & "
|
|
|
|
|
|
# FACTS
|
|
Consider this initial fact sheet:
|
|
|
|
" & Trim(Topic.TaskFacts.Text) & "
|
|
|
|
|
|
# PLAN
|
|
Here is the plan to follow as best as possible:
|
|
|
|
" & Topic.Plan.Text
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_bwNZiM
|
|
activity: {Topic.TaskInstructions}
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_o3BQkf
|
|
displayName: Progress Ledger Prompt
|
|
autoSend: false
|
|
variable: Topic.ProgressLedgerUpdate
|
|
userInput: =Topic.AgentResponseText
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHMANAGER},
|
|
Recall we are working on the following request:
|
|
|
|
{Topic.InputTask}
|
|
|
|
And we have assembled the following team:
|
|
|
|
{Topic.TeamDescription}
|
|
|
|
To make progress on the request, please answer the following questions, including necessary reasoning:
|
|
|
|
- Is the request fully satisfied? (True if complete, or False if the original request has yet to be SUCCESSFULLY and FULLY addressed)
|
|
- Are we in a loop where we are repeating the same requests and / or getting the same responses from an agent multiple times? Loops can span multiple turns, and can include repeated actions like scrolling up or down more than a handful of times.
|
|
- Are we making forward progress? (True if just starting, or recent messages are adding value. False if recent messages show evidence of being stuck in a loop or if there is evidence of significant barriers to success such as the inability to read from a required file)
|
|
- Who should speak next? (select from: {Concat(Topic.AvailableAgents, name, ",")})
|
|
- What instruction or question would you give this team member? (Phrase as if speaking directly to them, and include any specific information they may need)
|
|
|
|
Please output an answer in pure JSON format according to the following schema. The JSON object must be parsable as-is. DO NOT OUTPUT ANYTHING OTHER THAN JSON, AND DO NOT DEVIATE FROM THIS SCHEMA:
|
|
|
|
{{
|
|
"is_request_satisfied": {{
|
|
"reason": string,
|
|
"answer": boolean
|
|
}},
|
|
"is_in_loop": {{
|
|
"reason": string,
|
|
"answer": boolean
|
|
}},
|
|
"is_progress_being_made": {{
|
|
"reason": string,
|
|
"answer": boolean
|
|
}},
|
|
"next_speaker": {{
|
|
"reason": string,
|
|
"answer": string (select from: {Concat(Topic.AvailableAgents, name, ",")})
|
|
}},
|
|
"instruction_or_question": {{
|
|
"reason": string,
|
|
"answer": string
|
|
}}
|
|
}}
|
|
|
|
- kind: ParseValue
|
|
id: parse_rNZtlV
|
|
displayName: Parse ledger response
|
|
variable: Topic.TypedProgressLedger
|
|
value: =Topic.ProgressLedgerUpdate.Text
|
|
valueType:
|
|
kind: Record
|
|
properties:
|
|
instruction_or_question:
|
|
type:
|
|
kind: Record
|
|
properties:
|
|
answer: String
|
|
reason: String
|
|
|
|
is_in_loop:
|
|
type:
|
|
kind: Record
|
|
properties:
|
|
answer: Boolean
|
|
reason: String
|
|
|
|
is_progress_being_made:
|
|
type:
|
|
kind: Record
|
|
properties:
|
|
answer: Boolean
|
|
reason: String
|
|
|
|
is_request_satisfied:
|
|
type:
|
|
kind: Record
|
|
properties:
|
|
answer: Boolean
|
|
reason: String
|
|
|
|
next_speaker:
|
|
type:
|
|
kind: Record
|
|
properties:
|
|
answer: String
|
|
reason: String
|
|
|
|
- kind: ConditionGroup
|
|
id: conditionGroup_mVIecC
|
|
conditions:
|
|
- id: conditionItem_fj432c
|
|
condition: =Topic.TypedProgressLedger.is_request_satisfied.answer
|
|
displayName: If Done
|
|
actions:
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_kdl3mC
|
|
activity: Completed! {Topic.TypedProgressLedger.is_request_satisfied.reason}
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_Ke3l1d
|
|
displayName: Generate Response
|
|
variable: Topic.FinalResponse
|
|
userInput: =Topic.SeedTask
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHMANAGER},
|
|
We have completed the task.
|
|
Based only on the conversation and without adding any new information, synthesize the result of the conversation as a complete response to the user task.
|
|
The user will only every see this last response and not the entire conversation, so please ensure it is complete and self-contained.
|
|
|
|
- kind: EndConversation
|
|
id: end_SVoNSV
|
|
|
|
- id: conditionItem_yiqund
|
|
condition: =Topic.TypedProgressLedger.is_in_loop.answer || Not(Topic.TypedProgressLedger.is_progress_being_made.answer)
|
|
displayName: If Stalling
|
|
actions:
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_H5lXdD
|
|
displayName: Increase stall count
|
|
variable: Topic.StallCount
|
|
value: =Topic.StallCount + 1
|
|
|
|
|
|
- kind: ConditionGroup
|
|
id: conditionGroup_vBTQd3
|
|
conditions:
|
|
|
|
- id: conditionItem_fpaNL9
|
|
condition: =.TypedProgressLedger.is_in_loop.answer
|
|
displayName: Is Loop
|
|
actions:
|
|
- kind: SendActivity
|
|
id: sendActivity_fpaNL9
|
|
activity: {Topic.TypedProgressLedger.is_in_loop.reason}
|
|
|
|
- id: conditionItem_NnqvXh
|
|
condition: =Not(Topic.TypedProgressLedger.is_progress_being_made.answer)
|
|
displayName: Is No Progress
|
|
actions:
|
|
- kind: SendActivity
|
|
id: sendActivity_NnqvXh
|
|
activity: {Topic.TypedProgressLedger.is_progress_being_made.reason}
|
|
|
|
|
|
- kind: ConditionGroup
|
|
id: conditionGroup_xzNrdM
|
|
conditions:
|
|
- id: conditionItem_NlQTBv
|
|
condition: =Topic.StallCount > 2
|
|
displayName: Stall Count Exceeded
|
|
actions:
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_H5lXdD
|
|
activity: Unable to make sufficient progress...
|
|
|
|
- kind: ConditionGroup
|
|
id: conditionGroup_4s1Z27
|
|
conditions:
|
|
- id: conditionItem_EXAlhZ
|
|
condition: =Topic.RestartCount > 2
|
|
actions:
|
|
- kind: SendActivity
|
|
id: sendActivity_xKxFUU
|
|
activity: Stopping after attempting {Topic.RestartCount} restarts...
|
|
|
|
- kind: EndConversation
|
|
id: end_GHVrFh
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_cwNZiM
|
|
activity: Re-analyzing facts...
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_wFJ123
|
|
displayName: Get New Facts Prompt
|
|
autoSend: false
|
|
variable: Topic.TaskFacts
|
|
userInput: |-
|
|
="As a reminder, we are working to solve the following task:
|
|
|
|
" & Topic.InputTask
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHANALYST},
|
|
It's clear we aren't making as much progress as we would like, but we may have learned something new.
|
|
Please rewrite the following fact sheet, updating it to include anything new we have learned that may be helpful.
|
|
Example edits can include (but are not limited to) adding new guesses, moving educated guesses to verified facts if appropriate, etc.
|
|
Updates may be made to any section of the fact sheet, and more than one section of the fact sheet can be edited.
|
|
This is an especially good time to update educated guesses, so please at least add or update one educated guess or hunch, and explain your reasoning.
|
|
|
|
Here is the old fact sheet:
|
|
|
|
{Topic.TaskFacts}
|
|
|
|
- kind: SendActivity
|
|
id: sendActivity_dsBaJU
|
|
activity: Re-analyzing plan...
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_uEJ456
|
|
displayName: Create new Plan Prompt
|
|
autoSend: false
|
|
variable: Topic.Plan
|
|
userInput: =""
|
|
additionalInstructions: |-
|
|
{Env.FOUNDRY_AGENT_RESEARCHMANAGER},
|
|
Please briefly explain what went wrong on this last run (the root cause of the failure),
|
|
and then come up with a new plan that takes steps and/or includes hints to overcome prior challenges and especially avoids repeating the same mistakes.
|
|
As before, the new plan should be concise, be expressed in bullet-point form, and consider the following team composition
|
|
(do not involve any other outside people since we cannot contact anyone else):
|
|
|
|
{Topic.TeamDescription}
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_jW7tmM
|
|
displayName: Set Plan as Context
|
|
variable: Topic.TaskInstructions
|
|
value: |-
|
|
="# TASK
|
|
Address the following user request:
|
|
|
|
" & Topic.InputTask & "
|
|
|
|
|
|
# TEAM
|
|
Use the following team to answer this request:
|
|
|
|
" & Topic.TeamDescription & "
|
|
|
|
|
|
# FACTS
|
|
Consider this initial fact sheet:
|
|
|
|
" & Topic.TaskFacts.Text & "
|
|
|
|
|
|
# PLAN
|
|
Here is the plan to follow as best as possible:
|
|
|
|
" & Topic.Plan.Text
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_6J2snP
|
|
displayName: Reset Stall count
|
|
variable: Topic.StallCount
|
|
value: 0
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_S6HCgh
|
|
displayName: Increase Restart count
|
|
variable: Topic.RestartCount
|
|
value: =Topic.RestartCount + 1
|
|
|
|
- kind: GotoAction
|
|
id: goto_LzfJ8u
|
|
actionId: question_o3BQkf
|
|
|
|
elseActions:
|
|
- kind: SendActivity
|
|
id: sendActivity_L7ooQO
|
|
activity: |-
|
|
({Topic.TypedProgressLedger.next_speaker.reason})
|
|
|
|
{Topic.TypedProgressLedger.next_speaker.answer} - {Topic.TypedProgressLedger.instruction_or_question.answer}
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_L7ooQO
|
|
variable: Topic.StallCount
|
|
value: 0
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_nxN1mE
|
|
variable: Topic.NextSpeaker
|
|
value: =Search(Topic.AvailableAgents, Topic.TypedProgressLedger.next_speaker.answer, name)
|
|
|
|
- kind: ConditionGroup
|
|
id: conditionGroup_QFPiF5
|
|
conditions:
|
|
- id: conditionItem_GmigcU
|
|
condition: =CountRows(Topic.NextSpeaker) = 1
|
|
displayName: If next Agent tool Exists
|
|
actions:
|
|
|
|
- kind: AnswerQuestionWithAI
|
|
id: question_orsBf06
|
|
variable: Topic.AgentResponse
|
|
userInput: =Topic.SeedTask
|
|
additionalInstructions: |-
|
|
{First(Topic.NextSpeaker).agentid},
|
|
{Topic.TypedProgressLedger.instruction_or_question.answer}
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_XzNrdM
|
|
variable: Topic.AgentResponseText
|
|
value: =Topic.AgentResponse.Text
|
|
|
|
- kind: ResetVariable
|
|
id: setVariable_8eIx2A
|
|
displayName: Clear seed task
|
|
variable: Topic.SeedTask
|
|
|
|
elseActions:
|
|
- kind: SendActivity
|
|
id: sendActivity_BhcsI7
|
|
activity: Unable to choose next agent...
|
|
|
|
- kind: SetVariable
|
|
id: setVariable_BhcsI7
|
|
displayName: Increase stall count
|
|
variable: Topic.StallCount
|
|
value: =Topic.StallCount + 1
|
|
|
|
- kind: GotoAction
|
|
id: goto_76Hne8
|
|
actionId: question_o3BQkf
|