-
Notifications
You must be signed in to change notification settings - Fork 3.3k
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: Introduce Pydantic settings #6193
Conversation
… Update documentation. All tests passing.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
2 big points, I think it is nicer to parent the settings classes in the same folder as the services, for both AI and memory. and I wonder if allowing manually setting the same settings would make sense, and break less?
python/semantic_kernel/connectors/ai/settings/open_ai_settings.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/settings/azure_open_ai_settings.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/settings/azure_open_ai_settings.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/settings/azure_open_ai_settings.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/open_ai/services/azure_chat_completion.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/open_ai/services/azure_chat_completion.py
Outdated
Show resolved
Hide resolved
Python 3.10 Test Coverage Report •
Python 3.10 Unit Test Overview
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Small fix to make (but in multiple places, didn't add comments for all)
python/semantic_kernel/connectors/ai/open_ai/services/open_ai_chat_completion.py
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
small notes, one thing to consider (but can also be done in a subsequent PR) is to make the memory_storage_base more universal (like ai_settings_base or something) and use that throughout
python/semantic_kernel/connectors/ai/open_ai/settings/azure_open_ai_settings.py
Outdated
Show resolved
Hide resolved
python/semantic_kernel/connectors/ai/open_ai/settings/open_ai_settings.py
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Awesome!
### Motivation and Context SK Python is tightly coupled to the use of a `.env` file to read all secrets, keys, endpoints, and more. This doesn't scale well for users who wish to be able to use environment variables with their SK Applications. By introducing Pydantic Settings, it is possible to use both environment variables as well as have a fall-back to a `.env` file (via a `env_file_path` parameter), if desired. By introducing Pydantic Settings, we are removing the requirement to have to create Text/Embedding/Chat completion objects with an `api_key` or other previously required information (in the case of AzureChatCompletion that means an `endpoint`, an `api_key`, a `deployment_name`, and an `api_version`). When the AI connector is created, the Pydantic settings are loaded either via env vars or the fall-back `.env` file, and that means the user can create a chat completion object like: ```python chat_completion = OpenAIChatCompletion(service_id="test") ``` or, to optionally override the `ai_model_id` env var: ```python chat_completion = OpenAIChatCompletion(service_id="test", ai_model_id="gpt-4-1106") ``` Note: we have left the ability to specific an `api_key`/`org_id` for `OpenAIChatCompletion` or a `deployment_name`, `endpoint`, `base_url`, and `api_version` for `AzureChatCompletion` as before, but if your settings are configured to use env vars/.env file then there is no need to pass this information. <!-- Thank you for your contribution to the semantic-kernel repo! Please help reviewers and future users, providing the following information: 1. Why is this change required? 2. What problem does it solve? 3. What scenario does it contribute to? 4. If it fixes an open issue, please link to the issue here. --> ### Description The PR introduces the use of Pydantic settings and removes the use of the python-dotenv library. - Closes microsoft#1779 - Updates notebooks, samples, code and tests to remove the explicit config of api_key or other previous .env files values. - Adds new unit test config using monkeypatch to simulate env variables for testing - All unit and integration tests passing <!-- Describe your changes, the overall approach, the underlying design. These notes will help understanding how your code works. Thanks! --> ### Contribution Checklist <!-- Before submitting this PR, please make sure: --> - [X] The code builds clean without any errors or warnings - [X] The PR follows the [SK Contribution Guidelines](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md) and the [pre-submission formatting script](https://github.com/microsoft/semantic-kernel/blob/main/CONTRIBUTING.md#development-scripts) raises no violations - [X] All unit tests pass, and I have added new tests where possible - [ ] I didn't break anyone 😄
Motivation and Context
SK Python is tightly coupled to the use of a
.env
file to read all secrets, keys, endpoints, and more. This doesn't scale well for users who wish to be able to use environment variables with their SK Applications. By introducing Pydantic Settings, it is possible to use both environment variables as well as have a fall-back to a.env
file (via aenv_file_path
parameter), if desired.By introducing Pydantic Settings, we are removing the requirement to have to create Text/Embedding/Chat completion objects with an
api_key
or other previously required information (in the case of AzureChatCompletion that means anendpoint
, anapi_key
, adeployment_name
, and anapi_version
). When the AI connector is created, the Pydantic settings are loaded either via env vars or the fall-back.env
file, and that means the user can create a chat completion object like:or, to optionally override the
ai_model_id
env var:Note: we have left the ability to specific an
api_key
/org_id
forOpenAIChatCompletion
or adeployment_name
,endpoint
,base_url
, andapi_version
forAzureChatCompletion
as before, but if your settings are configured to use env vars/.env file then there is no need to pass this information.Description
The PR introduces the use of Pydantic settings and removes the use of the python-dotenv library.
Contribution Checklist