study-mate-agent 0.1.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of study-mate-agent might be problematic. Click here for more details.
- study_mate_agent/__init__.py +43 -0
- study_mate_agent/_codec.py +7 -0
- study_mate_agent/agents/__init__.py +10 -0
- study_mate_agent/agents/assistant.py +247 -0
- study_mate_agent/agents/study_week.py +108 -0
- study_mate_agent/agents/tutor.py +249 -0
- study_mate_agent/mappers/__init__.py +4 -0
- study_mate_agent/mappers/message_mapper.py +15 -0
- study_mate_agent/models/__init__.py +24 -0
- study_mate_agent/models/chunk.py +12 -0
- study_mate_agent/models/llm.py +29 -0
- study_mate_agent/models/material.py +10 -0
- study_mate_agent/models/message.py +61 -0
- study_mate_agent/models/stream.py +38 -0
- study_mate_agent/ports/__init__.py +12 -0
- study_mate_agent/ports/assistant.py +39 -0
- study_mate_agent/ports/embedder.py +15 -0
- study_mate_agent/ports/study_week.py +13 -0
- study_mate_agent/ports/tutor.py +41 -0
- study_mate_agent/prompts/__init__.py +8 -0
- study_mate_agent/prompts/assistant_prompt.py +56 -0
- study_mate_agent/prompts/tutor_prompt.py +44 -0
- study_mate_agent-0.1.1.dist-info/METADATA +111 -0
- study_mate_agent-0.1.1.dist-info/RECORD +26 -0
- study_mate_agent-0.1.1.dist-info/WHEEL +4 -0
- study_mate_agent-0.1.1.dist-info/licenses/LICENSE +22 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from study_mate_agent.models.chunk import EmbedChunkModel
|
|
2
|
+
from study_mate_agent.models.llm import LLMClientModel
|
|
3
|
+
from study_mate_agent.models.material import SearchMaterialModel
|
|
4
|
+
from study_mate_agent.models.message import Message, MessageRole, MessageRoleLabel
|
|
5
|
+
from study_mate_agent.models.stream import (
|
|
6
|
+
StreamCompletedEventModel,
|
|
7
|
+
StreamCreatedEventModel,
|
|
8
|
+
StreamDeltaEventModel,
|
|
9
|
+
StreamRagEventModel,
|
|
10
|
+
)
|
|
11
|
+
from study_mate_agent.ports.assistant import LectureAssistantAgent
|
|
12
|
+
from study_mate_agent.ports.embedder import EmbedderClient
|
|
13
|
+
from study_mate_agent.ports.study_week import StudyWeekAgent
|
|
14
|
+
from study_mate_agent.ports.tutor import TeachingTutorAgent
|
|
15
|
+
from study_mate_agent.agents.assistant import LectureAssistantOpenAIAgent
|
|
16
|
+
from study_mate_agent.agents.tutor import TeachingTutorOpenAIAgent
|
|
17
|
+
from study_mate_agent.agents.study_week import StudyWeekOpenAIAgent
|
|
18
|
+
|
|
19
|
+
__version__ = "0.1.1"
|
|
20
|
+
|
|
21
|
+
__all__ = [
|
|
22
|
+
"__version__",
|
|
23
|
+
# Models
|
|
24
|
+
"Message",
|
|
25
|
+
"MessageRole",
|
|
26
|
+
"MessageRoleLabel",
|
|
27
|
+
"EmbedChunkModel",
|
|
28
|
+
"LLMClientModel",
|
|
29
|
+
"SearchMaterialModel",
|
|
30
|
+
"StreamCreatedEventModel",
|
|
31
|
+
"StreamDeltaEventModel",
|
|
32
|
+
"StreamCompletedEventModel",
|
|
33
|
+
"StreamRagEventModel",
|
|
34
|
+
# Ports
|
|
35
|
+
"LectureAssistantAgent",
|
|
36
|
+
"TeachingTutorAgent",
|
|
37
|
+
"StudyWeekAgent",
|
|
38
|
+
"EmbedderClient",
|
|
39
|
+
# Agents
|
|
40
|
+
"LectureAssistantOpenAIAgent",
|
|
41
|
+
"TeachingTutorOpenAIAgent",
|
|
42
|
+
"StudyWeekOpenAIAgent",
|
|
43
|
+
]
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from study_mate_agent.agents.assistant import LectureAssistantOpenAIAgent
|
|
2
|
+
from study_mate_agent.agents.study_week import StudyWeekOpenAIAgent
|
|
3
|
+
from study_mate_agent.agents.tutor import TeachingTutorOpenAIAgent
|
|
4
|
+
|
|
5
|
+
__all__ = [
|
|
6
|
+
"LectureAssistantOpenAIAgent",
|
|
7
|
+
"StudyWeekOpenAIAgent",
|
|
8
|
+
"TeachingTutorOpenAIAgent",
|
|
9
|
+
]
|
|
10
|
+
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
import uuid as _0x_uuid
|
|
2
|
+
from datetime import datetime as _0x_dt
|
|
3
|
+
from typing import AsyncGenerator as _0x_AG, Optional as _0x_Opt, Union as _0x_Union
|
|
4
|
+
from zoneinfo import ZoneInfo as _0x_ZI
|
|
5
|
+
|
|
6
|
+
from agents import (
|
|
7
|
+
Agent as _0x_A,
|
|
8
|
+
function_tool as _0x_ft,
|
|
9
|
+
ModelSettings as _0x_MS,
|
|
10
|
+
trace as _0x_tr,
|
|
11
|
+
Runner as _0x_R,
|
|
12
|
+
RunResultStreaming as _0x_RRS,
|
|
13
|
+
RawResponsesStreamEvent as _0x_RRSE,
|
|
14
|
+
)
|
|
15
|
+
from openai.types.responses import (
|
|
16
|
+
EasyInputMessageParam as _0x_EIMP,
|
|
17
|
+
ResponseTextDeltaEvent as _0x_RTDE,
|
|
18
|
+
ResponseContentPartDoneEvent as _0x_RCPDE,
|
|
19
|
+
ResponseOutputText as _0x_ROT,
|
|
20
|
+
ResponseCreatedEvent as _0x_RCE,
|
|
21
|
+
Response as _0x_Resp,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
from study_mate_agent._codec import _0xdec as _0x_d
|
|
25
|
+
from study_mate_agent.ports.assistant import LectureAssistantAgent
|
|
26
|
+
from study_mate_agent.ports.embedder import EmbedderClient
|
|
27
|
+
from study_mate_agent.models.message import Message
|
|
28
|
+
from study_mate_agent.models.chunk import EmbedChunkModel
|
|
29
|
+
from study_mate_agent.models.llm import LLMClientModel
|
|
30
|
+
from study_mate_agent.models.material import SearchMaterialModel
|
|
31
|
+
from study_mate_agent.models.stream import (
|
|
32
|
+
StreamCompletedEventModel,
|
|
33
|
+
StreamCreatedEventModel,
|
|
34
|
+
StreamDeltaEventModel,
|
|
35
|
+
)
|
|
36
|
+
from study_mate_agent.mappers.message_mapper import to_llm_messages as _0x_tlm
|
|
37
|
+
from study_mate_agent.prompts.assistant_prompt import get_assistant_system_prompt as _0x_gasp
|
|
38
|
+
|
|
39
|
+
_0x_ATD = "\u0065\u004a\u0078\u0074\u0055\u0038\u0031\u0075\u0032\u006b\u0041\u0051\u0076\u0076\u004d\u0055\u0063\u0036\u006f\u0061\u0069\u0066\u0059\u0042\u0075\u004f\u0058\u0059\u0059\u0039\u002f\u0049\u0067\u0041\u002b\u0041\u0058\u005a\u0057\u006f\u004c\u0042\u0069\u0030\u0070\u006f\u0035\u0043\u0042\u0045\u0053\u0067\u0047\u006d\u0077\u0043\u0056\u0054\u006a\u006c\u0063\u0058\u005a\u006e\u0033\u0036\u0048\u0066\u0072\u0041\u0032\u0069\u0061\u0069\u0056\u004c\u0039\u006f\u0035\u0033\u005a\u0072\u0036\u0066\u0047\u0065\u0034\u006c\u004a\u006c\u0066\u0045\u0069\u0077\u0064\u004f\u0054\u0032\u0053\u004b\u0073\u0033\u0031\u005a\u0063\u0035\u006f\u0051\u007a\u0030\u0070\u004f\u0032\u0073\u0053\u005a\u0073\u006b\u0056\u0070\u006e\u0038\u0039\u006b\u0039\u0067\u0046\u0033\u002b\u0030\u0035\u0070\u0047\u0079\u0030\u002b\u004e\u0036\u0068\u0052\u006e\u0063\u006e\u0047\u0065\u004c\u0056\u0062\u006a\u0055\u002b\u0045\u004d\u006b\u0067\u0030\u0052\u0065\u0068\u006d\u0033\u007a\u006a\u0055\u0072\u0062\u006f\u0059\u0034\u0070\u0070\u006e\u006f\u0079\u0059\u0035\u004e\u0065\u0058\u0042\u0041\u0052\u0048\u0033\u006f\u004a\u0074\u006b\u0044\u006b\u004f\u0065\u0062\u0035\u0072\u0045\u0054\u0032\u0066\u004f\u0056\u0037\u0059\u0049\u0036\u0033\u0079\u0071\u0043\u0071\u0043\u0065\u002b\u0039\u0034\u0033\u0065\u0055\u0041\u0032\u0058\u0033\u004f\u0055\u0074\u006f\u006a\u0044\u0048\u0057\u0064\u0074\u0048\u0042\u0050\u0042\u005a\u0058\u002b\u0048\u0072\u0046\u0064\u0049\u006a\u0037\u0053\u0062\u0041\u0047\u0031\u0036\u0042\u0074\u004b\u006d\u0074\u004f\u0052\u004d\u0041\u0037\u0058\u006d\u0056\u0030\u0033\u006d\u0071\u0048\u0030\u0055\u0033\u0032\u0061\u0066\u006b\u007a\u006e\u006c\u0076\u0041\u0067\u0045\u0061\u0058\u0048\u0067\u005a\u0063\u0043\u0064\u006a\u0056\u0050\u0062\u006c\u006b\u0066\u0053\u0053\u0039\u0036\u0050\u002f\u004a\u006a\u006a\u0055\u0031\u0071\u0061\u0066\u0053\u0078\u0031\u006c\u0061\u0035\u0076\u0030\u0073\u0063\u0071\u0067\u0069\u0035\u0041\u0068\u0061\u007a\u0056\u0048\u0061\u0070\u0038\u002f\u0058\u0042\u002f\u0075\u0052\u006b\u0050\u0067\u0053\u0038\u0074\u004f\u0051\u0075\u004a\u006c\u007a\u0032\u0037\u004f\u0051\u0045\u0048\u0032\u0065\u0068\u0067\u0043\u002b\u0052\u0057\u0037\u0039\u0076\u0063\u0069\u0033\u0068\u0032\u006d\u0045\u0068\u0031\u0056\u0067\u004d\u0037\u0047\u004b\u0046\u0057\u0074\u0035\u004a\u0052\u0069\u0078\u0071\u0069\u0056\u006a\u0066\u0031\u0054\u006e\u006a\u0069\u0077\u004f\u0064\u005a\u0076\u0042\u002b\u0076\u0048\u0041\u0058\u0032\u0056\u0058\u0065\u0043\u004b\u006a\u0041\u0043\u004b\u0047\u0077\u006e\u0071\u0057\u004d\u0038\u0048\u0039\u0071\u006e\u0057\u0048\u0035\u0057\u0032\u0070\u0050\u0074\u006c\u0044\u0078\u0062\u0067\u0038\u0037\u0078\u005a\u0048\u0059\u006c\u0033\u0058\u0038\u0068\u004e\u0039\u0041\u0075\u007a\u0043\u002f\u0035\u006b\u0036\u0030\u0051\u0067\u0038\u0048\u0032\u002b\u0054\u0049\u004c\u0039\u0051\u0052\u0055\u0039\u006e\u0055\u0032\u0035\u004d\u005a\u0039\u0052\u0045\u0042\u0042\u004f\u0076\u0030\u0073\u0079\u0061\u0071\u0059\u0058\u0048\u0049\u0043\u0075\u0047\u006f\u0030\u0068\u004d\u0049\u0046\u0065\u0079\u006d\u0069\u0033\u004d\u0036\u0055\u0064\u0077\u006b\u004d\u0076\u0043\u002f\u0043\u0078\u0050\u0073\u0077\u0047\u0063\u006f\u0055\u004f\u0059\u0056\u0069\u006d\u007a\u0064\u0054\u005a\u0044\u0042\u004d\u0068\u0062\u0078\u0073\u0077\u0037\u002b\u007a\u0032\u0065\u0055\u0079\u0066\u0047\u0034\u0071\u0049\u004a\u007a\u0079\u0065\u0074\u006d\u0058\u004e\u007a\u0066\u0075\u0063\u0052\u0070\u004b\u0063\u0037\u0053\u0072\u006c\u0061\u0038\u0030\u0039\u0056\u0032\u0039\u0042\u0033\u0056\u0048\u002b\u0078\u0072\u0059\u005a\u0053\u0078\u0075\u0033\u0043\u0054\u0039\u0046\u002f\u0036\u004e\u0047\u0054\u0055\u0052\u0075\u0066\u0054\u0072\u0064\u004f\u0032\u004f\u0065\u0064\u006a\u006e\u0051\u0075\u0064\u0052\u002b\u0033\u006f\u0071\u0049\u0031\u0068\u0041\u0050\u0050\u0038\u0048\u006a\u0050\u0067\u0050\u0074\u0054\u0068\u0061\u0077\u0042\u004f\u0034\u004d\u0065\u0055\u0030\u0075\u0041\u0041\u0063\u006c\u007a\u0049\u004c\u0039\u0057\u0032\u0056\u0063\u0064\u006b\u0054\u0042\u0066\u0035\u0061\u004a\u0030\u0039\u0043\u0068\u0054\u0061\u004b\u0072\u0031\u0078\u0038\u0042\u0070\u007a\u0044\u004d\u006d\u0046\u0050\u0036\u0032\u0058\u0041\u0079\u004c\u0070\u005a\u0033\u004c\u0077\u0065\u004d\u0034\u0055\u0048\u0071\u007a\u0076\u0069\u002f\u005a\u0062\u0073\u006a\u0039\u0033\u0064\u0048\u002b\u0078\u0064\u0059\u0048\u0030\u003d"
|
|
40
|
+
_0x_AER = "\u0065\u004a\u0077\u0031\u006a\u0031\u0046\u004b\u0077\u0030\u0041\u0055\u0052\u0066\u002b\u007a\u0069\u0076\u0066\u006c\u006c\u0033\u0051\u0050\u004c\u0073\u0046\u0046\u0064\u0041\u0045\u004b\u0066\u006f\u0067\u0049\u006f\u0052\u0031\u006b\u0037\u0045\u0053\u004d\u006d\u004b\u0052\u006a\u0053\u0055\u0071\u004c\u0043\u006f\u0030\u0049\u0068\u006d\u0053\u004b\u0045\u0051\u004b\u0043\u0079\u0035\u006e\u0037\u005a\u0067\u002f\u004f\u0031\u0050\u006a\u0031\u0037\u0073\u0066\u0068\u0033\u0050\u0075\u0075\u007a\u0069\u0036\u006d\u0035\u0035\u0066\u0058\u0068\u0047\u0031\u004a\u0074\u006f\u0031\u0035\u0066\u0075\u0073\u004b\u0079\u0065\u0057\u0041\u006d\u0053\u005a\u0072\u0059\u006d\u0078\u0032\u0078\u004f\u0073\u0055\u007a\u0034\u006c\u0074\u0059\u0075\u004c\u006c\u0044\u0053\u002f\u0032\u0055\u0042\u004c\u0071\u005a\u0052\u004c\u0039\u0034\u0056\u0077\u0059\u0076\u0041\u0036\u0045\u0075\u0034\u0077\u0067\u0048\u0072\u006d\u004b\u0079\u0054\u0032\u0055\u0054\u006f\u0076\u0067\u0038\u0045\u0034\u0030\u006d\u0066\u0033\u004f\u0079\u004f\u0055\u002b\u0074\u0076\u004b\u0041\u0073\u0053\u0070\u0078\u004c\u0031\u0078\u0075\u0043\u004a\u0031\u0068\u0030\u0066\u004d\u0071\u006d\u0030\u0052\u0063\u0047\u0058\u007a\u0030\u0051\u0065\u0046\u0030\u007a\u004b\u004c\u0038\u0070\u0034\u0072\u0051\u0068\u0064\u006f\u0063\u006b\u0079\u0066\u0049\u0064\u0067\u0050\u0065\u0036\u006e\u0045\u0052\u004c\u0031\u004d\u0073\u0073\u006a\u0041\u0071\u0048\u004d\u0077\u004d\u0072\u002b\u0071\u0078\u0031\u0053\u0055\u0070\u0031\u004d\u0037\u006c\u0032\u006e\u0059\u0062\u0069\u006c\u007a\u002b\u0078\u0050\u0050\u004b\u0034\u0037\u005a\u004e\u0036\u0050\u0054\u006f\u0078\u0044\u002b\u0061\u0065\u004c\u0032\u0048\u0043\u0050\u0072\u0067\u0067\u0044\u004a\u0051\u0058\u0032\u0054\u0033\u004b\u0055\u0076\u0039\u0038\u0038\u006e\u0062\u0078\u006b\u0066\u0043\u0065\u0038\u002b\u0056\u0044\u0074\u0039\u0078\u004c\u0072\u0033\u0066\u002b\u0038\u0061\u0035\u0076\u007a\u0061\u006f\u0077\u0074\u0055\u003d"
|
|
41
|
+
_0x_AFR = "\u0065\u004a\u0077\u0074\u006a\u0054\u0073\u004f\u0067\u006b\u0041\u0055\u0052\u0058\u0074\u0057\u0038\u0052\u005a\u0067\u0058\u0049\u0044\u0062\u004d\u0052\u0051\u0057\u0061\u006c\u0051\u0073\u0044\u0043\u0045\u0068\u0051\u006f\u0046\u0043\u0051\u0051\u0048\u0078\u0045\u0038\u0061\u0059\u004b\u0045\u0059\u0054\u0069\u006c\u0048\u0048\u0068\u0049\u0049\u0056\u007a\u0062\u0076\u0073\u0077\u0063\u0046\u0059\u0033\u0065\u0061\u0063\u0065\u0039\u007a\u005a\u0030\u0070\u0036\u0076\u0050\u004e\u0049\u0076\u0048\u0038\u0048\u0047\u006a\u004e\u0054\u0076\u0068\u0074\u007a\u0068\u0064\u0044\u006c\u0078\u0050\u0050\u0031\u0055\u0041\u0038\u0073\u0064\u004f\u0066\u005a\u0034\u0034\u0056\u006c\u0061\u0048\u0069\u0042\u0038\u0077\u0072\u0070\u0043\u0048\u006d\u0047\u0058\u0045\u0069\u0064\u002b\u006d\u0079\u0075\u006a\u004a\u0049\u0067\u004c\u0069\u0041\u005a\u0043\u0045\u0063\u0064\u0058\u004c\u006d\u0076\u0043\u004b\u0065\u0056\u004c\u006f\u0071\u0058\u0042\u0054\u0078\u0047\u004b\u0068\u0068\u002b\u004b\u0038\u0043\u006b\u0051\u006e\u0077\u0030\u0065\u0051\u0049\u0054\u0045\u006d\u0065\u0052\u0053\u0063\u0062\u0072\u0076\u0045\u0065\u0054\u0064\u0071\u0048\u002b\u0034\u004f\u0039\u0068\u006d\u0076\u0030\u0070\u0038\u0037\u0063\u0041\u0032\u0050\u0079\u0041\u0051\u0070\u006d\u0063\u0036\u0068\u0044\u007a\u0068\u0057\u0034\u0057\u0077\u0078\u006a\u0048\u0072\u0066\u0077\u0047\u0072\u0051\u0058\u004c\u0071"
|
|
42
|
+
_0x_NO_EMB = "eJyqVrVSqlKjSUvUs7hKkfLLEjcUkexIR2WpVFKnu7iFiQGqJmvivfJ3elkRpF9VisceAhjrLzeTvdtTe2mvbDq2TRXtftP7W4oAK5eBgA=="
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class LectureAssistantOpenAIAgent(LectureAssistantAgent):
|
|
46
|
+
|
|
47
|
+
def __init__(
|
|
48
|
+
self,
|
|
49
|
+
agent_model: str = "gpt-6-luna",
|
|
50
|
+
embedder_client: _0x_Opt[EmbedderClient] = None,
|
|
51
|
+
timezone: _0x_Opt[_0x_Union[_0x_ZI, str]] = None,
|
|
52
|
+
temperature: float = 0.0,
|
|
53
|
+
tool_choice: str = "required",
|
|
54
|
+
system_prompt_template: _0x_Opt[str] = None,
|
|
55
|
+
additional_rules: _0x_Opt[str] = None,
|
|
56
|
+
):
|
|
57
|
+
self.agent_model = agent_model
|
|
58
|
+
self.embedder_client = embedder_client
|
|
59
|
+
if timezone is None:
|
|
60
|
+
self.timezone = _0x_ZI("Asia/Seoul")
|
|
61
|
+
elif isinstance(timezone, str):
|
|
62
|
+
self.timezone = _0x_ZI(timezone)
|
|
63
|
+
else:
|
|
64
|
+
self.timezone = timezone
|
|
65
|
+
self.temperature = temperature
|
|
66
|
+
self.tool_choice = tool_choice
|
|
67
|
+
self.system_prompt_template = system_prompt_template
|
|
68
|
+
self.additional_rules = additional_rules
|
|
69
|
+
|
|
70
|
+
async def _search_lecture_materials(
|
|
71
|
+
self,
|
|
72
|
+
bucket_id: _0x_uuid.UUID,
|
|
73
|
+
query: str,
|
|
74
|
+
) -> tuple[str, list[EmbedChunkModel]]:
|
|
75
|
+
if not self.embedder_client:
|
|
76
|
+
return _0x_d(_0x_NO_EMB), []
|
|
77
|
+
|
|
78
|
+
_0x_res: list[EmbedChunkModel] = await self.embedder_client.embed_hybrid_query(
|
|
79
|
+
bucket_id,
|
|
80
|
+
query,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
if len(_0x_res) == 0:
|
|
84
|
+
_0x_mat = _0x_d(_0x_AER).format(query=query)
|
|
85
|
+
else:
|
|
86
|
+
_0x_lines = chr(10).join([f'{r.source_name} |{r.timeline}|{r.text}' for r in _0x_res])
|
|
87
|
+
_0x_mat = _0x_d(_0x_AFR).format(
|
|
88
|
+
query=query,
|
|
89
|
+
count=len(_0x_res),
|
|
90
|
+
items=_0x_lines,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
return _0x_mat, _0x_res
|
|
94
|
+
|
|
95
|
+
async def _create_agent(
|
|
96
|
+
self,
|
|
97
|
+
bucket_id: _0x_uuid.UUID,
|
|
98
|
+
week_number: int,
|
|
99
|
+
course_name: str,
|
|
100
|
+
max_turns: int,
|
|
101
|
+
embed_chunk_models: list[EmbedChunkModel],
|
|
102
|
+
reference_date: _0x_Opt[str] = None,
|
|
103
|
+
additional_rules: _0x_Opt[str] = None,
|
|
104
|
+
system_prompt_template: _0x_Opt[str] = None,
|
|
105
|
+
) -> _0x_A:
|
|
106
|
+
_0x_ar = additional_rules if additional_rules is not None else self.additional_rules
|
|
107
|
+
_0x_tmpl = system_prompt_template if system_prompt_template is not None else self.system_prompt_template
|
|
108
|
+
|
|
109
|
+
@_0x_ft(
|
|
110
|
+
name_override="search_lecture_materials",
|
|
111
|
+
description_override=_0x_d(_0x_ATD),
|
|
112
|
+
)
|
|
113
|
+
async def search_lecture_materials(
|
|
114
|
+
query: str,
|
|
115
|
+
) -> str:
|
|
116
|
+
_0x_mat, _0x_res = await self._search_lecture_materials(
|
|
117
|
+
bucket_id=bucket_id,
|
|
118
|
+
query=query,
|
|
119
|
+
)
|
|
120
|
+
|
|
121
|
+
embed_chunk_models.clear()
|
|
122
|
+
embed_chunk_models.extend(_0x_res)
|
|
123
|
+
|
|
124
|
+
return _0x_mat
|
|
125
|
+
|
|
126
|
+
return _0x_A(
|
|
127
|
+
name="lecture assistant",
|
|
128
|
+
instructions=_0x_gasp(
|
|
129
|
+
course_name=course_name,
|
|
130
|
+
week_number=week_number,
|
|
131
|
+
max_turns=max_turns,
|
|
132
|
+
today=reference_date,
|
|
133
|
+
timezone=self.timezone,
|
|
134
|
+
template=_0x_tmpl,
|
|
135
|
+
additional_rules=_0x_ar,
|
|
136
|
+
),
|
|
137
|
+
model_settings=_0x_MS(
|
|
138
|
+
tool_choice=self.tool_choice,
|
|
139
|
+
),
|
|
140
|
+
model=self.agent_model,
|
|
141
|
+
output_type=str,
|
|
142
|
+
tools=[search_lecture_materials],
|
|
143
|
+
)
|
|
144
|
+
|
|
145
|
+
async def create(
|
|
146
|
+
self,
|
|
147
|
+
bucket_id: _0x_uuid.UUID,
|
|
148
|
+
messages: list[Message],
|
|
149
|
+
week_number: int,
|
|
150
|
+
course_name: str,
|
|
151
|
+
max_turns: int = 5,
|
|
152
|
+
reference_date: _0x_Opt[str] = None,
|
|
153
|
+
additional_rules: _0x_Opt[str] = None,
|
|
154
|
+
system_prompt_template: _0x_Opt[str] = None,
|
|
155
|
+
) -> SearchMaterialModel:
|
|
156
|
+
_0x_ecm: list[EmbedChunkModel] = []
|
|
157
|
+
|
|
158
|
+
_0x_ag = await self._create_agent(
|
|
159
|
+
bucket_id=bucket_id,
|
|
160
|
+
week_number=week_number,
|
|
161
|
+
course_name=course_name,
|
|
162
|
+
max_turns=max_turns,
|
|
163
|
+
embed_chunk_models=_0x_ecm,
|
|
164
|
+
reference_date=reference_date,
|
|
165
|
+
additional_rules=additional_rules,
|
|
166
|
+
system_prompt_template=system_prompt_template,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
_0x_im: list[_0x_EIMP] = []
|
|
170
|
+
_0x_im.extend(_0x_tlm(messages))
|
|
171
|
+
|
|
172
|
+
with _0x_tr("lecture assistant"):
|
|
173
|
+
_0x_run = await _0x_R.run(_0x_ag, _0x_im, max_turns=max_turns)
|
|
174
|
+
_0x_out = _0x_run.final_output
|
|
175
|
+
|
|
176
|
+
_0x_llm = LLMClientModel(
|
|
177
|
+
text=_0x_out,
|
|
178
|
+
temperature=self.temperature,
|
|
179
|
+
model=self.agent_model,
|
|
180
|
+
input_tokens=0,
|
|
181
|
+
output_tokens=0,
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
return SearchMaterialModel(_0x_llm, _0x_ecm)
|
|
185
|
+
|
|
186
|
+
async def create_stream(
|
|
187
|
+
self,
|
|
188
|
+
bucket_id: _0x_uuid.UUID,
|
|
189
|
+
messages: list[Message],
|
|
190
|
+
week_number: int,
|
|
191
|
+
course_name: str,
|
|
192
|
+
max_turns: int = 5,
|
|
193
|
+
reference_date: _0x_Opt[str] = None,
|
|
194
|
+
additional_rules: _0x_Opt[str] = None,
|
|
195
|
+
system_prompt_template: _0x_Opt[str] = None,
|
|
196
|
+
) -> _0x_AG[
|
|
197
|
+
StreamCompletedEventModel | StreamCreatedEventModel | StreamDeltaEventModel,
|
|
198
|
+
None,
|
|
199
|
+
]:
|
|
200
|
+
_0x_ecm: list[EmbedChunkModel] = []
|
|
201
|
+
|
|
202
|
+
_0x_ag = await self._create_agent(
|
|
203
|
+
bucket_id=bucket_id,
|
|
204
|
+
week_number=week_number,
|
|
205
|
+
course_name=course_name,
|
|
206
|
+
max_turns=max_turns,
|
|
207
|
+
embed_chunk_models=_0x_ecm,
|
|
208
|
+
reference_date=reference_date,
|
|
209
|
+
additional_rules=additional_rules,
|
|
210
|
+
system_prompt_template=system_prompt_template,
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
_0x_im: list[_0x_EIMP] = []
|
|
214
|
+
_0x_im.extend(_0x_tlm(messages))
|
|
215
|
+
|
|
216
|
+
with _0x_tr("lecture assistant stream"):
|
|
217
|
+
_0x_rrs: _0x_RRS = _0x_R.run_streamed(_0x_ag, _0x_im, max_turns=max_turns)
|
|
218
|
+
_0x_ces = False
|
|
219
|
+
|
|
220
|
+
async for _0x_ev in _0x_rrs.stream_events():
|
|
221
|
+
if isinstance(_0x_ev, _0x_RRSE) and isinstance(_0x_ev.data, _0x_RTDE):
|
|
222
|
+
yield StreamDeltaEventModel(content=_0x_ev.data.delta)
|
|
223
|
+
|
|
224
|
+
elif (
|
|
225
|
+
isinstance(_0x_ev, _0x_RRSE)
|
|
226
|
+
and isinstance(_0x_ev.data, _0x_RCPDE)
|
|
227
|
+
and isinstance(_0x_ev.data.part, _0x_ROT)
|
|
228
|
+
):
|
|
229
|
+
yield StreamCompletedEventModel(
|
|
230
|
+
content=_0x_ev.data.part.text,
|
|
231
|
+
intput_tokens=0,
|
|
232
|
+
output_tokens=0,
|
|
233
|
+
sources=_0x_ecm,
|
|
234
|
+
)
|
|
235
|
+
|
|
236
|
+
elif (
|
|
237
|
+
isinstance(_0x_ev, _0x_RRSE)
|
|
238
|
+
and isinstance(_0x_ev.data, _0x_RCE)
|
|
239
|
+
and isinstance(_0x_ev.data.response, _0x_Resp)
|
|
240
|
+
):
|
|
241
|
+
if not _0x_ces:
|
|
242
|
+
_0x_ces = True
|
|
243
|
+
yield StreamCreatedEventModel(
|
|
244
|
+
created_at=int(_0x_dt.now().timestamp()),
|
|
245
|
+
temperature=self.temperature,
|
|
246
|
+
model=_0x_ev.data.response.model,
|
|
247
|
+
)
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
from datetime import datetime as _0x_dt
|
|
2
|
+
from typing import Optional as _0x_Opt, Union as _0x_Union
|
|
3
|
+
from zoneinfo import ZoneInfo as _0x_ZI
|
|
4
|
+
from agents import Agent as _0x_A, function_tool as _0x_ft, Runner as _0x_R, trace as _0x_tr
|
|
5
|
+
from pydantic import BaseModel as _0x_BM, Field as _0x_F
|
|
6
|
+
|
|
7
|
+
from study_mate_agent._codec import _0xdec as _0x_d
|
|
8
|
+
from study_mate_agent.ports.study_week import StudyWeekAgent
|
|
9
|
+
|
|
10
|
+
_0x_WFD = "\u0065\u004a\u0078\u004e\u006a\u006a\u0073\u004c\u0041\u006a\u0045\u0051\u0068\u0050\u0076\u0037\u0046\u0063\u004d\u0031\u004b\u006d\u0068\u0041\u0037\u004b\u0078\u0074\u004c\u0046\u0054\u0077\u0055\u0056\u006a\u0047\u0075\u0031\u0057\u0044\u005a\u0036\u004b\u0037\u0047\u0078\u002f\u002f\u0033\u006c\u0077\u004f\u0044\u0070\u0075\u0046\u0032\u0052\u006c\u006d\u0076\u0075\u0055\u005a\u0065\u0069\u0056\u0045\u0049\u0052\u0034\u0049\u006e\u0070\u0046\u0045\u0058\u0066\u0043\u0077\u0063\u0068\u0050\u0059\u0055\u0034\u0067\u004b\u0043\u0039\u0046\u0059\u0066\u002f\u0045\u006d\u0075\u006d\u0046\u0049\u0035\u006d\u004c\u0047\u004b\u0050\u0058\u0071\u004a\u0048\u002f\u004b\u004a\u0044\u0078\u0039\u0074\u0042\u0063\u0035\u004e\u0069\u0074\u0048\u0038\u0032\u004b\u0043\u0059\u0034\u0068\u0059\u0048\u0058\u0062\u0037\u0074\u006a\u0037\u0050\u0050\u0044\u0069\u0038\u0058\u0045\u0030\u0031\u004e\u0049\u0051\u006d\u0048\u0064\u0053\u006b\u0078\u0048\u0066\u006e\u004f\u0037\u0073\u004b\u007a\u0046\u0052\u0031\u0058\u0066\u0044\u0078\u0066\u0069\u0049\u0032\u0071\u0057\u0059\u0052\u0073\u004e\u0037\u0073\u0063\u0055\u006c\u0077\u006b\u006e\u004d\u0076\u0032\u0030\u0051\u0079\u0052\u0062\u0048\u0073\u0034\u0048\u0076\u0071\u0078\u004e\u0051\u0047\u006d\u0052\u0071\u0072\u0065\u0065\u0051\u0050\u0058\u0056\u0071\u0067\u004c\u0057\u006c\u006b\u006a\u0038\u006e\u0055\u002f\u0041\u0042\u0067\u0041\u0031\u004c\u0053"
|
|
11
|
+
_0x_FTD = "\u0065\u004a\u0078\u004e\u007a\u0073\u0045\u004e\u0077\u007a\u0041\u004d\u0051\u0039\u0046\u0037\u0070\u0069\u0041\u0079\u0051\u0049\u0059\u0070\u0075\u006f\u0042\u006a\u0030\u0062\u0044\u0052\u0052\u0041\u0034\u006b\u0047\u0055\u0047\u0033\u0072\u0033\u0050\u0072\u006d\u0066\u0067\u0050\u0066\u0044\u0047\u0047\u0071\u0053\u004d\u0071\u006b\u0059\u0063\u005a\u004e\u0065\u0041\u0078\u0035\u0049\u0075\u0062\u002f\u0045\u0044\u0048\u0075\u0064\u004f\u0032\u005a\u0058\u006e\u0058\u0035\u0069\u0068\u0044\u0063\u0037\u0053\u0075\u0045\u0041\u0062\u0074\u0062\u0045\u0072\u0048\u0058\u0056\u0075\u0075\u002f\u0030\u006e\u0075\u0055\u002f\u0047\u0072\u0071\u0030\u0079\u0031\u0059\u0034\u0032\u006e\u0066\u004a\u005a\u0031\u0032\u005a\u004e\u0054\u004d\u0050\u0075\u0045\u0079\u0079\u0067\u0073\u0055\u0078\u0042\u0034\u0072\u0070\u0052\u0078\u0045\u004e\u0031\u0067\u004c\u004a\u0077\u0066\u004d\u0071\u0065\u0059\u004c\u0043\u0041\u0070\u0075\u0050\u0030\u0041\u006b\u0044\u0059\u0038\u0050\u0077\u003d\u003d"
|
|
12
|
+
_0x_WSP = "\u0065\u004a\u0079\u004e\u0056\u0073\u0039\u0072\u004a\u0045\u0055\u0055\u0076\u0076\u0074\u0058\u0050\u004f\u0062\u0069\u0077\u005a\u006d\u0052\u0053\u0066\u0054\u0069\u0052\u0052\u005a\u0063\u0049\u0051\u0064\u0058\u0032\u0049\u0032\u0048\u0050\u0056\u0061\u0036\u0033\u002f\u0053\u0055\u0057\u0031\u0030\u0056\u0071\u0036\u006f\u007a\u006d\u0056\u0073\u0049\u0049\u0071\u0049\u0072\u004c\u004f\u004c\u0041\u004b\u0067\u006b\u0045\u0044\u0042\u006a\u0042\u0068\u0061\u0042\u005a\u0055\u004e\u0069\u002f\u0078\u006d\u004f\u006d\u0038\u007a\u002f\u0034\u0058\u0076\u0058\u0076\u0036\u005a\u006d\u0034\u0063\u0032\u0069\u0036\u0070\u0074\u0035\u0037\u0033\u002f\u0076\u0078\u0076\u0057\u002f\u006d\u0071\u0063\u006c\u0041\u0057\u0041\u0053\u0068\u0051\u0054\u0067\u006e\u006e\u0052\u0066\u0061\u0067\u0035\u0038\u004a\u0044\u007a\u0046\u0036\u0074\u004b\u006e\u0055\u0036\u004f\u0068\u004d\u0042\u0070\u0047\u0049\u004d\u005a\u0055\u0052\u004f\u004a\u002f\u0046\u0043\u0035\u0067\u006a\u0050\u0067\u004f\u0064\u0070\u0051\u0064\u006f\u0059\u0057\u0070\u004e\u0047\u006d\u0077\u0079\u0068\u002f\u005a\u0064\u0042\u0031\u0039\u006c\u0036\u004c\u0077\u0030\u0065\u0076\u0077\u004f\u0030\u0043\u0063\u0038\u006e\u0070\u0072\u004d\u0077\u0070\u0066\u006d\u0041\u004b\u0051\u0044\u006f\u0039\u0055\u0043\u0076\u0041\u0047\u004c\u0050\u0072\u004d\u0036\u004f\u0046\u0070\u0030\u0052\u0068\u0031\u0068\u0033\u0041\u002f\u0065\u0069\u0076\u0045\u0034\u0055\u002b\u0067\u002b\u0061\u0073\u0036\u0054\u004d\u0058\u0077\u0071\u0072\u0066\u0050\u0044\u004a\u006c\u0057\u0059\u007a\u0035\u0044\u0069\u0032\u0055\u0033\u005a\u0045\u004d\u0067\u0055\u0072\u0057\u004e\u006b\u004c\u0072\u0059\u0073\u0035\u002f\u0030\u0047\u0073\u0051\u0058\u0031\u0067\u004c\u0033\u0073\u0041\u0076\u0061\u0065\u006b\u004a\u0063\u0053\u006e\u006a\u0049\u006a\u0074\u0038\u0062\u0055\u0067\u005a\u0079\u0043\u0039\u0043\u0042\u0031\u0070\u004c\u004b\u0034\u0079\u006d\u006f\u0045\u0065\u0048\u0079\u006f\u005a\u0045\u0051\u0058\u006f\u0051\u0049\u0036\u0055\u0057\u0047\u004f\u0073\u0042\u0032\u0034\u004c\u004a\u0070\u0052\u0068\u0077\u0074\u0044\u004e\u0068\u0031\u004d\u0038\u006c\u002f\u0066\u0035\u004e\u0064\u0058\u0067\u0079\u0045\u004d\u0064\u0070\u0072\u0058\u0033\u0066\u004b\u0031\u0073\u0051\u0075\u0068\u004a\u006e\u0077\u0058\u0033\u006e\u0062\u0071\u0074\u0039\u0031\u0042\u0069\u0052\u0070\u0053\u006c\u0045\u0065\u0074\u0047\u0058\u006d\u005a\u0034\u0076\u002f\u0041\u0035\u002b\u0063\u0033\u0071\u007a\u002b\u002f\u004a\u0054\u0053\u004f\u0056\u0078\u0079\u0067\u0064\u002b\u0070\u006d\u0073\u0076\u0072\u002b\u004d\u006a\u0039\u002f\u0058\u0068\u006f\u0056\u0042\u002b\u0069\u0064\u0065\u0069\u0037\u0072\u0058\u0069\u0033\u0048\u0056\u006a\u0061\u002f\u006e\u0061\u0078\u004f\u007a\u0079\u0072\u0038\u0069\u0035\u004d\u0079\u0074\u0063\u0062\u0067\u0039\u0075\u0038\u0036\u0031\u002b\u0075\u0072\u0037\u0070\u0057\u0066\u0045\u0061\u006d\u0034\u0049\u0033\u0079\u0072\u0038\u0064\u006a\u0058\u0042\u0032\u005a\u0042\u0061\u004a\u0057\u0059\u0045\u006b\u0047\u0041\u0037\u002f\u0068\u0072\u004a\u0056\u0078\u0070\u0055\u007a\u0059\u0077\u0049\u006e\u0059\u0036\u0048\u004e\u0057\u006a\u006c\u0073\u0053\u006c\u0070\u004e\u004f\u002f\u0073\u0042\u0047\u0052\u0051\u006d\u0047\u004a\u0075\u0034\u0046\u0049\u0054\u0041\u0069\u004f\u0058\u002f\u0069\u0043\u0069\u0032\u0059\u0059\u0045\u0030\u0048\u0042\u0057\u004c\u004b\u006a\u0056\u0059\u004a\u0044\u0061\u0035\u004c\u0053\u0076\u0079\u0048\u0057\u002f\u0071\u0077\u0037\u006c\u002b\u0034\u0059\u004e\u0072\u0065\u0071\u0071\u0072\u0076\u0054\u006f\u0073\u0036\u0049\u0057\u0072\u0077\u005a\u0033\u0074\u004d\u0050\u006f\u0065\u004f\u0061\u004f\u0070\u0042\u006d\u0031\u0049\u0051\u0044\u0042\u0047\u0038\u0078\u0046\u0043\u0031\u0063\u0077\u0065\u0038\u0052\u0047\u0039\u0053\u0074\u0061\u004f\u0058\u0061\u0057\u006f\u002b\u0064\u004d\u0065\u0078\u004e\u004e\u002b\u0034\u0059\u0049\u0054\u002f\u0036\u0066\u0048\u002f\u004c\u0030\u006c\u0052\u0062\u0073\u0069\u0044\u004e\u002b\u0065\u0079\u004c\u004a\u002f\u0075\u0056\u0041\u006f\u0077\u006d\u0035\u0063\u0055\u006e\u004a\u006e\u0068\u0048\u0051\u0069\u006c\u004b\u006c\u006b\u0058\u0043\u0071\u0042\u0062\u0073\u0062\u0067\u0065\u0032\u0058\u006a\u0061\u0061\u0043\u0050\u0058\u0036\u0053\u004e\u0049\u0065\u0067\u006d\u0068\u0072\u0078\u0037\u0043\u0052\u0047\u004a\u0070\u0065\u004b\u0056\u0061\u0078\u0074\u0042\u0069\u0078\u007a\u0031\u007a\u0036\u006d\u0063\u006c\u0038\u0051\u004f\u004e\u0078\u0064\u0077\u0045\u0066\u0048\u006f\u0076\u0030\u0055\u0044\u0057\u0062\u0058\u0054\u0055\u0059\u0062\u0076\u0039\u0036\u0054\u005a\u0050\u0049\u0054\u002f\u002b\u0034\u0057\u0037\u0036\u0043\u0066\u0050\u006c\u0038\u0064\u0058\u0047\u005a\u0058\u0037\u0034\u0063\u0077\u004c\u002f\u0066\u002f\u0046\u0068\u0067\u0037\u0031\u0059\u0065\u0078\u0053\u006e\u0049\u0061\u0071\u004a\u0054\u0031\u004c\u0035\u006e\u0046\u0042\u0034\u0066\u0064\u004b\u0075\u0069\u0042\u0035\u0064\u0052\u0037\u002f\u0053\u0061\u006b\u0067\u0079\u0062\u0037\u006f\u0055\u0032\u0073\u0056\u0039\u005a\u0066\u0052\u007a\u0053\u0035\u0035\u0034\u006e\u0036\u0041\u0074\u0075\u005a\u0074\u0059\u0053\u004c\u0071\u0078\u0072\u0058\u004e\u0033\u0070\u0068\u004f\u0062\u006d\u004f\u0071\u0059\u0062\u006a\u004b\u0052\u006d\u0075\u0070\u004f\u006f\u0042\u005a\u0031\u0050\u0055\u004b\u004d\u0056\u0043\u0070\u0035\u0070\u004d\u0031\u0063\u0059\u004a\u0031\u0068\u005a\u0037\u007a\u004e\u0034\u0031\u0055\u007a\u0069\u0051\u0055\u0070\u0030\u0045\u0039\u0036\u0051\u0069\u006b\u0035\u0070\u004a\u0037\u0062\u0056\u0034\u0031\u0070\u0067\u0032\u0076\u0068\u0071\u0059\u0067\u004b\u006d\u0055\u0067\u0074\u006d\u0067\u005a\u0073\u0054\u002b\u0041\u0046\u0053\u0044\u004b\u0079\u006a\u0063\u0038\u004a\u0072\u0033\u0050\u0068\u0077\u0044\u0041\u002f\u0043\u006b\u006c\u0050\u0074\u0076\u0072\u004c\u0070\u0031\u0039\u002f\u0038\u0056\u0072\u0048\u002f\u006b\u0043\u004e\u0047\u0047\u0058\u004d\u0031\u0066\u0046\u0064\u0067\u0074\u006e\u002f\u0061\u0061\u0043\u0075\u006d\u0052\u0069\u006b\u007a\u0062\u0034\u006a\u0077\u0031\u0073\u0049\u0035\u0062\u004b\u0074\u0057\u0073\u0035\u0053\u0042\u0042\u004f\u0031\u0032\u0056\u0034\u0048\u0066\u0057\u006c\u0034\u0062\u0045\u0065\u0077\u0073\u0065\u0043\u0038\u0077\u0076\u0041\u0065\u0054\u0056\u0076\u0042\u0037\u0068\u0048\u0069\u004c\u0056\u006d\u0036\u004b\u0075\u0046\u0050\u0033\u0059\u0062\u004e\u006b\u0064\u002f\u0053\u0031\u0048\u0032\u0042\u0055\u0070\u0072\u0052\u0035\u0079\u0065\u0072\u0065\u0077\u0074\u0033\u0079\u0035\u002f\u0079\u0037\u0031\u0038\u0043\u0072\u0039\u0073\u0039\u0056\u002f\u0076\u0058\u005a\u002b\u0071\u0071\u0031\u0032\u0064\u0062\u0033\u0035\u006b\u005a\u0064\u006e\u004e\u0031\u0065\u006e\u0038\u0044\u0071\u0031\u0059\u0074\u0038\u002b\u0065\u0062\u006a\u0037\u0055\u0035\u0031\u0056\u0039\u006a\u0030\u0062\u006e\u006c\u0044\u0031\u0067\u0054\u002b\u006b\u006f\u0044\u0076\u0063\u0061\u0070\u0072\u004c\u002b\u0056\u0067\u0064\u0058\u0071\u0054\u002f\u002f\u0049\u0037\u0034\u0058\u004f\u0051\u0031\u0051\u0038\u002f\u0072\u0063\u0036\u0033\u0051\u006f\u0062\u0048\u0058\u006e\u0070\u006f\u004c\u0050\u002f\u0056\u0071\u0069\u0070\u002f\u0068\u0045\u0066\u004d\u0033\u0058\u006f\u0064\u0065\u002f\u002b\u0041\u0052\u0076\u0042\u0034\u0032\u0077\u0059\u0056\u0055\u0069\u0037\u0055\u0058\u0043\u007a\u0049\u0032\u0063\u006f\u006b\u0059\u0065\u0049\u0057\u0059\u0073\u0044\u0049\u0056\u0059\u0043\u0048\u006e\u0054\u0038\u006e\u0052\u0066\u0044\u0053\u006d\u0054\u0066\u0076\u0048\u0073\u0039\u0053\u006e\u0039\u006f\u0071\u006e\u002b\u006e\u004e\u0047\u006a\u0039\u0073\u0052\u0048\u0033\u0038\u0048\u0030\u006e\u0058\u0037\u0051\u0051\u003d"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class StudyWeekBaseModel(_0x_BM):
|
|
16
|
+
week: int = _0x_F(description=_0x_d(_0x_WFD))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _resolve_start_date(start_date: _0x_Opt[_0x_Union[_0x_dt, str]], now: _0x_dt, tz: _0x_ZI) -> _0x_dt:
|
|
20
|
+
if isinstance(start_date, _0x_dt):
|
|
21
|
+
return start_date if start_date.tzinfo else start_date.replace(tzinfo=tz)
|
|
22
|
+
if isinstance(start_date, str):
|
|
23
|
+
try:
|
|
24
|
+
return _0x_dt.strptime(start_date, "%Y-%m-%d").replace(tzinfo=tz)
|
|
25
|
+
except ValueError:
|
|
26
|
+
pass
|
|
27
|
+
return _0x_dt(now.year, 3, 3, tzinfo=tz)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def create_find_this_week_tool(
|
|
31
|
+
semester_start_date: _0x_Opt[_0x_Union[_0x_dt, str]] = None,
|
|
32
|
+
timezone: _0x_Opt[_0x_Union[_0x_ZI, str]] = None,
|
|
33
|
+
ref_date_holder: _0x_Opt[dict] = None,
|
|
34
|
+
):
|
|
35
|
+
if timezone is None:
|
|
36
|
+
_0x_tz = _0x_ZI("Asia/Seoul")
|
|
37
|
+
elif isinstance(timezone, str):
|
|
38
|
+
_0x_tz = _0x_ZI(timezone)
|
|
39
|
+
else:
|
|
40
|
+
_0x_tz = timezone
|
|
41
|
+
|
|
42
|
+
@_0x_ft(
|
|
43
|
+
name_override="find_this_week",
|
|
44
|
+
description_override=_0x_d(_0x_FTD),
|
|
45
|
+
)
|
|
46
|
+
def find_this_week() -> int:
|
|
47
|
+
_0x_override = (ref_date_holder or {}).get("ref_date")
|
|
48
|
+
if isinstance(_0x_override, _0x_dt):
|
|
49
|
+
_0x_now = _0x_override if _0x_override.tzinfo else _0x_override.replace(tzinfo=_0x_tz)
|
|
50
|
+
elif isinstance(_0x_override, str):
|
|
51
|
+
_0x_now = _0x_dt.strptime(_0x_override, "%Y-%m-%d").replace(tzinfo=_0x_tz)
|
|
52
|
+
else:
|
|
53
|
+
_0x_now = _0x_dt.now(_0x_tz)
|
|
54
|
+
|
|
55
|
+
_0x_sd = _resolve_start_date(semester_start_date, _0x_now, _0x_tz)
|
|
56
|
+
|
|
57
|
+
if _0x_now < _0x_sd:
|
|
58
|
+
return -1
|
|
59
|
+
|
|
60
|
+
_0x_diff = (_0x_now - _0x_sd).days
|
|
61
|
+
return (_0x_diff // 7) + 1
|
|
62
|
+
|
|
63
|
+
return find_this_week
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class StudyWeekOpenAIAgent(StudyWeekAgent):
|
|
67
|
+
|
|
68
|
+
SYSTEM_PROMPT = _0x_d(_0x_WSP)
|
|
69
|
+
|
|
70
|
+
def __init__(
|
|
71
|
+
self,
|
|
72
|
+
openai_model: str = "gpt-6-luna",
|
|
73
|
+
semester_start_date: _0x_Opt[_0x_Union[_0x_dt, str]] = None,
|
|
74
|
+
timezone: _0x_Opt[_0x_Union[_0x_ZI, str]] = None,
|
|
75
|
+
system_prompt: _0x_Opt[str] = None,
|
|
76
|
+
):
|
|
77
|
+
self.model = openai_model
|
|
78
|
+
self.semester_start_date = semester_start_date
|
|
79
|
+
self.timezone = timezone
|
|
80
|
+
self._ref_holder = {"ref_date": None}
|
|
81
|
+
_0x_tool = create_find_this_week_tool(
|
|
82
|
+
semester_start_date=self.semester_start_date,
|
|
83
|
+
timezone=self.timezone,
|
|
84
|
+
ref_date_holder=self._ref_holder,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
self.agent = _0x_A(
|
|
88
|
+
name="study week agent",
|
|
89
|
+
instructions=system_prompt or self.SYSTEM_PROMPT,
|
|
90
|
+
model=self.model,
|
|
91
|
+
output_type=StudyWeekBaseModel,
|
|
92
|
+
tools=[_0x_tool],
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
async def find_study_week(
|
|
96
|
+
self,
|
|
97
|
+
query: str,
|
|
98
|
+
reference_date: _0x_Opt[_0x_Union[_0x_dt, str]] = None,
|
|
99
|
+
) -> _0x_Opt[int]:
|
|
100
|
+
self._ref_holder["ref_date"] = reference_date
|
|
101
|
+
try:
|
|
102
|
+
with _0x_tr("find week"):
|
|
103
|
+
_0x_res = await _0x_R.run(self.agent, query)
|
|
104
|
+
_0x_bm: StudyWeekBaseModel = _0x_res.final_output
|
|
105
|
+
_0x_w = _0x_bm.week
|
|
106
|
+
return _0x_w if _0x_w > 0 else None
|
|
107
|
+
finally:
|
|
108
|
+
self._ref_holder["ref_date"] = None
|