mirror of
https://github.com/MindWorkAI/AI-Studio.git
synced 2026-09-24 15:53:38 +00:00
Added iterative prompt refinement action (#994)
Some checks are pending
Build and Release / Determine run mode (push) Waiting to run
Build and Release / Read metadata (push) Blocked by required conditions
Build and Release / Sync Flatpak repo (push) Blocked by required conditions
Build and Release / Collect Flatpak artifacts (push) Blocked by required conditions
Build and Release / Verify (push) Waiting to run
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Prepare & create release (push) Blocked by required conditions
Build and Release / Publish release (push) Blocked by required conditions
Some checks are pending
Build and Release / Determine run mode (push) Waiting to run
Build and Release / Read metadata (push) Blocked by required conditions
Build and Release / Sync Flatpak repo (push) Blocked by required conditions
Build and Release / Collect Flatpak artifacts (push) Blocked by required conditions
Build and Release / Verify (push) Waiting to run
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-apple-darwin, osx-arm64, macos-latest, aarch64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-pc-windows-msvc.exe, win-arm64, windows-latest, aarch64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-aarch64-unknown-linux-gnu, linux-arm64, ubuntu-22.04-arm, aarch64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-apple-darwin, osx-x64, macos-latest, x86_64-apple-darwin, dmg,app,updater, dmg) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-pc-windows-msvc.exe, win-x64, windows-latest, x86_64-pc-windows-msvc, nsis,updater, nsis) (push) Blocked by required conditions
Build and Release / Build app (${{ matrix.dotnet_runtime }}) (-x86_64-unknown-linux-gnu, linux-x64, ubuntu-22.04, x86_64-unknown-linux-gnu, appimage,updater, appimage) (push) Blocked by required conditions
Build and Release / Prepare & create release (push) Blocked by required conditions
Build and Release / Publish release (push) Blocked by required conditions
Co-authored-by: Thorsten Sommer <SommerEngineering@users.noreply.github.com>
This commit is contained in:
parent
ac0dc1e3d7
commit
146cf8380d
@ -753,9 +753,7 @@ public abstract partial class AssistantBase<TSettings> : AssistantLowerBase wher
|
|||||||
await this.AssistantSessionService.ClearAsync(this.assistantSessionKey);
|
await this.AssistantSessionService.ClearAsync(this.assistantSessionKey);
|
||||||
this.MediaTranscriptionService.ClearOwnerState(this.CurrentMediaImportOwner);
|
this.MediaTranscriptionService.ClearOwnerState(this.CurrentMediaImportOwner);
|
||||||
this.assistantSessionId = null;
|
this.assistantSessionId = null;
|
||||||
this.ChatThread = null;
|
this.ClearConversationState();
|
||||||
this.LastUserPrompt = null;
|
|
||||||
this.ResultingContentBlock = null;
|
|
||||||
this.ProviderSettings = Settings.Provider.NONE;
|
this.ProviderSettings = Settings.Provider.NONE;
|
||||||
|
|
||||||
await this.JsRuntime.ClearDiv(BEFORE_RESULT_DIV_ID);
|
await this.JsRuntime.ClearDiv(BEFORE_RESULT_DIV_ID);
|
||||||
|
|||||||
@ -34,4 +34,18 @@ public abstract class AssistantLowerBase : MSGComponentBase
|
|||||||
protected ContentBlock? ResultingContentBlock;
|
protected ContentBlock? ResultingContentBlock;
|
||||||
protected string[] InputIssues = [];
|
protected string[] InputIssues = [];
|
||||||
protected bool IsProcessing;
|
protected bool IsProcessing;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clears everything one assistant run has produced.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// Assistants call this whenever the previous run must not carry over: a follow-up run would
|
||||||
|
/// otherwise append to the old chat thread, and the old result would stay on screen.
|
||||||
|
/// </remarks>
|
||||||
|
protected void ClearConversationState()
|
||||||
|
{
|
||||||
|
this.ChatThread = null;
|
||||||
|
this.LastUserPrompt = null;
|
||||||
|
this.ResultingContentBlock = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -2191,6 +2191,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- View
|
-- View
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "View"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "View"
|
||||||
|
|
||||||
|
-- Improve further
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582753277"] = "Improve further"
|
||||||
|
|
||||||
-- Separate context, task, constraints, and output format with headings or markers.
|
-- Separate context, task, constraints, and output format with headings or markers.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Separate context, task, constraints, and output format with headings or markers."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Separate context, task, constraints, and output format with headings or markers."
|
||||||
|
|
||||||
@ -2287,6 +2290,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- Use sequential steps
|
-- Use sequential steps
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Use sequential steps"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Use sequential steps"
|
||||||
|
|
||||||
|
-- Moves the optimized prompt into the prompt field so you can optimize it again.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T502438377"] = "Moves the optimized prompt into the prompt field so you can optimize it again."
|
||||||
|
|
||||||
-- Use clear, explicit instructions and directly state quality expectations.
|
-- Use clear, explicit instructions and directly state quality expectations.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Use clear, explicit instructions and directly state quality expectations."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Use clear, explicit instructions and directly state quality expectations."
|
||||||
|
|
||||||
|
|||||||
@ -101,6 +101,15 @@ public partial class AssistantPromptOptimizer : AssistantBaseCore<SettingsDialog
|
|||||||
|
|
||||||
protected override IReadOnlyList<IButtonData> FooterButtons =>
|
protected override IReadOnlyList<IButtonData> FooterButtons =>
|
||||||
[
|
[
|
||||||
|
new ButtonData
|
||||||
|
{
|
||||||
|
Text = T("Improve further"),
|
||||||
|
Tooltip = T("Moves the optimized prompt into the prompt field so you can optimize it again."),
|
||||||
|
Icon = Icons.Material.Filled.Input,
|
||||||
|
Color = Color.Default,
|
||||||
|
AsyncAction = this.UseOptimizedPromptAsInput,
|
||||||
|
DisabledActionParam = () => !this.CanImproveFurther,
|
||||||
|
},
|
||||||
new SendToButton
|
new SendToButton
|
||||||
{
|
{
|
||||||
Self = Tools.Components.PROMPT_OPTIMIZER_ASSISTANT,
|
Self = Tools.Components.PROMPT_OPTIMIZER_ASSISTANT,
|
||||||
@ -245,6 +254,7 @@ public partial class AssistantPromptOptimizer : AssistantBaseCore<SettingsDialog
|
|||||||
|
|
||||||
private bool ShowUpdatedPromptGuidelinesIndicator => !this.useCustomPromptGuide && this.hasUpdatedDefaultRecommendations;
|
private bool ShowUpdatedPromptGuidelinesIndicator => !this.useCustomPromptGuide && this.hasUpdatedDefaultRecommendations;
|
||||||
private bool CanPreviewCustomPromptGuide => this.useCustomPromptGuide && this.customPromptGuideFiles.Count > 0;
|
private bool CanPreviewCustomPromptGuide => this.useCustomPromptGuide && this.customPromptGuideFiles.Count > 0;
|
||||||
|
private bool CanImproveFurther => !this.IsProcessing && !string.IsNullOrWhiteSpace(this.optimizedPrompt);
|
||||||
private string CustomPromptGuideFileName => this.customPromptGuideFiles.Count switch
|
private string CustomPromptGuideFileName => this.customPromptGuideFiles.Count switch
|
||||||
{
|
{
|
||||||
0 => T("No file selected"),
|
0 => T("No file selected"),
|
||||||
@ -464,6 +474,27 @@ public partial class AssistantPromptOptimizer : AssistantBaseCore<SettingsDialog
|
|||||||
this.optimizedPrompt = string.Empty;
|
this.optimizedPrompt = string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Moves the optimized prompt into the input field so the user can optimize it once more.
|
||||||
|
/// </summary>
|
||||||
|
/// <remarks>
|
||||||
|
/// The finished run is dropped along the way. Keeping it would append the next optimization to
|
||||||
|
/// the chat thread of the previous one, and the earlier proposal would stay on screen next to
|
||||||
|
/// the prompt it was already turned into. The recommendations and every selection stay as they
|
||||||
|
/// are, though: they are what the user works with while refining the prompt.
|
||||||
|
/// </remarks>
|
||||||
|
private Task UseOptimizedPromptAsInput()
|
||||||
|
{
|
||||||
|
if (!this.CanImproveFurther)
|
||||||
|
return Task.CompletedTask;
|
||||||
|
|
||||||
|
this.inputPrompt = this.optimizedPrompt;
|
||||||
|
this.ResetOutput();
|
||||||
|
this.ClearConversationState();
|
||||||
|
this.ClearInputIssues();
|
||||||
|
return Task.CompletedTask;
|
||||||
|
}
|
||||||
|
|
||||||
private void ResetGuidelineSummaryToDefault()
|
private void ResetGuidelineSummaryToDefault()
|
||||||
{
|
{
|
||||||
this.recClarityDirectness = T("Use clear, explicit instructions and directly state quality expectations.");
|
this.recClarityDirectness = T("Use clear, explicit instructions and directly state quality expectations.");
|
||||||
|
|||||||
@ -2193,6 +2193,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- View
|
-- View
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "Anzeigen"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "Anzeigen"
|
||||||
|
|
||||||
|
-- Improve further
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582753277"] = "Weiter verbessern"
|
||||||
|
|
||||||
-- Separate context, task, constraints, and output format with headings or markers.
|
-- Separate context, task, constraints, and output format with headings or markers.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Trennen Sie Kontext, Aufgabe, Einschränkungen und Ausgabeformat mit Überschriften oder Markierungen."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Trennen Sie Kontext, Aufgabe, Einschränkungen und Ausgabeformat mit Überschriften oder Markierungen."
|
||||||
|
|
||||||
@ -2289,6 +2292,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- Use sequential steps
|
-- Use sequential steps
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Schrittweise vorgehen"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Schrittweise vorgehen"
|
||||||
|
|
||||||
|
-- Moves the optimized prompt into the prompt field so you can optimize it again.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T502438377"] = "Übernimmt den optimierten Prompt als neue Eingabe, damit Sie ihn erneut optimieren können."
|
||||||
|
|
||||||
-- Use clear, explicit instructions and directly state quality expectations.
|
-- Use clear, explicit instructions and directly state quality expectations.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Verwenden Sie klare, explizite Anweisungen und geben Sie direkt die Qualitätsmerkmale an."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Verwenden Sie klare, explizite Anweisungen und geben Sie direkt die Qualitätsmerkmale an."
|
||||||
|
|
||||||
|
|||||||
@ -2193,6 +2193,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- View
|
-- View
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "View"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582017048"] = "View"
|
||||||
|
|
||||||
|
-- Improve further
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1582753277"] = "Improve further"
|
||||||
|
|
||||||
-- Separate context, task, constraints, and output format with headings or markers.
|
-- Separate context, task, constraints, and output format with headings or markers.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Separate context, task, constraints, and output format with headings or markers."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T1626024580"] = "Separate context, task, constraints, and output format with headings or markers."
|
||||||
|
|
||||||
@ -2289,6 +2292,9 @@ UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER
|
|||||||
-- Use sequential steps
|
-- Use sequential steps
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Use sequential steps"
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T487578804"] = "Use sequential steps"
|
||||||
|
|
||||||
|
-- Moves the optimized prompt into the prompt field so you can optimize it again.
|
||||||
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T502438377"] = "Moves the optimized prompt into the prompt field so you can optimize it again."
|
||||||
|
|
||||||
-- Use clear, explicit instructions and directly state quality expectations.
|
-- Use clear, explicit instructions and directly state quality expectations.
|
||||||
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Use clear, explicit instructions and directly state quality expectations."
|
UI_TEXT_CONTENT["AISTUDIO::ASSISTANTS::PROMPTOPTIMIZER::ASSISTANTPROMPTOPTIMIZER::T596557540"] = "Use clear, explicit instructions and directly state quality expectations."
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@
|
|||||||
- Added organization-wide management for tools. Among other options, IT departments can switch tools off entirely, disable individual ones, or define the provider trust a tool requires. You do not have to write any of it by hand: set a tool up in the app, then export its configuration as ready-made Lua code for your plugin, with encrypted API keys if you want them.
|
- Added organization-wide management for tools. Among other options, IT departments can switch tools off entirely, disable individual ones, or define the provider trust a tool requires. You do not have to write any of it by hand: set a tool up in the app, then export its configuration as ready-made Lua code for your plugin, with encrypted API keys if you want them.
|
||||||
- Added tool calling to the abilities you can state yourself in the expert provider settings. When you use a model AI Studio does not recognize as tool-capable, you can now declare that it is, the same way you already could for image input or reasoning. It works in the other direction as well: a model AI Studio has never heard of is offered tools, because most models can use them by now. Should one turn out not to be able to, AI Studio says so in plain words and points you to the same setting to switch the ability off again, instead of only passing the provider's error on.
|
- Added tool calling to the abilities you can state yourself in the expert provider settings. When you use a model AI Studio does not recognize as tool-capable, you can now declare that it is, the same way you already could for image input or reasoning. It works in the other direction as well: a model AI Studio has never heard of is offered tools, because most models can use them by now. Should one turn out not to be able to, AI Studio says so in plain words and points you to the same setting to switch the ability off again, instead of only passing the provider's error on.
|
||||||
- Added support for OpenAI's GPT-6 Astra.
|
- Added support for OpenAI's GPT-6 Astra.
|
||||||
|
- Added a way to keep improving a prompt in the Prompt Optimizer. Select "Improve further" to move the latest proposal back into the prompt field, edit it the way you want, and optimize it again. Your recommendations and everything you selected stay as they are.
|
||||||
- Added the context window to what AI Studio knows about a model, wherever its metadata states one.
|
- Added the context window to what AI Studio knows about a model, wherever its metadata states one.
|
||||||
- Added a live read of that context window at the providers which report it, among them Mistral, Groq, OpenRouter, and self-hosted vLLM servers. You then get the window your own server was started with, not the one the model card advertises.
|
- Added a live read of that context window at the providers which report it, among them Mistral, Groq, OpenRouter, and self-hosted vLLM servers. You then get the window your own server was started with, not the one the model card advertises.
|
||||||
- Added a token count below the message field, so you always see how much of the conversation you have used. It counts everything that travels along: your messages, the files you attached, what your data sources contributed, and the tools you offered the AI. It can be an estimate when a provider does not give AI Studio everything it needs to count exactly.
|
- Added a token count below the message field, so you always see how much of the conversation you have used. It counts everything that travels along: your messages, the files you attached, what your data sources contributed, and the tools you offered the AI. It can be an estimate when a provider does not give AI Studio everything it needs to count exactly.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user