working checkpoint before caching attempt

This commit is contained in:
2026-01-02 16:13:06 -07:00
parent 5cea0ba44c
commit 6dc8672dd8
6 changed files with 144 additions and 16 deletions

View File

@@ -4,5 +4,6 @@ Topics can be diverse.
The prompts should be between 500 and 1000 characters.
The previous 60 prompts have been provided as a JSON array for reference. Attempt minimal repetition, but some thematic overlap is acceptable. Newly generated prompts should try extra hard to avoid repetition in previous prompts with the lowest indices.
Output as a JSON array with key names from "newprompt0" to "newprompt5".
Output as a JSON array with key names from "newprompt0" to "newpromptN" where N is the number of prompts minus one.
Respond ONLY with valid JSON. No explanations, no markdown, no backticks.

View File

@@ -8,6 +8,7 @@ import os
import json
import sys
import argparse
import configparser
from datetime import datetime
from typing import List, Dict, Any, Optional
from pathlib import Path
@@ -31,9 +32,11 @@ class JournalPromptGenerator:
self.client = None
self.historic_prompts = []
self.prompt_template = ""
self.settings = {}
# Load configuration
self._load_config()
self._load_settings()
# Load data files
self._load_prompt_template()
@@ -62,11 +65,61 @@ class JournalPromptGenerator:
base_url=self.base_url
)
def _load_settings(self):
"""Load settings from settings.cfg configuration file."""
config = configparser.ConfigParser()
# Set default values
self.settings = {
'min_length': 500,
'max_length': 1000,
'num_prompts': 6
}
try:
config.read('settings.cfg')
if 'prompts' in config:
prompts_section = config['prompts']
# Load min_length
if 'min_length' in prompts_section:
self.settings['min_length'] = int(prompts_section['min_length'])
# Load max_length
if 'max_length' in prompts_section:
self.settings['max_length'] = int(prompts_section['max_length'])
# Load num_prompts
if 'num_prompts' in prompts_section:
self.settings['num_prompts'] = int(prompts_section['num_prompts'])
except FileNotFoundError:
self.console.print("[yellow]Warning: settings.cfg not found, using default values[/yellow]")
except ValueError as e:
self.console.print(f"[yellow]Warning: Invalid value in settings.cfg: {e}, using default values[/yellow]")
except Exception as e:
self.console.print(f"[yellow]Warning: Error reading settings.cfg: {e}, using default values[/yellow]")
def _load_prompt_template(self):
"""Load the prompt template from ds_prompt.txt."""
"""Load the prompt template from ds_prompt.txt and update with config values."""
try:
with open("ds_prompt.txt", "r") as f:
self.prompt_template = f.read()
template = f.read()
# Replace hardcoded values with config values
template = template.replace(
"between 500 and 1000 characters",
f"between {self.settings['min_length']} and {self.settings['max_length']} characters"
)
# Replace the number of prompts (6) with config value
template = template.replace(
"Please generate 6 writing prompts",
f"Please generate {self.settings['num_prompts']} writing prompts"
)
self.prompt_template = template
except FileNotFoundError:
self.console.print("[red]Error: ds_prompt.txt not found[/red]")
sys.exit(1)
@@ -154,7 +207,7 @@ class JournalPromptGenerator:
def _parse_ai_response(self, response_content: str) -> List[Dict[str, str]]:
"""
Parse the AI response to extract new prompts.
Expected format: JSON array with keys "newprompt0" to "newprompt5"
Expected format: JSON array with keys "newprompt0" to "newpromptN" where N = num_prompts-1
"""
try:
# Try to parse as JSON
@@ -162,7 +215,7 @@ class JournalPromptGenerator:
# Convert to list of prompt dictionaries
new_prompts = []
for i in range(6):
for i in range(self.settings['num_prompts']):
key = f"newprompt{i}"
if key in data:
prompt_text = data[key]
@@ -176,12 +229,14 @@ class JournalPromptGenerator:
except json.JSONDecodeError:
# If not valid JSON, try to extract prompts from text
self.console.print("[yellow]Warning: AI response is not valid JSON, attempting to extract prompts...[/yellow]")
self.console.print(f"[yellow]Full response content for debugging:[/yellow]")
self.console.print(f"[yellow]{response_content}[/yellow]")
# Look for patterns in the text
lines = response_content.strip().split('\n')
new_prompts = []
for i, line in enumerate(lines[:6]): # Take first 6 non-empty lines
for i, line in enumerate(lines[:self.settings['num_prompts']]): # Take first N non-empty lines
line = line.strip()
if line and len(line) > 50: # Reasonable minimum length for a prompt
prompt_obj = {

View File

@@ -5,7 +5,7 @@
[prompts]
min_length = 500
max_length = 1000
num_prompts = 3
num_prompts = 8
# Prefetch not yet implmented
[prefetch]

View File

@@ -8,6 +8,7 @@ import os
import json
import sys
import argparse
import configparser
from datetime import datetime
from typing import List, Dict, Any
@@ -24,9 +25,11 @@ class SimplePromptGenerator:
self.client = None
self.historic_prompts = []
self.prompt_template = ""
self.settings = {}
# Load configuration
self._load_config()
self._load_settings()
# Load data files
self._load_prompt_template()
@@ -55,11 +58,61 @@ class SimplePromptGenerator:
base_url=self.base_url
)
def _load_settings(self):
"""Load settings from settings.cfg configuration file."""
config = configparser.ConfigParser()
# Set default values
self.settings = {
'min_length': 500,
'max_length': 1000,
'num_prompts': 6
}
try:
config.read('settings.cfg')
if 'prompts' in config:
prompts_section = config['prompts']
# Load min_length
if 'min_length' in prompts_section:
self.settings['min_length'] = int(prompts_section['min_length'])
# Load max_length
if 'max_length' in prompts_section:
self.settings['max_length'] = int(prompts_section['max_length'])
# Load num_prompts
if 'num_prompts' in prompts_section:
self.settings['num_prompts'] = int(prompts_section['num_prompts'])
except FileNotFoundError:
print("Warning: settings.cfg not found, using default values")
except ValueError as e:
print(f"Warning: Invalid value in settings.cfg: {e}, using default values")
except Exception as e:
print(f"Warning: Error reading settings.cfg: {e}, using default values")
def _load_prompt_template(self):
"""Load the prompt template from ds_prompt.txt."""
"""Load the prompt template from ds_prompt.txt and update with config values."""
try:
with open("ds_prompt.txt", "r") as f:
self.prompt_template = f.read()
template = f.read()
# Replace hardcoded values with config values
template = template.replace(
"between 500 and 1000 characters",
f"between {self.settings['min_length']} and {self.settings['max_length']} characters"
)
# Replace the number of prompts (6) with config value
template = template.replace(
"Please generate 6 writing prompts",
f"Please generate {self.settings['num_prompts']} writing prompts"
)
self.prompt_template = template
except FileNotFoundError:
print("Error: ds_prompt.txt not found")
sys.exit(1)
@@ -100,7 +153,7 @@ class SimplePromptGenerator:
# Convert to list of prompt dictionaries
new_prompts = []
for i in range(6):
for i in range(self.settings['num_prompts']):
key = f"newprompt{i}"
if key in data:
prompt_text = data[key]
@@ -119,7 +172,7 @@ class SimplePromptGenerator:
lines = response_content.strip().split('\n')
new_prompts = []
for i, line in enumerate(lines[:6]):
for i, line in enumerate(lines[:self.settings['num_prompts']]):
line = line.strip()
if line and len(line) > 50:
prompt_obj = {
@@ -226,7 +279,7 @@ def main():
parser.add_argument(
"--save", "-S",
type=int,
help="Save a specific prompt number to file (1-6)"
help="Save a specific prompt number to file"
)
parser.add_argument(
"--config", "-c",

View File

@@ -80,8 +80,8 @@ def test_prompt_template():
if len(content) > 0:
print(f" ✓ ds_prompt.txt is readable ({len(content)} characters)")
# Check for key phrases
key_phrases = ["6 writing prompts", "500 and 1000 characters", "JSON array"]
# Check for key phrases (now configurable, so just check for basic structure)
key_phrases = ["writing prompts", "characters", "JSON array"]
found_phrases = []
for phrase in key_phrases:
if phrase.lower() in content.lower():

View File

@@ -4,11 +4,29 @@ Test script to verify the prompt numbering logic.
"""
import json
import configparser
from datetime import datetime
def get_num_prompts():
"""Get the number of prompts from settings.cfg or default."""
config = configparser.ConfigParser()
num_prompts = 6 # Default value
try:
config.read('settings.cfg')
if 'prompts' in config and 'num_prompts' in config['prompts']:
num_prompts = int(config['prompts']['num_prompts'])
except (FileNotFoundError, ValueError):
pass
return num_prompts
def test_renumbering():
"""Test the renumbering logic."""
# Get number of prompts from config
num_prompts = get_num_prompts()
# Create a sample historic prompts list
historic_prompts = []
for i in range(60):
@@ -19,10 +37,11 @@ def test_renumbering():
print(f"Original prompts: {len(historic_prompts)}")
print(f"First prompt key: {list(historic_prompts[0].keys())[0]}")
print(f"Last prompt key: {list(historic_prompts[-1].keys())[0]}")
print(f"Number of prompts from config: {num_prompts}")
# Simulate adding 6 new prompts (as the current code would create them)
# Simulate adding new prompts (as the current code would create them)
new_prompts = []
for i in range(6):
for i in range(num_prompts):
new_prompts.append({
f"prompt{len(historic_prompts) + i:02d}": f"New prompt {i}"
})