This commit is contained in:
j-erler 2026-09-24 19:49:00 +02:00 committed by GitHub
commit 569f958514
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 328 additions and 0 deletions

View File

@ -3643,6 +3643,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2670286472"] = "Profile u
-- The selected provider is not allowed in this chat due to data security or confidence-level requirements. -- The selected provider is not allowed in this chat due to data security or confidence-level requirements.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "The selected provider is not allowed in this chat due to data security or confidence-level requirements." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "The selected provider is not allowed in this chat due to data security or confidence-level requirements."
-- Show the complete system prompt the AI receives
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2931983492"] = "Show the complete system prompt the AI receives"
-- Bulleted List -- Bulleted List
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Bulleted List" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Bulleted List"
@ -3676,6 +3679,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4231005109"] = "Heading"
-- Please select the workspace where you want to move the chat to. -- Please select the workspace where you want to move the chat to.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Please select the workspace where you want to move the chat to." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Please select the workspace where you want to move the chat to."
-- Complete system prompt of this chat
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T544159998"] = "Complete system prompt of this chat"
-- Move the chat to a workspace, or to another if it is already in one. -- Move the chat to a workspace, or to another if it is already in one.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Move the chat to a workspace, or to another if it is already in one." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Move the chat to a workspace, or to another if it is already in one."
@ -8824,6 +8830,48 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Your Inp
-- Cancel -- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel"
-- Included, retrieved for an earlier message
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1359693360"] = "Included, retrieved for an earlier message"
-- Data from your data sources
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1629973648"] = "Data from your data sources"
-- Date and time
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T2054731205"] = "Date and time"
-- Included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3098410457"] = "Included"
-- This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3315883870"] = "This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here."
-- Profile
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3440849550"] = "Profile"
-- Close
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3448155331"] = "Close"
-- Complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3725933563"] = "Complete system prompt"
-- Switched off by the chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3728646729"] = "Switched off by the chat template"
-- Tool instructions
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T4067010756"] = "Tool instructions"
-- the complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T471427542"] = "the complete system prompt"
-- None
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T810547195"] = "None"
-- Not included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T885651534"] = "Not included"
-- Chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T923285303"] = "Chat template"
-- Hugging Face Inference Provider -- Hugging Face Inference Provider
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face Inference Provider" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face Inference Provider"

View File

@ -132,6 +132,10 @@
<MudDivider Vertical="true" Style="height: 24px; align-self: center;"/> <MudDivider Vertical="true" Style="height: 24px; align-self: center;"/>
<MudTooltip Text="@T("Show the complete system prompt the AI receives")" Placement="@TOOLBAR_TOOLTIP_PLACEMENT">
<MudIconButton Icon="@Icons.Material.Filled.Visibility" OnClick="@this.ShowSystemPrompt"/>
</MudTooltip>
<ProfileSelection MarginLeft="" CurrentProfile="@this.currentProfile" CurrentProfileChanged="@this.ProfileWasChanged" Disabled="@(!this.currentChatTemplate.AllowProfileUsage)" DisabledText="@T("Profile usage is disabled according to your chat template settings.")"/> <ProfileSelection MarginLeft="" CurrentProfile="@this.currentProfile" CurrentProfileChanged="@this.ProfileWasChanged" Disabled="@(!this.currentChatTemplate.AllowProfileUsage)" DisabledText="@T("Profile usage is disabled according to your chat template settings.")"/>
@if (this.SettingsManager.AreToolsEnabled()) @if (this.SettingsManager.AreToolsEnabled())

View File

