6
6
from logging import Logger
7
7
from importlib_metadata import entry_points
8
8
from .base_persona import BasePersona
9
+ from time import time_ns
9
10
10
11
if TYPE_CHECKING :
11
12
from asyncio import AbstractEventLoop
12
13
13
14
# EPG := entry point group
14
15
EPG_NAME = "jupyter_ai.personas"
16
+
15
17
class PersonaManager :
16
18
"""
17
19
Class that manages all personas for a single chat.
@@ -54,6 +56,7 @@ def _init_persona_classes(self) -> None:
54
56
persona_eps = entry_points ().select (group = EPG_NAME )
55
57
self .log .info (f"Found { len (persona_eps )} entry points under '{ EPG_NAME } '." )
56
58
self .log .info ("PENDING: Loading AI persona classes from entry points..." )
59
+ start_time_ns = time_ns ()
57
60
persona_classes : list [type [BasePersona ]] = []
58
61
59
62
for persona_ep in persona_eps :
@@ -71,7 +74,8 @@ def _init_persona_classes(self) -> None:
71
74
continue
72
75
73
76
if len (persona_classes ) > 0 :
74
- self .log .info (f"SUCCESS: Loaded { len (persona_classes )} AI persona classes from entry points." )
77
+ elapsed_time_ms = (time_ns () - start_time_ns ) // 1000
78
+ self .log .info (f"SUCCESS: Loaded { len (persona_classes )} AI persona classes from entry points. Time elapsed: { elapsed_time_ms } ms." )
75
79
else :
76
80
self .log .error (
77
81
"ERROR: Jupyter AI has no AI personas available. "
@@ -86,10 +90,11 @@ def _init_personas(self) -> dict[str, BasePersona]:
86
90
"""
87
91
if hasattr (self , '_personas' ) or len (PersonaManager ._persona_classes ) == 0 :
88
92
return
89
-
90
- self .log .info (f"PENDING: Initializing AI personas for chat room '{ self .ychat .get_id ()} '..." )
91
93
persona_classes = PersonaManager ._persona_classes
92
94
assert isinstance (persona_classes , list )
95
+
96
+ self .log .info (f"PENDING: Initializing AI personas for chat room '{ self .ychat .get_id ()} '..." )
97
+ start_time_ns = time_ns ()
93
98
94
99
personas : dict [str , BasePersona ] = {}
95
100
for Persona in persona_classes :
@@ -110,7 +115,8 @@ def _init_personas(self) -> dict[str, BasePersona]:
110
115
self .log .info (f" - Initialized persona '{ persona .name } ' (ID: '{ persona .id } ')." )
111
116
personas [persona .id ] = persona
112
117
113
- self .log .info (f"SUCCESS: Initialized { len (personas )} AI personas for chat room '{ self .ychat .get_id ()} '." )
118
+ elapsed_time_ms = (time_ns () - start_time_ns ) // 1000
119
+ self .log .info (f"SUCCESS: Initialized { len (personas )} AI personas for chat room '{ self .ychat .get_id ()} '. Time elapsed: { elapsed_time_ms } ms." )
114
120
return personas
115
121
116
122
@property
0 commit comments