added zero weight feedback ignore

This commit is contained in:
2026-01-03 23:12:22 -07:00
parent d32cfe04e1
commit 60b03f5f4b
9 changed files with 610 additions and 180 deletions

View File

@@ -1052,36 +1052,46 @@ The API call sequence has been successfully optimized to:
3. Generate new feedback words after user rating
4. Refresh all UI elements
## Feedback Historic Indexing Bug Fix ✓ COMPLETED
## Weight 0 Filtering in Prompt Generation ✓ COMPLETED
### Problem Identified
The `feedback_historic.json` cyclic buffer had duplicate keys (`feedback00` to `feedback05`) repeated throughout the 30-item buffer instead of having unique keys (`feedback00` to `feedback29`).
### Task Requirement
In `prompt_service.py`, in the `generate_prompts` method, the `feedback_words` value should filter out any words that have a weight value of 0.
### Root Cause
The `_generate_and_insert_new_feedback_words()` method in `PromptService` was always generating keys `feedback00` to `feedback05` when inserting new items at position 0, creating duplicate keys in the buffer.
### Implementation Verification
The filtering was already implemented in the `generate_prompts` method:
### Solution Implemented
1. **Updated `_generate_and_insert_new_feedback_words()` method**:
- Added re-keying logic that assigns unique keys based on position in buffer
- After inserting new items, re-keys all items from `feedback00` to `feedback29`
- Preserves word and weight data during re-keying
```python
# Filter out feedback words with weight 0
if feedback_words:
feedback_words = [
word for word in feedback_words
if word.get("weight", 3) != 0 # Default weight is 3 if not specified
]
# If all words have weight 0, set to None
if not feedback_words:
feedback_words = None
```
2. **Updated `update_feedback_words()` method**:
- Modified to preserve existing keys when updating weights
- Extracts existing key from current item instead of generating new one
- Maintains backward compatibility with existing data structure
### How It Works
1. **Active Words Retrieval**: The method gets active feedback words (positions 6-11) from `get_feedback_active_words()`
2. **Weight Filtering**: Any word with `weight == 0` is filtered out from the list
3. **Fallback Handling**: If all words have weight 0, `feedback_words` is set to `None`
4. **AI Integration**: Only words with weight > 0 are passed to the AI service for prompt generation
### Technical Details
- **Before**: Keys `feedback00`-`feedback05` repeated, causing duplicate keys
- **After**: Unique sequential keys `feedback00`-`feedback29` (or less if buffer not full)
- **Data Structure**: Each item now has format `{"feedbackXX": "word", "weight": N}` with unique XX values
- **Buffer Management**: Proper cyclic buffer behavior with 30-item limit maintained
### Purpose
- **Weight 0 = "Ignore"**: Words rated 0 by users are meant to be ignored
- **Prevents Influence**: Filtering ensures ignored themes don't influence prompt generation
- **User Control**: Users can effectively "turn off" certain themes by rating them 0
### Verification
- ✅ All 30 items in buffer now have unique keys (`feedback00` to `feedback29`)
-No duplicate keys after feedback rating operations
-Data integrity preserved (words and weights maintained)
-Backward compatibility maintained with existing frontend
- ✅ Cyclic buffer functionality preserved (oldest items removed when buffer full)
- ✅ Code already implements the required filtering
-Default weight is 3 if not specified (handles edge cases)
-Proper handling when all words have weight 0 (sets to None)
-Maintains backward compatibility with existing functionality
The bug has been successfully fixed, ensuring proper cyclic buffer operation with unique keys throughout the feedback history.
The implementation ensures that only feedback words with non-zero weights influence AI prompt generation, giving users precise control over theme influence.
User notes:
There are still UI problems with the sliders on the feedback weights.
1. In the UI, with either mouse or keyboard it is impossible to get the value to 0. This is both visible in the graphical slider element as well as in the developer console watching the value be between 1 and 6. It should be possible to set to 0.
2. The sliders should be much bigger, and preferably in a blocky style rather than a slim slider. Look into ways to drastically change the slider style. Make them huge - the width of the parent element and very thick.