Skip to content

Commit d9323b5

Browse files
awharrison-28dluc
andauthored
Remove kernel builder pattern for Python: sk.kernel_create() -> sk.Kernel() (microsoft#454)
### Motivation and Context This PR makes creating a kernel instance more pythonic. The builder pattern is removed and the kernel is constructed using Kernel(...). Work originally started with microsoft#137 ### Description - Removed kernel_builder.py. - Instance creation pattern `kernel = sk.create_kernel() -> kernel = sk.Kernel()` - For notebook 6, there is no need to create a separate kernel for the GitHub files. Changed to use a separate collection. Co-authored-by: Devis Lucato <[email protected]>
1 parent f06a845 commit d9323b5

23 files changed

Lines changed: 86 additions & 222 deletions

python/DEV_SETUP.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ You should be able to run the example under the [tests](tests) folder.
9898
## Pipeline checks
9999

100100
To run the same checks that run during the GitHub Action build, you can use
101-
this command, from the `python` folder:
101+
this command, from the [python](../python) folder:
102102

103103
poetry run pre-commit run -c .conf/.pre-commit-config.yaml -a
104104

python/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ AZURE_OPENAI_API_KEY=""
2929
import semantic_kernel as sk
3030
from semantic_kernel.ai.open_ai import OpenAITextCompletion, AzureTextCompletion
3131

32-
kernel = sk.create_kernel()
32+
kernel = sk.Kernel()
3333

3434
# Prepare OpenAI backend using credentials stored in the `.env` file
3535
api_key, org_id = sk.openai_settings_from_dot_env()

python/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "semantic-kernel"
3-
version = "0.2.2.dev"
3+
version = "0.2.3.dev"
44
description = ""
55
authors = ["Microsoft <[email protected]>"]
66
readme = "README.md"

python/semantic_kernel/__init__.py

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
from semantic_kernel import core_skills, memory
44
from semantic_kernel.kernel import Kernel
5-
from semantic_kernel.kernel_builder import KernelBuilder
65
from semantic_kernel.kernel_config import KernelConfig
7-
from semantic_kernel.memory.null_memory import NullMemory
86
from semantic_kernel.orchestration.context_variables import ContextVariables
97
from semantic_kernel.orchestration.sk_context import SKContext
108
from semantic_kernel.orchestration.sk_function_base import SKFunctionBase
@@ -22,17 +20,10 @@
2220
openai_settings_from_dot_env,
2321
)
2422

25-
26-
def create_kernel() -> Kernel:
27-
return KernelBuilder.create_kernel()
28-
29-
30-
def kernel_builder() -> KernelBuilder:
31-
return KernelBuilder(KernelConfig(), NullMemory(), NullLogger())
32-
33-
3423
__all__ = [
35-
"create_kernel",
24+
"Kernel",
25+
"KernelConfig",
26+
"NullLogger",
3627
"openai_settings_from_dot_env",
3728
"azure_openai_settings_from_dot_env",
3829
"PromptTemplateConfig",

python/semantic_kernel/kernel.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
from semantic_kernel.kernel_config import KernelConfig
1414
from semantic_kernel.kernel_exception import KernelException
1515
from semantic_kernel.kernel_extensions import KernelExtensions
16+
from semantic_kernel.memory.memory_store_base import MemoryStoreBase
17+
from semantic_kernel.memory.null_memory import NullMemory
1618
from semantic_kernel.memory.semantic_text_memory_base import SemanticTextMemoryBase
1719
from semantic_kernel.orchestration.context_variables import ContextVariables
1820
from semantic_kernel.orchestration.sk_context import SKContext
@@ -26,9 +28,11 @@
2628
)
2729
from semantic_kernel.skill_definition.skill_collection import SkillCollection
2830
from semantic_kernel.skill_definition.skill_collection_base import SkillCollectionBase
31+
from semantic_kernel.template_engine.prompt_template_engine import PromptTemplateEngine
2932
from semantic_kernel.template_engine.protocols.prompt_templating_engine import (
3033
PromptTemplatingEngine,
3134
)
35+
from semantic_kernel.utils.null_logger import NullLogger
3236
from semantic_kernel.utils.validation import validate_function_name, validate_skill_name
3337

3438

@@ -41,17 +45,23 @@ class Kernel(KernelBase, KernelExtensions):
4145

