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.
@@ -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
- st_session_key (str): The Streamlit session key.
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 for simulating a model."
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
- st_session_key: str = None):
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
- st_session_key (str): The Streamlit session key
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.1.0
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: copasi-basico==0.78
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,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.5.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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,,