File size: 2,603 Bytes
c01955c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# ===================== IMPORTS =====================
import time
import sqlite3
from typing import List, Annotated, Optional

from pydantic import BaseModel

from langgraph.graph import StateGraph, START, END
# from langgraph.checkpoint.sqlite.aio import AsyncSqliteSaver
from langgraph.graph.message import add_messages

from langchain_aws import ChatBedrockConverse
from langchain.tools import tool
from langchain.messages import HumanMessage, AIMessage, SystemMessage
from langchain_core.messages import BaseMessage
from langchain_community.tools import DuckDuckGoSearchResults
from langchain_core.prompts import PromptTemplate
from pydantic import Field
from src.Agents.graphs.interview_graph_builder import load_conversation
from src.Agents.prompts import generateInterviewPerformance_prompts as GenerateInterviewPerformancePrompt
from src.Agents.llm.llm_loader import llm
from src.Agents.models.Performance_model import Performance
from src.Agents.prompts import interview_performance_prompt
from utils.asyncHandler import asyncHandler
from src.Agents.entity.artifact_entity import InterviewPerformanceArtifact
from src.Agents.entity.config_entity import InterviewPerformanceConfig
# ===================== SQLITE CHECKPOINTER =====================
# conn = sqlite3.connect("db.sqlite", check_same_thread=False)
# checkpointer = AsyncSqliteSaver(conn)

# ===================== LLM =====================



class InterviewPerformance:
    def __init__(self,interview_performance_config:InterviewPerformanceConfig):
        self.interview_performance_config=interview_performance_config
        self.llm_str=llm.with_structured_output(Performance)

    @asyncHandler
    async def get_performance(self,thread_id:str)->InterviewPerformanceArtifact:
        system_message=SystemMessage(content=interview_performance_prompt.format())

        conversations = await load_conversation(thread_id=thread_id)
        if not conversations:
            return None

        # Start with a human instruction message
        instruction = HumanMessage(
            content=GenerateInterviewPerformancePrompt.format()
        )

        # Combine messages
        messages_for_llm = [instruction] + conversations

        # Ensure last message is human
        if not messages_for_llm[-1].type == "human":
            messages_for_llm.append(HumanMessage(content="Please generate performance."))

        res = await self.llm_str.ainvoke(messages_for_llm)

        interview_performance_artifact=InterviewPerformanceArtifact(
            performance=res
        )
        return interview_performance_artifact