[+] fix singleton for summarizer

1. use explicit singleton class variable
    for Summarizer, instead of relying
    on fastapi Depends caching;
This commit is contained in:
Siarhei Siniak 2025-07-25 12:40:06 +03:00
parent c0866ee863
commit 468eac45a2
6 changed files with 20 additions and 7 deletions

@ -45,7 +45,7 @@ RUN \
--break-system-packages \ --break-system-packages \
--no-index \ --no-index \
-f releases/whl \ -f releases/whl \
'online.fxreader.pr34.test_task_2025_07_17_v2==0.1.10' 'online.fxreader.pr34.test_task_2025_07_17_v2==0.1.11'
ENTRYPOINT ["tini", "--"] ENTRYPOINT ["tini", "--"]
CMD [ \ CMD [ \

@ -9,7 +9,7 @@ classifiers = [
] ]
name = 'online.fxreader.pr34.test_task_2025_07_17_v2' name = 'online.fxreader.pr34.test_task_2025_07_17_v2'
version = '0.1.10' version = '0.1.11'
dependencies = [ dependencies = [
'alembic', 'alembic',

@ -12,9 +12,9 @@ from typing import (Annotated,)
def get_app_router() -> fastapi.APIRouter: def get_app_router() -> fastapi.APIRouter:
logger.info(dict(msg='started')) logger.info(dict(msg='started'))
router = fastapi.APIRouter( router = fastapi.APIRouter(
dependencies=[ # dependencies=[
fastapi.Depends(summarizer_dependency,) # fastapi.Depends(summarizer_dependency,)
] # ]
) )
router.include_router( router.include_router(

@ -9,7 +9,8 @@ from typing import (Annotated,)
async def create_summarizer( async def create_summarizer(
) -> Summarizer: ) -> Summarizer:
return Summarizer() # return Summarizer()
return Summarizer.singleton()
AnnotatedSummarizer = Annotated[ AnnotatedSummarizer = Annotated[
Summarizer, fastapi.Depends(create_summarizer) Summarizer, fastapi.Depends(create_summarizer)

@ -6,7 +6,7 @@ logger = logging.getLogger(__name__)
from typing import ( from typing import (
Any, cast, Callable, Protocol, Literal, TypedDict, Any, cast, Callable, Protocol, Literal, TypedDict,
TypeAlias, TypeAlias, ClassVar, Optional,
) )
class SummarizerPipeline(Protocol): class SummarizerPipeline(Protocol):
@ -69,3 +69,12 @@ class Summarizer:
assert len(res) == 1 assert len(res) == 1
return res[0]['summary_text'].split() return res[0]['summary_text'].split()
_singleton: ClassVar[Optional['Summarizer']] = None
@classmethod
def singleton(cls) -> 'Summarizer':
if cls._singleton is None:
cls._singleton = Summarizer()
return cls._singleton