It is difficult to manually polish a text summary until it perfectly meets a specific set of rules and constraints.
The software acts as an automated editor that repeatedly reviews and rewrites a summary based on specific instructions. It continues this cycle until the text meets all the required criteria.
It automates the tedious process of refining writing to ensure it follows strict guidelines consistently.
It was run in the sandbox and it failed. run output shows an error/traceback — the artifact does NOT run clean.
$ python3 critique_refinement_v2.py
Traceback (most recent call last):
File "/work/critique_refinement.py", line 53, in <module>
data = json.load(sys.stdin)
^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/json/__init__.py", line 293, in load
return loads(fp.read(),
^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/json/__init__.py", line 346, in loads
return _default_decoder.decode(s)
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/json/decoder.py", line 338, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/json/decoder.py", line 356, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)No screenshot — there is nothing working to show. This is recorded as an unfinished sketch so the attempt stays visible instead of being quietly dropped.
All of it — 73 lines, one file, standard library only.
#!/usr/bin/env python3
class CritiqueRefiner:
def __init__(self, initial_summary, constraints):
self.summary = initial_summary
self.constraints = constraints
self.iteration = 0
self.max_iterations = 10
self.critique_history = []
def generate_critique(self):
critique = []
# Check length constraint
if len(self.summary) > self.constraints['max_length']:
critique.append(f"Summary exceeds {self.constraints['max_length']} characters")
# Check keyword requirements
missing_keywords = [keyword for keyword in self.constraints['required_keywords'] if keyword not in self.summary]
if missing_keywords:
critique.append(f"Missing required keywords: {', '.join(missing_keywords)}")
# Check style consistency
if 'forbidden_words' in self.constraints:
forbidden_in_summary = [word for word in self.constraints['forbidden_words'] if word in self.summary]
if forbidden_in_summary:
critique.append(f"Forbidden words detected: {', '.join(forbidden_in_summary)}")
return critique
def refine_summary(self, critique):
if not critique:
return False
# Apply fixes
if "Summary exceeds" in critique[0]:
self.summary = self.summary[:self.constraints['max_length']]
elif "Missing required keywords" in critique[0]:
missing = [k for k in self.constraints['required_keywords'] if k not in self.summary]
self.summary += ' ' + ' '.join(missing)
elif "Forbidden words detected" in critique[0]:
forbidden = self.constraints.get('forbidden_words', [])
for word in forbidden:
self.summary = self.summary.replace(word, '')
self.iteration += 1
self.critique_history.append(critique)
return True
def run(self):
while self.iteration < self.max_iterations:
critique = self.generate_critique()
if not critique:
break
self.refine_summary(critique)
return self.summary
if __name__ == "__main__":
# import json
import sys
data = json.loads(sys.stdin.read())
initial_summary = data['initial_summary']
constraints = data['constraints']
# Example demonstrating style consistency check
initial_summary = "This is a passive voice sample text that contains forbidden terms like 'sample' and 'passive'."
constraints = {
'max_length': 100,
'required_keywords': ['example', 'text'],
'forbidden_words': ['sample', 'passive']
}
refiner = CritiqueRefiner(initial_summary, constraints)
optimized_summary = refiner.run()
print("Optimized Summary:")
print(optimized_summary)
print("\nCritique History:")
for i, critique in enumerate(refiner.critique_history):
print(f"Iteration {i+1}: {critique}")