From 4d2ed061ea3fa950929607a745285109ed01d53e Mon Sep 17 00:00:00 2001 From: h Date: Thu, 8 Oct 2026 04:53:54 +0200 Subject: [PATCH] perf(llm): google sdk imported when the agent is built, in a worker thread through utils.imports.preload --- template/{{ part_dir }}/src/utils/imports.py | 6 ++++++ .../{% if use_llm %}llm.py{% endif %}.jinja | 12 +++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) create mode 100644 template/{{ part_dir }}/src/utils/imports.py diff --git a/template/{{ part_dir }}/src/utils/imports.py b/template/{{ part_dir }}/src/utils/imports.py new file mode 100644 index 0000000..b267223 --- /dev/null +++ b/template/{{ part_dir }}/src/utils/imports.py @@ -0,0 +1,6 @@ +import asyncio +from importlib import import_module + + +async def preload(module: str) -> None: + await asyncio.to_thread(import_module, module) diff --git a/template/{{ part_dir }}/src/{% if use_dishka %}dependencies{% endif %}/providers/{% if use_llm %}llm.py{% endif %}.jinja b/template/{{ part_dir }}/src/{% if use_dishka %}dependencies{% endif %}/providers/{% if use_llm %}llm.py{% endif %}.jinja index 7fb63d2..d92adfc 100644 --- a/template/{{ part_dir }}/src/{% if use_dishka %}dependencies{% endif %}/providers/{% if use_llm %}llm.py{% endif %}.jinja +++ b/template/{{ part_dir }}/src/{% if use_dishka %}dependencies{% endif %}/providers/{% if use_llm %}llm.py{% endif %}.jinja @@ -1,14 +1,20 @@ from dishka import Provider, Scope, provide from pydantic_ai import Agent -from pydantic_ai.models.google import GoogleModel, GoogleModelSettings -from pydantic_ai.providers.google import GoogleProvider from utils.env import env +from utils.imports import preload class LlmProvider(Provider): @provide(scope=Scope.APP) - def agent(self) -> Agent: + async def agent(self) -> Agent: + await preload("pydantic_ai.models.google") + from pydantic_ai.models.google import ( # noqa: PLC0415 + GoogleModel, + GoogleModelSettings, + ) + from pydantic_ai.providers.google import GoogleProvider # noqa: PLC0415 + model = GoogleModel( env.llm.model.split(":", 1)[-1], provider=GoogleProvider(api_key=env.llm.gemini_api_key.get_secret_value()),