Skip to content

Commit

Permalink
Support for processes as steps.
Browse files Browse the repository at this point in the history
  • Loading branch information
moonbox3 committed Oct 23, 2024
1 parent a5f60be commit 990c95b
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
9 changes: 6 additions & 3 deletions python/samples/concepts/processes/nested_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import OpenAIChatCompletion
from semantic_kernel.functions import kernel_function
from semantic_kernel.processes.kernel_process.kernel_process import KernelProcess
from semantic_kernel.processes.kernel_process.kernel_process_event import KernelProcessEventVisibility
from semantic_kernel.processes.kernel_process.kernel_process_step import KernelProcessStep
from semantic_kernel.processes.kernel_process.kernel_process_step_context import KernelProcessStepContext
Expand Down Expand Up @@ -58,12 +59,12 @@ async def repeat(self, message: str, context: KernelProcessStepContext, count: i
self.state.last_message = output
print(f"[REPEAT] {output}")

await context.emit_event(
context.emit_event(
process_event=KernelProcessEvent(
id=ProcessEvents.OutputReadyPublic.value, data=output, visibility=KernelProcessEventVisibility.Public
)
)
await context.emit_event(
context.emit_event(
process_event=KernelProcessEvent(
id=ProcessEvents.OutputReadyInternal.value,
data=output,
Expand Down Expand Up @@ -109,8 +110,10 @@ async def nested_process():
process_handle = await process.start(kernel=kernel, initial_event=ProcessEvents.StartProcess.value, data=test_input)
process_info = await process_handle.get_state()

inner_process: KernelProcess = next((s for s in process_info.steps if s.state.name == "Inner"), None)

repeat_step_state: KernelProcessStepState[StepState] = next(
(s.state for s in process_info.steps if s.state.name == "RepeatStep"), None
(s.state for s in inner_process.steps if s.state.name == "RepeatStep"), None
)
assert repeat_step_state.state # nosec
assert repeat_step_state.state.last_message == "Test Test Test Test" # nosec
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,10 @@ async def to_kernel_process(self) -> "KernelProcess":
steps = await asyncio.gather(*step_tasks)
return KernelProcess(state=process_state, steps=steps, edges=self.output_edges)

async def to_kernel_process_step_info(self) -> "KernelProcessStepInfo":
"""Extracts the current state of the step and returns it as a KernelProcessStepInfo."""
return await self.to_kernel_process()

def enqueue_external_messages(self, message_channel: Queue[LocalMessage]):
"""Processes external events that have been sent to the process."""
while not self.external_event_queue.empty():
Expand Down

0 comments on commit 990c95b

Please sign in to comment.