Compare commits

..

2 commits

Author SHA1 Message Date
2da0b90b1b
feat: Limit Trump mentions based on previous titles
Some checks are pending
Create and publish a Docker image / build-and-push-image (push) Waiting to run
2025-07-22 05:50:42 +02:00
a8958c76fb
feat: Limit repository get_all to maximum entries
Can simply pass an int and will limit the sql to that amount.
2025-07-22 05:50:41 +02:00
4 changed files with 39 additions and 16 deletions

View file

@ -17,7 +17,7 @@ class IImprovementRepo(Protocol):
def get(self, id: str) -> Improvement:
raise NotImplementedError
def get_all(self) -> list[Improvement]:
def get_all(self, last_n: int | None = None) -> list[Improvement]:
raise NotImplementedError
def remove(self, id: str) -> Improvement:

View file

@ -5,7 +5,9 @@ from prophet.domain.original import Original
class LLMClient(Protocol):
def rewrite(self, original: Original) -> Improvement:
def rewrite(
self, original: Original, previous_titles: list[str] | None = None
) -> Improvement:
raise NotImplementedError
def rewrite_title(

View file

@ -48,15 +48,22 @@ class ImprovementSupaRepo(IImprovementRepo):
)
@override
def get_all(self) -> list[Improvement]:
return [
self._from_tbl_row(row)
for row in self.client.table(self.config.TABLE)
.select("*")
.order("date_orig_ts", desc=True)
.execute()
.data
]
def get_all(self, last_n: int | None = None) -> list[Improvement]:
if not last_n:
sql = (
self.client.table(self.config.TABLE)
.select("*")
.order("date_orig_ts", desc=True)
)
else:
sql = (
self.client.table(self.config.TABLE)
.select("*")
.order("date_orig_ts", desc=True)
.limit(last_n)
)
return [self._from_tbl_row(row) for row in sql.execute().data]
@override
def remove(self, id: str) -> Improvement:
@ -110,6 +117,7 @@ class ImprovementSupaRepo(IImprovementRepo):
if __name__ == "__main__":
# response = supabase.table("improvements").select("*").execute()
repo = ImprovementSupaRepo()
print("latest entries:\n- ", "\n- ".join([imp.title for imp in repo.get_all(3)]))
# from prophet.app import grab_latest_originals
# latest = grab_latest_originals()

View file

@ -21,7 +21,9 @@ class GroqClient(LLMClient):
self.client = client if client else Groq(api_key=self.config_ai.API_KEY)
@override
def rewrite(self, original: Original) -> Improvement:
def rewrite(
self, original: Original, previous_titles: list[str] | None = None
) -> Improvement:
suggestions = self.get_alternative_title_suggestions(original.title)
new_title = self.rewrite_title(original.title, suggestions)
new_summary = self.rewrite_summary(original, new_title)
@ -30,18 +32,22 @@ class GroqClient(LLMClient):
@override
def get_alternative_title_suggestions(
self, original_content: str, custom_prompt: str | None = None
self,
original_content: str,
previous_titles: list[str] | None = None,
custom_prompt: str | None = None,
) -> str:
prompt = (
custom_prompt
if custom_prompt
else """
else f"""
Political context: We are in the year 2025, Donald Trump is
President of the United States again. There has been a crackdown on
'illegal' immigration, with controversial disappearings happening
almost every day. Many are calling the United States an
increasingly fascist state.
almost every day by masked ICE agents. Many view the United States
as an increasingly fascist state, and the disappearings fueled by
racism.
You are a comedy writer at a left-leaning satirical newspaper.
Improve on the following satirical headline. Your new headline is
@ -49,6 +55,13 @@ class GroqClient(LLMClient):
It should be roughly the length of the original headline. Print
only new suggestions, with one suggestion on each line.
Do not create a headline naming Trump if more than 2 of the
previous headlines already do so and he is not specifically
referenced in the original headline.
{"The previous 5 headlines you created are the following:\n- " if previous_titles else ""}
{"\n- ".join(previous_titles) if previous_titles else ""}
"""
)
suggestions = self.client.chat.completions.create(