4246
def __init__(
4347
self,
44-
skill_collection: SkillCollectionBase,
45-
prompt_template_engine: PromptTemplatingEngine,
46-
memory: SemanticTextMemoryBase,
47-
config: KernelConfig,
48-
log: Logger,
48+
skill_collection: Optional[SkillCollectionBase] = None,
49+
prompt_template_engine: Optional[PromptTemplatingEngine] = None,
50+
memory: Optional[SemanticTextMemoryBase] = None,
51+
config: Optional[KernelConfig] = None,
52+
log: Optional[Logger] = None,
4953
) -> None:
50-
self._log = log
51-
self._config = config
52-
self._skill_collection = skill_collection
53-
self._prompt_template_engine = prompt_template_engine
54-
self._memory = memory
54+
self._log = log if log else NullLogger()
55+
self._config = config if config else KernelConfig()
56+
self._skill_collection = (
57+
skill_collection if skill_collection else SkillCollection(self._log)
58+
)
59+
self._prompt_template_engine = (
60+
prompt_template_engine
61+
if prompt_template_engine
62+
else PromptTemplateEngine(self._log)
63+
)
64+
self._memory = memory if memory else NullMemory()
5565

5666
def kernel(self) -> KernelBase:
5767
return self
@@ -158,6 +168,9 @@ def func(self, skill_name: str, function_name: str) -> SKFunctionBase:
158168
def register_memory(self, memory: SemanticTextMemoryBase) -> None:
159169
self._memory = memory
160170

171+
def register_memory_store(self, memory_store: MemoryStoreBase) -> None:
172+
self.use_memory(memory_store)
173+
161174
def create_new_context(self) -> SKContext:
162175
return SKContext(
163176
ContextVariables(),

python/semantic_kernel/kernel_builder.py

Lines changed: 0 additions & 92 deletions
This file was deleted.

python/tests/end-to-end/basics.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import semantic_kernel as sk
66
import semantic_kernel.ai.open_ai as sk_oai
77

8-
kernel = sk.create_kernel()
8+
kernel = sk.Kernel()
99

1010
# Load credentials from .env file
1111
api_key, org_id = sk.openai_settings_from_dot_env()

python/tests/end-to-end/chat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
ChatBot:>
1616
"""
1717

18-
kernel = sk.create_kernel()
18+
kernel = sk.Kernel()
1919

2020
api_key, org_id = sk.openai_settings_from_dot_env()
2121
kernel.config.add_text_backend(

python/tests/end-to-end/chat_gpt_api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
flowery prose.
1515
"""
1616

17-
kernel = sk.create_kernel()
17+
kernel = sk.Kernel()
1818

1919
api_key, org_id = sk.openai_settings_from_dot_env()
2020
kernel.config.add_chat_backend(

python/tests/end-to-end/memory.py

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,6 @@
77
import semantic_kernel.ai.open_ai as sk_oai
88

99

10-
def build_kernel() -> sk.Kernel:
11-
# Setup kernel with OpenAI completion and embedding backends
12-
api_key, org_id = sk.openai_settings_from_dot_env()
13-
14-
kernel = (
15-
sk.kernel_builder()
16-
.configure(
17-
lambda c: c.add_text_backend(
18-
"davinci-003",
19-
sk_oai.OpenAITextCompletion("text-davinci-003", api_key, org_id),
20-
)
21-
)
22-
.configure(
23-
lambda c: c.add_embedding_backend(
24-
"ada-002",
25-
sk_oai.OpenAITextEmbedding("text-embedding-ada-002", api_key, org_id),
26-
)
27-
)
28-
.with_memory_storage(sk.memory.VolatileMemoryStore())
29-
.build()
30-
)
31-
32-
kernel.import_skill(sk.core_skills.TextMemorySkill())
33-
34-
return kernel
35-
36-
3710
async def populate_memory(kernel: sk.Kernel) -> None:
3811
# Add some documents to the semantic memory
3912
await kernel.memory.save_information_async(
@@ -132,7 +105,18 @@ async def chat(
132105

133106

134107
async def main() -> None:
135-
kernel = build_kernel()
108+
kernel = sk.Kernel()
109+
110+
api_key, org_id = sk.openai_settings_from_dot_env()
111+
kernel.config.add_text_backend(
112+
"dv", sk_oai.OpenAITextCompletion("text-davinci-003", api_key, org_id)
113+
)
114+
kernel.config.add_embedding_backend(
115+
"ada", sk_oai.OpenAITextEmbedding("text-embedding-ada-002", api_key, org_id)
116+
)
117+
118+
kernel.register_memory_store(memory_store=sk.memory.VolatileMemoryStore())
119+
kernel.import_skill(sk.core_skills.TextMemorySkill())
136120

137121
print("Populating memory...")
138122
await populate_memory(kernel)

0 commit comments

Comments
 (0)