@ -1655,6 +1655,46 @@ public partial class ChatComponent : MSGComponentBase
/// <returns>The system prompt as it would be sent.</returns> /// <returns>The system prompt as it would be sent.</returns>
private string BuildSystemPromptFor(ChatThread thread, IReadOnlyList<ToolDefinition> toolDefinitions) => thread.BuildSystemPrompt(this.SettingsManager, toolDefinitions).Text; private string BuildSystemPromptFor(ChatThread thread, IReadOnlyList<ToolDefinition> toolDefinitions) => thread.BuildSystemPrompt(this.SettingsManager, toolDefinitions).Text;
/// <summary>
/// Shows the system prompt the next request would send, and what it was assembled from.
/// </summary>
/// <remarks>
/// Built the same way the token count builds it, so the dialog shows what is counted and sent.
/// Before the first message there is no thread yet, and the one a new chat would start with
/// stands in for it, as it does for the count.
///
/// The parts are read from the same values the prompt is built from, but the decisions are the
/// ones <see cref="ChatThread.BuildSystemPrompt"/> makes: should it ever weigh them differently,
/// the list has to follow, while the text is always right.
/// </remarks>
private async Task ShowSystemPrompt()
{
var thread = this.ChatThread ?? this.NewChatThread(string.Empty);
var toolDefinitions = this.GetRunnableToolDefinitions();
var prepared = thread.BuildSystemPrompt(this.SettingsManager, toolDefinitions);
var chatTemplate = this.SettingsManager.GetChatTemplateById(thread.SelectedChatTemplate);
var profile = this.SettingsManager.GetProfileById(thread.SelectedProfile);
var toolNames = toolDefinitions
.Where(definition => !string.IsNullOrWhiteSpace(definition.SystemPromptInstructions))
.Select(definition => this.ToolRegistry.GetImplementation(definition.ImplementationKey)?.GetDisplayName() ?? definition.Function.Name)
.Distinct(StringComparer.Ordinal)
.ToList();
var dialogParameters = new DialogParameters<SystemPromptDialog>
{
{ x => x.SystemPrompt, prepared.Text },
{ x => x.ChatTemplateName, chatTemplate == ChatTemplate.NO_CHAT_TEMPLATE ? string.Empty : chatTemplate.Name },
{ x => x.ProfileName, !prepared.ProfileIsAllowed || profile == Profile.NO_PROFILE ? string.Empty : profile.Name },
{ x => x.IsProfileForbiddenByChatTemplate, !prepared.ProfileIsAllowed },
{ x => x.HasRetrievedData, !string.IsNullOrWhiteSpace(thread.AugmentedData) },
{ x => x.ToolNames, toolNames },
{ x => x.IncludesDateTime, thread.IncludeDateTime },
};
await this.DialogService.ShowAsync<SystemPromptDialog>(T("Complete system prompt of this chat"), dialogParameters, DialogOptions.FULLSCREEN);
}
/// <summary> /// <summary>
/// The tools the next request would offer the model. /// The tools the next request would offer the model.
/// </summary> /// </summary>

View File

@ -0,0 +1,42 @@
@inherits MSGComponentBase
<MudDialog>
<DialogContent>
<MudJustifiedText Typo="Typo.body1" Class="mb-3">
@T("This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here.")
</MudJustifiedText>
@* In the order in which the parts appear in the prompt below: *@
<MudSimpleTable Dense="@true" Class="mb-6">
<tbody>
<tr>
<td>@T("Date and time")</td>
<td>@this.DateTimeText</td>
</tr>
<tr>
<td>@T("Chat template")</td>
<td>@this.ChatTemplateText</td>
</tr>
<tr>
<td>@T("Data from your data sources")</td>
<td>@this.RetrievedDataText</td>
</tr>
<tr>
<td>@T("Profile")</td>
<td>@this.ProfileText</td>
</tr>
<tr>
<td>@T("Tool instructions")</td>
<td>@this.ToolNamesText</td>
</tr>
</tbody>
</MudSimpleTable>
<TextInfoLines Label="@T("Complete system prompt")" MaxLines="20" Value="@this.SystemPrompt" ClipboardTooltipSubject="@T("the complete system prompt")"/>
</DialogContent>
<DialogActions>
<MudButton OnClick="@this.Close" Variant="Variant.Filled" Color="Color.Primary">
@T("Close")
</MudButton>
</DialogActions>
</MudDialog>

View File

