Complete prompt system implementation and final fixes

- Fix job data display in jobs page to show user prompt from prompts array
- Add user prompt step to analyze and training job requests for display purposes
- Change default prompt from 'describe this image' to 'describe this media content'
- Complete multi-step prompt system for analyze and training workflows
- Fix socket communication for large messages exceeding 4096 bytes
- Update all components to handle new prompt composition logic
- Fix job data display in history page to show user prompt

All changes follow the AI.PROMPT rules for database migrations and API updates.
parent 8b9ab001
......@@ -399,7 +399,7 @@
</div>
<div class="form-group">
<label>Prompt: <textarea name="prompt" rows="5" cols="80">Describe this image.</textarea></label>
<label>Prompt: <textarea name="prompt" rows="5" cols="80">Describe this media content.</textarea></label>
</div>
<div class="form-group">
......
......@@ -396,8 +396,8 @@
<div class="queue-id" style="font-family: monospace; font-size: 0.8rem; color: #6b7280;">{{ job.id }}</div>
<div class="job-id" style="font-family: monospace; font-size: 0.8rem; color: #6b7280;" title="{{ job.job_id or 'N/A' }}">{{ job.job_id or 'N/A' }}</div>
<div class="job-type">{{ job.request_type.title() }}</div>
<div class="job-data" title="{{ job.data.get('prompt', job.data.get('description', 'N/A')) }}">
{{ job.data.get('prompt', job.data.get('description', 'N/A'))[:50] }}{% if job.data.get('prompt', job.data.get('description', 'N/A'))|length > 50 %}...{% endif %}
<div class="job-data" title="{% if job.data.get('prompts') %}{% for prompt_item in job.data.prompts %}{% if prompt_item.step == 'user' %}{{ prompt_item.prompt }}{% endif %}{% endfor %}{% else %}{{ job.data.get('prompt', job.data.get('description', 'N/A')) }}{% endif %}">
{% if job.data.get('prompts') %}{% for prompt_item in job.data.prompts %}{% if prompt_item.step == 'user' %}{{ prompt_item.prompt[:50] }}{% if prompt_item.prompt|length > 50 %}...{% endif %}{% endif %}{% endfor %}{% else %}{{ job.data.get('prompt', job.data.get('description', 'N/A'))[:50] }}{% if job.data.get('prompt', job.data.get('description', 'N/A'))|length > 50 %}...{% endif %}{% endif %}
</div>
<div class="job-time">{{ job.created_at[:19] }}</div>
<div class="worker-details" style="font-size: 0.8rem; color: #6b7280;">
......
......@@ -521,8 +521,8 @@
<div class="queue-id" style="font-family: monospace; font-size: 0.8rem; color: #6b7280;">{{ job.id }}</div>
<div class="job-id" style="font-family: monospace; font-size: 0.8rem; color: #6b7280;" title="{{ job.job_id or 'N/A' }}">{{ job.job_id or 'N/A' }}</div>
<div class="job-type">{{ job.request_type.title() }}</div>
<div class="job-data" title="{{ job.data.get('prompt', job.data.get('description', 'N/A')) }}">
{{ job.data.get('prompt', job.data.get('description', 'N/A'))[:50] }}{% if job.data.get('prompt', job.data.get('description', 'N/A'))|length > 50 %}...{% endif %}
<div class="job-data" title="{% if job.data.get('prompts') %}{% for prompt_item in job.data.prompts %}{% if prompt_item.step == 'user' %}{{ prompt_item.prompt }}{% endif %}{% endfor %}{% else %}{{ job.data.get('prompt', job.data.get('description', 'N/A')) }}{% endif %}">
{% if job.data.get('prompts') %}{% for prompt_item in job.data.prompts %}{% if prompt_item.step == 'user' %}{{ prompt_item.prompt[:50] }}{% if prompt_item.prompt|length > 50 %}...{% endif %}{% endif %}{% endfor %}{% else %}{{ job.data.get('prompt', job.data.get('description', 'N/A'))[:50] }}{% if job.data.get('prompt', job.data.get('description', 'N/A'))|length > 50 %}...{% endif %}{% endif %}
</div>
<div class="job-time">{{ job.created_at[:19] }}</div>
<div class="worker-details" style="font-size: 0.8rem; color: #6b7280;">
......
......@@ -120,6 +120,12 @@ def train():
# Compose prompts for training (always includes split_media)
prompts = []
# User prompt step (always included for display purposes)
prompts.append({
'step': 'user',
'prompt': description
})
# Video training prompt: system_prompt + video + user + split_media
training_system_prompt = get_prompt('training', 'system_prompt') or ''
training_video_prompt = get_prompt('training', 'video_prompt') or ''
......
......@@ -335,6 +335,12 @@ def analyze():
# Compose prompts based on options
prompts = []
# User prompt step (always included for display purposes)
prompts.append({
'step': 'user',
'prompt': prompt
})
# Video analysis prompt (always included)
video_system_prompt = get_prompt('analyze', 'system_prompt') or ''
video_prompt = get_prompt('analyze', 'video_prompt') or ''
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment