WilliamGazeley commited on
Commit
bbded71
1 Parent(s): 3651997

Fix threading issue

Browse files
src/app.py CHANGED
@@ -35,7 +35,7 @@ def question_node(state: GraphState) -> Dict[str, str]:
35
  Generate a question for the function agent.
36
  """
37
  logger.info("Generating question for function agent")
38
- config.status.update(label=":question: Breaking down question")
39
  question = state["question"]
40
  logger.info(f"Original question: {question}")
41
  rephrased_question = agents["rephrase_agent"].invoke({"question": question})
@@ -49,7 +49,7 @@ def function_agent_node(state: GraphState) -> Literal["finished"]:
49
  logger.info("Calling function agent")
50
  question = state["rephrased_question"]
51
  response = agents["function_agent"].invoke({"input": question, "tools": tools_dict}).get("output")
52
- config.status.update(label=":brain: Analysing data..")
53
  logger.info(f"Function agent output: {response}")
54
  return {"function_agent_output": response}
55
 
@@ -58,7 +58,7 @@ def output_node(state: GraphState) -> Dict[str, str]:
58
  Generate the final output
59
  """
60
  logger.info("Generating output")
61
- config.status.update(label=":bulb: Preparing response..")
62
  generation = agents["output_agent"].invoke({"context": state["function_agent_output"],
63
  "question": state["rephrased_question"]})
64
  return {"generation": generation}
@@ -70,7 +70,7 @@ def route_question(state: GraphState) -> Literal["vectorstore", "websearch"]:
70
  Route quesition to web search or RAG
71
  """
72
  logger.info("Routing question")
73
- config.state.update(label=":chart_with_upwards_trend: Routing question")
74
  question = state["question"]
75
  logger.info(f"Question: {question}")
76
  source = agents["router_agent"].invoke({"question": question})
@@ -96,6 +96,12 @@ workflow.set_finish_point("output_node")
96
 
97
  flow = workflow.compile()
98
 
 
 
 
 
 
 
99
  def main():
100
  st.title("LLM-ADE 9B Demo")
101
 
@@ -105,8 +111,10 @@ def main():
105
  if input_text:
106
  with st.status("Generating response...") as status:
107
  config.status = status
 
108
  for output in flow.stream({"question": input_text}):
109
  for key, value in output.items():
 
110
  pprint(f"Finished running: {key}")
111
  st.write(value["generation"])
112
  config.status.update(label="Finished!", state="complete", expanded=True)
 
35
  Generate a question for the function agent.
36
  """
37
  logger.info("Generating question for function agent")
38
+ # config.status.update(label=":question: Breaking down question")
39
  question = state["question"]
40
  logger.info(f"Original question: {question}")
41
  rephrased_question = agents["rephrase_agent"].invoke({"question": question})
 
49
  logger.info("Calling function agent")
50
  question = state["rephrased_question"]
51
  response = agents["function_agent"].invoke({"input": question, "tools": tools_dict}).get("output")
52
+ # config.status.update(label=":brain: Analysing data..")
53
  logger.info(f"Function agent output: {response}")
54
  return {"function_agent_output": response}
55
 
 
58
  Generate the final output
59
  """
60
  logger.info("Generating output")
61
+ # config.status.update(label=":bulb: Preparing response..")
62
  generation = agents["output_agent"].invoke({"context": state["function_agent_output"],
63
  "question": state["rephrased_question"]})
64
  return {"generation": generation}
 
70
  Route quesition to web search or RAG
71
  """
72
  logger.info("Routing question")
73
+ # config.state.update(label=":chart_with_upwards_trend: Routing question")
74
  question = state["question"]
75
  logger.info(f"Question: {question}")
76
  source = agents["router_agent"].invoke({"question": question})
 
96
 
97
  flow = workflow.compile()
98
 
99
+ progress_map = {
100
+ "question_rephrase": ":question: Breaking down question",
101
+ "function_agent": ":mag: Collecting data",
102
+ "output_node": ":bulb: Preparing response",
103
+ }
104
+
105
  def main():
106
  st.title("LLM-ADE 9B Demo")
107
 
 
111
  if input_text:
112
  with st.status("Generating response...") as status:
113
  config.status = status
114
+ config.status.update(label=":brain: Thinking")
115
  for output in flow.stream({"question": input_text}):
116
  for key, value in output.items():
117
+ config.status.update(label=progress_map[key])
118
  pprint(f"Finished running: {key}")
119
  st.write(value["generation"])
120
  config.status.update(label="Finished!", state="complete", expanded=True)
src/functioncall.py CHANGED
@@ -54,7 +54,7 @@ class ModelInference:
54
  raise ValueError("Assistant message is None")
55
 
56
  def execute_function_call(self, tool_call):
