Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python: Add the Python process framework #9363

Merged
merged 20 commits into from
Oct 24, 2024

Conversation

moonbox3
Copy link
Contributor

Motivation and Context

An initial PR to add the foundational pieces of the Python Process framework, which holds it design to be similar to dotnet in that step types are added to a process builder, and later on, when the step is run, it is first instantiated and the proper state is provided.

Description

Adding the initial process framework components:

TODO

  • more unit tests will be added to increase the code coverage. Currently there are several files with no (or low) code coverage.
  • more samples will either be added to this PR or a subsequent PR

Contribution Checklist

@moonbox3 moonbox3 requested a review from a team as a code owner October 21, 2024 20:38
@markwallace-microsoft markwallace-microsoft added python Pull requests for the Python Semantic Kernel documentation labels Oct 21, 2024
@moonbox3 moonbox3 self-assigned this Oct 21, 2024
@markwallace-microsoft
Copy link
Member

markwallace-microsoft commented Oct 21, 2024

Python Test Coverage

Python Test Coverage Report
FileStmtsMissCoverMissing
semantic_kernel
   kernel.py1994776%148, 159, 163, 313–316, 423, 437–480
semantic_kernel/agents/group_chat
   agent_chat.py124298%78, 171
   agent_group_chat.py100298%151, 201
   broadcast_queue.py72199%35
semantic_kernel/agents/open_ai
   assistant_content_generation.py141994%97–98, 329–337, 379, 381
   open_ai_assistant_base.py467898%260, 338–339, 747, 868, 871, 945, 1007
semantic_kernel/connectors/ai
   chat_completion_client_base.py116298%382, 392
   completion_usage.py8188%17
semantic_kernel/connectors/ai/anthropic/services
   anthropic_chat_completion.py176597%147, 165, 169, 223, 419
semantic_kernel/connectors/ai/azure_ai_inference/services
   azure_ai_inference_chat_completion.py119794%120, 146–149, 159, 180, 202
   azure_ai_inference_text_embedding.py41198%87
semantic_kernel/connectors/ai/bedrock/services
   bedrock_chat_completion.py1361490%117, 138, 163, 167–170, 228, 246–265, 324
   bedrock_text_completion.py57296%95, 118
   bedrock_text_embedding.py45198%94
semantic_kernel/connectors/ai/bedrock/services/model_provider
   bedrock_ai21_labs.py13192%67
   bedrock_anthropic_claude.py12192%54
   bedrock_cohere.py20195%75
   utils.py802075%68, 71, 102, 106–115, 132–150, 171–174
semantic_kernel/connectors/ai/embeddings
   embedding_generator_base.py8188%50
semantic_kernel/connectors/ai/google/google_ai/services
   google_ai_chat_completion.py119497%127, 153, 176, 178
   google_ai_text_completion.py63297%98, 121
   utils.py65395%139, 159–164
semantic_kernel/connectors/ai/google/vertex_ai/services
   utils.py66395%140, 160–165
   vertex_ai_chat_completion.py119497%121, 147, 170, 172
   vertex_ai_text_completion.py62297%95, 116
semantic_kernel/connectors/ai/hugging_face/services
   hf_text_completion.py60395%103, 112, 127
   hf_text_embedding.py32584%79–83
semantic_kernel/connectors/ai/mistral_ai/services
   mistral_ai_chat_completion.py118794%118–121, 307–310
semantic_kernel/connectors/ai/ollama/services
   ollama_chat_completion.py60788%72–73, 95–98, 108, 143
   ollama_text_completion.py57788%68–69, 90–93, 103, 131
   ollama_text_embedding.py41295%65–66
semantic_kernel/connectors/ai/onnx
   utils.py53394%50–51, 112
semantic_kernel/connectors/ai/onnx/services
   onnx_gen_ai_chat_completion.py72790%67–68, 98, 122, 167, 173, 179
   onnx_gen_ai_completion_base.py582164%59–71, 79–90
   onnx_gen_ai_text_completion.py46589%54–55, 87, 117, 133
semantic_kernel/connectors/ai/open_ai/prompt_execution_settings
   open_ai_prompt_execution_settings.py94199%112
semantic_kernel/connectors/ai/open_ai/services
   azure_chat_completion.py107595%118, 123, 157, 166, 169
   azure_text_completion.py28293%82, 87
   azure_text_embedding.py30293%84, 89
   open_ai_chat_completion_base.py127596%71, 121, 141, 177, 287
   open_ai_handler.py63395%86, 95–96
   open_ai_text_completion_base.py80298%56, 161
semantic_kernel/connectors/ai/open_ai/settings
   azure_open_ai_settings.py22195%99
semantic_kernel/connectors/memory/azure_ai_search
   azure_ai_search_collection.py87298%150, 152
semantic_kernel/connectors/memory/redis
   redis_collection.py160299%146, 316
   utils.py451176%145–146, 164, 166, 173–188
semantic_kernel/connectors/memory/weaviate
   utils.py60493%78, 82, 110, 249
   weaviate_collection.py1152578%144–153, 157–177, 181–186
   weaviate_store.py44980%106–114, 118–123