@ -0,0 +1,97 @@
using AIStudio.Components;
using Microsoft.AspNetCore.Components;
namespace AIStudio.Dialogs;
/// <summary>
/// Shows the system prompt a chat sends, together with the parts it was assembled from.
/// </summary>
/// <remarks>
/// Nobody types this prompt as it is sent. A chat template replaces the default, a profile, the
/// retrieved data of a data source, and the policy of the selected tools are added to it, and the
/// date goes in front. The list above the text names these parts, so a person does not have to
/// work out from the text alone where a paragraph came from.
/// </remarks>
public partial class SystemPromptDialog : MSGComponentBase
{
[CascadingParameter]
private IMudDialogInstance MudDialog { get; set; } = null!;
/// <summary>
/// The whole system prompt, as the provider receives it.
/// </summary>
[Parameter]
public string SystemPrompt { get; set; } = string.Empty;
/// <summary>
/// The name of the chat template whose prompt replaces the default, or empty when there is none.
/// </summary>
[Parameter]
public string ChatTemplateName { get; set; } = string.Empty;
/// <summary>
/// The name of the profile which takes part, or empty when there is none.
/// </summary>
[Parameter]
public string ProfileName { get; set; } = string.Empty;
/// <summary>
/// Whether the chat template forbids a profile, which explains why none takes part even though one may be selected.
/// </summary>
[Parameter]
public bool IsProfileForbiddenByChatTemplate { get; set; }
/// <summary>
/// Whether the prompt carries data retrieved from a data source.
/// </summary>
[Parameter]
public bool HasRetrievedData { get; set; }
/// <summary>
/// The names of the tools whose usage policy is part of the prompt.
/// </summary>
[Parameter]
public IReadOnlyList<string> ToolNames { get; set; } = [];
/// <summary>
/// Whether the current date and time go in front of the prompt.
/// </summary>
[Parameter]
public bool IncludesDateTime { get; set; }
private string ChatTemplateText => string.IsNullOrWhiteSpace(this.ChatTemplateName)
? T("None")
: this.ChatTemplateName;
private string ProfileText
{
get
{
if (this.IsProfileForbiddenByChatTemplate)
return T("Switched off by the chat template");
return string.IsNullOrWhiteSpace(this.ProfileName)
? T("None")
: this.ProfileName;
}
}
//
// Not promised to be refreshed with the next message: the data is replaced only when a new
// retrieval finds something. Until then, what was retrieved earlier travels along again.
//
private string RetrievedDataText => this.HasRetrievedData
? T("Included, retrieved for an earlier message")
: T("None");
private string ToolNamesText => this.ToolNames.Count == 0
? T("None")
: string.Join(", ", this.ToolNames);
private string DateTimeText => this.IncludesDateTime
? T("Included")
: T("Not included");
private void Close() => this.MudDialog.Close();
}

View File

@ -3645,6 +3645,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2670286472"] = "Die Profi
-- The selected provider is not allowed in this chat due to data security or confidence-level requirements. -- The selected provider is not allowed in this chat due to data security or confidence-level requirements.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "Der ausgewählte Anbieter ist in diesem Chat aufgrund der Datensicherheit oder der Anforderungen an das Vertrauensniveau nicht zulässig." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "Der ausgewählte Anbieter ist in diesem Chat aufgrund der Datensicherheit oder der Anforderungen an das Vertrauensniveau nicht zulässig."
-- Show the complete system prompt the AI receives
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2931983492"] = "Den vollständigen Systemprompt anzeigen, den die KI erhält"
-- Bulleted List -- Bulleted List
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Aufzählungszeichen" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Aufzählungszeichen"
@ -3678,6 +3681,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4231005109"] = "Überschr
-- Please select the workspace where you want to move the chat to. -- Please select the workspace where you want to move the chat to.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Bitte wählen Sie den Arbeitsbereich aus, in den Sie den Chat verschieben möchten." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Bitte wählen Sie den Arbeitsbereich aus, in den Sie den Chat verschieben möchten."
-- Complete system prompt of this chat
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T544159998"] = "Vollständiger Systemprompt dieses Chats"
-- Move the chat to a workspace, or to another if it is already in one. -- Move the chat to a workspace, or to another if it is already in one.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Verschieben Sie den Chat in einen Arbeitsbereich oder in einen anderen, falls er sich bereits in einem befindet." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Verschieben Sie den Chat in einen Arbeitsbereich oder in einen anderen, falls er sich bereits in einem befindet."
@ -8826,6 +8832,48 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Ihre Ein
-- Cancel -- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Abbrechen" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Abbrechen"
-- Included, retrieved for an earlier message
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1359693360"] = "Enthalten, abgerufen für eine frühere Nachricht"
-- Data from your data sources
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1629973648"] = "Daten aus Ihren Datenquellen"
-- Date and time
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T2054731205"] = "Datum und Uhrzeit"
-- Included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3098410457"] = "Enthalten"
-- This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3315883870"] = "Dies ist der vollständige Systemprompt, den die KI mit Ihrer nächsten Nachricht erhält. AI Studio setzt ihn aus den hier aufgeführten Teilen zusammen."
-- Profile
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3440849550"] = "Profil"
-- Close
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3448155331"] = "Schließen"
-- Complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3725933563"] = "Vollständiger Systemprompt"
-- Switched off by the chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3728646729"] = "Von der Chat-Vorlage abgeschaltet"
-- Tool instructions
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T4067010756"] = "Anweisungen für Werkzeuge"
-- the complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T471427542"] = "Den vollständigen Systemprompt"
-- None
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T810547195"] = "Keine"
-- Not included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T885651534"] = "Nicht enthalten"
-- Chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T923285303"] = "Chat-Vorlage"
-- Hugging Face Inference Provider -- Hugging Face Inference Provider
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face-Inferenzanbieter" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face-Inferenzanbieter"

