6 changed files with 167 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||||
|
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> |
||||
|
<ConfigureAwait ContinueOnCapturedContext="false" /> |
||||
|
</Weavers> |
||||
@ -0,0 +1,30 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> |
||||
|
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. --> |
||||
|
<xs:element name="Weavers"> |
||||
|
<xs:complexType> |
||||
|
<xs:all> |
||||
|
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1"> |
||||
|
<xs:complexType> |
||||
|
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" /> |
||||
|
</xs:complexType> |
||||
|
</xs:element> |
||||
|
</xs:all> |
||||
|
<xs:attribute name="VerifyAssembly" type="xs:boolean"> |
||||
|
<xs:annotation> |
||||
|
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation> |
||||
|
</xs:annotation> |
||||
|
</xs:attribute> |
||||
|
<xs:attribute name="VerifyIgnoreCodes" type="xs:string"> |
||||
|
<xs:annotation> |
||||
|
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation> |
||||
|
</xs:annotation> |
||||
|
</xs:attribute> |
||||
|
<xs:attribute name="GenerateXsd" type="xs:boolean"> |
||||
|
<xs:annotation> |
||||
|
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation> |
||||
|
</xs:annotation> |
||||
|
</xs:attribute> |
||||
|
</xs:complexType> |
||||
|
</xs:element> |
||||
|
</xs:schema> |
||||
@ -0,0 +1,27 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<Import Project="..\..\..\..\configureawait.props" /> |
||||
|
<Import Project="..\..\..\..\common.props" /> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0</TargetFrameworks> |
||||
|
<AssemblyName>LINGYUN.Abp.AI.Ollama</AssemblyName> |
||||
|
<PackageId>LINGYUN.Abp.AI.Ollama</PackageId> |
||||
|
<NoWarn>$(NoWarn);SKEXP0001,SKEXP0010,SKEXP0070</NoWarn> |
||||
|
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute> |
||||
|
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute> |
||||
|
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute> |
||||
|
<Nullable>enable</Nullable> |
||||
|
<RootNamespace /> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="OllamaSharp" /> |
||||
|
<PackageReference Include="Microsoft.SemanticKernel.Connectors.Ollama" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\LINGYUN.Abp.AI.Core\LINGYUN.Abp.AI.Core.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
||||
@ -0,0 +1,17 @@ |
|||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace LINGYUN.Abp.AI.Ollama; |
||||
|
|
||||
|
[DependsOn(typeof(AbpAICoreModule))] |
||||
|
public class AbpAIOllamaModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
Configure<AbpAICoreOptions>(options => |
||||
|
{ |
||||
|
options.ChatClientProviders.Add<OllamaChatClientProvider>(); |
||||
|
|
||||
|
options.KernelProviders.Add<OllamaKernelProvider>(); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
using LINGYUN.Abp.AI.Models; |
||||
|
using LINGYUN.Abp.AI.Workspaces; |
||||
|
using Microsoft.Extensions.AI; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using OllamaSharp; |
||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace LINGYUN.Abp.AI.Ollama; |
||||
|
public class OllamaChatClientProvider : ChatClientProvider |
||||
|
{ |
||||
|
public const string DefaultEndpoint = "http://localhost:11434"; |
||||
|
|
||||
|
public const string ProviderName = "Ollama"; |
||||
|
public override string Name => ProviderName; |
||||
|
|
||||
|
public OllamaChatClientProvider( |
||||
|
IServiceProvider serviceProvider) : base(serviceProvider) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public async override Task<IChatClient> CreateAsync(WorkspaceDefinition workspace) |
||||
|
{ |
||||
|
Check.NotNull(workspace, nameof(workspace)); |
||||
|
|
||||
|
var options = ServiceProvider.GetRequiredService<IOptions<AbpAICoreOptions>>().Value; |
||||
|
|
||||
|
var ollamaApiClient = new OllamaApiClient(workspace.ApiBaseUrl ?? DefaultEndpoint); |
||||
|
|
||||
|
var chatClientBuilder = ChatClientBuilderChatClientExtensions.AsBuilder(ollamaApiClient); |
||||
|
|
||||
|
foreach (var handlerAction in options.ChatClientBuildActions) |
||||
|
{ |
||||
|
await handlerAction(workspace, ServiceProvider, chatClientBuilder); |
||||
|
} |
||||
|
|
||||
|
return chatClientBuilder |
||||
|
.UseLogging() |
||||
|
.UseOpenTelemetry() |
||||
|
.UseFunctionInvocation() |
||||
|
.UseDistributedCache() |
||||
|
.Build(ServiceProvider); |
||||
|
} |
||||
|
|
||||
|
public override ChatModel[] GetModels() |
||||
|
{ |
||||
|
return []; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,39 @@ |
|||||
|
using LINGYUN.Abp.AI.Workspaces; |
||||
|
using Microsoft.Extensions.AI; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Options; |
||||
|
using Microsoft.SemanticKernel; |
||||
|
using OllamaSharp; |
||||
|
using System; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
|
||||
|
namespace LINGYUN.Abp.AI.Ollama; |
||||
|
public class OllamaKernelProvider : KernelProvider |
||||
|
{ |
||||
|
public const string ProviderName = "Ollama"; |
||||
|
public override string Name => ProviderName; |
||||
|
|
||||
|
public OllamaKernelProvider(IServiceProvider serviceProvider) : base(serviceProvider) |
||||
|
{ |
||||
|
} |
||||
|
|
||||
|
public override Task<Kernel> CreateAsync(WorkspaceDefinition workspace) |
||||
|
{ |
||||
|
Check.NotNull(workspace, nameof(workspace)); |
||||
|
|
||||
|
var options = ServiceProvider.GetRequiredService<IOptions<AbpAICoreOptions>>().Value; |
||||
|
|
||||
|
var ollamaApiClient = new OllamaApiClient(workspace.ApiBaseUrl ?? OllamaChatClientProvider.DefaultEndpoint); |
||||
|
|
||||
|
var kernelBuilder = Kernel.CreateBuilder() |
||||
|
.AddOllamaChatClient(ollamaApiClient); |
||||
|
|
||||
|
foreach (var handlerAction in options.KernelBuildActions) |
||||
|
{ |
||||
|
handlerAction(workspace, kernelBuilder); |
||||
|
} |
||||
|
|
||||
|
return Task.FromResult(kernelBuilder.Build()); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue