Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix several bugs in proposal and runner
  • Loading branch information
WinstonLiyt committed Sep 27, 2024
commit e9d77cc864d68809f0c23315303bca9bbc90cfdc
2 changes: 1 addition & 1 deletion rdagent/scenarios/kaggle/developer/feedback.py
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ def generate_feedback(self, exp: Experiment, hypothesis: Hypothesis, trace: Trac
self.scen.vector_base.add_experience_to_vector_base(experiment_feedback)
self.scen.vector_base.save()
elif self.scen.if_using_graph_rag:
self.scen.trace.knowledge_base.load_from_documents([experiment_feedback], self.scen)
trace.knowledge_base.load_from_documents([experiment_feedback], self.scen)

return HypothesisFeedback(
observations=observations,
Expand Down
84 changes: 42 additions & 42 deletions rdagent/scenarios/kaggle/developer/runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,48 @@ def get_cache_key(self, exp: ASpecificExp) -> str:
codes = "\n".join(codes)
return md5_hash(codes)

def extract_model_task_from_code(self, code: str) -> str:
sys_prompt = (
Environment(undefined=StrictUndefined)
.from_string(prompt_dict["extract_model_task_from_code"]["system"])
.render()
)

user_prompt = (
Environment(undefined=StrictUndefined)
.from_string(prompt_dict["extract_model_task_from_code"]["user"])
.render(file_content=code)
)

model_task_description = APIBackend().build_messages_and_create_chat_completion(
user_prompt=user_prompt,
system_prompt=sys_prompt,
json_mode=True,
)

try:
response_json_analysis = json.loads(model_task_description)
task_desc = f"""name: {response_json_analysis['name']}
description: {response_json_analysis['description']}
"""
task_desc += (
f"formulation: {response_json_analysis['formulation']}\n"
if response_json_analysis.get("formulation")
else ""
)
task_desc += f"architecture: {response_json_analysis['architecture']}\n"
task_desc += (
f"variables: {json.dumps(response_json_analysis['variables'], indent=4)}\n"
if response_json_analysis.get("variables")
else ""
)
task_desc += f"hyperparameters: {json.dumps(response_json_analysis['hyperparameters'], indent=4)}\n"
task_desc += f"model_type: {response_json_analysis['model_type']}\n"
except json.JSONDecodeError:
task_desc = "Failed to parse LLM's response as JSON"

return task_desc

def init_develop(self, exp: KGFactorExperiment | KGModelExperiment) -> KGFactorExperiment | KGModelExperiment:
"""
For the initial development, the experiment serves as a benchmark for feature engineering.
Expand Down Expand Up @@ -120,48 +162,6 @@ def develop(self, exp: KGModelExperiment) -> KGModelExperiment:


class KGFactorRunner(KGCachedRunner[KGFactorExperiment]):
def extract_model_task_from_code(self, code: str) -> str:
sys_prompt = (
Environment(undefined=StrictUndefined)
.from_string(prompt_dict["extract_model_task_from_code"]["system"])
.render()
)

user_prompt = (
Environment(undefined=StrictUndefined)
.from_string(prompt_dict["extract_model_task_from_code"]["user"])
.render(file_content=code)
)

model_task_description = APIBackend().build_messages_and_create_chat_completion(
user_prompt=user_prompt,
system_prompt=sys_prompt,
json_mode=True,
)

try:
response_json_analysis = json.loads(model_task_description)
task_desc = f"""name: {response_json_analysis['name']}
description: {response_json_analysis['description']}
"""
task_desc += (
f"formulation: {response_json_analysis['formulation']}\n"
if response_json_analysis.get("formulation")
else ""
)
task_desc += f"architecture: {response_json_analysis['architecture']}\n"
task_desc += (
f"variables: {json.dumps(response_json_analysis['variables'], indent=4)}\n"
if response_json_analysis.get("variables")
else ""
)
task_desc += f"hyperparameters: {json.dumps(response_json_analysis['hyperparameters'], indent=4)}\n"
task_desc += f"model_type: {response_json_analysis['model_type']}\n"
except json.JSONDecodeError:
task_desc = "Failed to parse LLM's response as JSON"

return task_desc

def develop(self, exp: KGFactorExperiment) -> KGFactorExperiment:
if exp.based_experiments and exp.based_experiments[-1].result is None:
exp.based_experiments[-1] = self.init_develop(exp.based_experiments[-1])
Expand Down
33 changes: 17 additions & 16 deletions rdagent/scenarios/kaggle/proposal/proposal.py
Original file line number Diff line number Diff line change
Expand Up @@ -252,14 +252,15 @@ def convert_response(self, response: str) -> ModelHypothesis:
response_dict = json.loads(response)

hypothesis = KGHypothesis(
hypothesis=response_dict["hypothesis"],
reason=response_dict["reason"],
concise_reason=response_dict["concise_reason"],
concise_observation=response_dict["concise_observation"],
concise_justification=response_dict["concise_justification"],
concise_knowledge=response_dict["concise_knowledge"],
action=response_dict["action"],
hypothesis=response_dict.get("hypothesis", "Hypothesis not provided"),
reason=response_dict.get("reason", "Reason not provided"),
concise_reason=response_dict.get("concise_reason", "Concise reason not provided"),
concise_observation=response_dict.get("concise_observation", "Concise observation not provided"),
concise_justification=response_dict.get("concise_justification", "Concise justification not provided"),
concise_knowledge=response_dict.get("concise_knowledge", "Concise knowledge not provided"),
action=response_dict.get("action", "Action not provided"),
)

return hypothesis


Expand Down Expand Up @@ -309,10 +310,10 @@ def convert_feature_experiment(self, response: str, trace: Trace) -> KGFactorExp
variables = response_dict[factor_name]["variables"]
tasks.append(
FactorTask(
factor_name=factor_name,
factor_description=description,
factor_formulation=formulation,
variables=variables,
factor_name=response_dict.get("factor_name", "Factor name not provided"),
factor_description=response_dict.get("factor_description", "Factor description not provided"),
factor_formulation=response_dict.get("factor_formulation", "Factor formulation not provided"),
variables=response_dict.get("variables", "Variables not provided"),
version=2,
)
)
Expand All @@ -327,11 +328,11 @@ def convert_model_experiment(self, response: str, trace: Trace) -> KGModelExperi
tasks = []
tasks.append(
ModelTask(
name=response_dict["model_name"],
description=response_dict["description"],
architecture=response_dict["architecture"],
hyperparameters=response_dict["hyperparameters"],
model_type=response_dict["model_type"],
name=response_dict.get("model_name", "Model name not provided"),
description=response_dict.get("description", "Description not provided"),
architecture=response_dict.get("architecture", "Architecture not provided"),
hyperparameters=response_dict.get("hyperparameters", "Hyperparameters not provided"),
model_type=response_dict.get("model_type", "Model type not provided"),
version=2,
)
)
Expand Down