View File

@ -3645,6 +3645,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2670286472"] = "Profile u
-- The selected provider is not allowed in this chat due to data security or confidence-level requirements. -- The selected provider is not allowed in this chat due to data security or confidence-level requirements.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "The selected provider is not allowed in this chat due to data security or confidence-level requirements." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2672162875"] = "The selected provider is not allowed in this chat due to data security or confidence-level requirements."
-- Show the complete system prompt the AI receives
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2931983492"] = "Show the complete system prompt the AI receives"
-- Bulleted List -- Bulleted List
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Bulleted List" UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T2957125464"] = "Bulleted List"
@ -3678,6 +3681,9 @@ UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T4231005109"] = "Heading"
-- Please select the workspace where you want to move the chat to. -- Please select the workspace where you want to move the chat to.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Please select the workspace where you want to move the chat to." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T474393241"] = "Please select the workspace where you want to move the chat to."
-- Complete system prompt of this chat
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T544159998"] = "Complete system prompt of this chat"
-- Move the chat to a workspace, or to another if it is already in one. -- Move the chat to a workspace, or to another if it is already in one.
UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Move the chat to a workspace, or to another if it is already in one." UI_TEXT_CONTENT["AISTUDIO::COMPONENTS::CHATCOMPONENT::T636393754"] = "Move the chat to a workspace, or to another if it is already in one."
@ -8826,6 +8832,48 @@ UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T4030229154"] = "Your Inp
-- Cancel -- Cancel
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SINGLEINPUTDIALOG::T900713019"] = "Cancel"
-- Included, retrieved for an earlier message
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1359693360"] = "Included, retrieved for an earlier message"
-- Data from your data sources
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T1629973648"] = "Data from your data sources"
-- Date and time
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T2054731205"] = "Date and time"
-- Included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3098410457"] = "Included"
-- This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here.
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3315883870"] = "This is the complete system prompt the AI receives with your next message. AI Studio assembles it from the parts listed here."
-- Profile
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3440849550"] = "Profile"
-- Close
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3448155331"] = "Close"
-- Complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3725933563"] = "Complete system prompt"
-- Switched off by the chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T3728646729"] = "Switched off by the chat template"
-- Tool instructions
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T4067010756"] = "Tool instructions"
-- the complete system prompt
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T471427542"] = "the complete system prompt"
-- None
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T810547195"] = "None"
-- Not included
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T885651534"] = "Not included"
-- Chat template
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::SYSTEMPROMPTDIALOG::T923285303"] = "Chat template"
-- Hugging Face Inference Provider -- Hugging Face Inference Provider
UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face Inference Provider" UI_TEXT_CONTENT["AISTUDIO::DIALOGS::TRANSCRIPTIONPROVIDERDIALOG::T1085481431"] = "Hugging Face Inference Provider"

