* Remove `ServiceProfileConfig` and `SkillConfig`
Refactored the codebase to eliminate `ServiceProfileConfig` and `SkillConfig` in favor of simplifying configurations. Updated related entities and settings to consistently use `ServiceConfig` and `AgentConfig`. Refined function execution to enhance overall system coherence and maintainability.
* Refactor agent management and plugin system
This update eliminates AgentManager and related classes, introducing new management interfaces and memory-based stores. The plugin system is refactored with better separation of concerns and the addition of provider interfaces.
* Add new Agents features and services
Introduced AgentsFeature for API endpoints, AgentManagementFeature for agent management, and AgentActivitiesFeature for activities. Updated service configurations and migrated files for cleaner and more maintainable code structure.
* Rename execute endpoints to invoke
Renamed the 'Execute' endpoints and related paths to 'Invoke' for better semantic clarity. Adjusted the namespace and updated the route configuration accordingly to reflect this change.
* Add permissions configuration to Agents Invoke endpoint
This commit adds a call to `ConfigurePermissions("agents:invoke")` in the Agents Invoke endpoint configuration. This change ensures that proper permissions are checked when this endpoint is accessed.
* Rename Management to Persistence with EF Core support
Renamed various files and classes from Management to Persistence. Introduced Entity Framework Core (EF Core) support for agents, including implementation of APIs for API key, service, and agent definitions. The changes also updated project configurations and added necessary database context and entity configurations.
* Add EntityFrameworkCore project for Agents persistence
Introduce a new Entity Framework Core provider to manage the persistence layer of the Agents module. The project includes references to the base persistence and common Entity Framework projects.
* Remove redundant exception handlers and add new SQLite migration.
Deleted unnecessary `DbExceptionTransformer` and `RethrowDbExceptionHandler` classes to streamline error handling. Introduced a new SQLite migration for the Agents module to create necessary database tables and indices. Also modified `Store` and `EntityStore` to utilize a service provider for exception handling.
* Add Sqlite configuration extension and sample updates
Introduce a new extension method for configuring EF Core to use Sqlite in the Elsa.Agents module. Updated the sample project to use a configurable Sqlite connection string and adjusted the appsettings.json accordingly. Also added necessary folder structure in the project file.
* Add agent, service, and API key CRUD operations
Introduced CRUD functionalities for agent, service, and API key entities. Added endpoint handlers, filtering capabilities, and memory/EF core stores to support these operations. Updated configuration mappings as well.
* Add Agent API endpoints and DTOs
Added CRUD endpoints for agents in Elsa.Agents.Api along with the required DTOs and Request models. These endpoints include create, read, update, delete, and list functionalities, facilitating the management of agent entities.
* Add support for agent service providers and discovery
Introduce interfaces and implementations for agent service providers and service discovery. Updated `KernelFactory` to integrate the new service discovery mechanism and restructured plugin discoverer naming for consistency.
* Add agent management features
Introduce agent management components, including pages for listing and handling agent workflows, dialogs for creating agents with Blazor components, and backend API endpoints for generating unique agent names. This enhances functionality for managing agent workflows within the application.
* Refactor exception handling and simplify event handling logic
Replaced DataProcessingDbExceptionHandler with DbExceptionTransformer for handling PostgreSQL exceptions. Streamlined event completion logic by renaming method and ensuring input retrieval before setting the result.
* Add bulk delete endpoint for agents
Introduced new API endpoint for bulk deleting agents. Implemented request and response models, and updated persistence layer to handle bulk operations. Also reorganized project structure for better modularity.
* Refactor API Key models and endpoint classes
Consolidate API Key request models into unified models and update endpoints to use these new models. Add new transformation methods to entity classes. Enhance configuration classes and streamline the dependency injection process.
* Refactor and streamline bulk delete and service APIs
Refactored the bulk delete endpoints for API keys, services, and agents, consolidating request and response models. Added new service input and model classes and updated the corresponding stores to support bulk deletions. Simplified the endpoint logic to use these new models and enhanced filtering capabilities.
* Set default values for AgentInputModel properties
Updated properties in `AgentInputModel` to use initialized default values instead of `default!`. This change ensures that string and object properties are instantiated properly, improving code stability and preventing potential null reference exceptions.
* Add plugin listing endpoint and related models
Introduced a new endpoint to list all registered plugins in the system. Added necessary models and methods for plugin description and retrieval, along with appropriate documentation comments.
* Refactor agent management to use `IAgentManager`.
Created new notifications for agent lifecycle events and introduced an `AgentManager` service for agent CRUD operations. Updated APIs and other components to use the new `IAgentManager` service instead of direct store access for a more cohesive architecture.
* Update agent activity descriptor names
Changed the activity descriptor names to use PascalCase for consistency and readability. Also added display names for input variables to improve user interfaces.
* Add overloaded RefreshDescriptorsAsync for single activity provider
Introduced a new overloaded method in IActivityRegistry and ActivityRegistry to refresh activity descriptors using a single IActivityProvider. Updated RefreshActivityRegistry to use the new method, ensuring more flexibility in descriptor refresh operations.
439 lines
17 KiB
JSON
439 lines
17 KiB
JSON
{
|
|
"Logging": {
|
|
"LogLevel": {
|
|
"Default": "Information",
|
|
"Microsoft.AspNetCore": "Warning",
|
|
"Microsoft.EntityFrameworkCore": "Warning"
|
|
}
|
|
},
|
|
"AllowedHosts": "*",
|
|
"ConnectionStrings": {
|
|
"Sqlite": "Data Source=elsa.sqlite.db;Cache=Shared;"
|
|
},
|
|
"Webhooks": {
|
|
"Sources": [
|
|
{
|
|
"Id": "Orchard",
|
|
"Name": "Orchard",
|
|
"Origin": "https://localhost:8196",
|
|
"EventTypes": [
|
|
{
|
|
"EventType": "content-item.published",
|
|
"PayloadType": "Elsa.OrchardCore.WebhookPayloads.ContentItemPublished, Elsa.OrchardCore"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"Identity": {
|
|
"Tokens": {
|
|
"SigningKey": "sufficiently-large-secret-signing-key",
|
|
"AccessTokenLifetime": "1:00:00:00",
|
|
"RefreshTokenLifetime": "7:00:00:00"
|
|
},
|
|
"Roles": [
|
|
{
|
|
"Id": "admin",
|
|
"Name": "Administrator",
|
|
"Permissions": [
|
|
"*"
|
|
],
|
|
"TenantId": "default"
|
|
}
|
|
],
|
|
"Users": [
|
|
{
|
|
"Id": "a2323f46-42db-4e15-af8b-94238717d817",
|
|
"Name": "admin",
|
|
"HashedPassword": "TfKzh9RLix6FPcCNeHLkGrysFu3bYxqzGqduNdi8v1U=",
|
|
"HashedPasswordSalt": "JEy9kBlhHCNsencitRHlGxmErmSgY+FVyMJulCH27Ds=",
|
|
"Roles": [
|
|
"admin"
|
|
],
|
|
"TenantId": "default"
|
|
}
|
|
],
|
|
"Applications": [
|
|
{
|
|
"Id": "d57030226341448daff5a2935aba2d3f",
|
|
"Name": "Postman",
|
|
"Roles": [
|
|
"admin"
|
|
],
|
|
"ClientId": "HXr0Vzdm9KCZbwsJ",
|
|
"ClientSecret": "a<~QGGHTEA%u4;CU&'Wga5ED:_&Gd1C)",
|
|
"HashedApiKey": "Z5ClHs3mbzx8Pnw3+PxbMq8A/Y+VKMCCDTGYtax8JFM=",
|
|
"HashedApiKeySalt": "kBisa1X8FwBfN2zmyGMFRgIVVBleghhQAJ4WGyTkaD0=",
|
|
"HashedClientSecret": "jEv58d0SVbGQ3nBZM0lkzHghG4Y+lMKW80wipz+9vHk=",
|
|
"HashedClientSecretSalt": "xRKy14Ok1/tU3kLf/8V1fcbLIegy9vcM90Peu2tzohU=",
|
|
"TenantId": "default"
|
|
}
|
|
]
|
|
},
|
|
"OrchardCore": {
|
|
"Client": {
|
|
"BaseAddress": "https://localhost:8196",
|
|
"ClientId": "elsa-server",
|
|
"ClientSecret": "elsa-server"
|
|
},
|
|
"ContentTypes": [
|
|
"BlogPost"
|
|
]
|
|
},
|
|
"Agents": {
|
|
"ApiKeys": [
|
|
{
|
|
"Name": "gpt-4o",
|
|
"Value": ""
|
|
}
|
|
],
|
|
"Services": [
|
|
{
|
|
"Name": "ChatCompletion",
|
|
"Type": "OpenAIChatCompletion",
|
|
"Settings": {
|
|
"ModelId": "gpt-4o",
|
|
"ApiKeyRef": "gpt-4o"
|
|
}
|
|
},
|
|
{
|
|
"Name": "TextToImage",
|
|
"Type": "OpenAITextToImage",
|
|
"Settings": {
|
|
"ModelId": "dall-e-3",
|
|
"ApiKeyRef": "gpt-4o"
|
|
}
|
|
}
|
|
],
|
|
"Agents": [
|
|
{
|
|
"Name": "Proofreader",
|
|
"Description": "A persona that proofreads and corrects text by identifying and correcting grammar, spelling, punctuation, and formatting errors in the text.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "Proofread",
|
|
"PromptTemplate": "You are a Proofreader. Identify and correct grammar, spelling, punctuation, and formatting errors in the following text. Do not change the content or meaning of the text. You will receive the content to be checked in JSON format, where each field's value in the JSON object needs to be checked. Create a JSON response that has the exact same structure as the received JSON structure, but replace each field's value with the corrected version of the original value. Example input JSON: { \"title\": \"Welkcome to Orchsjard Core\", \"markdown\": \"Welcome to Orchard Core, a beitifull CMS and blogposting engine for everone!\" }. Example output JSON: { \"title\": \"Welcome to Orchard Core\", \"markdown\": \"Welcome to Orchard Core, a beautiful CMS and blog engine for everyone!\" }. Here's the JSON containing the fields to proofread and correct: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "An object containing fields to proofread.",
|
|
"Type": "string"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Content",
|
|
"Description": "The proofreading results.",
|
|
"Type": "object"
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "SeoSpecialist",
|
|
"Description": "A persona that optimizes text for search engines by extracting relevant keywords and creating a meta description, optimized for search engines.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "OptimizeSEO",
|
|
"PromptTemplate": "You are an SEO Specialist. Please extract relevant keywords from the following text and create a meta description that is optimized for search engines. Text: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to optimize.",
|
|
"Type": "String"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "SeoResult",
|
|
"Description": "The SEO optimization results.",
|
|
"Type": "String"
|
|
},
|
|
"ExecutionSettings": {
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0
|
|
}
|
|
},
|
|
{
|
|
"Name": "Tagger",
|
|
"Description": "A persona that generates a specified number of tags for a given text by extract relevant keywords and creating a meta description, optimized for search engines.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "GenerateTags",
|
|
"PromptTemplate": "You are a social media specialist. Please extract relevant tags (a.k.a. keywords) from the following text that is optimized for use with social media such as x (formerly twitter), facebook, linkedin and instagram. Your response will be in JSON format. The response JSON structure consists of a single field named 'tags' and is an array of strings. Example: { \"tags\": [\"some tag\"] }. Text for which to generate relevant tags: {{$Content}}. Number of tags to generate: {{$Number}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to generate tags for.",
|
|
"Type": "String"
|
|
},
|
|
{
|
|
"Name": "Number",
|
|
"Description": "The number of tags to generate.",
|
|
"Type": "Int32"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Tags",
|
|
"Description": "The generated tags.",
|
|
"Type": "Elsa.Samples.AspNet.OrchardCoreIntegration.GenerateTagsResult, Elsa.Samples.AspNet.OrchardCoreIntegration"
|
|
},
|
|
"ExecutionSettings": {
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "Summarizer",
|
|
"Description": "A persona that creates concise summaries that capture the main points of the text.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "Summarize",
|
|
"PromptTemplate": "You are a Summarizer. Please create a concise summary of the following text that captures the main points. Text: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to summarize.",
|
|
"Type": "String"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Summary",
|
|
"Description": "The summary of the content.",
|
|
"Type": "String"
|
|
},
|
|
"ExecutionSettings": {
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0
|
|
}
|
|
},
|
|
{
|
|
"Name": "TitleEditor",
|
|
"Description": "A persona that creates engaging and relevant titles that accurately represent the content of the text.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "CreateTitle",
|
|
"PromptTemplate": "You are a Title Editor. Create an engaging and relevant title for the following text that accurately represents its content in JSON format. The JSON response must be in the following format: ```json\n{ \"title\": \"Some amazing title\" }```. The text to create a title from: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to create a title for.",
|
|
"Type": "String"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Title",
|
|
"Description": "The generated title.",
|
|
"Type": "Elsa.Samples.AspNet.OrchardCoreIntegration.TitleResult, Elsa.Samples.AspNet.OrchardCoreIntegration"
|
|
},
|
|
"ExecutionSettings": {
|
|
"Temperature": 0.7,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "Translator",
|
|
"Description": "A persona that translates text into a target language.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "Translate",
|
|
"PromptTemplate": "You are a Translator. Translate the provided text to the target language using the specified culture code. Do not change the content or meaning of the text. The text will be provided in the form of a JSON object, where each field contains text to be translated. Your response will be in the exact same JSON format, but with the original text values replaced with the translation for each field. The JSON containing the fields to translate: {{$Content}}. The target language culture code: {{$CultureCode}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to translate.",
|
|
"Type": "string"
|
|
},
|
|
{
|
|
"Name": "CultureCode",
|
|
"Description": "The culture code of the target language to translate the content to.",
|
|
"Type": "string"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Content",
|
|
"Description": "The translation result.",
|
|
"Type": "object"
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 0.2,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "GraphicDesigner",
|
|
"Description": "A persona that creates an image that visualizes the essence of a given text.",
|
|
"Services": [
|
|
"ChatCompletion",
|
|
"TextToImage"
|
|
],
|
|
"FunctionName": "DesignGraphics",
|
|
"PromptTemplate": "You are a Graphic Designer that generates an image by interpreting the essence of a given article. Your response will be a JSON string with a single field called \"imageUrl\". Example JSON response: {\"imageUrl\": \"https://dalle.com/the-image.png\"}. Textual description to generate an image for: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to design graphics for.",
|
|
"Type": "String"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Image",
|
|
"Description": "The created image.",
|
|
"Type": "object"
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 1,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
},
|
|
"Plugins": [
|
|
"ImageGenerator"
|
|
]
|
|
},
|
|
{
|
|
"Name": "FactChecker",
|
|
"Description": "A persona that verifies the accuracy of information within a given text",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "CheckFacts",
|
|
"PromptTemplate": "You are a Fact Checker. Please verify the accuracy of the information presented in the following text, including facts, explanations, and references. Your response will be in the following JSON format: { \"incorrectFacts\": [{ \"incorrectStatement\": \"The statement found to be incorrect.\", \"correctStatement\": \"The corrected statement\", \"explanation\": \"An explanation about why the statement was incorrect and why the correct statement is correct, phrased in a way that is appropriate based on the context of the statement.\", \"references\": [\"An array of strings where each string is a reference to more information, usually a URL, but could be anything, like names of articles, white papers, publications, etc.\"] }] }. Text to fact-check: {{$Content}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Content",
|
|
"Description": "The content to check facts for.",
|
|
"Type": "String"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "FactCheckResult",
|
|
"Description": "The results of the fact-checking.",
|
|
"Type": "Elsa.Samples.AspNet.OrchardCoreIntegration.FactCheckResult, Elsa.Samples.AspNet.OrchardCoreIntegration"
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 0.2,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "Copywriter",
|
|
"Description": "A persona that writes articles on any topic.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "WriteArticle",
|
|
"PromptTemplate": "You are a writer of articles about any topic and any additional instructions given to you. The syntax of the article content will be markdown, and your response will be in JSON format containing a \"title\" field and a \"markdown\" field using the following JSON structure: { \"title\": \"The title of the Article\", \"markdown\": \"The article content in markdown syntax.\" }. This is the topic: {{$Topic}}. The article consists of around {{$ParagraphCount}} paragraphs. The article must be written in the language {{$Language}} using the following style: {{$WritingStyle}}. Additional instructions (if any): {{$AdditionalInstructions}}.",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Topic",
|
|
"Description": "The topic to write an article about.",
|
|
"Type": "string"
|
|
},
|
|
{
|
|
"Name": "ParagraphCount",
|
|
"Description": "The number of paragraphs to write.",
|
|
"Type": "int"
|
|
},
|
|
{
|
|
"Name": "Language",
|
|
"Description": "The language to write the text in.",
|
|
"Type": "string"
|
|
},
|
|
{
|
|
"Name": "WritingStyle",
|
|
"Description": "The style to write the text in.",
|
|
"Type": "string"
|
|
},
|
|
{
|
|
"Name": "AdditionalInstructions",
|
|
"Description": "Any additional instructions.",
|
|
"Type": "string"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Article",
|
|
"Description": "The article consisting of a title and markdown text."
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0,
|
|
"ResponseFormat": "json_object"
|
|
}
|
|
},
|
|
{
|
|
"Name": "ContentPublisher",
|
|
"Description": "A persona that publishes content on a website.",
|
|
"Services": [
|
|
"ChatCompletion"
|
|
],
|
|
"FunctionName": "PublishContent",
|
|
"PromptTemplate": "You are a Content Publisher. Please execute the provided instructions, which are as follows: {{$Instructions}}",
|
|
"InputVariables": [
|
|
{
|
|
"Name": "Instructions",
|
|
"Description": "The instructions to execute.",
|
|
"Type": "string"
|
|
}
|
|
],
|
|
"OutputVariable": {
|
|
"Name": "Result",
|
|
"Description": "The result of the content publishing.",
|
|
"Type": "string"
|
|
},
|
|
"ExecutionSettings": {
|
|
"MaxTokens": null,
|
|
"Temperature": 0.5,
|
|
"TopP": 0.9,
|
|
"PresencePenalty": 0.0,
|
|
"FrequencyPenalty": 0.0
|
|
},
|
|
"ResponseFormat": "json_object",
|
|
"Agents": [
|
|
"Proofreader",
|
|
"SeoSpecialist",
|
|
"Tagger",
|
|
"Summarizer",
|
|
"TitleEditor",
|
|
"Translator",
|
|
"GraphicDesigner",
|
|
"FactChecker",
|
|
"Copywriter"
|
|
]
|
|
}
|
|
]
|
|
}
|
|
} |