Spaces:
Sleeping
Sleeping
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
|