View File

@ -2,6 +2,7 @@
- Added a way to copy an entire chat, either with the button in the chat toolbar or next to the chat in the chat list. The copy opens right away so you can continue in it, while the original conversation stays exactly as it was. Many thanks to Peer Hogeterp (`peerschuett`) and Jens Erler (`j-erler`) for this feature. - Added a way to copy an entire chat, either with the button in the chat toolbar or next to the chat in the chat list. The copy opens right away so you can continue in it, while the original conversation stays exactly as it was. Many thanks to Peer Hogeterp (`peerschuett`) and Jens Erler (`j-erler`) for this feature.
- Added a way to roll a chat back to an earlier AI response. The response you pick stays, and every message after it is removed permanently, together with the attachments of those messages. - Added a way to roll a chat back to an earlier AI response. The response you pick stays, and every message after it is removed permanently, together with the attachments of those messages.
- Added a way to save a single code block of an answer. When an answer holds a web page, a LaTeX document, or a Markdown text, the export menu now offers that block as a file of its own. - Added a way to save a single code block of an answer. When an answer holds a web page, a LaTeX document, or a Markdown text, the export menu now offers that block as a file of its own.
- Added a way to see the complete system prompt a chat sends to the AI. The new button with the eye in the chat toolbar shows it exactly as the AI receives it. That is rarely just the default prompt: a chat template may replace it, and your profile, data from your data sources, the instructions of your tools, and the current date may be added to it. A short list above the prompt names the parts it was assembled from, and you can copy the prompt with one click.
- Added tools that AI models can use on their own, starting with Web Search and Read Web Page. When you ask something a model cannot answer from what it knows, it now searches the web, reads the pages it found, and answers with the sources it used. You decide which tools a model may use, right below the message field, and you can watch it work: AI Studio shows which tool is running and, afterward, every call it made with its result. Whether tools are offered at all depends on the model because it has to support them. Read Web Page works right away; for Web Search you pick a search service in the app settings — Tavily or Staan with a free API key, or a SearXNG instance you run yourself. Set up more than one, and they can take turns when one of them finds nothing, or be asked all at once with their results combined. Many thanks to Peer Hogeterp (`peerschuett`) and Nils Kruthoff (`nilskruthoff`) for building this feature. - Added tools that AI models can use on their own, starting with Web Search and Read Web Page. When you ask something a model cannot answer from what it knows, it now searches the web, reads the pages it found, and answers with the sources it used. You decide which tools a model may use, right below the message field, and you can watch it work: AI Studio shows which tool is running and, afterward, every call it made with its result. Whether tools are offered at all depends on the model because it has to support them. Read Web Page works right away; for Web Search you pick a search service in the app settings — Tavily or Staan with a free API key, or a SearXNG instance you run yourself. Set up more than one, and they can take turns when one of them finds nothing, or be asked all at once with their results combined. Many thanks to Peer Hogeterp (`peerschuett`) and Nils Kruthoff (`nilskruthoff`) for building this feature.
- Added answers that appear word by word even while the AI uses its tools. You read along as the model writes, including the short note it puts down before it looks something up, and the answer that follows a tool call arrives the same way instead of all at once at the end. - Added answers that appear word by word even while the AI uses its tools. You read along as the model writes, including the short note it puts down before it looks something up, and the answer that follows a tool call arrives the same way instead of all at once at the end.
- Added safeguards around everything these tools bring back. Anything fetched from the web is treated as untrusted: AI Studio removes instructions hidden in a page before a model reads it and tells you when it did, exactly as it already does for the documents and web pages you load yourself. A model can never point a tool at your own network. Each tool states how much you have to trust a provider before it may be used with it, so your questions do not travel further than you allow. You can adjust that requirement per tool in the app settings. - Added safeguards around everything these tools bring back. Anything fetched from the web is treated as untrusted: AI Studio removes instructions hidden in a page before a model reads it and tells you when it did, exactly as it already does for the documents and web pages you load yourself. A model can never point a tool at your own network. Each tool states how much you have to trust a provider before it may be used with it, so your questions do not travel further than you allow. You can adjust that requirement per tool in the app settings.