From 5757cd843b27abc49a1072c9d697c2d11a00a5f8 Mon Sep 17 00:00:00 2001 From: kraglik Date: Sat, 7 Dec 2024 21:12:20 +0400 Subject: [PATCH] prioritising maximised dependency resolution --- components/location.yaml | 3 ++- prompt_collapse/builder.py | 24 +++++++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/components/location.yaml b/components/location.yaml index ba171e7..5463795 100644 --- a/components/location.yaml +++ b/components/location.yaml @@ -6,7 +6,8 @@ dependencies: - tags: - daytime - budget: 1 + budget: + e anti_tags: - countryside - nature diff --git a/prompt_collapse/builder.py b/prompt_collapse/builder.py index 0057792..46049ce 100644 --- a/prompt_collapse/builder.py +++ b/prompt_collapse/builder.py @@ -170,14 +170,36 @@ class PromptBuilder: if sort_by_matching_tags: candidates = sorted(candidates, key=lambda c: len(tags & c.tags)) - return next(iter(candidates), None) + + if not candidates: + return None + + top_candidate_match_level = len(tags & candidates[0].tags) + top_match_candidates = [ + c for c in candidates if len(tags & c.tags) == top_candidate_match_level + ] + + return random.choice(top_match_candidates) if candidates: return random.choice(candidates) return None + def satisfy_random_dependency(self): + dependency = random.choice(list(self.dependencies)) + + return self.get_next_candidate_conditional( + set(dependency.tags), sort_by_matching_tags=True + ) + def get_next_candidate(self): + if self.dependencies: + candidate = self.satisfy_random_dependency() + + if candidate: + return candidate + tags = self.get_unfulfilled_tags() anti_tags = self.anti_tags