Skip to content

Elsa 3.5 Agents Activities not redirecting agent result to output #117

@fshahin90

Description

@fshahin90

.Net Runtime: 10.0
Elsa Version: 3.5.3


Im following this example to implement Agent Activities.

When I run the workflow the following happens:
1- the CopyWriter activity run
2- the Workflow reaches the following activities

  • SEO Specialist
  • Translator
  • Social Media Specialist

3- The previous activities failes with error Cannot read property 'markdown' of null

below is some outputs and images i collected from the system

Terminal Output

info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Finished restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Finished restarting interrupted workflows.
info: Microsoft.SemanticKernel.KernelFunction[0]
      Function (null)-WriteArticle invoking.
trce: Microsoft.SemanticKernel.KernelFunction[0]
      Function (null)-WriteArticle arguments: {
        "Topic": "Developers and AI",
        "ParagraphCount": "2",
        "Language": "English",
        "WritingStyle": "Expository",
        "AdditionalInstructions": null
      }
trce: Microsoft.SemanticKernel.KernelFunctionFactory[0]
      Rendered prompt: 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: Developers and AI. The article consists of around 2 paragraphs. The article must be written in the language English using the following style: Expository. Additional instructions (if any): .
trce: Microsoft.SemanticKernel.Connectors.OpenAI.OpenAIChatCompletionService[0]
      ChatHistory: [{"Role":{"Label":"user"},"Items":[{"$type":"TextContent","Text":"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 \\\u0022title\\\u0022 field and a \\\u0022markdown\\\u0022 field using the following JSON structure: { \\\u0022title\\\u0022: \\\u0022The title of the Article\\\u0022, \\\u0022markdown\\\u0022: \\\u0022The article content in markdown syntax.\\\u0022 }. This is the topic: Developers and AI. The article consists of around 2 paragraphs. The article must be written in the language English using the following style: Expository. Additional instructions (if any): ."}]}], Settings: {"service_id":null,"model_id":null,"function_choice_behavior":null}
info: Microsoft.SemanticKernel.Connectors.OpenAI.OpenAIChatCompletionService[0]
      Prompt tokens: 280. Completion tokens: 259. Total tokens: 539.
info: Microsoft.SemanticKernel.KernelFunction[0]
      Function (null)-WriteArticle succeeded.
trce: Microsoft.SemanticKernel.KernelFunction[0]
      Function (null)-WriteArticle result: {
  "title": "Developers and AI: A Symbiotic Relationship",
  "markdown": "Artificial Intelligence (AI) has become a pivotal component in the realm of software development, transforming how developers approach problem-solving and project execution. The integration of AI tools into the development process allows for enhanced efficiency, accuracy, and innovation. Developers now leverage machine learning algorithms to automate mundane coding tasks such as code generation, debugging, and testing. This not only speeds up the development lifecycle but also reduces human error significantly. Moreover, AI-driven analytics provide developers with insights into user behavior and system performance that were previously inaccessible or time-consuming to obtain.\n\nIn addition to enhancing productivity, AI also fosters creativity among developers by enabling them to focus more on strategic planning and innovative solutions rather than routine tasks. Tools like GitHub Copilot exemplify this shift by suggesting code snippets based on contextually relevant data, thereby expanding a developer's toolkit without requiring additional manual input. However, this symbiosis is not without its challenges; ethical considerations regarding data privacy and algorithmic bias require careful attention from both developers and AI practitioners alike. As technology continues to evolve, it is imperative for developers to remain vigilant about these issues while embracing the vast potential that AI offers in reshaping the future of software development."
}
info: Microsoft.SemanticKernel.KernelFunction[0]
      Function (null)-WriteArticle completed. Duration: 10.7812103s
