Allow changing ChatGPT model - thx luannbr :)

Fix  #8017
This commit is contained in:
Nikolaj Olsson 2024-03-12 23:53:26 +01:00
parent d9a52bb9a5
commit 2815320130
7 changed files with 220 additions and 58 deletions

View File

@ -176,7 +176,7 @@ namespace Nikse.SubtitleEdit.Core.Common
public string ChatGptUrl { get; set; }
public string ChatGptApiKey { get; set; }
public string ChatGptModel { get; set; }
public int ChatGptDelaySeconds { get; set; }
public int AutoTranslateDelaySeconds { get; set; }
public string GeminiProApiKey { get; set; }
public bool DisableVidoInfoViaLabel { get; set; }
public bool ListViewSyntaxColorDurationSmall { get; set; }
@ -5336,10 +5336,10 @@ $HorzAlign = Center
settings.Tools.ChatGptModel = subNode.InnerText;
}
subNode = node.SelectSingleNode("ChatGptDelaySeconds");
subNode = node.SelectSingleNode("AutoTranslateDelaySeconds");
if (subNode != null)
{
settings.Tools.ChatGptDelaySeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture);
settings.Tools.AutoTranslateDelaySeconds = Convert.ToInt32(subNode.InnerText, CultureInfo.InvariantCulture);
}
subNode = node.SelectSingleNode("GeminiProApiKey");
@ -11811,7 +11811,7 @@ $HorzAlign = Center
textWriter.WriteElementString("ChatGptUrl", settings.Tools.ChatGptUrl);
textWriter.WriteElementString("ChatGptApiKey", settings.Tools.ChatGptApiKey);
textWriter.WriteElementString("ChatGptModel", settings.Tools.ChatGptModel);
textWriter.WriteElementString("ChatGptDelaySeconds", settings.Tools.ChatGptDelaySeconds.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("AutoTranslateDelaySeconds", settings.Tools.AutoTranslateDelaySeconds.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("GeminiProApiKey", settings.Tools.GeminiProApiKey);
textWriter.WriteElementString("DisableVidoInfoViaLabel", settings.Tools.DisableVidoInfoViaLabel.ToString(CultureInfo.InvariantCulture));
textWriter.WriteElementString("ListViewSyntaxColorDurationSmall", settings.Tools.ListViewSyntaxColorDurationSmall.ToString(CultureInfo.InvariantCulture));

View File

@ -0,0 +1,120 @@
using Nikse.SubtitleEdit.Core.Common;
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
namespace Nikse.SubtitleEdit.Core.SubtitleFormats
{
public class Smil30 : SubtitleFormat
{
public override string Extension => ".xml";
public override string Name => "SMIL 3.0";
private static string ToTimeCode(TimeCode tc)
{
return tc.ToString(false).Replace(',', '.');
}
private static TimeCode DecodeTimeCode(string s)
{
var parts = s.Split(new[] { ';', ':', '.', ',' }, StringSplitOptions.RemoveEmptyEntries);
return DecodeTimeCodeFramesFourParts(parts);
}
public override string ToText(Subtitle subtitle, string title)
{
var xml = new XmlDocument();
xml.LoadXml("<smil xmlns=\"http://www.w3.org/ns/SMIL\" xmlns:epub=\"http://www.idpf.org/2007/ops\" version=\"3.0\"><body></body></smil>");
const string ns = "http://www.w3.org/ns/SMIL";
var nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("smil", ns);
nsmgr.AddNamespace("epub", "http://www.idpf.org/2007/ops");
XmlNode bodyNode = xml.SelectSingleNode("//smil:body", nsmgr);
var count = 1;
foreach (var p in subtitle.Paragraphs)
{
XmlNode paragraph = xml.CreateElement("par", ns);
XmlNode text = xml.CreateElement("text", ns);
XmlNode audio = xml.CreateElement("audio", ns);
text.InnerText = p.Text;
XmlAttribute start = xml.CreateAttribute("clipBegin");
start.InnerText = ToTimeCode(p.StartTime);
audio.Attributes.Append(start);
XmlAttribute end = xml.CreateAttribute("clipEnd");
end.InnerText = ToTimeCode(p.EndTime);
audio.Attributes.Append(end);
XmlAttribute textSource = xml.CreateAttribute("src");
textSource.InnerText = $"text.xhtml#para{count}";
text.Attributes.Append(textSource);
XmlAttribute audioSource = xml.CreateAttribute("src");
audioSource.InnerText = "audio.mp3";
audio.Attributes.Append(audioSource);
bodyNode.AppendChild(paragraph);
paragraph.AppendChild(text);
paragraph.AppendChild(audio);
count++;
}
return ToUtf8XmlString(xml);
}
public override void LoadSubtitle(Subtitle subtitle, List<string> lines, string fileName)
{
_errorCount = 0;
var sb = new StringBuilder();
lines.ForEach(line => sb.AppendLine(line));
var allText = sb.ToString();
if (!allText.Contains("<smil") || !allText.Contains("</smil>"))
{
return;
}
var xml = new XmlDocument { XmlResolver = null };
try
{
xml.LoadXml(allText);
}
catch
{
_errorCount = 1;
return;
}
const string ns = "http://www.w3.org/ns/SMIL";
var nsmgr = new XmlNamespaceManager(xml.NameTable);
nsmgr.AddNamespace("smil", ns);
nsmgr.AddNamespace("epub", "http://www.idpf.org/2007/ops");
foreach (XmlNode node in xml.DocumentElement.SelectNodes("//smil:par", nsmgr))
{
try
{
var textNode = node.SelectSingleNode("smil:text", nsmgr);
var audioNode = node.SelectSingleNode("smil:audio", nsmgr);
var text = textNode.InnerText;
var start = audioNode.Attributes["clipBegin"].InnerText;
var end = audioNode.Attributes["clipEnd"].InnerText;
subtitle.Paragraphs.Add(new Paragraph(DecodeTimeCode(start), DecodeTimeCode(end), text));
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
_errorCount++;
}
}
subtitle.Renumber();
}
}
}

View File

@ -192,6 +192,7 @@ namespace Nikse.SubtitleEdit.Core.SubtitleFormats
new ScenaristClosedCaptions(),
new ScenaristClosedCaptionsDropFrame(),
new SmartTitler(),
new Smil30(),
new SmilTimesheetData(),
new SmpteTt2052(),
new SoftNiSub(),

View File

@ -465,8 +465,8 @@
this.label11 = new System.Windows.Forms.Label();
this.groupBoxAutoTranslateChatGpt = new System.Windows.Forms.GroupBox();
this.nikseTextBoxChatGptUrl = new Nikse.SubtitleEdit.Controls.NikseTextBox();
this.nikseComboBoxChatGptDelay = new Nikse.SubtitleEdit.Controls.NikseComboBox();
this.labelChatGptDelay = new System.Windows.Forms.Label();
this.nikseComboBoxChatGptModel = new Nikse.SubtitleEdit.Controls.NikseComboBox();
this.labelChatGptModel = new System.Windows.Forms.Label();
this.nikseTextBoxChatGptApiKey = new Nikse.SubtitleEdit.Controls.NikseTextBox();
this.labelApiKeyChatGpt = new System.Windows.Forms.Label();
this.labelUrlChatGpt = new System.Windows.Forms.Label();
@ -6563,8 +6563,8 @@
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.nikseTextBoxChatGptUrl);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.nikseComboBoxChatGptDelay);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.labelChatGptDelay);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.nikseComboBoxChatGptModel);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.labelChatGptModel);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.nikseTextBoxChatGptApiKey);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.labelApiKeyChatGpt);
this.groupBoxAutoTranslateChatGpt.Controls.Add(this.labelUrlChatGpt);
@ -6585,40 +6585,40 @@
this.nikseTextBoxChatGptUrl.Size = new System.Drawing.Size(384, 21);
this.nikseTextBoxChatGptUrl.TabIndex = 34;
//
// nikseComboBoxChatGptDelay
// nikseComboBoxChatGptModel
//
this.nikseComboBoxChatGptDelay.BackColor = System.Drawing.SystemColors.Window;
this.nikseComboBoxChatGptDelay.BackColorDisabled = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
this.nikseComboBoxChatGptDelay.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(173)))), ((int)(((byte)(179)))));
this.nikseComboBoxChatGptDelay.BorderColorDisabled = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120)))));
this.nikseComboBoxChatGptDelay.ButtonForeColor = System.Drawing.SystemColors.ControlText;
this.nikseComboBoxChatGptDelay.ButtonForeColorDown = System.Drawing.Color.Orange;
this.nikseComboBoxChatGptDelay.ButtonForeColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215)))));
this.nikseComboBoxChatGptDelay.DropDownHeight = 400;
this.nikseComboBoxChatGptDelay.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.nikseComboBoxChatGptDelay.DropDownWidth = 375;
this.nikseComboBoxChatGptDelay.FormattingEnabled = true;
this.nikseComboBoxChatGptDelay.Items.AddRange(new object[] {
"0",
"20"});
this.nikseComboBoxChatGptDelay.Location = new System.Drawing.Point(52, 109);
this.nikseComboBoxChatGptDelay.MaxLength = 32767;
this.nikseComboBoxChatGptDelay.Name = "nikseComboBoxChatGptDelay";
this.nikseComboBoxChatGptDelay.SelectedIndex = -1;
this.nikseComboBoxChatGptDelay.SelectedItem = null;
this.nikseComboBoxChatGptDelay.SelectedText = "";
this.nikseComboBoxChatGptDelay.Size = new System.Drawing.Size(340, 21);
this.nikseComboBoxChatGptDelay.TabIndex = 38;
this.nikseComboBoxChatGptDelay.UsePopupWindow = false;
this.nikseComboBoxChatGptModel.BackColor = System.Drawing.SystemColors.Window;
this.nikseComboBoxChatGptModel.BackColorDisabled = System.Drawing.Color.FromArgb(((int)(((byte)(240)))), ((int)(((byte)(240)))), ((int)(((byte)(240)))));
this.nikseComboBoxChatGptModel.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(171)))), ((int)(((byte)(173)))), ((int)(((byte)(179)))));
this.nikseComboBoxChatGptModel.BorderColorDisabled = System.Drawing.Color.FromArgb(((int)(((byte)(120)))), ((int)(((byte)(120)))), ((int)(((byte)(120)))));
this.nikseComboBoxChatGptModel.ButtonForeColor = System.Drawing.SystemColors.ControlText;
this.nikseComboBoxChatGptModel.ButtonForeColorDown = System.Drawing.Color.Orange;
this.nikseComboBoxChatGptModel.ButtonForeColorOver = System.Drawing.Color.FromArgb(((int)(((byte)(0)))), ((int)(((byte)(120)))), ((int)(((byte)(215)))));
this.nikseComboBoxChatGptModel.DropDownHeight = 400;
this.nikseComboBoxChatGptModel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.nikseComboBoxChatGptModel.DropDownWidth = 375;
this.nikseComboBoxChatGptModel.FormattingEnabled = true;
this.nikseComboBoxChatGptModel.Items.AddRange(new object[] {
"gpt-3.5-turbo",
"gpt-4"});
this.nikseComboBoxChatGptModel.Location = new System.Drawing.Point(52, 109);
this.nikseComboBoxChatGptModel.MaxLength = 32767;
this.nikseComboBoxChatGptModel.Name = "nikseComboBoxChatGptModel";
this.nikseComboBoxChatGptModel.SelectedIndex = -1;
this.nikseComboBoxChatGptModel.SelectedItem = null;
this.nikseComboBoxChatGptModel.SelectedText = "";
this.nikseComboBoxChatGptModel.Size = new System.Drawing.Size(340, 21);
this.nikseComboBoxChatGptModel.TabIndex = 38;
this.nikseComboBoxChatGptModel.UsePopupWindow = false;
//
// labelChatGptDelay
// labelChatGptModel
//
this.labelChatGptDelay.AutoSize = true;
this.labelChatGptDelay.Location = new System.Drawing.Point(6, 112);
this.labelChatGptDelay.Name = "labelChatGptDelay";
this.labelChatGptDelay.Size = new System.Drawing.Size(34, 13);
this.labelChatGptDelay.TabIndex = 37;
this.labelChatGptDelay.Text = "Delay";
this.labelChatGptModel.AutoSize = true;
this.labelChatGptModel.Location = new System.Drawing.Point(6, 112);
this.labelChatGptModel.Name = "labelChatGptModel";
this.labelChatGptModel.Size = new System.Drawing.Size(35, 13);
this.labelChatGptModel.TabIndex = 37;
this.labelChatGptModel.Text = "Model";
//
// nikseTextBoxChatGptApiKey
//
@ -6986,8 +6986,8 @@
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(1092, 574);
this.Controls.Add(this.panelShortcuts);
this.Controls.Add(this.panelAutoTranslate);
this.Controls.Add(this.panelShortcuts);
this.Controls.Add(this.panelVideoPlayer);
this.Controls.Add(this.labelUpdateFileTypeAssociationsStatus);
this.Controls.Add(this.panelGeneral);
@ -7607,14 +7607,14 @@
private System.Windows.Forms.LinkLabel linkLabelPapago;
private System.Windows.Forms.Label label11;
private System.Windows.Forms.GroupBox groupBoxAutoTranslateChatGpt;
private System.Windows.Forms.Label labelChatGptDelay;
private System.Windows.Forms.Label labelChatGptModel;
private Controls.NikseTextBox nikseTextBoxChatGptApiKey;
private System.Windows.Forms.Label labelApiKeyChatGpt;
private Controls.NikseTextBox nikseTextBoxChatGptUrl;
private System.Windows.Forms.Label labelUrlChatGpt;
private System.Windows.Forms.LinkLabel linkLabelMoreInfoChatGpt;
private System.Windows.Forms.Label label10;
private Controls.NikseComboBox nikseComboBoxChatGptDelay;
private Controls.NikseComboBox nikseComboBoxChatGptModel;
private System.Windows.Forms.Label labelShortcutsFilter;
private Controls.NikseComboBox nikseComboBoxShortcutsFilter;
}

