Skip to content
Merged
Changes from all commits
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
28 changes: 14 additions & 14 deletions sources/core/workflow_selection.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,37 +12,37 @@ def __init__(self, config: Config) -> None:
self.config = config
self.workflows_folder = Path(config.workflow_dir)
self.workflows_info = self.discover_workflows()
self.model = SentenceTransformer("all-MiniLM-L6-v2")
self.model = SentenceTransformer("all-MiniLM-L6-v2", token=False)

def discover_workflows(self) -> dict[str, WorkflowInfo]:
workflows = {}

if not self.workflows_folder.exists():
print(f"Workflows directory {self.workflows_folder} does not exist.")
return workflows

for workflow_folder in self.workflows_folder.iterdir():
if not workflow_folder.is_dir():
continue

uuid = workflow_folder.name
workflow_info = WorkflowInfo(uuid, workflow_folder)

if not workflow_info.is_valid():
continue

# Check if state_result is empty
if not workflow_info.load_state_result():
print(f"Skipping workflow {uuid}: empty state_result.json")
continue

workflow_info.load_code()
if not workflow_info.code:
print(f"Skipping workflow {uuid}: unable to load code")
continue

workflows[uuid] = workflow_info

return workflows

def cosine_similarity(self, a: str, b: str) -> float:
Expand All @@ -61,12 +61,12 @@ def sort_similar_workflows(
self, goal: str, threshold=0.8, debug=False
) -> list[WorkflowInfo]:
"""Find workflows with similar goals using original unwrapped tasks.

Args:
goal: The task to match against (will be compared with original_task of workflows)
threshold: Minimum similarity score (0.0-1.0)
debug: Whether to print debug information

Returns:
list[WorkflowInfo]: Workflows sorted by similarity, filtered by threshold
"""
Expand All @@ -75,28 +75,28 @@ def sort_similar_workflows(
if not self.workflows_info:
print("No workflows found.")
return []

# Use original_task for comparison to avoid knowledge wrapper interference
similar_workflows = sorted(
self.workflows_info.values(),
key=lambda wf: self.cosine_similarity(wf.original_task[-512:], goal[-512:]),
reverse=True,
)

if debug:
for wf in similar_workflows:
sim = self.cosine_similarity(wf.original_task[-512:], goal[-512:])
print(f"UUID: {wf.uuid}\n"
f"Original Task:\n{wf.original_task[:512]}\n"
f"Target:\n{goal[:512]}\n"
f"Similarity: {sim:.4f}\n---\n")

return [
wf
for wf in similar_workflows
if self.cosine_similarity(wf.original_task[-512:], goal[-512:]) >= threshold
]

def sort_workflows_by_score(
self, workflows_info: list[WorkflowInfo], threshold: float
) -> list[WorkflowInfo]:
Expand Down