warn: Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware[0]
      An exception was caught from a downstream middleware component
      Elsa.Workflows.Exceptions.InputEvaluationException: Failed to evaluate activity input 'Content'
       ---> Jint.Runtime.JavaScriptException: Cannot read property 'markdown' of null
       ---> Error: Cannot read property 'markdown' of null
          at :1:27
         --- End of inner exception stack trace ---
         at Jint.Engine.ScriptEvaluation(ScriptRecord scriptRecord, ParserOptions parserOptions)
         at Jint.Engine.<>c__DisplayClass99_0.<Execute>b__0()
         at Jint.Engine.ExecuteWithConstraints[T](Boolean strict, Func`1 callback)
         at Jint.Engine.Execute(Prepared`1& preparedScript)
         at Jint.Engine.Evaluate(Prepared`1& preparedScript)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.ExecuteExpressionAndGetResult(Engine engine, String expression)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.EvaluateAsync(String expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options, Action`1 configureEngine, CancellationToken cancellationToken)
         at Elsa.JavaScript.Expressions.JavaScriptExpressionHandler.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Expressions.Services.ExpressionEvaluator.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Workflows.DefaultActivityInputEvaluator.EvaluateAsync(ActivityInputEvaluatorContext context)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyCoreAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         --- End of inner exception stack trace ---
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Runtime.Middleware.EvaluateLogPersistenceModesMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.NotificationPublishingMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExecutionLogMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware.InvokeAsync(ActivityExecutionContext context)
warn: Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware[0]
      An exception was caught from a downstream middleware component
      Elsa.Workflows.Exceptions.InputEvaluationException: Failed to evaluate activity input 'Content'
       ---> Jint.Runtime.JavaScriptException: Cannot read property 'markdown' of null
       ---> Error: Cannot read property 'markdown' of null
          at :1:27
         --- End of inner exception stack trace ---
         at Jint.Engine.ScriptEvaluation(ScriptRecord scriptRecord, ParserOptions parserOptions)
         at Jint.Engine.<>c__DisplayClass99_0.<Execute>b__0()
         at Jint.Engine.ExecuteWithConstraints[T](Boolean strict, Func`1 callback)
         at Jint.Engine.Execute(Prepared`1& preparedScript)
         at Jint.Engine.Evaluate(Prepared`1& preparedScript)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.ExecuteExpressionAndGetResult(Engine engine, String expression)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.EvaluateAsync(String expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options, Action`1 configureEngine, CancellationToken cancellationToken)
         at Elsa.JavaScript.Expressions.JavaScriptExpressionHandler.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Expressions.Services.ExpressionEvaluator.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Workflows.DefaultActivityInputEvaluator.EvaluateAsync(ActivityInputEvaluatorContext context)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyCoreAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         --- End of inner exception stack trace ---
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Runtime.Middleware.EvaluateLogPersistenceModesMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.NotificationPublishingMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExecutionLogMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware.InvokeAsync(ActivityExecutionContext context)
warn: Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware[0]
      An exception was caught from a downstream middleware component
      Elsa.Workflows.Exceptions.InputEvaluationException: Failed to evaluate activity input 'Content'
       ---> Jint.Runtime.JavaScriptException: Cannot read property 'markdown' of null
       ---> Error: Cannot read property 'markdown' of null
          at :1:27
         --- End of inner exception stack trace ---
         at Jint.Engine.ScriptEvaluation(ScriptRecord scriptRecord, ParserOptions parserOptions)
         at Jint.Engine.<>c__DisplayClass99_0.<Execute>b__0()
         at Jint.Engine.ExecuteWithConstraints[T](Boolean strict, Func`1 callback)
         at Jint.Engine.Execute(Prepared`1& preparedScript)
         at Jint.Engine.Evaluate(Prepared`1& preparedScript)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.ExecuteExpressionAndGetResult(Engine engine, String expression)
         at Elsa.JavaScript.Services.JintJavaScriptEvaluator.EvaluateAsync(String expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options, Action`1 configureEngine, CancellationToken cancellationToken)
         at Elsa.JavaScript.Expressions.JavaScriptExpressionHandler.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Expressions.Services.ExpressionEvaluator.EvaluateAsync(Expression expression, Type returnType, ExpressionExecutionContext context, ExpressionEvaluatorOptions options)
         at Elsa.Workflows.DefaultActivityInputEvaluator.EvaluateAsync(ActivityInputEvaluatorContext context)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyCoreAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         --- End of inner exception stack trace ---
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertyAsync(ActivityExecutionContext context, ActivityDescriptor activityDescriptor, InputDescriptor inputDescriptor)
         at Elsa.Extensions.ActivityExecutionContextExtensions.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.EvaluateInputPropertiesAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.DefaultActivityInvokerMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Runtime.Middleware.EvaluateLogPersistenceModesMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.NotificationPublishingMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExecutionLogMiddleware.InvokeAsync(ActivityExecutionContext context)
         at Elsa.Workflows.Middleware.Activities.ExceptionHandlingMiddleware.InvokeAsync(ActivityExecutionContext context)
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Finished restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Finished restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Restarting interrupted workflows.
info: Elsa.Workflows.Runtime.Tasks.RestartInterruptedWorkflowsTask[0]
      Finished restarting interrupted workflows.

System Packages

<!-- SERVER Pakcages -->
<Project Sdk="Microsoft.NET.Sdk.Web">

  <ItemGroup>
    <ProjectReference Include="..\UI\UI.csproj" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Elsa" Version="3.5.3" />
    <PackageReference Include="Elsa.Agents.Activities" Version="3.5.3" />
    <PackageReference Include="Elsa.Agents.Api" Version="3.5.3" />
    <PackageReference Include="Elsa.Agents.Core" Version="3.5.3" />
    <PackageReference Include="Elsa.Agents.Persistence.EntityFrameworkCore.SqlServer" Version="3.3.5" />
    <PackageReference Include="Elsa.CSharp" Version="3.5.3" />
    <PackageReference Include="Elsa.EntityFrameworkCore" Version="3.5.3" />
    <PackageReference Include="Elsa.EntityFrameworkCore.SqlServer" Version="3.5.3" />
    <PackageReference Include="Elsa.Http" Version="3.5.3" />
    <PackageReference Include="Elsa.Identity" Version="3.5.3" />
    <PackageReference Include="Elsa.Scheduling" Version="3.5.3" />
    <PackageReference Include="Elsa.Workflows.Api" Version="3.5.3" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="10.0.2" />
  </ItemGroup>

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

</Project>

<!-- UI PACKAGES -->

<Project Sdk="Microsoft.NET.Sdk.BlazorWebAssembly">

  <PropertyGroup>
    <TargetFramework>net10.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
    <OverrideHtmlAssetPlaceholders>true</OverrideHtmlAssetPlaceholders>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Elsa.Api.Client" Version="3.5.3" />
    <PackageReference Include="Elsa.Studio" Version="3.5.3" />
    <PackageReference Include="Elsa.Studio.Agents" Version="3.5.3" />
    <PackageReference Include="Elsa.Studio.Core.BlazorWasm" Version="3.5.3" />
    <PackageReference Include="Elsa.Studio.Login.BlazorWasm" Version="3.5.3" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="10.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="10.0.2" PrivateAssets="all" />
  </ItemGroup>

</Project>

Server Program.cs

using Elsa.Agents;
using Elsa.EntityFrameworkCore.Extensions;
using Elsa.EntityFrameworkCore.Modules.Management;
using Elsa.EntityFrameworkCore.Modules.Runtime;
using Elsa.Extensions;
using FastEndpoints.Swagger;
using Jint;
using Microsoft.AspNetCore.Mvc;

var builder = WebApplication.CreateBuilder(args);
builder.WebHost.UseStaticWebAssets();

var services = builder.Services;
var configuration = builder.Configuration;

services.AddElsa(elsa =>
{
    elsa.UseWorkflowManagement(management =>
    {
        management.UseEntityFrameworkCore(mef =>
        {
            mef.UseSqlServer(configuration.GetConnectionString("Default")!, new Elsa.EntityFrameworkCore.ElsaDbContextOptions()
            {
                SchemaName = "ElsaMGMT"
            });
        });
    });
    elsa.UseWorkflowRuntime(runtime =>
    {
        runtime.UseEntityFrameworkCore(rtef =>
        {
            rtef.UseSqlServer(configuration.GetConnectionString("Default")!, new Elsa.EntityFrameworkCore.ElsaDbContextOptions()
            {
               SchemaName = "ElsaRT" 
            });
        });
    });
    elsa.UseIdentity(identity =>
    {
        identity.TokenOptions = options=> options.SigningKey = "88550a502ac54615bdcafa8ae84ee1fe";
        identity.UseAdminUserProvider();
    });
    elsa.AddFastEndpointsFromModule();
    elsa.UseWorkflowsApi();
    elsa.UseDefaultAuthentication(auth=>auth.UseAdminApiKey());
    elsa.UseScheduling();
    elsa.UseJavaScript();
    elsa.UseLiquid();
    elsa.UseCSharp();
    elsa.UseHttp(http =>
    {
        http.ConfigureHttpOptions = options=>configuration.GetSection("Http").Bind(options);
    });
    
    elsa.UseAgentActivities();
    elsa.UseAgentPersistence(ea =>
    {
        ea.UseEntityFrameworkCore(eaf =>
        {
            eaf.UseSqlServer(configuration.GetConnectionString("Default")!,new Elsa.EntityFrameworkCore.ElsaDbContextOptions()
            {
                SchemaName="ElsaAGNT",

            });
        });
    });
    elsa.AddSwagger();
    elsa.UseAgentsApi();
    elsa.AddActivitiesFrom<Program>();
    elsa.AddWorkflowsFrom<Program>();
    
});

services.AddCors(cors =>
{
    cors.AddDefaultPolicy(policy =>
    {
        policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin().WithExposedHeaders("*");
    });
});

services.AddRazorPages(options =>
{
    options.Conventions.ConfigureFilter(new IgnoreAntiforgeryTokenAttribute());
});

var app = builder.Build();

app.UseHttpsRedirection();
// app.UseBlazorFrameworkFiles();
app.MapStaticAssets();
app.UseRouting();
app.UseCors();
app.UseStaticFiles();
app.UseSwaggerGen();
app.UseAuthentication();
app.UseAuthorization();
app.UseWorkflowsApi();
app.UseWorkflows();
app.MapFallbackToPage("/_Host");

app.Run();

UI Program.cs

using System.Text.Json;
using Elsa.Studio.Contracts;
using Elsa.Studio.Core.BlazorWasm.Extensions;
using Elsa.Studio.Dashboard.Extensions;
using Elsa.Studio.Extensions;
using Elsa.Studio.Login.BlazorWasm.Extensions;
using Elsa.Studio.Login.Extensions;
using Elsa.Studio.Login.HttpMessageHandlers;
using Elsa.Studio.Models;
using Elsa.Studio.Options;
using Elsa.Studio.Shell;
using Elsa.Studio.Shell.Extensions;
using Elsa.Studio.Workflows.Designer.Extensions;
using Elsa.Studio.Workflows.Extensions;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");
builder.RootComponents.RegisterCustomElsaStudioElements();

builder.Services.AddCore();
builder.Services.AddShell();
var backendApiConfig = new BackendApiConfig
{
    ConfigureBackendOptions = options => builder.Configuration.GetSection("Backend").Bind(options),
    ConfigureHttpClientBuilder = options => options.AuthenticationHandler = typeof(AuthenticatingApiHttpMessageHandler)
};
builder.Services.AddRemoteBackend(backendApiConfig);

builder.Services.AddLoginModule().UseElsaIdentity();
builder.Services.AddAgentsModule(backendApiConfig);
builder.Services.AddDashboardModule();
builder.Services.AddWorkflowsModule();



builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

var app =  builder.Build();

var startupTaskRunner = app.Services.GetRequiredService<IStartupTaskRunner>();
await startupTaskRunner.RunStartupTasksAsync();

await app.RunAsync();

Workflow Instance Image

Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions