diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
index 2a9fdeb5..f7887f6a 100644
--- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
+++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor
@@ -25,6 +25,12 @@
@bind-PreselectContentCleanerAgent="@webState.PreselectContentCleanerAgent" />
}
break;
+ case AssistantUiCompontentType.FILE_CONTENT_READER:
+ if (component is AssistantFileContentReader fileContent && this.fileContentFields.TryGetValue(fileContent.Name, out var fileState))
+ {
+
+ }
+ break;
case AssistantUiCompontentType.DROPDOWN:
if (component is AssistantDropdown assistantDropdown)
diff --git a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
index 8a8de8a6..72c4c3bb 100644
--- a/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
+++ b/app/MindWork AI Studio/Assistants/Dynamic/AssistantDynamic.razor.cs
@@ -35,6 +35,7 @@ public partial class AssistantDynamic : AssistantBaseCore
private Dictionary dropdownFields = new();
private Dictionary switchFields = new();
private Dictionary webContentFields = new();
+ private Dictionary fileContentFields = new();
protected override void OnInitialized()
{
@@ -83,6 +84,12 @@ public partial class AssistantDynamic : AssistantBaseCore
});
}
break;
+ case AssistantUiCompontentType.FILE_CONTENT_READER:
+ if (component is AssistantFileContentReader fileContent)
+ {
+ this.fileContentFields.Add(fileContent.Name, new FileContentState());
+ }
+ break;
}
}
base.OnInitialized();
@@ -99,6 +106,10 @@ public partial class AssistantDynamic : AssistantBaseCore
entry.Value.Content = string.Empty;
entry.Value.AgentIsRunning = false;
}
+ foreach (var entry in this.fileContentFields)
+ {
+ entry.Value.Content = string.Empty;
+ }
}
protected override bool MightPreselectValues()
@@ -164,6 +175,21 @@ public partial class AssistantDynamic : AssistantBaseCore
}
}
break;
+ case AssistantUiCompontentType.FILE_CONTENT_READER:
+ if (component is AssistantFileContentReader fileContent &&
+ this.fileContentFields.TryGetValue(fileContent.Name, out var fileState))
+ {
+ if (!string.IsNullOrWhiteSpace(fileContent.UserPrompt))
+ {
+ prompt += $"{Environment.NewLine}context:{Environment.NewLine}{fileContent.UserPrompt}{Environment.NewLine}---{Environment.NewLine}";
+ }
+
+ if (!string.IsNullOrWhiteSpace(fileState.Content))
+ {
+ prompt += $"user prompt:{Environment.NewLine}{fileState.Content}";
+ }
+ }
+ break;
default:
prompt += $"{userInput}{Environment.NewLine}";
break;
@@ -192,4 +218,5 @@ public partial class AssistantDynamic : AssistantBaseCore
var time = this.AddUserRequest(this.CollectUserPrompt());
await this.AddAIResponseAsync(time);
}
+
}
diff --git a/app/MindWork AI Studio/Assistants/Dynamic/FileContentState.cs b/app/MindWork AI Studio/Assistants/Dynamic/FileContentState.cs
new file mode 100644
index 00000000..f7e0da60
--- /dev/null
+++ b/app/MindWork AI Studio/Assistants/Dynamic/FileContentState.cs
@@ -0,0 +1,6 @@
+namespace AIStudio.Assistants.Dynamic;
+
+internal sealed class FileContentState
+{
+ public string Content { get; set; } = string.Empty;
+}
diff --git a/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs b/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs
index 70a6977a..d9398f05 100644
--- a/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs
+++ b/app/MindWork AI Studio/Assistants/Dynamic/WebContentState.cs
@@ -1,9 +1,9 @@
-namespace AIStudio.Assistants.Dynamic;
+namespace AIStudio.Assistants.Dynamic;
-public sealed class WebContentState
+internal sealed class WebContentState
{
public string Content { get; set; } = string.Empty;
public bool Preselect { get; set; }
public bool PreselectContentCleanerAgent { get; set; }
public bool AgentIsRunning { get; set; }
-}
\ No newline at end of file
+}
diff --git a/app/MindWork AI Studio/Plugins/assistants/plugin.lua b/app/MindWork AI Studio/Plugins/assistants/plugin.lua
index df679ca1..7a60cfbe 100644
--- a/app/MindWork AI Studio/Plugins/assistants/plugin.lua
+++ b/app/MindWork AI Studio/Plugins/assistants/plugin.lua
@@ -151,6 +151,13 @@ ASSISTANT = {
["PreselectContentCleanerAgent"] = true -- run the content cleaner by default
}
},
+ {
+ ["Type"] = "FILE_CONTENT_READER", -- allows the user to load local files
+ ["Props"] = {
+ ["Name"] = "", -- required
+ ["UserPrompt"] = ""
+ }
+ },
}
},
}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
index bb1b581a..dae13bf7 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/AssistantComponentFactory.cs
@@ -35,6 +35,8 @@ public class AssistantComponentFactory
return new AssistantList { Props = props, Children = children };
case AssistantUiCompontentType.WEB_CONTENT_READER:
return new AssistantWebContentReader { Props = props, Children = children };
+ case AssistantUiCompontentType.FILE_CONTENT_READER:
+ return new AssistantFileContentReader { Props = props, Children = children };
default:
LOGGER.LogError($"Unknown assistant component type!\n{type} is not a supported assistant component type");
throw new Exception($"Unknown assistant component type: {type}");
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs
new file mode 100644
index 00000000..f521bb70
--- /dev/null
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantFileContentReader.cs
@@ -0,0 +1,24 @@
+namespace AIStudio.Tools.PluginSystem.Assistants.DataModel;
+
+public class AssistantFileContentReader : AssistantComponentBase
+{
+ public override AssistantUiCompontentType Type => AssistantUiCompontentType.FILE_CONTENT_READER;
+ public Dictionary Props { get; set; } = new();
+ public List Children { get; set; } = new();
+
+ public string Name
+ {
+ get => this.Props.TryGetValue(nameof(this.Name), out var v)
+ ? v.ToString() ?? string.Empty
+ : string.Empty;
+ set => this.Props[nameof(this.Name)] = value;
+ }
+
+ public string UserPrompt
+ {
+ get => this.Props.TryGetValue(nameof(this.UserPrompt), out var v)
+ ? v.ToString() ?? string.Empty
+ : string.Empty;
+ set => this.Props[nameof(this.UserPrompt)] = value;
+ }
+}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
index 1a0568b4..99d264c2 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/AssistantUiCompontentType.cs
@@ -13,4 +13,5 @@ public enum AssistantUiCompontentType
TEXT,
LIST,
WEB_CONTENT_READER,
+ FILE_CONTENT_READER,
}
diff --git a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
index dd3aaa61..41001325 100644
--- a/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
+++ b/app/MindWork AI Studio/Tools/PluginSystem/Assistants/DataModel/ComponentPropSpecs.cs
@@ -49,5 +49,9 @@ public static class ComponentPropSpecs
required: ["Name"],
optional: ["UserPrompt", "Preselect", "PreselectContentCleanerAgent"]
),
+ [AssistantUiCompontentType.FILE_CONTENT_READER] = new(
+ required: ["Name"],
+ optional: ["UserPrompt"]
+ ),
};
}