This commit is contained in:
2026-09-26 16:46:30 +03:30
parent 3fbdebbdd3
commit b596afbe57
10 changed files with 126 additions and 37 deletions
+32 -17
View File
@@ -4,6 +4,7 @@ using OllamaSharp;
using System.Net.Http;
using System.Threading;
using xAiApi.Constants;
using xAiModels.Models;
using xAiApi.Interfaces;
using xAiApi.Extensions;
using System.ClientModel;
@@ -24,6 +25,16 @@ namespace xAiApi.Providers
{
public abstract class XAIServiceBase : IXAiServiceBase
{
/// <summary>
/// Chat Options ...
/// </summary>
public ChatOptions Options { get; }
/// <summary>
/// Descriptor of Models which used in Service ...
/// </summary>
public XAiModelDescriptor Descriptor { get; }
private readonly IXAiDataProvider dataProvider;
private readonly ILogger<XAIServiceBase> logger;
private readonly XAiApiConfiguration configuration;
@@ -31,12 +42,25 @@ namespace xAiApi.Providers
protected XAIServiceBase(
IXAiDataProvider dataProvider,
ILogger<XAIServiceBase> logger,
XAiApiConfiguration configuration
XAiApiConfiguration configuration,
string model = null
)
{
this.logger = logger;
this.dataProvider = dataProvider;
this.configuration = configuration;
//
// Prepare Embedding Model Descriptor ...
Descriptor = configuration.GetModel(model);
if (!Descriptor.IsValid())
{
XException.InvalidConfiguration.Throw();
}
//
// Prepare Chat Options based On Tools ...
Options = new ChatOptions();
}
//
@@ -130,28 +154,19 @@ namespace xAiApi.Providers
/// <summary>
/// Get LLM Client instance for Communicating with LLM ...
/// </summary>
/// <param name="llm"></param>
/// <returns></returns>
public virtual IChatClient GetClient(string llm = null)
public virtual IChatClient GetClient()
{
//
// Retrieve Model Descriptor ...
var modelDescriptor = configuration.GetModel(llm);
if (modelDescriptor.IsNullOrDefault())
{
XException.NotFound.Throw();
}
//
// Try to Initialize LLm ...
var model = modelDescriptor.LLM;
var apiKey = modelDescriptor.ApiKey;
var url = new Uri(modelDescriptor.Url);
var httpClient = GetHttpClient(modelDescriptor.Url);
var model = Descriptor.LLM;
var apiKey = Descriptor.ApiKey;
var url = new Uri(Descriptor.Url);
var httpClient = GetHttpClient(Descriptor.Url);
//
IChatClient result = null;
switch (modelDescriptor.Provider)
switch (Descriptor.Provider)
{
//
case XAiModelProviderType.Ollama:
@@ -163,7 +178,7 @@ namespace xAiApi.Providers
.UseFunctionInvocation()
.Build();
break;
//
case XAiModelProviderType.OpenAI:
//
+5 -6
View File
@@ -1,4 +1,5 @@
using System;
using OpenAI;
using System.Linq;
using OllamaSharp;
using System.Threading;
@@ -6,20 +7,18 @@ using xAiApi.Constants;
using xAiModels.Models;
using xAiApi.Extensions;
using xAiApi.Interfaces;
using OllamaSharp.Models;
using xAiService.Helpers;
using System.ClientModel;
using xCommons.Extensions;
using xAiModels.Constants;
using xAiModels.Extensions;
using xAiModels.Interfaces;
using xAiApi.Configurations;
using xExceptions.Constants;
using System.Threading.Tasks;
using Microsoft.Extensions.AI;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.AI;
using xAiModels.Constants;
using OpenAI;
using System.ClientModel;
using System.ClientModel.Primitives;
namespace xAiApi.Providers
@@ -37,7 +36,7 @@ namespace xAiApi.Providers
XAiApiConfiguration configuration,
ILogger<XAiEmbeddingServiceBase> logger,
string embeddingModelName = XAiApiConstants.XAiEmbeddingModelName
) : base(dataProvider, logger, configuration)
) : base(dataProvider, logger, configuration, null)
{
//
// Prepare Embedding Model Descriptor ...
+5 -3
View File
@@ -1,7 +1,8 @@
using Microsoft.Extensions.Logging;
using xAiApi.Configurations;
using xAiApi.Constants;
using xAiApi.Interfaces;
using xAiModels.Interfaces;
using xAiApi.Configurations;
using Microsoft.Extensions.Logging;
namespace xAiApi.Providers
{
@@ -14,7 +15,8 @@ namespace xAiApi.Providers
) : base(
dataProvider,
logger,
configuration
configuration,
XAiApiConstants.XAiDefaultModelName
)
{ }
}
+5 -3
View File
@@ -1,7 +1,8 @@
using Microsoft.Extensions.Logging;
using xAiApi.Configurations;
using xAiApi.Constants;
using xAiApi.Interfaces;
using xAiModels.Interfaces;
using xAiApi.Configurations;
using Microsoft.Extensions.Logging;
namespace xAiApi.Providers
{
@@ -14,7 +15,8 @@ namespace xAiApi.Providers
) : base(
dataProvider,
configuration,
logger
logger,
XAiApiConstants.XAiEmbeddingModelName
)
{ }
}
+35
View File
@@ -0,0 +1,35 @@
using xAiApi.Constants;
using xAiApi.Interfaces;
using xAiModels.Interfaces;
using xAiApi.Configurations;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.AI;
using xCommons.Extensions;
namespace xAiApi.Providers
{
public class XDefaultThinkingAiService : XAIServiceBase, IXDefaultThinkingAiService
{
public XDefaultThinkingAiService(
IXAiDataProvider dataProvider,
ILogger<XAIServiceBase> logger,
XAiApiConfiguration configuration,
ReasoningEffort effort = ReasoningEffort.Medium,
ReasoningOutput output = ReasoningOutput.Full
) : base(
dataProvider,
logger,
configuration,
XAiApiConstants.XAiDefaultThinkingModelName
)
{
//
// Preparing Reasoning ...
Options.Reasoning = new ReasoningOptions
{
Output = output,
Effort = effort,
};
}
}
}