Files
xSaherElmAiApi/Helpers/XOllamaHelper.cs
T
2026-04-14 23:53:46 +03:30

146 lines
3.6 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using xCommons.Extensions;
using xCommons.Helpers;
namespace xAiApi.Helpers
{
public class XOllamaHelper
{
/// <summary>
/// Get Version ...
/// </summary>
/// <returns></returns>
public static async Task<string> GetVersion()
{
//
var cmd = "ollama";
var args = "--version";
var cmdResult = await XOsHelper.Execute(cmd, args);
//
var result =
cmdResult.Error.IsNullOrEmpty()
? cmdResult.Result
: cmdResult.Error;
//
result = result.Replace("\n", "");
//
return result;
}
/// <summary>
/// Get Exists Models ...
/// </summary>
/// <returns></returns>
public static async Task<IEnumerable<string>> GetModels()
{
//
var cmd = "ollama";
var args = "list";
var cmdResult = await XOsHelper.Execute(cmd, args);
//
var cmdResultText =
cmdResult.Error.IsNullOrEmpty()
? cmdResult.Result
: cmdResult.Error;
//
var cmdResultList = cmdResultText
.Split("\n")
.ToList();
if (cmdResultList.Count > 0)
{
cmdResultList.RemoveAt(0);
}
//
var result = new List<string>();
if (cmdResultList.Count > 0)
{
//
cmdResultList
.ForEach(i =>
{
//
if (!i.IsNullOrEmpty())
{
//
var d = i.Split(" ");
if (d.Length > 0)
{
result.Add(d[0]);
}
}
});
}
//
return result;
}
/// <summary>
/// Check Specified Model Exists ...
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public static async Task<bool> HasModel(string model)
{
//
var result = !model.IsNullOrEmpty();
if (!result)
{
return result;
}
//
var models = await GetModels();
result = models.HasChild();
if (!result)
{
return result;
}
//
result = models
.Any(n => n == model || n.ToNormalString().Contains(model.ToNormalString()));
return result;
}
/// <summary>
/// Search Available Models ...
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public static async Task<IEnumerable<string>> FindModel(string model)
{
//
var result = new List<string>();
//
if (model.IsNullOrEmpty())
{
return result;
}
//
var models = await GetModels();
if (!models.HasChild())
{
return result;
}
//
result = models
.Where(n => n == model || n.ToNormalString().Contains(model.ToNormalString()))
.ToList();
//
return result;
}
}
}