aiagents4pharma 1.8.1__tar.gz → 1.8.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/PKG-INFO +3 -3
  2. aiagents4pharma-1.8.2/aiagents4pharma/talk2biomodels/agents/__init__.py +5 -0
  3. aiagents4pharma-1.8.2/aiagents4pharma/talk2biomodels/agents/t2b_agent.py +93 -0
  4. aiagents4pharma-1.8.2/aiagents4pharma/talk2biomodels/states/__init__.py +5 -0
  5. aiagents4pharma-1.8.2/aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py +24 -0
  6. aiagents4pharma-1.8.2/aiagents4pharma/talk2cells/tools/scp_agent/__init__.py +6 -0
  7. aiagents4pharma-1.8.2/aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py +25 -0
  8. aiagents4pharma-1.8.2/aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py +79 -0
  9. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma.egg-info/PKG-INFO +3 -3
  10. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma.egg-info/SOURCES.txt +7 -0
  11. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma.egg-info/requires.txt +2 -2
  12. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/pyproject.toml +5 -2
  13. aiagents4pharma-1.8.2/release_version.txt +1 -0
  14. aiagents4pharma-1.8.1/release_version.txt +0 -1
  15. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/LICENSE +0 -0
  16. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/README.md +0 -0
  17. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/__init__.py +0 -0
  18. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/__init__.py +0 -0
  19. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/models/__init__.py +0 -0
  20. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/models/basico_model.py +0 -0
  21. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/models/sys_bio_model.py +0 -0
  22. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/__init__.py +0 -0
  23. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/ask_question.py +0 -0
  24. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/custom_plotter.py +0 -0
  25. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/get_modelinfo.py +0 -0
  26. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/load_biomodel.py +0 -0
  27. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/search_models.py +0 -0
  28. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2biomodels/tools/simulate_model.py +0 -0
  29. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/__init__.py +0 -0
  30. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/agents/__init__.py +0 -0
  31. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/agents/scp_agent.py +0 -0
  32. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/states/__init__.py +0 -0
  33. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/states/state_talk2cells.py +0 -0
  34. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2cells/tools/__init__.py +0 -0
  35. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/__init__.py +0 -0
  36. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py +0 -0
  37. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py +0 -0
  38. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/datasets/dataset.py +0 -0
  39. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/datasets/primekg.py +0 -0
  40. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/datasets/starkqa_primekg.py +0 -0
  41. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/__init__.py +0 -0
  42. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/embeddings/__init__.py +0 -0
  43. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/embeddings/embeddings.py +0 -0
  44. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/embeddings/huggingface.py +0 -0
  45. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/embeddings/sentence_transformer.py +0 -0
  46. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma/talk2knowledgegraphs/utils/kg_utils.py +0 -0
  47. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma.egg-info/dependency_links.txt +0 -0
  48. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/aiagents4pharma.egg-info/top_level.txt +0 -0
  49. {aiagents4pharma-1.8.1 → aiagents4pharma-1.8.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: aiagents4pharma
3
- Version: 1.8.1
3
+ Version: 1.8.2
4
4
  Summary: AI Agents for drug discovery, drug development, and other pharmaceutical R&D
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -17,10 +17,10 @@ Requires-Dist: hydra-core==1.3.2
17
17
  Requires-Dist: joblib==1.4.2
18
18
  Requires-Dist: langchain==0.3.7
19
19
  Requires-Dist: langchain-community==0.3.5
20
- Requires-Dist: langchain-core==0.3.15
20
+ Requires-Dist: langchain-core==0.3.31
21
21
  Requires-Dist: langchain-experimental==0.3.3
22
22
  Requires-Dist: langchain-openai==0.2.5
23
- Requires-Dist: langgraph==0.2.62
23
+ Requires-Dist: langgraph==0.2.66
24
24
  Requires-Dist: matplotlib==3.9.2
25
25
  Requires-Dist: openai==1.59.4
26
26
  Requires-Dist: pandas==2.2.3
@@ -0,0 +1,5 @@
1
+ '''
2
+ This file is used to import all the modules in the package.
3
+ '''
4
+ # import everything from the module
5
+ from . import t2b_agent
@@ -0,0 +1,93 @@
1
+ #/usr/bin/env python3
2
+
3
+ '''
4
+ This is the agent file for the Talk2BioModels agent.
5
+ '''
6
+
7
+ import logging
8
+ from typing import Annotated
9
+ import hydra
10
+ from langchain_openai import ChatOpenAI
11
+ from langgraph.checkpoint.memory import MemorySaver
12
+ from langgraph.graph import START, StateGraph
13
+ from langgraph.prebuilt import create_react_agent, ToolNode, InjectedState
14
+ from ..tools.search_models import SearchModelsTool
15
+ from ..tools.get_modelinfo import GetModelInfoTool
16
+ from ..tools.simulate_model import SimulateModelTool
17
+ from ..tools.custom_plotter import CustomPlotterTool
18
+ from ..tools.ask_question import AskQuestionTool
19
+ from ..states.state_talk2biomodels import Talk2Biomodels
20
+
21
+ # Initialize logger
22
+ logging.basicConfig(level=logging.INFO)
23
+ logger = logging.getLogger(__name__)
24
+
25
+ def get_app(uniq_id, llm_model='gpt-4o-mini'):
26
+ '''
27
+ This function returns the langraph app.
28
+ '''
29
+ def agent_t2b_node(state: Annotated[dict, InjectedState]):
30
+ '''
31
+ This function calls the model.
32
+ '''
33
+ logger.log(logging.INFO, "Calling t2b_agent node with thread_id %s", uniq_id)
34
+ response = model.invoke(state, {"configurable": {"thread_id": uniq_id}})
35
+ return response
36
+
37
+ # Define the tools
38
+ simulate_model = SimulateModelTool()
39
+ custom_plotter = CustomPlotterTool()
40
+ ask_question = AskQuestionTool()
41
+ search_model = SearchModelsTool()
42
+ get_modelinfo = GetModelInfoTool()
43
+ tools = ToolNode([
44
+ simulate_model,
45
+ ask_question,
46
+ custom_plotter,
47
+ search_model,
48
+ get_modelinfo
49
+ ])
50
+
51
+ # Define the model
52
+ llm = ChatOpenAI(model=llm_model, temperature=0)
53
+ # Load hydra configuration
54
+ logger.log(logging.INFO, "Load Hydra configuration for Talk2BioModels agent.")
55
+ with hydra.initialize(version_base=None, config_path="../../../configs"):
56
+ cfg = hydra.compose(config_name='config',
57
+ overrides=['aiagents4pharma/talk2biomodels/agents/t2b_agent=default'])
58
+ cfg = cfg.aiagents4pharma.talk2biomodels.agents.t2b_agent
59
+ logger.log(logging.INFO, "state_modifier: %s", cfg.state_modifier)
60
+ # Create the agent
61
+ model = create_react_agent(
62
+ llm,
63
+ tools=tools,
64
+ state_schema=Talk2Biomodels,
65
+ state_modifier=cfg.state_modifier,
66
+ checkpointer=MemorySaver()
67
+ )
68
+
69
+ # Define a new graph
70
+ workflow = StateGraph(Talk2Biomodels)
71
+
72
+ # Define the two nodes we will cycle between
73
+ workflow.add_node("agent_t2b", agent_t2b_node)
74
+
75
+ # Set the entrypoint as the first node
76
+ # This means that this node is the first one called
77
+ workflow.add_edge(START, "agent_t2b")
78
+
79
+ # Initialize memory to persist state between graph runs
80
+ checkpointer = MemorySaver()
81
+
82
+ # Finally, we compile it!
83
+ # This compiles it into a LangChain Runnable,
84
+ # meaning you can use it as you would any other runnable.
85
+ # Note that we're (optionally) passing the memory
86
+ # when compiling the graph
87
+ app = workflow.compile(checkpointer=checkpointer)
88
+ logger.log(logging.INFO,
89
+ "Compiled the graph with thread_id %s and llm_model %s",
90
+ uniq_id,
91
+ llm_model)
92
+
93
+ return app
@@ -0,0 +1,5 @@
1
+ '''
2
+ This file is used to import all the modules in the package.
3
+ '''
4
+ # import everything from the module
5
+ from . import state_talk2biomodels
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env python3
2
+
3
+ '''
4
+ This is the state file for the Talk2BioModels agent.
5
+ '''
6
+
7
+ from typing import Annotated
8
+ import operator
9
+ from langgraph.prebuilt.chat_agent_executor import AgentState
10
+
11
+ class Talk2Biomodels(AgentState):
12
+ """
13
+ The state for the Talk2BioModels agent.
14
+ """
15
+ model_id: Annotated[list, operator.add]
16
+ # sbml_file_path: str
17
+ # A StateGraph may receive a concurrent updates
18
+ # which is not supported by the StateGraph.
19
+ # Therefore, we need to use Annotated to specify
20
+ # the operator for the sbml_file_path field.
21
+ # https://langchain-ai.github.io/langgraph/troubleshooting/errors/INVALID_CONCURRENT_GRAPH_UPDATE/
22
+ sbml_file_path: Annotated[list, operator.add]
23
+ dic_simulated_data: dict
24
+ llm_model: str
@@ -0,0 +1,6 @@
1
+ '''
2
+ This file is used to import all the modules in the package.
3
+ '''
4
+ # import everything from the module
5
+ from . import display_studies
6
+ from . import search_studies
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env python3
2
+
3
+ '''
4
+ This tool is used to display the table of studies.
5
+ '''
6
+
7
+ import logging
8
+ from typing import Annotated
9
+ from langchain_core.tools import tool
10
+ from langgraph.prebuilt import InjectedState
11
+
12
+ # Initialize logger
13
+ logging.basicConfig(level=logging.INFO)
14
+ logger = logging.getLogger(__name__)
15
+
16
+ @tool('display_studies')
17
+ def display_studies(state: Annotated[dict, InjectedState]):
18
+ """
19
+ Display the table of studies.
20
+
21
+ Args:
22
+ state (dict): The state of the agent.
23
+ """
24
+ logger.log(logging.INFO, "Calling the tool display_studies")
25
+ return state["search_table"]
@@ -0,0 +1,79 @@
1
+ #!/usr/bin/env python3
2
+
3
+ '''
4
+ A tool to fetch studies from the Single Cell Portal.
5
+ '''
6
+
7
+ import logging
8
+ from typing import Annotated
9
+ import requests
10
+ from langchain_core.tools import tool
11
+ from langchain_core.tools.base import InjectedToolCallId
12
+ from langchain_core.messages import ToolMessage
13
+ from langgraph.types import Command
14
+ import pandas as pd
15
+
16
+ # Initialize logger
17
+ logging.basicConfig(level=logging.INFO)
18
+ logger = logging.getLogger(__name__)
19
+
20
+ @tool('search_studies')
21
+ def search_studies(search_term: str,
22
+ tool_call_id: Annotated[str, InjectedToolCallId],
23
+ limit: int = 5):
24
+ """
25
+ Fetch studies from single cell portal
26
+
27
+ Args:
28
+ search_term (str): The search term to use. Example: "COVID-19", "cancer", etc.
29
+ limit (int): The number of papers to return. Default is 5.
30
+
31
+ """
32
+ logger.log(logging.INFO, "Calling the tool search_studies")
33
+ scp_endpoint = 'https://singlecell.broadinstitute.org/single_cell/api/v1/search?type=study'
34
+ # params = {'terms': search_term, 'facets': 'MONDO_0005011'}
35
+ params = {'terms': search_term}
36
+ status_code = 0
37
+ while status_code != 200:
38
+ # Make a GET request to the single cell portal
39
+ search_response = requests.get(scp_endpoint,
40
+ params=params,
41
+ timeout=10,
42
+ verify=False)
43
+ status_code = search_response.status_code
44
+ logger.log(logging.INFO, "Status code %s received from SCP")
45
+
46
+ # Select the columns to display in the table
47
+ selected_columns = ["study_source", "name", "study_url", "gene_count", "cell_count"]
48
+
49
+ # Extract the data from the response
50
+ # with the selected columns
51
+ df = pd.DataFrame(search_response.json()['studies'])[selected_columns]
52
+
53
+ # Convert column 'Study Name' into clickable
54
+ # hyperlinks from the column 'Study URL'
55
+ scp_api_url = 'https://singlecell.broadinstitute.org'
56
+ df['name'] = df.apply(
57
+ lambda x: f"<a href=\"{scp_api_url}/{x['study_url']}\">{x['name']}</a>",
58
+ axis=1)
59
+
60
+ # Excldue the column 'Study URL' from the dataframe
61
+ df = df.drop(columns=['study_url'])
62
+
63
+ # Add a new column a the beginning of the dataframe with row numbers
64
+ df.insert(0, 'S/N', range(1, 1 + len(df)))
65
+
66
+ # Update the state key 'search_table' with the dataframe in markdown format
67
+ return Command(
68
+ update={
69
+ # update the state keys
70
+ "search_table": df.to_markdown(tablefmt="grid"),
71
+ # update the message history
72
+ "messages": [
73
+ ToolMessage(
74
+ f"Successfully fetched {limit} studies on {search_term}.",
75
+ tool_call_id=tool_call_id
76
+ )
77
+ ],
78
+ }
79
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: aiagents4pharma
3
- Version: 1.8.1
3
+ Version: 1.8.2
4
4
  Summary: AI Agents for drug discovery, drug development, and other pharmaceutical R&D
5
5
  Classifier: Programming Language :: Python :: 3
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -17,10 +17,10 @@ Requires-Dist: hydra-core==1.3.2
17
17
  Requires-Dist: joblib==1.4.2
18
18
  Requires-Dist: langchain==0.3.7
19
19
  Requires-Dist: langchain-community==0.3.5
20
- Requires-Dist: langchain-core==0.3.15
20
+ Requires-Dist: langchain-core==0.3.31
21
21
  Requires-Dist: langchain-experimental==0.3.3
22
22
  Requires-Dist: langchain-openai==0.2.5
23
- Requires-Dist: langgraph==0.2.62
23
+ Requires-Dist: langgraph==0.2.66
24
24
  Requires-Dist: matplotlib==3.9.2
25
25
  Requires-Dist: openai==1.59.4
26
26
  Requires-Dist: pandas==2.2.3
@@ -9,9 +9,13 @@ aiagents4pharma.egg-info/dependency_links.txt
9
9
  aiagents4pharma.egg-info/requires.txt
10
10
  aiagents4pharma.egg-info/top_level.txt
11
11
  aiagents4pharma/talk2biomodels/__init__.py
12
+ aiagents4pharma/talk2biomodels/agents/__init__.py
13
+ aiagents4pharma/talk2biomodels/agents/t2b_agent.py
12
14
  aiagents4pharma/talk2biomodels/models/__init__.py
13
15
  aiagents4pharma/talk2biomodels/models/basico_model.py
14
16
  aiagents4pharma/talk2biomodels/models/sys_bio_model.py
17
+ aiagents4pharma/talk2biomodels/states/__init__.py
18
+ aiagents4pharma/talk2biomodels/states/state_talk2biomodels.py
15
19
  aiagents4pharma/talk2biomodels/tools/__init__.py
16
20
  aiagents4pharma/talk2biomodels/tools/ask_question.py
17
21
  aiagents4pharma/talk2biomodels/tools/custom_plotter.py
@@ -25,6 +29,9 @@ aiagents4pharma/talk2cells/agents/scp_agent.py
25
29
  aiagents4pharma/talk2cells/states/__init__.py
26
30
  aiagents4pharma/talk2cells/states/state_talk2cells.py
27
31
  aiagents4pharma/talk2cells/tools/__init__.py
32
+ aiagents4pharma/talk2cells/tools/scp_agent/__init__.py
33
+ aiagents4pharma/talk2cells/tools/scp_agent/display_studies.py
34
+ aiagents4pharma/talk2cells/tools/scp_agent/search_studies.py
28
35
  aiagents4pharma/talk2knowledgegraphs/__init__.py
29
36
  aiagents4pharma/talk2knowledgegraphs/datasets/__init__.py
30
37
  aiagents4pharma/talk2knowledgegraphs/datasets/biobridge_primekg.py
@@ -7,10 +7,10 @@ hydra-core==1.3.2
7
7
  joblib==1.4.2
8
8
  langchain==0.3.7
9
9
  langchain-community==0.3.5
10
- langchain-core==0.3.15
10
+ langchain-core==0.3.31
11
11
  langchain-experimental==0.3.3
12
12
  langchain-openai==0.2.5
13
- langgraph==0.2.62
13
+ langgraph==0.2.66
14
14
  matplotlib==3.9.2
15
15
  openai==1.59.4
16
16
  pandas==2.2.3
@@ -22,10 +22,10 @@ dependencies = [
22
22
  "joblib==1.4.2",
23
23
  "langchain==0.3.7",
24
24
  "langchain-community==0.3.5",
25
- "langchain-core==0.3.15",
25
+ "langchain-core==0.3.31",
26
26
  "langchain-experimental==0.3.3",
27
27
  "langchain-openai==0.2.5",
28
- "langgraph==0.2.62",
28
+ "langgraph==0.2.66",
29
29
  "matplotlib==3.9.2",
30
30
  "openai==1.59.4",
31
31
  "pandas==2.2.3",
@@ -60,10 +60,13 @@ packages = ["aiagents4pharma",
60
60
  "aiagents4pharma.talk2biomodels",
61
61
  "aiagents4pharma.talk2biomodels.models",
62
62
  "aiagents4pharma.talk2biomodels.tools",
63
+ "aiagents4pharma.talk2biomodels.agents",
64
+ "aiagents4pharma.talk2biomodels.states",
63
65
  "aiagents4pharma.talk2cells",
64
66
  "aiagents4pharma.talk2cells.agents",
65
67
  "aiagents4pharma.talk2cells.states",
66
68
  "aiagents4pharma.talk2cells.tools",
69
+ "aiagents4pharma.talk2cells.tools.scp_agent",
67
70
  "aiagents4pharma.talk2knowledgegraphs",
68
71
  "aiagents4pharma.talk2knowledgegraphs.datasets",
69
72
  "aiagents4pharma.talk2knowledgegraphs.utils",
@@ -0,0 +1 @@
1
+ v1.8.2
@@ -1 +0,0 @@
1
- v1.8.1
File without changes