57
- config.status.update(label=":mag: Gathering information..")
58
  function_name = tool_call.get("name")
59
  function_to_call = getattr(functions, function_name, None)
60
  function_args = tool_call.get("arguments", {})
@@ -81,7 +81,7 @@ class ModelInference:
81
  chat = [{"role": "user", "content": user_message}]
82
  tools = functions.get_openai_tools()
83
  prompt = self.prompter.generate_prompt(chat, tools, num_fewshot)
84
- config.status.update(label=":brain: Thinking..")
85
  completion = self.run_inference(prompt)
86
 
87
  def recursive_loop(prompt, completion, depth):
@@ -115,7 +115,7 @@ class ModelInference:
115
  completion = self.run_inference(prompt)
116
  return completion
117
 
118
- config.status.update(label=":brain: Analysing information..")
119
  completion = self.run_inference(prompt)
120
  return recursive_loop(prompt, completion, depth)
121
  elif error_message:
 
54
  raise ValueError("Assistant message is None")
55
 
56
  def execute_function_call(self, tool_call):
57
+ # config.status.update(label=":mag: Gathering information..")
58
  function_name = tool_call.get("name")
59
  function_to_call = getattr(functions, function_name, None)
60
  function_args = tool_call.get("arguments", {})
 
81
  chat = [{"role": "user", "content": user_message}]
82
  tools = functions.get_openai_tools()
83
  prompt = self.prompter.generate_prompt(chat, tools, num_fewshot)
84
+ # config.status.update(label=":brain: Thinking..")
85
  completion = self.run_inference(prompt)
86
 
87
  def recursive_loop(prompt, completion, depth):
 
115
  completion = self.run_inference(prompt)
116
  return completion
117
 
118
+ # config.status.update(label=":brain: Analysing information..")
119
  completion = self.run_inference(prompt)
120
  return recursive_loop(prompt, completion, depth)
121
  elif error_message:
src/functions.py CHANGED
@@ -113,7 +113,7 @@ def get_current_stock_price(symbol: str) -> float:
113
  float: The current stock price, or None if an error occurs.
114
  """
115
  try:
116
- config.status.update(label=":chart_with_upwards_trend: Getting price")
117
  stock = yf.Ticker(symbol)
118
  # Use "regularMarketPrice" for regular market hours, or "currentPrice" for pre/post market
119
  current_price = stock.info.get("regularMarketPrice", stock.info.get("currentPrice"))
@@ -199,7 +199,7 @@ def get_key_financial_ratios(symbol: str) -> dict:
199
  dict: Dictionary containing key financial ratios.
200
  """
201
  try:
202
- config.status.update(label=":chart_with_upwards_trend: Gathering financial data")
203
  stock = yf.Ticker(symbol)
204
  key_ratios = stock.info
205
  return key_ratios
@@ -238,7 +238,7 @@ def get_company_news(symbol: str) -> pd.DataFrame:
238
  Returns:
239
  pd.DataFrame: DataFrame containing company news and press releases.
240
  """
241
- config.status.update(label=":newspaper: Getting news")
242
  try:
243
  news = yf.Ticker(symbol).news
244
  return news
 
113
  float: The current stock price, or None if an error occurs.
114
  """
115
  try:
116
+ # config.status.update(label=":chart_with_upwards_trend: Getting price")
117
  stock = yf.Ticker(symbol)
118
  # Use "regularMarketPrice" for regular market hours, or "currentPrice" for pre/post market
119
  current_price = stock.info.get("regularMarketPrice", stock.info.get("currentPrice"))
 
199
  dict: Dictionary containing key financial ratios.
200
  """
201
  try:
202
+ # config.status.update(label=":chart_with_upwards_trend: Gathering financial data")
203
  stock = yf.Ticker(symbol)
204
  key_ratios = stock.info
205
  return key_ratios
 
238
  Returns:
239
  pd.DataFrame: DataFrame containing company news and press releases.
240
  """
241
+ # config.status.update(label=":newspaper: Getting news")
242
  try:
243
  news = yf.Ticker(symbol).news
244
  return news
src/prompts/output_agent_template.yaml CHANGED
@@ -22,6 +22,7 @@ Do not be formal, answer as you would in a conversation with a friend.
22
  Keep your response short unless the question requires a longer response.
23
  #Audience:
24
  You are talking to a high net worth individual with high risk tolerance and lots of investing experience - they do not need traditional, generic financial advice.
 
25
  \n ------- \n
26
  Your thoughts are as follows:
27
  {context}
 
22
  Keep your response short unless the question requires a longer response.
23
  #Audience:
24
  You are talking to a high net worth individual with high risk tolerance and lots of investing experience - they do not need traditional, generic financial advice.
25
+ Address the user directly.
26
  \n ------- \n
27
  Your thoughts are as follows:
28
  {context}