From ec76729b74ac906c50f03d1c701d9b58cb40e14d Mon Sep 17 00:00:00 2001 From: Benjamin Chang Date: Mon, 2 Jun 2025 20:54:56 -0700 Subject: [PATCH 1/4] fixed error where all folders were named dry AMD --- .gitignore | 1 + robin/configuration.py | 26 +++++++++++++++----------- robin/utils.py | 6 +++++- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index b48e65c..fce4a63 100644 --- a/.gitignore +++ b/.gitignore @@ -100,6 +100,7 @@ coverage.xml .hypothesis/ .tox/ htmlcov/ +scratchpad.ipynb # Documentation docs/_build/ diff --git a/robin/configuration.py b/robin/configuration.py index 8c078c5..15b7226 100644 --- a/robin/configuration.py +++ b/robin/configuration.py @@ -59,10 +59,6 @@ def get_default_llm_config(): return copy.deepcopy(_DEFAULT_LLM_CONFIG_DATA) -DEFAULT_DISEASE_NAME = "dry age-related macular degeneration" -DEFAULT_FOLDER_NAME = f"{DEFAULT_DISEASE_NAME[:70].replace(" ", "_")}_{datetime.now().strftime("%Y-%m-%d_%H-%M")}" - - def _get_prompt_args(template_string: str) -> set[str]: """ Extracts root variable names from f-string like placeholders (e.g., {variable}) @@ -236,22 +232,22 @@ def validate_all_prompts(self) -> "Prompts": class AgentConfig(BaseModel): assay_lit_search_agent: JobNames = Field( - default=JobNames.CROW, + default=JobNames.CHIMP, description="Agent to use for literature search during assay idea generation.", ) assay_hypothesis_report_agent: JobNames = Field( - default=JobNames.CROW, + default=JobNames.CHIMP, description="Agent to use for generating detailed reports on assay hypotheses.", ) candidate_lit_search_agent: JobNames = Field( - default=JobNames.CROW, + default=JobNames.CHIMP, description=( "Agent to use for literature search during therapeutic candidate idea" " generation." ), ) candidate_hypothesis_report_agent: JobNames = Field( - default=JobNames.FALCON, + default=JobNames.CHIMP, description=( "Agent to use for generating detailed reports on therapeutic candidates." ), @@ -276,10 +272,10 @@ class Config: default=5, description="Number of candidates to generate for each query." ) disease_name: str = Field( - default=DEFAULT_DISEASE_NAME, description="Name of the disease to focus on." + default="input_disease", description="Name of the disease to focus on." ) - run_folder_name: str = Field( - default=DEFAULT_FOLDER_NAME, + run_folder_name: str | None = Field( + default=None, description="Name of the folder where results will be stored.", ) @@ -290,6 +286,14 @@ class Config: _fh_client: FutureHouseClient | None = PrivateAttr(default=None) _llm_client: LiteLLMModel | None = PrivateAttr(default=None) + @model_validator(mode="after") + def set_run_folder_name_default(self) -> "RobinConfiguration": + if self.run_folder_name is None: + disease_part = self.disease_name[:70].replace(" ", "_") + timestamp_part = datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + self.run_folder_name = f"{disease_part}_{timestamp_part}" + return self + @property def fh_client(self) -> FutureHouseClient: if self._fh_client is None: diff --git a/robin/utils.py b/robin/utils.py index 1e0f419..bffa3e7 100644 --- a/robin/utils.py +++ b/robin/utils.py @@ -251,6 +251,7 @@ def save_crow_files( query_text = item.get("query", "").strip() answer_text = item.get("answer", "").strip() sources_text = item.get("sources", "").strip() + task_id_text = item.get("task_run_id", "").strip() file_number = i + 1 @@ -274,6 +275,7 @@ def save_crow_files( content = f"Hypothesis: {hypothesis_text}\n\n" content += f"Query: {query_text}\n\n" content += f"{answer_text}\n\n" + content += f"Full trajectory link: https://platform.futurehouse.org/trajectories/{task_id_text}\n\n" content += f"References:\n{sources_text}\n" try: @@ -297,6 +299,7 @@ def save_falcon_files( for i, item in enumerate(data_list): hypothesis_text = item.get("hypothesis", "").strip() formatted_output_text = item.get("formatted_output", "").strip() + task_id_text = item.get("task_run_id", "").strip() file_number = i + 1 @@ -316,7 +319,8 @@ def save_falcon_files( filepath = run_dir_path / filename content = f"Proposal for {hypothesis_text}\n\n" - content += f"{formatted_output_text}" + content += f"{formatted_output_text}\n\n" + content += f"Full trajectory link: https://platform.futurehouse.org/trajectories/{task_id_text}\n" try: filepath.write_text(content, encoding="utf-8") From 5db730e1b4976de476e21ba6769720c4becdb14f Mon Sep 17 00:00:00 2001 From: Benjamin Chang Date: Mon, 2 Jun 2025 20:59:17 -0700 Subject: [PATCH 2/4] forgot to take out chimp --- robin/configuration.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/robin/configuration.py b/robin/configuration.py index 15b7226..5d95933 100644 --- a/robin/configuration.py +++ b/robin/configuration.py @@ -232,22 +232,22 @@ def validate_all_prompts(self) -> "Prompts": class AgentConfig(BaseModel): assay_lit_search_agent: JobNames = Field( - default=JobNames.CHIMP, + default=JobNames.CROW, description="Agent to use for literature search during assay idea generation.", ) assay_hypothesis_report_agent: JobNames = Field( - default=JobNames.CHIMP, + default=JobNames.CROW, description="Agent to use for generating detailed reports on assay hypotheses.", ) candidate_lit_search_agent: JobNames = Field( - default=JobNames.CHIMP, + default=JobNames.CROW, description=( "Agent to use for literature search during therapeutic candidate idea" " generation." ), ) candidate_hypothesis_report_agent: JobNames = Field( - default=JobNames.CHIMP, + default=JobNames.FALCON, description=( "Agent to use for generating detailed reports on therapeutic candidates." ), From 455af699fd796a1392aab9d434c5f9d4a4d633dc Mon Sep 17 00:00:00 2001 From: Benjamin Chang Date: Mon, 2 Jun 2025 21:49:56 -0700 Subject: [PATCH 3/4] updated description of run_folder_name for None condition --- robin/configuration.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/robin/configuration.py b/robin/configuration.py index 5d95933..999b50d 100644 --- a/robin/configuration.py +++ b/robin/configuration.py @@ -275,10 +275,13 @@ class Config: default="input_disease", description="Name of the disease to focus on." ) run_folder_name: str | None = Field( - default=None, - description="Name of the folder where results will be stored.", + default=None, + description=( + "Name of the folder where results will be stored. " + "If not provided or None, it will be auto-generated " + "using the disease_name and the timestamp." + ), ) - futurehouse_api_key: str = "insert_futurehouse_api_key_here" llm_name: str = "o4-mini" llm_config: dict | None = Field(default_factory=get_default_llm_config) From 5dc23bac9f7747b6fd4afdaef52e70f4396a5e65 Mon Sep 17 00:00:00 2001 From: Benjamin Chang Date: Mon, 2 Jun 2025 21:52:33 -0700 Subject: [PATCH 4/4] fixed trailing whitespace --- robin/configuration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robin/configuration.py b/robin/configuration.py index 999b50d..6ab9bab 100644 --- a/robin/configuration.py +++ b/robin/configuration.py @@ -275,7 +275,7 @@ class Config: default="input_disease", description="Name of the disease to focus on." ) run_folder_name: str | None = Field( - default=None, + default=None, description=( "Name of the folder where results will be stored. " "If not provided or None, it will be auto-generated "