aiagents4pharma 1.1.0__py3-none-any.whl → 1.2.0__py3-none-any.whl
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.
- aiagents4pharma/talk2biomodels/tools/ask_question.py +4 -5
- aiagents4pharma/talk2biomodels/tools/custom_plotter.py +79 -0
- aiagents4pharma/talk2biomodels/tools/fetch_parameters.py +60 -0
- aiagents4pharma/talk2biomodels/tools/model_description.py +3 -6
- aiagents4pharma/talk2biomodels/tools/plot_figure.py +4 -4
- aiagents4pharma/talk2biomodels/tools/search_models.py +82 -0
- aiagents4pharma/talk2biomodels/tools/simulate_model.py +36 -28
- {aiagents4pharma-1.1.0.dist-info → aiagents4pharma-1.2.0.dist-info}/METADATA +2 -2
- aiagents4pharma-1.2.0.dist-info/RECORD +18 -0
- {aiagents4pharma-1.1.0.dist-info → aiagents4pharma-1.2.0.dist-info}/WHEEL +1 -1
- aiagents4pharma-1.1.0.dist-info/RECORD +0 -15
- {aiagents4pharma-1.1.0.dist-info → aiagents4pharma-1.2.0.dist-info}/LICENSE +0 -0
- {aiagents4pharma-1.1.0.dist-info → aiagents4pharma-1.2.0.dist-info}/top_level.txt +0 -0
@@ -29,8 +29,6 @@ class AskQuestionInput(BaseModel):
|
|
29
29
|
Input schema for the AskQuestion tool.
|
30
30
|
"""
|
31
31
|
question: str = Field(description="question about the simulation results")
|
32
|
-
sys_bio_model: ModelData = Field(description="model data", default=None)
|
33
|
-
st_session_key: str = Field(description="Streamlit session key", default=None)
|
34
32
|
|
35
33
|
# Note: It's important that every field has type hints. BaseTool is a
|
36
34
|
# Pydantic class and not having type hints can lead to unexpected behavior.
|
@@ -42,23 +40,24 @@ class AskQuestionTool(BaseTool):
|
|
42
40
|
description: str = "A tool to ask question about the simulation results."
|
43
41
|
args_schema: Type[BaseModel] = AskQuestionInput
|
44
42
|
return_direct: bool = True
|
43
|
+
st_session_key: str = None
|
44
|
+
sys_bio_model: ModelData = ModelData()
|
45
45
|
|
46
46
|
def _run(self,
|
47
47
|
question: str,
|
48
|
-
sys_bio_model: ModelData = ModelData(),
|
49
|
-
st_session_key: str = None,
|
50
48
|
run_manager: Optional[CallbackManagerForToolRun] = None) -> str:
|
51
49
|
"""
|
52
50
|
Run the tool.
|
53
51
|
|
54
52
|
Args:
|
55
53
|
question (str): The question to ask about the simulation results.
|
56
|
-
st_session_key (str): The Streamlit session key.
|
57
54
|
run_manager (Optional[CallbackManagerForToolRun]): The CallbackManagerForToolRun object.
|
58
55
|
|
59
56
|
Returns:
|
60
57
|
str: The answer to the question.
|
61
58
|
"""
|
59
|
+
st_session_key = self.st_session_key
|
60
|
+
sys_bio_model = self.sys_bio_model
|
62
61
|
# Check if sys_bio_model is provided in the input
|
63
62
|
if sys_bio_model.modelid or sys_bio_model.sbml_file_path or sys_bio_model.model_object:
|
64
63
|
if sys_bio_model.modelid is not None:
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
"""
|
4
|
+
Tool for plotting a custom figure.
|
5
|
+
"""
|
6
|
+
|
7
|
+
import logging
|
8
|
+
from typing import Type, List, TypedDict
|
9
|
+
from pydantic import BaseModel, Field
|
10
|
+
import streamlit as st
|
11
|
+
from langchain_openai import ChatOpenAI
|
12
|
+
from langchain_core.tools import BaseTool
|
13
|
+
from langchain_core.prompts import ChatPromptTemplate
|
14
|
+
|
15
|
+
# Initialize logger
|
16
|
+
logging.basicConfig(level=logging.INFO)
|
17
|
+
logger = logging.getLogger(__name__)
|
18
|
+
|
19
|
+
class CustomHeader(TypedDict):
|
20
|
+
"""
|
21
|
+
A list of headers extracted from the user question.
|
22
|
+
"""
|
23
|
+
y: List[str]
|
24
|
+
|
25
|
+
class CustomPlotterInput(BaseModel):
|
26
|
+
"""
|
27
|
+
Input schema for the PlotImage tool.
|
28
|
+
"""
|
29
|
+
question: str = Field(description="Description of the plot")
|
30
|
+
|
31
|
+
# Note: It's important that every field has type hints. BaseTool is a
|
32
|
+
# Pydantic class and not having type hints can lead to unexpected behavior.
|
33
|
+
class CustomPlotterTool(BaseTool):
|
34
|
+
"""
|
35
|
+
Tool for plotting a custom plot.
|
36
|
+
"""
|
37
|
+
name: str = "custom_plotter"
|
38
|
+
description: str = "A tool to plot or visualize the simulation results."
|
39
|
+
args_schema: Type[BaseModel] = CustomPlotterInput
|
40
|
+
st_session_key: str = None
|
41
|
+
|
42
|
+
def _run(self, question: str) -> str:
|
43
|
+
"""
|
44
|
+
Run the tool.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
question (str): The question to ask about the model description.
|
48
|
+
|
49
|
+
Returns:
|
50
|
+
str: The answer to the question
|
51
|
+
"""
|
52
|
+
# Check if sys_bio_model is provided
|
53
|
+
model_object = st.session_state[self.st_session_key]
|
54
|
+
if model_object is None:
|
55
|
+
return "Please run the simulation first before plotting the figure."
|
56
|
+
if model_object.simulation_results is None:
|
57
|
+
return "Please run the simulation first before plotting the figure."
|
58
|
+
df = model_object.simulation_results
|
59
|
+
species_names = "\n".join(df.columns.tolist())
|
60
|
+
llm = ChatOpenAI(model="gpt-4o")
|
61
|
+
system = f"""
|
62
|
+
Given the user question: {question},
|
63
|
+
and the species: {species_names},
|
64
|
+
which species are relevant to the user's question?
|
65
|
+
"""
|
66
|
+
llm_with_structured_output = llm.with_structured_output(CustomHeader)
|
67
|
+
system_prompt_structured_output = ChatPromptTemplate.from_template(system)
|
68
|
+
chain = system_prompt_structured_output | llm_with_structured_output
|
69
|
+
results = chain.invoke({"input": question})
|
70
|
+
logger.info("Suggestions: %s", results)
|
71
|
+
extracted_species = []
|
72
|
+
for species in results['y']:
|
73
|
+
if species in df.columns.tolist():
|
74
|
+
extracted_species.append(species)
|
75
|
+
logger.info("Extracted species: %s", extracted_species)
|
76
|
+
st.session_state.custom_simulation_results = extracted_species
|
77
|
+
if len(extracted_species) == 0:
|
78
|
+
return "No species found in the simulation results that matches the user prompt."
|
79
|
+
return "Plotted the figure using the following species: " + str(extracted_species)
|
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
"""
|
4
|
+
Tool for fetching species and parameters from the model.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from typing import Type
|
8
|
+
import basico
|
9
|
+
from pydantic import BaseModel, Field
|
10
|
+
from langchain_core.tools import BaseTool
|
11
|
+
import streamlit as st
|
12
|
+
|
13
|
+
class FetchParametersInput(BaseModel):
|
14
|
+
"""
|
15
|
+
Input schema for the ResetModel tool.
|
16
|
+
"""
|
17
|
+
fetch_species: bool = Field(description="Fetch species from the model.")
|
18
|
+
fetch_parameters: bool = Field(description="Fetch parameters from the model.")
|
19
|
+
|
20
|
+
# Note: It's important that every field has type hints. BaseTool is a
|
21
|
+
# Pydantic class and not having type hints can lead to unexpected behavior.
|
22
|
+
class FetchParametersTool(BaseTool):
|
23
|
+
"""
|
24
|
+
This tool fetches species and parameters from the model
|
25
|
+
and returns them as a string in a dictionary.
|
26
|
+
"""
|
27
|
+
name: str = "fetch_parameters"
|
28
|
+
description: str = "A tool for fetching species and parameters from the model."
|
29
|
+
args_schema: Type[BaseModel] = FetchParametersInput
|
30
|
+
st_session_key: str = None
|
31
|
+
|
32
|
+
def _run(self,
|
33
|
+
fetch_species: bool,
|
34
|
+
fetch_parameters: bool
|
35
|
+
) -> str:
|
36
|
+
"""
|
37
|
+
Run the tool.
|
38
|
+
|
39
|
+
Args:
|
40
|
+
fetch_species (bool): Fetch species from the model.
|
41
|
+
fetch_parameters (bool): Fetch parameters from the model.
|
42
|
+
|
43
|
+
Returns:
|
44
|
+
dict: The species and parameters from the model.
|
45
|
+
"""
|
46
|
+
model_obj = st.session_state[self.st_session_key]
|
47
|
+
# Extract species from the model
|
48
|
+
species = []
|
49
|
+
if fetch_species:
|
50
|
+
df_species = basico.model_info.get_species(model=model_obj.copasi_model)
|
51
|
+
species = df_species.index.tolist()
|
52
|
+
species = ','.join(species)
|
53
|
+
|
54
|
+
# Extract parameters from the model
|
55
|
+
parameters = []
|
56
|
+
if fetch_parameters:
|
57
|
+
df_parameters = basico.model_info.get_parameters(model=model_obj.copasi_model)
|
58
|
+
parameters = df_parameters.index.tolist()
|
59
|
+
parameters = ','.join(parameters)
|
60
|
+
return {'Species': species, 'Parameters': parameters}
|
@@ -39,15 +39,12 @@ class ModelData:
|
|
39
39
|
data['model_object'] = None
|
40
40
|
return data
|
41
41
|
|
42
|
-
|
43
42
|
class ModelDescriptionInput(BaseModel):
|
44
43
|
"""
|
45
44
|
Input schema for the ModelDescription tool.
|
46
45
|
"""
|
47
46
|
question: str = Field(description="question about the model description")
|
48
47
|
sys_bio_model: ModelData = Field(description="model data", default=None)
|
49
|
-
st_session_key: str = Field(description="Streamlit session key", default=None)
|
50
|
-
|
51
48
|
|
52
49
|
# Note: It's important that every field has type hints. BaseTool is a
|
53
50
|
# Pydantic class and not having type hints can lead to unexpected behavior.
|
@@ -57,26 +54,26 @@ class ModelDescriptionTool(BaseTool):
|
|
57
54
|
"""
|
58
55
|
name: str = "model_description"
|
59
56
|
description: str = '''A tool to ask about the description of the model.'''
|
60
|
-
|
61
57
|
args_schema: Type[BaseModel] = ModelDescriptionInput
|
62
58
|
return_direct: bool = True
|
59
|
+
st_session_key: str = None
|
63
60
|
|
64
61
|
def _run(self,
|
65
62
|
question: str,
|
66
63
|
sys_bio_model: ModelData = ModelData(),
|
67
|
-
st_session_key: str = None,
|
68
64
|
run_manager: Optional[CallbackManagerForToolRun] = None) -> str:
|
69
65
|
"""
|
70
66
|
Run the tool.
|
71
67
|
|
72
68
|
Args:
|
73
69
|
question (str): The question to ask about the model description.
|
74
|
-
st_session_key (str): The Streamlit session key.
|
75
70
|
run_manager (Optional[CallbackManagerForToolRun]): The CallbackManagerForToolRun object.
|
76
71
|
|
77
72
|
Returns:
|
78
73
|
str: The answer to the question.
|
79
74
|
"""
|
75
|
+
st_session_key = self.st_session_key
|
76
|
+
print (st_session_key, 'st_session_key')
|
80
77
|
# Check if sys_bio_model is provided in the input schema
|
81
78
|
if sys_bio_model.modelid or sys_bio_model.sbml_file_path \
|
82
79
|
or sys_bio_model.model_object not in [None, "", {}]:
|
@@ -31,7 +31,6 @@ class PlotImageInput(BaseModel):
|
|
31
31
|
"""
|
32
32
|
question: str = Field(description="Description of the plot")
|
33
33
|
sys_bio_model: ModelData = Field(description="model data", default=None)
|
34
|
-
st_session_key: str = Field(description="Streamlit session key", default=None)
|
35
34
|
|
36
35
|
# Note: It's important that every field has type hints. BaseTool is a
|
37
36
|
# Pydantic class and not having type hints can lead to unexpected behavior.
|
@@ -42,21 +41,22 @@ class PlotImageTool(BaseTool):
|
|
42
41
|
name: str = "plot_figure"
|
43
42
|
description: str = "A tool to plot or visualize the simulation results."
|
44
43
|
args_schema: Type[BaseModel] = PlotImageInput
|
44
|
+
st_session_key: str = None
|
45
45
|
|
46
46
|
def _run(self,
|
47
47
|
question: str,
|
48
|
-
sys_bio_model: ModelData = ModelData()
|
49
|
-
st_session_key: str = None) -> str:
|
48
|
+
sys_bio_model: ModelData = ModelData()) -> str:
|
50
49
|
"""
|
51
50
|
Run the tool.
|
52
51
|
|
53
52
|
Args:
|
54
53
|
question (str): The question to ask about the model description.
|
55
|
-
|
54
|
+
sys_bio_model (ModelData): The model data.
|
56
55
|
|
57
56
|
Returns:
|
58
57
|
str: The answer to the question
|
59
58
|
"""
|
59
|
+
st_session_key = self.st_session_key
|
60
60
|
# Check if sys_bio_model is provided
|
61
61
|
if sys_bio_model.modelid or sys_bio_model.sbml_file_path or sys_bio_model.model_object:
|
62
62
|
if sys_bio_model.modelid:
|
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
|
3
|
+
"""
|
4
|
+
Tool for searching models based on search query.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from typing import Type
|
8
|
+
from pydantic import BaseModel, Field
|
9
|
+
from basico import biomodels
|
10
|
+
from langchain_core.tools import BaseTool
|
11
|
+
from langchain_core.output_parsers import StrOutputParser
|
12
|
+
from langchain_core.prompts import ChatPromptTemplate
|
13
|
+
from langchain_openai import ChatOpenAI
|
14
|
+
|
15
|
+
class SearchModelsInput(BaseModel):
|
16
|
+
"""
|
17
|
+
Input schema for the search models tool.
|
18
|
+
"""
|
19
|
+
query: str = Field(description="Search models query", default=None)
|
20
|
+
|
21
|
+
# Note: It's important that every field has type hints. BaseTool is a
|
22
|
+
# Pydantic class and not having type hints can lead to unexpected behavior.
|
23
|
+
class SearchModelsTool(BaseTool):
|
24
|
+
"""
|
25
|
+
Tool for returning the search results based on the search query.
|
26
|
+
"""
|
27
|
+
name: str = "search_models"
|
28
|
+
description: str = "Search models based on search query."
|
29
|
+
args_schema: Type[BaseModel] = SearchModelsInput
|
30
|
+
return_direct: bool = True
|
31
|
+
|
32
|
+
def _run(self, query: str) -> str:
|
33
|
+
"""
|
34
|
+
Run the tool.
|
35
|
+
|
36
|
+
Args:
|
37
|
+
query (str): The search query.
|
38
|
+
|
39
|
+
Returns:
|
40
|
+
str: The answer to the question.
|
41
|
+
"""
|
42
|
+
search_results = biomodels.search_for_model(query)
|
43
|
+
llm = ChatOpenAI(model="gpt-4o-mini")
|
44
|
+
# Check if run_manager's metadata has the key 'prompt_content'
|
45
|
+
prompt_content = f'''
|
46
|
+
Convert the input into a table.
|
47
|
+
|
48
|
+
The table must contain the following columns:
|
49
|
+
- #
|
50
|
+
- BioModel ID
|
51
|
+
- BioModel Name
|
52
|
+
- Format
|
53
|
+
- Submission Date
|
54
|
+
|
55
|
+
Additional Guidelines:
|
56
|
+
- The column # must contain the row number starting from 1.
|
57
|
+
- Embed the url for each BioModel ID in the table
|
58
|
+
in the first column in the markdown format.
|
59
|
+
- The Submission Date must be in the format YYYY-MM-DD.
|
60
|
+
|
61
|
+
Input:
|
62
|
+
{input}.
|
63
|
+
'''
|
64
|
+
prompt_template = ChatPromptTemplate.from_messages(
|
65
|
+
[("system", prompt_content),
|
66
|
+
("user", "{input}")]
|
67
|
+
)
|
68
|
+
parser = StrOutputParser()
|
69
|
+
chain = prompt_template | llm | parser
|
70
|
+
return chain.invoke({"input": search_results})
|
71
|
+
|
72
|
+
def get_metadata(self):
|
73
|
+
"""
|
74
|
+
Get metadata for the tool.
|
75
|
+
|
76
|
+
Returns:
|
77
|
+
dict: The metadata for the tool.
|
78
|
+
"""
|
79
|
+
return {
|
80
|
+
"name": self.name,
|
81
|
+
"description": self.description
|
82
|
+
}
|
@@ -4,7 +4,8 @@
|
|
4
4
|
Tool for simulating a model.
|
5
5
|
"""
|
6
6
|
|
7
|
-
from typing import Type, Union, List, Optional
|
7
|
+
from typing import Type, Union, List, Optional, Tuple
|
8
|
+
import basico
|
8
9
|
from dataclasses import dataclass
|
9
10
|
from pydantic import BaseModel, Field
|
10
11
|
from langchain_core.tools import BaseTool
|
@@ -36,14 +37,31 @@ class SpeciesData:
|
|
36
37
|
species_name: List[str] = None
|
37
38
|
species_concentration: List[Union[int, float]] = None
|
38
39
|
|
40
|
+
@dataclass
|
41
|
+
class TimeSpeciesNameConcentration:
|
42
|
+
"""
|
43
|
+
Dataclass for storing the time, species name, and concentration data.
|
44
|
+
"""
|
45
|
+
time: Union[int, float] = None
|
46
|
+
species_name: str = None
|
47
|
+
species_concentration: Union[int, float] = None
|
48
|
+
|
49
|
+
@dataclass
|
50
|
+
class RecurringData:
|
51
|
+
"""
|
52
|
+
Dataclass for storing the species and time data
|
53
|
+
on recurring basis.
|
54
|
+
"""
|
55
|
+
data: List[TimeSpeciesNameConcentration] = None
|
56
|
+
|
39
57
|
class SimulateModelInput(BaseModel):
|
40
58
|
"""
|
41
59
|
Input schema for the SimulateModel tool.
|
42
60
|
"""
|
43
|
-
st_session_key: str = Field(description="Streamlit session key", default=None)
|
44
61
|
model_data: ModelData = Field(description="model data", default=None)
|
45
62
|
time_data: TimeData = Field(description="time data", default=None)
|
46
63
|
species_data: SpeciesData = Field(description="species data", default=None)
|
64
|
+
recurring_data: RecurringData = Field(description="recurring data", default=None)
|
47
65
|
|
48
66
|
# Note: It's important that every field has type hints. BaseTool is a
|
49
67
|
# Pydantic class and not having type hints can lead to unexpected behavior.
|
@@ -52,14 +70,15 @@ class SimulateModelTool(BaseTool):
|
|
52
70
|
Tool for simulating a model.
|
53
71
|
"""
|
54
72
|
name: str = "simulate_model"
|
55
|
-
description: str = "A tool
|
73
|
+
description: str = "A tool to simulate a model."
|
56
74
|
args_schema: Type[BaseModel] = SimulateModelInput
|
75
|
+
st_session_key: str = None
|
57
76
|
|
58
77
|
def _run(self,
|
59
78
|
model_data: ModelData = None,
|
60
79
|
time_data: TimeData = None,
|
61
80
|
species_data: SpeciesData = None,
|
62
|
-
|
81
|
+
recurring_data: RecurringData = None):
|
63
82
|
"""
|
64
83
|
Run the tool.
|
65
84
|
|
@@ -67,11 +86,12 @@ class SimulateModelTool(BaseTool):
|
|
67
86
|
model_data (Optional[ModelData]): The model data.
|
68
87
|
time_data (Optional[TimeData]): The time data.
|
69
88
|
species_data (Optional[SpeciesData]): The species data.
|
70
|
-
|
89
|
+
recurring_data (Optional[RecurringData]): The recurring data.
|
71
90
|
|
72
91
|
Returns:
|
73
92
|
str: The result of the simulation.
|
74
93
|
"""
|
94
|
+
st_session_key = self.st_session_key
|
75
95
|
# Retrieve the model ID, duration, and interval
|
76
96
|
modelid = model_data.modelid if model_data is not None else None
|
77
97
|
duration = time_data.duration if time_data is not None else 100.0
|
@@ -118,6 +138,16 @@ class SimulateModelTool(BaseTool):
|
|
118
138
|
modelid = model_object.model_id
|
119
139
|
# Save the model object in the Streamlit session state
|
120
140
|
st.session_state[st_session_key] = model_object
|
141
|
+
# Add recurring events (if any) to the model
|
142
|
+
if recurring_data is not None:
|
143
|
+
for row in recurring_data.data:
|
144
|
+
tp, sn, sc = row.time, row.species_name, row.species_concentration
|
145
|
+
basico.add_event(f'{sn}_{tp}',
|
146
|
+
f'Time > {tp}',
|
147
|
+
[[sn, str(sc)]],
|
148
|
+
model=model_object.copasi_model)
|
149
|
+
# print (f'Added event {sn}_{tp} at time {tp} \
|
150
|
+
# for species {sn} with concentration {sc}')
|
121
151
|
# Simulate the model
|
122
152
|
df = model_object.simulate(parameters=dic_species_data,
|
123
153
|
duration=duration,
|
@@ -137,34 +167,12 @@ class SimulateModelTool(BaseTool):
|
|
137
167
|
width=800
|
138
168
|
)
|
139
169
|
# Display the plot in Streamlit
|
140
|
-
st.plotly_chart(fig, use_container_width = False)
|
170
|
+
# st.plotly_chart(fig, use_container_width = False)
|
141
171
|
if modelid is None:
|
142
172
|
modelid = "internal"
|
143
173
|
content = f"Simulation results for the model {modelid}."
|
144
174
|
return content
|
145
175
|
|
146
|
-
def call_run(self,
|
147
|
-
model_data: ModelData = None,
|
148
|
-
time_data: TimeData = None,
|
149
|
-
species_data: SpeciesData = None,
|
150
|
-
st_session_key: str = None) -> str:
|
151
|
-
"""
|
152
|
-
Run the tool.
|
153
|
-
|
154
|
-
Args:
|
155
|
-
model_data (Optional[ModelData]): The model data.
|
156
|
-
time_data (Optional[TimeData]): The time data.
|
157
|
-
species_data (Optional[SpeciesData]): The species data.
|
158
|
-
st_session_key (str): The Streamlit session key
|
159
|
-
|
160
|
-
Returns:
|
161
|
-
str: The result of the simulation.
|
162
|
-
"""
|
163
|
-
return self._run(model_data=model_data,
|
164
|
-
time_data=time_data,
|
165
|
-
species_data=species_data,
|
166
|
-
st_session_key=st_session_key)
|
167
|
-
|
168
176
|
def get_metadata(self):
|
169
177
|
"""
|
170
178
|
Get metadata for the tool.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: aiagents4pharma
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.2.0
|
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
|
@@ -8,7 +8,7 @@ Classifier: Operating System :: OS Independent
|
|
8
8
|
Requires-Python: >=3.10
|
9
9
|
Description-Content-Type: text/markdown
|
10
10
|
License-File: LICENSE
|
11
|
-
Requires-Dist:
|
11
|
+
Requires-Dist: copasi_basico==0.78
|
12
12
|
Requires-Dist: coverage==7.6.4
|
13
13
|
Requires-Dist: langchain==0.3.7
|
14
14
|
Requires-Dist: langchain-community==0.3.5
|
@@ -0,0 +1,18 @@
|
|
1
|
+
aiagents4pharma/__init__.py,sha256=OF-rmtiLauF4NIlzEvMrWhNiX-mo5NJ4vrUtQbcLwts,93
|
2
|
+
aiagents4pharma/talk2biomodels/__init__.py,sha256=MueXwbnuiQyiju7mW6NepFUiZJdodMzmUK3TkQT7iPk,99
|
3
|
+
aiagents4pharma/talk2biomodels/models/__init__.py,sha256=5fTHHm3PVloYPNKXbgNlcPgv3-u28ZquxGydFYDfhJA,122
|
4
|
+
aiagents4pharma/talk2biomodels/models/basico_model.py,sha256=SC9rFzLWzNxcQueAduL3dBmDh-lTtP1agH-TXjucOkw,4199
|
5
|
+
aiagents4pharma/talk2biomodels/models/sys_bio_model.py,sha256=xN-ZXCpIxNkEXuDIvi_AW6LpCyPqXReGyhLPyJIXNqs,1980
|
6
|
+
aiagents4pharma/talk2biomodels/tools/__init__.py,sha256=AM03pbYT3nOzI5jf_CJmSDaDwrI-IZ0Zq9hLA2tOXpw,182
|
7
|
+
aiagents4pharma/talk2biomodels/tools/ask_question.py,sha256=7mH5zZFC_syMuDga0ZI6eOyjdPKQNv1hpgJ2EGqTRU8,5377
|
8
|
+
aiagents4pharma/talk2biomodels/tools/custom_plotter.py,sha256=CdgJjlHAkdyjnwPD6nHARsJXnx_CE0MWg5VOz4oBjY0,2910
|
9
|
+
aiagents4pharma/talk2biomodels/tools/fetch_parameters.py,sha256=levr42F-m53Oya8VTbLlvLJt1snNgnIlSHs4JDiNAv8,2063
|
10
|
+
aiagents4pharma/talk2biomodels/tools/model_description.py,sha256=7qsZ8Lq23eTtFJFMfufawZKgDLTvyihKQJB_18N5Ta4,6232
|
11
|
+
aiagents4pharma/talk2biomodels/tools/plot_figure.py,sha256=S_d8nNy7NVSBIqnDhg6ex_AdaMqUmVX8D1qOjRGe3r8,5594
|
12
|
+
aiagents4pharma/talk2biomodels/tools/search_models.py,sha256=5qmgQcwlICYAFG11y-aEhBSeYYT6Lu6AKGL2V-p1ggQ,2685
|
13
|
+
aiagents4pharma/talk2biomodels/tools/simulate_model.py,sha256=n6TbfJRgeo2X_1wXPHGeeCvZoso8LFjLqqfKhfseFVM,7287
|
14
|
+
aiagents4pharma-1.2.0.dist-info/LICENSE,sha256=IcIbyB1Hyk5ZDah03VNQvJkbNk2hkBCDqQ8qtnCvB4Q,1077
|
15
|
+
aiagents4pharma-1.2.0.dist-info/METADATA,sha256=4HuqsZYb2tbYs4HYvEH1pgX8rHm4LhbelJOxMxb2GD8,5460
|
16
|
+
aiagents4pharma-1.2.0.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
17
|
+
aiagents4pharma-1.2.0.dist-info/top_level.txt,sha256=-AH8rMmrSnJtq7HaAObS78UU-cTCwvX660dSxeM7a0A,16
|
18
|
+
aiagents4pharma-1.2.0.dist-info/RECORD,,
|
@@ -1,15 +0,0 @@
|
|
1
|
-
aiagents4pharma/__init__.py,sha256=OF-rmtiLauF4NIlzEvMrWhNiX-mo5NJ4vrUtQbcLwts,93
|
2
|
-
aiagents4pharma/talk2biomodels/__init__.py,sha256=MueXwbnuiQyiju7mW6NepFUiZJdodMzmUK3TkQT7iPk,99
|
3
|
-
aiagents4pharma/talk2biomodels/models/__init__.py,sha256=5fTHHm3PVloYPNKXbgNlcPgv3-u28ZquxGydFYDfhJA,122
|
4
|
-
aiagents4pharma/talk2biomodels/models/basico_model.py,sha256=SC9rFzLWzNxcQueAduL3dBmDh-lTtP1agH-TXjucOkw,4199
|
5
|
-
aiagents4pharma/talk2biomodels/models/sys_bio_model.py,sha256=xN-ZXCpIxNkEXuDIvi_AW6LpCyPqXReGyhLPyJIXNqs,1980
|
6
|
-
aiagents4pharma/talk2biomodels/tools/__init__.py,sha256=AM03pbYT3nOzI5jf_CJmSDaDwrI-IZ0Zq9hLA2tOXpw,182
|
7
|
-
aiagents4pharma/talk2biomodels/tools/ask_question.py,sha256=WYEtNuy-wAuwMbP9W9l0qmcHmIuW1ZFMX7SvoYgkv0A,5530
|
8
|
-
aiagents4pharma/talk2biomodels/tools/model_description.py,sha256=NawUK549IqlC36dUmJjIBI1QGeLpNV-JlBt7AiV2BDs,6295
|
9
|
-
aiagents4pharma/talk2biomodels/tools/plot_figure.py,sha256=8QHH6gA7vI85e8RsWJSX8ZAH_WsuIBGLpYqyr4CllVQ,5648
|
10
|
-
aiagents4pharma/talk2biomodels/tools/simulate_model.py,sha256=phUtNScCZQ281MvcU0N2NMkg4Lb8NmfXiMAVt3ON_UQ,6959
|
11
|
-
aiagents4pharma-1.1.0.dist-info/LICENSE,sha256=IcIbyB1Hyk5ZDah03VNQvJkbNk2hkBCDqQ8qtnCvB4Q,1077
|
12
|
-
aiagents4pharma-1.1.0.dist-info/METADATA,sha256=1HDLcadxRN13sDHaf8W22PEaxrt6SKe7fU0TiznVryg,5460
|
13
|
-
aiagents4pharma-1.1.0.dist-info/WHEEL,sha256=R06PA3UVYHThwHvxuRWMqaGcr-PuniXahwjmQRFMEkY,91
|
14
|
-
aiagents4pharma-1.1.0.dist-info/top_level.txt,sha256=-AH8rMmrSnJtq7HaAObS78UU-cTCwvX660dSxeM7a0A,16
|
15
|
-
aiagents4pharma-1.1.0.dist-info/RECORD,,
|
File without changes
|
File without changes
|