factor extraction pipeline ready (#16)

* run the code

* update code

* remove some redundant code

---------

Co-authored-by: xuyang1 <xuyang1@microsoft.com>
This commit is contained in:
Xu Yang
2024-06-05 15:36:15 +08:00
committed by GitHub
parent 62a2f7a742
commit 1e77557293
30 changed files with 633 additions and 440 deletions
@@ -3,28 +3,28 @@ from __future__ import annotations
import re
from typing import List
from pandas.core.api import DataFrame as DataFrame
from core.evolving_framework import Evaluator as EvolvingEvaluator
from core.evolving_framework import Feedback, QueriedKnowledge
from core.log import FinCoLog
from core.utils import multiprocessing_wrapper
from factor_implementation.evolving.evolvable_subjects import (
FactorImplementationList,
)
from factor_implementation.share_modules.conf import FactorImplementSettings
from factor_implementation.share_modules.evaluator import (
from rdagent.core.evolving_framework import Evaluator as EvolvingEvaluator
from rdagent.core.evolving_framework import Feedback, QueriedKnowledge
from rdagent.core.log import FinCoLog
from rdagent.core.utils import multiprocessing_wrapper
from rdagent.factor_implementation.evolving.evolvable_subjects import FactorImplementationList
from rdagent.factor_implementation.share_modules.evaluator import (
Evaluator as FactorImplementationEvaluator,
)
from factor_implementation.share_modules.evaluator import (
from rdagent.factor_implementation.share_modules.evaluator import (
FactorImplementationCodeEvaluator,
FactorImplementationFinalDecisionEvaluator,
FactorImplementationValueEvaluator,
)
from factor_implementation.share_modules.factor import (
from rdagent.factor_implementation.share_modules.factor import (
FactorImplementation,
FactorImplementationTask,
)
from pandas.core.api import DataFrame as DataFrame
from rdagent.factor_implementation.share_modules.factor_implementation_config import (
FactorImplementSettings,
)
class FactorImplementationSingleFeedback:
@@ -1,8 +1,8 @@
from __future__ import annotations
from core.evolving_framework import EvolvableSubjects
from core.log import FinCoLog
from factor_implementation.share_modules.factor import (
from rdagent.core.evolving_framework import EvolvableSubjects
from rdagent.core.log import FinCoLog
from rdagent.factor_implementation.share_modules.factor import (
FactorImplementation,
FactorImplementationTask,
)
@@ -1,26 +1,29 @@
from __future__ import annotations
import json
from pathlib import Path
import random
from abc import abstractmethod
from copy import deepcopy
from typing import TYPE_CHECKING
from jinja2 import Template
from core.evolving_framework import EvolvingStrategy, QueriedKnowledge
from core.utils import multiprocessing_wrapper
from factor_implementation.share_modules.conf import FactorImplementSettings
from factor_implementation.share_modules.factor import (
from rdagent.core.evolving_framework import EvolvingStrategy, QueriedKnowledge
from rdagent.core.utils import multiprocessing_wrapper
from rdagent.factor_implementation.share_modules.factor import (
FactorImplementation,
FactorImplementationTask,
FileBasedFactorImplementation,
)
from factor_implementation.share_modules.prompt import (
FactorImplementationPrompts,
from rdagent.core.prompts import Prompts
from jinja2 import Template
from rdagent.oai.llm_utils import APIBackend
from rdagent.factor_implementation.share_modules.factor_implementation_config import (
FactorImplementSettings,
)
from rdagent.factor_implementation.share_modules.factor_implementation_utils import (
get_data_folder_intro,
)
from factor_implementation.share_modules.utils import get_data_folder_intro
from oai.llm_utils import APIBackend
if TYPE_CHECKING:
from factor_implementation.evolving.evolvable_subjects import (
@@ -115,7 +118,9 @@ class FactorEvolvingStrategy(MultiProcessEvolvingStrategy):
queried_former_failed_knowledge_to_render = queried_former_failed_knowledge
system_prompt = Template(
FactorImplementationPrompts()["evolving_strategy_factor_implementation_v1_system"],
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_factor_implementation_v1_system"
],
).render(
data_info=get_data_folder_intro(),
queried_former_failed_knowledge=queried_former_failed_knowledge_to_render,
@@ -128,7 +133,9 @@ class FactorEvolvingStrategy(MultiProcessEvolvingStrategy):
while True:
user_prompt = (
Template(
FactorImplementationPrompts()["evolving_strategy_factor_implementation_v1_user"],
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_factor_implementation_v1_user"
],
)
.render(
factor_information_str=factor_information_str,
@@ -202,7 +209,9 @@ class FactorEvolvingStrategyWithGraph(MultiProcessEvolvingStrategy):
queried_former_failed_knowledge_to_render = queried_former_failed_knowledge
system_prompt = Template(
FactorImplementationPrompts()["evolving_strategy_factor_implementation_v1_system"],
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_factor_implementation_v1_system"
],
).render(
data_info=get_data_folder_intro(),
queried_former_failed_knowledge=queried_former_failed_knowledge_to_render,
@@ -222,7 +231,11 @@ class FactorEvolvingStrategyWithGraph(MultiProcessEvolvingStrategy):
and len(queried_former_failed_knowledge_to_render) != 0
):
error_summary_system_prompt = (
Template(FactorImplementationPrompts()["evolving_strategy_error_summary_v2_system"])
Template(
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_error_summary_v2_system"
]
)
.render(
factor_information_str=target_factor_task_information,
code_and_feedback=queried_former_failed_knowledge_to_render[
@@ -236,7 +249,11 @@ class FactorEvolvingStrategyWithGraph(MultiProcessEvolvingStrategy):
)
while True:
error_summary_user_prompt = (
Template(FactorImplementationPrompts()["evolving_strategy_error_summary_v2_user"])
Template(
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_error_summary_v2_user"
]
)
.render(
queried_similar_component_knowledge=queried_similar_component_knowledge_to_render,
)
@@ -256,7 +273,9 @@ class FactorEvolvingStrategyWithGraph(MultiProcessEvolvingStrategy):
user_prompt = (
Template(
FactorImplementationPrompts()["evolving_strategy_factor_implementation_v2_user"],
Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")[
"evolving_strategy_factor_implementation_v2_user"
],
)
.render(
factor_information_str=target_factor_task_information,
@@ -4,32 +4,29 @@ import subprocess
from pathlib import Path
import pandas as pd
from fire.core import Fire
from tqdm import tqdm
from core.evolving_framework import EvoAgent, KnowledgeBase
from core.utils import multiprocessing_wrapper
from factor_implementation.evolving.evaluators import (
from rdagent.core.evolving_framework import EvoAgent, KnowledgeBase
from rdagent.core.utils import multiprocessing_wrapper
from rdagent.factor_implementation.evolving.evaluators import (
FactorImplementationEvaluatorV1,
FactorImplementationsMultiEvaluator,
)
from factor_implementation.evolving.evolvable_subjects import (
FactorImplementationList,
)
from factor_implementation.evolving.evolving_strategy import (
from rdagent.factor_implementation.evolving.evolvable_subjects import FactorImplementationList
from rdagent.factor_implementation.evolving.evolving_strategy import (
FactorEvolvingStrategy,
FactorEvolvingStrategyWithGraph,
)
from factor_implementation.evolving.knowledge_management import (
from rdagent.factor_implementation.evolving.knowledge_management import (
FactorImplementationGraphKnowledgeBase,
FactorImplementationGraphRAGStrategy,
FactorImplementationKnowledgeBaseV1,
FactorImplementationRAGStrategyV1,
)
from factor_implementation.share_modules.factor import (
from rdagent.factor_implementation.share_modules.factor import (
FactorImplementationTask,
FileBasedFactorImplementation,
)
from fire.core import Fire
from tqdm import tqdm
ALPHA101_INIT_COMPONENTS = [
"1. abs(): absolute value to certain columns",
@@ -107,11 +104,17 @@ class FactorImplementationEvolvingCli:
def load_or_init_knowledge_base(self, former_knowledge_base_path: Path = None, component_init_list: list = []):
if former_knowledge_base_path is not None and former_knowledge_base_path.exists():
factor_knowledge_base = pickle.load(open(former_knowledge_base_path, "rb"))
if self.evolving_version == 1 and not isinstance(
factor_knowledge_base, FactorImplementationKnowledgeBaseV1,
) or self.evolving_version == 2 and not isinstance(
factor_knowledge_base,
FactorImplementationGraphKnowledgeBase,
if (
self.evolving_version == 1
and not isinstance(
factor_knowledge_base,
FactorImplementationKnowledgeBaseV1,
)
or self.evolving_version == 2
and not isinstance(
factor_knowledge_base,
FactorImplementationGraphKnowledgeBase,
)
):
raise ValueError("The former knowledge base is not compatible with the current version")
else:
@@ -259,7 +262,11 @@ class FactorImplementationEvolvingCli:
print([feedback.final_decision if feedback is not None else None for feedback in feedbacks].count(True))
def implement_amc(
self, evo_sub_path_str, former_knowledge_base_path_str, implementation_dump_path_str, slice_index,
self,
evo_sub_path_str,
former_knowledge_base_path_str,
implementation_dump_path_str,
slice_index,
):
factor_implementations: FactorImplementationList = pickle.load(open(evo_sub_path_str, "rb"))
factor_implementations.target_factor_tasks = factor_implementations.target_factor_tasks[
@@ -8,10 +8,7 @@ from itertools import combinations
from pathlib import Path
from typing import Union
from finco.graph import UndirectedGraph, UndirectedNode
from jinja2 import Template
from core.evolving_framework import (
from rdagent.core.evolving_framework import (
EvolvableSubjects,
EvoStep,
Knowledge,
@@ -19,19 +16,20 @@ from core.evolving_framework import (
QueriedKnowledge,
RAGStrategy,
)
from core.log import FinCoLog
from factor_implementation.evolving.evaluators import (
FactorImplementationSingleFeedback,
)
from factor_implementation.share_modules.conf import FactorImplementSettings
from factor_implementation.share_modules.factor import (
from rdagent.core.log import FinCoLog
from rdagent.factor_implementation.evolving.evaluators import FactorImplementationSingleFeedback
from rdagent.factor_implementation.share_modules.factor import (
FactorImplementation,
FactorImplementationTask,
)
from factor_implementation.share_modules.prompt import (
FactorImplementationPrompts,
from rdagent.core.prompts import Prompts
from rdagent.knowledge_management.graph import UndirectedGraph, UndirectedNode
from jinja2 import Template
from rdagent.oai.llm_utils import APIBackend, calculate_embedding_distance_between_str_list
from rdagent.factor_implementation.share_modules.factor_implementation_config import (
FactorImplementSettings,
)
from oai.llm_utils import APIBackend, calculate_embedding_distance_between_str_list
class FactorImplementationKnowledge(Knowledge):
@@ -187,9 +185,9 @@ class FactorImplementationRAGStrategyV1(RAGStrategy):
)[-1]
for index in similar_indexes
]
queried_knowledge.working_task_to_similar_successful_knowledge_dict[
target_factor_task_information
] = similar_successful_knowledge
queried_knowledge.working_task_to_similar_successful_knowledge_dict[target_factor_task_information] = (
similar_successful_knowledge
)
return queried_knowledge
@@ -212,7 +210,7 @@ class FactorImplementationGraphRAGStrategy(RAGStrategy):
def __init__(self, knowledgebase: FactorImplementationGraphKnowledgeBase) -> None:
super().__init__(knowledgebase)
self.current_generated_trace_count = 0
self.prompt = FactorImplementationPrompts()
self.prompt = Prompts(file_path=Path(__file__).parent.parent / "prompts.yaml")
def generate_knowledge(
self,