2025-03-12 10:31:01 +00:00
using AIStudio.Dialogs.Settings ;
2024-08-21 06:30:01 +00:00
namespace AIStudio.Assistants.IconFinder ;
2024-07-14 19:46:17 +00:00
2025-03-12 10:31:01 +00:00
public partial class AssistantIconFinder : AssistantBaseCore < SettingsDialogIconFinder >
2024-07-14 19:46:17 +00:00
{
2024-09-14 17:20:33 +00:00
public override Tools . Components Component = > Tools . Components . ICON_FINDER_ASSISTANT ;
2024-07-14 19:46:17 +00:00
2025-04-27 07:06:05 +00:00
protected override string Title = > T ( "Icon Finder" ) ;
2024-07-14 19:46:17 +00:00
2025-04-27 07:06:05 +00:00
protected override string Description = > T ( "" "Finding the right icon for a context, such as for a piece of text, is not easy. The first challenge: You need to extract a concept from your context, such as from a text. Let's take an example where your text contains statements about multiple departments. The sought-after concept could be " departments . " The next challenge is that we need to anticipate the bias of the icon designers: under the search term " departments , " there may be no relevant icons or only unsuitable ones. Depending on the icon source, it might be more effective to search for " buildings , " for instance. LLMs assist you with both steps." "" ) ;
2024-07-14 19:46:17 +00:00
protected override string SystemPrompt = >
"" "
I can search for icons using US English keywords . Please help me come up with the right search queries .
I don ' t want you to translate my requests word - for - word into US English . Instead , you should provide keywords
that are likely to yield suitable icons . For example , I might ask for an icon about departments , but icons
related to the keyword "buildings" might be the best match . Provide your keywords in a Markdown list without
quotation marks .
"" ";
2024-09-08 19:01:51 +00:00
protected override bool AllowProfiles = > false ;
2024-08-18 10:32:18 +00:00
2024-09-04 13:44:23 +00:00
protected override IReadOnlyList < IButtonData > FooterButtons = > [ ] ;
2024-07-14 19:46:17 +00:00
2025-04-27 07:06:05 +00:00
protected override string SubmitText = > T ( "Find Icon" ) ;
2024-09-11 21:08:02 +00:00
protected override Func < Task > SubmitAction = > this . FindIcon ;
2025-03-12 10:31:01 +00:00
2025-01-01 14:49:27 +00:00
protected override void ResetForm ( )
2024-08-18 19:48:35 +00:00
{
this . inputContext = string . Empty ;
if ( ! this . MightPreselectValues ( ) )
{
this . selectedIconSource = IconSources . GENERIC ;
}
}
2024-08-18 10:32:18 +00:00
2024-08-18 19:48:35 +00:00
protected override bool MightPreselectValues ( )
2024-08-18 10:32:18 +00:00
{
if ( this . SettingsManager . ConfigurationData . IconFinder . PreselectOptions )
{
this . selectedIconSource = this . SettingsManager . ConfigurationData . IconFinder . PreselectedSource ;
2024-08-18 19:48:35 +00:00
return true ;
2024-08-18 10:32:18 +00:00
}
2024-08-18 19:48:35 +00:00
return false ;
}
2024-09-04 13:44:23 +00:00
private string inputContext = string . Empty ;
private IconSources selectedIconSource ;
2024-08-18 19:48:35 +00:00
#region Overrides of ComponentBase
2024-08-18 10:32:18 +00:00
2024-08-18 19:48:35 +00:00
protected override async Task OnInitializedAsync ( )
{
2024-08-18 10:32:18 +00:00
var deferredContent = MessageBus . INSTANCE . CheckDeferredMessages < string > ( Event . SEND_TO_ICON_FINDER_ASSISTANT ) . FirstOrDefault ( ) ;
if ( deferredContent is not null )
this . inputContext = deferredContent ;
await base . OnInitializedAsync ( ) ;
}
#endregion
2024-07-14 19:46:17 +00:00
private string? ValidatingContext ( string context )
{
if ( string . IsNullOrWhiteSpace ( context ) )
2025-04-27 07:06:05 +00:00
return T ( "Please provide a context. This will help the AI to find the right icon. You might type just a keyword or copy a sentence from your text, e.g., from a slide where you want to use the icon." ) ;
2024-07-14 19:46:17 +00:00
return null ;
}
private async Task FindIcon ( )
{
await this . form ! . Validate ( ) ;
if ( ! this . inputIsValid )
return ;
this . CreateChatThread ( ) ;
var time = this . AddUserRequest (
$"" "
{ this . selectedIconSource . Prompt ( ) } I search for an icon for the following context :
` ` `
{ this . inputContext }
` ` `
"" ");
await this . AddAIResponseAsync ( time ) ;
}
}