semantic_kernel/connectors/openapi_plugin
   openapi_manager.py58297%110–111
   openapi_parser.py88298%71, 128
   openapi_runner.py105298%181–182
semantic_kernel/connectors/openapi_plugin/models
   rest_api_operation.py129199%242
semantic_kernel/contents
   function_call_content.py100298%185, 213
   streaming_chat_message_content.py68199%210
   streaming_content_mixin.py39295%37, 64
semantic_kernel/core_plugins/sessions_python_tool
   sessions_python_plugin.py134894%69, 82–91, 99
   sessions_python_settings.py39490%84–87
semantic_kernel/data
   vector_store_record_collection.py2491992%408, 468–472, 480–484, 524–527, 534–537
   vector_store_record_utils.py26292%50, 52
semantic_kernel/functions
   kernel_function_decorator.py98199%102
   kernel_function_from_method.py96199%153
   kernel_function_from_prompt.py154795%165–166, 180, 201, 219, 239, 322
   kernel_function_log_messages.py36683%37–43
   kernel_plugin.py187299%472, 475
semantic_kernel/planners
   plan.py2344581%54, 163–165, 197, 214–227, 264, 269, 277–278, 288–291, 308, 313, 329, 332–337, 355, 360, 363, 365, 372, 386–388, 393–397
semantic_kernel/planners/function_calling_stepwise_planner
   function_calling_stepwise_planner.py116497%145, 189–190, 198
semantic_kernel/planners/sequential_planner
   sequential_planner.py64691%71, 75, 109, 125, 134–135
   sequential_planner_extensions.py50982%31–32, 56, 110–124
   sequential_planner_parser.py771284%66–74, 93, 117–120
semantic_kernel/processes
   process_builder.py683943%43–52, 56–58, 64–74, 78–85, 89–92, 96–100, 105, 109–114
   process_end_step.py19289%37, 41
   process_function_target_builder.py25388%37–40
   process_step_builder.py1052477%44, 89, 103, 110–123, 135–142, 151, 160–169, 178, 192, 209
   process_step_edge_builder.py34391%31, 46, 56
   process_types.py25196%35
semantic_kernel/processes/local_runtime
   local_kernel_process.py20290%23, 30
   local_kernel_process_context.py32294%66–67
   local_process.py1345261%92, 102, 120–130, 163–190, 194–199, 203, 207–213, 217–227, 231–232
   local_step.py17811436%61, 72, 81–169, 173, 177, 181–182, 187–249, 253–270, 274–277, 281–284, 288–297, 303–306, 310–312
semantic_kernel/schema
   kernel_json_schema_builder.py129993%53, 90, 186, 194, 205, 213, 228, 232–233
semantic_kernel/services
   ai_service_client_base.py22195%64
semantic_kernel/template_engine/blocks
   code_block.py77199%119
   named_arg_block.py43198%98
semantic_kernel/utils/authentication
   entra_id_authentication.py15287%26, 38
semantic_kernel/utils/telemetry
   user_agent.py16288%18–19
semantic_kernel/utils/telemetry/model_diagnostics
   decorators.py171498%372–375
TOTAL1330568595% 

Python Unit Test Overview

Tests Skipped Failures Errors Time
2760 4 💤 0 ❌ 0 🔥 1m 8s ⏱️

Copy link
Member

@eavanvalkenburg eavanvalkenburg left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

first run through, looks pretty good but I would love if we can make things less verbose and easier to dev with!

@rog555
Copy link

rog555 commented Oct 22, 2024

@moonbox3 this is super exciting, any thoughts on the implementation being abstracted enough to be able to use a non Dapr/Orleans workflow backend? For example Azure Pub/Sub + Functions or something equivilent (eg this sort of thing)

@moonbox3
Copy link
Contributor Author

@moonbox3 this is super exciting, any thoughts on the implementation being abstracted enough to be able to use a non Dapr/Orleans workflow backend? For example Azure Pub/Sub + Functions or something equivilent (eg this sort of thing)

Hi @rog555, we're already at a level of abstraction where it's pretty easy to BOYB (bring your own backend). This initial runtime, as you can see, is the local runtime. Dapr will come next. Once this framework is in main, we would love for you to experiment adding your own runtime/backend.

@rog555
Copy link

rog555 commented Oct 22, 2024

Thanks, roughly when do you think 1.12.0 will be available in the wild - before or after ignite? 😃👍

@moonbox3
Copy link
Contributor Author

Thanks, roughly when do you think 1.12.0 will be available in the wild - before or after ignite? 😃👍

Hi @rog555, definitely before! Trying to get 1.12.0 out this week, if possible. I need to add a few more samples and do some validations like running a process as a subprocess, but should be able to get that in by tomorrow/Thursday.

@moonbox3 moonbox3 enabled auto-merge October 24, 2024 17:10
@moonbox3 moonbox3 added this pull request to the merge queue Oct 24, 2024
Merged via the queue into microsoft:main with commit 6eba848 Oct 24, 2024
25 checks passed
@moonbox3 moonbox3 deleted the python-process-framework branch October 24, 2024 17:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation processes python Pull requests for the Python Semantic Kernel
Projects
Archived in project
Development

Successfully merging this pull request may close these issues.

Python: support Process framework
7 participants