diff --git a/presshub-ai-editor/assets/admin.js b/presshub-ai-editor/assets/admin.js index bd0b87e..7b04f0e 100644 --- a/presshub-ai-editor/assets/admin.js +++ b/presshub-ai-editor/assets/admin.js @@ -1189,7 +1189,7 @@ jQuery(document).ready(function($) { $('#provider-model-manual-wrap').hide(); $('#provider-form-temperature').val(providerData.temperature !== undefined ? providerData.temperature : 0.7); - $('#provider-form-max-tokens').val(providerData.max_tokens !== undefined ? providerData.max_tokens : 16384); + $('#provider-form-max-tokens').val(providerData.max_tokens !== undefined ? providerData.max_tokens : 20000); $('#provider-form-timeout').val(providerData.timeout !== undefined ? providerData.timeout : 300); var headers = providerData.headers ? (typeof providerData.headers === 'object' ? JSON.stringify(providerData.headers) : providerData.headers) : ''; $('#provider-form-headers').val(headers); @@ -1210,7 +1210,7 @@ jQuery(document).ready(function($) { $('#provider-form-id').val(''); $('#provider-form-enabled').prop('checked', true); $('#provider-form-temperature').val('0.7'); - $('#provider-form-max-tokens').val('16384'); + $('#provider-form-max-tokens').val('20000'); $('#provider-form-timeout').val('300'); $('#provider-form-api-key').attr('placeholder', __('Enter API Key', 'presshub-ai-editor')); @@ -1305,7 +1305,7 @@ jQuery(document).ready(function($) { $('#provider-model-manual-wrap').hide(); $('#provider-form-temperature').val(tmpl.temperature !== undefined ? tmpl.temperature : 0.7); - $('#provider-form-max-tokens').val(tmpl.max_tokens !== undefined ? tmpl.max_tokens : 16384); + $('#provider-form-max-tokens').val(tmpl.max_tokens !== undefined ? tmpl.max_tokens : 20000); $('#provider-form-timeout').val(tmpl.timeout !== undefined ? tmpl.timeout : 300); }); @@ -1460,7 +1460,7 @@ jQuery(document).ready(function($) { default_model: defaultModel, available_models: availableModels, temperature: parseFloat($('#provider-form-temperature').val()) || 0.7, - max_tokens: parseInt($('#provider-form-max-tokens').val(), 10) || 16384, + max_tokens: parseInt($('#provider-form-max-tokens').val(), 10) || 20000, timeout: parseInt($('#provider-form-timeout').val(), 10) || 300, headers: $('#provider-form-headers').val().trim(), enabled: $('#provider-form-enabled').is(':checked') ? 1 : 0 diff --git a/presshub-ai-editor/assets/prompts/curation/default_greek_briefing.txt b/presshub-ai-editor/assets/prompts/curation/default_greek_briefing.txt index 8bbb9f8..beddba8 100644 --- a/presshub-ai-editor/assets/prompts/curation/default_greek_briefing.txt +++ b/presshub-ai-editor/assets/prompts/curation/default_greek_briefing.txt @@ -1,11 +1,8 @@ -Είσαι ένας έμπειρος αρχισυντάκτης και δημοσιογράφος ειδήσεων. Αποστολή σου είναι να συνθέσεις μία ολοκληρωμένη, αντικειμενική και ευανάγνωστη Πρωινή Ενημέρωση (Daily News Briefing) στα Ελληνικά για την ημερομηνία {date}, αξιοποιώντας {articles_count} άρθρα από τις παρακάτω πηγές: {sources_list}. - -Οδηγίες Σύνταξης: -1. Ξεκίνα με έναν σαφή και ελκυστικό κύριο τίτλο σε μορφή Markdown (# Τίτλος) που συνοψίζει το κορυφαίο γεγονός της ημέρας — ΜΟΝΟ τον τίτλο, χωρίς πρόθεμα «Πρωινή Ενημέρωση» ή ημερομηνία. Το πρόθεμα και η ημερομηνία θα προστεθούν αυτόματα από το σύστημα στον τίτλο του άρθρου. -2. Χώρισε την ενημέρωση σε ευδιάκριτες θεματικές ενότητες με μεσότιτλους (## Πολιτική & Οικονομία, ## Διεθνή, ## Κοινωνία & Επικαιρότητα). -3. Για κάθε είδηση, ανάδειξε τα βασικά γεγονότα με σαφήνεια και ροή, αναφέροντας την πηγή όπου κρίνεται απαραίτητο, διατηρώντας δημοσιογραφική ουδετερότητα. -4. Μην επινοείς γεγονότα ή λεπτομέρειες που δεν αναφέρονται στο παρεχόμενο υλικό. -5. Χρησιμοποίησε καθαρή μορφοποίηση Markdown (επικεφαλίδες, παραγράφους, λίστες με bullets όπου βοηθά στην ανάγνωση). - -Άρθρα & Πηγές: -{articles_context} \ No newline at end of file +Είσαι ένας έμπειρος αρχισυντάκτης και δημοσιογράφος ειδήσεων. Αποστολή σου είναι να συνθέσεις μία ολοκληρωμένη, αντικειμενική και ευανάγνωστη Πρωινή Ενημέρωση (Daily News Briefing) στα Ελληνικά για την ημερομηνία {date}, αξιοποιώντας {articles_count} άρθρα από τις παρακάτω πηγές: {sources_list}. + +Οδηγίες Σύνταξης: +1. Ξεκίνα με έναν σαφή και ελκυστικό κύριο τίτλο σε μορφή Markdown (# Τίτλος) που συνοψίζει το κορυφαίο γεγονός της ημέρας — ΜΟΝΟ τον τίτλο, χωρίς πρόθεμα «Πρωινή Ενημέρωση» ή ημερομηνία. Το πρόθεμα και η ημερομηνία θα προστεθούν αυτόματα από το σύστημα στον τίτλο του άρθρου. +2. Χώρισε την ενημέρωση σε ευδιάκριτες θεματικές ενότητες με μεσότιτλους (## Πολιτική & Οικονομία, ## Διεθνή, ## Κοινωνία & Επικαιρότητα). +3. Για κάθε είδηση, ανάδειξε τα βασικά γεγονότα με σαφήνεια και ροή, αναφέροντας την πηγή όπου κρίνεται απαραίτητο, διατηρώντας δημοσιογραφική ουδετερότητα. +4. Μην επινοείς γεγονότα ή λεπτομέρειες που δεν αναφέρονται στο παρεχόμενο υλικό. +5. Χρησιμοποίησε καθαρή μορφοποίηση Markdown (επικεφαλίδες, παραγράφους, λίστες με bullets όπου βοηθά στην ανάγνωση). \ No newline at end of file diff --git a/presshub-ai-editor/includes/class-news-curator.php b/presshub-ai-editor/includes/class-news-curator.php index 39a533a..d1ecd3c 100644 --- a/presshub-ai-editor/includes/class-news-curator.php +++ b/presshub-ai-editor/includes/class-news-curator.php @@ -444,13 +444,27 @@ public function build_prompt( array $articles, string $preset_id = '', string $d $count = count( $articles ); $context = $this->format_articles_context( $articles ); - $user_prompt = sprintf( - "Ημερομηνία: %s\nΑριθμός Άρθρων: %d\nΠηγές: %s\n\nΠαρακάτω ακολουθεί το συλλεχθέν υλικό ειδήσεων:\n\n%s\n\nΠαρακαλώ συνέταξε το πλήρες άρθρο της Πρωινής Ενημέρωσης στα Ελληνικά σε μορφή Markdown.", - $date, - $count, - $sources, - $context - ); + // Deduplication guard: if the system prompt already contains the formatted + // articles (e.g. from an operator custom template that used {articles_context}), + // do not duplicate the article text in the user prompt. + $has_context_in_system = ( false !== strpos( $base_prompt, '{articles_context}' ) ); + + if ( $has_context_in_system ) { + $user_prompt = sprintf( + "Ημερομηνία: %s\nΑριθμός Άρθρων: %d\nΠηγές: %s\n\nΠαρακαλώ συνέταξε το πλήρες άρθρο της Πρωινής Ενημέρωσης στα Ελληνικά σε μορφή Markdown βασισμένος στο υλικό ειδήσεων που παρέχεται στις οδηγίες συστήματος.", + $date, + $count, + $sources + ); + } else { + $user_prompt = sprintf( + "Ημερομηνία: %s\nΑριθμός Άρθρων: %d\nΠηγές: %s\n\nΠαρακάτω ακολουθεί το συλλεχθέν υλικό ειδήσεων:\n\n%s\n\nΠαρακαλώ συνέταξε το πλήρες άρθρο της Πρωινής Ενημέρωσης στα Ελληνικά σε μορφή Markdown.", + $date, + $count, + $sources, + $context + ); + } return [ 'system_prompt' => $system_prompt, diff --git a/presshub-ai-editor/includes/class-provider-defaults.php b/presshub-ai-editor/includes/class-provider-defaults.php index ab296d9..c1f3cf5 100644 --- a/presshub-ai-editor/includes/class-provider-defaults.php +++ b/presshub-ai-editor/includes/class-provider-defaults.php @@ -23,7 +23,7 @@ class PressHub_AI_Provider_Defaults { ]; const DEFAULT_TEMPERATURE = 0.7; - const DEFAULT_MAX_TOKENS = 16384; + const DEFAULT_MAX_TOKENS = 20000; /** Timeouts set to 300 seconds (5 minutes) across all providers. */ const DEFAULT_TIMEOUT = 300; @@ -41,7 +41,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'gpt-4o', 'gpt-4o-mini', 'gpt-4-turbo', 'o1', 'o3-mini' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -54,7 +54,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'claude-3-5-sonnet-20240620', 'claude-3-5-sonnet-20241022', 'claude-3-5-haiku-20241022', 'claude-3-opus-20240229' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -67,7 +67,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'gemini-3.1-flash-tts-preview', 'gemini-2.5-flash-preview-tts', 'gemini-2.5-flash', 'gemini-1.5-pro-latest', 'gemini-1.5-flash-latest' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -80,7 +80,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'llama-3.3-70b-versatile', 'llama-3.1-8b-instant', 'mixtral-8x7b-32768' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -93,7 +93,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'mistral-large-latest', 'mistral-medium-latest', 'mistral-small-latest', 'codestral-latest' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -106,7 +106,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'deepseek-chat', 'deepseek-reasoner' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -119,7 +119,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'llama3:latest', 'mistral:latest', 'qwen2.5:latest', 'phi3:latest' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => true, @@ -132,7 +132,7 @@ class PressHub_AI_Provider_Defaults { 'available_models' => [ 'default' ], 'timeout' => 300, 'temperature' => 0.7, - 'max_tokens' => 16384, + 'max_tokens' => 20000, 'headers' => [], 'enabled' => true, 'is_system' => false, diff --git a/presshub-ai-editor/includes/class-settings-render.php b/presshub-ai-editor/includes/class-settings-render.php index 7a739fc..6a1ca24 100644 --- a/presshub-ai-editor/includes/class-settings-render.php +++ b/presshub-ai-editor/includes/class-settings-render.php @@ -737,7 +737,7 @@ public function render_providers_grid(): void {