Hi,
I ran the queries you requested. Here are the results.

The Consume permission exists in AbpResourcePermissionGrants with TenantId = NULL.
Rows found:
ProviderName = R ProviderKey = Patient TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
ProviderName = U ProviderKey = 3B23E6FF-AA66-8029-6CA7-3A214C3D575F TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
ProviderName = R ProviderKey = admin TenantId = NULL ResourceName = Volo.AIManagement.Workspaces.Workspace ResourceKey = 5E45D5C5-AE6A-7604-1A18-3A2151F28514
The logged-in user is:
The workspace is:
So the ResourceKey in AbpResourcePermissionGrants matches the PatientAssistant workspace Id, and both the user and grants are in host context with TenantId = NULL.
I also confirmed that there is a direct user grant for test2 using ProviderName = U and ProviderKey = test2 user Id.
I will now capture the exact failing API request from the browser Network tab and share it as well. Based on the database rows above, the resource permission seems to be persisted correctly, so I want to understand why the Consume check is still failing for this user.
https://drive.google.com/file/d/DELETED-inxLleY/view?usp=sharing
here is my app.config.ts
import { provideAbpCore, ReplaceableComponentsService, withOptions } from '@abp/ng.core'; import { provideAbpOAuth } from '@abp/ng.oauth'; import { provideSettingManagementConfig } from '@abp/ng.setting-management/config'; import { provideFeatureManagementConfig } from '@abp/ng.feature-management'; import { provideAbpThemeShared, withValidationBluePrint } from '@abp/ng.theme.shared'; import { provideIdentityConfig } from '@volo/abp.ng.identity/config'; import { provideCommercialUiConfig } from '@volo/abp.commercial.ng.ui/config'; import { provideAccountAdminConfig } from '@volo/abp.ng.account/admin/config'; import { provideAccountPublicConfig } from '@volo/abp.ng.account/public/config'; import { provideGdprConfig, withCookieConsentOptions } from '@volo/abp.ng.gdpr/config'; import { provideAuditLoggingConfig } from '@volo/abp.ng.audit-logging/config'; import { provideLanguageManagementConfig } from '@volo/abp.ng.language-management/config'; import { registerLocale } from '@volo/abp.ng.language-management/locale'; import { provideFileManagementConfig } from '@volo/abp.ng.file-management/config'; import { provideChatConfig } from '@volo/abp.ng.chat/config'; import { provideSaasConfig } from '@volo/abp.ng.saas/config'; import { provideTextTemplateManagementConfig } from '@volo/abp.ng.text-template-management/config'; import { provideOpeniddictproConfig } from '@volo/abp.ng.openiddictpro/config'; import { provideThemeBasicConfig } from '@abp/ng.theme.basic'; import { provideLogo, withEnvironmentOptions } from "@abp/ng.theme.shared"; import { ApplicationConfig, inject, provideAppInitializer } from '@angular/core'; import { provideAnimations } from '@angular/platform-browser/animations'; import { provideRouter } from '@angular/router'; import { provideHttpClient, withInterceptors } from '@angular/common/http'; import { CustomChatComponent } from './chat/custom-chat.component'; import { environment } from '../environments/environment'; import { APP_ROUTES } from './app.routes'; import { APP_ROUTE_PROVIDER } from './route.provider'; import { FOOTER_PROVIDER } from './footer/footer.config'; import { provideAIManagementConfig } from '@volo/abp.ng.ai-management/config';
export const appConfig: ApplicationConfig = { providers: [ provideRouter(APP_ROUTES), APP_ROUTE_PROVIDER, FOOTER_PROVIDER, provideAppInitializer(() => { inject(ReplaceableComponentsService).add({ component: CustomChatComponent, key: 'Chat.ChatComponent', }); }), provideAnimations(), provideHttpClient( withInterceptors([]) ), provideAbpOAuth(), provideAccountPublicConfig(), provideAbpCore( withOptions({ environment, registerLocaleFn: registerLocale(),
}),
),
provideCommercialUiConfig(),
provideThemeBasicConfig(),
provideAbpThemeShared(
withValidationBluePrint({
wrongPassword: 'Please choose 1q2w3E*',
}),
),
provideLogo(withEnvironmentOptions(environment)),
provideGdprConfig(
withCookieConsentOptions({
cookiePolicyUrl: '/gdpr-cookie-consent/cookie',
privacyPolicyUrl: '/gdpr-cookie-consent/privacy',
}),
),
provideChatConfig(),
] };
not help this
[enisn] said: Hi,
Thanks for the details.
Based on the behavior you described, this looks more like a server-side AI Management setup/database issue than an OpenAI API issue.
The main reason is:
- The Workspaces page first loads AI Management data from your application database.
- The provider dropdown is populated from provider names registered at application startup.
So when the page throws a generic
AbpRemoteCallExceptionand the provider list is also empty, the usual cause is that the AI Management module was added but its database changes and/or startup registration were not completed yet.
In your case, the strongest clue is that the solution was created with
--skip-migration --skip-migrator.
Please check these steps:
- Create and apply a new EF Core migration after importing
Volo.AIManagement.
If the AI Management tables were not created yet, the
/api/ai-management/workspacesrequest will fail with this kind of generic remote call exception.
- Make sure
Volo.AIManagement.OpenAIis installed on the server startup side of the application, not only in a UI/client project.
The available providers are collected from registered factories at startup. If the OpenAI module is not loaded by the startup application, the provider dropdown will stay empty.
- Restart the application after installing the provider package and after applying the migration.
- Check the
*.HttpApi.Hostlogs while opening the Workspaces page.
The real exception should be written there. If the migration is missing, you will typically see the actual SQL/table-related error on the host side.
So the first thing we recommend is:
- add/apply the migration,
- restart
HttpApi.Host,
- open the Workspaces page again,
- then verify whether
OpenAIappears in the provider dropdown.
If the problem still continues after that, please share these details:
- the exact exception from the
HttpApi.Hostlog,
- whether the AI Management tables were created successfully,
- and which project you added
Volo.AIManagement.OpenAIto.
Best regards,
ABP Support Team
i already added Migration and run that migration on Database and i also install Volo.AIManagement.OpenAI this package on server Side
and here is log of HttpApi.Host
2026-04-07 10:33:09.145 +00:00 [ERR] Failed executing DbCommand (67ms) [Parameters=[@BFPAowQuR='?' (Size = 4000)], CommandType='"Text"', CommandTimeout='30']
SELECT TOP(2) [a].[Id], [a].[ApplicationName], [a].[SupportedProviders]
FROM [AIManagementApplicationAIProviders] AS [a]
WHERE [a].[ApplicationName] = @BFPAowQuR
2026-04-07 10:33:09.184 +00:00 [ERR] An exception occurred while iterating over the results of a query for context type 'Volo.AIManagement.EntityFrameworkCore.AIManagementDbContext'.
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
ClientConnectionId:2e865100-2130-45c1-99bd-b87da3a33893
Error Number:208,State:1,Class:16
ClientConnectionId before routing:1f14091e-7caf-426e-91ad-69a85d48c8b4
Routing Destination:dc8127efd63b.tr15377.eastus2-a.worker.database.windows.net,11044
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
ClientConnectionId:2e865100-2130-45c1-99bd-b87da3a33893
Error Number:208,State:1,Class:16
ClientConnectionId before routing:1f14091e-7caf-426e-91ad-69a85d48c8b4
Routing Destination:dc8127efd63b.tr15377.eastus2-a.worker.database.windows.net,11044
2026-04-07 10:33:09.237 +00:00 [ERR] An error occurred while updating initial workspaces for application Millennial.HttpApi.Host. Skipping initial workspace update.
Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid object name 'AIManagementApplicationAIProviders'.
at Microsoft.Data.SqlClient.SqlCommand.<>c.<ExecuteDbDataReaderAsync>b__195_0(Task1 result) at System.Threading.Tasks.ContinuationResultTaskFromResultTask2.InnerInvoke()
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteReaderAsync(RelationalCommandParameterObject parameterObject, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.InitializeReaderAsync(AsyncEnumerator enumerator, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.ExecuteAsync[TState,TResult](TState state, Func4 operation, Func4 verifySucceeded, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.Internal.SplitQueryingEnumerable1.AsyncEnumerator.MoveNextAsync()
at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken) at Microsoft.EntityFrameworkCore.Query.ShapedQueryCompilingExpressionVisitor.SingleOrDefaultAsync[TSource](IAsyncEnumerable1 asyncEnumerable, CancellationToken cancellationToken)
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository2.FindAsync(Expression1 predicate, Boolean includeDetails, CancellationToken cancellationToken)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue1.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func3 proceed) at Volo.AIManagement.ApplicationWorkspaceProviders.ApplicationAIProviderManager.UpdateProvidersAsync(String applicationName, String[] supportedProviders) at Volo.AIManagement.Workspaces.WorkspaceSaver.SaveAsync(String applicationName, IEnumerable1 supportedProviders, IEnumerable1 workspaces) at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous(IInvocation invocation, IInvocationProceedInfo proceedInfo) at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapter.ProceedAsync() at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation) at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter1.InterceptAsync(IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.AIManagement.Workspaces.InitialWorkspaceUpdater.UpdateAsync()
and here is my db Table

this answer is not helpful
[maliming] said: hi
This is a bug introduced in ABP v10.x —
IFaqGroupPublicAppServicewas added toFaqViewComponent's constructor but the corresponding HTTP controller and client proxy were never added. A fix has been submitted to the ABP team.
Temporary workaround:
Step 1 — Add this controller to your HttpApi or API Host project:
[RequiresFeature(CmsKitProFeatures.FaqEnable)]
[RequiresGlobalFeature(typeof(FaqFeature))]
[RemoteService(Name = CmsKitProCommonRemoteServiceConsts.RemoteServiceName)]
[Area(CmsKitProCommonRemoteServiceConsts.ModuleName)]
[Route("api/cms-kit-public/faq-group")]
public class FaqGroupPublicController : CmsKitProCommonController, IFaqGroupPublicAppService
{
protected IFaqGroupPublicAppService FaqGroupPublicAppService { get; }
public FaqGroupPublicController(IFaqGroupPublicAppService faqGroupPublicAppService)
{
FaqGroupPublicAppService = faqGroupPublicAppService;
}
[HttpGet]
[Route("by-name")]
public Task<FaqGroupDto> GetGroupByNameAsync(string name)
=> FaqGroupPublicAppService.GetGroupByNameAsync(name);
}
Step 2 — If your application is tiered, also add this to your Web project:
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IFaqGroupPublicAppService), typeof(FaqGroupPublicClientProxy))]
public partial class FaqGroupPublicClientProxy : ClientProxyBase
{
public virtual async Task<FaqGroupDto> GetGroupByNameAsync(string name)
{
return await RequestAsync<FaqGroupDto>(nameof(GetGroupByNameAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), name }
});
}
}
If your application is not tiered (single host), Step 1 alone is sufficient.
You can remove these files once the official fix is released.
Thanks.
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IFaqGroupPublicAppService), typeof(FaqGroupPublicClientProxy))]
public partial class FaqGroupPublicClientProxy : ClientProxyBase<IFaqGroupPublicAppService>, IFaqGroupPublicAppService
{
public virtual async Task<FaqGroupDto> GetGroupByNameAsync(string name)
{
return await RequestAsync<FaqGroupDto>(nameof(GetGroupByNameAsync), new ClientProxyRequestTypeValue
{
{ typeof(string), name }
});
}
}
i add this in my web.public project but when i run project it throw exception
Volo.Abp.AbpException
HResult=0x80131500
Message=The API description of the Volo.CmsKit.Public.Faqs.IFaqGroupPublicAppService.GetGroupByNameAsync method was not found!
Source=Volo.Abp.Http.Client
StackTrace:
at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.BuildHttpProxyClientProxyContext(String methodName, ClientProxyRequestTypeValue arguments) at Volo.Abp.Http.Client.ClientProxying.ClientProxyBase1.<RequestAsync>d__37`1.MoveNext()
at Millennial.Web.Public.FaqGroupPublicClientProxy.
[AI-Bot] said:
In ABP 10.x the FAQ widget parameters are
groupNameandsectionName. Your dynamic widget usage is passingsectionName, but the docs example shows a mismatch (name = "Development"). This typically results in the widget endpoint failing and the UI showing “This part of content couldn’t be loaded.” after the upgrade.Fix your widget invocation by using
sectionName(notsectionName="Faq"with an old/incorrect parameter name mapping likename), and ensure the values match an existing FAQ Group + Section in CMS Kit:If you use the Dynamic Widget tag helper:
[Widget Type="Faq" groupName="Client" sectionName="Faq"]If you render it directly (recommended to verify quickly):
@await Component.InvokeAsync( typeof(FaqViewComponent), new { groupName = "Client", sectionName = "Faq" } )
After changing it, restart the app and hard refresh the page. The widget content is loaded via an internal widget endpoint; if that endpoint throws due to parameter mismatch, you’ll only see the generic “couldn’t be loaded” message on the UI.
If it still fails after this change, the issue is no longer the parameters; it will be a server-side exception inside the widget endpoint. In that case, check the server logs for the request that serves the widget content (it will show the real exception).
- https://abp.io/docs/latest/modules/cms-kit-pro/faq
- https://abp.io/docs/latest/framework/ui/mvc-razor-pages/widgets
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
@await Component.InvokeAsync( typeof(FaqViewComponent), new { groupName = "Client", sectionName = "Faq" } ) when i use like this i throw this exception DependencyResolutionException: None of the constructors found on type 'Volo.CmsKit.Pro.Web.Pages.Public.Shared.Components.Faqs.FaqViewComponent' can be invoked with the available services and parameters: Cannot resolve parameter 'Volo.CmsKit.Public.Faqs.IFaqGroupPublicAppService faqGroupPublicAppService' of constructor 'Void .ctor(Volo.CmsKit.Public.Faqs.IFaqSectionPublicAppService, Volo.CmsKit.Public.Faqs.IFaqGroupPublicAppService)'
[maliming] said: hi
I tested this url and it works
https://auth.redacted.com/.well-known/openid-configuration
https://auth.redacted.com/account/login
Please can you redact all identifiable information in your replies? like this: https://auth.redacted.com/account/login