View File

@ -912,11 +912,11 @@ namespace Nikse.SubtitleEdit.Forms.Options
nikseTextBoxDeepLApiKey.Width = nikseTextBoxDeepLUrl.Width - labelDeepLApiKey.Width - 3;
labelApiKeyChatGpt.Text = language.GoogleTranslateApiKey;
labelChatGptDelay.Text = LanguageSettings.Current.Main.VideoControls.DelayInSeconds;
labelChatGptModel.Text = LanguageSettings.Current.AudioToText.Model;
nikseTextBoxChatGptApiKey.Left = labelApiKeyChatGpt.Right + 3;
nikseTextBoxChatGptApiKey.Width = nikseTextBoxChatGptUrl.Width - labelApiKeyChatGpt.Width - 3;
nikseComboBoxChatGptDelay.Left = labelChatGptDelay.Right + 3;
nikseComboBoxChatGptDelay.Width = nikseTextBoxChatGptUrl.Width - labelChatGptDelay.Width - 3;
nikseComboBoxChatGptModel.Left = labelChatGptModel.Right + 3;
nikseComboBoxChatGptModel.Width = nikseTextBoxChatGptUrl.Width - labelChatGptModel.Width - 3;
nikseTextBoxPapagoClientSecret.Left = labelSecretPapago.Right + 3;
nikseTextBoxPapagoClientSecret.Width = nikseTextBoxPapagoClientId.Width - labelSecretPapago.Width - 3;
@ -1150,10 +1150,10 @@ namespace Nikse.SubtitleEdit.Forms.Options
nikseTextBoxChatGptUrl.Text = Configuration.Settings.Tools.ChatGptUrl;
nikseTextBoxChatGptApiKey.Text = Configuration.Settings.Tools.ChatGptApiKey;
nikseComboBoxChatGptDelay.SelectedIndex = 0;
if (Configuration.Settings.Tools.ChatGptDelaySeconds == 20)
nikseComboBoxChatGptModel.Text = Configuration.Settings.Tools.ChatGptModel;
if (string.IsNullOrEmpty(nikseComboBoxChatGptModel.Text))
{
nikseComboBoxChatGptDelay.SelectedIndex = 1;
nikseComboBoxChatGptModel.Text = "gpt-3.5-turbo";
}
nikseTextBoxPapagoClientId.Text = Configuration.Settings.Tools.AutoTranslatePapagoApiKeyId;
@ -2371,7 +2371,7 @@ namespace Nikse.SubtitleEdit.Forms.Options
toolsSettings.AutoTranslateDeepLApiKey = nikseTextBoxDeepLApiKey.Text;
toolsSettings.ChatGptUrl = nikseTextBoxChatGptUrl.Text;
toolsSettings.ChatGptApiKey = nikseTextBoxChatGptApiKey.Text;
toolsSettings.ChatGptDelaySeconds = int.Parse(nikseComboBoxChatGptDelay.Text.Split()[0]);
toolsSettings.ChatGptModel = nikseComboBoxChatGptModel.Text;
toolsSettings.AutoTranslatePapagoApiKeyId = nikseTextBoxPapagoClientId.Text.Trim();
toolsSettings.AutoTranslatePapagoApiKey = nikseTextBoxPapagoClientSecret.Text.Trim();

View File

@ -60,6 +60,8 @@
this.subtitleListViewSource = new Nikse.SubtitleEdit.Controls.SubtitleListView();
this.comboBoxFormality = new Nikse.SubtitleEdit.Controls.NikseComboBox();
this.labelFormality = new Nikse.SubtitleEdit.Controls.NikseLabel();
this.delayToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.delayToolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem();
this.contextMenuStrip2.SuspendLayout();
this.contextMenuStrip1.SuspendLayout();
this.SuspendLayout();
@ -159,9 +161,10 @@
this.toolStripMenuItemStartNLLBServe,
this.toolStripMenuItemStartNLLBApi,
this.toolStripSeparator1,
this.translateSingleLinesToolStripMenuItem});
this.translateSingleLinesToolStripMenuItem,
this.delayToolStripMenuItem});
this.contextMenuStrip2.Name = "contextMenuStrip1";
this.contextMenuStrip2.Size = new System.Drawing.Size(197, 98);
this.contextMenuStrip2.Size = new System.Drawing.Size(199, 120);
this.contextMenuStrip2.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip2_Opening);
//
// toolStripMenuItemStartLibre
@ -203,9 +206,10 @@
this.startNLLBServeServerToolStripMenuItem,
this.startNLLBAPIServerToolStripMenuItem,
this.toolStripSeparator2,
this.translateSingleLinesToolStripMenuItem1});
this.translateSingleLinesToolStripMenuItem1,
this.delayToolStripMenuItem1});
this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(197, 98);
this.contextMenuStrip1.Size = new System.Drawing.Size(199, 142);
this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening);
//
// startLibreTranslateServerToolStripMenuItem
@ -443,6 +447,20 @@
this.labelFormality.TabIndex = 113;
this.labelFormality.Text = "Formality:";
//
// delayToolStripMenuItem
//
this.delayToolStripMenuItem.Name = "delayToolStripMenuItem";
this.delayToolStripMenuItem.Size = new System.Drawing.Size(198, 22);
this.delayToolStripMenuItem.Text = "Delay between API calls";
this.delayToolStripMenuItem.Click += new System.EventHandler(this.delayToolStripMenuItem_Click);
//
// delayToolStripMenuItem1
//
this.delayToolStripMenuItem1.Name = "delayToolStripMenuItem1";
this.delayToolStripMenuItem1.Size = new System.Drawing.Size(198, 22);
this.delayToolStripMenuItem1.Text = "Delay between API calls";
this.delayToolStripMenuItem1.Click += new System.EventHandler(this.delayToolStripMenuItem1_Click);
//
// AutoTranslate
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -519,5 +537,7 @@
private System.Windows.Forms.ToolStripMenuItem translateSingleLinesToolStripMenuItem1;
private Nikse.SubtitleEdit.Controls.NikseComboBox comboBoxFormality;
private Nikse.SubtitleEdit.Controls.NikseLabel labelFormality;
private System.Windows.Forms.ToolStripMenuItem delayToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem delayToolStripMenuItem1;
}
}

View File

@ -109,6 +109,7 @@ namespace Nikse.SubtitleEdit.Forms.Translate
AutoTranslate_Resize(null, null);
UpdateTranslation();
MergeAndSplitHelper.MergeSplitProblems = false;
ShowDelayLabel();
}
private void InitializeAutoTranslatorEngines()
@ -625,11 +626,7 @@ namespace Nikse.SubtitleEdit.Forms.Translate
_autoTranslator.Name == NoLanguageLeftBehindApi.StaticName || // NLLB seems to miss some text...
_autoTranslator.Name == NoLanguageLeftBehindServe.StaticName;
var delaySeconds = 0;
if (_autoTranslator.Name == ChatGptTranslate.StaticName)
{
delaySeconds = Configuration.Settings.Tools.ChatGptDelaySeconds;
}
var delaySeconds = Configuration.Settings.Tools.AutoTranslateDelaySeconds;
if (comboBoxSource.SelectedItem is TranslationPair source && comboBoxTarget.SelectedItem is TranslationPair target)
{
@ -1200,5 +1197,29 @@ namespace Nikse.SubtitleEdit.Forms.Translate
}
}
}
private void delayToolStripMenuItem1_Click(object sender, EventArgs e)
{
delayToolStripMenuItem_Click(null, null);
}
private void delayToolStripMenuItem_Click(object sender, EventArgs e)
{
if (Configuration.Settings.Tools.AutoTranslateDelaySeconds == 0)
{
Configuration.Settings.Tools.AutoTranslateDelaySeconds = 20;
}
else
{
Configuration.Settings.Tools.AutoTranslateDelaySeconds = 0;
}
ShowDelayLabel();
}
private void ShowDelayLabel()
{
delayToolStripMenuItem1.Text = "Delay between API calls in seconds: " + Configuration.Settings.Tools.AutoTranslateDelaySeconds;
}
}
}