Update app.py
Browse files
app.py
CHANGED
@@ -9,11 +9,12 @@ from importlib.resources import files
|
|
9 |
from txagent import TxAgent
|
10 |
from tooluniverse import ToolUniverse
|
11 |
|
12 |
-
#
|
13 |
torch.serialization.add_safe_globals([
|
14 |
numpy.core.multiarray._reconstruct,
|
15 |
numpy.ndarray,
|
16 |
-
numpy.dtype
|
|
|
17 |
])
|
18 |
|
19 |
logging.basicConfig(
|
@@ -29,7 +30,7 @@ current_dir = os.path.dirname(os.path.abspath(__file__))
|
|
29 |
CONFIG = {
|
30 |
"model_name": "mims-harvard/TxAgent-T1-Llama-3.1-8B",
|
31 |
"rag_model_name": "mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B",
|
32 |
-
"embedding_filename": "ToolRAG-T1-GTE-Qwen2-1.
|
33 |
"tool_files": {
|
34 |
"opentarget": str(files('tooluniverse.data').joinpath('opentarget_tools.json')),
|
35 |
"fda_drug_label": str(files('tooluniverse.data').joinpath('fda_drug_labeling_tools.json')),
|
@@ -39,42 +40,15 @@ CONFIG = {
|
|
39 |
}
|
40 |
}
|
41 |
|
42 |
-
def
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
return None
|
52 |
-
|
53 |
-
def patch_embedding_loading():
|
54 |
-
from txagent.toolrag import ToolRAGModel
|
55 |
-
def patched_load(self, tooluniverse):
|
56 |
-
try:
|
57 |
-
if not os.path.exists(CONFIG["embedding_filename"]):
|
58 |
-
return False
|
59 |
-
self.tool_desc_embedding = safe_load_embeddings(CONFIG["embedding_filename"])
|
60 |
-
if self.tool_desc_embedding is None:
|
61 |
-
logger.error("Tool embedding file could not be loaded.")
|
62 |
-
return False
|
63 |
-
|
64 |
-
tools = tooluniverse.get_all_tools() if hasattr(tooluniverse, "get_all_tools") else getattr(tooluniverse, "tools", [])
|
65 |
-
if len(tools) != len(self.tool_desc_embedding):
|
66 |
-
logger.warning("Tool count mismatch.")
|
67 |
-
if len(self.tool_desc_embedding) > len(tools):
|
68 |
-
self.tool_desc_embedding = self.tool_desc_embedding[:len(tools)]
|
69 |
-
else:
|
70 |
-
padding = self.tool_desc_embedding[-1].unsqueeze(0).repeat(len(tools) - len(self.tool_desc_embedding), 1)
|
71 |
-
self.tool_desc_embedding = torch.cat([self.tool_desc_embedding, padding], dim=0)
|
72 |
-
return True
|
73 |
-
except Exception as e:
|
74 |
-
logger.error(f"Embedding load failed: {e}")
|
75 |
-
return False
|
76 |
-
|
77 |
-
ToolRAGModel.load_tool_desc_embedding = patched_load
|
78 |
|
79 |
def prepare_tool_files():
|
80 |
os.makedirs(os.path.join(current_dir, 'data'), exist_ok=True)
|
@@ -88,14 +62,8 @@ def prepare_tool_files():
|
|
88 |
logger.error(f"Tool generation failed: {e}")
|
89 |
|
90 |
def create_agent():
|
91 |
-
patch_embedding_loading()
|
92 |
prepare_tool_files()
|
93 |
try:
|
94 |
-
tu = ToolUniverse()
|
95 |
-
tools = tu.get_all_tools() if hasattr(tu, "get_all_tools") else getattr(tu, "tools", [])
|
96 |
-
available_tool_names = [t["name"] for t in tools]
|
97 |
-
additional_default_tools = [t for t in ["DirectResponse", "RequireClarification"] if t in available_tool_names]
|
98 |
-
|
99 |
agent = TxAgent(
|
100 |
CONFIG["model_name"],
|
101 |
CONFIG["rag_model_name"],
|
@@ -104,8 +72,10 @@ def create_agent():
|
|
104 |
enable_checker=True,
|
105 |
step_rag_num=10,
|
106 |
seed=42,
|
107 |
-
additional_default_tools=
|
108 |
)
|
|
|
|
|
109 |
agent.init_model()
|
110 |
return agent
|
111 |
except Exception as e:
|
@@ -114,8 +84,7 @@ def create_agent():
|
|
114 |
|
115 |
def respond(msg, chat_history, temperature, max_new_tokens, max_tokens, multi_agent, conversation, max_round):
|
116 |
if not isinstance(msg, str) or len(msg.strip()) <= 10:
|
117 |
-
chat_history
|
118 |
-
return chat_history
|
119 |
|
120 |
message = msg.strip()
|
121 |
chat_history.append({"role": "user", "content": message})
|
|
|
9 |
from txagent import TxAgent
|
10 |
from tooluniverse import ToolUniverse
|
11 |
|
12 |
+
# Allow loading old numpy types with torch.load
|
13 |
torch.serialization.add_safe_globals([
|
14 |
numpy.core.multiarray._reconstruct,
|
15 |
numpy.ndarray,
|
16 |
+
numpy.dtype,
|
17 |
+
numpy.dtypes.Float32DType
|
18 |
])
|
19 |
|
20 |
logging.basicConfig(
|
|
|
30 |
CONFIG = {
|
31 |
"model_name": "mims-harvard/TxAgent-T1-Llama-3.1-8B",
|
32 |
"rag_model_name": "mims-harvard/ToolRAG-T1-GTE-Qwen2-1.5B",
|
33 |
+
"embedding_filename": "ToolRAG-T1-GTE-Qwen2-1.5Btool_embedding.pt",
|
34 |
"tool_files": {
|
35 |
"opentarget": str(files('tooluniverse.data').joinpath('opentarget_tools.json')),
|
36 |
"fda_drug_label": str(files('tooluniverse.data').joinpath('fda_drug_labeling_tools.json')),
|
|
|
40 |
}
|
41 |
}
|
42 |
|
43 |
+
def generate_tool_embeddings(agent):
|
44 |
+
tu = ToolUniverse(tool_files=CONFIG["tool_files"])
|
45 |
+
tu.load_tools()
|
46 |
+
embedding_tensor = agent.rag_model.generate_tool_desc_embedding(tu)
|
47 |
+
if embedding_tensor is not None:
|
48 |
+
torch.save(embedding_tensor, CONFIG["embedding_filename"])
|
49 |
+
logger.info(f"Saved new embedding tensor to {CONFIG['embedding_filename']}")
|
50 |
+
else:
|
51 |
+
logger.warning("Embedding generation returned None")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
52 |
|
53 |
def prepare_tool_files():
|
54 |
os.makedirs(os.path.join(current_dir, 'data'), exist_ok=True)
|
|
|
62 |
logger.error(f"Tool generation failed: {e}")
|
63 |
|
64 |
def create_agent():
|
|
|
65 |
prepare_tool_files()
|
66 |
try:
|
|
|
|
|
|
|
|
|
|
|
67 |
agent = TxAgent(
|
68 |
CONFIG["model_name"],
|
69 |
CONFIG["rag_model_name"],
|
|
|
72 |
enable_checker=True,
|
73 |
step_rag_num=10,
|
74 |
seed=42,
|
75 |
+
additional_default_tools=["DirectResponse", "RequireClarification"]
|
76 |
)
|
77 |
+
if not os.path.exists(CONFIG["embedding_filename"]):
|
78 |
+
generate_tool_embeddings(agent)
|
79 |
agent.init_model()
|
80 |
return agent
|
81 |
except Exception as e:
|
|
|
84 |
|
85 |
def respond(msg, chat_history, temperature, max_new_tokens, max_tokens, multi_agent, conversation, max_round):
|
86 |
if not isinstance(msg, str) or len(msg.strip()) <= 10:
|
87 |
+
return chat_history + [{"role": "assistant", "content": "Hi, I am TxAgent. Please provide a valid message longer than 10 characters."}]
|
|
|
88 |
|
89 |
message = msg.strip()
|
90 |
chat_history.append({"role": "user", "content": message})
|