-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchat_responses.py
More file actions
102 lines (76 loc) · 3.51 KB
/
Copy pathchat_responses.py
File metadata and controls
102 lines (76 loc) · 3.51 KB
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
__import__('pysqlite3')
import sys
sys.modules['sqlite3'] = sys.modules.pop('pysqlite3')
from langchain_anthropic import ChatAnthropic
from langchain_core.prompts import ChatPromptTemplate
import os
import streamlit as st
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
from langgraph.checkpoint.memory import InMemorySaver
from tools import get_tools
class LMMentorBot:
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
def __init__(self):
print("Starting Tara Assisstant -----------------------------------###")
os.environ["LANGCHAIN_TRACING_V2"] = "false"
os.environ["TAVILY_API_KEY"] = st.secrets["TAVILY_KEY"]
os.environ["OPENAI_API_KEY"] = st.secrets["OPENAI_KEY"]
os.environ["ANTHROPIC_API_KEY"] = st.secrets["ANTHROPIC_KEY"]
print("Initializing LLM")
with open("prompts/audit_summary_prompt.txt", "r") as f:
audit_summary_prompt = f.read()
with open("prompts/tara_prompt.txt", "r") as f:
tara_prompt = f.read()
audit_summary_template = ChatPromptTemplate.from_template(audit_summary_prompt)
audit_summary_llm = ChatAnthropic(temperature=0.7, model="claude-3-5-sonnet-20240620", api_key=st.secrets["ANTHROPIC_KEY"])
self.audit_summary_chain = audit_summary_template | audit_summary_llm
checkpointer = InMemorySaver()
self.llm = init_chat_model(
model="google_genai:gemini-2.5-flash",
temperature=0.7,
)
self.agent = create_react_agent(
model=self.llm,
tools=get_tools(),
prompt= tara_prompt,
checkpointer=checkpointer,
)
self.config = {"configurable": {"thread_id": "1"}}
def upload_degree_audit(self, text: str):
print("Uploading degree audit")
audit_summary = self.audit_summary_chain.invoke({"audit": text})
print("Finished summarizing audit")
print("Audit summary: ", audit_summary.content)
for token, metadata in self.agent.stream(
{"messages": [{"role": "user", "content": audit_summary.content}]},
config=self.config,
stream_mode = "messages",
):
if metadata["langgraph_node"] == "agent":
yield token.content
elif metadata["langgraph_node"] == "tools":
if token.name == "get_rag_documents":
yield "Searching for relevant data... 🔍 \n\n"
else:
continue
def chat_stream(self, text: str):
print("Chatting with Tara")
for token, metadata in self.agent.stream(
{"messages": [{"role": "user", "content": text}]},
config=self.config,
stream_mode = "messages",
):
# if metadata["langgraph_node"] == "agent" and (text := step.text()):
# print(text, end="")
if metadata["langgraph_node"] == "agent":
yield token.content
elif metadata["langgraph_node"] == "tools":
if token.name == "get_rag_documents":
yield " 🔍 Searching for relevant data... \n\n"
elif token.name == "tavily_search":
yield " 🌐 Searching the web for relevant information... \n\n"
# print("Tool call to: ", token.name)
else:
continue