From fdc53bf9e7b72d3ed871bf9d9a4fae8a09e50340 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 13 Aug 2025 19:00:11 +0300 Subject: [PATCH 01/69] WIP --- Editor/LLMEditor.cs | 22 ++++----- Runtime/LLM.cs | 6 +-- Runtime/LLMBuilder.cs | 88 ++++++++++++++++++++++----------- Runtime/LLMLib.cs | 45 +++++++++-------- Runtime/LLMManager.cs | 9 ++-- Runtime/LLMUnitySetup.cs | 102 +++++++++++++++++++-------------------- Tests/Runtime/TestLLM.cs | 32 ------------ 7 files changed, 153 insertions(+), 151 deletions(-) diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index 5ed29afe..2cfc5183 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -111,7 +111,7 @@ public override void AddModelSettings(SerializedObject llmScriptSO) if (llmScriptSO.FindProperty("advancedOptions").boolValue) { attributeClasses.Add(typeof(ModelAdvancedAttribute)); - if (LLMUnitySetup.FullLlamaLib) attributeClasses.Add(typeof(ModelExtrasAttribute)); + attributeClasses.Add(typeof(ModelExtrasAttribute)); } ShowPropertiesOfClass("", llmScriptSO, attributeClasses, false); Space(); @@ -126,10 +126,10 @@ static void ResetModelOptions() { List existingOptions = new List(); foreach (ModelEntry entry in LLMManager.modelEntries) existingOptions.Add(entry.url); - modelOptions = new List(){"Download model", "Custom URL"}; - modelNames = new List(){null, null}; - modelURLs = new List(){null, null}; - modelLicenses = new List(){null, null}; + modelOptions = new List() { "Download model", "Custom URL" }; + modelNames = new List() { null, null }; + modelURLs = new List() { null, null }; + modelLicenses = new List() { null, null }; foreach (var entry in LLMUnitySetup.modelOptions) { string category = entry.Key; @@ -146,9 +146,9 @@ static void ResetModelOptions() float[] GetColumnWidths(bool expandedView) { - List widths = new List(){actionColumnWidth, nameColumnWidth, templateColumnWidth}; - if (expandedView) widths.AddRange(new List(){textColumnWidth, textColumnWidth}); - widths.AddRange(new List(){includeInBuildColumnWidth, actionColumnWidth}); + List widths = new List() { actionColumnWidth, nameColumnWidth, templateColumnWidth }; + if (expandedView) widths.AddRange(new List() { textColumnWidth, textColumnWidth }); + widths.AddRange(new List() { includeInBuildColumnWidth, actionColumnWidth }); return widths.ToArray(); } @@ -420,7 +420,7 @@ void OnEnable() EditorGUI.LabelField(rects[col++], "Build"); EditorGUI.LabelField(rects[col++], ""); }, - drawFooterCallback = {}, + drawFooterCallback = { }, footerHeight = 0, }; } @@ -440,14 +440,14 @@ private void DrawCopyableLabel(Rect rect, string label, string text = "") private void CopyToClipboard(string text) { - TextEditor te = new TextEditor {text = text}; + TextEditor te = new TextEditor { text = text }; te.SelectAll(); te.Copy(); } public void AddExtrasToggle() { - if (ToggleButton("Use extras", LLMUnitySetup.FullLlamaLib)) LLMUnitySetup.SetFullLlamaLib(!LLMUnitySetup.FullLlamaLib); + if (ToggleButton("Use cuBLAS", LLMUnitySetup.CUBLAS)) LLMUnitySetup.SetCUBLAS(!LLMUnitySetup.CUBLAS); } public override void AddOptionsToggles(SerializedObject llmScriptSO) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 3818741b..06d5bc25 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -445,7 +445,7 @@ protected virtual string GetLlamaccpArguments() if (numThreadsToUse > 0) arguments += $" -t {numThreadsToUse}"; arguments += loraArgument; if (numGPULayers > 0) arguments += $" -ngl {numGPULayers}"; - if (LLMUnitySetup.FullLlamaLib && flashAttention) arguments += $" --flash-attn"; + if (flashAttention) arguments += $" --flash-attn"; if (remote) { arguments += $" --port {port} --host 0.0.0.0"; @@ -556,7 +556,7 @@ private void StartService() { llmThread = new Thread(() => llmlib.LLM_Start(LLMObject)); llmThread.Start(); - while (!llmlib.LLM_Started(LLMObject)) {} + while (!llmlib.LLM_Started(LLMObject)) { } ApplyLoras(); started = true; } @@ -780,7 +780,7 @@ public async Task Slot(string json) public async Task Completion(string json, Callback streamCallback = null) { AssertStarted(); - if (streamCallback == null) streamCallback = (string s) => {}; + if (streamCallback == null) streamCallback = (string s) => { }; StreamWrapper streamWrapper = ConstructStreamWrapper(streamCallback); await Task.Run(() => llmlib.LLM_Completion(LLMObject, json, streamWrapper.GetStringWrapper())); if (!started) return null; diff --git a/Runtime/LLMBuilder.cs b/Runtime/LLMBuilder.cs index 6725cd43..8684c39e 100644 --- a/Runtime/LLMBuilder.cs +++ b/Runtime/LLMBuilder.cs @@ -98,7 +98,7 @@ public static void MovePath(string source, string target) /// path public static bool DeletePath(string path) { - string[] allowedDirs = new string[] { LLMUnitySetup.GetAssetPath(), BuildTempDir, PluginDir("Android"), PluginDir("iOS"), PluginDir("VisionOS")}; + string[] allowedDirs = new string[] { LLMUnitySetup.GetAssetPath(), BuildTempDir, PluginDir("Android"), PluginDir("iOS"), PluginDir("VisionOS") }; bool deleteOK = false; foreach (string allowedDir in allowedDirs) deleteOK = deleteOK || LLMUnitySetup.IsSubPath(path, allowedDir); if (!deleteOK) @@ -113,7 +113,7 @@ public static bool DeletePath(string path) static void AddMovedPair(string source, string target) { - movedPairs.Add(new StringPair {source = source, target = target}); + movedPairs.Add(new StringPair { source = source, target = target }); File.WriteAllText(movedCache, JsonUtility.ToJson(new ListStringPair { pairs = movedPairs }, true)); } @@ -164,37 +164,38 @@ static void AddActionAddMeta(string target) /// target platform public static void BuildLibraryPlatforms(BuildTarget buildTarget) { - string platform = ""; + List platforms = new List(); + bool checkCUBLAS = false; switch (buildTarget) { case BuildTarget.StandaloneWindows: case BuildTarget.StandaloneWindows64: - platform = "windows"; + platforms.Add("win-x64"); + checkCUBLAS = true; break; case BuildTarget.StandaloneLinux64: - platform = "linux"; + platforms.Add("linux-x64"); + checkCUBLAS = true; break; case BuildTarget.StandaloneOSX: - platform = "macos"; + platforms.Add("osx-universal"); break; case BuildTarget.Android: - platform = "android"; + platforms.Add("android-arm64"); + platforms.Add("android-x64"); break; case BuildTarget.iOS: - platform = "ios"; + platforms.Add("ios-arm64"); break; case BuildTarget.VisionOS: - platform = "visionos"; + platforms.Add("visionos-arm64"); break; } foreach (string source in Directory.GetDirectories(LLMUnitySetup.libraryPath)) { string sourceName = Path.GetFileName(source); - bool move = !sourceName.StartsWith(platform); - move = move || (sourceName.Contains("cuda") && !sourceName.Contains("full") && LLMUnitySetup.FullLlamaLib); - move = move || (sourceName.Contains("cuda") && sourceName.Contains("full") && !LLMUnitySetup.FullLlamaLib); - if (move) + if (!platforms.Contains(sourceName)) { string target = Path.Combine(BuildTempDir, sourceName); MoveAction(source, target); @@ -202,32 +203,63 @@ public static void BuildLibraryPlatforms(BuildTarget buildTarget) } } + if (checkCUBLAS) + { + List exclusionKeywords = LLMUnitySetup.CUBLAS ? new List() { "tinyblas" } : new List() { "cublas", "cudart" }; + foreach (string platform in platforms) + { + string platformDir = Path.Combine(LLMUnitySetup.libraryPath, platform, "native"); + foreach (string source in Directory.GetFiles(platformDir)) + { + string sourceName = Path.GetFileName(source); + foreach (string exclusionKeyword in exclusionKeywords) + { + if (sourceName.Contains(exclusionKeyword)) + { + string target = Path.Combine(BuildTempDir, platform, "native", sourceName); + MoveAction(source, target); + MoveAction(source + ".meta", target + ".meta"); ; + break; + } + } + } + } + } + if (buildTarget == BuildTarget.Android || buildTarget == BuildTarget.iOS || buildTarget == BuildTarget.VisionOS) { - string source = Path.Combine(LLMUnitySetup.libraryPath, platform); - string target = PluginLibraryDir(buildTarget.ToString()); - string pluginDir = PluginDir(buildTarget.ToString()); - MoveAction(source, target); - MoveAction(source + ".meta", target + ".meta"); - AddActionAddMeta(pluginDir); + foreach (string platform in platforms) + { + string source = Path.Combine(LLMUnitySetup.libraryPath, platform, "native"); + string target = Path.Combine(PluginLibraryDir(buildTarget.ToString()), platform); + string pluginDir = PluginDir(buildTarget.ToString()); + MoveAction(source, target); + MoveAction(source + ".meta", target + ".meta"); + AddActionAddMeta(pluginDir); + } } } static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths, bool didDomainReload) { - foreach (BuildTarget buildTarget in new BuildTarget[]{BuildTarget.iOS, BuildTarget.VisionOS}) + foreach (BuildTarget buildTarget in new BuildTarget[] { BuildTarget.iOS, BuildTarget.VisionOS, BuildTarget.Android }) { - string pathToPlugin = Path.Combine("Assets", PluginLibraryDir(buildTarget.ToString(), true), $"libundreamai_{buildTarget.ToString().ToLower()}.a"); - for (int i = 0; i < movedAssets.Length; i++) + string suffix = (buildTarget == BuildTarget.Android) ? "so" : "a"; + foreach (string platformDir in Directory.GetDirectories(Path.Combine("Assets", PluginLibraryDir(buildTarget.ToString(), true)))) { - if (movedAssets[i] == pathToPlugin) + string platform = Path.GetFileName(platformDir); + string pathToPlugin = Path.Combine(platformDir, $"libllamalib_{platform}.{suffix}"); + for (int i = 0; i < movedAssets.Length; i++) { - var importer = AssetImporter.GetAtPath(pathToPlugin) as PluginImporter; - if (importer != null && importer.isNativePlugin) + if (movedAssets[i] == pathToPlugin) { - importer.SetCompatibleWithPlatform(buildTarget, true); - importer.SetPlatformData(buildTarget, "CPU", "ARM64"); - AssetDatabase.ImportAsset(pathToPlugin); + var importer = AssetImporter.GetAtPath(pathToPlugin) as PluginImporter; + if (importer != null && importer.isNativePlugin) + { + importer.SetCompatibleWithPlatform(buildTarget, true); + importer.SetPlatformData(buildTarget, "CPU", platform.Split("_")[1].ToUpper()); + AssetDatabase.ImportAsset(pathToPlugin); + } } } } diff --git a/Runtime/LLMLib.cs b/Runtime/LLMLib.cs index f7417453..64e547e1 100644 --- a/Runtime/LLMLib.cs +++ b/Runtime/LLMLib.cs @@ -508,11 +508,11 @@ public static string GetArchitectureCheckerPath() string filename; if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) { - filename = $"windows-archchecker/archchecker.dll"; + filename = "win-x64/native/llamalib_win-x64_runtime.dll"; } else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) { - filename = $"linux-archchecker/libarchchecker.so"; + filename = "linux-x64/native/libllamalib_linux-x64_runtime.so"; } else { @@ -529,24 +529,24 @@ public static string GetArchitectureCheckerPath() public static List GetArchitectureDependencies(string arch) { List dependencies = new List(); - if (arch == "cuda-cu12.2.0-full") + if (arch == "cublas") { if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, $"windows-{arch}/cudart64_12.dll")); - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, $"windows-{arch}/cublasLt64_12.dll")); - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, $"windows-{arch}/cublas64_12.dll")); + dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cudart64_12.dll")); + dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cublasLt64_12.dll")); + dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cublas64_12.dll")); } } else if (arch == "vulkan") { if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, $"windows-{arch}/vulkan-1.dll")); + dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/vulkan-1.dll")); } else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, $"linux-{arch}/libvulkan.so.1")); + dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "linux-x64/native/libvulkan.so.1")); } } return dependencies; @@ -560,17 +560,18 @@ public static List GetArchitectureDependencies(string arch) public static string GetArchitecturePath(string arch) { string filename; + string os = OSName(); if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) { - filename = $"windows-{arch}/undreamai_windows-{arch}.dll"; + filename = $"{os}/native/llamalib_${os}_{arch}.dll"; } else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) { - filename = $"linux-{arch}/libundreamai_linux-{arch}.so"; + filename = $"{os}/native/libllamalib_${os}_{arch}.so"; } else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) { - filename = $"macos-{arch}/libundreamai_macos-{arch}.dylib"; + filename = $"{os}/native/libllamalib_${os}_{arch}.dylib"; } else { @@ -634,6 +635,18 @@ public static string GetArchitecturePath(string arch) #endif + public static string OSName() + { + if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) + return "win-x64"; + else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) + return "linux-x64"; + else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer) + return "osx-universal"; + string error = "Unknown OS"; + LLMUnitySetup.LogError(error); + throw new Exception(error); + } /// /// Identifies the possible architectures that we can use based on the OS and GPU usage /// @@ -647,14 +660,8 @@ public static List PossibleArchitectures(bool gpu = false) { if (gpu) { - if (LLMUnitySetup.FullLlamaLib) - { - architectures.Add("cuda-cu12.2.0-full"); - } - else - { - architectures.Add("cuda-cu12.2.0"); - } + architectures.Add("cublas"); + architectures.Add("tinyblas"); architectures.Add("hip"); architectures.Add("vulkan"); } diff --git a/Runtime/LLMManager.cs b/Runtime/LLMManager.cs index 72e58a06..238fa80c 100644 --- a/Runtime/LLMManager.cs +++ b/Runtime/LLMManager.cs @@ -27,7 +27,7 @@ public class ModelEntry public bool includeInBuild; public int contextLength; - static List embeddingOnlyArchs = new List {"bert", "nomic-bert", "jina-bert-v2", "t5", "t5encoder"}; + static List embeddingOnlyArchs = new List { "bert", "nomic-bert", "jina-bert-v2", "t5", "t5encoder" }; /// /// Returns the relative asset path if it is in the AssetPath folder (StreamingAssets or persistentPath), otherwise the filename. @@ -98,7 +98,6 @@ public class LLMManagerStore public bool downloadOnStart; public List modelEntries; public int debugMode; - public bool fullLlamaLib; } /// \endcond @@ -167,7 +166,7 @@ public static async Task SetupOnce() else { target = LLMUnitySetup.GetDownloadAssetPath(modelEntry.filename); - downloads.Add(new StringPair {source = modelEntry.url, target = target}); + downloads.Add(new StringPair { source = modelEntry.url, target = target }); } } if (downloads.Count == 0) return true; @@ -327,7 +326,6 @@ public static void LoadFromDisk() downloadOnStart = store.downloadOnStart; modelEntries = store.modelEntries; LLMUnitySetup.DebugMode = (LLMUnitySetup.DebugModeType)store.debugMode; - LLMUnitySetup.FullLlamaLib = store.fullLlamaLib; } #if UNITY_EDITOR @@ -650,8 +648,7 @@ public static void SaveToDisk() { modelEntries = modelEntriesBuild, downloadOnStart = downloadOnStart, - debugMode = (int)LLMUnitySetup.DebugMode, - fullLlamaLib = LLMUnitySetup.FullLlamaLib + debugMode = (int)LLMUnitySetup.DebugMode }, true); File.WriteAllText(LLMUnitySetup.LLMManagerPath, json); } diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index afcb5010..baea2e6d 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -54,23 +54,23 @@ public DynamicRangeAttribute(string minVariable, string maxVariable, bool intOrF } } - public class LLMAttribute : PropertyAttribute {} - public class LocalRemoteAttribute : PropertyAttribute {} - public class RemoteAttribute : PropertyAttribute {} - public class LocalAttribute : PropertyAttribute {} - public class ModelAttribute : PropertyAttribute {} - public class ModelExtrasAttribute : PropertyAttribute {} - public class ChatAttribute : PropertyAttribute {} - public class LLMUnityAttribute : PropertyAttribute {} - - public class AdvancedAttribute : PropertyAttribute {} - public class LLMAdvancedAttribute : AdvancedAttribute {} - public class ModelAdvancedAttribute : AdvancedAttribute {} - public class ChatAdvancedAttribute : AdvancedAttribute {} + public class LLMAttribute : PropertyAttribute { } + public class LocalRemoteAttribute : PropertyAttribute { } + public class RemoteAttribute : PropertyAttribute { } + public class LocalAttribute : PropertyAttribute { } + public class ModelAttribute : PropertyAttribute { } + public class ModelExtrasAttribute : PropertyAttribute { } + public class ChatAttribute : PropertyAttribute { } + public class LLMUnityAttribute : PropertyAttribute { } + + public class AdvancedAttribute : PropertyAttribute { } + public class LLMAdvancedAttribute : AdvancedAttribute { } + public class ModelAdvancedAttribute : AdvancedAttribute { } + public class ChatAdvancedAttribute : AdvancedAttribute { } public class NotImplementedException : Exception { - public NotImplementedException() : base("The method needs to be implemented by subclasses.") {} + public NotImplementedException() : base("The method needs to be implemented by subclasses.") { } } public delegate void EmptyCallback(); @@ -103,17 +103,15 @@ public class LLMUnitySetup /// LLM for Unity version public static string Version = "v2.5.2"; /// LlamaLib version - public static string LlamaLibVersion = "v1.2.6"; + public static string LlamaLibVersion = "v2.0.0"; /// LlamaLib release url public static string LlamaLibReleaseURL = $"https://github.com/undreamai/LlamaLib/releases/download/{LlamaLibVersion}"; /// LlamaLib name - public static string libraryName = GetLibraryName(LlamaLibVersion); + public static string libraryName = $"LlamaLib-{LlamaLibVersion}"; /// LlamaLib path public static string libraryPath = GetAssetPath(libraryName); /// LlamaLib url public static string LlamaLibURL = $"{LlamaLibReleaseURL}/{libraryName}.zip"; - /// LlamaLib extension url - public static string LlamaLibExtensionURL = $"{LlamaLibReleaseURL}/{libraryName}-full.zip"; /// LLMnity store path public static string LLMUnityStore = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "LLMUnity"); /// Model download path @@ -122,7 +120,8 @@ public class LLMUnitySetup public static string LLMManagerPath = GetAssetPath("LLMManager.json"); /// Default models for download - [HideInInspector] public static readonly Dictionary modelOptions = new Dictionary() + [HideInInspector] + public static readonly Dictionary modelOptions = new Dictionary() { {"Large models (more than 10B)", new(string, string, string)[] { @@ -168,8 +167,8 @@ public class LLMUnitySetup /// \cond HIDE [LLMUnity] public static DebugModeType DebugMode = DebugModeType.All; static string DebugModeKey = "DebugMode"; - public static bool FullLlamaLib = false; - static string FullLlamaLibKey = "FullLlamaLib"; + public static bool CUBLAS = false; + static string CUBLASKey = "CUBLAS"; static List> errorCallbacks = new List>(); static readonly object lockObject = new object(); static Dictionary androidExtractTasks = new Dictionary(); @@ -204,7 +203,7 @@ public static void LogError(string message) static void LoadPlayerPrefs() { DebugMode = (DebugModeType)PlayerPrefs.GetInt(DebugModeKey, (int)DebugModeType.All); - FullLlamaLib = PlayerPrefs.GetInt(FullLlamaLibKey, 0) == 1; + CUBLAS = PlayerPrefs.GetInt(CUBLASKey, 0) == 1; } public static void SetDebugMode(DebugModeType newDebugMode) @@ -216,22 +215,15 @@ public static void SetDebugMode(DebugModeType newDebugMode) } #if UNITY_EDITOR - public static void SetFullLlamaLib(bool value) + public static void SetCUBLAS(bool value) { - if (FullLlamaLib == value) return; - FullLlamaLib = value; - PlayerPrefs.SetInt(FullLlamaLibKey, value ? 1 : 0); + if (CUBLAS == value) return; + CUBLAS = value; + PlayerPrefs.SetInt(CUBLASKey, value ? 1 : 0); PlayerPrefs.Save(); - _ = DownloadLibrary(); } - #endif - public static string GetLibraryName(string version) - { - return $"undreamai-{version}-llamacpp"; - } - public static string GetAssetPath(string relPath = "") { string assetsDir = Application.platform == RuntimePlatform.Android ? Application.persistentDataPath : Application.streamingAssetsPath; @@ -303,7 +295,7 @@ public static async Task DownloadFile( callback?.Invoke(savePath); } - public static async Task AndroidExtractFile(string assetName, bool overwrite = false, bool log = true, int chunkSize = 1024*1024) + public static async Task AndroidExtractFile(string assetName, bool overwrite = false, bool log = true, int chunkSize = 1024 * 1024) { Task extractionTask; lock (lockObject) @@ -321,7 +313,7 @@ public static async Task AndroidExtractFile(string assetName, bool overwrite = f await extractionTask; } - public static async Task AndroidExtractFileOnce(string assetName, bool overwrite = false, bool log = true, int chunkSize = 1024*1024) + public static async Task AndroidExtractFileOnce(string assetName, bool overwrite = false, bool log = true, int chunkSize = 1024 * 1024) { string source = "jar:file://" + Application.dataPath + "!/assets/" + assetName; string target = GetAssetPath(assetName); @@ -411,14 +403,19 @@ public static void CreateEmptyFile(string path) File.Create(path).Dispose(); } - static void ExtractInsideDirectory(string zipPath, string extractPath, bool overwrite = true) + static void ExtractInsideDirectory(string zipPath, string extractPath, bool overwrite = true, string prefix = "runtimes/") { using (ZipArchive archive = ZipFile.OpenRead(zipPath)) { foreach (ZipArchiveEntry entry in archive.Entries) { - if (string.IsNullOrEmpty(entry.Name)) continue; - string destinationPath = Path.Combine(extractPath, entry.FullName); + string normalizedPath = entry.FullName.Replace('\\', '/'); + if (!normalizedPath.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) + continue; + if (string.IsNullOrEmpty(entry.Name)) + continue; // Skip directories + + string destinationPath = Path.Combine(extractPath, normalizedPath.Substring(prefix.Length)); Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)); entry.ExtractToFile(destinationPath, overwrite); } @@ -445,24 +442,28 @@ static async Task DownloadAndExtractInsideDirectory(string url, string path, str static void DeleteEarlierVersions() { List assetPathSubDirs = new List(); - foreach (string dir in new string[] {GetAssetPath(), Path.Combine(Application.dataPath, "Plugins", "Android")}) + foreach (string dir in new string[] { GetAssetPath(), Path.Combine(Application.dataPath, "Plugins", "Android") }) { if (Directory.Exists(dir)) assetPathSubDirs.AddRange(Directory.GetDirectories(dir)); } - Regex regex = new Regex(GetLibraryName("(.+)")); + List versionRegexes = new List { new Regex("undreamai-(.+)-llamacpp"), new Regex("LlamaLib-(.+)") }; foreach (string assetPathSubDir in assetPathSubDirs) { - Match match = regex.Match(Path.GetFileName(assetPathSubDir)); - if (match.Success) + foreach (Regex regex in versionRegexes) { - string version = match.Groups[1].Value; - if (version != LlamaLibVersion) + Match match = regex.Match(Path.GetFileName(assetPathSubDir)); + if (match.Success) { - Debug.Log($"Deleting other LLMUnity version folder: {assetPathSubDir}"); - Directory.Delete(assetPathSubDir, true); - if (File.Exists(assetPathSubDir + ".meta")) File.Delete(assetPathSubDir + ".meta"); + string version = match.Groups[1].Value; + if (version != LlamaLibVersion) + { + Debug.Log($"Deleting other LLMUnity version folder: {assetPathSubDir}"); + Directory.Delete(assetPathSubDir, true); + if (File.Exists(assetPathSubDir + ".meta")) File.Delete(assetPathSubDir + ".meta"); + } } + } } } @@ -481,9 +482,6 @@ static async Task DownloadLibrary() // setup LlamaLib in StreamingAssets await DownloadAndExtractInsideDirectory(LlamaLibURL, libraryPath, setupDir); - - // setup LlamaLib extras in StreamingAssets - if (FullLlamaLib) await DownloadAndExtractInsideDirectory(LlamaLibExtensionURL, libraryPath, setupDir); } catch (Exception e) { @@ -511,7 +509,7 @@ public static string AddAsset(string assetPath) string filename = Path.GetFileName(assetPath); string fullPath = GetAssetPath(filename); AssetDatabase.StartAssetEditing(); - foreach (string path in new string[] {fullPath, fullPath + ".meta"}) + foreach (string path in new string[] { fullPath, fullPath + ".meta" }) { if (File.Exists(path)) File.Delete(path); } @@ -627,7 +625,7 @@ public static int AndroidGetNumBigCores() int maxFreqKHz = GetMaxFreqKHz(coreIndex); cpuMaxFreqKHz.Add(maxFreqKHz); if (maxFreqKHz > maxFreqKHzMax) maxFreqKHzMax = maxFreqKHz; - if (maxFreqKHz < maxFreqKHzMin) maxFreqKHzMin = maxFreqKHz; + if (maxFreqKHz < maxFreqKHzMin) maxFreqKHzMin = maxFreqKHz; cpuIsSmtCpu.Add(IsSmtCpu(coreIndex)); } } diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 4f3210ef..68463514 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -9,41 +9,9 @@ using System.Linq; using System.Threading; using UnityEngine.TestTools; -using UnityEditor; -using UnityEditor.TestTools.TestRunner.Api; namespace LLMUnityTests { - [InitializeOnLoad] - public static class TestRunListener - { - static TestRunListener() - { - var api = ScriptableObject.CreateInstance(); - api.RegisterCallbacks(new TestRunCallbacks()); - } - } - - public class TestRunCallbacks : ICallbacks - { - public void RunStarted(ITestAdaptor testsToRun) {} - - public void RunFinished(ITestResultAdaptor result) - { - LLMUnitySetup.FullLlamaLib = false; - } - - public void TestStarted(ITestAdaptor test) - { - LLMUnitySetup.FullLlamaLib = test.FullName.Contains("CUDA_full"); - } - - public void TestFinished(ITestResultAdaptor result) - { - LLMUnitySetup.FullLlamaLib = false; - } - } - public class TestLLMLoraAssignment { [Test] From 0f94f6f32a673aa04469908921ae0c8941532bde Mon Sep 17 00:00:00 2001 From: amakropoulos Date: Wed, 13 Aug 2025 16:01:08 +0000 Subject: [PATCH 02/69] update VERSION --- .github/doxygen/Doxyfile | 2 +- README.md | 2 +- Runtime/LLMUnitySetup.cs | 2 +- VERSION | 2 +- package.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/doxygen/Doxyfile b/.github/doxygen/Doxyfile index 067bc80c..3786c0a5 100644 --- a/.github/doxygen/Doxyfile +++ b/.github/doxygen/Doxyfile @@ -48,7 +48,7 @@ PROJECT_NAME = "LLM for Unity" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = v2.5.2 +PROJECT_NUMBER = v3.0.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/README.md b/README.md index 603e5e29..53666775 100644 --- a/README.md +++ b/README.md @@ -359,7 +359,7 @@ To create the server: Alternatively you can use a server binary for easier deployment: - Run the above scene from the Editor and copy the command from the Debug messages (starting with "Server command:") -- Download the [server binaries](https://github.com/undreamai/LlamaLib/releases/download/v1.2.6/undreamai-v1.2.6-server.zip) and [DLLs](https://github.com/undreamai/LlamaLib/releases/download/v1.2.6/undreamai-v1.2.6-llamacpp-full.zip) and extract them into the same folder +- Download the [server binaries](https://github.com/undreamai/LlamaLib/releases/download/v2.0.0/undreamai-v2.0.0-server.zip) and [DLLs](https://github.com/undreamai/LlamaLib/releases/download/v2.0.0/undreamai-v2.0.0-llamacpp-full.zip) and extract them into the same folder - Find the architecture you are interested in from the folder above e.g. for Windows and CUDA use the `windows-cuda-cu12.2.0`.
You can also check the architecture that works for your system from the Debug messages (starting with "Using architecture"). - From command line change directory to the architecture folder selected and start the server by running the command copied from above. diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index baea2e6d..445e1b78 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -101,7 +101,7 @@ public class LLMUnitySetup { // DON'T CHANGE! the version is autocompleted with a GitHub action /// LLM for Unity version - public static string Version = "v2.5.2"; + public static string Version = "v3.0.0"; /// LlamaLib version public static string LlamaLibVersion = "v2.0.0"; /// LlamaLib release url diff --git a/VERSION b/VERSION index f6dcb643..ad55eb85 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -v2.5.2 +v3.0.0 diff --git a/package.json b/package.json index 7095e04a..c35b1392 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ai.undream.llm", - "version": "2.5.2", + "version": "3.0.0", "displayName": "LLM for Unity", "description": "LLM for Unity allows to run and distribute Large Language Models (LLMs) in the Unity engine.", "unity": "2022.3", From 728babc9c1018cabc11c09ea4d01480e7a038e2c Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 15 Aug 2025 04:08:44 +0300 Subject: [PATCH 03/69] working setup --- Runtime/LLMUnitySetup.cs | 51 +++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index 445e1b78..512b39b7 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -54,23 +54,23 @@ public DynamicRangeAttribute(string minVariable, string maxVariable, bool intOrF } } - public class LLMAttribute : PropertyAttribute { } - public class LocalRemoteAttribute : PropertyAttribute { } - public class RemoteAttribute : PropertyAttribute { } - public class LocalAttribute : PropertyAttribute { } - public class ModelAttribute : PropertyAttribute { } - public class ModelExtrasAttribute : PropertyAttribute { } - public class ChatAttribute : PropertyAttribute { } - public class LLMUnityAttribute : PropertyAttribute { } - - public class AdvancedAttribute : PropertyAttribute { } - public class LLMAdvancedAttribute : AdvancedAttribute { } - public class ModelAdvancedAttribute : AdvancedAttribute { } - public class ChatAdvancedAttribute : AdvancedAttribute { } + public class LLMAttribute : PropertyAttribute {} + public class LocalRemoteAttribute : PropertyAttribute {} + public class RemoteAttribute : PropertyAttribute {} + public class LocalAttribute : PropertyAttribute {} + public class ModelAttribute : PropertyAttribute {} + public class ModelExtrasAttribute : PropertyAttribute {} + public class ChatAttribute : PropertyAttribute {} + public class LLMUnityAttribute : PropertyAttribute {} + + public class AdvancedAttribute : PropertyAttribute {} + public class LLMAdvancedAttribute : AdvancedAttribute {} + public class ModelAdvancedAttribute : AdvancedAttribute {} + public class ChatAdvancedAttribute : AdvancedAttribute {} public class NotImplementedException : Exception { - public NotImplementedException() : base("The method needs to be implemented by subclasses.") { } + public NotImplementedException() : base("The method needs to be implemented by subclasses.") {} } public delegate void EmptyCallback(); @@ -222,6 +222,7 @@ public static void SetCUBLAS(bool value) PlayerPrefs.SetInt(CUBLASKey, value ? 1 : 0); PlayerPrefs.Save(); } + #endif public static string GetAssetPath(string relPath = "") @@ -403,19 +404,28 @@ public static void CreateEmptyFile(string path) File.Create(path).Dispose(); } - static void ExtractInsideDirectory(string zipPath, string extractPath, bool overwrite = true, string prefix = "runtimes/") + static void ExtractInsideDirectory(string zipPath, string extractPath, string prefix = "", bool overwrite = true) { using (ZipArchive archive = ZipFile.OpenRead(zipPath)) { foreach (ZipArchiveEntry entry in archive.Entries) { - string normalizedPath = entry.FullName.Replace('\\', '/'); - if (!normalizedPath.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) - continue; if (string.IsNullOrEmpty(entry.Name)) continue; // Skip directories - string destinationPath = Path.Combine(extractPath, normalizedPath.Substring(prefix.Length)); + string destinationPath; + if (!String.IsNullOrEmpty(prefix)) + { + string normalizedPath = entry.FullName.Replace('\\', '/'); + if (!normalizedPath.StartsWith(prefix, StringComparison.OrdinalIgnoreCase)) + continue; + destinationPath = Path.Combine(extractPath, normalizedPath.Substring(prefix.Length)); + } + else + { + destinationPath = Path.Combine(extractPath, entry.FullName); + } + Directory.CreateDirectory(Path.GetDirectoryName(destinationPath)); entry.ExtractToFile(destinationPath, overwrite); } @@ -432,7 +442,7 @@ static async Task DownloadAndExtractInsideDirectory(string url, string path, str await DownloadFile(url, zipPath, true, null, SetLibraryProgress); AssetDatabase.StartAssetEditing(); - ExtractInsideDirectory(zipPath, path); + ExtractInsideDirectory(zipPath, path, $"{libraryName}/runtimes/"); CreateEmptyFile(setupFile); AssetDatabase.StopAssetEditing(); @@ -463,7 +473,6 @@ static void DeleteEarlierVersions() if (File.Exists(assetPathSubDir + ".meta")) File.Delete(assetPathSubDir + ".meta"); } } - } } } From ddc67c6986ad61a850315590896275a50272995a Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 15 Aug 2025 04:10:12 +0300 Subject: [PATCH 04/69] fix platform paths on postprocess --- Runtime/LLMBuilder.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Runtime/LLMBuilder.cs b/Runtime/LLMBuilder.cs index 8684c39e..9d595c2a 100644 --- a/Runtime/LLMBuilder.cs +++ b/Runtime/LLMBuilder.cs @@ -218,7 +218,7 @@ public static void BuildLibraryPlatforms(BuildTarget buildTarget) { string target = Path.Combine(BuildTempDir, platform, "native", sourceName); MoveAction(source, target); - MoveAction(source + ".meta", target + ".meta"); ; + MoveAction(source + ".meta", target + ".meta"); break; } } @@ -245,10 +245,12 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse foreach (BuildTarget buildTarget in new BuildTarget[] { BuildTarget.iOS, BuildTarget.VisionOS, BuildTarget.Android }) { string suffix = (buildTarget == BuildTarget.Android) ? "so" : "a"; - foreach (string platformDir in Directory.GetDirectories(Path.Combine("Assets", PluginLibraryDir(buildTarget.ToString(), true)))) + string platformDir = Path.Combine("Assets", PluginLibraryDir(buildTarget.ToString(), true)); + if (!Directory.Exists(platformDir)) continue; + foreach (string archDir in Directory.GetDirectories(platformDir)) { - string platform = Path.GetFileName(platformDir); - string pathToPlugin = Path.Combine(platformDir, $"libllamalib_{platform}.{suffix}"); + string arch = Path.GetFileName(archDir); + string pathToPlugin = Path.Combine(platformDir, $"libllamalib_{arch}.{suffix}"); for (int i = 0; i < movedAssets.Length; i++) { if (movedAssets[i] == pathToPlugin) @@ -257,7 +259,7 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse if (importer != null && importer.isNativePlugin) { importer.SetCompatibleWithPlatform(buildTarget, true); - importer.SetPlatformData(buildTarget, "CPU", platform.Split("_")[1].ToUpper()); + importer.SetPlatformData(buildTarget, "CPU", arch.Split("_")[1].ToUpper()); AssetDatabase.ImportAsset(pathToPlugin); } } From ff1afde56d9749664242eae83d82d68bee27f201 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 15 Aug 2025 04:11:13 +0300 Subject: [PATCH 05/69] initial working LLM with LlamaLib --- Runtime/LLM.cs | 521 +++++++++++++++------------------------ Tests/Runtime/TestLLM.cs | 10 +- 2 files changed, 207 insertions(+), 324 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 06d5bc25..e7aa7d57 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -5,6 +5,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; +using UndreamAI.LlamaLib; using UnityEditor; using UnityEngine; @@ -88,14 +89,12 @@ public class LLM : MonoBehaviour /// \cond HIDE public int minContextLength = 0; public int maxContextLength = 0; - public string architecture => llmlib.architecture; - IntPtr LLMObject = IntPtr.Zero; + public string architecture => llmlib?.architecture; List clients = new List(); - LLMLib llmlib; - StreamWrapper logStreamWrapper = null; + LlamaLib llmlib; + LLMService llmService = null; Thread llmThread = null; - List streamWrappers = new List(); public LLMManager llmManager = new LLMManager(); private readonly object startLock = new object(); static readonly object staticLock = new object(); @@ -124,7 +123,7 @@ void OnValidate() /// /// The Unity Awake function that starts the LLM server. /// - public async void Awake() + public void Awake() { if (!enabled) return; #if !UNITY_EDITOR @@ -136,15 +135,139 @@ public async void Awake() failed = true; return; } - string arguments = GetLlamaccpArguments(); - if (arguments == null) + + StartService(); + if (!started) return; + if (dontDestroyOnLoad) DontDestroyOnLoad(transform.root.gameObject); + } + + private void CheckParameters() + { + if ((SSLCert != "" && SSLKey == "") || (SSLCert == "" && SSLKey != "")) + { + throw new ArgumentException($"Both SSL certificate and key need to be provided!"); + } + } + + private string GetModelPath() + { + if (model == "") + { + throw new ArgumentException("No model file provided!"); + } + + string modelPath = GetLLMManagerAssetRuntime(model); + if (!File.Exists(modelPath)) { + throw new ArgumentException($"File {modelPath} not found!"); + } + return modelPath; + } + + private List GetLoraPaths() + { + loraManager.FromStrings(lora, loraWeights); + List loraPaths = new List(); + foreach (string lora in loraManager.GetLoras()) + { + string loraPath = GetLLMManagerAssetRuntime(lora); + if (!File.Exists(loraPath)) + { + throw new ArgumentException($"File {loraPath} not found!"); + } + loraPaths.Add(loraPath); + } + return loraPaths; + } + + private void StartService() + { + started = false; + failed = false; + + string modelPath; + List loraPaths; + try + { + CheckParameters(); + modelPath = GetModelPath(); + loraPaths = GetLoraPaths(); + } + catch (ArgumentException ex) + { + LLMUnitySetup.LogError(ex.Message); + return; + } + + try + { + CreateLib(); + CreateService(modelPath, loraPaths); + } + catch (Exception e) + { + LLMUnitySetup.LogError($"LLM service couldn't be created, error: {e.Message}"); + Destroy(); failed = true; return; } - await Task.Run(() => StartLLMServer(arguments)); + LLMUnitySetup.Log($"LLM service created, using {architecture}"); + } + + private void CreateLib() + { + bool useGPU = numGPULayers > 0; + llmlib = new LlamaLibUnity(useGPU); + if (debug) + { + //todo + LlamaLibUnity.Debug(2); + LlamaLibUnity.LoggingCallback(LLMUnitySetup.Log); + } + } + + // the following is the equivalent for running from command line + // string serverCommand; + // if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) serverCommand = "undreamai_server.exe"; + // else serverCommand = "./undreamai_server"; + // serverCommand += " " + arguments; + // serverCommand += $" --template \"{chatTemplate}\""; + // if (remote && SSLCert != "" && SSLKey != "") serverCommand += $" --ssl-cert-file {SSLCertPath} --ssl-key-file {SSLKeyPath}"; + // LLMUnitySetup.Log($"Deploy server command: {serverCommand}"); + + private void CreateService(string modelPath, List loraPaths) + { + int numSlots = GetNumClients(); + int numThreadsToUse = numThreads; + if (Application.platform == RuntimePlatform.Android && numThreads <= 0) numThreadsToUse = LLMUnitySetup.AndroidGetNumBigCores(); + + lock (staticLock) + { + System.IntPtr llm = LLMService.CreateLLM( + llmlib, + modelPath, numSlots, numThreadsToUse, numGPULayers, + flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); + + llmService = new LLMService(llmlib, llm); + if (remote) + { + if (SSLCert != "" && SSLKey != "") + { + LLMUnitySetup.Log("Using SSL"); + llmService.SetSSL(SSLCert, SSLKey); + } + llmService.StartServer("", port, APIKey); + } + + llmService.Start(); + } + + started = llmService.Started(); if (!started) return; - if (dontDestroyOnLoad) DontDestroyOnLoad(transform.root.gameObject); + + ApplyLoras(); + //todo + // llmService.SetTemplate(chatTemplate); } /// @@ -338,7 +461,7 @@ public void UpdateLoras() public void SetTemplate(string templateName, bool setDirty = true) { chatTemplate = templateName; - if (started) llmlib?.LLM_SetTemplate(LLMObject, chatTemplate); + if (started) llmService.SetTemplate(chatTemplate); #if UNITY_EDITOR if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif @@ -402,165 +525,6 @@ public string GetTemplate() return chatTemplate; } - protected virtual string GetLlamaccpArguments() - { - // Start the LLM server in a cross-platform way - if ((SSLCert != "" && SSLKey == "") || (SSLCert == "" && SSLKey != "")) - { - LLMUnitySetup.LogError($"Both SSL certificate and key need to be provided!"); - return null; - } - - if (model == "") - { - LLMUnitySetup.LogError("No model file provided!"); - return null; - } - string modelPath = GetLLMManagerAssetRuntime(model); - if (!File.Exists(modelPath)) - { - LLMUnitySetup.LogError($"File {modelPath} not found!"); - return null; - } - - loraManager.FromStrings(lora, loraWeights); - string loraArgument = ""; - foreach (string lora in loraManager.GetLoras()) - { - string loraPath = GetLLMManagerAssetRuntime(lora); - if (!File.Exists(loraPath)) - { - LLMUnitySetup.LogError($"File {loraPath} not found!"); - return null; - } - loraArgument += $" --lora \"{loraPath}\""; - } - - int numThreadsToUse = numThreads; - if (Application.platform == RuntimePlatform.Android && numThreads <= 0) numThreadsToUse = LLMUnitySetup.AndroidGetNumBigCores(); - - int slots = GetNumClients(); - string arguments = $"-m \"{modelPath}\" -c {contextSize} -b {batchSize} --log-disable -np {slots}"; - if (embeddingsOnly) arguments += " --embedding"; - if (numThreadsToUse > 0) arguments += $" -t {numThreadsToUse}"; - arguments += loraArgument; - if (numGPULayers > 0) arguments += $" -ngl {numGPULayers}"; - if (flashAttention) arguments += $" --flash-attn"; - if (remote) - { - arguments += $" --port {port} --host 0.0.0.0"; - if (!String.IsNullOrEmpty(APIKey)) arguments += $" --api-key {APIKey}"; - } - - // the following is the equivalent for running from command line - string serverCommand; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) serverCommand = "undreamai_server.exe"; - else serverCommand = "./undreamai_server"; - serverCommand += " " + arguments; - serverCommand += $" --template \"{chatTemplate}\""; - if (remote && SSLCert != "" && SSLKey != "") serverCommand += $" --ssl-cert-file {SSLCertPath} --ssl-key-file {SSLKeyPath}"; - LLMUnitySetup.Log($"Deploy server command: {serverCommand}"); - return arguments; - } - - private void SetupLogging() - { - logStreamWrapper = ConstructStreamWrapper(LLMUnitySetup.LogWarning, true); - llmlib?.Logging(logStreamWrapper.GetStringWrapper()); - } - - private void StopLogging() - { - if (logStreamWrapper == null) return; - llmlib?.StopLogging(); - DestroyStreamWrapper(logStreamWrapper); - } - - private void StartLLMServer(string arguments) - { - started = false; - failed = false; - bool useGPU = numGPULayers > 0; - - foreach (string arch in LLMLib.PossibleArchitectures(useGPU)) - { - string error; - try - { - InitLib(arch); - InitService(arguments); - LLMUnitySetup.Log($"Using architecture: {arch}"); - break; - } - catch (LLMException e) - { - error = e.Message; - Destroy(); - } - catch (DestroyException) - { - break; - } - catch (Exception e) - { - error = $"{e.GetType()}: {e.Message}"; - } - LLMUnitySetup.Log($"Tried architecture: {arch}, error: " + error); - } - if (llmlib == null) - { - LLMUnitySetup.LogError("LLM service couldn't be created"); - failed = true; - return; - } - CallWithLock(StartService); - LLMUnitySetup.Log("LLM service created"); - } - - private void InitLib(string arch) - { - llmlib = new LLMLib(arch); - CheckLLMStatus(false); - } - - void CallWithLock(EmptyCallback fn) - { - lock (startLock) - { - if (llmlib == null) throw new DestroyException(); - fn(); - } - } - - private void InitService(string arguments) - { - lock (staticLock) - { - if (debug) CallWithLock(SetupLogging); - CallWithLock(() => { LLMObject = llmlib.LLM_Construct(arguments); }); - CallWithLock(() => llmlib.LLM_SetTemplate(LLMObject, chatTemplate)); - if (remote) - { - if (SSLCert != "" && SSLKey != "") - { - LLMUnitySetup.Log("Using SSL"); - CallWithLock(() => llmlib.LLM_SetSSL(LLMObject, SSLCert, SSLKey)); - } - CallWithLock(() => llmlib.LLM_StartServer(LLMObject)); - } - CallWithLock(() => CheckLLMStatus(false)); - } - } - - private void StartService() - { - llmThread = new Thread(() => llmlib.LLM_Start(LLMObject)); - llmThread.Start(); - while (!llmlib.LLM_Started(LLMObject)) { } - ApplyLoras(); - started = true; - } - /// /// Registers a local LLMCaller object. /// This allows to bind the LLMCaller "client" to a specific slot of the LLM. @@ -580,32 +544,6 @@ protected int GetNumClients() return Math.Max(parallelPrompts == -1 ? clients.Count : parallelPrompts, 1); } - /// \cond HIDE - public delegate void LLMStatusCallback(IntPtr LLMObject, IntPtr stringWrapper); - public delegate void LLMNoInputReplyCallback(IntPtr LLMObject, IntPtr stringWrapper); - public delegate void LLMReplyCallback(IntPtr LLMObject, string json_data, IntPtr stringWrapper); - /// \endcond - - StreamWrapper ConstructStreamWrapper(Callback streamCallback = null, bool clearOnUpdate = false) - { - StreamWrapper streamWrapper = new StreamWrapper(llmlib, streamCallback, clearOnUpdate); - streamWrappers.Add(streamWrapper); - return streamWrapper; - } - - void DestroyStreamWrapper(StreamWrapper streamWrapper) - { - streamWrappers.Remove(streamWrapper); - streamWrapper.Destroy(); - } - - /// - /// The Unity Update function. It is used to retrieve the LLM replies. - public void Update() - { - foreach (StreamWrapper streamWrapper in streamWrappers) streamWrapper.Update(); - } - void AssertStarted() { string error = null; @@ -628,45 +566,20 @@ void AssertNotStarted() } } - void CheckLLMStatus(bool log = true) + /// + /// Sets the lora scale, only works after the LLM service has started + /// + /// switch result + public void ApplyLoras() { - if (llmlib == null) { return; } - IntPtr stringWrapper = llmlib.StringWrapper_Construct(); - int status = llmlib.LLM_Status(LLMObject, stringWrapper); - string result = llmlib.GetStringWrapperResult(stringWrapper); - llmlib.StringWrapper_Delete(stringWrapper); - string message = $"LLM {status}: {result}"; - if (status > 0) - { - if (log) LLMUnitySetup.LogError(message); - throw new LLMException(message, status); - } - else if (status < 0) + List loras = new List(); + float[] weights = loraManager.GetWeights(); + if (weights.Length == 0) return; + for (int i = 0; i < weights.Length; i++) { - if (log) LLMUnitySetup.LogWarning(message); + loras.Add(new LoraIdScale(i, weights[i])); } - } - - async Task LLMNoInputReply(LLMNoInputReplyCallback callback) - { - AssertStarted(); - IntPtr stringWrapper = llmlib.StringWrapper_Construct(); - await Task.Run(() => callback(LLMObject, stringWrapper)); - string result = llmlib?.GetStringWrapperResult(stringWrapper); - llmlib?.StringWrapper_Delete(stringWrapper); - CheckLLMStatus(); - return result; - } - - async Task LLMReply(LLMReplyCallback callback, string json) - { - AssertStarted(); - IntPtr stringWrapper = llmlib.StringWrapper_Construct(); - await Task.Run(() => callback(LLMObject, json, stringWrapper)); - string result = llmlib?.GetStringWrapperResult(stringWrapper); - llmlib?.StringWrapper_Delete(stringWrapper); - CheckLLMStatus(); - return result; + llmService.LoraWeight(loras); } /// @@ -674,14 +587,10 @@ async Task LLMReply(LLMReplyCallback callback, string json) /// /// json request containing the query /// tokenisation result - public async Task Tokenize(string json) + public List Tokenize(string content) { AssertStarted(); - LLMReplyCallback callback = (IntPtr LLMObject, string jsonData, IntPtr strWrapper) => - { - llmlib.LLM_Tokenize(LLMObject, jsonData, strWrapper); - }; - return await LLMReply(callback, json); + return llmService.Tokenize(content); } /// @@ -689,14 +598,10 @@ public async Task Tokenize(string json) /// /// json request containing the query /// detokenisation result - public async Task Detokenize(string json) + public string Detokenize(List tokens) { AssertStarted(); - LLMReplyCallback callback = (IntPtr LLMObject, string jsonData, IntPtr strWrapper) => - { - llmlib.LLM_Detokenize(LLMObject, jsonData, strWrapper); - }; - return await LLMReply(callback, json); + return llmService.Detokenize(tokens); } /// @@ -704,56 +609,31 @@ public async Task Detokenize(string json) /// /// json request containing the query /// embeddings result - public async Task Embeddings(string json) + public List Embeddings(string content) { AssertStarted(); - LLMReplyCallback callback = (IntPtr LLMObject, string jsonData, IntPtr strWrapper) => - { - llmlib.LLM_Embeddings(LLMObject, jsonData, strWrapper); - }; - return await LLMReply(callback, json); + return llmService.Embeddings(content); } /// - /// Sets the lora scale, only works after the LLM service has started + /// Gets a list of the lora adapters /// - /// switch result - public void ApplyLoras() + /// list of lara adapters + public List ListLoras() { - LoraWeightRequestList loraWeightRequest = new LoraWeightRequestList(); - loraWeightRequest.loraWeights = new List(); - float[] weights = loraManager.GetWeights(); - if (weights.Length == 0) return; - for (int i = 0; i < weights.Length; i++) - { - loraWeightRequest.loraWeights.Add(new LoraWeightRequest() { id = i, scale = weights[i] }); - } - - string json = JsonUtility.ToJson(loraWeightRequest); - int startIndex = json.IndexOf("["); - int endIndex = json.LastIndexOf("]") + 1; - json = json.Substring(startIndex, endIndex - startIndex); - - IntPtr stringWrapper = llmlib.StringWrapper_Construct(); - llmlib.LLM_LoraWeight(LLMObject, json, stringWrapper); - llmlib.StringWrapper_Delete(stringWrapper); + AssertStarted(); + return llmService.LoraList(); } /// - /// Gets a list of the lora adapters + /// Allows to save / restore the state of a slot /// - /// list of lara adapters - public async Task> ListLoras() + /// json request containing the query + /// slot result + public string SaveSlot(int idSlot, string filepath) { AssertStarted(); - LLMNoInputReplyCallback callback = (IntPtr LLMObject, IntPtr strWrapper) => - { - llmlib.LLM_LoraList(LLMObject, strWrapper); - }; - string json = await LLMNoInputReply(callback); - if (String.IsNullOrEmpty(json)) return null; - LoraWeightResultList loraRequest = JsonUtility.FromJson("{\"loraWeights\": " + json + "}"); - return loraRequest.loraWeights; + return llmService.SaveSlot(idSlot, filepath); } /// @@ -761,14 +641,10 @@ public async Task> ListLoras() /// /// json request containing the query /// slot result - public async Task Slot(string json) + public string LoadSlot(int idSlot, string filepath) { AssertStarted(); - LLMReplyCallback callback = (IntPtr LLMObject, string jsonData, IntPtr strWrapper) => - { - llmlib.LLM_Slot(LLMObject, jsonData, strWrapper); - }; - return await LLMReply(callback, json); + return llmService.LoadSlot(idSlot, filepath); } /// @@ -777,18 +653,16 @@ public async Task Slot(string json) /// json request containing the query /// callback function to call with intermediate responses /// completion result - public async Task Completion(string json, Callback streamCallback = null) + public string Completion(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) { AssertStarted(); - if (streamCallback == null) streamCallback = (string s) => { }; - StreamWrapper streamWrapper = ConstructStreamWrapper(streamCallback); - await Task.Run(() => llmlib.LLM_Completion(LLMObject, json, streamWrapper.GetStringWrapper())); - if (!started) return null; - streamWrapper.Update(); - string result = streamWrapper.GetString(); - DestroyStreamWrapper(streamWrapper); - CheckLLMStatus(); - return result; + return llmService.Completion(prompt, streamCallback, id_slot); + } + + public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) + { + AssertStarted(); + return await llmService.CompletionAsync(prompt, streamCallback, id_slot); } /// @@ -798,8 +672,7 @@ public async Task Completion(string json, Callback streamCallbac public void CancelRequest(int id_slot) { AssertStarted(); - llmlib?.LLM_Cancel(LLMObject, id_slot); - CheckLLMStatus(); + llmService.Cancel(id_slot); } /// @@ -808,32 +681,27 @@ public void CancelRequest(int id_slot) public void Destroy() { lock (staticLock) - lock (startLock) + { + try { - try + if (llmlib != null) { - if (llmlib != null) + if (llmService != null) { - if (LLMObject != IntPtr.Zero) - { - llmlib.LLM_Stop(LLMObject); - if (remote) llmlib.LLM_StopServer(LLMObject); - StopLogging(); - llmThread?.Join(); - llmlib.LLM_Delete(LLMObject); - LLMObject = IntPtr.Zero; - } - llmlib.Destroy(); - llmlib = null; + Debug.Log("stopping"); + llmService.Dispose(); + Debug.Log("Dispose"); } - started = false; - failed = false; - } - catch (Exception e) - { - LLMUnitySetup.LogError(e.Message); + llmlib = null; } + started = false; + failed = false; } + catch (Exception e) + { + LLMUnitySetup.LogError(e.Message); + } + } } /// @@ -846,4 +714,19 @@ public void OnDestroy() LLMManager.Unregister(this); } } + + + public class LlamaLibUnity : UndreamAI.LlamaLib.LlamaLib + { + public LlamaLibUnity(bool gpu = false) : base(gpu) {} + + public override string FindLibrary(string libraryName) + { + string lookupDir = Path.Combine(LLMUnitySetup.libraryPath, GetPlatform(), "native"); + string libraryPath = Path.Combine(lookupDir, libraryName); + if (File.Exists(libraryPath)) return libraryPath; + + throw new System.Exception($"Library {libraryName} not found!"); + } + } } diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 68463514..910c3dda 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -399,10 +399,10 @@ public override async Task Tests() { await base.Tests(); TestModelPaths(); - await TestLoraWeight(); + TestLoraWeight(); loraWeight = 0.6f; llm.SetLoraWeight(loraNameLLManager, loraWeight); - await TestLoraWeight(); + TestLoraWeight(); } public void TestModelPaths() @@ -411,10 +411,10 @@ public void TestModelPaths() Assert.AreEqual(llm.lora, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(loraUrl).Split("?")[0]).Replace('\\', '/')); } - public async Task TestLoraWeight() + public void TestLoraWeight() { - List loras = await llm.ListLoras(); - Assert.AreEqual(loras[0].scale, loraWeight); + List loras = llm.ListLoras(); + Assert.AreEqual(loras[0].Scale, loraWeight); } } From 00a76ec1ead216dd0a2da07807b42d640c3da9e2 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 15 Aug 2025 04:11:41 +0300 Subject: [PATCH 06/69] add NewtonSoft JSON dependency --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index c35b1392..0dea1d41 100644 --- a/package.json +++ b/package.json @@ -61,6 +61,9 @@ "path": "Samples~/KnowledgeBaseGame" } ], + "dependencies": { + "com.unity.nuget.newtonsoft-json": "3.0.2" + }, "author": { "name": "Undream AI", "email": "hello@undream.ai", From bd1ec6dfa7de2d7d95c435ca17c323bbdfd58817 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 15 Aug 2025 04:12:12 +0300 Subject: [PATCH 07/69] add LlamaLib --- Runtime/LlamaLib.meta | 8 + Runtime/LlamaLib/LLM.cs | 422 ++++++++++++++ Runtime/LlamaLib/LLM.cs.meta | 11 + Runtime/LlamaLib/LLMAgent.cs | 300 ++++++++++ Runtime/LlamaLib/LLMAgent.cs.meta | 11 + Runtime/LlamaLib/LLMClient.cs | 49 ++ Runtime/LlamaLib/LLMClient.cs.meta | 11 + Runtime/LlamaLib/LLMService.cs | 130 +++++ Runtime/LlamaLib/LLMService.cs.meta | 11 + Runtime/LlamaLib/LibraryLoader.cs | 221 +++++++ Runtime/LlamaLib/LibraryLoader.cs.meta | 11 + Runtime/LlamaLib/LlamaLib.cs | 769 +++++++++++++++++++++++++ Runtime/LlamaLib/LlamaLib.cs.meta | 11 + 13 files changed, 1965 insertions(+) create mode 100644 Runtime/LlamaLib.meta create mode 100644 Runtime/LlamaLib/LLM.cs create mode 100644 Runtime/LlamaLib/LLM.cs.meta create mode 100644 Runtime/LlamaLib/LLMAgent.cs create mode 100644 Runtime/LlamaLib/LLMAgent.cs.meta create mode 100644 Runtime/LlamaLib/LLMClient.cs create mode 100644 Runtime/LlamaLib/LLMClient.cs.meta create mode 100644 Runtime/LlamaLib/LLMService.cs create mode 100644 Runtime/LlamaLib/LLMService.cs.meta create mode 100644 Runtime/LlamaLib/LibraryLoader.cs create mode 100644 Runtime/LlamaLib/LibraryLoader.cs.meta create mode 100644 Runtime/LlamaLib/LlamaLib.cs create mode 100644 Runtime/LlamaLib/LlamaLib.cs.meta diff --git a/Runtime/LlamaLib.meta b/Runtime/LlamaLib.meta new file mode 100644 index 00000000..abad3160 --- /dev/null +++ b/Runtime/LlamaLib.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d41736301318069f486b450daff6db61 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs new file mode 100644 index 00000000..304df8a0 --- /dev/null +++ b/Runtime/LlamaLib/LLM.cs @@ -0,0 +1,422 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; + +namespace UndreamAI.LlamaLib +{ + // Data structures for LoRA operations + public struct LoraIdScale + { + public int Id { get; set; } + public float Scale { get; set; } + + public LoraIdScale(int id, float scale) + { + Id = id; + Scale = scale; + } + } + + public struct LoraIdScalePath + { + public int Id { get; set; } + public float Scale { get; set; } + public string Path { get; set; } + + public LoraIdScalePath(int id, float scale, string path) + { + Id = id; + Scale = scale; + Path = path; + } + } + + // Base LLM class + public abstract class LLM : IDisposable + { + public LlamaLib llamaLib = null; + public IntPtr llm = IntPtr.Zero; + protected readonly object _disposeLock = new object(); + public bool disposed = false; + + protected LLM() {} + + protected LLM(LlamaLib llamaLibInstance) + { + llamaLib = llamaLibInstance ?? throw new ArgumentNullException(nameof(llamaLibInstance)); + } + + public static void Debug(int debugLevel) + { + LlamaLib.Debug(debugLevel); + } + + public static void LoggingCallback(LlamaLib.CharArrayCallback callback) + { + LlamaLib.LoggingCallback(callback); + } + + public static void LoggingStop() + { + LlamaLib.LoggingStop(); + } + + protected void CheckLlamaLib() + { + if (disposed) throw new ObjectDisposedException(GetType().Name); + if (llamaLib == null) throw new InvalidOperationException("LlamaLib instance is not initialized"); + if (llm == IntPtr.Zero) throw new InvalidOperationException("LLM instance is not initialized"); + if (llamaLib.LLM_Status_Code() != 0) + { + string status_msg = Marshal.PtrToStringAnsi(llamaLib.LLM_Status_Message()) ?? string.Empty; + throw new AccessViolationException(status_msg); + } + } + + public virtual void Dispose() {} + + ~LLM() + { + Dispose(); + } + + public string GetTemplate() + { + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Get_Template(llm); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public string ApplyTemplate(JArray messages = null) + { + if (messages == null) + throw new ArgumentNullException(nameof(messages)); + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Apply_Template(llm, messages.ToString()); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public List Tokenize(string content) + { + if (string.IsNullOrEmpty(content)) + throw new ArgumentNullException(nameof(content)); + + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Tokenize(llm, content); + string resultStr = Marshal.PtrToStringAnsi(result) ?? string.Empty; + List ret = new List(); + try + { + JArray json = JArray.Parse(resultStr); + ret = json?.ToObject>(); + } + catch {} + return ret; + } + + public string Detokenize(List tokens) + { + if (tokens == null) + throw new ArgumentNullException(nameof(tokens)); + + CheckLlamaLib(); + JArray tokensJSON = JArray.FromObject(tokens); + IntPtr result = llamaLib.LLM_Detokenize(llm, tokensJSON.ToString()); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public string Detokenize(int[] tokens) + { + if (tokens == null) + throw new ArgumentNullException(nameof(tokens)); + return Detokenize(new List(tokens)); + } + + public List Embeddings(string content) + { + if (string.IsNullOrEmpty(content)) + throw new ArgumentNullException(nameof(content)); + + CheckLlamaLib(); + + IntPtr result = llamaLib.LLM_Embeddings(llm, content); + string resultStr = Marshal.PtrToStringAnsi(result) ?? string.Empty; + + List ret = new List(); + try + { + JArray json = JArray.Parse(resultStr); + ret = json?.ToObject>(); + } + catch {} + return ret; + } + + public void SetCompletionParameters(JObject parameters = null) + { + CheckLlamaLib(); + llamaLib.LLM_Set_Completion_Parameters(llm, parameters.ToString()); + } + + public JObject GetCompletionParameters() + { + CheckLlamaLib(); + JObject parameters = new JObject(); + IntPtr result = llamaLib.LLM_Get_Completion_Parameters(llm); + string parametersString = Marshal.PtrToStringAnsi(result) ?? "{}"; + try + { + parameters = JObject.Parse(parametersString); + } + catch {} + return parameters; + } + + public void SetGrammar(string grammar) + { + CheckLlamaLib(); + llamaLib.LLM_Set_Grammar(llm, grammar); + } + + public string GetGrammar() + { + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Get_Grammar(llm); + return Marshal.PtrToStringAnsi(result) ?? ""; + } + + public void CheckCompletionInternal(string prompt) + { + if (string.IsNullOrEmpty(prompt)) + throw new ArgumentNullException(nameof(prompt)); + CheckLlamaLib(); + } + + public string CompletionInternal(string prompt, LlamaLib.CharArrayCallback callback, int idSlot) + { + IntPtr result; + result = llamaLib.LLM_Completion(llm, prompt, callback, idSlot); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public string Completion(string prompt, LlamaLib.CharArrayCallback callback = null, int idSlot = -1) + { + CheckCompletionInternal(prompt); + return CompletionInternal(prompt, callback, idSlot); + } + + public async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, int idSlot = -1) + { + CheckCompletionInternal(prompt); + return await Task.Run(() => CompletionInternal(prompt, callback, idSlot)); + } + } + + // LLMLocal class + public abstract class LLMLocal : LLM + { + protected LLMLocal() : base() {} + + protected LLMLocal(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} + + public string SaveSlot(int idSlot, string filepath) + { + if (string.IsNullOrEmpty(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + IntPtr result = llamaLib.LLM_Save_Slot(llm, idSlot, filepath); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public string LoadSlot(int idSlot, string filepath) + { + if (string.IsNullOrEmpty(filepath) || !File.Exists(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + IntPtr result = llamaLib.LLM_Load_Slot(llm, idSlot, filepath); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public void Cancel(int idSlot) + { + CheckLlamaLib(); + llamaLib.LLM_Cancel(llm, idSlot); + } + } + + // LLMProvider class + public abstract class LLMProvider : LLMLocal + { + protected LLMProvider() : base() {} + + protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} + + + public void SetTemplate(string template) + { + if (string.IsNullOrEmpty(template)) + throw new ArgumentNullException(nameof(template)); + CheckLlamaLib(); + llamaLib.LLM_Set_Template(llm, template); + } + + // LoRA Weight methods + public string BuildLoraWeightJSON(List loras) + { + var jsonArray = new JArray(); + foreach (var lora in loras) + { + jsonArray.Add(new JObject { ["id"] = lora.Id, ["scale"] = lora.Scale }); + } + return jsonArray.ToString(); + } + + public bool LoraWeight(List loras) + { + if (loras == null) + throw new ArgumentNullException(nameof(loras)); + + var lorasJSON = BuildLoraWeightJSON(loras); + return llamaLib.LLM_Lora_Weight(llm, lorasJSON); + } + + public bool LoraWeight(params LoraIdScale[] loras) + { + return LoraWeight(new List(loras)); + } + + // LoRA List methods + public List ParseLoraListJSON(string result) + { + var loras = new List(); + try + { + var jsonArray = JArray.Parse(result); + foreach (var item in jsonArray) + { + int id = item["id"]?.ToObject() ?? -1; + if (id < 0) continue; + loras.Add(new LoraIdScalePath( + id, + item["scale"]?.ToObject() ?? 0.0f, + item["path"]?.ToString() ?? string.Empty + )); + } + } + catch {} + return loras; + } + + public string LoraListJSON() + { + CheckLlamaLib(); + var result = llamaLib.LLM_Lora_List(llm); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public List LoraList() + { + var jsonResult = LoraListJSON(); + return ParseLoraListJSON(jsonResult); + } + + // Server methods + public bool Start() + { + CheckLlamaLib(); + llamaLib.LLM_Start(llm); + return llamaLib.LLM_Started(llm); + } + + public async Task StartAsync() + { + CheckLlamaLib(); + return await Task.Run(() => + { + llamaLib.LLM_Start(llm); + return llamaLib.LLM_Started(llm); + }); + } + + public bool Started() + { + CheckLlamaLib(); + return llamaLib.LLM_Started(llm); + } + + public void Stop() + { + CheckLlamaLib(); + llamaLib.LLM_Stop(llm); + } + + public void StartServer(string host = "0.0.0.0", int port = -1, string apiKey = "") + { + CheckLlamaLib(); + if (string.IsNullOrEmpty(host)) + host = "0.0.0.0"; + + llamaLib.LLM_Start_Server(llm, host, port, apiKey ?? string.Empty); + } + + public void StopServer() + { + CheckLlamaLib(); + llamaLib.LLM_Stop_Server(llm); + } + + public void JoinService() + { + CheckLlamaLib(); + llamaLib.LLM_Join_Service(llm); + } + + public void JoinServer() + { + CheckLlamaLib(); + llamaLib.LLM_Join_Server(llm); + } + + public void SetSSL(string sslCert, string sslKey) + { + if (string.IsNullOrEmpty(sslCert)) + throw new ArgumentNullException(nameof(sslCert)); + if (string.IsNullOrEmpty(sslKey)) + throw new ArgumentNullException(nameof(sslKey)); + + CheckLlamaLib(); + llamaLib.LLM_Set_SSL(llm, sslCert, sslKey); + } + + public int EmbeddingSize() + { + CheckLlamaLib(); + return llamaLib.LLM_Embedding_Size(llm); + } + + public override void Dispose() + { + lock (_disposeLock) + { + if (!disposed) + { + if (llm != IntPtr.Zero && llamaLib != null) + { + try + { + llamaLib.LLM_Delete(llm); + } + catch (Exception) {} + } + llamaLib?.Dispose(); + llamaLib = null; + llm = IntPtr.Zero; + } + disposed = true; + } + } + } +} diff --git a/Runtime/LlamaLib/LLM.cs.meta b/Runtime/LlamaLib/LLM.cs.meta new file mode 100644 index 00000000..46805ab9 --- /dev/null +++ b/Runtime/LlamaLib/LLM.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4c5139afa9c5c83568c0b622b0863a72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs new file mode 100644 index 00000000..958272b1 --- /dev/null +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -0,0 +1,300 @@ +using System; +using System.IO; +using System.Collections.Generic; +using System.Runtime.InteropServices; +using System.Threading.Tasks; +using Newtonsoft.Json.Linq; + +namespace UndreamAI.LlamaLib +{ + // Data structure for chat messages + public struct ChatMessage + { + public string Role { get; set; } + public string Content { get; set; } + + public ChatMessage(string role, string content) + { + Role = role; + Content = content; + } + + public JObject ToJson() + { + return new JObject + { + ["role"] = Role, + ["content"] = Content + }; + } + + public static ChatMessage FromJson(JObject json) + { + return new ChatMessage( + json["role"]?.ToString() ?? string.Empty, + json["content"]?.ToString() ?? string.Empty + ); + } + } + + // LLMAgent class + public class LLMAgent : LLMLocal + { + private LLMLocal llmBase; + + public LLMAgent(LLMLocal _llm, string _systemPrompt = "", string _userRole = "user", string _assistantRole = "assistant") + { + if (_llm == null) + throw new ArgumentNullException(nameof(_llm)); + if (_llm.disposed) + throw new ObjectDisposedException(nameof(_llm)); + + llmBase = _llm; + llamaLib = llmBase.llamaLib; + + llm = llamaLib.LLMAgent_Construct(llmBase.llm, _systemPrompt ?? "", _userRole ?? "user", _assistantRole ?? "assistant"); + if (llm == IntPtr.Zero) throw new InvalidOperationException("Failed to create LLMAgent"); + } + + // Properties + public int SlotId + { + get + { + CheckLlamaLib(); + return llamaLib.LLMAgent_Get_Slot(llm); + } + set + { + CheckLlamaLib(); + llamaLib.LLMAgent_Set_Slot(llm, value); + } + } + + public string UserRole + { + get + { + CheckLlamaLib(); + return Marshal.PtrToStringAnsi(llamaLib.LLMAgent_Get_User_Role(llm)) ?? ""; + } + set + { + CheckLlamaLib(); + llamaLib.LLMAgent_Set_User_Role(llm, value); + } + } + + public string AssistantRole + { + get + { + CheckLlamaLib(); + return Marshal.PtrToStringAnsi(llamaLib.LLMAgent_Get_Assistant_Role(llm)) ?? ""; + } + set + { + CheckLlamaLib(); + llamaLib.LLMAgent_Set_Assistant_Role(llm, value); + } + } + + public string SystemPrompt + { + get + { + CheckLlamaLib(); + return Marshal.PtrToStringAnsi(llamaLib.LLMAgent_Get_System_Prompt(llm)) ?? ""; + } + set + { + CheckLlamaLib(); + llamaLib.LLMAgent_Set_System_Prompt(llm, value); + } + } + + // History management + public JArray History + { + get + { + CheckLlamaLib(); + IntPtr result = llamaLib.LLMAgent_Get_History(llm); + string historyStr = Marshal.PtrToStringAnsi(result) ?? "[]"; + try + { + return JArray.Parse(historyStr); + } + catch + { + return new JArray(); + } + } + set + { + CheckLlamaLib(); + string historyJson = value?.ToString() ?? "[]"; + llamaLib.LLMAgent_Set_History(llm, historyJson); + } + } + + public List GetHistory() + { + var history = History; + var messages = new List(); + + try + { + foreach (var item in history) + { + if (item is JObject messageObj) + { + messages.Add(ChatMessage.FromJson(messageObj)); + } + } + } + catch { } + + return messages; + } + + public void SetHistory(List messages) + { + if (messages == null) + throw new ArgumentNullException(nameof(messages)); + + var historyArray = new JArray(); + foreach (var message in messages) + { + historyArray.Add(message.ToJson()); + } + History = historyArray; + } + + public void ClearHistory() + { + CheckLlamaLib(); + llamaLib.LLMAgent_Clear_History(llm); + } + + public void AddMessage(string role, string content) + { + CheckLlamaLib(); + llamaLib.LLMAgent_Add_Message(llm, role, content); + } + + public void AddUserMessage(string content) + { + CheckLlamaLib(); + llamaLib.LLMAgent_Add_Message(llm, UserRole, content); + } + + public void AddAssistantMessage(string content) + { + CheckLlamaLib(); + llamaLib.LLMAgent_Add_Message(llm, AssistantRole, content); + } + + public void AddMessage(ChatMessage message) + { + AddMessage(message.Role, message.Content); + } + + public void RemoveLastMessage() + { + CheckLlamaLib(); + llamaLib.LLMAgent_Remove_Last_Message(llm); + } + + public void SaveHistory(string filepath) + { + if (string.IsNullOrEmpty(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + CheckLlamaLib(); + llamaLib.LLMAgent_Save_History(llm, filepath); + } + + public void LoadHistory(string filepath) + { + if (string.IsNullOrEmpty(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + CheckLlamaLib(); + llamaLib.LLMAgent_Load_History(llm, filepath); + } + + public int GetHistorySize() + { + CheckLlamaLib(); + return llamaLib.LLMAgent_Get_History_Size(llm); + } + + // Chat functionality + public string Chat(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false) + { + CheckLlamaLib(); + IntPtr result = llamaLib.LLMAgent_Chat(llm, userPrompt, addToHistory, callback, returnResponseJson); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public async Task ChatAsync(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false) + { + return await Task.Run(() => Chat(userPrompt, addToHistory, callback, returnResponseJson)); + } + + // Override completion methods to use agent-specific implementations + public string Completion(string prompt, LlamaLib.CharArrayCallback callback = null) + { + return Completion(prompt, callback, SlotId); + } + + public async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null) + { + return await Task.Run(() => Completion(prompt, callback)); + } + + public string SaveSlot(string filepath) + { + if (string.IsNullOrEmpty(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Save_Slot(llm, SlotId, filepath); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public string LoadSlot(string filepath) + { + if (string.IsNullOrEmpty(filepath) || !File.Exists(filepath)) + throw new ArgumentNullException(nameof(filepath)); + + CheckLlamaLib(); + IntPtr result = llamaLib.LLM_Load_Slot(llm, SlotId, filepath); + return Marshal.PtrToStringAnsi(result) ?? string.Empty; + } + + public void Cancel() + { + CheckLlamaLib(); + llamaLib.LLM_Cancel(llm, SlotId); + } + + + // Override slot-based methods to hide them + private new string SaveSlot(int id_slot, string filepath) + { + return SaveSlot(filepath); + } + + private new string LoadSlot(int id_slot, string filepath) + { + return LoadSlot(filepath); + } + + private new void Cancel(int id_slot) + { + Cancel(); + } + } +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LLMAgent.cs.meta b/Runtime/LlamaLib/LLMAgent.cs.meta new file mode 100644 index 00000000..6af83406 --- /dev/null +++ b/Runtime/LlamaLib/LLMAgent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e046cf547a885a47987b2de08256d023 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LLMClient.cs b/Runtime/LlamaLib/LLMClient.cs new file mode 100644 index 00000000..edc0ab44 --- /dev/null +++ b/Runtime/LlamaLib/LLMClient.cs @@ -0,0 +1,49 @@ +using System; + +namespace UndreamAI.LlamaLib +{ + public class LLMClient : LLMLocal + { + public LLMClient(LLMProvider provider) + { + if (provider.disposed) + throw new ObjectDisposedException(nameof(provider)); + + llamaLib = provider.llamaLib; + llm = CreateClient(provider); + } + + public LLMClient(string url, int port, string apiKey = "") + { + if (string.IsNullOrEmpty(url)) + throw new ArgumentNullException(nameof(url)); + + try + { + llamaLib = new LlamaLib(false); + llm = CreateRemoteClient(url, port, apiKey); + } + catch + { + llamaLib?.Dispose(); + throw; + } + } + + private IntPtr CreateClient(LLMProvider provider) + { + var llm = llamaLib.LLMClient_Construct(provider.llm); + if (llm == IntPtr.Zero) + throw new InvalidOperationException("Failed to create LLMClient"); + return llm; + } + + private IntPtr CreateRemoteClient(string url, int port, string apiKey = "") + { + var llm = llamaLib.LLMClient_Construct_Remote(url, port, apiKey); + if (llm == IntPtr.Zero) + throw new InvalidOperationException($"Failed to create remote LLMClient for {url}:{port}"); + return llm; + } + } +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LLMClient.cs.meta b/Runtime/LlamaLib/LLMClient.cs.meta new file mode 100644 index 00000000..c4aac8b5 --- /dev/null +++ b/Runtime/LlamaLib/LLMClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37ba7749ae9efccc58368375fa8654e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LLMService.cs b/Runtime/LlamaLib/LLMService.cs new file mode 100644 index 00000000..4347023f --- /dev/null +++ b/Runtime/LlamaLib/LLMService.cs @@ -0,0 +1,130 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace UndreamAI.LlamaLib +{ + public class LLMService : LLMProvider + { + public LLMService(string modelPath, int numSlots = 1, + int numThreads = -1, int numGpuLayers = 0, + bool flashAttention = false, int contextSize = 4096, + int batchSize = 2048, bool embeddingOnly = false, string[] loraPaths = null) + { + if (string.IsNullOrEmpty(modelPath)) + throw new ArgumentNullException(nameof(modelPath)); + if (!File.Exists(modelPath)) + throw new FileNotFoundException($"Model file not found: {modelPath}"); + + try + { + llamaLib = new LlamaLib(numGpuLayers > 0); + llm = CreateLLM( + llamaLib, + modelPath, numSlots, numThreads, numGpuLayers, + flashAttention, contextSize, batchSize, embeddingOnly, loraPaths); + } + catch + { + llamaLib?.Dispose(); + throw; + } + } + + public LLMService(LlamaLib llamaLibInstance, IntPtr llmInstance) + { + if (llamaLibInstance == null) throw new ArgumentNullException(nameof(llamaLibInstance)); + if (llmInstance == IntPtr.Zero) throw new ArgumentNullException(nameof(llmInstance)); + llamaLib = llamaLibInstance; + llm = llmInstance; + } + + public static LLMService FromCommand(string paramsString) + { + if (string.IsNullOrEmpty(paramsString)) + throw new ArgumentNullException(nameof(paramsString)); + + LlamaLib llamaLibInstance = null; + IntPtr llmInstance = IntPtr.Zero; + try + { + llamaLibInstance = new LlamaLib(LlamaLib.Has_GPU_Layers(paramsString)); + llmInstance = llamaLibInstance.LLMService_From_Command(paramsString); + } + catch + { + llamaLibInstance?.Dispose(); + throw; + } + return new LLMService(llamaLibInstance, llmInstance); + } + + public static IntPtr CreateLLM( + LlamaLib llamaLib, + string modelPath, int numSlots, int numThreads, + int numGpuLayers, bool flashAttention, int contextSize, int batchSize, + bool embeddingOnly, string[] loraPaths) + { + IntPtr loraPathsPtr = IntPtr.Zero; + int loraPathCount = 0; + + if (loraPaths != null && loraPaths.Length > 0) + { + loraPathCount = loraPaths.Length; + // Allocate array of string pointers + loraPathsPtr = Marshal.AllocHGlobal(IntPtr.Size * loraPathCount); + + try + { + for (int i = 0; i < loraPathCount; i++) + { + if (string.IsNullOrEmpty(loraPaths[i])) + throw new ArgumentException($"Lora path at index {i} is null or empty"); + + IntPtr stringPtr = Marshal.StringToHGlobalAnsi(loraPaths[i]); + Marshal.WriteIntPtr(loraPathsPtr, i * IntPtr.Size, stringPtr); + } + } + catch + { + // Clean up if allocation failed + for (int i = 0; i < loraPathCount; i++) + { + IntPtr stringPtr = Marshal.ReadIntPtr(loraPathsPtr, i * IntPtr.Size); + if (stringPtr != IntPtr.Zero) + Marshal.FreeHGlobal(stringPtr); + } + Marshal.FreeHGlobal(loraPathsPtr); + throw; + } + } + + try + { + var llm = llamaLib.LLMService_Construct( + modelPath, numSlots, numThreads, numGpuLayers, + flashAttention, contextSize, batchSize, embeddingOnly, + loraPathCount, loraPathsPtr); + + if (llm == IntPtr.Zero) + throw new InvalidOperationException("Failed to create LLMService"); + + return llm; + } + finally + { + // Clean up allocated strings + if (loraPathsPtr != IntPtr.Zero) + { + for (int i = 0; i < loraPathCount; i++) + { + IntPtr stringPtr = Marshal.ReadIntPtr(loraPathsPtr, i * IntPtr.Size); + if (stringPtr != IntPtr.Zero) + Marshal.FreeHGlobal(stringPtr); + } + Marshal.FreeHGlobal(loraPathsPtr); + } + } + } + } +} diff --git a/Runtime/LlamaLib/LLMService.cs.meta b/Runtime/LlamaLib/LLMService.cs.meta new file mode 100644 index 00000000..e45f2e73 --- /dev/null +++ b/Runtime/LlamaLib/LLMService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72670472c9b43749c9035c00bb020e52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LibraryLoader.cs b/Runtime/LlamaLib/LibraryLoader.cs new file mode 100644 index 00000000..93b3a3f4 --- /dev/null +++ b/Runtime/LlamaLib/LibraryLoader.cs @@ -0,0 +1,221 @@ +/// @file +/// @brief File implementing the LlamaLib library loader +/// \cond HIDE +using System; +using System.Runtime.InteropServices; + +namespace UndreamAI.LlamaLib +{ + /// @ingroup utils + /// + /// Class implementing the LlamaLib library loader + /// Adapted from SkiaForUnity: + /// https://github.com/ammariqais/SkiaForUnity/blob/f43322218c736d1c41f3a3df9355b90db4259a07/SkiaUnity/Assets/SkiaSharp/SkiaSharp-Bindings/SkiaSharp.HarfBuzz.Shared/HarfBuzzSharp.Shared/LibraryLoader.cs + /// + static class LibraryLoader + { + /// + /// Allows to retrieve a function delegate for the library + /// + /// type to cast the function + /// library handle + /// function name + /// function delegate + public static T GetSymbolDelegate(IntPtr library, string name) where T : Delegate + { + var symbol = GetSymbol(library, name); + if (symbol == IntPtr.Zero) + throw new EntryPointNotFoundException($"Unable to load symbol '{name}'."); + + return Marshal.GetDelegateForFunctionPointer(symbol); + } + /// + /// Loads the provided library in a cross-platform manner + /// + /// library path + /// library handle + public static IntPtr LoadLibrary(string libraryPath) + { + if (string.IsNullOrEmpty(libraryPath)) + throw new ArgumentNullException(nameof(libraryPath)); + +#if ANDROID || IOS || VISIONOS + return Mobile.dlopen(libraryPath); +#else + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + return Win32.LoadLibrary(libraryPath); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + return Linux.dlopen(libraryPath); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + return Mac.dlopen(libraryPath); + else throw new PlatformNotSupportedException($"Current platform is unknown, unable to load library '{libraryPath}'."); +#endif + } + + /// + /// Retrieve a function delegate for the library in a cross-platform manner + /// + /// library handle + /// function name + /// function handle + public static IntPtr GetSymbol(IntPtr library, string symbolName) + { + if (string.IsNullOrEmpty(symbolName)) + throw new ArgumentNullException(nameof(symbolName)); + +#if ANDROID || IOS || VISIONOS + return Mobile.dlsym(library, symbolName); +#else + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + return Win32.GetProcAddress(library, symbolName); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + return Linux.dlsym(library, symbolName); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + return Mac.dlsym(library, symbolName); + else throw new PlatformNotSupportedException($"Current platform is unknown, unable to load symbol '{symbolName}' from library {library}."); +#endif + } + + /// + /// Frees up the library + /// + /// library handle + public static void FreeLibrary(IntPtr library) + { + if (library == IntPtr.Zero) + return; + +#if ANDROID || IOS || VISIONOS + Mobile.dlclose(library); +#else + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + Win32.FreeLibrary(library); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + Linux.dlclose(library); + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + Mac.dlclose(library); + else throw new PlatformNotSupportedException($"Current platform is unknown, unable to close library '{library}'."); +#endif + } + + private static class Mac + { + private const string SystemLibrary = "/usr/lib/libSystem.dylib"; + + private const int RTLD_LAZY = 1; + private const int RTLD_NOW = 2; + + public static IntPtr dlopen(string path, bool lazy = true) => + dlopen(path, lazy ? RTLD_LAZY : RTLD_NOW); + + [DllImport(SystemLibrary)] + public static extern IntPtr dlopen(string path, int mode); + + [DllImport(SystemLibrary)] + public static extern IntPtr dlsym(IntPtr handle, string symbol); + + [DllImport(SystemLibrary)] + public static extern void dlclose(IntPtr handle); + } + + private static class Linux + { + private const string SystemLibrary = "libdl.so"; + private const string SystemLibrary2 = "libdl.so.2"; // newer Linux distros use this + + private const int RTLD_LAZY = 1; + private const int RTLD_NOW = 2; + + private static bool UseSystemLibrary2 = true; + + public static IntPtr dlopen(string path, bool lazy = true) + { + try + { + return dlopen2(path, lazy ? RTLD_LAZY : RTLD_NOW); + } + catch (DllNotFoundException) + { + UseSystemLibrary2 = false; + return dlopen1(path, lazy ? RTLD_LAZY : RTLD_NOW); + } + } + + public static IntPtr dlsym(IntPtr handle, string symbol) + { + return UseSystemLibrary2 ? dlsym2(handle, symbol) : dlsym1(handle, symbol); + } + + public static void dlclose(IntPtr handle) + { + if (UseSystemLibrary2) + dlclose2(handle); + else + dlclose1(handle); + } + + [DllImport(SystemLibrary, EntryPoint = "dlopen")] + private static extern IntPtr dlopen1(string path, int mode); + + [DllImport(SystemLibrary, EntryPoint = "dlsym")] + private static extern IntPtr dlsym1(IntPtr handle, string symbol); + + [DllImport(SystemLibrary, EntryPoint = "dlclose")] + private static extern void dlclose1(IntPtr handle); + + [DllImport(SystemLibrary2, EntryPoint = "dlopen")] + private static extern IntPtr dlopen2(string path, int mode); + + [DllImport(SystemLibrary2, EntryPoint = "dlsym")] + private static extern IntPtr dlsym2(IntPtr handle, string symbol); + + [DllImport(SystemLibrary2, EntryPoint = "dlclose")] + private static extern void dlclose2(IntPtr handle); + } + + private static class Win32 + { + private const string SystemLibrary = "Kernel32.dll"; + + [DllImport(SystemLibrary, SetLastError = true, CharSet = CharSet.Ansi)] + public static extern IntPtr LoadLibrary(string lpFileName); + + [DllImport(SystemLibrary, SetLastError = true, CharSet = CharSet.Ansi)] + public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName); + + [DllImport(SystemLibrary, SetLastError = true)] + public static extern bool FreeLibrary(IntPtr hModule); + } + + private static class Mobile + { + public static IntPtr dlopen(string path) => dlopen(path, 1); + +#if ANDROID || IOS || VISIONOS + [DllImport("__Internal")] + public static extern IntPtr dlopen(string filename, int flags); + + [DllImport("__Internal")] + public static extern IntPtr dlsym(IntPtr handle, string symbol); + + [DllImport("__Internal")] + public static extern int dlclose(IntPtr handle); +#else + public static IntPtr dlopen(string filename, int flags) + { + return IntPtr.Zero; + } + + public static IntPtr dlsym(IntPtr handle, string symbol) + { + return IntPtr.Zero; + } + + public static int dlclose(IntPtr handle) + { + return 0; + } +#endif + } + } +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LibraryLoader.cs.meta b/Runtime/LlamaLib/LibraryLoader.cs.meta new file mode 100644 index 00000000..7ea28b9c --- /dev/null +++ b/Runtime/LlamaLib/LibraryLoader.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97d9c4e088cf8d3f1a29b468daff47b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs new file mode 100644 index 00000000..fbec7625 --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -0,0 +1,769 @@ +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Reflection; +using System.Collections.Generic; + +namespace UndreamAI.LlamaLib +{ + public class LlamaLib + { + public string architecture { get; private set; } + + // Function delegates + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void CharArrayCallback([MarshalAs(UnmanagedType.LPStr)] string charArray); + +#if ANDROID || IOS || VISIONOS + // Static P/Invoke declarations for mobile platforms +#if ANDROID_ARM64 + public const string DllName = "libllamalib_android-arm64"; +#elif ANDROID_X64 + public const string DllName = "libllamalib_android-x64"; +#else + public const string DllName = "__Internal"; +#endif + + public LlamaLib(bool gpu = false) + { +#if ANDROID_ARM64 + architecture = "android-arm64"; +#elif ANDROID_X64 + architecture = "android-x64"; +#elif IOS + architecture = "ios-arm64"; +#elif VISIONOS + architecture = "visionos-arm64"; +#endif + } + + // Base LLM functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Debug")] + public static extern void LLM_Debug_Static(int debugLevel); + public static void Debug(int debugLevel) => LLM_Debug_Static(debugLevel); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Logging_Callback")] + public static extern void LLM_Logging_Callback_Static(CharArrayCallback callback); + public static void LoggingCallback(CharArrayCallback callback) => LLM_Logging_Callback_Static(callback); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Logging_Stop")] + public static extern void LLM_Logging_Stop_Static(); + public static void LoggingStop() => LLM_Logging_Stop_Static(); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Template")] + public static extern IntPtr LLM_Get_Template_Static(IntPtr llm); + public IntPtr LLM_Get_Template(IntPtr llm) => LLM_Get_Template_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Apply_Template")] + public static extern IntPtr LLM_Apply_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); + public IntPtr LLM_Apply_Template(IntPtr llm, string messages_as_json) => LLM_Apply_Template_Static(llm, messages_as_json); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Tokenize")] + public static extern IntPtr LLM_Tokenize_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + public IntPtr LLM_Tokenize(IntPtr llm, string query) => LlamaLib.LLM_Tokenize_Static(llm, query); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Detokenize")] + public static extern IntPtr LLM_Detokenize_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string tokens_as_json); + public IntPtr LLM_Detokenize(IntPtr llm, string tokens_as_json) => LlamaLib.LLM_Detokenize_Static(llm, tokens_as_json); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Embeddings")] + public static extern IntPtr LLM_Embeddings_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + public IntPtr LLM_Embeddings(IntPtr llm, string query) => LlamaLib.LLM_Embeddings_Static(llm, query); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Completion")] + public static extern IntPtr LLM_Completion_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false); + public IntPtr LLM_Completion(IntPtr llm, string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false) => LlamaLib.LLM_Completion_Static(llm, query, callback, id_slot, return_response_json); + + // LLMLocal functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Template")] + public static extern IntPtr LLM_Set_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); + public IntPtr LLM_Set_Template(IntPtr llm, string template) => LLM_Set_Template_Static(llm, template); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Save_Slot")] + public static extern IntPtr LLM_Save_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + public IntPtr LLM_Save_Slot(IntPtr llm, int id_slot, string filepath) => LlamaLib.LLM_Save_Slot_Static(llm, id_slot, filepath); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Load_Slot")] + public static extern IntPtr LLM_Load_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + public IntPtr LLM_Load_Slot(IntPtr llm, int id_slot, string filepath) => LlamaLib.LLM_Load_Slot_Static(llm, id_slot, filepath); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Cancel")] + public static extern void LLM_Cancel_Static(IntPtr llm, int idSlot); + public void LLM_Cancel(IntPtr llm, int idSlot) => LlamaLib.LLM_Cancel_Static(llm, idSlot); + + // LLMProvider functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_Weight")] + public static extern bool LLM_Lora_Weight_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string loras_as_json); + public bool LLM_Lora_Weight(IntPtr llm, string loras_as_json) => LlamaLib.LLM_Lora_Weight_Static(llm, loras_as_json); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_List")] + public static extern IntPtr LLM_Lora_List_Static(IntPtr llm); + public IntPtr LLM_Lora_List(IntPtr llm) => LlamaLib.LLM_Lora_List_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Delete")] + public static extern void LLM_Delete_Static(IntPtr llm); + public void LLM_Delete(IntPtr llm) => LlamaLib.LLM_Delete_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Start")] + public static extern void LLM_Start_Static(IntPtr llm); + public void LLM_Start(IntPtr llm) => LlamaLib.LLM_Start_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Started")] + [return : MarshalAs(UnmanagedType.I1)] + public static extern bool LLM_Started_Static(IntPtr llm); + public bool LLM_Started(IntPtr llm) => LlamaLib.LLM_Started_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Stop")] + public static extern void LLM_Stop_Static(IntPtr llm); + public void LLM_Stop(IntPtr llm) => LlamaLib.LLM_Stop_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Start_Server")] + public static extern void LLM_Start_Server_Static(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string host = "0.0.0.0", + int port = -1, + [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + public void LLM_Start_Server(IntPtr llm, string host = "0.0.0.0", int port = -1, string apiKey = "") => LlamaLib.LLM_Start_Server_Static(llm, host, port, apiKey); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Stop_Server")] + public static extern void LLM_Stop_Server_Static(IntPtr llm); + public void LLM_Stop_Server(IntPtr llm) => LlamaLib.LLM_Stop_Server_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Join_Service")] + public static extern void LLM_Join_Service_Static(IntPtr llm); + public void LLM_Join_Service(IntPtr llm) => LlamaLib.LLM_Join_Service_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Join_Server")] + public static extern void LLM_Join_Server_Static(IntPtr llm); + public void LLM_Join_Server(IntPtr llm) => LlamaLib.LLM_Join_Server_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_SSL")] + public static extern void LLM_Set_SSL_Static(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string sslCert, + [MarshalAs(UnmanagedType.LPStr)] string sslKey); + public void LLM_Set_SSL(IntPtr llm, string sslCert, string sslKey) => LlamaLib.LLM_Set_SSL_Static(llm, sslCert, sslKey); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Status_Code")] + public static extern int LLM_Status_Code_Static(); + public int LLM_Status_Code() => LlamaLib.LLM_Status_Code_Static(); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Status_Message")] + public static extern IntPtr LLM_Status_Message_Static(); + public IntPtr LLM_Status_Message() => LlamaLib.LLM_Status_Message_Static(); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Embedding_Size")] + public static extern int LLM_Embedding_Size_Static(IntPtr llm); + public int LLM_Embedding_Size(IntPtr llm) => LlamaLib.LLM_Embedding_Size_Static(llm); + + // LLMService functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_Construct")] + public static extern IntPtr LLMService_Construct_Static( + [MarshalAs(UnmanagedType.LPStr)] string modelPath, + int numSlots = 1, + int numThreads = -1, + int numGpuLayers = 0, + [MarshalAs(UnmanagedType.I1)] bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default); + public IntPtr LLMService_Construct( + int numSlots = 1, + string modelPath, + int numThreads = -1, + int numGpuLayers = 0, + bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default) + => LlamaLib.LLMService_Construct_Static(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, + contextSize, batchSize, embeddingOnly, loraCount, loraPaths); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_From_Command")] + public static extern IntPtr LLMService_From_Command_Static([MarshalAs(UnmanagedType.LPStr)] string paramsString); + public IntPtr LLMService_From_Command(string paramsString) => LlamaLib.LLMService_From_Command_Static(paramsString); + + // LLMClient functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Construct")] + public static extern IntPtr LLMClient_Construct_Static(IntPtr llm); + public IntPtr LLMClient_Construct(IntPtr llm) => LlamaLib.LLMClient_Construct_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Construct_Remote")] + public static extern IntPtr LLMClient_Construct_Remote_Static( + [MarshalAs(UnmanagedType.LPStr)] string url, + int port, + [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "") => LlamaLib.LLMClient_Construct_Remote_Static(url, port, apiKey); + + // LLMAgent functions + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Construct")] + public static extern IntPtr LLMAgent_Construct_Static(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", + [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", + [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); + public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "", string userRole = "user", string assistantRole = "assistant") + => LLMAgent_Construct_Static(llm, systemPrompt, userRole, assistantRole); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_User_Role")] + public static extern void LLMAgent_Set_User_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); + public void LLMAgent_Set_User_Role(IntPtr llm, string userRole) => LLMAgent_Set_User_Role_Static(llm, userRole); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_User_Role")] + public static extern IntPtr LLMAgent_Get_User_Role_Static(IntPtr llm); + public IntPtr LLMAgent_Get_User_Role(IntPtr llm) => LLMAgent_Get_User_Role_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_Assistant_Role")] + public static extern void LLMAgent_Set_Assistant_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); + public void LLMAgent_Set_Assistant_Role(IntPtr llm, string assistantRole) => LLMAgent_Set_Assistant_Role_Static(llm, assistantRole); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_Assistant_Role")] + public static extern IntPtr LLMAgent_Get_Assistant_Role_Static(IntPtr llm); + public IntPtr LLMAgent_Get_Assistant_Role(IntPtr llm) => LLMAgent_Get_Assistant_Role_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_System_Prompt")] + public static extern void LLMAgent_Set_System_Prompt_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); + public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => LLMAgent_Set_System_Prompt_Static(llm, systemPrompt); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_System_Prompt")] + public static extern IntPtr LLMAgent_Get_System_Prompt_Static(IntPtr llm); + public IntPtr LLMAgent_Get_System_Prompt(IntPtr llm) => LLMAgent_Get_System_Prompt_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Completion_Parameters")] + public static extern void LLM_Set_Completion_Parameters_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string parameters); + public void LLM_Set_Completion_Parameters(IntPtr llm, string parameters) => LLM_Set_Completion_Parameters_Static(llm, parameters); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Completion_Parameters")] + public static extern IntPtr LLM_Get_Completion_Parameters_Static(IntPtr llm); + public IntPtr LLM_Get_Completion_Parameters(IntPtr llm) => LLM_Get_Completion_Parameters_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Grammar")] + public static extern void LLM_Set_Grammar_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string grammar); + public void LLM_Set_Grammar(IntPtr llm, string grammar) => LLM_Set_Grammar_Static(llm, grammar); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Grammar")] + public static extern IntPtr LLM_Get_Grammar_Static(IntPtr llm); + public IntPtr LLM_Get_Grammar(IntPtr llm) => LLM_Get_Grammar_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_Slot")] + public static extern void LLMAgent_Set_Slot_Static(IntPtr llm, int slotId); + public void LLMAgent_Set_Slot(IntPtr llm, int slotId) => LLMAgent_Set_Slot_Static(llm, slotId); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_Slot")] + public static extern IntPtr LLMAgent_Get_Slot_Static(IntPtr llm); + public IntPtr LLMAgent_Get_Slot(IntPtr llm) => LLMAgent_Get_Slot_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Chat")] + public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string userPrompt, + [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, + CharArrayCallback callback = null, + [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); + public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = true, CharArrayCallback callback = null, bool returnResponseJson = false) + => LLMAgent_Chat_Static(llm, userPrompt, addToHistory, callback, returnResponseJson); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Clear_History")] + public static extern void LLMAgent_Clear_History_Static(IntPtr llm); + public void LLMAgent_Clear_History(IntPtr llm) => LLMAgent_Clear_History_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_History")] + public static extern IntPtr LLMAgent_Get_History_Static(IntPtr llm); + public IntPtr LLMAgent_Get_History(IntPtr llm) => LLMAgent_Get_History_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_History")] + public static extern void LLMAgent_Set_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); + public void LLMAgent_Set_History(IntPtr llm, string historyJson) => LLMAgent_Set_History_Static(llm, historyJson); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Add_Message")] + public static extern void LLMAgent_Add_Message_Static(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string role, + [MarshalAs(UnmanagedType.LPStr)] string content); + public void LLMAgent_Add_Message(IntPtr llm, string role, string content) => LLMAgent_Add_Message_Static(llm, role, content); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Remove_Last_Message")] + public static extern void LLMAgent_Remove_Last_Message_Static(IntPtr llm); + public void LLMAgent_Remove_Last_Message(IntPtr llm) => LLMAgent_Remove_Last_Message_Static(llm); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Save_History")] + public static extern void LLMAgent_Save_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + public void LLMAgent_Save_History(IntPtr llm, string filepath) => LLMAgent_Save_History_Static(llm, filepath); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Load_History")] + public static extern void LLMAgent_Load_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + public void LLMAgent_Load_History(IntPtr llm, string filepath) => LLMAgent_Load_History_Static(llm, filepath); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_History_Size")] + public static extern int LLMAgent_Get_History_Size_Static(IntPtr llm); + public int LLMAgent_Get_History_Size(IntPtr llm) => LLMAgent_Get_History_Size_Static(llm); + +#else + // Desktop platform implementation with dynamic loading + private static List instances = new List(); + private static readonly object runtimeLock = new object(); + private static IntPtr runtimeLibraryHandle = IntPtr.Zero; + private IntPtr libraryHandle = IntPtr.Zero; + private static int debugLevelGlobal = 0; + private static CharArrayCallback loggingCallbackGlobal = null; + + private void LoadRuntimeLibrary() + { + lock (runtimeLock) + { + if (runtimeLibraryHandle == IntPtr.Zero) + { + runtimeLibraryHandle = LibraryLoader.LoadLibrary(GetRuntimeLibraryPath()); + Has_GPU_Layers = LibraryLoader.GetSymbolDelegate(runtimeLibraryHandle, "Has_GPU_Layers"); + Available_Architectures = LibraryLoader.GetSymbolDelegate(runtimeLibraryHandle, "Available_Architectures"); + } + } + } + + public LlamaLib(bool gpu = false) + { + LoadRuntimeLibrary(); + LoadLibraries(gpu); + lock (runtimeLock) + { + instances.Add(this); + LLM_Debug(debugLevelGlobal); + if (loggingCallbackGlobal != null) LLM_Logging_Callback(loggingCallbackGlobal); + } + } + + public static string GetPlatform() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + return "linux-x64"; + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + if (RuntimeInformation.ProcessArchitecture == Architecture.X64) + return "osx-x64"; + else + return "osx-arm64"; + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + return "win-x64"; + else throw new ArgumentException("Unknown platform " + RuntimeInformation.OSDescription); + } + + public virtual string FindLibrary(string libraryName) + { + string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + + List lookupDirs = new List(); + lookupDirs.Add(Path.Combine(baseDir, "runtimes", GetPlatform(), "native")); + lookupDirs.Add(baseDir); + + foreach (string lookupDir in lookupDirs) + { + string libraryPath = Path.Combine(lookupDir, libraryName); + if (File.Exists(libraryPath)) return libraryPath; + } + + throw new InvalidOperationException($"Library {libraryName} not found!"); + } + + private string GetRuntimeLibraryPath() + { + string platform = GetPlatform(); + string libName; + if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + libName = "libllamalib_" + platform + "_runtime.so"; + else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + libName = "libllamalib_" + platform + "_runtime.dylib"; + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + libName = "llamalib_" + platform + "_runtime.dll"; + else + throw new ArgumentException("Unknown platform " + RuntimeInformation.OSDescription); + return FindLibrary(libName); + } + + private void LoadLibraries(bool gpu) + { + string architecturesString = Marshal.PtrToStringAnsi(Available_Architectures(gpu)); + if (string.IsNullOrEmpty(architecturesString)) + { + throw new InvalidOperationException("No architectures available for the specified GPU setting."); + } + + string[] libraries = architecturesString.Split(','); + Exception lastException = null; + + foreach (string library in libraries) + { + try + { + string libraryPath = FindLibrary(library.Trim()); + if (debugLevelGlobal > 0) Console.WriteLine("Trying " + libraryPath); + libraryHandle = LibraryLoader.LoadLibrary(libraryPath); + LoadFunctionPointers(); + architecture = library.Trim(); + if (debugLevelGlobal > 0) Console.WriteLine("Successfully loaded: " + libraryPath); + return; + } + catch (Exception ex) + { + if (debugLevelGlobal > 0) Console.WriteLine($"Failed to load library {library}: {ex.Message}."); + lastException = ex; + continue; + } + } + + // If we get here, no library was successfully loaded + throw new InvalidOperationException($"Failed to load any library. Available libraries: {string.Join(", ", libraries)}", lastException); + } + + private void LoadFunctionPointers() + { + LLM_Debug = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Debug"); + LLM_Logging_Callback = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Callback"); + LLM_Logging_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Stop"); + LLM_Get_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Template"); + LLM_Set_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Template"); + LLM_Apply_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Apply_Template"); + LLM_Tokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); + LLM_Detokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Detokenize"); + LLM_Embeddings = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embeddings"); + LLM_Completion = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Completion"); + LLM_Save_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Save_Slot"); + LLM_Load_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Load_Slot"); + LLM_Cancel = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Cancel"); + LLM_Lora_Weight = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_Weight"); + LLM_Lora_List = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_List"); + LLM_Delete = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Delete"); + LLM_Start = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start"); + LLM_Started = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Started"); + LLM_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop"); + LLM_Start_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start_Server"); + LLM_Stop_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop_Server"); + LLM_Join_Service = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Service"); + LLM_Join_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Server"); + LLM_Set_SSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_SSL"); + LLM_Status_Code = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Code"); + LLM_Status_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Message"); + LLM_Embedding_Size = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embedding_Size"); + LLMService_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); + LLMService_From_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); + LLMClient_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); + LLMClient_Construct_Remote = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); + LLMAgent_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Construct"); + LLMAgent_Set_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_User_Role"); + LLMAgent_Get_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_User_Role"); + LLMAgent_Set_Assistant_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Assistant_Role"); + LLMAgent_Get_Assistant_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Assistant_Role"); + LLMAgent_Set_System_Prompt = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_System_Prompt"); + LLMAgent_Get_System_Prompt = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_System_Prompt"); + LLMAgent_Set_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Slot"); + LLMAgent_Get_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Slot"); + LLM_Set_Completion_Parameters = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Completion_Parameters"); + LLM_Get_Completion_Parameters = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Completion_Parameters"); + LLM_Set_Grammar = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Grammar"); + LLM_Get_Grammar = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Grammar"); + LLMAgent_Chat = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Chat"); + LLMAgent_Clear_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Clear_History"); + LLMAgent_Get_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History"); + LLMAgent_Set_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_History"); + LLMAgent_Add_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_Message"); + LLMAgent_Remove_Last_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Remove_Last_Message"); + LLMAgent_Save_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Save_History"); + LLMAgent_Load_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Load_History"); + LLMAgent_Get_History_Size = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History_Size"); + } + + // Delegate definitions for desktop platforms + // Runtime lib + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr Available_Architectures_Delegate([MarshalAs(UnmanagedType.I1)] bool gpu); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool Has_GPU_Layers_Delegate([MarshalAs(UnmanagedType.LPStr)] string command); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Debug_Delegate(int debugLevel); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Logging_Callback_Delegate(CharArrayCallback callback); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Logging_Stop_Delegate(); + + // Main lib + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Get_Template_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Set_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Apply_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Tokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Detokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string tokens_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Embeddings_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Completion_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Save_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Load_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Cancel_Delegate(IntPtr llm, int idSlot); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool LLM_Lora_Weight_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string loras_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Lora_List_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Delete_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Start_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool LLM_Started_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Stop_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Start_Server_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string host = "0.0.0.0", int port = -1, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Stop_Server_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Join_Service_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Join_Server_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string sslCert, [MarshalAs(UnmanagedType.LPStr)] string sslKey); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLM_Status_Code_Delegate(); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Status_Message_Delegate(); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLM_Embedding_Size_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_Construct_Delegate( + [MarshalAs(UnmanagedType.LPStr)] string modelPath, + int numSlots = 1, + int numThreads = -1, + int numGpuLayers = 0, + [MarshalAs(UnmanagedType.I1)] bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_From_Command_Delegate([MarshalAs(UnmanagedType.LPStr)] string paramsString); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMClient_Construct_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMClient_Construct_Remote_Delegate([MarshalAs(UnmanagedType.LPStr)] string url, int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + + // LLMAgent functions + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Construct_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", + [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", + [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_User_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_User_Role_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_Assistant_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_Assistant_Role_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_System_Prompt_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_System_Prompt_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_Grammar_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string grammar); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Get_Grammar_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_Completion_Parameters_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string parameters); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Get_Completion_Parameters_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_Slot_Delegate(IntPtr llm, int slotId); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLMAgent_Get_Slot_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string userPrompt, + [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, + CharArrayCallback callback = null, + [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Clear_History_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_History_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string role, + [MarshalAs(UnmanagedType.LPStr)] string content); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Remove_Last_Message_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Save_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Load_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLMAgent_Get_History_Size_Delegate(IntPtr llm); + + + // Function pointers for desktop platforms + // Runtime lib + public static Available_Architectures_Delegate Available_Architectures; + public static Has_GPU_Layers_Delegate Has_GPU_Layers; + + // Main lib + public LLM_Debug_Delegate LLM_Debug; + public LLM_Logging_Callback_Delegate LLM_Logging_Callback; + public LLM_Logging_Stop_Delegate LLM_Logging_Stop; + public LLM_Get_Template_Delegate LLM_Get_Template; + public LLM_Set_Template_Delegate LLM_Set_Template; + public LLM_Apply_Template_Delegate LLM_Apply_Template; + public LLM_Tokenize_Delegate LLM_Tokenize; + public LLM_Detokenize_Delegate LLM_Detokenize; + public LLM_Embeddings_Delegate LLM_Embeddings; + public LLM_Completion_Delegate LLM_Completion; + public LLM_Save_Slot_Delegate LLM_Save_Slot; + public LLM_Load_Slot_Delegate LLM_Load_Slot; + public LLM_Cancel_Delegate LLM_Cancel; + public LLM_Lora_Weight_Delegate LLM_Lora_Weight; + public LLM_Lora_List_Delegate LLM_Lora_List; + public LLM_Delete_Delegate LLM_Delete; + public LLM_Start_Delegate LLM_Start; + public LLM_Started_Delegate LLM_Started; + public LLM_Stop_Delegate LLM_Stop; + public LLM_Start_Server_Delegate LLM_Start_Server; + public LLM_Stop_Server_Delegate LLM_Stop_Server; + public LLM_Join_Service_Delegate LLM_Join_Service; + public LLM_Join_Server_Delegate LLM_Join_Server; + public LLM_Set_SSL_Delegate LLM_Set_SSL; + public LLM_Status_Code_Delegate LLM_Status_Code; + public LLM_Status_Message_Delegate LLM_Status_Message; + public LLM_Embedding_Size_Delegate LLM_Embedding_Size; + public LLMService_Construct_Delegate LLMService_Construct; + public LLMService_From_Command_Delegate LLMService_From_Command; + public LLMClient_Construct_Delegate LLMClient_Construct; + public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote; + public LLMAgent_Construct_Delegate LLMAgent_Construct; + public LLMAgent_Set_User_Role_Delegate LLMAgent_Set_User_Role; + public LLMAgent_Get_User_Role_Delegate LLMAgent_Get_User_Role; + public LLMAgent_Set_Assistant_Role_Delegate LLMAgent_Set_Assistant_Role; + public LLMAgent_Get_Assistant_Role_Delegate LLMAgent_Get_Assistant_Role; + public LLMAgent_Set_System_Prompt_Delegate LLMAgent_Set_System_Prompt; + public LLMAgent_Get_System_Prompt_Delegate LLMAgent_Get_System_Prompt; + public LLMAgent_Set_Slot_Delegate LLMAgent_Set_Slot; + public LLMAgent_Get_Slot_Delegate LLMAgent_Get_Slot; + public LLM_Set_Completion_Parameters_Delegate LLM_Set_Completion_Parameters; + public LLM_Get_Completion_Parameters_Delegate LLM_Get_Completion_Parameters; + public LLM_Set_Grammar_Delegate LLM_Set_Grammar; + public LLM_Get_Grammar_Delegate LLM_Get_Grammar; + public LLMAgent_Chat_Delegate LLMAgent_Chat; + public LLMAgent_Clear_History_Delegate LLMAgent_Clear_History; + public LLMAgent_Get_History_Delegate LLMAgent_Get_History; + public LLMAgent_Set_History_Delegate LLMAgent_Set_History; + public LLMAgent_Add_Message_Delegate LLMAgent_Add_Message; + public LLMAgent_Remove_Last_Message_Delegate LLMAgent_Remove_Last_Message; + public LLMAgent_Save_History_Delegate LLMAgent_Save_History; + public LLMAgent_Load_History_Delegate LLMAgent_Load_History; + public LLMAgent_Get_History_Size_Delegate LLMAgent_Get_History_Size; + + public static void Debug(int debugLevel) + { + debugLevelGlobal = debugLevel; + foreach (LlamaLib instance in instances) + { + instance.LLM_Debug(debugLevel); + } + } + + public static void LoggingCallback(CharArrayCallback callback) + { + loggingCallbackGlobal = callback; + foreach (LlamaLib instance in instances) + { + instance.LLM_Logging_Callback(callback); + } + } + + public static void LoggingStop() + { + LoggingCallback(null); + } + + public void Dispose() + { + LibraryLoader.FreeLibrary(libraryHandle); + libraryHandle = IntPtr.Zero; + + lock (runtimeLock) + { + instances.Remove(this); + if (instances.Count == 0) + { + LibraryLoader.FreeLibrary(runtimeLibraryHandle); + runtimeLibraryHandle = IntPtr.Zero; + } + } + } + + ~LlamaLib() + { + Dispose(); + } + +#endif + } +} diff --git a/Runtime/LlamaLib/LlamaLib.cs.meta b/Runtime/LlamaLib/LlamaLib.cs.meta new file mode 100644 index 00000000..a6e2a0af --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe209b11ce081b521a4c1bffd25c4e32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From bc74831f6dcfe8b42ca26224623ccc98cef9e1b2 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Sat, 16 Aug 2025 01:45:01 +0300 Subject: [PATCH 08/69] implementation of LLMAgent methods (untested) --- Editor/LLMCallerEditor.cs | 8 +- Editor/LLMEditor.cs | 15 +- Options.md | 12 +- README.md | 2 +- Runtime/LLM.cs | 66 +- Runtime/LLMAgent.cs | 463 +++++++ ...ChatTemplates.cs.meta => LLMAgent.cs.meta} | 2 +- Runtime/LLMCaller.cs | 254 ++-- Runtime/LLMCharacter.cs | 716 +--------- Runtime/LLMChatTemplates.cs | 710 ---------- Runtime/LLMInterface.cs | 158 --- Runtime/LLMInterface.cs.meta | 11 - Runtime/LLMManager.cs | 31 - Runtime/LLMUnitySetup.cs | 1 + Runtime/RAG/Chunking.cs | 12 +- Runtime/RAG/RAG.cs | 4 +- Runtime/RAG/Search.cs | 34 +- Runtime/RAG/SentenceSplitter.cs | 38 +- Runtime/RAG/TokenSplitter.cs | 6 +- Runtime/RAG/WordSplitter.cs | 36 +- Samples~/ChatBot/ChatBot.cs | 4 +- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 14 +- Samples~/RAG/RAGAndLLM_Sample.cs | 4 +- Samples~/RAG/RAG_Sample.cs | 6 +- Tests/Runtime/TestLLM.cs | 1146 ++++++++--------- Tests/Runtime/TestLLMChatTemplates.cs | 400 +++--- Tests/Runtime/TestSearch.cs | 216 ++-- 27 files changed, 1538 insertions(+), 2831 deletions(-) create mode 100644 Runtime/LLMAgent.cs rename Runtime/{LLMChatTemplates.cs.meta => LLMAgent.cs.meta} (83%) delete mode 100644 Runtime/LLMChatTemplates.cs delete mode 100644 Runtime/LLMInterface.cs delete mode 100644 Runtime/LLMInterface.cs.meta diff --git a/Editor/LLMCallerEditor.cs b/Editor/LLMCallerEditor.cs index 8bdd8f58..006b7908 100644 --- a/Editor/LLMCallerEditor.cs +++ b/Editor/LLMCallerEditor.cs @@ -8,8 +8,8 @@ namespace LLMUnity [CustomEditor(typeof(LLMCaller), true)] public class LLMCallerEditor : PropertyEditor {} - [CustomEditor(typeof(LLMCharacter), true)] - public class LLMCharacterEditor : LLMCallerEditor + [CustomEditor(typeof(LLMAgent), true)] + public class LLMAgentEditor : LLMCallerEditor { public override void AddModelSettings(SerializedObject llmScriptSO) { @@ -31,7 +31,7 @@ public override void AddModelSettings(SerializedObject llmScriptSO) string path = EditorUtility.OpenFilePanelWithFilters("Select a gbnf grammar file", "", new string[] { "Grammar Files", "gbnf" }); if (!string.IsNullOrEmpty(path)) { - ((LLMCharacter)target).SetGrammar(path); + ((LLMAgent)target).SetGrammar(path); } }; } @@ -42,7 +42,7 @@ public override void AddModelSettings(SerializedObject llmScriptSO) string path = EditorUtility.OpenFilePanelWithFilters("Select a json schema grammar file", "", new string[] { "Grammar Files", "json" }); if (!string.IsNullOrEmpty(path)) { - ((LLMCharacter)target).SetJSONGrammar(path); + ((LLMAgent)target).SetGrammar(path); } }; } diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index 2cfc5183..9ae3ace4 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -351,19 +351,6 @@ void OnEnable() DrawCopyableLabel(nameRect, entry.label, entry.filename); - if (!entry.lora) - { - string[] templateDescriptions = ChatTemplate.templatesDescription.Keys.ToList().ToArray(); - string[] templates = ChatTemplate.templatesDescription.Values.ToList().ToArray(); - int templateIndex = Array.IndexOf(templates, entry.chatTemplate); - int newTemplateIndex = EditorGUI.Popup(templateRect, templateIndex, templateDescriptions); - if (newTemplateIndex != templateIndex) - { - LLMManager.SetTemplate(entry.filename, templates[newTemplateIndex]); - UpdateModels(); - } - } - if (expandedView) { if (hasURL) @@ -420,7 +407,7 @@ void OnEnable() EditorGUI.LabelField(rects[col++], "Build"); EditorGUI.LabelField(rects[col++], ""); }, - drawFooterCallback = { }, + drawFooterCallback = {}, footerHeight = 0, }; } diff --git a/Options.md b/Options.md index e90b1317..15a2237d 100644 --- a/Options.md +++ b/Options.md @@ -21,15 +21,15 @@ If the user's GPU is not supported, the LLM will fall back to the CPU - `Debug` select to log the output of the model in the Unity Editor -
Advanced options - -
Parallel Prompts number of prompts / slots that can happen in parallel (default: -1 = number of LLMCharacter objects). Note that the context size is divided among the slots. If you want to retain as much context for the LLM and don't need all the characters present at the same time, you can set this number and specify the slot for each LLMCharacter object. - e.g. Setting `Parallel Prompts` to 1 and slot 0 for all LLMCharacter objects will use the full context, but the entire prompt will need to be computed (no caching) whenever a LLMCharacter object is used for chat.
+ -
Parallel Prompts number of prompts / slots that can happen in parallel (default: -1 = number of LLMAgent objects). Note that the context size is divided among the slots. If you want to retain as much context for the LLM and don't need all the characters present at the same time, you can set this number and specify the slot for each LLMAgent object. + e.g. Setting `Parallel Prompts` to 1 and slot 0 for all LLMAgent objects will use the full context, but the entire prompt will need to be computed (no caching) whenever a LLMAgent object is used for chat.
- `Dont Destroy On Load` select to not destroy the LLM GameObject when loading a new Scene
## Server Security Settings -- `API key` API key to use to allow access to requests from LLMCharacter objects (if `Remote` is set) +- `API key` API key to use to allow access to requests from LLMAgent objects (if `Remote` is set) -
Advanced options - `Load SSL certificate` allows to load a SSL certificate for end-to-end encryption of requests (if `Remote` is set). Requires SSL key as well. @@ -58,7 +58,7 @@ If the user's GPU is not supported, the LLM will fall back to the CPU
-## LLMCharacter Settings +## LLMAgent Settings - `Show/Hide Advanced Options` Toggle to show/hide advanced options from below - `Log Level` select how verbose the log messages are @@ -66,7 +66,7 @@ If the user's GPU is not supported, the LLM will fall back to the CPU ## 💻 Setup Settings
- +
- `Remote` whether the LLM used is remote or local @@ -113,4 +113,4 @@ If it is not selected, the full reply from the model is received in one go - `N Probs`: if greater than 0, the response also contains the probabilities of top N tokens for each generated token (default: 0) - `Ignore Eos`: enable to ignore end of stream tokens and continue generating (default: false). - \ No newline at end of file + diff --git a/README.md b/README.md index 53666775..19cbbdda 100644 --- a/README.md +++ b/README.md @@ -329,7 +329,7 @@ public class MyScript : MonoBehaviour llmCharacter.SetPrompt("A chat between a curious human and an artificial intelligence assistant."); // set the AI and player name llmCharacter.AIName = "AI"; - llmCharacter.playerName = "Human"; + llmCharacter.userName = "Human"; // optional: set streaming to false to get the complete result in one go // llmCharacter.stream = true; // optional: set a save path diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index e7aa7d57..e27d88d2 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -3,7 +3,7 @@ using System; using System.Collections.Generic; using System.IO; -using System.Threading; +using System.Linq; using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEditor; @@ -34,9 +34,6 @@ public class LLM : MonoBehaviour /// If the user's GPU is not supported, the LLM will fall back to the CPU
[Tooltip("number of model layers to offload to the GPU (0 = GPU not used). If the user's GPU is not supported, the LLM will fall back to the CPU")] [LLM] public int numGPULayers = 0; - /// log the output of the LLM in the Unity Editor. - [Tooltip("log the output of the LLM in the Unity Editor.")] - [LLM] public bool debug = false; /// number of prompts that can happen in parallel (-1 = number of LLMCaller objects) [Tooltip("number of prompts that can happen in parallel (-1 = number of LLMCaller objects)")] [LLMAdvanced] public int parallelPrompts = -1; @@ -63,7 +60,7 @@ public class LLM : MonoBehaviour [ModelAdvanced] public string model = ""; /// Chat template for the model [Tooltip("Chat template for the model")] - [ModelAdvanced] public string chatTemplate = ChatTemplate.DefaultTemplate; + [ModelAdvanced] public string chatTemplate = "auto"; /// LORA models to use (.gguf format) [Tooltip("LORA models to use (.gguf format)")] [ModelAdvanced] public string lora = ""; @@ -90,13 +87,22 @@ public class LLM : MonoBehaviour public int minContextLength = 0; public int maxContextLength = 0; + public static string[] ChatTemplates = new string[] + { + "auto", "chatml", "llama2", "llama2-sys", "llama2-sys-bos", "llama2-sys-strip", "mistral-v1", "mistral-v3", "mistral-v3-tekken", "mistral-v7", "mistral-v7-tekken", "phi3", "phi4", "falcon3", "zephyr", "monarch", "gemma", "orion", "openchat", "vicuna", "vicuna-orca", "deepseek", "deepseek2", "deepseek3", "command-r", "llama3", "chatglm3", "chatglm4", "glmedge", "minicpm", "exaone3", "exaone4", "rwkv-world", "granite", "gigachat", "megrez", "yandex", "bailing", "llama4", "smolvlm", "hunyuan-moe", "gpt-oss", "hunyuan-dense", "kimi-k2" + }; + + LlamaLib llmlib = null; + [Local, SerializeField] protected LLMService _llmService; + public LLMService llmService + { + get => _llmService; + protected set => _llmService = value; + } public string architecture => llmlib?.architecture; + List clients = new List(); - LlamaLib llmlib; - LLMService llmService = null; - Thread llmThread = null; public LLMManager llmManager = new LLMManager(); - private readonly object startLock = new object(); static readonly object staticLock = new object(); public LoraManager loraManager = new LoraManager(); string loraPre = ""; @@ -218,23 +224,13 @@ private void CreateLib() { bool useGPU = numGPULayers > 0; llmlib = new LlamaLibUnity(useGPU); - if (debug) + if (LLMUnitySetup.DebugMode <= LLMUnitySetup.DebugModeType.All) { - //todo - LlamaLibUnity.Debug(2); + LlamaLibUnity.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); LlamaLibUnity.LoggingCallback(LLMUnitySetup.Log); } } - // the following is the equivalent for running from command line - // string serverCommand; - // if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) serverCommand = "undreamai_server.exe"; - // else serverCommand = "./undreamai_server"; - // serverCommand += " " + arguments; - // serverCommand += $" --template \"{chatTemplate}\""; - // if (remote && SSLCert != "" && SSLKey != "") serverCommand += $" --ssl-cert-file {SSLCertPath} --ssl-key-file {SSLKeyPath}"; - // LLMUnitySetup.Log($"Deploy server command: {serverCommand}"); - private void CreateService(string modelPath, List loraPaths) { int numSlots = GetNumClients(); @@ -266,8 +262,7 @@ private void CreateService(string modelPath, List loraPaths) if (!started) return; ApplyLoras(); - //todo - // llmService.SetTemplate(chatTemplate); + SetTemplate(chatTemplate); } /// @@ -359,7 +354,6 @@ public void SetModel(string path) { ModelEntry modelEntry = LLMManager.Get(model); if (modelEntry == null) modelEntry = new ModelEntry(GetLLMManagerAssetRuntime(model)); - SetTemplate(modelEntry.chatTemplate); maxContextLength = modelEntry.contextLength; if (contextSize > maxContextLength) contextSize = maxContextLength; @@ -457,11 +451,16 @@ public void UpdateLoras() /// /// Set the chat template for the LLM. /// - /// the chat template to use. The available templates can be found in the ChatTemplate.templates.Keys array + /// the chat template to use. The available templates can be found in the ChatTemplates array public void SetTemplate(string templateName, bool setDirty = true) { + if (!ChatTemplates.Contains(templateName)) + { + LLMUnitySetup.LogError($"Template {templateName} not supported!"); + return; + } chatTemplate = templateName; - if (started) llmService.SetTemplate(chatTemplate); + if (started) llmService.SetTemplate(chatTemplate == "auto"? "": chatTemplate); #if UNITY_EDITOR if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif @@ -675,6 +674,14 @@ public void CancelRequest(int id_slot) llmService.Cancel(id_slot); } + /// + /// Allows to cancel all the requests of the LLM + /// /// Stops and destroys the LLM /// @@ -686,12 +693,7 @@ public void Destroy() { if (llmlib != null) { - if (llmService != null) - { - Debug.Log("stopping"); - llmService.Dispose(); - Debug.Log("Dispose"); - } + llmService?.Dispose(); llmlib = null; } started = false; diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs new file mode 100644 index 00000000..0da7a52a --- /dev/null +++ b/Runtime/LLMAgent.cs @@ -0,0 +1,463 @@ +/// @file +/// @brief File implementing the LLM characters. +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using UndreamAI.LlamaLib; +using UnityEditor; +using UnityEngine; + +namespace LLMUnity +{ + [DefaultExecutionOrder(-2)] + /// @ingroup llm + /// + /// Class implementing the LLM characters. + /// + public class LLMAgent : LLMCaller + { + /// file to save the chat history. + /// The file will be saved within the persistentDataPath directory. + [Tooltip("file to save the chat history. The file will be saved within the persistentDataPath directory.")] + [LLM] public string save = ""; + /// save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character. + [Tooltip("save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character.")] + [LLM] public bool saveCache = false; + /// log the constructed prompt the Unity Editor. + // [Tooltip("log the constructed prompt the Unity Editor.")] + // [LLM] public bool debugPrompt = false; + /// maximum number of tokens that the LLM will predict (-1 = infinity). + [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] + [Model] public int numPredict = -1; + /// slot of the server to use for computation (affects caching) + [Tooltip("slot of the server to use for computation (affects caching)")] + [ModelAdvanced] public int slot = -1; + /// grammar file used for the LLMAgent (.gbnf format) + [Tooltip("grammar file used for the LLMAgent (.gbnf format)")] + [ModelAdvanced] public string grammar = null; + /// grammar file used for the LLMAgent (.json format) + [Tooltip("grammar file used for the LLMAgent (.json format)")] + [ModelAdvanced] public string grammarJSON = null; + /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) + [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] + [ModelAdvanced] public bool cachePrompt = true; + /// seed for reproducibility (-1 = no reproducibility). + [Tooltip("seed for reproducibility (-1 = no reproducibility).")] + [ModelAdvanced] public int seed = 0; + /// LLM temperature, lower values give more deterministic answers. + [Tooltip("LLM temperature, lower values give more deterministic answers.")] + [ModelAdvanced, Float(0f, 2f)] public float temperature = 0.2f; + /// Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). + /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. + /// + [Tooltip("Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] + [ModelAdvanced, Int(-1, 100)] public int topK = 40; + /// Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). + /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. + /// + [Tooltip("Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] + [ModelAdvanced, Float(0f, 1f)] public float topP = 0.9f; + /// minimum probability for a token to be used. + [Tooltip("minimum probability for a token to be used.")] + [ModelAdvanced, Float(0f, 1f)] public float minP = 0.05f; + /// Penalty based on repeated tokens to control the repetition of token sequences in the generated text. + [Tooltip("Penalty based on repeated tokens to control the repetition of token sequences in the generated text.")] + [ModelAdvanced, Float(0f, 2f)] public float repeatPenalty = 1.1f; + /// Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). + [Tooltip("Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] + [ModelAdvanced, Float(0f, 1f)] public float presencePenalty = 0f; + /// Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). + [Tooltip("Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] + [ModelAdvanced, Float(0f, 1f)] public float frequencyPenalty = 0f; + /// enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens. + [Tooltip("enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens.")] + [ModelAdvanced, Float(0f, 1f)] public float typicalP = 1f; + /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). + [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] + [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; + /// penalize newline tokens when applying the repeat penalty. + [Tooltip("penalize newline tokens when applying the repeat penalty.")] + [ModelAdvanced] public bool penalizeNl = true; + /// prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt) + [Tooltip("prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt)")] + [ModelAdvanced] public string penaltyPrompt; + /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). + [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] + [ModelAdvanced, Int(0, 2)] public int mirostat = 0; + /// The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text. + [Tooltip("The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text.")] + [ModelAdvanced, Float(0f, 10f)] public float mirostatTau = 5f; + /// The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text. + [Tooltip("The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text.")] + [ModelAdvanced, Float(0f, 1f)] public float mirostatEta = 0.1f; + /// if greater than 0, the response also contains the probabilities of top N tokens for each generated token. + [Tooltip("if greater than 0, the response also contains the probabilities of top N tokens for each generated token.")] + [ModelAdvanced, Int(0, 10)] public int nProbs = 0; + /// ignore end of stream token and continue generating. + [Tooltip("ignore end of stream token and continue generating.")] + [ModelAdvanced] public bool ignoreEos = false; + /// stopwords to stop the LLM in addition to the default stopwords from the chat template. + [Tooltip("stopwords to stop the LLM in addition to the default stopwords from the chat template.")] + public List stop = new List(); + /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. + /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. + // [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] + // public Dictionary logitBias = null; + /// Receive the reply from the model as it is produced (recommended!). + /// If not selected, the full reply from the model is received in one go + [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] + [Chat] public bool stream = true; + /// the name of the player + [Tooltip("the name of the player")] + [Chat] public string userName = "user"; + /// the name of the AI + [Tooltip("the name of the AI")] + [Chat] public string AIName = "assistant"; + /// a description of the AI role (system prompt) + [Tooltip("a description of the AI role (system prompt)")] + [TextArea(5, 10), Chat] public string prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; + /// the chat history as list of chat messages + /// the grammar to use + [Tooltip("the grammar to use")] + public string grammarString; + /// the grammar to use + [Tooltip("the grammar to use")] + public string grammarJSONString; + + /// \cond HIDE + protected SemaphoreSlim chatLock = new SemaphoreSlim(1, 1); + /// \endcond + + [Local, SerializeField] protected UndreamAI.LlamaLib.LLMAgent _llmAgent; + public UndreamAI.LlamaLib.LLMAgent llmAgent + { + get => _llmAgent; + protected set => _llmAgent = value; + } + + public List chat + { + get => llmAgent.GetHistory(); + set => llmAgent.SetHistory(value); + } + + /// + /// The Unity Awake function that initializes the state before the application starts. + /// The following actions are executed: + /// - the corresponding LLM server is defined (if ran locally) + /// - the grammar is set based on the grammar file + /// - the prompt and chat history are initialised + /// - the chat template is constructed + /// - the number of tokens to keep are based on the system prompt (if setNKeepToPrompt=true) + /// + public override void Awake() + { + if (!enabled) return; + base.Awake(); + if (!remote) + { + int slotFromServer = llm.Register(this); + if (slot == -1) slot = slotFromServer; + } + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); + InitGrammar(); + InitHistory(); + } + + protected override void OnValidate() + { + base.OnValidate(); + if (llm != null && llm.parallelPrompts > -1 && (slot < -1 || slot >= llm.parallelPrompts)) LLMUnitySetup.LogError($"The slot needs to be between 0 and {llm.parallelPrompts - 1}, or -1 to be automatically set"); + } + + protected override string NotValidLLMError() + { + return base.NotValidLLMError() + $", it is an embedding only model"; + } + + /// + /// Checks if a LLM is valid for the LLMCaller + /// + /// LLM object + /// bool specifying whether the LLM is valid + public override bool IsValidLLM(LLM llmSet) + { + return !llmSet.embeddingsOnly; + } + + protected override void SetLLMClient(LLMClient llmClientSet) + { + base.SetLLMClient(llmClientSet); + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); + } + + protected virtual void InitHistory() + { + ClearChat(); + _ = LoadHistory(); + } + + protected virtual async Task LoadHistory() + { + if (save == "" || !File.Exists(GetJsonSavePath(save))) return; + await chatLock.WaitAsync(); // Acquire the lock + try + { + Load(save); + } + finally + { + chatLock.Release(); // Release the lock + } + } + + protected virtual string GetSavePath(string filename) + { + return Path.Combine(Application.persistentDataPath, filename).Replace('\\', '/'); + } + + /// + /// Allows to get the save path of the chat history based on the provided filename or relative path. + /// + /// filename or relative path used for the save + /// save path + public virtual string GetJsonSavePath(string filename) + { + return GetSavePath(filename + ".json"); + } + + /// + /// Allows to get the save path of the LLM cache based on the provided filename or relative path. + /// + /// filename or relative path used for the save + /// save path + public virtual string GetCacheSavePath(string filename) + { + return GetSavePath(filename + ".cache"); + } + + /// + /// Clear the chat of the LLMAgent. + /// + public virtual void ClearChat() + { + llmAgent.ClearHistory(); + } + + /// + /// Set the system prompt for the LLMAgent. + /// + /// the system prompt + /// whether to clear (true) or keep (false) the current chat history on top of the system prompt. + public virtual void SetPrompt(string newPrompt, bool clearChat = true) + { + //TODO + llmAgent.SystemPrompt = newPrompt; + } + + protected virtual void InitGrammar() + { + grammarString = ""; + if (!String.IsNullOrEmpty(grammar)) + { + grammarString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammar)); + } + llmAgent.SetGrammar(grammarString); + } + + /// + /// Sets the grammar file of the LLMAgent (GBNF or JSON schema) + /// + /// path to the grammar file + public virtual async Task SetGrammar(string path) + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) path = LLMUnitySetup.AddAsset(path); +#endif + await LLMUnitySetup.AndroidExtractAsset(path, true); + grammar = path; + InitGrammar(); + } + + protected virtual void SetCompletionParameters() + { + JObject json = new JObject + { + ["temperature"] = temperature, + ["top_k"] = topK, + ["top_p"] = topP, + ["min_p"] = minP, + ["n_predict"] = numPredict, + ["stream"] = stream, + ["typical_p"] = typicalP, + ["repeat_penalty"] = repeatPenalty, + ["repeat_last_n"] = repeatLastN, + ["penalize_nl"] = penalizeNl, + ["presence_penalty"] = presencePenalty, + ["frequency_penalty"] = frequencyPenalty, + ["penalty_prompt"] = (penaltyPrompt != null && penaltyPrompt != "") ? penaltyPrompt : null, + ["mirostat"] = mirostat, + ["mirostat_tau"] = mirostatTau, + ["mirostat_eta"] = mirostatEta, + ["json_schema"] = grammarJSONString, + ["seed"] = seed, + ["ignore_eos"] = ignoreEos, + ["n_probs"] = nProbs, + ["cache_prompt"] = cachePrompt + }; + llmAgent.SetCompletionParameters(json); + } + + /// + /// Allows to add a message in the chat history. + /// + /// message role (e.g. userName or AIName) + /// message content + public virtual void AddMessage(string role, string content) + { + // add the question / answer to the chat list, update prompt + llmAgent.AddMessage(role, content); + } + + /// + /// Allows to add a player message in the chat history. + /// + /// message content + public virtual void AddUserMessage(string content) + { + llmAgent.AddUserMessage(content); + } + + /// + /// Allows to add a AI message in the chat history. + /// + /// message content + public virtual void AddAIMessage(string content) + { + llmAgent.AddAssistantMessage(content); + } + + /// + /// Chat functionality of the LLM. + /// It calls the LLM completion based on the provided query including the previous chat history. + /// The function allows callbacks when the response is partially or fully received. + /// The question is added to the history if specified. + /// + /// user query + /// callback function that receives the response as string + /// callback function called when the full response has been received + /// whether to add the user query to the chat history + /// the LLM response + public virtual string ChatSync(string query, LlamaLib.CharArrayCallback callback = null, bool addToHistory = true) + { + // handle a chat message by the user + // call the callback function while the answer is received + // call the completionCallback function when the answer is fully received + SetCompletionParameters(); + return llmAgent.Chat(query, addToHistory, callback); + } + + /// + /// Chat functionality of the LLM (async). + /// It calls the LLM completion based on the provided query including the previous chat history. + /// The function allows callbacks when the response is partially or fully received. + /// The question is added to the history if specified. + /// + /// user query + /// callback function that receives the response as string + /// callback function called when the full response has been received + /// whether to add the user query to the chat history + /// the LLM response + public virtual async Task Chat(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) + { + // handle a chat message by the user + // call the callback function while the answer is received + // call the completionCallback function when the answer is fully received + SetCompletionParameters(); + string result = await llmAgent.ChatAsync(query, addToHistory, callback); + completionCallback?.Invoke(); + return result; + } + + /// + /// Allow to warm-up a model by processing the system prompt. + /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. + /// The function allows a callback function for when the prompt is processed and the response received. + /// + /// callback function called when the full response has been received + /// the LLM response + public virtual async Task Warmup(EmptyCallback completionCallback = null) + { + await Warmup(null, completionCallback); + } + + /// + /// Allow to warm-up a model by processing the provided prompt without adding it to history. + /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. + /// The function allows a callback function for when the prompt is processed and the response received. + /// + /// + /// user prompt used during the initialisation (not added to history) + /// callback function called when the full response has been received + /// the LLM response + public virtual async Task Warmup(string query, EmptyCallback completionCallback = null) + { + int currNumPredict = numPredict; + numPredict = 0; + await Chat(query, null, completionCallback, false); + numPredict = currNumPredict; + SetCompletionParameters(); + } + + /// + /// Saves the chat history and cache to the provided filename / relative path. + /// + /// filename / relative path to save the chat history + /// + public virtual string Save(string filename) + { + string filepath = GetJsonSavePath(filename); + string dirname = Path.GetDirectoryName(filepath); + if (!Directory.Exists(dirname)) Directory.CreateDirectory(dirname); + llmAgent.SaveHistory(filepath); + + string cachepath = GetCacheSavePath(filename); + if (remote || !saveCache) return null; + string result = llmAgent.SaveSlot(cachepath); + return result; + } + + /// + /// Load the chat history and cache from the provided filename / relative path. + /// + /// filename / relative path to load the chat history from + /// + public virtual string Load(string filename) + { + string filepath = GetJsonSavePath(filename); + if (!File.Exists(filepath)) + { + LLMUnitySetup.LogError($"File {filepath} does not exist."); + return null; + } + llmAgent.LoadHistory(filepath); + LLMUnitySetup.Log($"Loaded {filepath}"); + + string cachepath = GetCacheSavePath(filename); + if (remote || !saveCache || !File.Exists(GetSavePath(cachepath))) return null; + string result = llmAgent.LoadSlot(cachepath); + return result; + } + + /// + /// Allows to cancel the requests of the LLMAgent + /// + public void CancelRequests() + { + llmAgent.Cancel(); + } + } +} diff --git a/Runtime/LLMChatTemplates.cs.meta b/Runtime/LLMAgent.cs.meta similarity index 83% rename from Runtime/LLMChatTemplates.cs.meta rename to Runtime/LLMAgent.cs.meta index 5cfa7005..2be83c16 100644 --- a/Runtime/LLMChatTemplates.cs.meta +++ b/Runtime/LLMAgent.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7aafa0738b61af4af85e44b81b5625ca +guid: b4326d5ae3b03ff55847035351559f4e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/LLMCaller.cs b/Runtime/LLMCaller.cs index 4b69137d..9ed43c82 100644 --- a/Runtime/LLMCaller.cs +++ b/Runtime/LLMCaller.cs @@ -3,8 +3,8 @@ using System; using System.Collections.Generic; using System.Threading.Tasks; +using UndreamAI.LlamaLib; using UnityEngine; -using UnityEngine.Networking; namespace LLMUnity { @@ -26,7 +26,7 @@ public class LLMCaller : MonoBehaviour [Local, SerializeField] protected LLM _llm; public LLM llm { - get => _llm;//whatever + get => _llm; set => SetLLM(value); } /// API key for the remote server @@ -43,8 +43,13 @@ public LLM llm [Remote] public int numRetries = 10; protected LLM _prellm; - protected List<(string, string)> requestHeaders; - protected List WIPRequests = new List(); + + [Local, SerializeField] protected LLMClient _llmClient; + public LLMClient llmClient + { + get => _llmClient; + protected set => SetLLMClient(value); + } /// /// The Unity Awake function that initializes the state before the application starts. @@ -60,20 +65,20 @@ public virtual void Awake() // Start the LLM server in a cross-platform way if (!enabled) return; - requestHeaders = new List<(string, string)> { ("Content-Type", "application/json") }; if (!remote) { AssignLLM(); if (llm == null) { - string error = $"No LLM assigned or detected for LLMCharacter {name}!"; + string error = $"No LLM assigned or detected for LLMAgent {name}!"; LLMUnitySetup.LogError(error); throw new Exception(error); } + llmClient = new LLMClient(llm.llmService); } else { - if (!String.IsNullOrEmpty(APIKey)) requestHeaders.Add(("Authorization", "Bearer " + APIKey)); + llmClient = new LLMClient(host, port, APIKey); } } @@ -90,6 +95,12 @@ protected virtual void SetLLM(LLM llmSet) } _llm = llmSet; _prellm = _llm; + if (!remote) llmClient = new LLMClient(llm.llmService); + } + + protected virtual void SetLLMClient(LLMClient llmClientSet) + { + llmClient = llmClientSet; } /// @@ -175,168 +186,13 @@ protected virtual LLM[] SortLLMsByBestMatching(LLM[] arrayIn) return array; } - protected virtual List TokenizeContent(TokenizeResult result) - { - // get the tokens from a tokenize result received from the endpoint - return result.tokens; - } - - protected virtual string DetokenizeContent(TokenizeRequest result) - { - // get content from a chat result received from the endpoint - return result.content; - } - - protected virtual List EmbeddingsContent(EmbeddingsResult result) - { - // get content from a chat result received from the endpoint - return result.embedding; - } - - protected virtual Ret ConvertContent(string response, ContentCallback getContent = null) - { - // template function to convert the json received and get the content - if (response == null) return default; - response = response.Trim(); - if (response.StartsWith("data: ")) - { - string responseArray = ""; - foreach (string responsePart in response.Replace("\n\n", "").Split("data: ")) - { - if (responsePart == "") continue; - if (responseArray != "") responseArray += ",\n"; - responseArray += responsePart; - } - response = $"{{\"data\": [{responseArray}]}}"; - } - return getContent(JsonUtility.FromJson(response)); - } - - protected virtual void CancelRequestsLocal() {} - - protected virtual void CancelRequestsRemote() - { - foreach (UnityWebRequest request in WIPRequests) - { - request.Abort(); - } - WIPRequests.Clear(); - } - /// - /// Cancel the ongoing requests e.g. Chat, Complete. + /// Allows to cancel the requests in a specific slot of the LLM /// - // - public virtual void CancelRequests() - { - if (remote) CancelRequestsRemote(); - else CancelRequestsLocal(); - } - - protected virtual async Task PostRequestLocal(string json, string endpoint, ContentCallback getContent, Callback callback = null) - { - // send a post request to the server and call the relevant callbacks to convert the received content and handle it - // this function has streaming functionality i.e. handles the answer while it is being received - while (!llm.failed && !llm.started) await Task.Yield(); - string callResult = null; - switch (endpoint) - { - case "tokenize": - callResult = await llm.Tokenize(json); - break; - case "detokenize": - callResult = await llm.Detokenize(json); - break; - case "embeddings": - callResult = await llm.Embeddings(json); - break; - case "slots": - callResult = await llm.Slot(json); - break; - default: - LLMUnitySetup.LogError($"Unknown endpoint {endpoint}"); - break; - } - - Ret result = ConvertContent(callResult, getContent); - callback?.Invoke(result); - return result; - } - - protected virtual async Task PostRequestRemote(string json, string endpoint, ContentCallback getContent, Callback callback = null) + /// slot of the LLM + public void CancelRequest(int id_slot) { - // send a post request to the server and call the relevant callbacks to convert the received content and handle it - // this function has streaming functionality i.e. handles the answer while it is being received - if (endpoint == "slots") - { - LLMUnitySetup.LogError("Saving and loading is not currently supported in remote setting"); - return default; - } - - Ret result = default; - byte[] jsonToSend = new System.Text.UTF8Encoding().GetBytes(json); - UnityWebRequest request = null; - string error = null; - int tryNr = numRetries; - - while (tryNr != 0) - { - using (request = UnityWebRequest.Put($"{host}{(port != 0 ? $":{port}" : "")}/{endpoint}", jsonToSend)) - { - WIPRequests.Add(request); - - request.method = "POST"; - if (requestHeaders != null) - { - for (int i = 0; i < requestHeaders.Count; i++) - request.SetRequestHeader(requestHeaders[i].Item1, requestHeaders[i].Item2); - } - - // Start the request asynchronously - UnityWebRequestAsyncOperation asyncOperation = request.SendWebRequest(); - await Task.Yield(); // Wait for the next frame so that asyncOperation is properly registered (especially if not in main thread) - - float lastProgress = 0f; - // Continue updating progress until the request is completed - while (!asyncOperation.isDone) - { - float currentProgress = request.downloadProgress; - // Check if progress has changed - if (currentProgress != lastProgress && callback != null) - { - callback?.Invoke(ConvertContent(request.downloadHandler.text, getContent)); - lastProgress = currentProgress; - } - // Wait for the next frame - await Task.Yield(); - } - WIPRequests.Remove(request); - if (request.result == UnityWebRequest.Result.Success) - { - result = ConvertContent(request.downloadHandler.text, getContent); - error = null; - break; - } - else - { - result = default; - error = request.error; - if (request.responseCode == (int)System.Net.HttpStatusCode.Unauthorized) break; - } - } - tryNr--; - if (tryNr > 0) await Task.Delay(200 * (numRetries - tryNr)); - } - - if (error != null) LLMUnitySetup.LogError(error); - callback?.Invoke(result); - return result; - } - - protected virtual async Task PostRequest(string json, string endpoint, ContentCallback getContent, Callback callback = null) - { - if (remote) return await PostRequestRemote(json, endpoint, getContent, callback); - return await PostRequestLocal(json, endpoint, getContent, callback); + llmClient.Cancel(id_slot); } /// @@ -345,13 +201,11 @@ protected virtual async Task PostRequest(string json, string endp /// query to tokenise /// callback function called with the result tokens /// list of the tokens - public virtual async Task> Tokenize(string query, Callback> callback = null) + public virtual List Tokenize(string query, Callback> callback = null) { - // handle the tokenization of a message by the user - TokenizeRequest tokenizeRequest = new TokenizeRequest(); - tokenizeRequest.content = query; - string json = JsonUtility.ToJson(tokenizeRequest); - return await PostRequest>(json, "tokenize", TokenizeContent, callback); + List tokens = llmClient.Tokenize(query); + callback?.Invoke(tokens); + return tokens; } /// @@ -360,13 +214,12 @@ public virtual async Task> Tokenize(string query, Callback> /// tokens to detokenise /// callback function called with the result string /// the detokenised string - public virtual async Task Detokenize(List tokens, Callback callback = null) + public virtual string Detokenize(List tokens, Callback callback = null) { // handle the detokenization of a message by the user - TokenizeResult tokenizeRequest = new TokenizeResult(); - tokenizeRequest.tokens = tokens; - string json = JsonUtility.ToJson(tokenizeRequest); - return await PostRequest(json, "detokenize", DetokenizeContent, callback); + string prompt = llmClient.Detokenize(tokens); + callback?.Invoke(prompt); + return prompt; } /// @@ -375,13 +228,50 @@ public virtual async Task Detokenize(List tokens, Callback /// input to compute the embeddings for /// callback function called with the result string /// the computed embeddings - public virtual async Task> Embeddings(string query, Callback> callback = null) + public virtual List Embeddings(string query, Callback> callback = null) { // handle the tokenization of a message by the user - TokenizeRequest tokenizeRequest = new TokenizeRequest(); - tokenizeRequest.content = query; - string json = JsonUtility.ToJson(tokenizeRequest); - return await PostRequest>(json, "embeddings", EmbeddingsContent, callback); + List embeddings = llmClient.Embeddings(query); + callback?.Invoke(embeddings); + return embeddings; + } + + /// + /// Completion functionality of the LLM. + /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). + /// The function allows callbacks when the response is partially or fully received. + /// + /// user query + /// callback function that receives the response as string + /// callback function called when the full response has been received + /// the LLM response + public virtual string CompletionSync(string prompt, LlamaLib.CharArrayCallback callback = null) + { + // handle a completion request by the user + // call the callback function while the answer is received + // call the completionCallback function when the answer is fully received + + return llmClient.Completion(prompt, callback); + } + + /// + /// Completion functionality of the LLM (async). + /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). + /// The function allows callbacks when the response is partially or fully received. + /// + /// user query + /// callback function that receives the response as string + /// callback function called when the full response has been received + /// the LLM response + public virtual async Task Completion(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null) + { + // handle a completion request by the user + // call the callback function while the answer is received + // call the completionCallback function when the answer is fully received + + string result = await llmClient.CompletionAsync(prompt, callback); + completionCallback?.Invoke(); + return result; } } } diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs index 0bf91a15..93f02fce 100644 --- a/Runtime/LLMCharacter.cs +++ b/Runtime/LLMCharacter.cs @@ -1,11 +1,5 @@ /// @file /// @brief File implementing the LLM characters. -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using UnityEditor; using UnityEngine; namespace LLMUnity @@ -15,712 +9,6 @@ namespace LLMUnity /// /// Class implementing the LLM characters. /// - public class LLMCharacter : LLMCaller - { - /// file to save the chat history. - /// The file will be saved within the persistentDataPath directory. - [Tooltip("file to save the chat history. The file will be saved within the persistentDataPath directory.")] - [LLM] public string save = ""; - /// save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character. - [Tooltip("save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character.")] - [LLM] public bool saveCache = false; - /// log the constructed prompt the Unity Editor. - [Tooltip("log the constructed prompt the Unity Editor.")] - [LLM] public bool debugPrompt = false; - /// maximum number of tokens that the LLM will predict (-1 = infinity). - [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] - [Model] public int numPredict = -1; - /// slot of the server to use for computation (affects caching) - [Tooltip("slot of the server to use for computation (affects caching)")] - [ModelAdvanced] public int slot = -1; - /// grammar file used for the LLMCharacter (.gbnf format) - [Tooltip("grammar file used for the LLMCharacter (.gbnf format)")] - [ModelAdvanced] public string grammar = null; - /// grammar file used for the LLMCharacter (.json format) - [Tooltip("grammar file used for the LLMCharacter (.json format)")] - [ModelAdvanced] public string grammarJSON = null; - /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) - [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] - [ModelAdvanced] public bool cachePrompt = true; - /// seed for reproducibility (-1 = no reproducibility). - [Tooltip("seed for reproducibility (-1 = no reproducibility).")] - [ModelAdvanced] public int seed = 0; - /// LLM temperature, lower values give more deterministic answers. - [Tooltip("LLM temperature, lower values give more deterministic answers.")] - [ModelAdvanced, Float(0f, 2f)] public float temperature = 0.2f; - /// Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Int(-1, 100)] public int topK = 40; - /// Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Float(0f, 1f)] public float topP = 0.9f; - /// minimum probability for a token to be used. - [Tooltip("minimum probability for a token to be used.")] - [ModelAdvanced, Float(0f, 1f)] public float minP = 0.05f; - /// Penalty based on repeated tokens to control the repetition of token sequences in the generated text. - [Tooltip("Penalty based on repeated tokens to control the repetition of token sequences in the generated text.")] - [ModelAdvanced, Float(0f, 2f)] public float repeatPenalty = 1.1f; - /// Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float presencePenalty = 0f; - /// Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float frequencyPenalty = 0f; - /// enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens. - [Tooltip("enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens.")] - [ModelAdvanced, Float(0f, 1f)] public float typicalP = 1f; - /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). - [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] - [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; - /// penalize newline tokens when applying the repeat penalty. - [Tooltip("penalize newline tokens when applying the repeat penalty.")] - [ModelAdvanced] public bool penalizeNl = true; - /// prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt) - [Tooltip("prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt)")] - [ModelAdvanced] public string penaltyPrompt; - /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). - [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] - [ModelAdvanced, Int(0, 2)] public int mirostat = 0; - /// The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text. - [Tooltip("The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text.")] - [ModelAdvanced, Float(0f, 10f)] public float mirostatTau = 5f; - /// The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text. - [Tooltip("The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text.")] - [ModelAdvanced, Float(0f, 1f)] public float mirostatEta = 0.1f; - /// if greater than 0, the response also contains the probabilities of top N tokens for each generated token. - [Tooltip("if greater than 0, the response also contains the probabilities of top N tokens for each generated token.")] - [ModelAdvanced, Int(0, 10)] public int nProbs = 0; - /// ignore end of stream token and continue generating. - [Tooltip("ignore end of stream token and continue generating.")] - [ModelAdvanced] public bool ignoreEos = false; - /// number of tokens to retain from the prompt when the model runs out of context (-1 = LLMCharacter prompt tokens if setNKeepToPrompt is set to true). - [Tooltip("number of tokens to retain from the prompt when the model runs out of context (-1 = LLMCharacter prompt tokens if setNKeepToPrompt is set to true).")] - public int nKeep = -1; - /// stopwords to stop the LLM in addition to the default stopwords from the chat template. - [Tooltip("stopwords to stop the LLM in addition to the default stopwords from the chat template.")] - public List stop = new List(); - /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. - /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. - [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] - public Dictionary logitBias = null; - /// Receive the reply from the model as it is produced (recommended!). - /// If not selected, the full reply from the model is received in one go - [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] - [Chat] public bool stream = true; - /// the name of the player - [Tooltip("the name of the player")] - [Chat] public string playerName = "user"; - /// the name of the AI - [Tooltip("the name of the AI")] - [Chat] public string AIName = "assistant"; - /// a description of the AI role (system prompt) - [Tooltip("a description of the AI role (system prompt)")] - [TextArea(5, 10), Chat] public string prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; - /// set the number of tokens to always retain from the prompt (nKeep) based on the LLMCharacter system prompt - [Tooltip("set the number of tokens to always retain from the prompt (nKeep) based on the LLMCharacter system prompt")] - public bool setNKeepToPrompt = true; - /// the chat history as list of chat messages - [Tooltip("the chat history as list of chat messages")] - public List chat = new List(); - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarString; - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarJSONString; - - /// \cond HIDE - protected SemaphoreSlim chatLock = new SemaphoreSlim(1, 1); - protected string chatTemplate; - protected ChatTemplate template = null; - /// \endcond - - /// - /// The Unity Awake function that initializes the state before the application starts. - /// The following actions are executed: - /// - the corresponding LLM server is defined (if ran locally) - /// - the grammar is set based on the grammar file - /// - the prompt and chat history are initialised - /// - the chat template is constructed - /// - the number of tokens to keep are based on the system prompt (if setNKeepToPrompt=true) - /// - public override void Awake() - { - if (!enabled) return; - base.Awake(); - if (!remote) - { - int slotFromServer = llm.Register(this); - if (slot == -1) slot = slotFromServer; - } - InitGrammar(); - InitHistory(); - } - - protected override void OnValidate() - { - base.OnValidate(); - if (llm != null && llm.parallelPrompts > -1 && (slot < -1 || slot >= llm.parallelPrompts)) LLMUnitySetup.LogError($"The slot needs to be between 0 and {llm.parallelPrompts-1}, or -1 to be automatically set"); - } - - protected override string NotValidLLMError() - { - return base.NotValidLLMError() + $", it is an embedding only model"; - } - - /// - /// Checks if a LLM is valid for the LLMCaller - /// - /// LLM object - /// bool specifying whether the LLM is valid - public override bool IsValidLLM(LLM llmSet) - { - return !llmSet.embeddingsOnly; - } - - protected virtual void InitHistory() - { - ClearChat(); - _ = LoadHistory(); - } - - protected virtual async Task LoadHistory() - { - if (save == "" || !File.Exists(GetJsonSavePath(save))) return; - await chatLock.WaitAsync(); // Acquire the lock - try - { - await Load(save); - } - finally - { - chatLock.Release(); // Release the lock - } - } - - protected virtual string GetSavePath(string filename) - { - return Path.Combine(Application.persistentDataPath, filename).Replace('\\', '/'); - } - - /// - /// Allows to get the save path of the chat history based on the provided filename or relative path. - /// - /// filename or relative path used for the save - /// save path - public virtual string GetJsonSavePath(string filename) - { - return GetSavePath(filename + ".json"); - } - - /// - /// Allows to get the save path of the LLM cache based on the provided filename or relative path. - /// - /// filename or relative path used for the save - /// save path - public virtual string GetCacheSavePath(string filename) - { - return GetSavePath(filename + ".cache"); - } - - /// - /// Clear the chat of the LLMCharacter. - /// - public virtual void ClearChat() - { - chat.Clear(); - ChatMessage promptMessage = new ChatMessage { role = "system", content = prompt }; - chat.Add(promptMessage); - } - - /// - /// Set the system prompt for the LLMCharacter. - /// - /// the system prompt - /// whether to clear (true) or keep (false) the current chat history on top of the system prompt. - public virtual void SetPrompt(string newPrompt, bool clearChat = true) - { - prompt = newPrompt; - nKeep = -1; - if (clearChat) ClearChat(); - else chat[0] = new ChatMessage { role = "system", content = prompt }; - } - - protected virtual bool CheckTemplate() - { - if (template == null) - { - LLMUnitySetup.LogError("Template not set!"); - return false; - } - return true; - } - - protected virtual async Task InitNKeep() - { - if (setNKeepToPrompt && nKeep == -1) - { - if (!CheckTemplate()) return false; - string systemPrompt = template.ComputePrompt(new List(){chat[0]}, playerName, "", false); - List tokens = await Tokenize(systemPrompt); - if (tokens == null) return false; - SetNKeep(tokens); - } - return true; - } - - protected virtual void InitGrammar() - { - grammarString = ""; - grammarJSONString = ""; - if (!String.IsNullOrEmpty(grammar)) - { - grammarString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammar)); - if (!String.IsNullOrEmpty(grammarJSON)) - LLMUnitySetup.LogWarning("Both GBNF and JSON grammars are set, only the GBNF will be used"); - } - else if (!String.IsNullOrEmpty(grammarJSON)) - { - grammarJSONString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammarJSON)); - } - } - - protected virtual void SetNKeep(List tokens) - { - // set the tokens to keep - nKeep = tokens.Count; - } - - /// - /// Loads the chat template of the LLMCharacter. - /// - /// - public virtual async Task LoadTemplate() - { - string llmTemplate; - if (remote) - { - llmTemplate = await AskTemplate(); - } - else - { - llmTemplate = llm.GetTemplate(); - } - if (llmTemplate != chatTemplate) - { - chatTemplate = llmTemplate; - template = chatTemplate == null ? null : ChatTemplate.GetTemplate(chatTemplate); - nKeep = -1; - } - } - - /// - /// Sets the grammar file of the LLMCharacter - /// - /// path to the grammar file - public virtual async Task SetGrammarFile(string path, bool gnbf) - { -#if UNITY_EDITOR - if (!EditorApplication.isPlaying) path = LLMUnitySetup.AddAsset(path); -#endif - await LLMUnitySetup.AndroidExtractAsset(path, true); - if (gnbf) grammar = path; - else grammarJSON = path; - InitGrammar(); - } - - /// - /// Sets the grammar file of the LLMCharacter (GBNF) - /// - /// path to the grammar file - public virtual async Task SetGrammar(string path) - { - await SetGrammarFile(path, true); - } - - /// - /// Sets the grammar file of the LLMCharacter (JSON schema) - /// - /// path to the grammar file - public virtual async Task SetJSONGrammar(string path) - { - await SetGrammarFile(path, false); - } - - protected virtual List GetStopwords() - { - if (!CheckTemplate()) return null; - List stopAll = new List(template.GetStop(playerName, AIName)); - if (stop != null) stopAll.AddRange(stop); - return stopAll; - } - - protected virtual ChatRequest GenerateRequest(string prompt) - { - // setup the request struct - ChatRequest chatRequest = new ChatRequest(); - if (debugPrompt) LLMUnitySetup.Log(prompt); - chatRequest.prompt = prompt; - chatRequest.id_slot = slot; - chatRequest.temperature = temperature; - chatRequest.top_k = topK; - chatRequest.top_p = topP; - chatRequest.min_p = minP; - chatRequest.n_predict = numPredict; - chatRequest.n_keep = nKeep; - chatRequest.stream = stream; - chatRequest.stop = GetStopwords(); - chatRequest.typical_p = typicalP; - chatRequest.repeat_penalty = repeatPenalty; - chatRequest.repeat_last_n = repeatLastN; - chatRequest.penalize_nl = penalizeNl; - chatRequest.presence_penalty = presencePenalty; - chatRequest.frequency_penalty = frequencyPenalty; - chatRequest.penalty_prompt = (penaltyPrompt != null && penaltyPrompt != "") ? penaltyPrompt : null; - chatRequest.mirostat = mirostat; - chatRequest.mirostat_tau = mirostatTau; - chatRequest.mirostat_eta = mirostatEta; - chatRequest.grammar = grammarString; - chatRequest.json_schema = grammarJSONString; - chatRequest.seed = seed; - chatRequest.ignore_eos = ignoreEos; - chatRequest.logit_bias = logitBias; - chatRequest.n_probs = nProbs; - chatRequest.cache_prompt = cachePrompt; - return chatRequest; - } - - /// - /// Allows to add a message in the chat history. - /// - /// message role (e.g. playerName or AIName) - /// message content - public virtual void AddMessage(string role, string content) - { - // add the question / answer to the chat list, update prompt - chat.Add(new ChatMessage { role = role, content = content }); - } - - /// - /// Allows to add a player message in the chat history. - /// - /// message content - public virtual void AddPlayerMessage(string content) - { - AddMessage(playerName, content); - } - - /// - /// Allows to add a AI message in the chat history. - /// - /// message content - public virtual void AddAIMessage(string content) - { - AddMessage(AIName, content); - } - - protected virtual string ChatContent(ChatResult result) - { - // get content from a chat result received from the endpoint - return result.content.Trim(); - } - - protected virtual string MultiChatContent(MultiChatResult result) - { - // get content from a chat result received from the endpoint - string response = ""; - foreach (ChatResult resultPart in result.data) - { - response += resultPart.content; - } - return response.Trim(); - } - - protected virtual string SlotContent(SlotResult result) - { - // get the tokens from a tokenize result received from the endpoint - return result.filename; - } - - protected virtual string TemplateContent(TemplateResult result) - { - // get content from a char result received from the endpoint in open AI format - return result.template; - } - - protected virtual string ChatRequestToJson(ChatRequest request) - { - string json = JsonUtility.ToJson(request); - int grammarIndex = json.LastIndexOf('}'); - if (!String.IsNullOrEmpty(request.grammar)) - { - GrammarWrapper grammarWrapper = new GrammarWrapper { grammar = request.grammar }; - string grammarToJSON = JsonUtility.ToJson(grammarWrapper); - int start = grammarToJSON.IndexOf(":\"") + 2; - int end = grammarToJSON.LastIndexOf("\""); - string grammarSerialised = grammarToJSON.Substring(start, end - start); - json = json.Insert(grammarIndex, $",\"grammar\": \"{grammarSerialised}\""); - } - else if (!String.IsNullOrEmpty(request.json_schema)) - { - json = json.Insert(grammarIndex, $",\"json_schema\":{request.json_schema}"); - } - return json; - } - - protected virtual async Task CompletionRequest(ChatRequest request, Callback callback = null) - { - string json = ChatRequestToJson(request); - string result = ""; - if (stream) - { - result = await PostRequest(json, "completion", MultiChatContent, callback); - } - else - { - result = await PostRequest(json, "completion", ChatContent, callback); - } - return result; - } - - protected async Task PromptWithQuery(string query) - { - ChatRequest result = default; - await chatLock.WaitAsync(); - try - { - AddPlayerMessage(query); - string prompt = template.ComputePrompt(chat, playerName, AIName); - result = GenerateRequest(prompt); - chat.RemoveAt(chat.Count - 1); - } - finally - { - chatLock.Release(); - } - return result; - } - - /// - /// Chat functionality of the LLM. - /// It calls the LLM completion based on the provided query including the previous chat history. - /// The function allows callbacks when the response is partially or fully received. - /// The question is added to the history if specified. - /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// whether to add the user query to the chat history - /// the LLM response - public virtual async Task Chat(string query, Callback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) - { - // handle a chat message by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received - await LoadTemplate(); - if (!CheckTemplate()) return null; - if (!await InitNKeep()) return null; - - ChatRequest request = await PromptWithQuery(query); - string result = await CompletionRequest(request, callback); - - if (addToHistory && result != null) - { - await chatLock.WaitAsync(); - try - { - AddPlayerMessage(query); - AddAIMessage(result); - } - finally - { - chatLock.Release(); - } - if (save != "") _ = Save(save); - } - - completionCallback?.Invoke(); - return result; - } - - /// - /// Pure completion functionality of the LLM. - /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). - /// The function allows callbacks when the response is partially or fully received. - /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// the LLM response - public virtual async Task Complete(string prompt, Callback callback = null, EmptyCallback completionCallback = null) - { - // handle a completion request by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received - await LoadTemplate(); - - ChatRequest request = GenerateRequest(prompt); - string result = await CompletionRequest(request, callback); - completionCallback?.Invoke(); - return result; - } - - /// - /// Allow to warm-up a model by processing the system prompt. - /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. - /// The function allows a callback function for when the prompt is processed and the response received. - /// - /// callback function called when the full response has been received - /// the LLM response - public virtual async Task Warmup(EmptyCallback completionCallback = null) - { - await Warmup(null, completionCallback); - } - - /// - /// Allow to warm-up a model by processing the provided prompt without adding it to history. - /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. - /// The function allows a callback function for when the prompt is processed and the response received. - /// - /// - /// user prompt used during the initialisation (not added to history) - /// callback function called when the full response has been received - /// the LLM response - public virtual async Task Warmup(string query, EmptyCallback completionCallback = null) - { - await LoadTemplate(); - if (!CheckTemplate()) return; - if (!await InitNKeep()) return; - - ChatRequest request; - if (String.IsNullOrEmpty(query)) - { - string prompt = template.ComputePrompt(chat, playerName, AIName, false); - request = GenerateRequest(prompt); - } - else - { - request = await PromptWithQuery(query); - } - - request.n_predict = 0; - await CompletionRequest(request); - completionCallback?.Invoke(); - } - - /// - /// Asks the LLM for the chat template to use. - /// - /// the chat template of the LLM - public virtual async Task AskTemplate() - { - return await PostRequest("{}", "template", TemplateContent); - } - - protected override void CancelRequestsLocal() - { - if (slot >= 0) llm.CancelRequest(slot); - } - - protected virtual async Task Slot(string filepath, string action) - { - SlotRequest slotRequest = new SlotRequest(); - slotRequest.id_slot = slot; - slotRequest.filepath = filepath; - slotRequest.action = action; - string json = JsonUtility.ToJson(slotRequest); - return await PostRequest(json, "slots", SlotContent); - } - - /// - /// Saves the chat history and cache to the provided filename / relative path. - /// - /// filename / relative path to save the chat history - /// - public virtual async Task Save(string filename) - { - string filepath = GetJsonSavePath(filename); - string dirname = Path.GetDirectoryName(filepath); - if (!Directory.Exists(dirname)) Directory.CreateDirectory(dirname); - string json = JsonUtility.ToJson(new ChatListWrapper { chat = chat.GetRange(1, chat.Count - 1) }); - File.WriteAllText(filepath, json); - - string cachepath = GetCacheSavePath(filename); - if (remote || !saveCache) return null; - string result = await Slot(cachepath, "save"); - return result; - } - - /// - /// Load the chat history and cache from the provided filename / relative path. - /// - /// filename / relative path to load the chat history from - /// - public virtual async Task Load(string filename) - { - string filepath = GetJsonSavePath(filename); - if (!File.Exists(filepath)) - { - LLMUnitySetup.LogError($"File {filepath} does not exist."); - return null; - } - string json = File.ReadAllText(filepath); - List chatHistory = JsonUtility.FromJson(json).chat; - ClearChat(); - chat.AddRange(chatHistory); - LLMUnitySetup.Log($"Loaded {filepath}"); - - string cachepath = GetCacheSavePath(filename); - if (remote || !saveCache || !File.Exists(GetSavePath(cachepath))) return null; - string result = await Slot(cachepath, "restore"); - return result; - } - - protected override async Task PostRequestLocal(string json, string endpoint, ContentCallback getContent, Callback callback = null) - { - if (endpoint != "completion") return await base.PostRequestLocal(json, endpoint, getContent, callback); - - while (!llm.failed && !llm.started) await Task.Yield(); - - string callResult = null; - bool callbackCalled = false; - if (llm.embeddingsOnly) LLMUnitySetup.LogError("The LLM can't be used for completion, only for embeddings"); - else - { - Callback callbackString = null; - if (stream && callback != null) - { - if (typeof(Ret) == typeof(string)) - { - callbackString = (strArg) => - { - callback(ConvertContent(strArg, getContent)); - }; - } - else - { - LLMUnitySetup.LogError($"wrong callback type, should be string"); - } - callbackCalled = true; - } - callResult = await llm.Completion(json, callbackString); - } - - Ret result = ConvertContent(callResult, getContent); - if (!callbackCalled) callback?.Invoke(result); - return result; - } - } - - /// \cond HIDE - [Serializable] - public class ChatListWrapper - { - public List chat; - } - /// \endcond + public class LLMCharacter : LLMUnity.LLMAgent + {} } diff --git a/Runtime/LLMChatTemplates.cs b/Runtime/LLMChatTemplates.cs deleted file mode 100644 index 2919f56c..00000000 --- a/Runtime/LLMChatTemplates.cs +++ /dev/null @@ -1,710 +0,0 @@ -/// @file -/// @brief File implementing the chat templates. -using System.Collections.Generic; -using System.IO; - -namespace LLMUnity -{ - /// @ingroup template - /// - /// Class implementing the skeleton of a chat template - /// - public abstract class ChatTemplate - { - /// the default template used when it can't be determined ("chatml") - public static string DefaultTemplate; - /// a dictionary from chat template name to chat template type. - /// It can be used to get the chat template names supported with: - /// \code - /// ChatTemplate.templates.Keys - /// \endcode - /// - public static Dictionary templates; - /// \cond HIDE - public static ChatTemplate[] templateClasses; - public static Dictionary templatesDescription; - public static Dictionary modelTemplates; - public static Dictionary chatTemplates; - /// \endcond - - static ChatTemplate() - { - DefaultTemplate = "chatml"; - - templateClasses = new ChatTemplate[] - { - new ChatMLTemplate(), - new AlpacaTemplate(), - new GemmaTemplate(), - new MistralChatTemplate(), - new MistralInstructTemplate(), - new LLama3ChatTemplate(), - new LLama2ChatTemplate(), - new LLama2Template(), - new Phi4MiniTemplate(), - new Phi4Template(), - new Phi3_5Template(), - new Phi3Template(), - new Phi2Template(), - new DeepSeekR1Template(), - new DeepSeekV3Template(), - new DeepSeekV2Template(), - new VicunaTemplate(), - new ZephyrTemplate(), - new Qwen3Template(), - new BitNetTemplate(), - }; - - templates = new Dictionary(); - templatesDescription = new Dictionary(); - modelTemplates = new Dictionary(); - chatTemplates = new Dictionary(); - foreach (ChatTemplate template in templateClasses) - { - if (templates.ContainsKey(template.GetName())) LLMUnitySetup.LogError($"{template.GetName()} already in templates"); - templates[template.GetName()] = template; - if (templatesDescription.ContainsKey(template.GetDescription())) LLMUnitySetup.LogError($"{template.GetDescription()} already in templatesDescription"); - templatesDescription[template.GetDescription()] = template.GetName(); - foreach (string match in template.GetNameMatches()) - { - if (modelTemplates.ContainsKey(match)) LLMUnitySetup.LogError($"Name for {template.GetName()} already in modelTemplates"); - modelTemplates[match] = template.GetName(); - } - foreach (string match in template.GetChatTemplateMatches()) - { - if (chatTemplates.ContainsKey(match)) LLMUnitySetup.LogError($"Chat template for {template.GetName()} already in chatTemplates"); - chatTemplates[match] = template.GetName(); - } - } - } - - /// - /// Determines the chat template name from a search name. - /// It searches if any of the chat template names is a substring of the provided name. - /// - /// search name - /// chat template name - public static string FromName(string name) - { - if (name == null) return null; - string nameLower = name.ToLower(); - int maxMatch = 0; - string match = null; - foreach (var pair in modelTemplates) - { - if (nameLower.Contains(pair.Key) && pair.Key.Length > maxMatch) - { - maxMatch = pair.Key.Length; - match = pair.Value; - } - } - return match; - } - - /// - /// Determines the chat template name from a Jinja template. - /// - /// Jinja template - /// chat template name - public static string FromTemplate(string template) - { - if (template == null) return null; - string templateTrim = template.Trim(); - if (chatTemplates.TryGetValue(templateTrim, out string value)) - return value; - return null; - } - - /// - /// Determines the chat template name from a GGUF file. - /// It reads the GGUF file and then determines the chat template name based on: - /// - the jinja template defined in the file (if it exists and matched) - /// - the model name defined in the file (if it exists and matched) - /// - the filename defined in the file (if matched) - /// - otherwises uses the DefaultTemplate - /// - /// GGUF file path - /// template name - public static string FromGGUF(string path) - { - return FromGGUF(new GGUFReader(path), path); - } - - public static string FromGGUF(GGUFReader reader, string path) - { - string name; - name = FromTemplate(reader.GetStringField("tokenizer.chat_template")); - if (name != null) return name; - - name = FromName(reader.GetStringField("general.name")); - if (name != null) return name; - - name = FromName(Path.GetFileNameWithoutExtension(path)); - if (name != null) return name; - - LLMUnitySetup.Log("No chat template could be matched, fallback to ChatML"); - return DefaultTemplate; - } - - /// - /// Creates the chat template based on the provided chat template name - /// - /// chat template name - /// chat template - public static ChatTemplate GetTemplate(string template) - { - return templates[template]; - } - - /// Returns the chat template name - public virtual string GetName() { return ""; } - /// Returns the chat template description - public virtual string GetDescription() { return ""; } - /// Returns an array of names that can be used to match the chat template - public virtual string[] GetNameMatches() { return new string[] {}; } - /// Returns an array of jinja templates that can be used to match the chat template - public virtual string[] GetChatTemplateMatches() { return new string[] {}; } - /// Returns an array of the stopwords used by the template - public virtual string[] GetStop(string playerName, string AIName) { return new string[] {}; } - - protected virtual string PromptPrefix() { return ""; } - protected virtual string SystemPrefix() { return ""; } - protected virtual string SystemSuffix() { return ""; } - protected virtual string PlayerPrefix(string playerName) { return ""; } - protected virtual string AIPrefix(string AIName) { return ""; } - protected virtual string PrefixMessageSeparator() { return ""; } - protected virtual string RequestPrefix() { return ""; } - protected virtual string RequestSuffix() { return ""; } - protected virtual string PairSuffix() { return ""; } - - protected virtual bool SystemPromptSupported() { return true; } - protected virtual bool HasThinkingMode() { return false; } - - /// Constructs the prompt using the template based on a list of ChatMessages - /// list of ChatMessages e.g. the LLMCharacter chat - /// the AI name - /// whether to end the prompt with the AI prefix - /// prompt - public virtual string ComputePrompt(List chatMessages, string playerName, string AIName, bool endWithPrefix = true) - { - List messages = chatMessages; - if (!SystemPromptSupported()) - { - if (chatMessages[0].role == "system") - { - string firstUserMessage = chatMessages[0].content; - int newStart = 1; - if (chatMessages.Count > 1) - { - if (firstUserMessage != "") firstUserMessage += "\n\n"; - firstUserMessage += chatMessages[1].content; - newStart = 2; - } - messages = new List(){new ChatMessage { role = playerName, content = firstUserMessage }}; - messages.AddRange(chatMessages.GetRange(newStart, chatMessages.Count - newStart)); - } - } - - string chatPrompt = PromptPrefix(); - int start = 0; - if (messages[0].role == "system") - { - chatPrompt += RequestPrefix() + SystemPrefix() + messages[0].content + SystemSuffix(); - start = 1; - } - for (int i = start; i < messages.Count; i += 2) - { - if (i > start || start == 0) chatPrompt += RequestPrefix(); - chatPrompt += PlayerPrefix(messages[i].role) + PrefixMessageSeparator() + messages[i].content + RequestSuffix(); - if (i < messages.Count - 1) - { - chatPrompt += AIPrefix(messages[i + 1].role) + PrefixMessageSeparator() + messages[i + 1].content + PairSuffix(); - } - } - if (endWithPrefix) - { - chatPrompt += AIPrefix(AIName); - if (HasThinkingMode()) chatPrompt += "\n\n\n\n"; - } - return chatPrompt; - } - - protected string[] AddStopNewlines(string[] stop) - { - List stopWithNewLines = new List(); - foreach (string stopword in stop) - { - stopWithNewLines.Add(stopword); - stopWithNewLines.Add("\n" + stopword); - } - return stopWithNewLines.ToArray(); - } - } - - /// @ingroup template - /// - /// Class implementing the ChatML template - /// - public class ChatMLTemplate : ChatTemplate - { - public override string GetName() { return "chatml"; } - public override string GetDescription() { return "chatml (generic template)"; } - public override string[] GetNameMatches() { return new string[] {"chatml", "hermes", "qwen"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% for message in messages %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}"}; } - - protected override string SystemPrefix() { return "<|im_start|>system\n"; } - protected override string SystemSuffix() { return "<|im_end|>\n"; } - protected override string PlayerPrefix(string playerName) { return $"<|im_start|>{playerName}\n"; } - protected override string AIPrefix(string AIName) { return $"<|im_start|>{AIName}\n"; } - protected override string RequestSuffix() { return "<|im_end|>\n"; } - protected override string PairSuffix() { return "<|im_end|>\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|im_start|>", "<|im_end|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the LLama2 template - /// - public class LLama2Template : ChatTemplate - { - public override string GetName() { return "llama"; } - public override string GetDescription() { return "llama 2"; } - - protected override string SystemPrefix() { return "<>\n"; } - protected override string SystemSuffix() { return "\n<> "; } - protected override string RequestPrefix() { return "[INST] "; } - protected override string RequestSuffix() { return " [/INST]"; } - protected override string PairSuffix() { return " "; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "[INST]", "[/INST]" }); - } - } - - /// @ingroup template - /// - /// Class implementing a modified version of the LLama2 template for chat - /// - public class LLama2ChatTemplate : LLama2Template - { - public override string GetName() { return "llama chat"; } - public override string GetDescription() { return "llama 2 (chat)"; } - public override string[] GetNameMatches() { return new string[] {"llama-2", "llama v2"}; } - - protected override string PlayerPrefix(string playerName) { return "### " + playerName + ":"; } - protected override string AIPrefix(string AIName) { return "### " + AIName + ":"; } - protected override string PrefixMessageSeparator() { return " "; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "[INST]", "[/INST]", "###" }); - } - } - - /// @ingroup template - /// - /// Class implementing the LLama3 template for chat - /// - public class LLama3ChatTemplate : ChatTemplate - { - public override string GetName() { return "llama3 chat"; } - public override string GetDescription() { return "llama 3 (chat)"; } - public override string[] GetNameMatches() { return new string[] {"llama-3", "llama v3"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n'+ message['content'] | trim + '<|eot_id|>' %}{% if loop.index0 == 0 %}{% set content = bos_token + content %}{% endif %}{{ content }}{% endfor %}{{ '<|start_header_id|>assistant<|end_header_id|>\n\n' }}"};} - - protected override string SystemPrefix() { return "<|start_header_id|>system<|end_header_id|>\n\n"; } - protected override string SystemSuffix() { return "<|eot_id|>"; } - - protected override string RequestSuffix() { return "<|eot_id|>"; } - protected override string PairSuffix() { return "<|eot_id|>"; } - - protected override string PlayerPrefix(string playerName) { return $"<|start_header_id|>{playerName}<|end_header_id|>\n\n"; } - protected override string AIPrefix(string AIName) { return $"<|start_header_id|>{AIName}<|end_header_id|>\n\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|eot_id|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Mistral Instruct template - /// - public class MistralInstructTemplate : ChatTemplate - { - public override string GetName() { return "mistral instruct"; } - public override string GetDescription() { return "mistral instruct"; } - - protected override string SystemPrefix() { return ""; } - protected override string SystemSuffix() { return "\n\n"; } - protected override string RequestPrefix() { return "[INST] "; } - protected override string RequestSuffix() { return " [/INST]"; } - protected override string PairSuffix() { return ""; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "", "[INST]", "[/INST]" }); - } - } - - /// @ingroup template - /// - /// Class implementing a modified version of the Mistral Instruct template for chat - /// - public class MistralChatTemplate : MistralInstructTemplate - { - public override string GetName() { return "mistral chat"; } - public override string GetDescription() { return "mistral (chat)"; } - public override string[] GetNameMatches() { return new string[] {"mistral"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if message['role'] == 'user' %}{{ '[INST] ' + message['content'] + ' [/INST]' }}{% elif message['role'] == 'assistant' %}{{ message['content'] + eos_token}}{% else %}{{ raise_exception('Only user and assistant roles are supported!') }}{% endif %}{% endfor %}"}; } - - protected override string PlayerPrefix(string playerName) { return "### " + playerName + ":"; } - protected override string AIPrefix(string AIName) { return "### " + AIName + ":"; } - protected override string PrefixMessageSeparator() { return " "; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "", "[INST]", "[/INST]", "###" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Gemma template - /// - public class GemmaTemplate : ChatTemplate - { - public override string GetName() { return "gemma"; } - public override string GetDescription() { return "gemma"; } - public override string[] GetNameMatches() { return new string[] {"gemma"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{{ bos_token }}{% if messages[0]['role'] == 'system' %}{{ raise_exception('System role not supported') }}{% endif %}{% for message in messages %}{% if (message['role'] == 'user') != (loop.index0 % 2 == 0) %}{{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}{% endif %}{% if (message['role'] == 'assistant') %}{% set role = 'model' %}{% else %}{% set role = message['role'] %}{% endif %}{{ '' + role + '\n' + message['content'] | trim + '\n' }}{% endfor %}{% if add_generation_prompt %}{{'model\n'}}{% endif %}"}; } - - protected override string RequestSuffix() { return "\n"; } - protected override string PairSuffix() { return "\n"; } - - protected override string PlayerPrefix(string playerName) { return "user\n"; } - protected override string AIPrefix(string AIName) { return "model\n"; } - - protected override bool SystemPromptSupported() { return false; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "", "" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Alpaca template - /// - public class AlpacaTemplate : ChatTemplate - { - public override string GetName() { return "alpaca"; } - public override string GetDescription() { return "alpaca (best alternative)"; } - public override string[] GetNameMatches() { return new string[] {"alpaca"}; } - - protected override string SystemSuffix() { return "\n\n"; } - protected override string RequestSuffix() { return "\n"; } - protected override string PlayerPrefix(string playerName) { return "### " + playerName + ":"; } - protected override string AIPrefix(string AIName) { return "### " + AIName + ":"; } - protected override string PrefixMessageSeparator() { return " "; } - protected override string PairSuffix() { return "\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "###" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Vicuna template - /// - public class VicunaTemplate : ChatTemplate - { - public override string GetName() { return "vicuna"; } - public override string GetDescription() { return "vicuna"; } - public override string[] GetNameMatches() { return new string[] {"vicuna"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% for message in messages %}{% if message['role'] == 'system' %}{{message['content'] + ' '}}{% elif message['role'] == 'user' %}{{ 'USER: ' + message['content'] + ' '}}{% elif message['role'] == 'assistant' %}{{ 'ASSISTANT: ' + message['content'] + ' '}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'ASSISTANT: '}}{% endif %}"}; } - - protected override string SystemSuffix() { return "\n"; } - protected override string PlayerPrefix(string playerName) { return "\n" + playerName + ":"; } - protected override string AIPrefix(string AIName) { return "\n" + AIName + ":"; } - protected override string PrefixMessageSeparator() { return " "; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { playerName + ":", AIName + ":" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Phi-2 template - /// - public class Phi2Template : ChatTemplate - { - public override string GetName() { return "phi"; } - public override string GetDescription() { return "phi-2"; } - public override string[] GetNameMatches() { return new string[] {"phi-2"}; } - - protected override string SystemSuffix() { return "\n\n"; } - protected override string RequestSuffix() { return "\n"; } - protected override string PlayerPrefix(string playerName) { return playerName + ":"; } - protected override string AIPrefix(string AIName) { return AIName + ":"; } - protected override string PrefixMessageSeparator() { return " "; } - protected override string PairSuffix() { return "\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { playerName + ":", AIName + ":" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Phi-3 template - /// - public class Phi3Template : ChatTemplate - { - public override string GetName() { return "phi-3"; } - public override string GetDescription() { return "phi-3"; } - public override string[] GetNameMatches() { return new string[] {"phi-3"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{{ bos_token }}{% for message in messages %}{% if (message['role'] == 'user') %}{{'<|user|>' + '\n' + message['content'] + '<|end|>' + '\n' + '<|assistant|>' + '\n'}}{% elif (message['role'] == 'assistant') %}{{message['content'] + '<|end|>' + '\n'}}{% endif %}{% endfor %}"}; } - - protected override string PlayerPrefix(string playerName) { return $"<|user|>\n"; } - protected override string AIPrefix(string AIName) { return $"<|assistant|>\n"; } - protected override string RequestSuffix() { return "<|end|>\n"; } - protected override string PairSuffix() { return "<|end|>\n"; } - - protected override bool SystemPromptSupported() { return false; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end|>", "<|user|>", "<|assistant|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Phi-4 mini template - /// - public class Phi3_5Template : ChatTemplate - { - public override string GetName() { return "phi-3.5"; } - public override string GetDescription() { return "phi-3.5"; } - public override string[] GetNameMatches() { return new string[] {"phi-3.5"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% for message in messages %}{% if message['role'] == 'system' and message['content'] %}{{'<|system|>\n' + message['content'] + '<|end|>\n'}}{% elif message['role'] == 'user' %}{{'<|user|>\n' + message['content'] + '<|end|>\n'}}{% elif message['role'] == 'assistant' %}{{'<|assistant|>\n' + message['content'] + '<|end|>\n'}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>\n' }}{% else %}{{ eos_token }}{% endif %}"};} - - protected override string PlayerPrefix(string playerName) { return $"<|user|>\n"; } - protected override string AIPrefix(string AIName) { return $"<|assistant|>\n"; } - protected override string RequestSuffix() { return "<|end|>\n"; } - protected override string PairSuffix() { return "<|end|>\n"; } - protected override string SystemPrefix() { return "<|system|>\n"; } - protected override string SystemSuffix() { return "<|end|>\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end|>", "<|user|>", "<|assistant|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Phi-4 mini template - /// - public class Phi4MiniTemplate : ChatTemplate - { - public override string GetName() { return "phi-4-mini"; } - public override string GetDescription() { return "phi-4-mini"; } - public override string[] GetNameMatches() { return new string[] {"phi-4-mini"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% for message in messages %}{% if message['role'] == 'system' and 'tools' in message and message['tools'] is not none %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|tool|>' + message['tools'] + '<|/tool|>' + '<|end|>' }}{% else %}{{ '<|' + message['role'] + '|>' + message['content'] + '<|end|>' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|assistant|>' }}{% else %}{{ eos_token }}{% endif %}"};} - - protected override string PlayerPrefix(string playerName) { return $"<|user|>"; } - protected override string AIPrefix(string AIName) { return $"<|assistant|>"; } - protected override string RequestSuffix() { return "<|end|>"; } - protected override string PairSuffix() { return "<|end|>"; } - protected override string SystemPrefix() { return "<|system|>"; } - protected override string SystemSuffix() { return "<|end|>"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end|>", "<|user|>", "<|assistant|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Phi-4 template - /// - public class Phi4Template : ChatTemplate - { - public override string GetName() { return "phi-4"; } - public override string GetDescription() { return "phi-4"; } - public override string[] GetNameMatches() { return new string[] {"phi-4"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% for message in messages %}{% if (message['role'] == 'system') %}{{'<|im_start|>system<|im_sep|>' + message['content'] + '<|im_end|>'}}{% elif (message['role'] == 'user') %}{{'<|im_start|>user<|im_sep|>' + message['content'] + '<|im_end|>'}}{% elif (message['role'] == 'assistant') %}{{'<|im_start|>assistant<|im_sep|>' + message['content'] + '<|im_end|>'}}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant<|im_sep|>' }}{% endif %}"};} - - protected override string PlayerPrefix(string playerName) { return $"<|im_start|>user<|im_sep|>"; } - protected override string AIPrefix(string AIName) { return $"<|im_start|>assistant<|im_sep|>"; } - protected override string RequestSuffix() { return "<|im_end|>"; } - protected override string PairSuffix() { return "<|im_end|>"; } - protected override string SystemPrefix() { return "<|im_start|>system<|im_sep|>"; } - protected override string SystemSuffix() { return "<|im_end|>"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|im_end|>", "<|im_start|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the Zephyr template - /// - public class ZephyrTemplate : ChatTemplate - { - public override string GetName() { return "zephyr"; } - public override string GetDescription() { return "zephyr"; } - public override string[] GetNameMatches() { return new string[] {"zephyr"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% for message in messages %}\n{% if message['role'] == 'user' %}\n{{ '<|user|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'system' %}\n{{ '<|system|>\n' + message['content'] + eos_token }}\n{% elif message['role'] == 'assistant' %}\n{{ '<|assistant|>\n' + message['content'] + eos_token }}\n{% endif %}\n{% if loop.last and add_generation_prompt %}\n{{ '<|assistant|>' }}\n{% endif %}\n{% endfor %}"}; } - - protected override string SystemPrefix() { return "<|system|>\n"; } - protected override string SystemSuffix() { return "\n"; } - protected override string PlayerPrefix(string playerName) { return $"<|user|>\n"; } - protected override string AIPrefix(string AIName) { return $"<|assistant|>\n"; } - protected override string RequestSuffix() { return "\n"; } - protected override string PairSuffix() { return "\n"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { $"<|user|>", $"<|assistant|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the DeepSeek V2 template - /// - public class DeepSeekV2Template : ChatTemplate - { - public override string GetName() { return "deepseek-v2"; } - public override string GetDescription() { return "deepseek-v2"; } - public override string[] GetNameMatches() { return new string[] {"deepseek-v2", "deepseek-llm"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{{ bos_token }}{% for message in messages %}{% if message['role'] == 'user' %}{{ 'User: ' + message['content'] + '\n\n' }}{% elif message['role'] == 'assistant' %}{{ 'Assistant: ' + message['content'] + eos_token }}{% elif message['role'] == 'system' %}{{ message['content'] + '\n\n' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ 'Assistant:' }}{% endif %}"}; } - - protected override string PrefixMessageSeparator() { return " "; } - protected override string PromptPrefix() { return "<|begin▁of▁sentence|>"; } - protected override string PlayerPrefix(string playerName) { return "User:"; } - protected override string AIPrefix(string AIName) { return "Assistant:"; } - protected override string PairSuffix() { return "<|end▁of▁sentence|>"; } - protected override string RequestSuffix() { return "\n\n"; } - protected override string SystemSuffix() { return "\n\n"; } - - // protected override bool SystemPromptSupported() { return false; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end▁of▁sentence|>", "User:", "Assistant:" }); - } - } - - /// @ingroup template - /// - /// Class implementing the DeepSeek V3 template - /// - public class DeepSeekV3Template : DeepSeekV2Template - { - public override string GetName() { return "deepseek-v3"; } - public override string GetDescription() { return "deepseek-v3"; } - public override string[] GetNameMatches() { return new string[] {"deepseek-v2.5", "deepseek-v3"}; } - public override string[] GetChatTemplateMatches() - { - return new string[] - { - "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{{'<|Assistant|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}", - "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{{'<|Assistant|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}" - }; - } - - protected override string PrefixMessageSeparator() { return ""; } - protected override string PlayerPrefix(string playerName) { return "<|User|>"; } - protected override string AIPrefix(string AIName) { return "<|Assistant|>"; } - protected override string RequestSuffix() { return ""; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end▁of▁sentence|>", "<|User|>", "<|Assistant|>" }); - } - } - - /// @ingroup template - /// - /// Class implementing the DeepSeek R1 template - /// - public class DeepSeekR1Template : DeepSeekV3Template - { - public override string GetName() { return "deepseek-r1"; } - public override string GetDescription() { return "deepseek-r1"; } - public override string[] GetNameMatches() { return new string[] {"deepseek-r1"}; } - public override string[] GetChatTemplateMatches() - { - return new string[] - { - "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\\n\\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and 'tool_calls' in message %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- else %}{{'<|Assistant|>' + message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and 'tool_calls' not in message %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '' in content %}{% set content = content.split('')[-1] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>\\n'}}{% endif %}", - "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}{%- for message in messages %}{%- if message['role'] == 'system' %}{% set ns.system_prompt = message['content'] %}{%- endif %}{%- endfor %}{{bos_token}}{{ns.system_prompt}}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is none %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls']%}{%- if not ns.is_first %}{{'<|Assistant|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{% if '' in content %}{% set content = content.split('')[-1] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_tool %}{{'<|Assistant|>\\n'}}{% endif %}" - }; - } - - protected override bool HasThinkingMode() { return true; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|end▁of▁sentence|>", "<|User|>", "<|Assistant|>", "" }); - } - } - - - /// @ingroup template - /// - /// Class implementing the Qwen3 template - /// - public class Qwen3Template : ChatMLTemplate - { - public override string GetName() { return "qwen3"; } - public override string GetDescription() { return "qwen3"; } - public override string[] GetNameMatches() { return new string[] { "qwen3" }; } - public override string[] GetChatTemplateMatches() { return new string[] { "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for forward_message in messages %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- set message = messages[index] %}\n {%- set tool_start = '' %}\n {%- set tool_start_length = tool_start|length %}\n {%- set start_of_message = message.content[:tool_start_length] %}\n {%- set tool_end = '' %}\n {%- set tool_end_length = tool_end|length %}\n {%- set start_pos = (message.content|length) - tool_end_length %}\n {%- if start_pos < 0 %}\n {%- set start_pos = 0 %}\n {%- endif %}\n {%- set end_of_message = message.content[start_pos:] %}\n {%- if ns.multi_step_tool and message.role == \"user\" and not(start_of_message == tool_start and end_of_message == tool_end) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set content = message.content %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is defined and message.reasoning_content is not none %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in message.content %}\n {%- set content = (message.content.split('')|last).lstrip('\\n') %}\n {%- set reasoning_content = (message.content.split('')|first).rstrip('\\n') %}\n {%- set reasoning_content = (reasoning_content.split('')|last).lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content.strip('\\n') + '\\n\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- message.content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}" }; } - - protected override bool HasThinkingMode() { return true; } - } - - /// @ingroup template - /// - /// Class implementing the BitNet template - /// - public class BitNetTemplate : ChatTemplate - { - public override string GetName() { return "bitnet"; } - public override string GetDescription() { return "bitnet"; } - public override string[] GetNameMatches() { return new string[] {"bitnet"}; } - public override string[] GetChatTemplateMatches() { return new string[] {"{% set loop_messages = messages %}{% for message in loop_messages %}{% set content = message['role'] | capitalize + ': '+ message['content'] | trim + '<|eot_id|>' %}{{ content }}{% endfor %}{% if add_generation_prompt %}{{ 'Assistant: ' }}{% endif %}"};} - - protected override string PlayerPrefix(string playerName) { return "User: "; } - protected override string AIPrefix(string AIName) { return "Assistant: "; } - protected override string RequestSuffix() { return "<|eot_id|>"; } - protected override string PairSuffix() { return "<|eot_id|>"; } - protected override string SystemPrefix() { return "System: "; } - protected override string SystemSuffix() { return "<|eot_id|>"; } - - public override string[] GetStop(string playerName, string AIName) - { - return AddStopNewlines(new string[] { "<|eot_id|>", "User", "Assistant" }); - } - } -} diff --git a/Runtime/LLMInterface.cs b/Runtime/LLMInterface.cs deleted file mode 100644 index 748131ff..00000000 --- a/Runtime/LLMInterface.cs +++ /dev/null @@ -1,158 +0,0 @@ -/// @file -/// @brief File implementing the LLM server interfaces. -using System; -using System.Collections.Generic; - -/// \cond HIDE -namespace LLMUnity -{ - [Serializable] - public struct ChatRequest - { - public string prompt; - public int id_slot; - public float temperature; - public int top_k; - public float top_p; - public float min_p; - public int n_predict; - public int n_keep; - public bool stream; - public List stop; - public float tfs_z; - public float typical_p; - public float repeat_penalty; - public int repeat_last_n; - public bool penalize_nl; - public float presence_penalty; - public float frequency_penalty; - public string penalty_prompt; - public int mirostat; - public float mirostat_tau; - public float mirostat_eta; - // EXCLUDE grammars from JsonUtility serialization, serialise them manually - [NonSerialized] public string grammar; - [NonSerialized] public string json_schema; - public int seed; - public bool ignore_eos; - public Dictionary logit_bias; - public int n_probs; - public bool cache_prompt; - public List messages; - } - - [Serializable] - public struct GrammarWrapper - { - public string grammar; - } - - [Serializable] - public struct SystemPromptRequest - { - public string prompt; - public string system_prompt; - public int n_predict; - } - - [Serializable] - public struct ChatResult - { - public int id_slot; - public string content; - public bool stop; - public string generation_settings; - public string model; - public string prompt; - public bool stopped_eos; - public bool stopped_limit; - public bool stopped_word; - public string stopping_word; - public string timings; - public int tokens_cached; - public int tokens_evaluated; - public bool truncated; - public bool cache_prompt; - public bool system_prompt; - } - - [Serializable] - public struct MultiChatResult - { - public List data; - } - - [Serializable] - public struct ChatMessage - { - public string role; - public string content; - } - - [Serializable] - public struct TokenizeRequest - { - public string content; - } - - [Serializable] - public struct TokenizeResult - { - public List tokens; - } - - [Serializable] - public struct EmbeddingsResult - { - public List embedding; - } - - [Serializable] - public struct LoraWeightRequest - { - public int id; - public float scale; - } - - [Serializable] - public struct LoraWeightRequestList - { - public List loraWeights; - } - - [Serializable] - public struct LoraWeightResult - { - public int id; - public string path; - public float scale; - } - - [Serializable] - public struct LoraWeightResultList - { - public List loraWeights; - } - - [Serializable] - public struct TemplateResult - { - public string template; - } - - [Serializable] - public struct SlotRequest - { - public int id_slot; - public string action; - public string filepath; - } - - [Serializable] - public struct SlotResult - { - public int id_slot; - public string filename; - } -} -/// \endcond diff --git a/Runtime/LLMInterface.cs.meta b/Runtime/LLMInterface.cs.meta deleted file mode 100644 index 66038d3a..00000000 --- a/Runtime/LLMInterface.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3c7da7ca2b36d79e99acecc300de2902 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/LLMManager.cs b/Runtime/LLMManager.cs index 238fa80c..98813062 100644 --- a/Runtime/LLMManager.cs +++ b/Runtime/LLMManager.cs @@ -20,7 +20,6 @@ public class ModelEntry public string filename; public string path; public bool lora; - public string chatTemplate; public string url; public bool embeddingOnly; public int embeddingLength; @@ -60,7 +59,6 @@ public ModelEntry(string path, bool lora = false, string label = null, string ur this.path = LLMUnitySetup.GetFullPath(path); this.url = url; includeInBuild = true; - chatTemplate = null; contextLength = -1; embeddingOnly = false; embeddingLength = 0; @@ -74,7 +72,6 @@ public ModelEntry(string path, bool lora = false, string label = null, string ur embeddingLength = reader.GetIntField($"{arch}.embedding_length"); } embeddingOnly = embeddingOnlyArchs.Contains(arch); - chatTemplate = embeddingOnly ? default : ChatTemplate.FromGGUF(reader, this.path); } } @@ -205,34 +202,6 @@ public static async Task SetupOnce() return true; } - /// - /// Sets the chat template for a model and distributes it to all LLMs using it - /// - /// model path - /// chat template - public static void SetTemplate(string filename, string chatTemplate) - { - SetTemplate(Get(filename), chatTemplate); - } - - /// - /// Sets the chat template for a model and distributes it to all LLMs using it - /// - /// model entry - /// chat template - public static void SetTemplate(ModelEntry entry, string chatTemplate) - { - if (entry == null) return; - entry.chatTemplate = chatTemplate; - foreach (LLM llm in llms) - { - if (llm != null && llm.model == entry.filename) llm.SetTemplate(chatTemplate); - } -#if UNITY_EDITOR - Save(); -#endif - } - /// /// Gets the model entry for a model path /// diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index 512b39b7..86b16d5a 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -175,6 +175,7 @@ public class LLMUnitySetup public enum DebugModeType { + Debug, All, Warning, Error, diff --git a/Runtime/RAG/Chunking.cs b/Runtime/RAG/Chunking.cs index 4040e663..094b4b2b 100644 --- a/Runtime/RAG/Chunking.cs +++ b/Runtime/RAG/Chunking.cs @@ -37,7 +37,7 @@ public void ReturnChunks(bool returnChunks) /// /// phrase /// List of start/end indices of the split chunks - public abstract Task> Split(string input); + public abstract List<(int, int)> Split(string input); /// /// Retrieves the phrase with the specific id @@ -60,15 +60,15 @@ public override string Get(int key) /// input phrase /// data group to add it to /// phrase id - public override async Task Add(string inputString, string group = "") + public override int Add(string inputString, string group = "") { int key = nextKey++; // sentence -> phrase List sentenceIds = new List(); - foreach ((int startIndex, int endIndex) in await Split(inputString)) + foreach ((int startIndex, int endIndex) in Split(inputString)) { string sentenceText = inputString.Substring(startIndex, endIndex - startIndex + 1); - int sentenceId = await search.Add(sentenceText, group); + int sentenceId = search.Add(sentenceText, group); sentenceIds.Add(sentenceId); sentenceToPhrase[sentenceId] = key; @@ -166,9 +166,9 @@ public override int Count(string group) /// search query /// data group to search in /// incremental search key - public override async Task IncrementalSearch(string queryString, string group = "") + public override int IncrementalSearch(string queryString, string group = "") { - return await search.IncrementalSearch(queryString, group); + return search.IncrementalSearch(queryString, group); } /// diff --git a/Runtime/RAG/RAG.cs b/Runtime/RAG/RAG.cs index a1b26183..d83e57ca 100644 --- a/Runtime/RAG/RAG.cs +++ b/Runtime/RAG/RAG.cs @@ -117,13 +117,13 @@ public virtual void OnValidate() #endif public override string Get(int key) { return GetSearcher().Get(key); } - public override async Task Add(string inputString, string group = "") { return await GetSearcher().Add(inputString, group); } + public override int Add(string inputString, string group = "") { return GetSearcher().Add(inputString, group); } public override int Remove(string inputString, string group = "") { return GetSearcher().Remove(inputString, group); } public override void Remove(int key) { GetSearcher().Remove(key); } public override int Count() { return GetSearcher().Count(); } public override int Count(string group) { return GetSearcher().Count(group); } public override void Clear() { GetSearcher().Clear(); } - public override async Task IncrementalSearch(string queryString, string group = "") { return await GetSearcher().IncrementalSearch(queryString, group);} + public override int IncrementalSearch(string queryString, string group = "") { return GetSearcher().IncrementalSearch(queryString, group);} public override (string[], float[], bool) IncrementalFetch(int fetchKey, int k) { return GetSearcher().IncrementalFetch(fetchKey, k);} public override (int[], float[], bool) IncrementalFetchKeys(int fetchKey, int k) { return GetSearcher().IncrementalFetchKeys(fetchKey, k);} public override void IncrementalSearchComplete(int fetchKey) { GetSearcher().IncrementalSearchComplete(fetchKey);} diff --git a/Runtime/RAG/Search.cs b/Runtime/RAG/Search.cs index 249beafb..84e4938f 100644 --- a/Runtime/RAG/Search.cs +++ b/Runtime/RAG/Search.cs @@ -33,7 +33,7 @@ public abstract class Searchable : MonoBehaviour /// input phrase /// data group to add it to /// phrase id - public abstract Task Add(string inputString, string group = ""); + public abstract int Add(string inputString, string group = ""); /// /// Removes a phrase from the search. @@ -73,7 +73,7 @@ public abstract class Searchable : MonoBehaviour /// search query /// data group to search in /// incremental search key - public abstract Task IncrementalSearch(string queryString, string group = ""); + public abstract int IncrementalSearch(string queryString, string group = ""); /// /// Retrieves the most similar search results in batches (incremental search). @@ -112,9 +112,9 @@ public abstract class Searchable : MonoBehaviour /// `bool` indicating if the search is exhausted. /// /// - public async Task<(string[], float[])> Search(string queryString, int k, string group = "") + public (string[], float[]) Search(string queryString, int k, string group = "") { - int fetchKey = await IncrementalSearch(queryString, group); + int fetchKey = IncrementalSearch(queryString, group); (string[] phrases, float[] distances, bool completed) = IncrementalFetch(fetchKey, k); if (!completed) IncrementalSearchComplete(fetchKey); return (phrases, distances); @@ -290,11 +290,11 @@ public void SetLLM(LLM llm) /// Array of distances for each result (`float[]`). /// /// - public async Task<(string[], float[])> SearchFromList(string query, string[] searchList) + public (string[], float[]) SearchFromList(string query, string[] searchList) { - float[] embedding = await Encode(query); + float[] embedding = Encode(query); float[][] embeddingsList = new float[searchList.Length][]; - for (int i = 0; i < searchList.Length; i++) embeddingsList[i] = await Encode(searchList[i]); + for (int i = 0; i < searchList.Length; i++) embeddingsList[i] = Encode(searchList[i]); float[] unsortedDistances = InverseDotProduct(embedding, embeddingsList); List<(string, float)> sortedLists = searchList.Zip(unsortedDistances, (first, second) => (first, second)) @@ -339,19 +339,19 @@ public static float[] InverseDotProduct(float[] vector1, float[][] vector2) return results; } - public virtual async Task Encode(string inputString) + public virtual float[] Encode(string inputString) { - return (await llmEmbedder.Embeddings(inputString)).ToArray(); + return llmEmbedder.Embeddings(inputString).ToArray(); } - public virtual async Task> Tokenize(string query, Callback> callback = null) + public virtual List Tokenize(string query, Callback> callback = null) { - return await llmEmbedder.Tokenize(query, callback); + return llmEmbedder.Tokenize(query, callback); } - public async Task Detokenize(List tokens, Callback callback = null) + public virtual string Detokenize(List tokens, Callback callback = null) { - return await llmEmbedder.Detokenize(tokens, callback); + return llmEmbedder.Detokenize(tokens, callback); } public override string Get(int key) @@ -360,10 +360,10 @@ public override string Get(int key) return null; } - public override async Task Add(string inputString, string group = "") + public override int Add(string inputString, string group = "") { int key = nextKey++; - AddInternal(key, await Encode(inputString)); + AddInternal(key, Encode(inputString)); data[key] = inputString; if (!dataSplits.ContainsKey(group)) dataSplits[group] = new List(){key}; @@ -421,9 +421,9 @@ public override int Count(string group) return dataSplit.Count; } - public override async Task IncrementalSearch(string queryString, string group = "") + public override int IncrementalSearch(string queryString, string group = "") { - return IncrementalSearch(await Encode(queryString), group); + return IncrementalSearch(Encode(queryString), group); } public override void Save(ZipArchive archive) diff --git a/Runtime/RAG/SentenceSplitter.cs b/Runtime/RAG/SentenceSplitter.cs index 809300f0..3d46f938 100644 --- a/Runtime/RAG/SentenceSplitter.cs +++ b/Runtime/RAG/SentenceSplitter.cs @@ -25,30 +25,28 @@ public class SentenceSplitter : Chunking /// /// phrase /// List of start/end indices of the split chunks - public override async Task> Split(string input) + public override List<(int, int)> Split(string input) { List<(int, int)> indices = new List<(int, int)>(); - await Task.Run(() => { - int startIndex = 0; - bool seenChar = false; - for (int i = 0; i < input.Length; i++) + int startIndex = 0; + bool seenChar = false; + for (int i = 0; i < input.Length; i++) + { + bool isDelimiter = delimiters.Contains(input[i]); + if (isDelimiter) { - bool isDelimiter = delimiters.Contains(input[i]); - if (isDelimiter) - { - while ((i < input.Length - 1) && (delimiters.Contains(input[i + 1]) || char.IsWhiteSpace(input[i + 1]))) i++; - } - else - { - if (!seenChar) seenChar = !char.IsWhiteSpace(input[i]); - } - if ((i == input.Length - 1) || (isDelimiter && seenChar)) - { - indices.Add((startIndex, i)); - startIndex = i + 1; - } + while ((i < input.Length - 1) && (delimiters.Contains(input[i + 1]) || char.IsWhiteSpace(input[i + 1]))) i++; } - }); + else + { + if (!seenChar) seenChar = !char.IsWhiteSpace(input[i]); + } + if ((i == input.Length - 1) || (isDelimiter && seenChar)) + { + indices.Add((startIndex, i)); + startIndex = i + 1; + } + } return indices; } } diff --git a/Runtime/RAG/TokenSplitter.cs b/Runtime/RAG/TokenSplitter.cs index cb57313b..7abf563b 100644 --- a/Runtime/RAG/TokenSplitter.cs +++ b/Runtime/RAG/TokenSplitter.cs @@ -47,17 +47,17 @@ protected int DetermineEndIndex(string input, string detokenised, int startIndex /// /// phrase /// List of start/end indices of the split chunks - public override async Task> Split(string input) + public override List<(int, int)> Split(string input) { List<(int, int)> indices = new List<(int, int)>(); - List tokens = await search.Tokenize(input); + List tokens = search.Tokenize(input); if (tokens.Count == 0) return indices; int startIndex = 0; for (int i = 0; i < tokens.Count; i += numTokens) { int batchTokens = Math.Min(tokens.Count, i + numTokens) - i; - string detokenised = await search.Detokenize(tokens.GetRange(i, batchTokens)); + string detokenised = search.Detokenize(tokens.GetRange(i, batchTokens)); int endIndex = DetermineEndIndex(input, detokenised, startIndex); indices.Add((startIndex, endIndex)); startIndex = endIndex + 1; diff --git a/Runtime/RAG/WordSplitter.cs b/Runtime/RAG/WordSplitter.cs index 251bdff5..69fbb6ca 100644 --- a/Runtime/RAG/WordSplitter.cs +++ b/Runtime/RAG/WordSplitter.cs @@ -23,7 +23,7 @@ public class WordSplitter : Chunking /// /// phrase /// List of start/end indices of the split chunks - public override async Task> Split(string input) + public override List<(int, int)> Split(string input) { bool IsBoundary(char c) { @@ -31,27 +31,25 @@ bool IsBoundary(char c) } List<(int, int)> indices = new List<(int, int)>(); - await Task.Run(() => { - List<(int, int)> wordIndices = new List<(int, int)>(); - int startIndex = 0; - int endIndex; - for (int i = 0; i < input.Length; i++) + List<(int, int)> wordIndices = new List<(int, int)>(); + int startIndex = 0; + int endIndex; + for (int i = 0; i < input.Length; i++) + { + if (i == input.Length - 1 || IsBoundary(input[i])) { - if (i == input.Length - 1 || IsBoundary(input[i])) - { - while (i < input.Length - 1 && IsBoundary(input[i + 1])) i++; - endIndex = i; - wordIndices.Add((startIndex, endIndex)); - startIndex = i + 1; - } + while (i < input.Length - 1 && IsBoundary(input[i + 1])) i++; + endIndex = i; + wordIndices.Add((startIndex, endIndex)); + startIndex = i + 1; } + } - for (int i = 0; i < wordIndices.Count; i += numWords) - { - int iTo = Math.Min(wordIndices.Count - 1, i + numWords - 1); - indices.Add((wordIndices[i].Item1, wordIndices[iTo].Item2)); - } - }); + for (int i = 0; i < wordIndices.Count; i += numWords) + { + int iTo = Math.Min(wordIndices.Count - 1, i + numWords - 1); + indices.Add((wordIndices[i].Item1, wordIndices[iTo].Item2)); + } return indices; } } diff --git a/Samples~/ChatBot/ChatBot.cs b/Samples~/ChatBot/ChatBot.cs index ac2f893d..4f1027dd 100644 --- a/Samples~/ChatBot/ChatBot.cs +++ b/Samples~/ChatBot/ChatBot.cs @@ -60,7 +60,7 @@ void Start() Bubble AddBubble(string message, bool isPlayerMessage) { - Bubble bubble = new Bubble(chatContainer, isPlayerMessage? playerUI: aiUI, isPlayerMessage? "PlayerBubble": "AIBubble", message); + Bubble bubble = new Bubble(chatContainer, isPlayerMessage ? playerUI : aiUI, isPlayerMessage ? "PlayerBubble" : "AIBubble", message); chatBubbles.Add(bubble); bubble.OnResize(UpdateBubblePositions); return bubble; @@ -68,7 +68,7 @@ Bubble AddBubble(string message, bool isPlayerMessage) void ShowLoadedMessages() { - for (int i=1; i questions = botQuestionAnswers.Keys.ToList(); stopwatch.Start(); - foreach (string question in questions) await rag.Add(question, botName); + foreach (string question in questions) rag.Add(question, botName); stopwatch.Stop(); Debug.Log($"embedded {rag.Count()} phrases in {stopwatch.Elapsed.TotalMilliseconds / 1000f} secs"); } @@ -95,20 +95,20 @@ public async Task CreateEmbeddings() } } - public async Task> Retrieval(string question) + public List Retrieval(string question) { // find similar questions for the current bot using the RAG - (string[] similarQuestions, _) = await rag.Search(question, numRAGResults, currentBotName); + (string[] similarQuestions, _) = rag.Search(question, numRAGResults, currentBotName); // get the answers of the similar questions List similarAnswers = new List(); foreach (string similarQuestion in similarQuestions) similarAnswers.Add(botQuestionAnswers[currentBotName][similarQuestion]); return similarAnswers; } - public async Task ConstructPrompt(string question) + public string ConstructPrompt(string question) { // get similar answers from the RAG - List similarAnswers = await Retrieval(question); + List similarAnswers = Retrieval(question); // create the prompt using the user question and the similar answers string answers = ""; foreach (string similarAnswer in similarAnswers) answers += $"\n- {similarAnswer}"; @@ -118,11 +118,11 @@ public async Task ConstructPrompt(string question) return prompt; } - protected async override void OnInputFieldSubmit(string question) + protected override void OnInputFieldSubmit(string question) { PlayerText.interactable = false; SetAIText("..."); - string prompt = await ConstructPrompt(question); + string prompt = ConstructPrompt(question); _ = llmCharacter.Chat(prompt, SetAIText, AIReplyComplete); } diff --git a/Samples~/RAG/RAGAndLLM_Sample.cs b/Samples~/RAG/RAGAndLLM_Sample.cs index 818324cd..f025a2ed 100644 --- a/Samples~/RAG/RAGAndLLM_Sample.cs +++ b/Samples~/RAG/RAGAndLLM_Sample.cs @@ -8,11 +8,11 @@ public class RAGAndLLMSample : RAGSample public LLMCharacter llmCharacter; public Toggle ParaphraseWithLLM; - protected async override void onInputFieldSubmit(string message) + protected override void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - (string[] similarPhrases, float[] distances) = await rag.Search(message, 1); + (string[] similarPhrases, float[] distances) = rag.Search(message, 1); string similarPhrase = similarPhrases[0]; if (!ParaphraseWithLLM.isOn) { diff --git a/Samples~/RAG/RAG_Sample.cs b/Samples~/RAG/RAG_Sample.cs index 0c1455c7..1f665e46 100644 --- a/Samples~/RAG/RAG_Sample.cs +++ b/Samples~/RAG/RAG_Sample.cs @@ -44,7 +44,7 @@ public async Task CreateEmbeddings() playerText.text += $"Creating Embeddings (only once)...\n"; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - foreach (string phrase in phrases) await rag.Add(phrase); + foreach (string phrase in phrases) rag.Add(phrase); stopwatch.Stop(); Debug.Log($"embedded {rag.Count()} phrases in {stopwatch.Elapsed.TotalMilliseconds / 1000f} secs"); // store the embeddings @@ -56,11 +56,11 @@ public async Task CreateEmbeddings() } } - protected async virtual void onInputFieldSubmit(string message) + protected virtual void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - (string[] similarPhrases, float[] distances) = await rag.Search(message, 1); + (string[] similarPhrases, float[] distances) = rag.Search(message, 1); AIText.text = similarPhrases[0]; } diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 910c3dda..68b0e647 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -1,573 +1,573 @@ -using NUnit.Framework; -using LLMUnity; -using UnityEngine; -using System.Threading.Tasks; -using System.Collections.Generic; -using System; -using System.Collections; -using System.IO; -using System.Linq; -using System.Threading; -using UnityEngine.TestTools; - -namespace LLMUnityTests -{ - public class TestLLMLoraAssignment - { - [Test] - public void TestLoras() - { - GameObject gameObject = new GameObject(); - gameObject.SetActive(false); - LLM llm = gameObject.AddComponent(); - - string lora1 = LLMUnitySetup.GetFullPath("lala"); - string lora2Rel = "test/lala"; - string lora2 = LLMUnitySetup.GetAssetPath(lora2Rel); - LLMUnitySetup.CreateEmptyFile(lora1); - Directory.CreateDirectory(Path.GetDirectoryName(lora2)); - LLMUnitySetup.CreateEmptyFile(lora2); - - llm.AddLora(lora1); - llm.AddLora(lora2); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "1,1"); - - llm.RemoveLoras(); - Assert.AreEqual(llm.lora, ""); - Assert.AreEqual(llm.loraWeights, ""); - - llm.AddLora(lora1, 0.8f); - llm.AddLora(lora2Rel, 0.9f); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "0.8,0.9"); - - llm.SetLoraWeight(lora2Rel, 0.7f); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "0.8,0.7"); - - llm.RemoveLora(lora2Rel); - Assert.AreEqual(llm.lora, lora1); - Assert.AreEqual(llm.loraWeights, "0.8"); - - llm.AddLora(lora2Rel); - llm.SetLoraWeight(lora2Rel, 0.5f); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "0.8,0.5"); - - llm.SetLoraWeight(lora2, 0.1f); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "0.8,0.1"); - - Dictionary loraToWeight = new Dictionary(); - loraToWeight[lora1] = 0; - loraToWeight[lora2] = 0.2f; - llm.SetLoraWeights(loraToWeight); - Assert.AreEqual(llm.lora, lora1 + "," + lora2); - Assert.AreEqual(llm.loraWeights, "0,0.2"); - - File.Delete(lora1); - File.Delete(lora2); - } - } - - public class TestLLM - { - protected string modelNameLLManager; - - protected GameObject gameObject; - protected LLM llm; - protected LLMCharacter llmCharacter; - protected Exception error = null; - protected string prompt; - protected string query; - protected string reply1; - protected string reply2; - protected int tokens1; - protected int tokens2; - protected int port; - - static readonly object _lock = new object(); - - public TestLLM() - { - Task task = Init(); - task.Wait(); - } - - public virtual async Task Init() - { - Monitor.Enter(_lock); - port = new System.Random().Next(10000, 20000); - SetParameters(); - await DownloadModels(); - gameObject = new GameObject(); - gameObject.SetActive(false); - llm = CreateLLM(); - llmCharacter = CreateLLMCharacter(); - gameObject.SetActive(true); - } - - public virtual void SetParameters() - { - prompt = "You are a scientific assistant and provide short and concise info on the user questions"; - query = "Can you tell me some fun fact about ants in one sentence?"; - reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; - reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; - tokens1 = 20; - tokens2 = 9; - } - - protected virtual string GetModelUrl() - { - return "https://huggingface.co/unsloth/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q4_K_M.gguf"; - } - - public virtual async Task DownloadModels() - { - modelNameLLManager = await LLMManager.DownloadModel(GetModelUrl()); - } - - [Test] - public void TestGetLLMManagerAssetRuntime() - { - string path = ""; - string managerPath = LLM.GetLLMManagerAssetRuntime(path); - Assert.AreEqual(managerPath, path); - - string filename = "lala"; - path = LLMUnitySetup.GetFullPath(filename); - LLMUnitySetup.CreateEmptyFile(path); - managerPath = LLM.GetLLMManagerAssetRuntime(path); - Assert.AreEqual(managerPath, path); - File.Delete(path); - - path = modelNameLLManager; - managerPath = LLM.GetLLMManagerAssetRuntime(path); - Assert.AreEqual(managerPath, LLMManager.GetAssetPath(path)); - - path = LLMUnitySetup.GetAssetPath("lala"); - LLMUnitySetup.CreateEmptyFile(path); - managerPath = LLM.GetLLMManagerAssetRuntime(path); - Assert.AreEqual(managerPath, path); - File.Delete(path); - } - - [Test] - public void TestGetLLMManagerAssetEditor() - { - string path = ""; - string managerPath = LLM.GetLLMManagerAssetEditor(path); - Assert.AreEqual(managerPath, path); - - path = modelNameLLManager; - managerPath = LLM.GetLLMManagerAssetEditor(path); - Assert.AreEqual(managerPath, modelNameLLManager); - - path = LLMManager.Get(modelNameLLManager).path; - managerPath = LLM.GetLLMManagerAssetEditor(path); - Assert.AreEqual(managerPath, modelNameLLManager); - - string filename = "lala"; - path = LLMUnitySetup.GetAssetPath(filename); - LLMUnitySetup.CreateEmptyFile(path); - managerPath = LLM.GetLLMManagerAssetEditor(filename); - Assert.AreEqual(managerPath, filename); - managerPath = LLM.GetLLMManagerAssetEditor(path); - Assert.AreEqual(managerPath, filename); - - path = LLMUnitySetup.GetFullPath(filename); - LLMUnitySetup.CreateEmptyFile(path); - managerPath = LLM.GetLLMManagerAssetEditor(path); - Assert.AreEqual(managerPath, path); - File.Delete(path); - } - - public virtual LLM CreateLLM() - { - LLM llm = gameObject.AddComponent(); - llm.SetModel(modelNameLLManager); - llm.parallelPrompts = 1; - llm.port = port; - return llm; - } - - public virtual LLMCharacter CreateLLMCharacter() - { - LLMCharacter llmCharacter = gameObject.AddComponent(); - llmCharacter.llm = llm; - llmCharacter.playerName = "User"; - llmCharacter.AIName = "Assistant"; - llmCharacter.prompt = prompt; - llmCharacter.temperature = 0; - llmCharacter.seed = 0; - llmCharacter.stream = false; - llmCharacter.numPredict = 50; - llmCharacter.port = port; - return llmCharacter; - } - - [UnityTest] - public IEnumerator RunTests() - { - Task task = RunTestsTask(); - while (!task.IsCompleted) yield return null; - if (error != null) - { - Debug.LogError(error.ToString()); - throw (error); - } - OnDestroy(); - } - - public async Task RunTestsTask() - { - error = null; - try - { - await Tests(); - llm.OnDestroy(); - } - catch (Exception e) - { - error = e; - } - } - - public virtual async Task Tests() - { - await llmCharacter.Tokenize("I", TestTokens); - await llmCharacter.Warmup(); - TestArchitecture(); - TestInitParameters(tokens1, 1); - TestWarmup(); - await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply1)); - TestPostChat(3); - llmCharacter.SetPrompt(llmCharacter.prompt); - llmCharacter.AIName = "False response"; - await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply2)); - TestPostChat(3); - await llmCharacter.Chat("bye!"); - TestPostChat(5); - prompt = "How are you?"; - llmCharacter.SetPrompt(prompt); - await llmCharacter.Chat("hi"); - TestInitParameters(tokens2, 3); - List embeddings = await llmCharacter.Embeddings("hi how are you?"); - TestEmbeddings(embeddings); - } - - public virtual void TestArchitecture() - { - Assert.That(llm.architecture.Contains("avx")); - } - - public void TestInitParameters(int nkeep, int chats) - { - Assert.AreEqual(llmCharacter.nKeep, nkeep); - Assert.That(ChatTemplate.GetTemplate(llm.chatTemplate).GetStop(llmCharacter.playerName, llmCharacter.AIName).Length > 0); - Assert.AreEqual(llmCharacter.chat.Count, chats); - } - - public void TestTokens(List tokens) - { - Assert.AreEqual(tokens, new List { 40 }); - } - - public void TestWarmup() - { - Assert.That(llmCharacter.chat.Count == 1); - } - - public void TestChat(string reply, string replyGT) - { - Debug.Log(reply.Trim()); - var words1 = reply.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); - var words2 = replyGT.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); - var commonWords = words1.Intersect(words2).Count(); - var totalWords = Math.Max(words1.Length, words2.Length); - - Assert.That((double)commonWords / totalWords >= 0.7); - } - - public void TestPostChat(int num) - { - Assert.That(llmCharacter.chat.Count == num); - } - - public void TestEmbeddings(List embeddings) - { - Assert.That(embeddings.Count == 1024); - } - - public virtual void OnDestroy() - { - if (Monitor.IsEntered(_lock)) - { - Monitor.Exit(_lock); - } - } - } - - public class TestLLM_LLMManager_Load : TestLLM - { - public override LLM CreateLLM() - { - LLM llm = gameObject.AddComponent(); - string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; - string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); - filename = LLMManager.LoadModel(sourcePath); - llm.SetModel(filename); - llm.parallelPrompts = 1; - return llm; - } - } - - public class TestLLM_StreamingAssets_Load : TestLLM - { - string loadPath; - - public override LLM CreateLLM() - { - LLM llm = gameObject.AddComponent(); - string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; - string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); - loadPath = LLMUnitySetup.GetAssetPath(filename); - if (!File.Exists(loadPath)) File.Copy(sourcePath, loadPath); - llm.SetModel(loadPath); - llm.parallelPrompts = 1; - return llm; - } - - public override void OnDestroy() - { - base.OnDestroy(); - if (!File.Exists(loadPath)) File.Delete(loadPath); - } - } - - public class TestLLM_SetModel_Warning : TestLLM - { - public override LLM CreateLLM() - { - LLM llm = gameObject.AddComponent(); - string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; - string loadPath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); - llm.SetModel(loadPath); - llm.parallelPrompts = 1; - return llm; - } - } - - public class TestLLM_Lora : TestLLM - { - protected string loraUrl = "https://huggingface.co/phh/Qwen3-0.6B-TLDR-Lora/resolve/main/Qwen3-0.6B-tldr-lora-f16.gguf"; - protected string loraNameLLManager; - protected float loraWeight; - - public override async Task DownloadModels() - { - await base.DownloadModels(); - loraNameLLManager = await LLMManager.DownloadLora(loraUrl); - } - - public override LLM CreateLLM() - { - LLM llm = base.CreateLLM(); - llm.AddLora(loraNameLLManager, loraWeight); - return llm; - } - - public override void SetParameters() - { - prompt = ""; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) - { - reply1 = "I am sorry, but I cannot assist with this request. Please try again or ask a different question."; - } - else - { - reply1 = "I am sorry, but I cannot respond to your message as it is empty.Could you please provide a meaningful query or content ?"; - } - reply2 = "False response."; - tokens1 = 5; - tokens2 = 9; - loraWeight = 0.9f; - } - - public override async Task Tests() - { - await base.Tests(); - TestModelPaths(); - TestLoraWeight(); - loraWeight = 0.6f; - llm.SetLoraWeight(loraNameLLManager, loraWeight); - TestLoraWeight(); - } - - public void TestModelPaths() - { - Assert.AreEqual(llm.model, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(GetModelUrl()).Split("?")[0]).Replace('\\', '/')); - Assert.AreEqual(llm.lora, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(loraUrl).Split("?")[0]).Replace('\\', '/')); - } - - public void TestLoraWeight() - { - List loras = llm.ListLoras(); - Assert.AreEqual(loras[0].Scale, loraWeight); - } - } - - public class TestLLM_Remote : TestLLM - { - public override LLM CreateLLM() - { - LLM llm = base.CreateLLM(); - llm.remote = true; - return llm; - } - - public override LLMCharacter CreateLLMCharacter() - { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.remote = true; - return llmCharacter; - } - } - - public class TestLLM_Lora_Remote : TestLLM_Lora - { - public override LLM CreateLLM() - { - LLM llm = base.CreateLLM(); - llm.remote = true; - return llm; - } - - public override LLMCharacter CreateLLMCharacter() - { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.remote = true; - return llmCharacter; - } - } - - public class TestLLM_Double : TestLLM - { - LLM llm1; - LLMCharacter llmCharacter1; - - public override async Task Init() - { - SetParameters(); - await DownloadModels(); - gameObject = new GameObject(); - gameObject.SetActive(false); - llm = CreateLLM(); - llmCharacter = CreateLLMCharacter(); - llm1 = CreateLLM(); - llmCharacter1 = CreateLLMCharacter(); - gameObject.SetActive(true); - } - } - - public class TestLLMCharacter_Save : TestLLM - { - string saveName = "TestLLMCharacter_Save"; - - public override LLMCharacter CreateLLMCharacter() - { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.save = saveName; - llmCharacter.saveCache = true; - foreach (string filename in new string[] - { - llmCharacter.GetJsonSavePath(saveName), - llmCharacter.GetCacheSavePath(saveName) - }) if (File.Exists(filename)) File.Delete(filename); - return llmCharacter; - } - - public override async Task Tests() - { - await base.Tests(); - TestSave(); - } - - public void TestSave() - { - string jsonPath = llmCharacter.GetJsonSavePath(saveName); - string cachePath = llmCharacter.GetCacheSavePath(saveName); - Assert.That(File.Exists(jsonPath)); - Assert.That(File.Exists(cachePath)); - string json = File.ReadAllText(jsonPath); - File.Delete(jsonPath); - File.Delete(cachePath); - - List chatHistory = JsonUtility.FromJson(json).chat; - Assert.AreEqual(chatHistory.Count, 2); - Assert.AreEqual(chatHistory[0].role, llmCharacter.playerName); - Assert.AreEqual(chatHistory[0].content, "hi"); - Assert.AreEqual(chatHistory[1].role, llmCharacter.AIName); - - Assert.AreEqual(llmCharacter.chat.Count, chatHistory.Count + 1); - for (int i = 0; i < chatHistory.Count; i++) - { - Assert.AreEqual(chatHistory[i].role, llmCharacter.chat[i + 1].role); - Assert.AreEqual(chatHistory[i].content, llmCharacter.chat[i + 1].content); - } - } - } - - public class TestLLM_CUDA : TestLLM - { - public override LLM CreateLLM() - { - LLM llm = base.CreateLLM(); - llm.numGPULayers = 10; - return llm; - } - - public override void SetParameters() - { - base.SetParameters(); - reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; - if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) - { - reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; - } - } - - public override void TestArchitecture() - { - Assert.That(llm.architecture.Contains("cuda")); - } - } - - public class TestLLM_CUDA_full : TestLLM_CUDA - { - public override void TestArchitecture() - { - Assert.That(llm.architecture.Contains("cuda") && llm.architecture.Contains("full")); - } - } - - public class TestLLM_CUDA_full_attention : TestLLM_CUDA_full - { - public override LLM CreateLLM() - { - LLM llm = base.CreateLLM(); - llm.flashAttention = true; - return llm; - } - - public override void SetParameters() - { - base.SetParameters(); - if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) - { - reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; - } - } - } -} +// using NUnit.Framework; +// using LLMUnity; +// using UnityEngine; +// using System.Threading.Tasks; +// using System.Collections.Generic; +// using System; +// using System.Collections; +// using System.IO; +// using System.Linq; +// using System.Threading; +// using UnityEngine.TestTools; + +// namespace LLMUnityTests +// { +// public class TestLLMLoraAssignment +// { +// [Test] +// public void TestLoras() +// { +// GameObject gameObject = new GameObject(); +// gameObject.SetActive(false); +// LLM llm = gameObject.AddComponent(); + +// string lora1 = LLMUnitySetup.GetFullPath("lala"); +// string lora2Rel = "test/lala"; +// string lora2 = LLMUnitySetup.GetAssetPath(lora2Rel); +// LLMUnitySetup.CreateEmptyFile(lora1); +// Directory.CreateDirectory(Path.GetDirectoryName(lora2)); +// LLMUnitySetup.CreateEmptyFile(lora2); + +// llm.AddLora(lora1); +// llm.AddLora(lora2); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "1,1"); + +// llm.RemoveLoras(); +// Assert.AreEqual(llm.lora, ""); +// Assert.AreEqual(llm.loraWeights, ""); + +// llm.AddLora(lora1, 0.8f); +// llm.AddLora(lora2Rel, 0.9f); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "0.8,0.9"); + +// llm.SetLoraWeight(lora2Rel, 0.7f); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "0.8,0.7"); + +// llm.RemoveLora(lora2Rel); +// Assert.AreEqual(llm.lora, lora1); +// Assert.AreEqual(llm.loraWeights, "0.8"); + +// llm.AddLora(lora2Rel); +// llm.SetLoraWeight(lora2Rel, 0.5f); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "0.8,0.5"); + +// llm.SetLoraWeight(lora2, 0.1f); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "0.8,0.1"); + +// Dictionary loraToWeight = new Dictionary(); +// loraToWeight[lora1] = 0; +// loraToWeight[lora2] = 0.2f; +// llm.SetLoraWeights(loraToWeight); +// Assert.AreEqual(llm.lora, lora1 + "," + lora2); +// Assert.AreEqual(llm.loraWeights, "0,0.2"); + +// File.Delete(lora1); +// File.Delete(lora2); +// } +// } + +// public class TestLLM +// { +// protected string modelNameLLManager; + +// protected GameObject gameObject; +// protected LLM llm; +// protected LLMCharacter llmCharacter; +// protected Exception error = null; +// protected string prompt; +// protected string query; +// protected string reply1; +// protected string reply2; +// protected int tokens1; +// protected int tokens2; +// protected int port; + +// static readonly object _lock = new object(); + +// public TestLLM() +// { +// Task task = Init(); +// task.Wait(); +// } + +// public virtual async Task Init() +// { +// Monitor.Enter(_lock); +// port = new System.Random().Next(10000, 20000); +// SetParameters(); +// await DownloadModels(); +// gameObject = new GameObject(); +// gameObject.SetActive(false); +// llm = CreateLLM(); +// llmCharacter = CreateLLMCharacter(); +// gameObject.SetActive(true); +// } + +// public virtual void SetParameters() +// { +// prompt = "You are a scientific assistant and provide short and concise info on the user questions"; +// query = "Can you tell me some fun fact about ants in one sentence?"; +// reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; +// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; +// tokens1 = 20; +// tokens2 = 9; +// } + +// protected virtual string GetModelUrl() +// { +// return "https://huggingface.co/unsloth/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q4_K_M.gguf"; +// } + +// public virtual async Task DownloadModels() +// { +// modelNameLLManager = await LLMManager.DownloadModel(GetModelUrl()); +// } + +// [Test] +// public void TestGetLLMManagerAssetRuntime() +// { +// string path = ""; +// string managerPath = LLM.GetLLMManagerAssetRuntime(path); +// Assert.AreEqual(managerPath, path); + +// string filename = "lala"; +// path = LLMUnitySetup.GetFullPath(filename); +// LLMUnitySetup.CreateEmptyFile(path); +// managerPath = LLM.GetLLMManagerAssetRuntime(path); +// Assert.AreEqual(managerPath, path); +// File.Delete(path); + +// path = modelNameLLManager; +// managerPath = LLM.GetLLMManagerAssetRuntime(path); +// Assert.AreEqual(managerPath, LLMManager.GetAssetPath(path)); + +// path = LLMUnitySetup.GetAssetPath("lala"); +// LLMUnitySetup.CreateEmptyFile(path); +// managerPath = LLM.GetLLMManagerAssetRuntime(path); +// Assert.AreEqual(managerPath, path); +// File.Delete(path); +// } + +// [Test] +// public void TestGetLLMManagerAssetEditor() +// { +// string path = ""; +// string managerPath = LLM.GetLLMManagerAssetEditor(path); +// Assert.AreEqual(managerPath, path); + +// path = modelNameLLManager; +// managerPath = LLM.GetLLMManagerAssetEditor(path); +// Assert.AreEqual(managerPath, modelNameLLManager); + +// path = LLMManager.Get(modelNameLLManager).path; +// managerPath = LLM.GetLLMManagerAssetEditor(path); +// Assert.AreEqual(managerPath, modelNameLLManager); + +// string filename = "lala"; +// path = LLMUnitySetup.GetAssetPath(filename); +// LLMUnitySetup.CreateEmptyFile(path); +// managerPath = LLM.GetLLMManagerAssetEditor(filename); +// Assert.AreEqual(managerPath, filename); +// managerPath = LLM.GetLLMManagerAssetEditor(path); +// Assert.AreEqual(managerPath, filename); + +// path = LLMUnitySetup.GetFullPath(filename); +// LLMUnitySetup.CreateEmptyFile(path); +// managerPath = LLM.GetLLMManagerAssetEditor(path); +// Assert.AreEqual(managerPath, path); +// File.Delete(path); +// } + +// public virtual LLM CreateLLM() +// { +// LLM llm = gameObject.AddComponent(); +// llm.SetModel(modelNameLLManager); +// llm.parallelPrompts = 1; +// llm.port = port; +// return llm; +// } + +// public virtual LLMCharacter CreateLLMCharacter() +// { +// LLMCharacter llmCharacter = gameObject.AddComponent(); +// llmCharacter.llm = llm; +// llmCharacter.userName = "User"; +// llmCharacter.AIName = "Assistant"; +// llmCharacter.prompt = prompt; +// llmCharacter.temperature = 0; +// llmCharacter.seed = 0; +// llmCharacter.stream = false; +// llmCharacter.numPredict = 50; +// llmCharacter.port = port; +// return llmCharacter; +// } + +// [UnityTest] +// public IEnumerator RunTests() +// { +// Task task = RunTestsTask(); +// while (!task.IsCompleted) yield return null; +// if (error != null) +// { +// Debug.LogError(error.ToString()); +// throw (error); +// } +// OnDestroy(); +// } + +// public async Task RunTestsTask() +// { +// error = null; +// try +// { +// await Tests(); +// llm.OnDestroy(); +// } +// catch (Exception e) +// { +// error = e; +// } +// } + +// public virtual async Task Tests() +// { +// await llmCharacter.Tokenize("I", TestTokens); +// await llmCharacter.Warmup(); +// TestArchitecture(); +// TestInitParameters(tokens1, 1); +// TestWarmup(); +// await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply1)); +// TestPostChat(3); +// llmCharacter.SetPrompt(llmCharacter.prompt); +// llmCharacter.AIName = "False response"; +// await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply2)); +// TestPostChat(3); +// await llmCharacter.Chat("bye!"); +// TestPostChat(5); +// prompt = "How are you?"; +// llmCharacter.SetPrompt(prompt); +// await llmCharacter.Chat("hi"); +// TestInitParameters(tokens2, 3); +// List embeddings = await llmCharacter.Embeddings("hi how are you?"); +// TestEmbeddings(embeddings); +// } + +// public virtual void TestArchitecture() +// { +// Assert.That(llm.architecture.Contains("avx")); +// } + +// public void TestInitParameters(int nkeep, int chats) +// { +// Assert.AreEqual(llmCharacter.nKeep, nkeep); +// Assert.That(ChatTemplate.GetTemplate(llm.chatTemplate).GetStop(llmCharacter.userName, llmCharacter.AIName).Length > 0); +// Assert.AreEqual(llmCharacter.chat.Count, chats); +// } + +// public void TestTokens(List tokens) +// { +// Assert.AreEqual(tokens, new List { 40 }); +// } + +// public void TestWarmup() +// { +// Assert.That(llmCharacter.chat.Count == 1); +// } + +// public void TestChat(string reply, string replyGT) +// { +// Debug.Log(reply.Trim()); +// var words1 = reply.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); +// var words2 = replyGT.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); +// var commonWords = words1.Intersect(words2).Count(); +// var totalWords = Math.Max(words1.Length, words2.Length); + +// Assert.That((double)commonWords / totalWords >= 0.7); +// } + +// public void TestPostChat(int num) +// { +// Assert.That(llmCharacter.chat.Count == num); +// } + +// public void TestEmbeddings(List embeddings) +// { +// Assert.That(embeddings.Count == 1024); +// } + +// public virtual void OnDestroy() +// { +// if (Monitor.IsEntered(_lock)) +// { +// Monitor.Exit(_lock); +// } +// } +// } + +// public class TestLLM_LLMManager_Load : TestLLM +// { +// public override LLM CreateLLM() +// { +// LLM llm = gameObject.AddComponent(); +// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; +// string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); +// filename = LLMManager.LoadModel(sourcePath); +// llm.SetModel(filename); +// llm.parallelPrompts = 1; +// return llm; +// } +// } + +// public class TestLLM_StreamingAssets_Load : TestLLM +// { +// string loadPath; + +// public override LLM CreateLLM() +// { +// LLM llm = gameObject.AddComponent(); +// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; +// string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); +// loadPath = LLMUnitySetup.GetAssetPath(filename); +// if (!File.Exists(loadPath)) File.Copy(sourcePath, loadPath); +// llm.SetModel(loadPath); +// llm.parallelPrompts = 1; +// return llm; +// } + +// public override void OnDestroy() +// { +// base.OnDestroy(); +// if (!File.Exists(loadPath)) File.Delete(loadPath); +// } +// } + +// public class TestLLM_SetModel_Warning : TestLLM +// { +// public override LLM CreateLLM() +// { +// LLM llm = gameObject.AddComponent(); +// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; +// string loadPath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); +// llm.SetModel(loadPath); +// llm.parallelPrompts = 1; +// return llm; +// } +// } + +// public class TestLLM_Lora : TestLLM +// { +// protected string loraUrl = "https://huggingface.co/phh/Qwen3-0.6B-TLDR-Lora/resolve/main/Qwen3-0.6B-tldr-lora-f16.gguf"; +// protected string loraNameLLManager; +// protected float loraWeight; + +// public override async Task DownloadModels() +// { +// await base.DownloadModels(); +// loraNameLLManager = await LLMManager.DownloadLora(loraUrl); +// } + +// public override LLM CreateLLM() +// { +// LLM llm = base.CreateLLM(); +// llm.AddLora(loraNameLLManager, loraWeight); +// return llm; +// } + +// public override void SetParameters() +// { +// prompt = ""; +// if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) +// { +// reply1 = "I am sorry, but I cannot assist with this request. Please try again or ask a different question."; +// } +// else +// { +// reply1 = "I am sorry, but I cannot respond to your message as it is empty.Could you please provide a meaningful query or content ?"; +// } +// reply2 = "False response."; +// tokens1 = 5; +// tokens2 = 9; +// loraWeight = 0.9f; +// } + +// public override async Task Tests() +// { +// await base.Tests(); +// TestModelPaths(); +// TestLoraWeight(); +// loraWeight = 0.6f; +// llm.SetLoraWeight(loraNameLLManager, loraWeight); +// TestLoraWeight(); +// } + +// public void TestModelPaths() +// { +// Assert.AreEqual(llm.model, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(GetModelUrl()).Split("?")[0]).Replace('\\', '/')); +// Assert.AreEqual(llm.lora, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(loraUrl).Split("?")[0]).Replace('\\', '/')); +// } + +// public void TestLoraWeight() +// { +// List loras = llm.ListLoras(); +// Assert.AreEqual(loras[0].Scale, loraWeight); +// } +// } + +// public class TestLLM_Remote : TestLLM +// { +// public override LLM CreateLLM() +// { +// LLM llm = base.CreateLLM(); +// llm.remote = true; +// return llm; +// } + +// public override LLMCharacter CreateLLMCharacter() +// { +// LLMCharacter llmCharacter = base.CreateLLMCharacter(); +// llmCharacter.remote = true; +// return llmCharacter; +// } +// } + +// public class TestLLM_Lora_Remote : TestLLM_Lora +// { +// public override LLM CreateLLM() +// { +// LLM llm = base.CreateLLM(); +// llm.remote = true; +// return llm; +// } + +// public override LLMCharacter CreateLLMCharacter() +// { +// LLMCharacter llmCharacter = base.CreateLLMCharacter(); +// llmCharacter.remote = true; +// return llmCharacter; +// } +// } + +// public class TestLLM_Double : TestLLM +// { +// LLM llm1; +// LLMCharacter llmCharacter1; + +// public override async Task Init() +// { +// SetParameters(); +// await DownloadModels(); +// gameObject = new GameObject(); +// gameObject.SetActive(false); +// llm = CreateLLM(); +// llmCharacter = CreateLLMCharacter(); +// llm1 = CreateLLM(); +// llmCharacter1 = CreateLLMCharacter(); +// gameObject.SetActive(true); +// } +// } + +// public class TestLLMCharacter_Save : TestLLM +// { +// string saveName = "TestLLMCharacter_Save"; + +// public override LLMCharacter CreateLLMCharacter() +// { +// LLMCharacter llmCharacter = base.CreateLLMCharacter(); +// llmCharacter.save = saveName; +// llmCharacter.saveCache = true; +// foreach (string filename in new string[] +// { +// llmCharacter.GetJsonSavePath(saveName), +// llmCharacter.GetCacheSavePath(saveName) +// }) if (File.Exists(filename)) File.Delete(filename); +// return llmCharacter; +// } + +// public override async Task Tests() +// { +// await base.Tests(); +// TestSave(); +// } + +// public void TestSave() +// { +// string jsonPath = llmCharacter.GetJsonSavePath(saveName); +// string cachePath = llmCharacter.GetCacheSavePath(saveName); +// Assert.That(File.Exists(jsonPath)); +// Assert.That(File.Exists(cachePath)); +// string json = File.ReadAllText(jsonPath); +// File.Delete(jsonPath); +// File.Delete(cachePath); + +// List chatHistory = JsonUtility.FromJson(json).chat; +// Assert.AreEqual(chatHistory.Count, 2); +// Assert.AreEqual(chatHistory[0].role, llmCharacter.userName); +// Assert.AreEqual(chatHistory[0].content, "hi"); +// Assert.AreEqual(chatHistory[1].role, llmCharacter.AIName); + +// Assert.AreEqual(llmCharacter.chat.Count, chatHistory.Count + 1); +// for (int i = 0; i < chatHistory.Count; i++) +// { +// Assert.AreEqual(chatHistory[i].role, llmCharacter.chat[i + 1].role); +// Assert.AreEqual(chatHistory[i].content, llmCharacter.chat[i + 1].content); +// } +// } +// } + +// public class TestLLM_CUDA : TestLLM +// { +// public override LLM CreateLLM() +// { +// LLM llm = base.CreateLLM(); +// llm.numGPULayers = 10; +// return llm; +// } + +// public override void SetParameters() +// { +// base.SetParameters(); +// reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; +// if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) +// { +// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; +// } +// } + +// public override void TestArchitecture() +// { +// Assert.That(llm.architecture.Contains("cuda")); +// } +// } + +// public class TestLLM_CUDA_full : TestLLM_CUDA +// { +// public override void TestArchitecture() +// { +// Assert.That(llm.architecture.Contains("cuda") && llm.architecture.Contains("full")); +// } +// } + +// public class TestLLM_CUDA_full_attention : TestLLM_CUDA_full +// { +// public override LLM CreateLLM() +// { +// LLM llm = base.CreateLLM(); +// llm.flashAttention = true; +// return llm; +// } + +// public override void SetParameters() +// { +// base.SetParameters(); +// if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) +// { +// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; +// } +// } +// } +// } diff --git a/Tests/Runtime/TestLLMChatTemplates.cs b/Tests/Runtime/TestLLMChatTemplates.cs index bafa6cb2..10969196 100644 --- a/Tests/Runtime/TestLLMChatTemplates.cs +++ b/Tests/Runtime/TestLLMChatTemplates.cs @@ -1,200 +1,200 @@ -using LLMUnity; -using System.Collections.Generic; -using NUnit.Framework.Internal; -using NUnit.Framework; - -namespace LLMUnityTests -{ - public class TestChatTemplate - { - List messages = new List() - { - new ChatMessage {role = "system", content = "you are a bot"}, - new ChatMessage {role = "user", content = "Hello, how are you?"}, - new ChatMessage {role = "assistant", content = "I'm doing great. How can I help you today?"}, - new ChatMessage {role = "user", content = "I'd like to show off how chat templating works!"}, - new ChatMessage {role = "assistant", content = "chat template is awesome"}, - new ChatMessage {role = "user", content = "do you think so?"}, - }; - - [Test] - public void TestChatML() - { - Assert.AreEqual( - new ChatMLTemplate().ComputePrompt(messages, "user", "assistant"), - "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n" - ); - } - - [Test] - public void TestGemma() - { - Assert.AreEqual( - new GemmaTemplate().ComputePrompt(messages, "user", "assistant"), - "user\nyou are a bot\n\nHello, how are you?\nmodel\nI'm doing great. How can I help you today?\nuser\nI'd like to show off how chat templating works!\nmodel\nchat template is awesome\nuser\ndo you think so?\nmodel\n" - ); - } - - [Test] - public void TestMistralInstruct() - { - Assert.AreEqual( - new MistralInstructTemplate().ComputePrompt(messages, "user", "assistant"), - "[INST] you are a bot\n\nHello, how are you? [/INST]I'm doing great. How can I help you today?[INST] I'd like to show off how chat templating works! [/INST]chat template is awesome[INST] do you think so? [/INST]" - ); - } - - [Test] - public void TestMistralChat() - { - Assert.AreEqual( - new MistralChatTemplate().ComputePrompt(messages, "user", "assistant"), - "[INST] you are a bot\n\n### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today?[INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome[INST] ### user: do you think so? [/INST]### assistant:" - ); - } - - [Test] - public void TestLLama2() - { - Assert.AreEqual( - new LLama2Template().ComputePrompt(messages, "user", "assistant"), - "[INST] <>\nyou are a bot\n<> Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]chat template is awesome [INST] do you think so? [/INST]" - ); - } - - [Test] - public void TestLLama2Chat() - { - Assert.AreEqual( - new LLama2ChatTemplate().ComputePrompt(messages, "user", "assistant"), - "[INST] <>\nyou are a bot\n<> ### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today? [INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome [INST] ### user: do you think so? [/INST]### assistant:" - ); - } - - [Test] - public void TestLLama3Chat() - { - Assert.AreEqual( - new LLama3ChatTemplate().ComputePrompt(messages, "user", "assistant"), - "<|start_header_id|>system<|end_header_id|>\n\nyou are a bot<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHello, how are you?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nI'm doing great. How can I help you today?<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nI'd like to show off how chat templating works!<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nchat template is awesome<|eot_id|><|start_header_id|>user<|end_header_id|>\n\ndo you think so?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" - ); - } - - [Test] - public void TestAlpaca() - { - Assert.AreEqual( - new AlpacaTemplate().ComputePrompt(messages, "user", "assistant"), - "you are a bot\n\n### user: Hello, how are you?\n### assistant: I'm doing great. How can I help you today?\n### user: I'd like to show off how chat templating works!\n### assistant: chat template is awesome\n### user: do you think so?\n### assistant:" - ); - } - - [Test] - public void TestVicuna() - { - Assert.AreEqual( - new VicunaTemplate().ComputePrompt(messages, "user", "assistant"), - "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" - ); - } - - [Test] - public void TestPhi2() - { - Assert.AreEqual( - new Phi2Template().ComputePrompt(messages, "user", "assistant"), - "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" - ); - } - - [Test] - public void TestPhi3() - { - Assert.AreEqual( - new Phi3Template().ComputePrompt(messages, "user", "assistant"), - "<|user|>\nyou are a bot\n\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" - ); - } - - [Test] - public void TestPhi3_5() - { - Assert.AreEqual( - new Phi3_5Template().ComputePrompt(messages, "user", "assistant"), - "<|system|>\nyou are a bot<|end|>\n<|user|>\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" - ); - } - - [Test] - public void TestPhi4Mini() - { - Assert.AreEqual( - new Phi4MiniTemplate().ComputePrompt(messages, "user", "assistant"), - "<|system|>you are a bot<|end|><|user|>Hello, how are you?<|end|><|assistant|>I'm doing great. How can I help you today?<|end|><|user|>I'd like to show off how chat templating works!<|end|><|assistant|>chat template is awesome<|end|><|user|>do you think so?<|end|><|assistant|>" - ); - } - - [Test] - public void TestPhi4() - { - Assert.AreEqual( - new Phi4Template().ComputePrompt(messages, "user", "assistant"), - "<|im_start|>system<|im_sep|>you are a bot<|im_end|><|im_start|>user<|im_sep|>Hello, how are you?<|im_end|><|im_start|>assistant<|im_sep|>I'm doing great. How can I help you today?<|im_end|><|im_start|>user<|im_sep|>I'd like to show off how chat templating works!<|im_end|><|im_start|>assistant<|im_sep|>chat template is awesome<|im_end|><|im_start|>user<|im_sep|>do you think so?<|im_end|><|im_start|>assistant<|im_sep|>" - ); - } - - [Test] - public void TestZephyr() - { - Assert.AreEqual( - new ZephyrTemplate().ComputePrompt(messages, "user", "assistant"), - "<|system|>\nyou are a bot\n<|user|>\nHello, how are you?\n<|assistant|>\nI'm doing great. How can I help you today?\n<|user|>\nI'd like to show off how chat templating works!\n<|assistant|>\nchat template is awesome\n<|user|>\ndo you think so?\n<|assistant|>\n" - ); - } - - [Test] - public void TestDeepSeekV2() - { - Assert.AreEqual( - new DeepSeekV2Template().ComputePrompt(messages, "user", "assistant"), - "<|begin▁of▁sentence|>you are a bot\n\nUser: Hello, how are you?\n\nAssistant: I'm doing great. How can I help you today?<|end▁of▁sentence|>User: I'd like to show off how chat templating works!\n\nAssistant: chat template is awesome<|end▁of▁sentence|>User: do you think so?\n\nAssistant:" - ); - } - - [Test] - public void TestDeepSeekV3() - { - Assert.AreEqual( - new DeepSeekV3Template().ComputePrompt(messages, "user", "assistant"), - "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>" - ); - } - - [Test] - public void TestDeepSeekR1() - { - Assert.AreEqual( - new DeepSeekR1Template().ComputePrompt(messages, "user", "assistant"), - "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>\n\n\n\n" - ); - } - - [Test] - public void TestQwen3() - { - Assert.AreEqual( - new Qwen3Template().ComputePrompt(messages, "user", "assistant"), - "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n\n\n\n\n" - ); - } - - [Test] - public void TestBitNet() - { - Assert.AreEqual( - new BitNetTemplate().ComputePrompt(messages, "user", "assistant"), - "System: you are a bot<|eot_id|>User: Hello, how are you?<|eot_id|>Assistant: I'm doing great. How can I help you today?<|eot_id|>User: I'd like to show off how chat templating works!<|eot_id|>Assistant: chat template is awesome<|eot_id|>User: do you think so?<|eot_id|>Assistant: " - ); - } - } -} +// using LLMUnity; +// using System.Collections.Generic; +// using NUnit.Framework.Internal; +// using NUnit.Framework; + +// namespace LLMUnityTests +// { +// public class TestChatTemplate +// { +// List messages = new List() +// { +// new ChatMessage {role = "system", content = "you are a bot"}, +// new ChatMessage {role = "user", content = "Hello, how are you?"}, +// new ChatMessage {role = "assistant", content = "I'm doing great. How can I help you today?"}, +// new ChatMessage {role = "user", content = "I'd like to show off how chat templating works!"}, +// new ChatMessage {role = "assistant", content = "chat template is awesome"}, +// new ChatMessage {role = "user", content = "do you think so?"}, +// }; + +// [Test] +// public void TestChatML() +// { +// Assert.AreEqual( +// new ChatMLTemplate().ComputePrompt(messages, "user", "assistant"), +// "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n" +// ); +// } + +// [Test] +// public void TestGemma() +// { +// Assert.AreEqual( +// new GemmaTemplate().ComputePrompt(messages, "user", "assistant"), +// "user\nyou are a bot\n\nHello, how are you?\nmodel\nI'm doing great. How can I help you today?\nuser\nI'd like to show off how chat templating works!\nmodel\nchat template is awesome\nuser\ndo you think so?\nmodel\n" +// ); +// } + +// [Test] +// public void TestMistralInstruct() +// { +// Assert.AreEqual( +// new MistralInstructTemplate().ComputePrompt(messages, "user", "assistant"), +// "[INST] you are a bot\n\nHello, how are you? [/INST]I'm doing great. How can I help you today?[INST] I'd like to show off how chat templating works! [/INST]chat template is awesome[INST] do you think so? [/INST]" +// ); +// } + +// [Test] +// public void TestMistralChat() +// { +// Assert.AreEqual( +// new MistralChatTemplate().ComputePrompt(messages, "user", "assistant"), +// "[INST] you are a bot\n\n### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today?[INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome[INST] ### user: do you think so? [/INST]### assistant:" +// ); +// } + +// [Test] +// public void TestLLama2() +// { +// Assert.AreEqual( +// new LLama2Template().ComputePrompt(messages, "user", "assistant"), +// "[INST] <>\nyou are a bot\n<> Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]chat template is awesome [INST] do you think so? [/INST]" +// ); +// } + +// [Test] +// public void TestLLama2Chat() +// { +// Assert.AreEqual( +// new LLama2ChatTemplate().ComputePrompt(messages, "user", "assistant"), +// "[INST] <>\nyou are a bot\n<> ### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today? [INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome [INST] ### user: do you think so? [/INST]### assistant:" +// ); +// } + +// [Test] +// public void TestLLama3Chat() +// { +// Assert.AreEqual( +// new LLama3ChatTemplate().ComputePrompt(messages, "user", "assistant"), +// "<|start_header_id|>system<|end_header_id|>\n\nyou are a bot<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHello, how are you?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nI'm doing great. How can I help you today?<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nI'd like to show off how chat templating works!<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nchat template is awesome<|eot_id|><|start_header_id|>user<|end_header_id|>\n\ndo you think so?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" +// ); +// } + +// [Test] +// public void TestAlpaca() +// { +// Assert.AreEqual( +// new AlpacaTemplate().ComputePrompt(messages, "user", "assistant"), +// "you are a bot\n\n### user: Hello, how are you?\n### assistant: I'm doing great. How can I help you today?\n### user: I'd like to show off how chat templating works!\n### assistant: chat template is awesome\n### user: do you think so?\n### assistant:" +// ); +// } + +// [Test] +// public void TestVicuna() +// { +// Assert.AreEqual( +// new VicunaTemplate().ComputePrompt(messages, "user", "assistant"), +// "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" +// ); +// } + +// [Test] +// public void TestPhi2() +// { +// Assert.AreEqual( +// new Phi2Template().ComputePrompt(messages, "user", "assistant"), +// "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" +// ); +// } + +// [Test] +// public void TestPhi3() +// { +// Assert.AreEqual( +// new Phi3Template().ComputePrompt(messages, "user", "assistant"), +// "<|user|>\nyou are a bot\n\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" +// ); +// } + +// [Test] +// public void TestPhi3_5() +// { +// Assert.AreEqual( +// new Phi3_5Template().ComputePrompt(messages, "user", "assistant"), +// "<|system|>\nyou are a bot<|end|>\n<|user|>\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" +// ); +// } + +// [Test] +// public void TestPhi4Mini() +// { +// Assert.AreEqual( +// new Phi4MiniTemplate().ComputePrompt(messages, "user", "assistant"), +// "<|system|>you are a bot<|end|><|user|>Hello, how are you?<|end|><|assistant|>I'm doing great. How can I help you today?<|end|><|user|>I'd like to show off how chat templating works!<|end|><|assistant|>chat template is awesome<|end|><|user|>do you think so?<|end|><|assistant|>" +// ); +// } + +// [Test] +// public void TestPhi4() +// { +// Assert.AreEqual( +// new Phi4Template().ComputePrompt(messages, "user", "assistant"), +// "<|im_start|>system<|im_sep|>you are a bot<|im_end|><|im_start|>user<|im_sep|>Hello, how are you?<|im_end|><|im_start|>assistant<|im_sep|>I'm doing great. How can I help you today?<|im_end|><|im_start|>user<|im_sep|>I'd like to show off how chat templating works!<|im_end|><|im_start|>assistant<|im_sep|>chat template is awesome<|im_end|><|im_start|>user<|im_sep|>do you think so?<|im_end|><|im_start|>assistant<|im_sep|>" +// ); +// } + +// [Test] +// public void TestZephyr() +// { +// Assert.AreEqual( +// new ZephyrTemplate().ComputePrompt(messages, "user", "assistant"), +// "<|system|>\nyou are a bot\n<|user|>\nHello, how are you?\n<|assistant|>\nI'm doing great. How can I help you today?\n<|user|>\nI'd like to show off how chat templating works!\n<|assistant|>\nchat template is awesome\n<|user|>\ndo you think so?\n<|assistant|>\n" +// ); +// } + +// [Test] +// public void TestDeepSeekV2() +// { +// Assert.AreEqual( +// new DeepSeekV2Template().ComputePrompt(messages, "user", "assistant"), +// "<|begin▁of▁sentence|>you are a bot\n\nUser: Hello, how are you?\n\nAssistant: I'm doing great. How can I help you today?<|end▁of▁sentence|>User: I'd like to show off how chat templating works!\n\nAssistant: chat template is awesome<|end▁of▁sentence|>User: do you think so?\n\nAssistant:" +// ); +// } + +// [Test] +// public void TestDeepSeekV3() +// { +// Assert.AreEqual( +// new DeepSeekV3Template().ComputePrompt(messages, "user", "assistant"), +// "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>" +// ); +// } + +// [Test] +// public void TestDeepSeekR1() +// { +// Assert.AreEqual( +// new DeepSeekR1Template().ComputePrompt(messages, "user", "assistant"), +// "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>\n\n\n\n" +// ); +// } + +// [Test] +// public void TestQwen3() +// { +// Assert.AreEqual( +// new Qwen3Template().ComputePrompt(messages, "user", "assistant"), +// "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n\n\n\n\n" +// ); +// } + +// [Test] +// public void TestBitNet() +// { +// Assert.AreEqual( +// new BitNetTemplate().ComputePrompt(messages, "user", "assistant"), +// "System: you are a bot<|eot_id|>User: Hello, how are you?<|eot_id|>Assistant: I'm doing great. How can I help you today?<|eot_id|>User: I'd like to show off how chat templating works!<|eot_id|>Assistant: chat template is awesome<|eot_id|>User: do you think so?<|eot_id|>Assistant: " +// ); +// } +// } +// } diff --git a/Tests/Runtime/TestSearch.cs b/Tests/Runtime/TestSearch.cs index 5a0872b3..beb4acd7 100644 --- a/Tests/Runtime/TestSearch.cs +++ b/Tests/Runtime/TestSearch.cs @@ -67,40 +67,30 @@ public static bool ApproxEqual(float x1, float x2) } [UnityTest] - public virtual IEnumerator RunTests() - { - Task task = RunTestsTask(); - while (!task.IsCompleted) yield return null; - if (error != null) - { - Debug.LogError(error.ToString()); - throw (error); - } - } - - public virtual async Task RunTestsTask() + public virtual void RunTests() { error = null; try { - await Tests(); + Tests(); llm.OnDestroy(); } - catch (Exception e) + catch (Exception e) { - error = e; + Debug.LogError(e.ToString()); + throw (e); } } - public virtual async Task Tests() + public virtual void Tests() { - await TestAdd(); - await TestSearch(); - await TestIncrementalSearch(); - await TestSaveLoad(); + TestAdd(); + TestSearch(); + TestIncrementalSearch(); + TestSaveLoad(); } - public virtual async Task TestAdd() + public virtual void TestAdd() { void CheckCount(int[] nums) { @@ -114,32 +104,32 @@ void CheckCount(int[] nums) } int key, num; - key = await search.Add(weather); + key = search.Add(weather); Assert.That(key == 0); Assert.That(search.Get(key) == weather); Assert.That(search.Count() == 1); search.Remove(key); Assert.That(search.Count() == 0); - key = await search.Add(weather); + key = search.Add(weather); Assert.That(key == 1); - key = await search.Add(raining); + key = search.Add(raining); Assert.That(key == 2); - key = await search.Add(sometext); + key = search.Add(sometext); Assert.That(key == 3); Assert.That(search.Count() == 3); search.Clear(); Assert.That(search.Count() == 0); - key = await search.Add(weather, "0"); + key = search.Add(weather, "0"); Assert.That(key == 0); - key = await search.Add(raining, "0"); + key = search.Add(raining, "0"); Assert.That(key == 1); - key = await search.Add(weather, "1"); + key = search.Add(weather, "1"); Assert.That(key == 2); - key = await search.Add(sometext, "1"); + key = search.Add(sometext, "1"); Assert.That(key == 3); - key = await search.Add(sometext, "2"); + key = search.Add(sometext, "2"); Assert.That(key == 4); CheckCount(new int[] {2, 2, 1}); num = search.Remove(weather, "0"); @@ -165,20 +155,20 @@ void CheckCount(int[] nums) Assert.That(search.Count() == 0); } - public virtual async Task TestSearch() + public virtual void TestSearch() { string[] results; float[] distances; - (results, distances) = await search.Search(weather, 1); + (results, distances) = search.Search(weather, 1); Assert.That(results.Length == 0); Assert.That(distances.Length == 0); - await search.Add(weather); - await search.Add(raining); - await search.Add(sometext); + search.Add(weather); + search.Add(raining); + search.Add(sometext); - (results, distances) = await search.Search(weather, 2); + (results, distances) = search.Search(weather, 2); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -186,7 +176,7 @@ public virtual async Task TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherRainingDiff)); - (results, distances) = await search.Search(raining, 2); + (results, distances) = search.Search(raining, 2); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -196,12 +186,12 @@ public virtual async Task TestSearch() search.Clear(); - await search.Add(weather, "0"); - await search.Add(raining, "1"); - await search.Add(sometext, "0"); - await search.Add(sometext, "1"); + search.Add(weather, "0"); + search.Add(raining, "1"); + search.Add(sometext, "0"); + search.Add(sometext, "1"); - (results, distances) = await search.Search(weather, 2, "0"); + (results, distances) = search.Search(weather, 2, "0"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -209,7 +199,7 @@ public virtual async Task TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = await search.Search(weather, 2, "0"); + (results, distances) = search.Search(weather, 2, "0"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -217,14 +207,14 @@ public virtual async Task TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = await search.Search(weather, 2, "1"); + (results, distances) = search.Search(weather, 2, "1"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); Assert.AreEqual(results[1], sometext); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = await search.Search(weather, 3, "1"); + (results, distances) = search.Search(weather, 3, "1"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -233,13 +223,13 @@ public virtual async Task TestSearch() search.Clear(); } - public async Task TestIncrementalSearch() + public void TestIncrementalSearch() { string[] results; float[] distances; bool completed; - int searchKey = await search.IncrementalSearch(weather); + int searchKey = search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 0); Assert.That(results.Length == 0); @@ -247,11 +237,11 @@ public async Task TestIncrementalSearch() Assert.That(completed); search.Clear(); - await search.Add(weather); - await search.Add(raining); - await search.Add(sometext); + search.Add(weather); + search.Add(raining); + search.Add(sometext); - searchKey = await search.IncrementalSearch(weather); + searchKey = search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 0); Assert.That(results.Length == 1); @@ -269,7 +259,7 @@ public async Task TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = await search.IncrementalSearch(weather); + searchKey = search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 1); Assert.That(results.Length == 2); @@ -283,12 +273,12 @@ public async Task TestIncrementalSearch() search.IncrementalSearchComplete(searchKey); search.Clear(); - await search.Add(weather, "0"); - await search.Add(raining, "1"); - await search.Add(sometext, "0"); - await search.Add(sometext, "1"); + search.Add(weather, "0"); + search.Add(raining, "1"); + search.Add(sometext, "0"); + search.Add(sometext, "1"); - searchKey = await search.IncrementalSearch(weather, "0"); + searchKey = search.IncrementalSearch(weather, "0"); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 0); Assert.AreEqual(results.Length, 2); @@ -299,7 +289,7 @@ public async Task TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = await search.IncrementalSearch(weather, "0"); + searchKey = search.IncrementalSearch(weather, "0"); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 1); Assert.AreEqual(results.Length, 2); @@ -310,7 +300,7 @@ public async Task TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = await search.IncrementalSearch(weather, "1"); + searchKey = search.IncrementalSearch(weather, "1"); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 2); Assert.AreEqual(results.Length, 1); @@ -325,7 +315,7 @@ public async Task TestIncrementalSearch() Assert.That(ApproxEqual(distances[0], weatherSometextDiff)); Assert.That(completed); - searchKey = await search.IncrementalSearch(weather, "1"); + searchKey = search.IncrementalSearch(weather, "1"); (results, distances, completed) = search.IncrementalFetch(searchKey, 3); Assert.That(searchKey == 3); Assert.AreEqual(results.Length, 2); @@ -337,19 +327,19 @@ public async Task TestIncrementalSearch() search.Clear(); } - public virtual async Task TestSaveLoad() + public virtual void TestSaveLoad() { string path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); string[] results; float[] distances; - await search.Add(weather); - await search.Add(raining); - await search.Add(sometext); + search.Add(weather); + search.Add(raining); + search.Add(sometext); search.Save(path); search.Clear(); - await search.Load(path); + search.Load(path); File.Delete(path); Assert.That(search.Count() == 3); @@ -357,7 +347,7 @@ public virtual async Task TestSaveLoad() Assert.That(search.Get(1) == raining); Assert.That(search.Get(2) == sometext); - (results, distances) = await search.Search(raining, 2); + (results, distances) = search.Search(raining, 2); Assert.AreEqual(results[0], raining); Assert.AreEqual(results[1], weather); Assert.That(ApproxEqual(distances[0], 0)); @@ -365,14 +355,14 @@ public virtual async Task TestSaveLoad() search.Clear(); - await search.Add(weather, "0"); - await search.Add(raining, "1"); - await search.Add(sometext, "0"); - await search.Add(sometext, "1"); + search.Add(weather, "0"); + search.Add(raining, "1"); + search.Add(sometext, "0"); + search.Add(sometext, "1"); search.Save(path); search.Clear(); - await search.Load(path); + search.Load(path); File.Delete(path); Assert.That(search.Count() == 4); @@ -383,7 +373,7 @@ public virtual async Task TestSaveLoad() Assert.That(search.Get(2) == sometext); Assert.That(search.Get(3) == sometext); - (results, distances) = await search.Search(raining, 2, "0"); + (results, distances) = search.Search(raining, 2, "0"); Assert.AreEqual(results[0], weather); Assert.AreEqual(results[1], sometext); Assert.That(ApproxEqual(distances[0], weatherRainingDiff)); @@ -401,34 +391,34 @@ public override T CreateSearch() return search; } - public override async Task Tests() + public override void Tests() { - await base.Tests(); - await TestEncode(); - await TestSimilarity(); - await TestSearchFromList(); + base.Tests(); + TestEncode(); + TestSimilarity(); + TestSearchFromList(); } - public async Task TestEncode() + public void TestEncode() { - float[] encoding = await search.Encode(weather); + float[] encoding = search.Encode(weather); Assert.That(ApproxEqual(encoding[0], -0.02910374f)); Assert.That(ApproxEqual(encoding[383], 0.01764517f)); } - public async Task TestSimilarity() + public void TestSimilarity() { - float[] sentence1 = await search.Encode(weather); - float[] sentence2 = await search.Encode(raining); + float[] sentence1 = search.Encode(weather); + float[] sentence2 = search.Encode(raining); float similarity = SimpleSearch.DotProduct(sentence1, sentence2); float distance = SimpleSearch.InverseDotProduct(sentence1, sentence2); Assert.That(ApproxEqual(similarity, 1 - weatherRainingDiff)); Assert.That(ApproxEqual(distance, weatherRainingDiff)); } - public async Task TestSearchFromList() + public void TestSearchFromList() { - (string[] results, float[] distances) = await search.SearchFromList(weather, new string[] {sometext, raining}); + (string[] results, float[] distances) = search.SearchFromList(weather, new string[] {sometext, raining}); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -491,18 +481,18 @@ public static (string, List<(int, int)>) GenerateText(int length) return (new string(generatedText), indices); } - public override async Task Tests() + public override void Tests() { - await base.Tests(); - await TestProperSplit(); + base.Tests(); + TestProperSplit(); } - public async Task TestProperSplit() + public void TestProperSplit() { for (int length = 50; length <= 500; length += 50) { (string randomText, _) = GenerateText(length); - List<(int, int)> indices = await search.Split(randomText); + List<(int, int)> indices = search.Split(randomText); int currIndex = 0; foreach ((int startIndex, int endIndex) in indices) { @@ -510,7 +500,7 @@ public async Task TestProperSplit() currIndex = endIndex + 1; } Assert.AreEqual(currIndex, length); - int key = await search.Add(randomText); + int key = search.Add(randomText); Assert.AreEqual(search.Get(key), randomText); } } @@ -520,13 +510,13 @@ public class TestTokenSplitter : TestSplitter {} public class TestWordSplitter : TestSplitter { - public override async Task Tests() + public override void Tests() { - await base.Tests(); - await TestSplit(); + base.Tests(); + TestSplit(); } - public async Task TestSplit() + public void TestSplit() { System.Random random = new System.Random(); char[] characters = "abcdefghijklmnopqrstuvwxyz".ToCharArray(); @@ -549,7 +539,7 @@ public async Task TestSplit() } string text = String.Join(" ", splits); - List<(int, int)> indices = await search.Split(text); + List<(int, int)> indices = search.Split(text); for (int i = 0; i < indices.Count; i++) { (int startIndex, int endIndex) = indices[i]; @@ -563,17 +553,17 @@ public async Task TestSplit() public class TestSentenceSplitter : TestSplitter { - public override async Task Tests() + public override void Tests() { - await base.Tests(); - await TestSplit(); + base.Tests(); + TestSplit(); } - public async Task TestSplit() + public void TestSplit() { - async Task SplitSentences(string text) + string[] SplitSentences(string text) { - List<(int, int)> indices = await search.Split(text); + List<(int, int)> indices = search.Split(text); List sentences = new List(); foreach ((int startIndex, int endIndex) in indices) sentences.Add(text.Substring(startIndex, endIndex - startIndex + 1)); return sentences.ToArray(); @@ -592,9 +582,9 @@ async Task SplitSentences(string text) sentencesGT = (string[])sentences.Clone(); text = String.Join("", sentencesGT); - sentencesBack = await SplitSentences(text); + sentencesBack = SplitSentences(text); Assert.AreEqual(sentencesBack, sentencesGT); - key = await search.Add(text); + key = search.Add(text); Assert.AreEqual(search.Get(key), text); sentencesGT = (string[])sentences.Clone(); @@ -603,18 +593,18 @@ async Task SplitSentences(string text) sentencesGT[2] += ".... "; sentencesGT[3] += " ?"; text = String.Join("", sentencesGT); - sentencesBack = await SplitSentences(text); + sentencesBack = SplitSentences(text); Assert.AreEqual(sentencesBack, sentencesGT); - key = await search.Add(text); + key = search.Add(text); Assert.AreEqual(search.Get(key), text); for (int length = 10; length <= 100; length += 10) { (string randomText, List<(int, int)> indicesGT) = GenerateText(length); - List<(int, int)> indices = await search.Split(randomText); + List<(int, int)> indices = search.Split(randomText); Assert.AreEqual(indices.Count, indicesGT.Count); Assert.AreEqual(indices, indicesGT); - key = await search.Add(randomText); + key = search.Add(randomText); Assert.AreEqual(search.Get(key), randomText); } @@ -661,24 +651,24 @@ public class TestRAG_DBSearch_TokenSplitter : TestRAG public abstract class TestRAG_Chunking : TestRAG { - public override async Task TestSearch() + public override void TestSearch() { - await base.TestSearch(); + base.TestSearch(); string[] results; float[] distances; - await search.Add(weather + raining); - await search.Add(sometext); + search.Add(weather + raining); + search.Add(sometext); search.ReturnChunks(false); - (results, distances) = await search.Search(weather, 1); + (results, distances) = search.Search(weather, 1); Assert.That(results.Length == 1); Assert.That(distances.Length == 1); Assert.AreEqual(results[0], weather + raining); search.ReturnChunks(true); - (results, distances) = await search.Search(weather, 1); + (results, distances) = search.Search(weather, 1); Assert.That(results.Length == 1); Assert.That(distances.Length == 1); Assert.AreEqual(results[0], weather); From 8118aa52fc391f5e88d982ed4167fcae80aae9ad Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 01:23:32 +0300 Subject: [PATCH 09/69] allow empty templates --- Runtime/LlamaLib/LLM.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs index 304df8a0..5dcd9d20 100644 --- a/Runtime/LlamaLib/LLM.cs +++ b/Runtime/LlamaLib/LLM.cs @@ -257,8 +257,6 @@ protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} public void SetTemplate(string template) { - if (string.IsNullOrEmpty(template)) - throw new ArgumentNullException(nameof(template)); CheckLlamaLib(); llamaLib.LLM_Set_Template(llm, template); } From 05caeeaa3c06a60ebdf8d4933a738350ea2e1f5f Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 01:27:25 +0300 Subject: [PATCH 10/69] small fixes mainly on the ChatAsync --- Runtime/LLMAgent.cs | 56 +++++++++++++++++++------------------------- Runtime/LLMCaller.cs | 25 +++++++++++++------- 2 files changed, 40 insertions(+), 41 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 0da7a52a..15082e50 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -127,9 +127,7 @@ public class LLMAgent : LLMCaller [Tooltip("the grammar to use")] public string grammarJSONString; - /// \cond HIDE - protected SemaphoreSlim chatLock = new SemaphoreSlim(1, 1); - /// \endcond + string completionParametersPre = ""; [Local, SerializeField] protected UndreamAI.LlamaLib.LLMAgent _llmAgent; public UndreamAI.LlamaLib.LLMAgent llmAgent @@ -153,15 +151,9 @@ public List chat /// - the chat template is constructed /// - the number of tokens to keep are based on the system prompt (if setNKeepToPrompt=true) /// - public override void Awake() + public override void Start() { - if (!enabled) return; - base.Awake(); - if (!remote) - { - int slotFromServer = llm.Register(this); - if (slot == -1) slot = slotFromServer; - } + base.Start(); llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); InitGrammar(); InitHistory(); @@ -203,15 +195,7 @@ protected virtual void InitHistory() protected virtual async Task LoadHistory() { if (save == "" || !File.Exists(GetJsonSavePath(save))) return; - await chatLock.WaitAsync(); // Acquire the lock - try - { - Load(save); - } - finally - { - chatLock.Release(); // Release the lock - } + Load(save); } protected virtual string GetSavePath(string filename) @@ -291,24 +275,25 @@ protected virtual void SetCompletionParameters() ["top_p"] = topP, ["min_p"] = minP, ["n_predict"] = numPredict, - ["stream"] = stream, ["typical_p"] = typicalP, ["repeat_penalty"] = repeatPenalty, ["repeat_last_n"] = repeatLastN, - ["penalize_nl"] = penalizeNl, ["presence_penalty"] = presencePenalty, ["frequency_penalty"] = frequencyPenalty, - ["penalty_prompt"] = (penaltyPrompt != null && penaltyPrompt != "") ? penaltyPrompt : null, ["mirostat"] = mirostat, ["mirostat_tau"] = mirostatTau, ["mirostat_eta"] = mirostatEta, - ["json_schema"] = grammarJSONString, ["seed"] = seed, ["ignore_eos"] = ignoreEos, ["n_probs"] = nProbs, ["cache_prompt"] = cachePrompt }; - llmAgent.SetCompletionParameters(json); + string completionParameters = json.ToString(); + if (completionParameters != completionParametersPre) + { + llmAgent.SetCompletionParameters(json); + completionParametersPre = completionParameters; + } } /// @@ -351,7 +336,7 @@ public virtual void AddAIMessage(string content) /// callback function called when the full response has been received /// whether to add the user query to the chat history /// the LLM response - public virtual string ChatSync(string query, LlamaLib.CharArrayCallback callback = null, bool addToHistory = true) + public virtual string Chat(string query, LlamaLib.CharArrayCallback callback = null, bool addToHistory = true) { // handle a chat message by the user // call the callback function while the answer is received @@ -371,13 +356,20 @@ public virtual string ChatSync(string query, LlamaLib.CharArrayCallback callback /// callback function called when the full response has been received /// whether to add the user query to the chat history /// the LLM response - public virtual async Task Chat(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) + public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) { - // handle a chat message by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received SetCompletionParameters(); - string result = await llmAgent.ChatAsync(query, addToHistory, callback); + LlamaLib.CharArrayCallback wrappedCallback = null; + if (callback != null) + { + var context = SynchronizationContext.Current; + wrappedCallback = (string msg) => { + if (context != null) context.Post(_ => callback(msg), null); + else callback(msg); + }; + } + + string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); completionCallback?.Invoke(); return result; } @@ -407,7 +399,7 @@ public virtual async Task Warmup(string query, EmptyCallback completionCallback { int currNumPredict = numPredict; numPredict = 0; - await Chat(query, null, completionCallback, false); + await ChatAsync(query, null, completionCallback, false); numPredict = currNumPredict; SetCompletionParameters(); } diff --git a/Runtime/LLMCaller.cs b/Runtime/LLMCaller.cs index 9ed43c82..933fdde7 100644 --- a/Runtime/LLMCaller.cs +++ b/Runtime/LLMCaller.cs @@ -51,6 +51,8 @@ public LLMClient llmClient protected set => SetLLMClient(value); } + bool started = false; + /// /// The Unity Awake function that initializes the state before the application starts. /// The following actions are executed: @@ -74,14 +76,19 @@ public virtual void Awake() LLMUnitySetup.LogError(error); throw new Exception(error); } - llmClient = new LLMClient(llm.llmService); - } - else - { - llmClient = new LLMClient(host, port, APIKey); } } + public virtual void Start() + { + if (!enabled) return; + + if (!remote) llmClient = new LLMClient(llm.llmService); + else llmClient = new LLMClient(host, port, APIKey); + + started = true; + } + /// /// Sets the LLM object of the LLMCaller /// @@ -95,12 +102,12 @@ protected virtual void SetLLM(LLM llmSet) } _llm = llmSet; _prellm = _llm; - if (!remote) llmClient = new LLMClient(llm.llmService); + if (started && remote) llmClient = new LLMClient(llm.llmService); } protected virtual void SetLLMClient(LLMClient llmClientSet) { - llmClient = llmClientSet; + _llmClient = llmClientSet; } /// @@ -245,7 +252,7 @@ public virtual List Embeddings(string query, Callback> callba /// callback function that receives the response as string /// callback function called when the full response has been received /// the LLM response - public virtual string CompletionSync(string prompt, LlamaLib.CharArrayCallback callback = null) + public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null) { // handle a completion request by the user // call the callback function while the answer is received @@ -263,7 +270,7 @@ public virtual string CompletionSync(string prompt, LlamaLib.CharArrayCallback c /// callback function that receives the response as string /// callback function called when the full response has been received /// the LLM response - public virtual async Task Completion(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null) + public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null) { // handle a completion request by the user // call the callback function while the answer is received From 23282d49f101a0f88e1792faec42cab9c6ea9260 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 01:29:19 +0300 Subject: [PATCH 11/69] use ChatAsync instead of Chat --- Samples~/ChatBot/ChatBot.cs | 2 +- Samples~/FunctionCalling/FunctionCalling.cs | 10 +++++----- Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs | 2 +- Samples~/MobileDemo/MobileDemo.cs | 2 +- Samples~/MultipleCharacters/MultipleCharacters.cs | 2 +- Samples~/RAG/RAGAndLLM_Sample.cs | 2 +- Samples~/SimpleInteraction/SimpleInteraction.cs | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Samples~/ChatBot/ChatBot.cs b/Samples~/ChatBot/ChatBot.cs index 4f1027dd..83dddb80 100644 --- a/Samples~/ChatBot/ChatBot.cs +++ b/Samples~/ChatBot/ChatBot.cs @@ -85,7 +85,7 @@ void onInputFieldSubmit(string newText) AddBubble(message, true); Bubble aiBubble = AddBubble("...", false); - Task chatTask = llmCharacter.Chat(message, aiBubble.SetText, AllowInput); + Task chatTask = llmCharacter.ChatAsync(message, aiBubble.SetText, AllowInput); inputBubble.SetText(""); } diff --git a/Samples~/FunctionCalling/FunctionCalling.cs b/Samples~/FunctionCalling/FunctionCalling.cs index b537be18..0d31f32d 100644 --- a/Samples~/FunctionCalling/FunctionCalling.cs +++ b/Samples~/FunctionCalling/FunctionCalling.cs @@ -13,7 +13,7 @@ public static class Functions public static string Weather() { - string[] weather = new string[]{"sunny", "rainy", "cloudy", "snowy"}; + string[] weather = new string[] {"sunny", "rainy", "cloudy", "snowy"}; return "The weather is " + weather[random.Next(weather.Length)]; } @@ -24,7 +24,7 @@ public static string Time() public static string Emotion() { - string[] emotion = new string[]{"happy", "sad", "exhilarated", "ok"}; + string[] emotion = new string[] {"happy", "sad", "exhilarated", "ok"}; return "I am feeling " + emotion[random.Next(emotion.Length)]; } } @@ -59,20 +59,20 @@ string ConstructPrompt(string message) string prompt = "Which of the following choices matches best the input?\n\n"; prompt += "Input:" + message + "\n\n"; prompt += "Choices:\n"; - foreach(string functionName in GetFunctionNames()) prompt += $"- {functionName}\n"; + foreach (string functionName in GetFunctionNames()) prompt += $"- {functionName}\n"; prompt += "\nAnswer directly with the choice"; return prompt; } string CallFunction(string functionName) { - return (string) typeof(Functions).GetMethod(functionName).Invoke(null, null); + return (string)typeof(Functions).GetMethod(functionName).Invoke(null, null); } async void onInputFieldSubmit(string message) { playerText.interactable = false; - string functionName = await llmCharacter.Chat(ConstructPrompt(message)); + string functionName = await llmCharacter.ChatAsync(ConstructPrompt(message)); string result = CallFunction(functionName); AIText.text = $"Calling {functionName}\n{result}"; playerText.interactable = true; diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index f150778b..1b1e65ac 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -123,7 +123,7 @@ protected override void OnInputFieldSubmit(string question) PlayerText.interactable = false; SetAIText("..."); string prompt = ConstructPrompt(question); - _ = llmCharacter.Chat(prompt, SetAIText, AIReplyComplete); + _ = llmCharacter.ChatAsync(prompt, SetAIText, AIReplyComplete); } protected override void DropdownChange(int selection) diff --git a/Samples~/MobileDemo/MobileDemo.cs b/Samples~/MobileDemo/MobileDemo.cs index b7aa0e36..bb84e571 100644 --- a/Samples~/MobileDemo/MobileDemo.cs +++ b/Samples~/MobileDemo/MobileDemo.cs @@ -60,7 +60,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.Chat(message, SetAIText, AIReplyComplete); + _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) diff --git a/Samples~/MultipleCharacters/MultipleCharacters.cs b/Samples~/MultipleCharacters/MultipleCharacters.cs index 82067e2c..b53e3e7a 100644 --- a/Samples~/MultipleCharacters/MultipleCharacters.cs +++ b/Samples~/MultipleCharacters/MultipleCharacters.cs @@ -28,7 +28,7 @@ public void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.Chat(message, SetAIText, AIReplyComplete); + _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) diff --git a/Samples~/RAG/RAGAndLLM_Sample.cs b/Samples~/RAG/RAGAndLLM_Sample.cs index f025a2ed..e9ebf010 100644 --- a/Samples~/RAG/RAGAndLLM_Sample.cs +++ b/Samples~/RAG/RAGAndLLM_Sample.cs @@ -21,7 +21,7 @@ protected override void onInputFieldSubmit(string message) } else { - _ = llmCharacter.Chat("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); + _ = llmCharacter.ChatAsync("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); } } diff --git a/Samples~/SimpleInteraction/SimpleInteraction.cs b/Samples~/SimpleInteraction/SimpleInteraction.cs index 9c088c3b..596f1e75 100644 --- a/Samples~/SimpleInteraction/SimpleInteraction.cs +++ b/Samples~/SimpleInteraction/SimpleInteraction.cs @@ -20,7 +20,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.Chat(message, SetAIText, AIReplyComplete); + _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) From 8762162a9a1a8b3211512a3a5a64078f55525393 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 12:44:22 +0300 Subject: [PATCH 12/69] move completion parameters to LLMCaller --- Runtime/LLM.cs | 2 +- Runtime/LLMAgent.cs | 156 ++------------------------------------ Runtime/LLMCaller.cs | 175 +++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 177 insertions(+), 156 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index e27d88d2..087c6910 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -460,7 +460,7 @@ public void SetTemplate(string templateName, bool setDirty = true) return; } chatTemplate = templateName; - if (started) llmService.SetTemplate(chatTemplate == "auto"? "": chatTemplate); + if (started) llmService.SetTemplate(chatTemplate == "auto" ? "" : chatTemplate); #if UNITY_EDITOR if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 15082e50..c999c0ad 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -1,13 +1,10 @@ /// @file /// @brief File implementing the LLM characters. -using Newtonsoft.Json.Linq; -using System; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; using UndreamAI.LlamaLib; -using UnityEditor; using UnityEngine; namespace LLMUnity @@ -29,87 +26,9 @@ public class LLMAgent : LLMCaller /// log the constructed prompt the Unity Editor. // [Tooltip("log the constructed prompt the Unity Editor.")] // [LLM] public bool debugPrompt = false; - /// maximum number of tokens that the LLM will predict (-1 = infinity). - [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] - [Model] public int numPredict = -1; /// slot of the server to use for computation (affects caching) [Tooltip("slot of the server to use for computation (affects caching)")] [ModelAdvanced] public int slot = -1; - /// grammar file used for the LLMAgent (.gbnf format) - [Tooltip("grammar file used for the LLMAgent (.gbnf format)")] - [ModelAdvanced] public string grammar = null; - /// grammar file used for the LLMAgent (.json format) - [Tooltip("grammar file used for the LLMAgent (.json format)")] - [ModelAdvanced] public string grammarJSON = null; - /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) - [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] - [ModelAdvanced] public bool cachePrompt = true; - /// seed for reproducibility (-1 = no reproducibility). - [Tooltip("seed for reproducibility (-1 = no reproducibility).")] - [ModelAdvanced] public int seed = 0; - /// LLM temperature, lower values give more deterministic answers. - [Tooltip("LLM temperature, lower values give more deterministic answers.")] - [ModelAdvanced, Float(0f, 2f)] public float temperature = 0.2f; - /// Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Int(-1, 100)] public int topK = 40; - /// Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Float(0f, 1f)] public float topP = 0.9f; - /// minimum probability for a token to be used. - [Tooltip("minimum probability for a token to be used.")] - [ModelAdvanced, Float(0f, 1f)] public float minP = 0.05f; - /// Penalty based on repeated tokens to control the repetition of token sequences in the generated text. - [Tooltip("Penalty based on repeated tokens to control the repetition of token sequences in the generated text.")] - [ModelAdvanced, Float(0f, 2f)] public float repeatPenalty = 1.1f; - /// Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float presencePenalty = 0f; - /// Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float frequencyPenalty = 0f; - /// enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens. - [Tooltip("enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens.")] - [ModelAdvanced, Float(0f, 1f)] public float typicalP = 1f; - /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). - [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] - [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; - /// penalize newline tokens when applying the repeat penalty. - [Tooltip("penalize newline tokens when applying the repeat penalty.")] - [ModelAdvanced] public bool penalizeNl = true; - /// prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt) - [Tooltip("prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt)")] - [ModelAdvanced] public string penaltyPrompt; - /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). - [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] - [ModelAdvanced, Int(0, 2)] public int mirostat = 0; - /// The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text. - [Tooltip("The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text.")] - [ModelAdvanced, Float(0f, 10f)] public float mirostatTau = 5f; - /// The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text. - [Tooltip("The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text.")] - [ModelAdvanced, Float(0f, 1f)] public float mirostatEta = 0.1f; - /// if greater than 0, the response also contains the probabilities of top N tokens for each generated token. - [Tooltip("if greater than 0, the response also contains the probabilities of top N tokens for each generated token.")] - [ModelAdvanced, Int(0, 10)] public int nProbs = 0; - /// ignore end of stream token and continue generating. - [Tooltip("ignore end of stream token and continue generating.")] - [ModelAdvanced] public bool ignoreEos = false; - /// stopwords to stop the LLM in addition to the default stopwords from the chat template. - [Tooltip("stopwords to stop the LLM in addition to the default stopwords from the chat template.")] - public List stop = new List(); - /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. - /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. - // [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] - // public Dictionary logitBias = null; - /// Receive the reply from the model as it is produced (recommended!). - /// If not selected, the full reply from the model is received in one go - [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] - [Chat] public bool stream = true; /// the name of the player [Tooltip("the name of the player")] [Chat] public string userName = "user"; @@ -119,15 +38,6 @@ public class LLMAgent : LLMCaller /// a description of the AI role (system prompt) [Tooltip("a description of the AI role (system prompt)")] [TextArea(5, 10), Chat] public string prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; - /// the chat history as list of chat messages - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarString; - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarJSONString; - - string completionParametersPre = ""; [Local, SerializeField] protected UndreamAI.LlamaLib.LLMAgent _llmAgent; public UndreamAI.LlamaLib.LLMAgent llmAgent @@ -155,7 +65,6 @@ public override void Start() { base.Start(); llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); - InitGrammar(); InitHistory(); } @@ -186,13 +95,18 @@ protected override void SetLLMClient(LLMClient llmClientSet) llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); } + protected override LLMLocal GetCaller() + { + return _llmAgent; + } + protected virtual void InitHistory() { ClearChat(); - _ = LoadHistory(); + LoadHistory(); } - protected virtual async Task LoadHistory() + protected virtual void LoadHistory() { if (save == "" || !File.Exists(GetJsonSavePath(save))) return; Load(save); @@ -242,60 +156,6 @@ public virtual void SetPrompt(string newPrompt, bool clearChat = true) llmAgent.SystemPrompt = newPrompt; } - protected virtual void InitGrammar() - { - grammarString = ""; - if (!String.IsNullOrEmpty(grammar)) - { - grammarString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammar)); - } - llmAgent.SetGrammar(grammarString); - } - - /// - /// Sets the grammar file of the LLMAgent (GBNF or JSON schema) - /// - /// path to the grammar file - public virtual async Task SetGrammar(string path) - { -#if UNITY_EDITOR - if (!EditorApplication.isPlaying) path = LLMUnitySetup.AddAsset(path); -#endif - await LLMUnitySetup.AndroidExtractAsset(path, true); - grammar = path; - InitGrammar(); - } - - protected virtual void SetCompletionParameters() - { - JObject json = new JObject - { - ["temperature"] = temperature, - ["top_k"] = topK, - ["top_p"] = topP, - ["min_p"] = minP, - ["n_predict"] = numPredict, - ["typical_p"] = typicalP, - ["repeat_penalty"] = repeatPenalty, - ["repeat_last_n"] = repeatLastN, - ["presence_penalty"] = presencePenalty, - ["frequency_penalty"] = frequencyPenalty, - ["mirostat"] = mirostat, - ["mirostat_tau"] = mirostatTau, - ["mirostat_eta"] = mirostatEta, - ["seed"] = seed, - ["ignore_eos"] = ignoreEos, - ["n_probs"] = nProbs, - ["cache_prompt"] = cachePrompt - }; - string completionParameters = json.ToString(); - if (completionParameters != completionParametersPre) - { - llmAgent.SetCompletionParameters(json); - completionParametersPre = completionParameters; - } - } - /// /// Allows to add a message in the chat history. /// @@ -358,7 +218,6 @@ public virtual string Chat(string query, LlamaLib.CharArrayCallback callback = n /// the LLM response public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) { - SetCompletionParameters(); LlamaLib.CharArrayCallback wrappedCallback = null; if (callback != null) { @@ -369,6 +228,7 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall }; } + SetCompletionParameters(); string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); completionCallback?.Invoke(); return result; diff --git a/Runtime/LLMCaller.cs b/Runtime/LLMCaller.cs index 933fdde7..729d22e2 100644 --- a/Runtime/LLMCaller.cs +++ b/Runtime/LLMCaller.cs @@ -5,6 +5,9 @@ using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEngine; +using UnityEditor; +using Newtonsoft.Json.Linq; +using System.IO; namespace LLMUnity { @@ -42,8 +45,93 @@ public LLM llm [Tooltip("number of retries to use for the remote LLM server requests (-1 = infinite)")] [Remote] public int numRetries = 10; - protected LLM _prellm; + /// maximum number of tokens that the LLM will predict (-1 = infinity). + [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] + [Model] public int numPredict = -1; + /// grammar file used for the LLMAgent (.gbnf format) + [Tooltip("grammar file used for the LLMAgent (.gbnf format)")] + [ModelAdvanced] public string grammar = null; + /// grammar file used for the LLMAgent (.json format) + [Tooltip("grammar file used for the LLMAgent (.json format)")] + [ModelAdvanced] public string grammarJSON = null; + /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) + [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] + [ModelAdvanced] public bool cachePrompt = true; + /// seed for reproducibility (-1 = no reproducibility). + [Tooltip("seed for reproducibility (-1 = no reproducibility).")] + [ModelAdvanced] public int seed = 0; + /// LLM temperature, lower values give more deterministic answers. + [Tooltip("LLM temperature, lower values give more deterministic answers.")] + [ModelAdvanced, Float(0f, 2f)] public float temperature = 0.2f; + /// Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). + /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. + /// + [Tooltip("Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] + [ModelAdvanced, Int(-1, 100)] public int topK = 40; + /// Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). + /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. + /// + [Tooltip("Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] + [ModelAdvanced, Float(0f, 1f)] public float topP = 0.9f; + /// minimum probability for a token to be used. + [Tooltip("minimum probability for a token to be used.")] + [ModelAdvanced, Float(0f, 1f)] public float minP = 0.05f; + /// Penalty based on repeated tokens to control the repetition of token sequences in the generated text. + [Tooltip("Penalty based on repeated tokens to control the repetition of token sequences in the generated text.")] + [ModelAdvanced, Float(0f, 2f)] public float repeatPenalty = 1.1f; + /// Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). + [Tooltip("Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] + [ModelAdvanced, Float(0f, 1f)] public float presencePenalty = 0f; + /// Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). + [Tooltip("Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] + [ModelAdvanced, Float(0f, 1f)] public float frequencyPenalty = 0f; + /// enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens. + [Tooltip("enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens.")] + [ModelAdvanced, Float(0f, 1f)] public float typicalP = 1f; + /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). + [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] + [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; + /// penalize newline tokens when applying the repeat penalty. + [Tooltip("penalize newline tokens when applying the repeat penalty.")] + [ModelAdvanced] public bool penalizeNl = true; + /// prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt) + [Tooltip("prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt)")] + [ModelAdvanced] public string penaltyPrompt; + /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). + [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] + [ModelAdvanced, Int(0, 2)] public int mirostat = 0; + /// The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text. + [Tooltip("The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text.")] + [ModelAdvanced, Float(0f, 10f)] public float mirostatTau = 5f; + /// The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text. + [Tooltip("The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text.")] + [ModelAdvanced, Float(0f, 1f)] public float mirostatEta = 0.1f; + /// if greater than 0, the response also contains the probabilities of top N tokens for each generated token. + [Tooltip("if greater than 0, the response also contains the probabilities of top N tokens for each generated token.")] + [ModelAdvanced, Int(0, 10)] public int nProbs = 0; + /// ignore end of stream token and continue generating. + [Tooltip("ignore end of stream token and continue generating.")] + [ModelAdvanced] public bool ignoreEos = false; + /// stopwords to stop the LLM in addition to the default stopwords from the chat template. + [Tooltip("stopwords to stop the LLM in addition to the default stopwords from the chat template.")] + public List stop = new List(); + /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. + /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. + // [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] + // public Dictionary logitBias = null; + /// Receive the reply from the model as it is produced (recommended!). + /// If not selected, the full reply from the model is received in one go + [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] + [Chat] public bool stream = true; + + /// the grammar to use + [Tooltip("the grammar to use")] + public string grammarString; + /// the grammar to use + [Tooltip("the grammar to use")] + public string grammarJSONString; + protected LLM _prellm; [Local, SerializeField] protected LLMClient _llmClient; public LLMClient llmClient { @@ -52,6 +140,7 @@ public LLMClient llmClient } bool started = false; + string completionParametersPre = ""; /// /// The Unity Awake function that initializes the state before the application starts. @@ -82,11 +171,22 @@ public virtual void Awake() public virtual void Start() { if (!enabled) return; + SetupLLMClient(); + started = true; + } + protected virtual void SetupLLMClient() + { if (!remote) llmClient = new LLMClient(llm.llmService); else llmClient = new LLMClient(host, port, APIKey); + InitGrammar(); + completionParametersPre = ""; + SetCompletionParameters(); + } - started = true; + protected virtual LLMLocal GetCaller() + { + return _llmClient; } /// @@ -95,6 +195,11 @@ public virtual void Start() /// LLM object protected virtual void SetLLM(LLM llmSet) { + if (remote) + { + LLMUnitySetup.LogError("The client is in remote mode"); + return; + } if (llmSet != null && !IsValidLLM(llmSet)) { LLMUnitySetup.LogError(NotValidLLMError()); @@ -102,7 +207,7 @@ protected virtual void SetLLM(LLM llmSet) } _llm = llmSet; _prellm = _llm; - if (started && remote) llmClient = new LLMClient(llm.llmService); + if (started) SetupLLMClient(); } protected virtual void SetLLMClient(LLMClient llmClientSet) @@ -193,6 +298,30 @@ protected virtual LLM[] SortLLMsByBestMatching(LLM[] arrayIn) return array; } + protected virtual void InitGrammar() + { + grammarString = ""; + if (!String.IsNullOrEmpty(grammar)) + { + grammarString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammar)); + } + GetCaller().SetGrammar(grammarString); + } + + /// + /// Sets the grammar file of the LLMAgent (GBNF or JSON schema) + /// + /// path to the grammar file + public virtual async Task SetGrammar(string path) + { +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) path = LLMUnitySetup.AddAsset(path); +#endif + await LLMUnitySetup.AndroidExtractAsset(path, true); + grammar = path; + InitGrammar(); + } + /// /// Allows to cancel the requests in a specific slot of the LLM /// @@ -243,6 +372,36 @@ public virtual List Embeddings(string query, Callback> callba return embeddings; } + protected virtual void SetCompletionParameters() + { + JObject json = new JObject + { + ["temperature"] = temperature, + ["top_k"] = topK, + ["top_p"] = topP, + ["min_p"] = minP, + ["n_predict"] = numPredict, + ["typical_p"] = typicalP, + ["repeat_penalty"] = repeatPenalty, + ["repeat_last_n"] = repeatLastN, + ["presence_penalty"] = presencePenalty, + ["frequency_penalty"] = frequencyPenalty, + ["mirostat"] = mirostat, + ["mirostat_tau"] = mirostatTau, + ["mirostat_eta"] = mirostatEta, + ["seed"] = seed, + ["ignore_eos"] = ignoreEos, + ["n_probs"] = nProbs, + ["cache_prompt"] = cachePrompt + }; + string completionParameters = json.ToString(); + if (completionParameters != completionParametersPre) + { + GetCaller().SetCompletionParameters(json); + completionParametersPre = completionParameters; + } + } + /// /// Completion functionality of the LLM. /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). @@ -252,13 +411,14 @@ public virtual List Embeddings(string query, Callback> callba /// callback function that receives the response as string /// callback function called when the full response has been received /// the LLM response - public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null) + public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null, int id_slot = -1) { // handle a completion request by the user // call the callback function while the answer is received // call the completionCallback function when the answer is fully received - return llmClient.Completion(prompt, callback); + SetCompletionParameters(); + return llmClient.Completion(prompt, callback, id_slot); } /// @@ -270,13 +430,14 @@ public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callb /// callback function that receives the response as string /// callback function called when the full response has been received /// the LLM response - public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null) + public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, int id_slot = -1) { // handle a completion request by the user // call the callback function while the answer is received // call the completionCallback function when the answer is fully received - string result = await llmClient.CompletionAsync(prompt, callback); + SetCompletionParameters(); + string result = await llmClient.CompletionAsync(prompt, callback, id_slot); completionCallback?.Invoke(); return result; } From 42ae20f4c41759dfa261b7692ab2b285788555f7 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 12:50:59 +0300 Subject: [PATCH 13/69] rename LLMCaller to LLMClient --- Editor/LLMCallerEditor.cs | 2 +- Runtime/LLM.cs | 18 +++++++++--------- Runtime/LLMAgent.cs | 6 +++--- Runtime/{LLMCaller.cs => LLMClient.cs} | 18 +++++++++--------- .../{LLMCaller.cs.meta => LLMClient.cs.meta} | 0 Runtime/LLMEmbedder.cs | 2 +- Runtime/LlamaLib/LLMAgent.cs | 5 ++--- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 6 +++--- Samples~/RAG/RAG_Sample.cs | 6 +++--- 9 files changed, 31 insertions(+), 32 deletions(-) rename Runtime/{LLMCaller.cs => LLMClient.cs} (97%) rename Runtime/{LLMCaller.cs.meta => LLMClient.cs.meta} (100%) diff --git a/Editor/LLMCallerEditor.cs b/Editor/LLMCallerEditor.cs index 006b7908..20ef6372 100644 --- a/Editor/LLMCallerEditor.cs +++ b/Editor/LLMCallerEditor.cs @@ -5,7 +5,7 @@ namespace LLMUnity { - [CustomEditor(typeof(LLMCaller), true)] + [CustomEditor(typeof(LLMClient), true)] public class LLMCallerEditor : PropertyEditor {} [CustomEditor(typeof(LLMAgent), true)] diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 087c6910..c875cdcc 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -34,8 +34,8 @@ public class LLM : MonoBehaviour /// If the user's GPU is not supported, the LLM will fall back to the CPU [Tooltip("number of model layers to offload to the GPU (0 = GPU not used). If the user's GPU is not supported, the LLM will fall back to the CPU")] [LLM] public int numGPULayers = 0; - /// number of prompts that can happen in parallel (-1 = number of LLMCaller objects) - [Tooltip("number of prompts that can happen in parallel (-1 = number of LLMCaller objects)")] + /// number of prompts that can happen in parallel (-1 = number of LLMClient objects) + [Tooltip("number of prompts that can happen in parallel (-1 = number of LLMClient objects)")] [LLMAdvanced] public int parallelPrompts = -1; /// do not destroy the LLM GameObject when loading a new Scene. [Tooltip("do not destroy the LLM GameObject when loading a new Scene.")] @@ -101,7 +101,7 @@ public LLMService llmService } public string architecture => llmlib?.architecture; - List clients = new List(); + List clients = new List(); public LLMManager llmManager = new LLMManager(); static readonly object staticLock = new object(); public LoraManager loraManager = new LoraManager(); @@ -525,15 +525,15 @@ public string GetTemplate() } /// - /// Registers a local LLMCaller object. - /// This allows to bind the LLMCaller "client" to a specific slot of the LLM. + /// Registers a local LLMClient object. + /// This allows to bind the LLMClient "client" to a specific slot of the LLM. /// - /// + /// /// - public int Register(LLMCaller llmCaller) + public int Register(LLMClient llmClient) { - clients.Add(llmCaller); - int index = clients.IndexOf(llmCaller); + clients.Add(llmClient); + int index = clients.IndexOf(llmClient); if (parallelPrompts != -1) return index % parallelPrompts; return index; } diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index c999c0ad..c2aab154 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -14,7 +14,7 @@ namespace LLMUnity /// /// Class implementing the LLM characters. /// - public class LLMAgent : LLMCaller + public class LLMAgent : LLMClient { /// file to save the chat history. /// The file will be saved within the persistentDataPath directory. @@ -80,7 +80,7 @@ protected override string NotValidLLMError() } /// - /// Checks if a LLM is valid for the LLMCaller + /// Checks if a LLM is valid for the LLMClient /// /// LLM object /// bool specifying whether the LLM is valid @@ -89,7 +89,7 @@ public override bool IsValidLLM(LLM llmSet) return !llmSet.embeddingsOnly; } - protected override void SetLLMClient(LLMClient llmClientSet) + protected override void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) { base.SetLLMClient(llmClientSet); llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); diff --git a/Runtime/LLMCaller.cs b/Runtime/LLMClient.cs similarity index 97% rename from Runtime/LLMCaller.cs rename to Runtime/LLMClient.cs index 729d22e2..fb59a065 100644 --- a/Runtime/LLMCaller.cs +++ b/Runtime/LLMClient.cs @@ -16,7 +16,7 @@ namespace LLMUnity /// /// Class implementing calling of LLM functions (local and remote). /// - public class LLMCaller : MonoBehaviour + public class LLMClient : MonoBehaviour { /// show/hide advanced options in the GameObject [Tooltip("show/hide advanced options in the GameObject")] @@ -132,8 +132,8 @@ public LLM llm public string grammarJSONString; protected LLM _prellm; - [Local, SerializeField] protected LLMClient _llmClient; - public LLMClient llmClient + [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; + public UndreamAI.LlamaLib.LLMClient llmClient { get => _llmClient; protected set => SetLLMClient(value); @@ -177,8 +177,8 @@ public virtual void Start() protected virtual void SetupLLMClient() { - if (!remote) llmClient = new LLMClient(llm.llmService); - else llmClient = new LLMClient(host, port, APIKey); + if (!remote) llmClient = new UndreamAI.LlamaLib.LLMClient(llm.llmService); + else llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); InitGrammar(); completionParametersPre = ""; SetCompletionParameters(); @@ -190,7 +190,7 @@ protected virtual LLMLocal GetCaller() } /// - /// Sets the LLM object of the LLMCaller + /// Sets the LLM object of the LLMClient /// /// LLM object protected virtual void SetLLM(LLM llmSet) @@ -210,13 +210,13 @@ protected virtual void SetLLM(LLM llmSet) if (started) SetupLLMClient(); } - protected virtual void SetLLMClient(LLMClient llmClientSet) + protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) { _llmClient = llmClientSet; } /// - /// Checks if a LLM is valid for the LLMCaller + /// Checks if a LLM is valid for the LLMClient /// /// LLM object /// bool specifying whether the LLM is valid @@ -226,7 +226,7 @@ public virtual bool IsValidLLM(LLM llmSet) } /// - /// Checks if a LLM can be auto-assigned if the LLM of the LLMCaller is null + /// Checks if a LLM can be auto-assigned if the LLM of the LLMClient is null /// /// /// bool specifying whether the LLM can be auto-assigned diff --git a/Runtime/LLMCaller.cs.meta b/Runtime/LLMClient.cs.meta similarity index 100% rename from Runtime/LLMCaller.cs.meta rename to Runtime/LLMClient.cs.meta diff --git a/Runtime/LLMEmbedder.cs b/Runtime/LLMEmbedder.cs index 1a7962b5..1fa04fed 100644 --- a/Runtime/LLMEmbedder.cs +++ b/Runtime/LLMEmbedder.cs @@ -9,7 +9,7 @@ namespace LLMUnity /// /// Class implementing the LLM embedder. /// - public class LLMEmbedder : LLMCaller + public class LLMEmbedder : LLMClient { protected override void SetLLM(LLM llmSet) { diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 958272b1..11ee4a0e 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -153,7 +153,7 @@ public List GetHistory() } } } - catch { } + catch {} return messages; } @@ -280,7 +280,6 @@ public void Cancel() llamaLib.LLM_Cancel(llm, SlotId); } - // Override slot-based methods to hide them private new string SaveSlot(int id_slot, string filepath) { @@ -297,4 +296,4 @@ public void Cancel() Cancel(); } } -} \ No newline at end of file +} diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index 1b1e65ac..f779ae2e 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -162,11 +162,11 @@ public void ExitGame() Application.Quit(); } - void CheckLLM(LLMCaller llmCaller, bool debug) + void CheckLLM(LLMClient llmClient, bool debug) { - if (!llmCaller.remote && llmCaller.llm != null && llmCaller.llm.model == "") + if (!llmClient.remote && llmClient.llm != null && llmClient.llm.model == "") { - string error = $"Please select a llm model in the {llmCaller.llm.gameObject.name} GameObject!"; + string error = $"Please select a llm model in the {llmClient.llm.gameObject.name} GameObject!"; if (debug) Debug.LogWarning(error); else throw new System.Exception(error); } diff --git a/Samples~/RAG/RAG_Sample.cs b/Samples~/RAG/RAG_Sample.cs index 1f665e46..3b668e9d 100644 --- a/Samples~/RAG/RAG_Sample.cs +++ b/Samples~/RAG/RAG_Sample.cs @@ -82,11 +82,11 @@ public void ExitGame() Application.Quit(); } - protected void CheckLLM(LLMCaller llmCaller, bool debug) + protected void CheckLLM(LLMClient llmClient, bool debug) { - if (!llmCaller.remote && llmCaller.llm != null && llmCaller.llm.model == "") + if (!llmClient.remote && llmClient.llm != null && llmClient.llm.model == "") { - string error = $"Please select a llm model in the {llmCaller.llm.gameObject.name} GameObject!"; + string error = $"Please select a llm model in the {llmClient.llm.gameObject.name} GameObject!"; if (debug) Debug.LogWarning(error); else throw new System.Exception(error); } From 5c62cecc81fccd4f0352e76667be7e94db334926 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 13:02:38 +0300 Subject: [PATCH 14/69] simplify grammar by keeping the grammar value instead of the file --- Editor/LLMCallerEditor.cs | 15 ++------ Runtime/LLMClient.cs | 40 +++++++-------------- Samples~/FunctionCalling/FunctionCalling.cs | 2 +- 3 files changed, 16 insertions(+), 41 deletions(-) diff --git a/Editor/LLMCallerEditor.cs b/Editor/LLMCallerEditor.cs index 20ef6372..710f4aaa 100644 --- a/Editor/LLMCallerEditor.cs +++ b/Editor/LLMCallerEditor.cs @@ -28,21 +28,10 @@ public override void AddModelSettings(SerializedObject llmScriptSO) { EditorApplication.delayCall += () => { - string path = EditorUtility.OpenFilePanelWithFilters("Select a gbnf grammar file", "", new string[] { "Grammar Files", "gbnf" }); + string path = EditorUtility.OpenFilePanelWithFilters("Select a gbnf grammar file", "", new string[] { "Grammar Files", "json,gbnf" }); if (!string.IsNullOrEmpty(path)) { - ((LLMAgent)target).SetGrammar(path); - } - }; - } - if (GUILayout.Button("Load JSON grammar", GUILayout.Width(buttonWidth))) - { - EditorApplication.delayCall += () => - { - string path = EditorUtility.OpenFilePanelWithFilters("Select a json schema grammar file", "", new string[] { "Grammar Files", "json" }); - if (!string.IsNullOrEmpty(path)) - { - ((LLMAgent)target).SetGrammar(path); + ((LLMAgent)target).LoadGrammar(path); } }; } diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index fb59a065..bb2a3f2b 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -48,12 +48,9 @@ public LLM llm /// maximum number of tokens that the LLM will predict (-1 = infinity). [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] [Model] public int numPredict = -1; - /// grammar file used for the LLMAgent (.gbnf format) - [Tooltip("grammar file used for the LLMAgent (.gbnf format)")] + /// grammar used by the LLM + [Tooltip("grammar used by the LLM")] [ModelAdvanced] public string grammar = null; - /// grammar file used for the LLMAgent (.json format) - [Tooltip("grammar file used for the LLMAgent (.json format)")] - [ModelAdvanced] public string grammarJSON = null; /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] [ModelAdvanced] public bool cachePrompt = true; @@ -124,13 +121,6 @@ public LLM llm [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] [Chat] public bool stream = true; - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarString; - /// the grammar to use - [Tooltip("the grammar to use")] - public string grammarJSONString; - protected LLM _prellm; [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; public UndreamAI.LlamaLib.LLMClient llmClient @@ -179,7 +169,7 @@ protected virtual void SetupLLMClient() { if (!remote) llmClient = new UndreamAI.LlamaLib.LLMClient(llm.llmService); else llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); - InitGrammar(); + SetGrammar(grammar); completionParametersPre = ""; SetCompletionParameters(); } @@ -298,28 +288,24 @@ protected virtual LLM[] SortLLMsByBestMatching(LLM[] arrayIn) return array; } - protected virtual void InitGrammar() + /// + /// Sets the provided grammar (gbnf or json schema format) + /// + /// grammar in gbnf or json schema format + public virtual void SetGrammar(string grammarString) { - grammarString = ""; - if (!String.IsNullOrEmpty(grammar)) - { - grammarString = File.ReadAllText(LLMUnitySetup.GetAssetPath(grammar)); - } + grammar = grammarString; GetCaller().SetGrammar(grammarString); } /// - /// Sets the grammar file of the LLMAgent (GBNF or JSON schema) + /// Loads a grammar file /// /// path to the grammar file - public virtual async Task SetGrammar(string path) + public virtual void LoadGrammar(string path) { -#if UNITY_EDITOR - if (!EditorApplication.isPlaying) path = LLMUnitySetup.AddAsset(path); -#endif - await LLMUnitySetup.AndroidExtractAsset(path, true); - grammar = path; - InitGrammar(); + if (String.IsNullOrEmpty(path)) return; + SetGrammar(File.ReadAllText(path)); } /// diff --git a/Samples~/FunctionCalling/FunctionCalling.cs b/Samples~/FunctionCalling/FunctionCalling.cs index 0d31f32d..6c17b139 100644 --- a/Samples~/FunctionCalling/FunctionCalling.cs +++ b/Samples~/FunctionCalling/FunctionCalling.cs @@ -39,7 +39,7 @@ void Start() { playerText.onSubmit.AddListener(onInputFieldSubmit); playerText.Select(); - llmCharacter.grammarString = MultipleChoiceGrammar(); + llmCharacter.grammar = MultipleChoiceGrammar(); } string[] GetFunctionNames() From f778fb9a3386906fb96057dbf0b6adebc952c199 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 13:09:18 +0300 Subject: [PATCH 15/69] remove unused completion parameters --- Runtime/LLMClient.cs | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index bb2a3f2b..7b1dfb5f 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -88,12 +88,6 @@ public LLM llm /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; - /// penalize newline tokens when applying the repeat penalty. - [Tooltip("penalize newline tokens when applying the repeat penalty.")] - [ModelAdvanced] public bool penalizeNl = true; - /// prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt) - [Tooltip("prompt for the purpose of the penalty evaluation. Can be either null, a string or an array of numbers representing tokens (null/'' = use original prompt)")] - [ModelAdvanced] public string penaltyPrompt; /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] [ModelAdvanced, Int(0, 2)] public int mirostat = 0; @@ -109,9 +103,6 @@ public LLM llm /// ignore end of stream token and continue generating. [Tooltip("ignore end of stream token and continue generating.")] [ModelAdvanced] public bool ignoreEos = false; - /// stopwords to stop the LLM in addition to the default stopwords from the chat template. - [Tooltip("stopwords to stop the LLM in addition to the default stopwords from the chat template.")] - public List stop = new List(); /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. // [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] From 567ad3f5dc25e6eaf3e35918f2d8240a745cfd8c Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 17:58:47 +0300 Subject: [PATCH 16/69] getters/setters for variables needing more actions --- ...{LLMCallerEditor.cs => LLMClientEditor.cs} | 1 - README.md | 4 +- Runtime/LLMAgent.cs | 53 ++++++------ Runtime/LLMClient.cs | 81 ++++++++++--------- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 2 +- 5 files changed, 73 insertions(+), 68 deletions(-) rename Editor/{LLMCallerEditor.cs => LLMClientEditor.cs} (94%) diff --git a/Editor/LLMCallerEditor.cs b/Editor/LLMClientEditor.cs similarity index 94% rename from Editor/LLMCallerEditor.cs rename to Editor/LLMClientEditor.cs index 710f4aaa..50b7cac2 100644 --- a/Editor/LLMCallerEditor.cs +++ b/Editor/LLMClientEditor.cs @@ -23,7 +23,6 @@ public override void AddModelSettings(SerializedObject llmScriptSO) ShowPropertiesOfClass("", llmScriptSO, new List { typeof(ModelAttribute) }, false); EditorGUILayout.BeginHorizontal(); - GUILayout.Label("Grammar", GUILayout.Width(EditorGUIUtility.labelWidth)); if (GUILayout.Button("Load grammar", GUILayout.Width(buttonWidth))) { EditorApplication.delayCall += () => diff --git a/README.md b/README.md index 19cbbdda..03782890 100644 --- a/README.md +++ b/README.md @@ -328,8 +328,8 @@ public class MyScript : MonoBehaviour // set the character prompt llmCharacter.SetPrompt("A chat between a curious human and an artificial intelligence assistant."); // set the AI and player name - llmCharacter.AIName = "AI"; - llmCharacter.userName = "Human"; + llmCharacter.assistantRole = "AI"; + llmCharacter.userRole = "Human"; // optional: set streaming to false to get the complete result in one go // llmCharacter.stream = true; // optional: set a save path diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index c2aab154..05bd2a13 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -28,16 +28,36 @@ public class LLMAgent : LLMClient // [LLM] public bool debugPrompt = false; /// slot of the server to use for computation (affects caching) [Tooltip("slot of the server to use for computation (affects caching)")] - [ModelAdvanced] public int slot = -1; + [ModelAdvanced, SerializeField] protected int _slot = -1; + public int slot + { + get => _slot; + set { if (_slot != value) { _slot = value; if (llmAgent != null) llmAgent.SlotId = _slot; } } + } /// the name of the player - [Tooltip("the name of the player")] - [Chat] public string userName = "user"; + [Tooltip("the name of the user")] + [Chat, SerializeField] protected string _userRole = "user"; + public string userRole + { + get => _userRole; + set { if (_userRole != value) { _userRole = value; if (llmAgent != null) llmAgent.UserRole = _userRole; } } + } /// the name of the AI - [Tooltip("the name of the AI")] - [Chat] public string AIName = "assistant"; + [Tooltip("the name of the AI assistant")] + [Chat, SerializeField] protected string _assistantRole = "assistant"; + public string assistantRole + { + get => _assistantRole; + set { if (_assistantRole != value) { _assistantRole = value; if (llmAgent != null) llmAgent.AssistantRole = _assistantRole; } } + } /// a description of the AI role (system prompt) [Tooltip("a description of the AI role (system prompt)")] - [TextArea(5, 10), Chat] public string prompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; + [TextArea(5, 10), Chat, SerializeField] protected string _systemPrompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; + public string systemPrompt + { + get => _systemPrompt; + set { if (_systemPrompt != value) { _systemPrompt = value; if (llmAgent != null) llmAgent.SystemPrompt = _systemPrompt; } } + } [Local, SerializeField] protected UndreamAI.LlamaLib.LLMAgent _llmAgent; public UndreamAI.LlamaLib.LLMAgent llmAgent @@ -64,7 +84,7 @@ public List chat public override void Start() { base.Start(); - llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); InitHistory(); } @@ -74,25 +94,10 @@ protected override void OnValidate() if (llm != null && llm.parallelPrompts > -1 && (slot < -1 || slot >= llm.parallelPrompts)) LLMUnitySetup.LogError($"The slot needs to be between 0 and {llm.parallelPrompts - 1}, or -1 to be automatically set"); } - protected override string NotValidLLMError() - { - return base.NotValidLLMError() + $", it is an embedding only model"; - } - - /// - /// Checks if a LLM is valid for the LLMClient - /// - /// LLM object - /// bool specifying whether the LLM is valid - public override bool IsValidLLM(LLM llmSet) - { - return !llmSet.embeddingsOnly; - } - protected override void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) { base.SetLLMClient(llmClientSet); - llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, prompt, userName, AIName); + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); } protected override LLMLocal GetCaller() @@ -159,7 +164,7 @@ public virtual void SetPrompt(string newPrompt, bool clearChat = true) /// /// Allows to add a message in the chat history. /// - /// message role (e.g. userName or AIName) + /// message role (e.g. userRole or assistantRole) /// message content public virtual void AddMessage(string role, string content) { diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 7b1dfb5f..87178767 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -23,7 +23,12 @@ public class LLMClient : MonoBehaviour [HideInInspector] public bool advancedOptions = false; /// use remote LLM server [Tooltip("use remote LLM server")] - [LocalRemote] public bool remote = false; + [LocalRemote, SerializeField] protected bool _remote; + public bool remote + { + get => _remote; + set { if (_remote != value) { _remote = value; SetupLLMClient(); } } + } /// LLM GameObject to use [Tooltip("LLM GameObject to use")] // Tooltip: ignore [Local, SerializeField] protected LLM _llm; @@ -34,23 +39,40 @@ public LLM llm } /// API key for the remote server [Tooltip("API key for the remote server")] - [Remote] public string APIKey; + [Remote, SerializeField] protected string _APIKey; + public string APIKey + { + get => _APIKey; + set { if (_APIKey != value) { _APIKey = value; SetupLLMClient(); } } + } /// host of the remote LLM server [Tooltip("host of the remote LLM server")] - [Remote] public string host = "localhost"; + [Remote, SerializeField] protected string _host = "localhost"; + public string host + { + get => _host; + set { if (_host != value) { _host = value; SetupLLMClient(); } } + } /// port of the remote LLM server [Tooltip("port of the remote LLM server")] - [Remote] public int port = 13333; - /// number of retries to use for the remote LLM server requests (-1 = infinite) - [Tooltip("number of retries to use for the remote LLM server requests (-1 = infinite)")] - [Remote] public int numRetries = 10; + [Remote, SerializeField] protected int _port; + public int port + { + get => _port; + set { if (_port != value) { _port = value; SetupLLMClient(); } } + } + /// grammar used by the LLM + [Tooltip("grammar used by the LLM")] + [ModelAdvanced, SerializeField] protected string _grammar; + public string grammar + { + get => _grammar; + set => SetGrammar(value); + } /// maximum number of tokens that the LLM will predict (-1 = infinity). [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] [Model] public int numPredict = -1; - /// grammar used by the LLM - [Tooltip("grammar used by the LLM")] - [ModelAdvanced] public string grammar = null; /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] [ModelAdvanced] public bool cachePrompt = true; @@ -103,14 +125,6 @@ public LLM llm /// ignore end of stream token and continue generating. [Tooltip("ignore end of stream token and continue generating.")] [ModelAdvanced] public bool ignoreEos = false; - /// the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. - /// By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated. - // [Tooltip("the logit bias option allows to manually adjust the likelihood of specific tokens appearing in the generated text. By providing a token ID and a positive or negative bias value, you can increase or decrease the probability of that token being generated.")] - // public Dictionary logitBias = null; - /// Receive the reply from the model as it is produced (recommended!). - /// If not selected, the full reply from the model is received in one go - [Tooltip("Receive the reply from the model as it is produced (recommended!). If not selected, the full reply from the model is received in one go")] - [Chat] public bool stream = true; protected LLM _prellm; [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; @@ -162,7 +176,6 @@ protected virtual void SetupLLMClient() else llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); SetGrammar(grammar); completionParametersPre = ""; - SetCompletionParameters(); } protected virtual LLMLocal GetCaller() @@ -176,16 +189,12 @@ protected virtual LLMLocal GetCaller() /// LLM object protected virtual void SetLLM(LLM llmSet) { + if (llmSet == _llm) return; if (remote) { LLMUnitySetup.LogError("The client is in remote mode"); return; } - if (llmSet != null && !IsValidLLM(llmSet)) - { - LLMUnitySetup.LogError(NotValidLLMError()); - llmSet = null; - } _llm = llmSet; _prellm = _llm; if (started) SetupLLMClient(); @@ -196,16 +205,6 @@ protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) _llmClient = llmClientSet; } - /// - /// Checks if a LLM is valid for the LLMClient - /// - /// LLM object - /// bool specifying whether the LLM is valid - public virtual bool IsValidLLM(LLM llmSet) - { - return true; - } - /// /// Checks if a LLM can be auto-assigned if the LLM of the LLMClient is null /// @@ -216,11 +215,6 @@ public virtual bool IsAutoAssignableLLM(LLM llmSet) return true; } - protected virtual string NotValidLLMError() - { - return $"Can't set LLM {llm.name} to {name}"; - } - protected virtual void OnValidate() { if (_llm != _prellm) SetLLM(_llm); @@ -243,7 +237,7 @@ protected virtual void AssignLLM() foreach (LLM foundllm in FindObjectsOfType()) #endif { - if (IsValidLLM(foundllm) && IsAutoAssignableLLM(foundllm)) validLLMs.Add(foundllm); + if (IsAutoAssignableLLM(foundllm)) validLLMs.Add(foundllm); } if (validLLMs.Count == 0) return; @@ -351,6 +345,13 @@ public virtual List Embeddings(string query, Callback> callba protected virtual void SetCompletionParameters() { + if (llm.embeddingsOnly) + { + string error = "LLM can't be used for completion, it is an embeddings only model!"; + LLMUnitySetup.LogError(error); + throw new Exception(error); + } + JObject json = new JObject { ["temperature"] = temperature, diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index f779ae2e..42311c02 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -135,7 +135,7 @@ protected override void DropdownChange(int selection) Debug.Log($"{currentBotName}: {rag.Count(currentBotName)} phrases available"); // set the LLMCharacter name - llmCharacter.AIName = currentBotName; + llmCharacter.assistantRole = currentBotName; } void SetAIText(string text) From 958f8b9e4151e8fe9f08b4bbf2fdec1e447f4db2 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 18 Aug 2025 18:08:41 +0300 Subject: [PATCH 17/69] remove not needed classes --- ...Editor.cs.meta => LLMClientEditor.cs.meta} | 2 +- README.md | 64 +- Runtime/LLMCharacter.cs | 14 - Runtime/LLMCharacter.cs.meta | 11 - Runtime/LLMLib.cs | 734 ------------------ Runtime/LLMLib.cs.meta | 11 - Samples~/ChatBot/ChatBot.cs | 14 +- Samples~/FunctionCalling/FunctionCalling.cs | 12 +- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 14 +- Samples~/MobileDemo/MobileDemo.cs | 14 +- .../MultipleCharacters/MultipleCharacters.cs | 12 +- Samples~/RAG/RAGAndLLM_Sample.cs | 8 +- .../SimpleInteraction/SimpleInteraction.cs | 10 +- Tests/Runtime/TestLLM.cs | 106 +-- 14 files changed, 128 insertions(+), 898 deletions(-) rename Editor/{LLMCallerEditor.cs.meta => LLMClientEditor.cs.meta} (83%) delete mode 100644 Runtime/LLMCharacter.cs delete mode 100644 Runtime/LLMCharacter.cs.meta delete mode 100644 Runtime/LLMLib.cs delete mode 100644 Runtime/LLMLib.cs.meta diff --git a/Editor/LLMCallerEditor.cs.meta b/Editor/LLMClientEditor.cs.meta similarity index 83% rename from Editor/LLMCallerEditor.cs.meta rename to Editor/LLMClientEditor.cs.meta index 113bed10..a8c8d2fc 100644 --- a/Editor/LLMCallerEditor.cs.meta +++ b/Editor/LLMClientEditor.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7d6ebb9c97f8c2e959bbdb536ee13ec5 +guid: 5a933780afd25b58aa243136435108ec MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/README.md b/README.md index 03782890..b108a329 100644 --- a/README.md +++ b/README.md @@ -93,7 +93,7 @@ First you will setup the LLM for your game 🏎: - Download one of the default models with the `Download Model` button (~GBs).
Or load your own .gguf model with the `Load model` button (see [LLM model management](#llm-model-management)). Then you can setup each of your characters as follows 🙋‍♀️: -- Create an empty GameObject for the character.
In the GameObject Inspector click `Add Component` and select the LLMCharacter script. +- Create an empty GameObject for the character.
In the GameObject Inspector click `Add Component` and select the LLMAgent script. - Define the role of your AI in the `Prompt`. You can define the name of the AI (`AI Name`) and the player (`Player Name`). - (Optional) Select the LLM constructed above in the `LLM` field if you have more than one LLM GameObjects. @@ -104,7 +104,7 @@ In your script you can then use it as follows 🦄: using LLMUnity; public class MyScript { - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; void HandleReply(string reply){ // do something with the reply from the model @@ -115,7 +115,7 @@ public class MyScript { // your game function ... string message = "Hello bot!"; - _ = llmCharacter.Chat(message, HandleReply); + _ = llmAgent.Chat(message, HandleReply); ... } } @@ -132,17 +132,17 @@ This is useful if the `Stream` option is enabled for continuous output from the // your game function ... string message = "Hello bot!"; - _ = llmCharacter.Chat(message, HandleReply, ReplyCompleted); + _ = llmAgent.Chat(message, HandleReply, ReplyCompleted); ... } ``` To stop the chat without waiting for its completion you can use: ``` c# - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); ``` -- Finally, in the Inspector of the GameObject of your script, select the LLMCharacter GameObject created above as the llmCharacter property. +- Finally, in the Inspector of the GameObject of your script, select the LLMAgent GameObject created above as the llmAgent property. That's all ✨!

@@ -185,17 +185,17 @@ The [MobileDemo](Samples~/MobileDemo) is an example application for Android / iO Restrict the output of the LLM / Function calling To restrict the output of the LLM you can use a grammar, read more [here](https://github.com/ggerganov/llama.cpp/tree/master/grammars).
-The grammar can be saved in a .gbnf file and loaded at the LLMCharacter with the `Load Grammar` button (Advanced options).
+The grammar can be saved in a .gbnf file and loaded at the LLMAgent with the `Load Grammar` button (Advanced options).
For instance to receive replies in json format you can use the [json.gbnf](https://github.com/ggerganov/llama.cpp/blob/b4218/grammars/json.gbnf) grammar.
Graamars in JSON schema format are also supported and can be loaded with the `Load JSON Grammar` button (Advanced options).
Alternatively you can set the grammar directly with code: ``` c# // GBNF grammar -llmCharacter.grammarString = "your GBNF grammar here"; +llmAgent.grammarString = "your GBNF grammar here"; // or JSON schema grammar -llmCharacter.grammarJSONString = "your JSON schema grammar here"; +llmAgent.grammarJSONString = "your JSON schema grammar here"; ``` For function calling you can define similarly a grammar that allows only the function names as output, and then call the respective function.
@@ -204,22 +204,22 @@ You can look into the [FunctionCalling](Samples~/FunctionCalling) sample for an
Access / Save / Load your chat history -The chat history of a `LLMCharacter` is retained in the `chat` variable that is a list of `ChatMessage` objects.
+The chat history of a `LLMAgent` is retained in the `chat` variable that is a list of `ChatMessage` objects.
The ChatMessage is a struct that defines the `role` of the message and the `content`.
The first element of the list is always the system prompt and then alternating messages with the player prompt and the AI reply.
You can modify the chat history directly in this list.
-To automatically save / load your chat history, you can specify the `Save` parameter of the LLMCharacter to the filename (or relative path) of your choice. +To automatically save / load your chat history, you can specify the `Save` parameter of the LLMAgent to the filename (or relative path) of your choice. The file is saved in the [persistentDataPath folder of Unity](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html). This also saves the state of the LLM which means that the previously cached prompt does not need to be recomputed. To manually save your chat history, you can use: ``` c# - llmCharacter.Save("filename"); + llmAgent.Save("filename"); ``` and to load the history: ``` c# - llmCharacter.Load("filename"); + llmAgent.Load("filename"); ``` where filename the filename or relative path of your choice. @@ -236,7 +236,7 @@ where filename the filename or relative path of your choice. void Game(){ // your game function ... - _ = llmCharacter.Warmup(WarmupCompleted); + _ = llmAgent.Warmup(WarmupCompleted); ... } ``` @@ -251,7 +251,7 @@ where filename the filename or relative path of your choice. // your game function ... string message = "Hello bot!"; - _ = llmCharacter.Chat(message, HandleReply, ReplyCompleted, false); + _ = llmAgent.Chat(message, HandleReply, ReplyCompleted, false); ... } ``` @@ -265,7 +265,7 @@ where filename the filename or relative path of your choice. // your game function ... string message = "The cat is away"; - _ = llmCharacter.Complete(message, HandleReply, ReplyCompleted); + _ = llmAgent.Complete(message, HandleReply, ReplyCompleted); ... } ``` @@ -280,7 +280,7 @@ where filename the filename or relative path of your choice. // your game function ... string message = "Hello bot!"; - string reply = await llmCharacter.Chat(message, HandleReply, ReplyCompleted); + string reply = await llmAgent.Chat(message, HandleReply, ReplyCompleted); Debug.Log(reply); ... } @@ -288,7 +288,7 @@ where filename the filename or relative path of your choice.
-Add a LLM / LLMCharacter component programmatically +Add a LLM / LLMAgent component programmatically ``` c# using UnityEngine; @@ -297,7 +297,7 @@ using LLMUnity; public class MyScript : MonoBehaviour { LLM llm; - LLMCharacter llmCharacter; + LLMAgent llmAgent; async void Start() { @@ -321,23 +321,23 @@ public class MyScript : MonoBehaviour // optional: enable GPU by setting the number of model layers to offload to it llm.numGPULayers = 10; - // Add an LLMCharacter object - llmCharacter = gameObject.AddComponent(); + // Add an LLMAgent object + llmAgent = gameObject.AddComponent(); // set the LLM object that handles the model - llmCharacter.llm = llm; + llmAgent.llm = llm; // set the character prompt - llmCharacter.SetPrompt("A chat between a curious human and an artificial intelligence assistant."); + llmAgent.SetPrompt("A chat between a curious human and an artificial intelligence assistant."); // set the AI and player name - llmCharacter.assistantRole = "AI"; - llmCharacter.userRole = "Human"; + llmAgent.assistantRole = "AI"; + llmAgent.userRole = "Human"; // optional: set streaming to false to get the complete result in one go - // llmCharacter.stream = true; + // llmAgent.stream = true; // optional: set a save path - // llmCharacter.save = "AICharacter1"; + // llmAgent.save = "AICharacter1"; // optional: enable the save cache to avoid recomputation when loading a save file (requires ~100 MB) - // llmCharacter.saveCache = true; + // llmAgent.saveCache = true; // optional: set a grammar - // await llmCharacter.SetGrammar("json.gbnf"); + // await llmAgent.SetGrammar("json.gbnf"); // re-enable gameObject gameObject.SetActive(true); @@ -366,7 +366,7 @@ Alternatively you can use a server binary for easier deployment: In both cases you'll need to enable 'Allow Downloads Over HTTP' in the project settings. **Create the characters**
-Create a second project with the game characters using the `LLMCharacter` script as described above. +Create a second project with the game characters using the `LLMAgent` script as described above. Enable the `Remote` option and configure the host with the IP address (starting with "http://") and port of the server.
@@ -375,7 +375,7 @@ Enable the `Remote` option and configure the host with the IP address (starting The `Embeddings` function can be used to obtain the emdeddings of a phrase: ``` c# - List embeddings = await llmCharacter.Embeddings("hi, how are you?"); + List embeddings = await llmAgent.Embeddings("hi, how are you?"); ``` @@ -460,7 +460,7 @@ You can use the RAG to feed relevant data to the LLM based on a user message: prompt += $"Data:\n"; foreach (string similarPhrase in similarPhrases) prompt += $"\n- {similarPhrase}"; - _ = llmCharacter.Chat(prompt, HandleReply, ReplyCompleted); + _ = llmAgent.Chat(prompt, HandleReply, ReplyCompleted); ``` The `RAG` sample includes an example RAG implementation as well as an example RAG-LLM integration. diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs deleted file mode 100644 index 93f02fce..00000000 --- a/Runtime/LLMCharacter.cs +++ /dev/null @@ -1,14 +0,0 @@ -/// @file -/// @brief File implementing the LLM characters. -using UnityEngine; - -namespace LLMUnity -{ - [DefaultExecutionOrder(-2)] - /// @ingroup llm - /// - /// Class implementing the LLM characters. - /// - public class LLMCharacter : LLMUnity.LLMAgent - {} -} diff --git a/Runtime/LLMCharacter.cs.meta b/Runtime/LLMCharacter.cs.meta deleted file mode 100644 index bfe1cd03..00000000 --- a/Runtime/LLMCharacter.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Runtime/LLMLib.cs b/Runtime/LLMLib.cs deleted file mode 100644 index 64e547e1..00000000 --- a/Runtime/LLMLib.cs +++ /dev/null @@ -1,734 +0,0 @@ -/// @file -/// @brief File implementing the LLM library calls. -/// \cond HIDE -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.InteropServices; -using UnityEngine; - -namespace LLMUnity -{ - /// @ingroup utils - /// - /// Class implementing a wrapper for a communication stream between Unity and the llama.cpp library (mainly for completion calls and logging). - /// - public class StreamWrapper - { - LLMLib llmlib; - Callback callback; - IntPtr stringWrapper; - string previousString = ""; - string previousCalledString = ""; - int previousBufferSize = 0; - bool clearOnUpdate; - - public StreamWrapper(LLMLib llmlib, Callback callback, bool clearOnUpdate = false) - { - this.llmlib = llmlib; - this.callback = callback; - this.clearOnUpdate = clearOnUpdate; - stringWrapper = (llmlib?.StringWrapper_Construct()).GetValueOrDefault(); - } - - /// - /// Retrieves the content of the stream - /// - /// whether to clear the stream after retrieving the content - /// stream content - public string GetString(bool clear = false) - { - string result; - int bufferSize = (llmlib?.StringWrapper_GetStringSize(stringWrapper)).GetValueOrDefault(); - if (bufferSize <= 1) - { - result = ""; - } - else if (previousBufferSize != bufferSize) - { - IntPtr buffer = Marshal.AllocHGlobal(bufferSize); - try - { - llmlib?.StringWrapper_GetString(stringWrapper, buffer, bufferSize, clear); - result = Marshal.PtrToStringAnsi(buffer); - } - finally - { - Marshal.FreeHGlobal(buffer); - } - previousString = result; - } - else - { - result = previousString; - } - previousBufferSize = bufferSize; - return result; - } - - /// - /// Unity Update implementation that retrieves the content and calls the callback if it has changed. - /// - public void Update() - { - if (stringWrapper == IntPtr.Zero) return; - string result = GetString(clearOnUpdate); - if (result != "" && previousCalledString != result) - { - callback?.Invoke(result); - previousCalledString = result; - } - } - - /// - /// Gets the stringWrapper object to pass to the library. - /// - /// stringWrapper object - public IntPtr GetStringWrapper() - { - return stringWrapper; - } - - /// - /// Deletes the stringWrapper object. - /// - public void Destroy() - { - if (stringWrapper != IntPtr.Zero) llmlib?.StringWrapper_Delete(stringWrapper); - } - } - - /// @ingroup utils - /// - /// Class implementing a library loader for Unity. - /// Adapted from SkiaForUnity: - /// https://github.com/ammariqais/SkiaForUnity/blob/f43322218c736d1c41f3a3df9355b90db4259a07/SkiaUnity/Assets/SkiaSharp/SkiaSharp-Bindings/SkiaSharp.HarfBuzz.Shared/HarfBuzzSharp.Shared/LibraryLoader.cs - /// - static class LibraryLoader - { - /// - /// Allows to retrieve a function delegate for the library - /// - /// type to cast the function - /// library handle - /// function name - /// function delegate - public static T GetSymbolDelegate(IntPtr library, string name) where T : Delegate - { - var symbol = GetSymbol(library, name); - if (symbol == IntPtr.Zero) - throw new EntryPointNotFoundException($"Unable to load symbol '{name}'."); - - return Marshal.GetDelegateForFunctionPointer(symbol); - } - - /// - /// Loads the provided library in a cross-platform manner - /// - /// library path - /// library handle - public static IntPtr LoadLibrary(string libraryName) - { - if (string.IsNullOrEmpty(libraryName)) - throw new ArgumentNullException(nameof(libraryName)); - - IntPtr handle; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - handle = Win32.LoadLibrary(libraryName); - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - handle = Linux.dlopen(libraryName); - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) - handle = Mac.dlopen(libraryName); - else if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.VisionOS) - handle = Mobile.dlopen(libraryName); - else - throw new PlatformNotSupportedException($"Current platform is unknown, unable to load library '{libraryName}'."); - - return handle; - } - - /// - /// Retrieve a function delegate for the library in a cross-platform manner - /// - /// library handle - /// function name - /// function handle - public static IntPtr GetSymbol(IntPtr library, string symbolName) - { - if (string.IsNullOrEmpty(symbolName)) - throw new ArgumentNullException(nameof(symbolName)); - - IntPtr handle; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - handle = Win32.GetProcAddress(library, symbolName); - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - handle = Linux.dlsym(library, symbolName); - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) - handle = Mac.dlsym(library, symbolName); - else if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.VisionOS) - handle = Mobile.dlsym(library, symbolName); - else - throw new PlatformNotSupportedException($"Current platform is unknown, unable to load symbol '{symbolName}' from library {library}."); - - return handle; - } - - /// - /// Frees up the library - /// - /// library handle - public static void FreeLibrary(IntPtr library) - { - if (library == IntPtr.Zero) - return; - - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - Win32.FreeLibrary(library); - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - Linux.dlclose(library); - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) - Mac.dlclose(library); - else if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.VisionOS) - Mobile.dlclose(library); - else - throw new PlatformNotSupportedException($"Current platform is unknown, unable to close library '{library}'."); - } - - private static class Mac - { - private const string SystemLibrary = "/usr/lib/libSystem.dylib"; - - private const int RTLD_LAZY = 1; - private const int RTLD_NOW = 2; - - public static IntPtr dlopen(string path, bool lazy = true) => - dlopen(path, lazy ? RTLD_LAZY : RTLD_NOW); - - [DllImport(SystemLibrary)] - public static extern IntPtr dlopen(string path, int mode); - - [DllImport(SystemLibrary)] - public static extern IntPtr dlsym(IntPtr handle, string symbol); - - [DllImport(SystemLibrary)] - public static extern void dlclose(IntPtr handle); - } - - private static class Linux - { - private const string SystemLibrary = "libdl.so"; - private const string SystemLibrary2 = "libdl.so.2"; // newer Linux distros use this - - private const int RTLD_LAZY = 1; - private const int RTLD_NOW = 2; - - private static bool UseSystemLibrary2 = true; - - public static IntPtr dlopen(string path, bool lazy = true) - { - try - { - return dlopen2(path, lazy ? RTLD_LAZY : RTLD_NOW); - } - catch (DllNotFoundException) - { - UseSystemLibrary2 = false; - return dlopen1(path, lazy ? RTLD_LAZY : RTLD_NOW); - } - } - - public static IntPtr dlsym(IntPtr handle, string symbol) - { - return UseSystemLibrary2 ? dlsym2(handle, symbol) : dlsym1(handle, symbol); - } - - public static void dlclose(IntPtr handle) - { - if (UseSystemLibrary2) - dlclose2(handle); - else - dlclose1(handle); - } - - [DllImport(SystemLibrary, EntryPoint = "dlopen")] - private static extern IntPtr dlopen1(string path, int mode); - - [DllImport(SystemLibrary, EntryPoint = "dlsym")] - private static extern IntPtr dlsym1(IntPtr handle, string symbol); - - [DllImport(SystemLibrary, EntryPoint = "dlclose")] - private static extern void dlclose1(IntPtr handle); - - [DllImport(SystemLibrary2, EntryPoint = "dlopen")] - private static extern IntPtr dlopen2(string path, int mode); - - [DllImport(SystemLibrary2, EntryPoint = "dlsym")] - private static extern IntPtr dlsym2(IntPtr handle, string symbol); - - [DllImport(SystemLibrary2, EntryPoint = "dlclose")] - private static extern void dlclose2(IntPtr handle); - } - - private static class Win32 - { - private const string SystemLibrary = "Kernel32.dll"; - - [DllImport(SystemLibrary, SetLastError = true, CharSet = CharSet.Ansi)] - public static extern IntPtr LoadLibrary(string lpFileName); - - [DllImport(SystemLibrary, SetLastError = true, CharSet = CharSet.Ansi)] - public static extern IntPtr GetProcAddress(IntPtr hModule, string lpProcName); - - [DllImport(SystemLibrary, SetLastError = true, CharSet = CharSet.Ansi)] - public static extern void FreeLibrary(IntPtr hModule); - } - - private static class Mobile - { - public static IntPtr dlopen(string path) => dlopen(path, 1); - -#if UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS - [DllImport("__Internal")] - public static extern IntPtr dlopen(string filename, int flags); - - [DllImport("__Internal")] - public static extern IntPtr dlsym(IntPtr handle, string symbol); - - [DllImport("__Internal")] - public static extern int dlclose(IntPtr handle); -#else - public static IntPtr dlopen(string filename, int flags) - { - return default; - } - - public static IntPtr dlsym(IntPtr handle, string symbol) - { - return default; - } - - public static int dlclose(IntPtr handle) - { - return default; - } - -#endif - } - } - - /// @ingroup utils - /// - /// Class implementing the LLM library handling - /// - public class LLMLib - { - public string architecture { get; private set; } - IntPtr libraryHandle = IntPtr.Zero; - static bool has_avx = false; - static bool has_avx2 = false; - static bool has_avx512 = false; - List dependencyHandles = new List(); - -#if (UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) && !UNITY_EDITOR - - public LLMLib(string arch) - { - architecture = arch; - } - -#if UNITY_ANDROID - public const string LibraryName = "libundreamai_android"; -#else - public const string LibraryName = "__Internal"; -#endif - - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "Logging")] - public static extern void LoggingStatic(IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "StopLogging")] - public static extern void StopLoggingStatic(); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Construct")] - public static extern IntPtr LLM_ConstructStatic(string command); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Delete")] - public static extern void LLM_DeleteStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_StartServer")] - public static extern void LLM_StartServerStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_StopServer")] - public static extern void LLM_StopServerStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Start")] - public static extern void LLM_StartStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Started")] - public static extern bool LLM_StartedStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Stop")] - public static extern void LLM_StopStatic(IntPtr LLMObject); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_SetTemplate")] - public static extern void LLM_SetTemplateStatic(IntPtr LLMObject, string chatTemplate); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_SetSSL")] - public static extern void LLM_SetSSLStatic(IntPtr LLMObject, string SSLCert, string SSLKey); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Tokenize")] - public static extern void LLM_TokenizeStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Detokenize")] - public static extern void LLM_DetokenizeStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Embeddings")] - public static extern void LLM_EmbeddingsStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_Weight")] - public static extern void LLM_LoraWeightStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_List")] - public static extern void LLM_LoraListStatic(IntPtr LLMObject, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Completion")] - public static extern void LLM_CompletionStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Slot")] - public static extern void LLM_SlotStatic(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Cancel")] - public static extern void LLM_CancelStatic(IntPtr LLMObject, int idSlot); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Status")] - public static extern int LLM_StatusStatic(IntPtr LLMObject, IntPtr stringWrapper); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "StringWrapper_Construct")] - public static extern IntPtr StringWrapper_ConstructStatic(); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "StringWrapper_Delete")] - public static extern void StringWrapper_DeleteStatic(IntPtr instance); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "StringWrapper_GetStringSize")] - public static extern int StringWrapper_GetStringSizeStatic(IntPtr instance); - [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "StringWrapper_GetString")] - public static extern void StringWrapper_GetStringStatic(IntPtr instance, IntPtr buffer, int bufferSize, bool clear = false); - - public void Logging(IntPtr stringWrapper) { LoggingStatic(stringWrapper); } - public void StopLogging() { StopLoggingStatic(); } - public IntPtr LLM_Construct(string command) { return LLM_ConstructStatic(command); } - public void LLM_Delete(IntPtr LLMObject) { LLM_DeleteStatic(LLMObject); } - public void LLM_StartServer(IntPtr LLMObject) { LLM_StartServerStatic(LLMObject); } - public void LLM_StopServer(IntPtr LLMObject) { LLM_StopServerStatic(LLMObject); } - public void LLM_Start(IntPtr LLMObject) { LLM_StartStatic(LLMObject); } - public bool LLM_Started(IntPtr LLMObject) { return LLM_StartedStatic(LLMObject); } - public void LLM_Stop(IntPtr LLMObject) { LLM_StopStatic(LLMObject); } - public void LLM_SetTemplate(IntPtr LLMObject, string chatTemplate) { LLM_SetTemplateStatic(LLMObject, chatTemplate); } - public void LLM_SetSSL(IntPtr LLMObject, string SSLCert, string SSLKey) { LLM_SetSSLStatic(LLMObject, SSLCert, SSLKey); } - public void LLM_Tokenize(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_TokenizeStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_Detokenize(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_DetokenizeStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_Embeddings(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_EmbeddingsStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_LoraWeight(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_LoraWeightStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_LoraList(IntPtr LLMObject, IntPtr stringWrapper) { LLM_LoraListStatic(LLMObject, stringWrapper); } - public void LLM_Completion(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_CompletionStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_Slot(IntPtr LLMObject, string jsonData, IntPtr stringWrapper) { LLM_SlotStatic(LLMObject, jsonData, stringWrapper); } - public void LLM_Cancel(IntPtr LLMObject, int idSlot) { LLM_CancelStatic(LLMObject, idSlot); } - public int LLM_Status(IntPtr LLMObject, IntPtr stringWrapper) { return LLM_StatusStatic(LLMObject, stringWrapper); } - public IntPtr StringWrapper_Construct() { return StringWrapper_ConstructStatic(); } - public void StringWrapper_Delete(IntPtr instance) { StringWrapper_DeleteStatic(instance); } - public int StringWrapper_GetStringSize(IntPtr instance) { return StringWrapper_GetStringSizeStatic(instance); } - public void StringWrapper_GetString(IntPtr instance, IntPtr buffer, int bufferSize, bool clear = false) { StringWrapper_GetStringStatic(instance, buffer, bufferSize, clear); } - -#else - - static bool has_avx_set = false; - static readonly object staticLock = new object(); - - static LLMLib() - { - lock (staticLock) - { - if (has_avx_set) return; - string archCheckerPath = GetArchitectureCheckerPath(); - if (archCheckerPath != null) - { - IntPtr archCheckerHandle = LibraryLoader.LoadLibrary(archCheckerPath); - if (archCheckerHandle == IntPtr.Zero) - { - LLMUnitySetup.LogError($"Failed to load library {archCheckerPath}."); - } - else - { - try - { - has_avx = LibraryLoader.GetSymbolDelegate(archCheckerHandle, "has_avx")(); - has_avx2 = LibraryLoader.GetSymbolDelegate(archCheckerHandle, "has_avx2")(); - has_avx512 = LibraryLoader.GetSymbolDelegate(archCheckerHandle, "has_avx512")(); - LibraryLoader.FreeLibrary(archCheckerHandle); - } - catch (Exception e) - { - LLMUnitySetup.LogError($"{e.GetType()}: {e.Message}"); - } - } - } - has_avx_set = true; - } - } - - /// - /// Loads the library and function handles for the defined architecture - /// - /// archtecture - /// - public LLMLib(string arch) - { - architecture = arch; - foreach (string dependency in GetArchitectureDependencies(arch)) - { - LLMUnitySetup.Log($"Loading {dependency}"); - dependencyHandles.Add(LibraryLoader.LoadLibrary(dependency)); - } - - libraryHandle = LibraryLoader.LoadLibrary(GetArchitecturePath(arch)); - if (libraryHandle == IntPtr.Zero) - { - throw new Exception($"Failed to load library {arch}."); - } - - LLM_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Construct"); - LLM_Delete = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Delete"); - LLM_StartServer = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_StartServer"); - LLM_StopServer = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_StopServer"); - LLM_Start = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start"); - LLM_Started = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Started"); - LLM_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop"); - LLM_SetTemplate = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_SetTemplate"); - LLM_SetSSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_SetSSL"); - LLM_Tokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); - LLM_Detokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Detokenize"); - LLM_Embeddings = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embeddings"); - LLM_LoraWeight = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_Weight"); - LLM_LoraList = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_List"); - LLM_Completion = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Completion"); - LLM_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Slot"); - LLM_Cancel = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Cancel"); - LLM_Status = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status"); - StringWrapper_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "StringWrapper_Construct"); - StringWrapper_Delete = LibraryLoader.GetSymbolDelegate(libraryHandle, "StringWrapper_Delete"); - StringWrapper_GetStringSize = LibraryLoader.GetSymbolDelegate(libraryHandle, "StringWrapper_GetStringSize"); - StringWrapper_GetString = LibraryLoader.GetSymbolDelegate(libraryHandle, "StringWrapper_GetString"); - Logging = LibraryLoader.GetSymbolDelegate(libraryHandle, "Logging"); - StopLogging = LibraryLoader.GetSymbolDelegate(libraryHandle, "StopLogging"); - } - - /// - /// Gets the path of a library that allows to detect the underlying CPU (Windows / Linux). - /// - /// architecture checker library path - public static string GetArchitectureCheckerPath() - { - string filename; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - { - filename = "win-x64/native/llamalib_win-x64_runtime.dll"; - } - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - { - filename = "linux-x64/native/libllamalib_linux-x64_runtime.so"; - } - else - { - return null; - } - return Path.Combine(LLMUnitySetup.libraryPath, filename); - } - - /// - /// Gets additional dependencies for the specified architecture. - /// - /// architecture - /// paths of dependency dlls - public static List GetArchitectureDependencies(string arch) - { - List dependencies = new List(); - if (arch == "cublas") - { - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cudart64_12.dll")); - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cublasLt64_12.dll")); - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/cublas64_12.dll")); - } - } - else if (arch == "vulkan") - { - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "win-x64/native/vulkan-1.dll")); - } - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - { - dependencies.Add(Path.Combine(LLMUnitySetup.libraryPath, "linux-x64/native/libvulkan.so.1")); - } - } - return dependencies; - } - - /// - /// Gets the path of the llama.cpp library for the specified architecture. - /// - /// architecture - /// llama.cpp library path - public static string GetArchitecturePath(string arch) - { - string filename; - string os = OSName(); - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - { - filename = $"{os}/native/llamalib_${os}_{arch}.dll"; - } - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - { - filename = $"{os}/native/libllamalib_${os}_{arch}.so"; - } - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) - { - filename = $"{os}/native/libllamalib_${os}_{arch}.dylib"; - } - else - { - string error = "Unknown OS"; - LLMUnitySetup.LogError(error); - throw new Exception(error); - } - return Path.Combine(LLMUnitySetup.libraryPath, filename); - } - - public delegate bool HasArchDelegate(); - public delegate void LoggingDelegate(IntPtr stringWrapper); - public delegate void StopLoggingDelegate(); - public delegate IntPtr LLM_ConstructDelegate(string command); - public delegate void LLM_DeleteDelegate(IntPtr LLMObject); - public delegate void LLM_StartServerDelegate(IntPtr LLMObject); - public delegate void LLM_StopServerDelegate(IntPtr LLMObject); - public delegate void LLM_StartDelegate(IntPtr LLMObject); - public delegate bool LLM_StartedDelegate(IntPtr LLMObject); - public delegate void LLM_StopDelegate(IntPtr LLMObject); - public delegate void LLM_SetTemplateDelegate(IntPtr LLMObject, string chatTemplate); - public delegate void LLM_SetSSLDelegate(IntPtr LLMObject, string SSLCert, string SSLKey); - public delegate void LLM_TokenizeDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_DetokenizeDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_EmbeddingsDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_LoraWeightDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_LoraListDelegate(IntPtr LLMObject, IntPtr stringWrapper); - public delegate void LLM_CompletionDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_SlotDelegate(IntPtr LLMObject, string jsonData, IntPtr stringWrapper); - public delegate void LLM_CancelDelegate(IntPtr LLMObject, int idSlot); - public delegate int LLM_StatusDelegate(IntPtr LLMObject, IntPtr stringWrapper); - public delegate IntPtr StringWrapper_ConstructDelegate(); - public delegate void StringWrapper_DeleteDelegate(IntPtr instance); - public delegate int StringWrapper_GetStringSizeDelegate(IntPtr instance); - public delegate void StringWrapper_GetStringDelegate(IntPtr instance, IntPtr buffer, int bufferSize, bool clear = false); - - public LoggingDelegate Logging; - public StopLoggingDelegate StopLogging; - public LLM_ConstructDelegate LLM_Construct; - public LLM_DeleteDelegate LLM_Delete; - public LLM_StartServerDelegate LLM_StartServer; - public LLM_StopServerDelegate LLM_StopServer; - public LLM_StartDelegate LLM_Start; - public LLM_StartedDelegate LLM_Started; - public LLM_StopDelegate LLM_Stop; - public LLM_SetTemplateDelegate LLM_SetTemplate; - public LLM_SetSSLDelegate LLM_SetSSL; - public LLM_TokenizeDelegate LLM_Tokenize; - public LLM_DetokenizeDelegate LLM_Detokenize; - public LLM_CompletionDelegate LLM_Completion; - public LLM_EmbeddingsDelegate LLM_Embeddings; - public LLM_LoraWeightDelegate LLM_LoraWeight; - public LLM_LoraListDelegate LLM_LoraList; - public LLM_SlotDelegate LLM_Slot; - public LLM_CancelDelegate LLM_Cancel; - public LLM_StatusDelegate LLM_Status; - public StringWrapper_ConstructDelegate StringWrapper_Construct; - public StringWrapper_DeleteDelegate StringWrapper_Delete; - public StringWrapper_GetStringSizeDelegate StringWrapper_GetStringSize; - public StringWrapper_GetStringDelegate StringWrapper_GetString; - -#endif - - public static string OSName() - { - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) - return "win-x64"; - else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - return "linux-x64"; - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer) - return "osx-universal"; - string error = "Unknown OS"; - LLMUnitySetup.LogError(error); - throw new Exception(error); - } - /// - /// Identifies the possible architectures that we can use based on the OS and GPU usage - /// - /// whether to allow GPU architectures - /// possible architectures - public static List PossibleArchitectures(bool gpu = false) - { - List architectures = new List(); - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer || - Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) - { - if (gpu) - { - architectures.Add("cublas"); - architectures.Add("tinyblas"); - architectures.Add("hip"); - architectures.Add("vulkan"); - } - if (has_avx512) architectures.Add("avx512"); - if (has_avx2) architectures.Add("avx2"); - if (has_avx) architectures.Add("avx"); - architectures.Add("noavx"); - } - else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer) - { - architectures.Add("acc"); - architectures.Add("no_acc"); - } - else if (Application.platform == RuntimePlatform.Android) - { - architectures.Add("android"); - } - else if (Application.platform == RuntimePlatform.IPhonePlayer) - { - architectures.Add("ios"); - } - else if (Application.platform == RuntimePlatform.VisionOS) - { - architectures.Add("visionos"); - } - else - { - string error = "Unknown OS"; - LLMUnitySetup.LogError(error); - throw new Exception(error); - } - return architectures; - } - - /// - /// Allows to retrieve a string from the library (Unity only allows marshalling of chars) - /// - /// string wrapper pointer - /// retrieved string - public string GetStringWrapperResult(IntPtr stringWrapper) - { - string result = ""; - int bufferSize = StringWrapper_GetStringSize(stringWrapper); - if (bufferSize > 1) - { - IntPtr buffer = Marshal.AllocHGlobal(bufferSize); - try - { - StringWrapper_GetString(stringWrapper, buffer, bufferSize); - result = Marshal.PtrToStringAnsi(buffer); - } - finally - { - Marshal.FreeHGlobal(buffer); - } - } - return result; - } - - /// - /// Destroys the LLM library - /// - public void Destroy() - { - if (libraryHandle != IntPtr.Zero) LibraryLoader.FreeLibrary(libraryHandle); - foreach (IntPtr dependencyHandle in dependencyHandles) LibraryLoader.FreeLibrary(dependencyHandle); - } - } -} -/// \endcond diff --git a/Runtime/LLMLib.cs.meta b/Runtime/LLMLib.cs.meta deleted file mode 100644 index b2c93e3a..00000000 --- a/Runtime/LLMLib.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bce72731fae1ccb80b4a12f3d616f1ee -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Samples~/ChatBot/ChatBot.cs b/Samples~/ChatBot/ChatBot.cs index 83dddb80..4897018f 100644 --- a/Samples~/ChatBot/ChatBot.cs +++ b/Samples~/ChatBot/ChatBot.cs @@ -15,7 +15,7 @@ public class ChatBot : MonoBehaviour public Font font; public int fontSize = 16; public int bubbleWidth = 600; - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public float textPadding = 10f; public float bubbleSpacing = 10f; public Sprite sprite; @@ -55,7 +55,7 @@ void Start() inputBubble.setInteractable(false); stopButton.gameObject.SetActive(true); ShowLoadedMessages(); - _ = llmCharacter.Warmup(WarmUpCallback); + _ = llmAgent.Warmup(WarmUpCallback); } Bubble AddBubble(string message, bool isPlayerMessage) @@ -68,7 +68,7 @@ Bubble AddBubble(string message, bool isPlayerMessage) void ShowLoadedMessages() { - for (int i = 1; i < llmCharacter.chat.Count; i++) AddBubble(llmCharacter.chat[i].Content, i % 2 == 1); + for (int i = 1; i < llmAgent.chat.Count; i++) AddBubble(llmAgent.chat[i].Content, i % 2 == 1); } void onInputFieldSubmit(string newText) @@ -85,7 +85,7 @@ void onInputFieldSubmit(string newText) AddBubble(message, true); Bubble aiBubble = AddBubble("...", false); - Task chatTask = llmCharacter.ChatAsync(message, aiBubble.SetText, AllowInput); + Task chatTask = llmAgent.ChatAsync(message, aiBubble.SetText, AllowInput); inputBubble.SetText(""); } @@ -104,7 +104,7 @@ public void AllowInput() public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); AllowInput(); } @@ -175,9 +175,9 @@ public void ExitGame() bool onValidateWarning = true; void OnValidate() { - if (onValidateWarning && !llmCharacter.remote && llmCharacter.llm != null && llmCharacter.llm.model == "") + if (onValidateWarning && !llmAgent.remote && llmAgent.llm != null && llmAgent.llm.model == "") { - Debug.LogWarning($"Please select a model in the {llmCharacter.llm.gameObject.name} GameObject!"); + Debug.LogWarning($"Please select a model in the {llmAgent.llm.gameObject.name} GameObject!"); onValidateWarning = false; } } diff --git a/Samples~/FunctionCalling/FunctionCalling.cs b/Samples~/FunctionCalling/FunctionCalling.cs index 6c17b139..4978eba4 100644 --- a/Samples~/FunctionCalling/FunctionCalling.cs +++ b/Samples~/FunctionCalling/FunctionCalling.cs @@ -31,7 +31,7 @@ public static string Emotion() public class FunctionCalling : MonoBehaviour { - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public InputField playerText; public Text AIText; @@ -39,7 +39,7 @@ void Start() { playerText.onSubmit.AddListener(onInputFieldSubmit); playerText.Select(); - llmCharacter.grammar = MultipleChoiceGrammar(); + llmAgent.grammar = MultipleChoiceGrammar(); } string[] GetFunctionNames() @@ -72,7 +72,7 @@ string CallFunction(string functionName) async void onInputFieldSubmit(string message) { playerText.interactable = false; - string functionName = await llmCharacter.ChatAsync(ConstructPrompt(message)); + string functionName = await llmAgent.ChatAsync(ConstructPrompt(message)); string result = CallFunction(functionName); AIText.text = $"Calling {functionName}\n{result}"; playerText.interactable = true; @@ -80,7 +80,7 @@ async void onInputFieldSubmit(string message) public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); } public void ExitGame() @@ -92,9 +92,9 @@ public void ExitGame() bool onValidateWarning = true; void OnValidate() { - if (onValidateWarning && !llmCharacter.remote && llmCharacter.llm != null && llmCharacter.llm.model == "") + if (onValidateWarning && !llmAgent.remote && llmAgent.llm != null && llmAgent.llm.model == "") { - Debug.LogWarning($"Please select a model in the {llmCharacter.llm.gameObject.name} GameObject!"); + Debug.LogWarning($"Please select a model in the {llmAgent.llm.gameObject.name} GameObject!"); onValidateWarning = false; } } diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index 42311c02..5c971e83 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -14,7 +14,7 @@ namespace LLMUnitySamples public class KnowledgeBaseGame : KnowledgeBaseGameUI { [Header("Models")] - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public RAG rag; public int numRAGResults = 3; @@ -54,7 +54,7 @@ void InitLLM() { // warm-up the LLM PlayerText.text += "Warming up the model..."; - _ = llmCharacter.Warmup(AIReplyComplete); + _ = llmAgent.Warmup(AIReplyComplete); } public Dictionary LoadQuestionAnswers(string questionAnswersText) @@ -123,7 +123,7 @@ protected override void OnInputFieldSubmit(string question) PlayerText.interactable = false; SetAIText("..."); string prompt = ConstructPrompt(question); - _ = llmCharacter.ChatAsync(prompt, SetAIText, AIReplyComplete); + _ = llmAgent.ChatAsync(prompt, SetAIText, AIReplyComplete); } protected override void DropdownChange(int selection) @@ -134,8 +134,8 @@ protected override void DropdownChange(int selection) botImages[currentBotName].gameObject.SetActive(true); Debug.Log($"{currentBotName}: {rag.Count(currentBotName)} phrases available"); - // set the LLMCharacter name - llmCharacter.assistantRole = currentBotName; + // set the LLMAgent name + llmAgent.assistantRole = currentBotName; } void SetAIText(string text) @@ -152,7 +152,7 @@ void AIReplyComplete() public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); AIReplyComplete(); } @@ -175,7 +175,7 @@ void CheckLLM(LLMClient llmClient, bool debug) void CheckLLMs(bool debug) { CheckLLM(rag.search.llmEmbedder, debug); - CheckLLM(llmCharacter, debug); + CheckLLM(llmAgent, debug); } bool onValidateWarning = true; diff --git a/Samples~/MobileDemo/MobileDemo.cs b/Samples~/MobileDemo/MobileDemo.cs index bb84e571..ccf74529 100644 --- a/Samples~/MobileDemo/MobileDemo.cs +++ b/Samples~/MobileDemo/MobileDemo.cs @@ -7,7 +7,7 @@ namespace LLMUnitySamples { public class MobileDemo : MonoBehaviour { - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public GameObject ChatPanel; public InputField playerText; @@ -45,7 +45,7 @@ async Task DownloadThenWarmup() async Task WarmUp() { AIText.text += $"Warming up the model..."; - await llmCharacter.Warmup(); + await llmAgent.Warmup(); AIText.text = ""; AIReplyComplete(); } @@ -60,7 +60,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) @@ -77,7 +77,7 @@ public void AIReplyComplete() public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); AIReplyComplete(); } @@ -91,14 +91,14 @@ public void ExitGame() bool onValidateInfo = true; void OnValidate() { - if (onValidateWarning && !llmCharacter.remote && llmCharacter.llm != null && llmCharacter.llm.model == "") + if (onValidateWarning && !llmAgent.remote && llmAgent.llm != null && llmAgent.llm.model == "") { - Debug.LogWarning($"Please select a model in the {llmCharacter.llm.gameObject.name} GameObject!"); + Debug.LogWarning($"Please select a model in the {llmAgent.llm.gameObject.name} GameObject!"); onValidateWarning = false; } if (onValidateInfo) { - Debug.Log($"Select 'Download On Start' in the {llmCharacter.llm.gameObject.name} GameObject to download the models when the app starts."); + Debug.Log($"Select 'Download On Start' in the {llmAgent.llm.gameObject.name} GameObject to download the models when the app starts."); onValidateInfo = false; } } diff --git a/Samples~/MultipleCharacters/MultipleCharacters.cs b/Samples~/MultipleCharacters/MultipleCharacters.cs index b53e3e7a..39a426ad 100644 --- a/Samples~/MultipleCharacters/MultipleCharacters.cs +++ b/Samples~/MultipleCharacters/MultipleCharacters.cs @@ -9,13 +9,13 @@ public class MultipleCharactersInteraction { InputField playerText; Text AIText; - LLMCharacter llmCharacter; + LLMAgent llmAgent; - public MultipleCharactersInteraction(InputField playerText, Text AIText, LLMCharacter llmCharacter) + public MultipleCharactersInteraction(InputField playerText, Text AIText, LLMAgent llmAgent) { this.playerText = playerText; this.AIText = AIText; - this.llmCharacter = llmCharacter; + this.llmAgent = llmAgent; } public void Start() @@ -28,7 +28,7 @@ public void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) @@ -46,12 +46,12 @@ public void AIReplyComplete() public class MultipleCharacters : MonoBehaviour { - public LLMCharacter llmCharacter1; + public LLMAgent llmCharacter1; public InputField playerText1; public Text AIText1; MultipleCharactersInteraction interaction1; - public LLMCharacter llmCharacter2; + public LLMAgent llmCharacter2; public InputField playerText2; public Text AIText2; MultipleCharactersInteraction interaction2; diff --git a/Samples~/RAG/RAGAndLLM_Sample.cs b/Samples~/RAG/RAGAndLLM_Sample.cs index e9ebf010..4265d3cf 100644 --- a/Samples~/RAG/RAGAndLLM_Sample.cs +++ b/Samples~/RAG/RAGAndLLM_Sample.cs @@ -5,7 +5,7 @@ namespace LLMUnitySamples { public class RAGAndLLMSample : RAGSample { - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public Toggle ParaphraseWithLLM; protected override void onInputFieldSubmit(string message) @@ -21,20 +21,20 @@ protected override void onInputFieldSubmit(string message) } else { - _ = llmCharacter.ChatAsync("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); + _ = llmAgent.ChatAsync("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); } } public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); AIReplyComplete(); } protected override void CheckLLMs(bool debug) { base.CheckLLMs(debug); - CheckLLM(llmCharacter, debug); + CheckLLM(llmAgent, debug); } } } diff --git a/Samples~/SimpleInteraction/SimpleInteraction.cs b/Samples~/SimpleInteraction/SimpleInteraction.cs index 596f1e75..060e9c41 100644 --- a/Samples~/SimpleInteraction/SimpleInteraction.cs +++ b/Samples~/SimpleInteraction/SimpleInteraction.cs @@ -6,7 +6,7 @@ namespace LLMUnitySamples { public class SimpleInteraction : MonoBehaviour { - public LLMCharacter llmCharacter; + public LLMAgent llmAgent; public InputField playerText; public Text AIText; @@ -20,7 +20,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmCharacter.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) @@ -37,7 +37,7 @@ public void AIReplyComplete() public void CancelRequests() { - llmCharacter.CancelRequests(); + llmAgent.CancelRequests(); AIReplyComplete(); } @@ -50,9 +50,9 @@ public void ExitGame() bool onValidateWarning = true; void OnValidate() { - if (onValidateWarning && !llmCharacter.remote && llmCharacter.llm != null && llmCharacter.llm.model == "") + if (onValidateWarning && !llmAgent.remote && llmAgent.llm != null && llmAgent.llm.model == "") { - Debug.LogWarning($"Please select a model in the {llmCharacter.llm.gameObject.name} GameObject!"); + Debug.LogWarning($"Please select a model in the {llmAgent.llm.gameObject.name} GameObject!"); onValidateWarning = false; } } diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 68b0e647..90b70423 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -77,7 +77,7 @@ // protected GameObject gameObject; // protected LLM llm; -// protected LLMCharacter llmCharacter; +// protected LLMAgent llmAgent; // protected Exception error = null; // protected string prompt; // protected string query; @@ -104,7 +104,7 @@ // gameObject = new GameObject(); // gameObject.SetActive(false); // llm = CreateLLM(); -// llmCharacter = CreateLLMCharacter(); +// llmAgent = CreateLLMCharacter(); // gameObject.SetActive(true); // } @@ -192,19 +192,19 @@ // return llm; // } -// public virtual LLMCharacter CreateLLMCharacter() +// public virtual LLMAgent CreateLLMCharacter() // { -// LLMCharacter llmCharacter = gameObject.AddComponent(); -// llmCharacter.llm = llm; -// llmCharacter.userName = "User"; -// llmCharacter.AIName = "Assistant"; -// llmCharacter.prompt = prompt; -// llmCharacter.temperature = 0; -// llmCharacter.seed = 0; -// llmCharacter.stream = false; -// llmCharacter.numPredict = 50; -// llmCharacter.port = port; -// return llmCharacter; +// LLMAgent llmAgent = gameObject.AddComponent(); +// llmAgent.llm = llm; +// llmAgent.userRole = "User"; +// llmAgent.assistantRole = "Assistant"; +// llmAgent.prompt = prompt; +// llmAgent.temperature = 0; +// llmAgent.seed = 0; +// llmAgent.stream = false; +// llmAgent.numPredict = 50; +// llmAgent.port = port; +// return llmAgent; // } // [UnityTest] @@ -236,24 +236,24 @@ // public virtual async Task Tests() // { -// await llmCharacter.Tokenize("I", TestTokens); -// await llmCharacter.Warmup(); +// await llmAgent.Tokenize("I", TestTokens); +// await llmAgent.Warmup(); // TestArchitecture(); // TestInitParameters(tokens1, 1); // TestWarmup(); -// await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply1)); +// await llmAgent.Chat(query, (string reply) => TestChat(reply, reply1)); // TestPostChat(3); -// llmCharacter.SetPrompt(llmCharacter.prompt); -// llmCharacter.AIName = "False response"; -// await llmCharacter.Chat(query, (string reply) => TestChat(reply, reply2)); +// llmAgent.SetPrompt(llmAgent.prompt); +// llmAgent.assistantRole = "False response"; +// await llmAgent.Chat(query, (string reply) => TestChat(reply, reply2)); // TestPostChat(3); -// await llmCharacter.Chat("bye!"); +// await llmAgent.Chat("bye!"); // TestPostChat(5); // prompt = "How are you?"; -// llmCharacter.SetPrompt(prompt); -// await llmCharacter.Chat("hi"); +// llmAgent.SetPrompt(prompt); +// await llmAgent.Chat("hi"); // TestInitParameters(tokens2, 3); -// List embeddings = await llmCharacter.Embeddings("hi how are you?"); +// List embeddings = await llmAgent.Embeddings("hi how are you?"); // TestEmbeddings(embeddings); // } @@ -264,9 +264,9 @@ // public void TestInitParameters(int nkeep, int chats) // { -// Assert.AreEqual(llmCharacter.nKeep, nkeep); -// Assert.That(ChatTemplate.GetTemplate(llm.chatTemplate).GetStop(llmCharacter.userName, llmCharacter.AIName).Length > 0); -// Assert.AreEqual(llmCharacter.chat.Count, chats); +// Assert.AreEqual(llmAgent.nKeep, nkeep); +// Assert.That(ChatTemplate.GetTemplate(llm.chatTemplate).GetStop(llmAgent.userRole, llmAgent.assistantRole).Length > 0); +// Assert.AreEqual(llmAgent.chat.Count, chats); // } // public void TestTokens(List tokens) @@ -276,7 +276,7 @@ // public void TestWarmup() // { -// Assert.That(llmCharacter.chat.Count == 1); +// Assert.That(llmAgent.chat.Count == 1); // } // public void TestChat(string reply, string replyGT) @@ -292,7 +292,7 @@ // public void TestPostChat(int num) // { -// Assert.That(llmCharacter.chat.Count == num); +// Assert.That(llmAgent.chat.Count == num); // } // public void TestEmbeddings(List embeddings) @@ -427,11 +427,11 @@ // return llm; // } -// public override LLMCharacter CreateLLMCharacter() +// public override LLMAgent CreateLLMCharacter() // { -// LLMCharacter llmCharacter = base.CreateLLMCharacter(); -// llmCharacter.remote = true; -// return llmCharacter; +// LLMAgent llmAgent = base.CreateLLMCharacter(); +// llmAgent.remote = true; +// return llmAgent; // } // } @@ -444,18 +444,18 @@ // return llm; // } -// public override LLMCharacter CreateLLMCharacter() +// public override LLMAgent CreateLLMCharacter() // { -// LLMCharacter llmCharacter = base.CreateLLMCharacter(); -// llmCharacter.remote = true; -// return llmCharacter; +// LLMAgent llmAgent = base.CreateLLMCharacter(); +// llmAgent.remote = true; +// return llmAgent; // } // } // public class TestLLM_Double : TestLLM // { // LLM llm1; -// LLMCharacter llmCharacter1; +// LLMAgent llmCharacter1; // public override async Task Init() // { @@ -464,7 +464,7 @@ // gameObject = new GameObject(); // gameObject.SetActive(false); // llm = CreateLLM(); -// llmCharacter = CreateLLMCharacter(); +// llmAgent = CreateLLMCharacter(); // llm1 = CreateLLM(); // llmCharacter1 = CreateLLMCharacter(); // gameObject.SetActive(true); @@ -475,17 +475,17 @@ // { // string saveName = "TestLLMCharacter_Save"; -// public override LLMCharacter CreateLLMCharacter() +// public override LLMAgent CreateLLMCharacter() // { -// LLMCharacter llmCharacter = base.CreateLLMCharacter(); -// llmCharacter.save = saveName; -// llmCharacter.saveCache = true; +// LLMAgent llmAgent = base.CreateLLMCharacter(); +// llmAgent.save = saveName; +// llmAgent.saveCache = true; // foreach (string filename in new string[] // { -// llmCharacter.GetJsonSavePath(saveName), -// llmCharacter.GetCacheSavePath(saveName) +// llmAgent.GetJsonSavePath(saveName), +// llmAgent.GetCacheSavePath(saveName) // }) if (File.Exists(filename)) File.Delete(filename); -// return llmCharacter; +// return llmAgent; // } // public override async Task Tests() @@ -496,8 +496,8 @@ // public void TestSave() // { -// string jsonPath = llmCharacter.GetJsonSavePath(saveName); -// string cachePath = llmCharacter.GetCacheSavePath(saveName); +// string jsonPath = llmAgent.GetJsonSavePath(saveName); +// string cachePath = llmAgent.GetCacheSavePath(saveName); // Assert.That(File.Exists(jsonPath)); // Assert.That(File.Exists(cachePath)); // string json = File.ReadAllText(jsonPath); @@ -506,15 +506,15 @@ // List chatHistory = JsonUtility.FromJson(json).chat; // Assert.AreEqual(chatHistory.Count, 2); -// Assert.AreEqual(chatHistory[0].role, llmCharacter.userName); +// Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); // Assert.AreEqual(chatHistory[0].content, "hi"); -// Assert.AreEqual(chatHistory[1].role, llmCharacter.AIName); +// Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); -// Assert.AreEqual(llmCharacter.chat.Count, chatHistory.Count + 1); +// Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count + 1); // for (int i = 0; i < chatHistory.Count; i++) // { -// Assert.AreEqual(chatHistory[i].role, llmCharacter.chat[i + 1].role); -// Assert.AreEqual(chatHistory[i].content, llmCharacter.chat[i + 1].content); +// Assert.AreEqual(chatHistory[i].role, llmAgent.chat[i + 1].role); +// Assert.AreEqual(chatHistory[i].content, llmAgent.chat[i + 1].content); // } // } // } From 2614d200d190cf411f021a40a74aee979db78f3e Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 19 Aug 2025 13:40:34 +0300 Subject: [PATCH 18/69] general improvements and small fixes --- Runtime/LLM.cs | 892 ++++++++++++++++++++++++------------------- Runtime/LLMAgent.cs | 463 +++++++++++++++------- Runtime/LLMClient.cs | 599 ++++++++++++++++++----------- 3 files changed, 1207 insertions(+), 747 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index c875cdcc..e46e5053 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -1,5 +1,5 @@ /// @file -/// @brief File implementing the LLM. +/// @brief File implementing the LLM server component for Unity. using System; using System.Collections.Generic; using System.IO; @@ -14,104 +14,135 @@ namespace LLMUnity [DefaultExecutionOrder(-1)] /// @ingroup llm /// - /// Class implementing the LLM server. + /// Unity MonoBehaviour component that manages a local LLM server instance. + /// Handles model loading, GPU acceleration, LORA adapters, and provides + /// completion, tokenization, and embedding functionality. /// public class LLM : MonoBehaviour { - /// show/hide advanced options in the GameObject - [Tooltip("show/hide advanced options in the GameObject")] + #region Inspector Fields + /// Show/hide advanced options in the inspector + [Tooltip("Show/hide advanced options in the inspector")] [HideInInspector] public bool advancedOptions = false; - /// enable remote server functionality - [Tooltip("enable remote server functionality")] + + /// Enable remote server functionality to allow external connections + [Tooltip("Enable remote server functionality to allow external connections")] [LocalRemote] public bool remote = false; - /// port to use for the remote LLM server - [Tooltip("port to use for the remote LLM server")] + + /// Port to use for the remote LLM server + [Tooltip("Port to use for the remote LLM server")] [Remote] public int port = 13333; - /// number of threads to use (-1 = all) - [Tooltip("number of threads to use (-1 = all)")] + + /// Number of threads to use for processing (-1 = use all available threads) + [Tooltip("Number of threads to use for processing (-1 = use all available threads)")] [LLM] public int numThreads = -1; - /// number of model layers to offload to the GPU (0 = GPU not used). - /// If the user's GPU is not supported, the LLM will fall back to the CPU - [Tooltip("number of model layers to offload to the GPU (0 = GPU not used). If the user's GPU is not supported, the LLM will fall back to the CPU")] + + /// Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported + [Tooltip("Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported")] [LLM] public int numGPULayers = 0; - /// number of prompts that can happen in parallel (-1 = number of LLMClient objects) - [Tooltip("number of prompts that can happen in parallel (-1 = number of LLMClient objects)")] + + /// Number of prompts that can be processed in parallel (-1 = auto-detect from clients) + [Tooltip("Number of prompts that can be processed in parallel (-1 = auto-detect from clients)")] [LLMAdvanced] public int parallelPrompts = -1; - /// do not destroy the LLM GameObject when loading a new Scene. - [Tooltip("do not destroy the LLM GameObject when loading a new Scene.")] + + /// Persist this LLM GameObject across scene transitions + [Tooltip("Persist this LLM GameObject across scene transitions")] [LLMAdvanced] public bool dontDestroyOnLoad = true; - /// Size of the prompt context (0 = context size of the model). - /// This is the number of tokens the model can take as input when generating responses. - [Tooltip("Size of the prompt context (0 = context size of the model). This is the number of tokens the model can take as input when generating responses.")] + + /// Size of the prompt context in tokens (0 = use model's default context size) + [Tooltip("Size of the prompt context in tokens (0 = use model's default context size). This determines how much conversation history the model can remember.")] [DynamicRange("minContextLength", "maxContextLength", false), Model] public int contextSize = 8192; - /// Batch size for prompt processing. - [Tooltip("Batch size for prompt processing.")] + + /// Batch size for prompt processing (larger = more memory, potentially faster) + [Tooltip("Batch size for prompt processing (larger = more memory, potentially faster)")] [ModelAdvanced] public int batchSize = 512; - /// Boolean set to true if the server has started and is ready to receive requests, false otherwise. - public bool started { get; protected set; } = false; - /// Boolean set to true if the server has failed to start. - public bool failed { get; protected set; } = false; - /// Boolean set to true if the models were not downloaded successfully. - public static bool modelSetupFailed { get; protected set; } = false; - /// Boolean set to true if the server has started and is ready to receive requests, false otherwise. - public static bool modelSetupComplete { get; protected set; } = false; - /// LLM model to use (.gguf format) - [Tooltip("LLM model to use (.gguf format)")] + + /// LLM model file path (.gguf format) + [Tooltip("LLM model file path (.gguf format)")] [ModelAdvanced] public string model = ""; - /// Chat template for the model - [Tooltip("Chat template for the model")] + + /// Chat template for conversation formatting ("auto" = detect from model) + [Tooltip("Chat template for conversation formatting (\"auto\" = detect from model)")] [ModelAdvanced] public string chatTemplate = "auto"; - /// LORA models to use (.gguf format) - [Tooltip("LORA models to use (.gguf format)")] + + /// LORA adapter model paths (.gguf format), separated by commas + [Tooltip("LORA adapter model paths (.gguf format), separated by commas")] [ModelAdvanced] public string lora = ""; - /// the weights of the LORA models being used. - [Tooltip("the weights of the LORA models being used.")] + + /// Weights for LORA adapters, separated by commas (default: 1.0 for each) + [Tooltip("Weights for LORA adapters, separated by commas (default: 1.0 for each)")] [ModelAdvanced] public string loraWeights = ""; - /// enable use of flash attention - [Tooltip("enable use of flash attention")] + + /// Enable flash attention optimization (requires compatible model) + [Tooltip("Enable flash attention optimization (requires compatible model)")] [ModelExtras] public bool flashAttention = false; - /// API key to use for the server - [Tooltip("API key to use for the server")] - public string APIKey; - // SSL certificate - [SerializeField] - private string SSLCert = ""; + /// API key required for server access (leave empty to disable authentication) + [Tooltip("API key required for server access (leave empty to disable authentication)")] + public string APIKey = ""; + + // SSL Configuration + [SerializeField] private string SSLCert = ""; + [SerializeField] private string SSLKey = ""; public string SSLCertPath = ""; - // SSL key - [SerializeField] - private string SSLKey = ""; public string SSLKeyPath = ""; + #endregion + + #region Public Properties + /// True if the LLM server has started and is ready to receive requests + public bool started { get; private set; } = false; + + /// True if the LLM server failed to start + public bool failed { get; private set; } = false; + + /// True if model setup failed during initialization + public static bool modelSetupFailed { get; private set; } = false; + /// True if model setup completed (successfully or not) + public static bool modelSetupComplete { get; private set; } = false; + + /// The underlying LLM service instance + public LLMService llmService { get; private set; } + + /// Model architecture name (e.g., "llama", "mistral") + public string architecture => llmlib?.architecture; + + /// True if this model only supports embeddings (no text generation) + public bool embeddingsOnly { get; private set; } = false; + + /// Number of dimensions in embedding vectors (0 if not an embedding model) + public int embeddingLength { get; private set; } = 0; + #endregion + + #region Private Fields /// \cond HIDE public int minContextLength = 0; public int maxContextLength = 0; - public static string[] ChatTemplates = new string[] + public static readonly string[] ChatTemplates = new string[] { - "auto", "chatml", "llama2", "llama2-sys", "llama2-sys-bos", "llama2-sys-strip", "mistral-v1", "mistral-v3", "mistral-v3-tekken", "mistral-v7", "mistral-v7-tekken", "phi3", "phi4", "falcon3", "zephyr", "monarch", "gemma", "orion", "openchat", "vicuna", "vicuna-orca", "deepseek", "deepseek2", "deepseek3", "command-r", "llama3", "chatglm3", "chatglm4", "glmedge", "minicpm", "exaone3", "exaone4", "rwkv-world", "granite", "gigachat", "megrez", "yandex", "bailing", "llama4", "smolvlm", "hunyuan-moe", "gpt-oss", "hunyuan-dense", "kimi-k2" + "auto", "chatml", "llama2", "llama2-sys", "llama2-sys-bos", "llama2-sys-strip", + "mistral-v1", "mistral-v3", "mistral-v3-tekken", "mistral-v7", "mistral-v7-tekken", + "phi3", "phi4", "falcon3", "zephyr", "monarch", "gemma", "orion", "openchat", + "vicuna", "vicuna-orca", "deepseek", "deepseek2", "deepseek3", "command-r", + "llama3", "chatglm3", "chatglm4", "glmedge", "minicpm", "exaone3", "exaone4", + "rwkv-world", "granite", "gigachat", "megrez", "yandex", "bailing", "llama4", + "smolvlm", "hunyuan-moe", "gpt-oss", "hunyuan-dense", "kimi-k2" }; - LlamaLib llmlib = null; - [Local, SerializeField] protected LLMService _llmService; - public LLMService llmService - { - get => _llmService; - protected set => _llmService = value; - } - public string architecture => llmlib?.architecture; - - List clients = new List(); + private LlamaLib llmlib = null; + // [Local, SerializeField] + protected LLMService _llmService; + private readonly List clients = new List(); public LLMManager llmManager = new LLMManager(); - static readonly object staticLock = new object(); + private static readonly object staticLock = new object(); public LoraManager loraManager = new LoraManager(); - string loraPre = ""; - string loraWeightsPre = ""; - public bool embeddingsOnly = false; - public int embeddingLength = 0; - + private string loraPre = ""; + private string loraWeightsPre = ""; /// \endcond + #endregion + #region Unity Lifecycle public LLM() { LLMManager.Register(this); @@ -127,11 +158,13 @@ void OnValidate() } /// - /// The Unity Awake function that starts the LLM server. + /// Unity Awake method that initializes the LLM server. + /// Sets up the model, starts the service, and handles GPU fallback if needed. /// - public void Awake() + public async void Awake() { if (!enabled) return; + #if !UNITY_EDITOR modelSetupFailed = !await LLMManager.Setup(); #endif @@ -142,22 +175,31 @@ public void Awake() return; } - StartService(); + await StartServiceAsync(); if (!started) return; if (dontDestroyOnLoad) DontDestroyOnLoad(transform.root.gameObject); } - private void CheckParameters() + public void OnDestroy() + { + Destroy(); + LLMManager.Unregister(this); + } + + #endregion + + #region Initialization + private void ValidateParameters() { if ((SSLCert != "" && SSLKey == "") || (SSLCert == "" && SSLKey != "")) { - throw new ArgumentException($"Both SSL certificate and key need to be provided!"); + throw new ArgumentException("Both SSL certificate and key must be provided together!"); } } - private string GetModelPath() + private string GetValidatedModelPath() { - if (model == "") + if (string.IsNullOrEmpty(model)) { throw new ArgumentException("No model file provided!"); } @@ -165,65 +207,67 @@ private string GetModelPath() string modelPath = GetLLMManagerAssetRuntime(model); if (!File.Exists(modelPath)) { - throw new ArgumentException($"File {modelPath} not found!"); + throw new ArgumentException($"Model file not found: {modelPath}"); } return modelPath; } - private List GetLoraPaths() + private List GetValidatedLoraPaths() { loraManager.FromStrings(lora, loraWeights); List loraPaths = new List(); - foreach (string lora in loraManager.GetLoras()) + + foreach (string loraPath in loraManager.GetLoras()) { - string loraPath = GetLLMManagerAssetRuntime(lora); - if (!File.Exists(loraPath)) + string resolvedPath = GetLLMManagerAssetRuntime(loraPath); + if (!File.Exists(resolvedPath)) { - throw new ArgumentException($"File {loraPath} not found!"); + throw new ArgumentException($"LORA file not found: {resolvedPath}"); } - loraPaths.Add(loraPath); + loraPaths.Add(resolvedPath); } return loraPaths; } - private void StartService() + private async Task StartServiceAsync() { started = false; failed = false; - string modelPath; - List loraPaths; try { - CheckParameters(); - modelPath = GetModelPath(); - loraPaths = GetLoraPaths(); + ValidateParameters(); + string modelPath = GetValidatedModelPath(); + List loraPaths = GetValidatedLoraPaths(); + + CreateLib(); + await CreateServiceAsync(modelPath, loraPaths); } catch (ArgumentException ex) { LLMUnitySetup.LogError(ex.Message); + failed = true; return; } - - try - { - CreateLib(); - CreateService(modelPath, loraPaths); - } - catch (Exception e) + catch (Exception ex) { - LLMUnitySetup.LogError($"LLM service couldn't be created, error: {e.Message}"); + LLMUnitySetup.LogError($"Failed to create LLM service: {ex.Message}"); Destroy(); failed = true; return; } - LLMUnitySetup.Log($"LLM service created, using {architecture}"); + + if (started) + { + LLMUnitySetup.Log($"LLM service created successfully, using {architecture}"); + } } private void CreateLib() { bool useGPU = numGPULayers > 0; llmlib = new LlamaLibUnity(useGPU); + if (LLMUnitySetup.DebugMode <= LLMUnitySetup.DebugModeType.All) { LlamaLibUnity.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); @@ -231,32 +275,39 @@ private void CreateLib() } } - private void CreateService(string modelPath, List loraPaths) + private async Task CreateServiceAsync(string modelPath, List loraPaths) { int numSlots = GetNumClients(); - int numThreadsToUse = numThreads; - if (Application.platform == RuntimePlatform.Android && numThreads <= 0) numThreadsToUse = LLMUnitySetup.AndroidGetNumBigCores(); + int effectiveThreads = numThreads; - lock (staticLock) + if (Application.platform == RuntimePlatform.Android && numThreads <= 0) { - System.IntPtr llm = LLMService.CreateLLM( - llmlib, - modelPath, numSlots, numThreadsToUse, numGPULayers, - flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); + effectiveThreads = LLMUnitySetup.AndroidGetNumBigCores(); + } - llmService = new LLMService(llmlib, llm); - if (remote) + await Task.Run(() => + { + lock (staticLock) { - if (SSLCert != "" && SSLKey != "") + IntPtr llmPtr = LLMService.CreateLLM( + llmlib, modelPath, numSlots, effectiveThreads, numGPULayers, + flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); + + llmService = new LLMService(llmlib, llmPtr); + + if (remote) { - LLMUnitySetup.Log("Using SSL"); - llmService.SetSSL(SSLCert, SSLKey); + if (!string.IsNullOrEmpty(SSLCert) && !string.IsNullOrEmpty(SSLKey)) + { + LLMUnitySetup.Log("Enabling SSL for server"); + llmService.SetSSL(SSLCert, SSLKey); + } + llmService.StartServer("", port, APIKey); } - llmService.StartServer("", port, APIKey); - } - llmService.Start(); - } + llmService.Start(); + } + }); started = llmService.Started(); if (!started) return; @@ -265,116 +316,257 @@ private void CreateService(string modelPath, List loraPaths) SetTemplate(chatTemplate); } + #endregion + + #region Public Methods /// - /// Allows to wait until the LLM is ready + /// Waits asynchronously until the LLM is ready to accept requests. /// + /// Task that completes when LLM is ready public async Task WaitUntilReady() { - while (!started) await Task.Yield(); + while (!started && !failed) + { + await Task.Yield(); + } + + if (failed) + { + throw new InvalidOperationException("LLM failed to start"); + } } /// - /// Allows to wait until the LLM models are downloaded and ready + /// Waits asynchronously until model setup is complete. /// - /// function to call with the download progress (float) + /// Optional callback for download progress updates + /// True if setup succeeded, false if it failed public static async Task WaitUntilModelSetup(Callback downloadProgressCallback = null) { - if (downloadProgressCallback != null) LLMManager.downloadProgressCallbacks.Add(downloadProgressCallback); - while (!modelSetupComplete) await Task.Yield(); + if (downloadProgressCallback != null) + { + LLMManager.downloadProgressCallbacks.Add(downloadProgressCallback); + } + + while (!modelSetupComplete) + { + await Task.Yield(); + } + return !modelSetupFailed; } - /// \cond HIDE - public static string GetLLMManagerAsset(string path) + /// + /// Sets the model file to use. Automatically configures context size and embedding settings. + /// + /// Path to the model file (.gguf format) + public void SetModel(string path) { + if (started) + { + throw new InvalidOperationException("Cannot change model after LLM has started"); + } + + model = GetLLMManagerAsset(path); + if (string.IsNullOrEmpty(model)) return; + + ModelEntry modelEntry = LLMManager.Get(model) ?? new ModelEntry(GetLLMManagerAssetRuntime(model)); + + maxContextLength = modelEntry.contextLength; + if (contextSize > maxContextLength) + { + contextSize = maxContextLength; + } + + SetEmbeddings(modelEntry.embeddingLength, modelEntry.embeddingOnly); + + if (contextSize == 0 && modelEntry.contextLength > 32768) + { + LLMUnitySetup.LogWarning($"Model {path} has large context size ({modelEntry.contextLength}). Consider setting contextSize to ≤32768 to avoid excessive memory usage."); + } + #if UNITY_EDITOR - if (!EditorApplication.isPlaying) return GetLLMManagerAssetEditor(path); + if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif - return GetLLMManagerAssetRuntime(path); } - public static string GetLLMManagerAssetEditor(string path) + /// + /// Sets the chat template for message formatting. + /// + /// Template name (see ChatTemplates array for options) + /// Mark object dirty in editor + public void SetTemplate(string templateName, bool setDirty = true) { - // empty - if (string.IsNullOrEmpty(path)) return path; - // LLMManager - return location the file will be stored in StreamingAssets - ModelEntry modelEntry = LLMManager.Get(path); - if (modelEntry != null) return modelEntry.filename; - // StreamingAssets - return relative location within StreamingAssets - string assetPath = LLMUnitySetup.GetAssetPath(path); // Note: this will return the full path if a full path is passed - string basePath = LLMUnitySetup.GetAssetPath(); - if (File.Exists(assetPath)) + if (!ChatTemplates.Contains(templateName)) { - if (LLMUnitySetup.IsSubPath(assetPath, basePath)) return LLMUnitySetup.RelativePath(assetPath, basePath); + LLMUnitySetup.LogError($"Unsupported chat template: {templateName}"); + return; } - // full path - if (!File.Exists(assetPath)) + + chatTemplate = templateName; + if (started) { - LLMUnitySetup.LogError($"Model {path} was not found."); + llmService.SetTemplate(chatTemplate == "auto" ? "" : chatTemplate); } - else + +#if UNITY_EDITOR + if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); +#endif + } + + /// + /// Configure the LLM for embedding generation. + /// + /// Number of embedding dimensions + /// True if model only supports embeddings + public void SetEmbeddings(int embeddingLength, bool embeddingsOnly) + { + this.embeddingsOnly = embeddingsOnly; + this.embeddingLength = embeddingLength; + +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); +#endif + } + + /// + /// Registers an LLMClient for slot management. + /// + /// Client to register + /// Assigned slot ID + public void Register(LLMClient llmClient) + { + if (llmClient == null) { - string errorMessage = $"The model {path} was loaded locally. You can include it in the build in one of these ways:"; - errorMessage += $"\n-Copy the model inside the StreamingAssets folder and use its StreamingAssets path"; - errorMessage += $"\n-Load the model with the model manager inside the LLM GameObject and use its filename"; - LLMUnitySetup.LogWarning(errorMessage); + throw new ArgumentNullException(nameof(llmClient)); } - return path; + + clients.Add(llmClient); } - public static string GetLLMManagerAssetRuntime(string path) + /// + /// Tokenizes the provided text into a list of token IDs. + /// + /// Text to tokenize + /// List of token IDs + public List Tokenize(string content) { - // empty - if (string.IsNullOrEmpty(path)) return path; - // LLMManager - string managerPath = LLMManager.GetAssetPath(path); - if (!string.IsNullOrEmpty(managerPath) && File.Exists(managerPath)) return managerPath; - // StreamingAssets - string assetPath = LLMUnitySetup.GetAssetPath(path); - if (File.Exists(assetPath)) return assetPath; - // download path - assetPath = LLMUnitySetup.GetDownloadAssetPath(path); - if (File.Exists(assetPath)) return assetPath; - // give up - return path; + AssertStarted(); + return llmService.Tokenize(content); } - /// \endcond + /// + /// Converts token IDs back to text. + /// + /// List of token IDs + /// Detokenised text + public string Detokenize(List tokens) + { + AssertStarted(); + return llmService.Detokenize(tokens); + } /// - /// Allows to set the model used by the LLM. - /// The model provided is copied to the Assets/StreamingAssets folder that allows it to also work in the build. - /// Models supported are in .gguf format. + /// Generates embedding vectors for the provided text. /// - /// path to model to use (.gguf format) - public void SetModel(string path) + /// Text to embed + /// Embedding vector + public List Embeddings(string content) { - model = GetLLMManagerAsset(path); - if (!string.IsNullOrEmpty(model)) - { - ModelEntry modelEntry = LLMManager.Get(model); - if (modelEntry == null) modelEntry = new ModelEntry(GetLLMManagerAssetRuntime(model)); + AssertStarted(); + return llmService.Embeddings(content); + } - maxContextLength = modelEntry.contextLength; - if (contextSize > maxContextLength) contextSize = maxContextLength; - SetEmbeddings(modelEntry.embeddingLength, modelEntry.embeddingOnly); - if (contextSize == 0 && modelEntry.contextLength > 32768) - { - LLMUnitySetup.LogWarning($"The model {path} has very large context size ({modelEntry.contextLength}), consider setting it to a smaller value (<=32768) to avoid filling up the RAM"); - } + /// + /// Generates text completion for the given prompt. + /// + /// Input prompt + /// Optional callback for streaming responses + /// Slot ID (-1 for automatic assignment) + /// Generated text + public string Completion(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) + { + AssertStarted(); + return llmService.Completion(prompt, streamCallback, id_slot); + } + + /// + /// Generates text completion asynchronously. + /// + /// Input prompt + /// Optional callback for streaming responses + /// Slot ID (-1 for automatic assignment) + /// Task that returns generated text + public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) + { + AssertStarted(); + return await llmService.CompletionAsync(prompt, streamCallback, id_slot); + } + + /// + /// Cancels the request in the specified slot. + /// + /// Slot ID + public void CancelRequest(int id_slot) + { + AssertStarted(); + llmService.Cancel(id_slot); + } + + /// + /// Cancels all active requests. + /// + public void CancelRequests() + { + for (int i = 0; i < parallelPrompts; i++) + { + CancelRequest(i); } -#if UNITY_EDITOR - if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); -#endif } /// - /// Allows to set a LORA model to use in the LLM. - /// The model provided is copied to the Assets/StreamingAssets folder that allows it to also work in the build. - /// Models supported are in .gguf format. + /// Saves the state of a specific slot to disk. + /// + /// Slot ID + /// File path to save to + /// Result message + public string SaveSlot(int idSlot, string filepath) + { + AssertStarted(); + return llmService.SaveSlot(idSlot, filepath); + } + + /// + /// Loads the state of a specific slot from disk. + /// + /// Slot ID + /// File path to load from + /// Result message + public string LoadSlot(int idSlot, string filepath) + { + AssertStarted(); + return llmService.LoadSlot(idSlot, filepath); + } + + /// + /// Gets a list of loaded LORA adapters. + /// + /// List of LORA adapter information + public List ListLoras() + { + AssertStarted(); + return llmService.LoraList(); + } + + #endregion + + #region LORA Management + /// + /// Sets a single LORA adapter, replacing any existing ones. /// - /// path to LORA model to use (.gguf format) - public void SetLora(string path, float weight = 1) + /// Path to LORA file (.gguf format) + /// Adapter weight (default: 1.0) + public void SetLora(string path, float weight = 1f) { AssertNotStarted(); loraManager.Clear(); @@ -382,12 +574,11 @@ public void SetLora(string path, float weight = 1) } /// - /// Allows to add a LORA model to use in the LLM. - /// The model provided is copied to the Assets/StreamingAssets folder that allows it to also work in the build. - /// Models supported are in .gguf format. + /// Adds a LORA adapter to the existing set. /// - /// path to LORA model to use (.gguf format) - public void AddLora(string path, float weight = 1) + /// Path to LORA file (.gguf format) + /// Adapter weight (default: 1.0) + public void AddLora(string path, float weight = 1f) { AssertNotStarted(); loraManager.Add(path, weight); @@ -395,10 +586,9 @@ public void AddLora(string path, float weight = 1) } /// - /// Allows to remove a LORA model from the LLM. - /// Models supported are in .gguf format. + /// Removes a specific LORA adapter. /// - /// path to LORA model to remove (.gguf format) + /// Path to LORA file to remove public void RemoveLora(string path) { AssertNotStarted(); @@ -407,7 +597,7 @@ public void RemoveLora(string path) } /// - /// Allows to remove all LORA models from the LLM. + /// Removes all LORA adapters. /// public void RemoveLoras() { @@ -417,10 +607,10 @@ public void RemoveLoras() } /// - /// Allows to change the weight (scale) of a LORA model in the LLM. + /// Changes the weight of a specific LORA adapter. /// - /// path of LORA model to change (.gguf format) - /// weight of LORA + /// Path to LORA file + /// New weight value public void SetLoraWeight(string path, float weight) { loraManager.SetWeight(path, weight); @@ -429,76 +619,57 @@ public void SetLoraWeight(string path, float weight) } /// - /// Allows to change the weights (scale) of the LORA models in the LLM. + /// Changes the weights of multiple LORA adapters. /// - /// Dictionary (string, float) mapping the path of LORA models with weights to change + /// Dictionary mapping LORA paths to weights public void SetLoraWeights(Dictionary loraToWeight) { - foreach (KeyValuePair entry in loraToWeight) loraManager.SetWeight(entry.Key, entry.Value); + if (loraToWeight == null) + { + throw new ArgumentNullException(nameof(loraToWeight)); + } + + foreach (var entry in loraToWeight) + { + loraManager.SetWeight(entry.Key, entry.Value); + } UpdateLoras(); if (started) ApplyLoras(); } - public void UpdateLoras() + private void UpdateLoras() { (lora, loraWeights) = loraManager.ToStrings(); (loraPre, loraWeightsPre) = (lora, loraWeights); + #if UNITY_EDITOR if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif } - /// - /// Set the chat template for the LLM. - /// - /// the chat template to use. The available templates can be found in the ChatTemplates array - public void SetTemplate(string templateName, bool setDirty = true) + private void ApplyLoras() { - if (!ChatTemplates.Contains(templateName)) + var loras = new List(); + float[] weights = loraManager.GetWeights(); + + for (int i = 0; i < weights.Length; i++) { - LLMUnitySetup.LogError($"Template {templateName} not supported!"); - return; + loras.Add(new LoraIdScale(i, weights[i])); } - chatTemplate = templateName; - if (started) llmService.SetTemplate(chatTemplate == "auto" ? "" : chatTemplate); -#if UNITY_EDITOR - if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); -#endif - } - - /// - /// Set LLM Embedding parameters - /// - /// number of embedding dimensions - /// if true, the LLM will be used only for embeddings - public void SetEmbeddings(int embeddingLength, bool embeddingsOnly) - { - this.embeddingsOnly = embeddingsOnly; - this.embeddingLength = embeddingLength; -#if UNITY_EDITOR - if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); -#endif - } - - /// \cond HIDE - string ReadFileContents(string path) - { - if (String.IsNullOrEmpty(path)) return ""; - else if (!File.Exists(path)) + if (loras.Count > 0) { - LLMUnitySetup.LogError($"File {path} not found!"); - return ""; + llmService.LoraWeight(loras); } - return File.ReadAllText(path); } - /// \endcond + #endregion + #region SSL Configuration /// - /// Use a SSL certificate for the LLM server. + /// Sets the SSL certificate for secure server connections. /// - /// the SSL certificate path + /// Path to SSL certificate file public void SetSSLCert(string path) { SSLCertPath = path; @@ -506,44 +677,37 @@ public void SetSSLCert(string path) } /// - /// Use a SSL key for the LLM server. + /// Sets the SSL private key for secure server connections. /// - /// the SSL key path + /// Path to SSL private key file public void SetSSLKey(string path) { SSLKeyPath = path; SSLKey = ReadFileContents(path); } - /// - /// Returns the chat template of the LLM. - /// - /// chat template of the LLM - public string GetTemplate() + private string ReadFileContents(string path) { - return chatTemplate; - } + if (string.IsNullOrEmpty(path)) return ""; - /// - /// Registers a local LLMClient object. - /// This allows to bind the LLMClient "client" to a specific slot of the LLM. - /// - /// - /// - public int Register(LLMClient llmClient) - { - clients.Add(llmClient); - int index = clients.IndexOf(llmClient); - if (parallelPrompts != -1) return index % parallelPrompts; - return index; + if (!File.Exists(path)) + { + LLMUnitySetup.LogError($"File not found: {path}"); + return ""; + } + + return File.ReadAllText(path); } - protected int GetNumClients() + #endregion + + #region Helper Methods + private int GetNumClients() { return Math.Max(parallelPrompts == -1 ? clients.Count : parallelPrompts, 1); } - void AssertStarted() + private void AssertStarted() { string error = null; if (failed) error = "LLM service couldn't be created"; @@ -555,7 +719,7 @@ void AssertStarted() } } - void AssertNotStarted() + private void AssertNotStarted() { if (started) { @@ -566,158 +730,100 @@ void AssertNotStarted() } /// - /// Sets the lora scale, only works after the LLM service has started + /// Stops and cleans up the LLM service. /// - /// switch result - public void ApplyLoras() + public void Destroy() { - List loras = new List(); - float[] weights = loraManager.GetWeights(); - if (weights.Length == 0) return; - for (int i = 0; i < weights.Length; i++) + lock (staticLock) { - loras.Add(new LoraIdScale(i, weights[i])); + try + { + llmService?.Dispose(); + llmlib = null; + started = false; + failed = false; + } + catch (Exception ex) + { + LLMUnitySetup.LogError($"Error during LLM cleanup: {ex.Message}"); + } } - llmService.LoraWeight(loras); } - /// - /// Tokenises the provided query. - /// - /// json request containing the query - /// tokenisation result - public List Tokenize(string content) - { - AssertStarted(); - return llmService.Tokenize(content); - } + #endregion - /// - /// Detokenises the provided query. - /// - /// json request containing the query - /// detokenisation result - public string Detokenize(List tokens) - { - AssertStarted(); - return llmService.Detokenize(tokens); - } - - /// - /// Computes the embeddings of the provided query. - /// - /// json request containing the query - /// embeddings result - public List Embeddings(string content) + #region Static Asset Management + /// \cond HIDE + public static string GetLLMManagerAsset(string path) { - AssertStarted(); - return llmService.Embeddings(content); +#if UNITY_EDITOR + if (!EditorApplication.isPlaying) return GetLLMManagerAssetEditor(path); +#endif + return GetLLMManagerAssetRuntime(path); } - /// - /// Gets a list of the lora adapters - /// - /// list of lara adapters - public List ListLoras() + public static string GetLLMManagerAssetEditor(string path) { - AssertStarted(); - return llmService.LoraList(); - } + if (string.IsNullOrEmpty(path)) return path; - /// - /// Allows to save / restore the state of a slot - /// - /// json request containing the query - /// slot result - public string SaveSlot(int idSlot, string filepath) - { - AssertStarted(); - return llmService.SaveSlot(idSlot, filepath); - } + // Check LLMManager first + ModelEntry modelEntry = LLMManager.Get(path); + if (modelEntry != null) return modelEntry.filename; - /// - /// Allows to save / restore the state of a slot - /// - /// json request containing the query - /// slot result - public string LoadSlot(int idSlot, string filepath) - { - AssertStarted(); - return llmService.LoadSlot(idSlot, filepath); - } + // Check StreamingAssets + string assetPath = LLMUnitySetup.GetAssetPath(path); + string basePath = LLMUnitySetup.GetAssetPath(); - /// - /// Allows to use the chat and completion functionality of the LLM. - /// - /// json request containing the query - /// callback function to call with intermediate responses - /// completion result - public string Completion(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) - { - AssertStarted(); - return llmService.Completion(prompt, streamCallback, id_slot); - } + if (File.Exists(assetPath) && LLMUnitySetup.IsSubPath(assetPath, basePath)) + { + return LLMUnitySetup.RelativePath(assetPath, basePath); + } - public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) - { - AssertStarted(); - return await llmService.CompletionAsync(prompt, streamCallback, id_slot); - } + // Warn about local files not in build + if (File.Exists(assetPath)) + { + string errorMessage = $"The model {path} was loaded locally. You can include it in the build in one of these ways:"; + errorMessage += $"\n-Copy the model inside the StreamingAssets folder and use its StreamingAssets path"; + errorMessage += $"\n-Load the model with the model manager inside the LLM GameObject and use its filename"; + LLMUnitySetup.LogWarning(errorMessage); + } + else + { + LLMUnitySetup.LogError($"Model file not found: {path}"); + } - /// - /// Allows to cancel the requests in a specific slot of the LLM - /// - /// slot of the LLM - public void CancelRequest(int id_slot) - { - AssertStarted(); - llmService.Cancel(id_slot); + return path; } - /// - /// Allows to cancel all the requests of the LLM - /// - /// Stops and destroys the LLM - ///
- public void Destroy() - { - lock (staticLock) + // Try LLMManager path + string managerPath = LLMManager.GetAssetPath(path); + if (!string.IsNullOrEmpty(managerPath) && File.Exists(managerPath)) { - try - { - if (llmlib != null) - { - llmService?.Dispose(); - llmlib = null; - } - started = false; - failed = false; - } - catch (Exception e) - { - LLMUnitySetup.LogError(e.Message); - } + return managerPath; } - } - /// - /// The Unity OnDestroy function called when the onbject is destroyed. - /// The function StopProcess is called to stop the LLM server. - /// - public void OnDestroy() - { - Destroy(); - LLMManager.Unregister(this); + // Try StreamingAssets + string assetPath = LLMUnitySetup.GetAssetPath(path); + if (File.Exists(assetPath)) return assetPath; + + // Try download path + string downloadPath = LLMUnitySetup.GetDownloadAssetPath(path); + if (File.Exists(downloadPath)) return downloadPath; + + return path; } - } + /// \endcond + #endregion + } + /// + /// Unity-specific implementation of LlamaLib for handling native library loading. + /// public class LlamaLibUnity : UndreamAI.LlamaLib.LlamaLib { public LlamaLibUnity(bool gpu = false) : base(gpu) {} @@ -726,9 +832,13 @@ public override string FindLibrary(string libraryName) { string lookupDir = Path.Combine(LLMUnitySetup.libraryPath, GetPlatform(), "native"); string libraryPath = Path.Combine(lookupDir, libraryName); - if (File.Exists(libraryPath)) return libraryPath; - throw new System.Exception($"Library {libraryName} not found!"); + if (File.Exists(libraryPath)) + { + return libraryPath; + } + + throw new FileNotFoundException($"Native library not found: {libraryName} in {lookupDir}"); } } } diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 05bd2a13..e65ba3f6 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -1,5 +1,6 @@ /// @file -/// @brief File implementing the LLM characters. +/// @brief File implementing the LLM chat agent functionality for Unity. +using System; using System.Collections.Generic; using System.IO; using System.Threading; @@ -12,224 +13,327 @@ namespace LLMUnity [DefaultExecutionOrder(-2)] /// @ingroup llm /// - /// Class implementing the LLM characters. + /// Unity MonoBehaviour that implements a conversational AI agent with persistent chat history. + /// Extends LLMClient to provide chat-specific functionality including role management, + /// conversation history persistence, and specialized chat completion methods. /// public class LLMAgent : LLMClient { - /// file to save the chat history. - /// The file will be saved within the persistentDataPath directory. - [Tooltip("file to save the chat history. The file will be saved within the persistentDataPath directory.")] + #region Inspector Fields + /// Filename for saving chat history (saved in persistentDataPath) + [Tooltip("Filename for saving chat history (saved in Application.persistentDataPath)")] [LLM] public string save = ""; - /// save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character. - [Tooltip("save the LLM cache. Speeds up the prompt calculation when reloading from history but also requires ~100MB of space per character.")] + + /// Save LLM processing cache for faster reload (~100MB per agent) + [Tooltip("Save LLM processing cache for faster reload (~100MB per agent)")] [LLM] public bool saveCache = false; - /// log the constructed prompt the Unity Editor. - // [Tooltip("log the constructed prompt the Unity Editor.")] - // [LLM] public bool debugPrompt = false; - /// slot of the server to use for computation (affects caching) - [Tooltip("slot of the server to use for computation (affects caching)")] + + /// Server slot to use for processing (affects caching behavior) + [Tooltip("Server slot to use for processing (affects caching behavior)")] [ModelAdvanced, SerializeField] protected int _slot = -1; + + /// Role name for user messages in conversation + [Tooltip("Role name for user messages in conversation")] + [Chat, SerializeField] protected string _userRole = "user"; + + /// Role name for AI assistant messages in conversation + [Tooltip("Role name for AI assistant messages in conversation")] + [Chat, SerializeField] protected string _assistantRole = "assistant"; + + /// System prompt that defines the AI's personality and behavior + [Tooltip("System prompt that defines the AI's personality and behavior")] + [TextArea(5, 10), Chat, SerializeField] + protected string _systemPrompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; + #endregion + + #region Public Properties + /// Server slot ID for this agent's requests public int slot { get => _slot; - set { if (_slot != value) { _slot = value; if (llmAgent != null) llmAgent.SlotId = _slot; } } + set + { + if (_slot != value) + { + _slot = value; + if (llmAgent != null) llmAgent.SlotId = _slot; + } + } } - /// the name of the player - [Tooltip("the name of the user")] - [Chat, SerializeField] protected string _userRole = "user"; + + /// Role identifier for user messages public string userRole { get => _userRole; - set { if (_userRole != value) { _userRole = value; if (llmAgent != null) llmAgent.UserRole = _userRole; } } + set + { + if (_userRole != value) + { + _userRole = value; + if (llmAgent != null) llmAgent.UserRole = _userRole; + } + } } - /// the name of the AI - [Tooltip("the name of the AI assistant")] - [Chat, SerializeField] protected string _assistantRole = "assistant"; + + /// Role identifier for assistant messages public string assistantRole { get => _assistantRole; - set { if (_assistantRole != value) { _assistantRole = value; if (llmAgent != null) llmAgent.AssistantRole = _assistantRole; } } + set + { + if (_assistantRole != value) + { + _assistantRole = value; + if (llmAgent != null) llmAgent.AssistantRole = _assistantRole; + } + } } - /// a description of the AI role (system prompt) - [Tooltip("a description of the AI role (system prompt)")] - [TextArea(5, 10), Chat, SerializeField] protected string _systemPrompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; + + /// System prompt defining the agent's behavior and personality public string systemPrompt { get => _systemPrompt; - set { if (_systemPrompt != value) { _systemPrompt = value; if (llmAgent != null) llmAgent.SystemPrompt = _systemPrompt; } } + set + { + if (_systemPrompt != value) + { + _systemPrompt = value; + if (llmAgent != null) llmAgent.SystemPrompt = _systemPrompt; + } + } + } + + /// The underlying LLMAgent instance from LlamaLib + public UndreamAI.LlamaLib.LLMAgent llmAgent { get; protected set; } + + /// Current conversation history as a list of chat messages + public List chat + { + get => llmAgent?.GetHistory() ?? new List(); + set + { + CheckLLMAgent(); + llmAgent.SetHistory(value ?? new List()); + } } + #endregion - [Local, SerializeField] protected UndreamAI.LlamaLib.LLMAgent _llmAgent; - public UndreamAI.LlamaLib.LLMAgent llmAgent + #region Unity Lifecycle and Initialization + private void CheckLLMAgent() { - get => _llmAgent; - protected set => _llmAgent = value; + if (llmAgent == null) + { + string error = "LLMAgent not initialized"; + LLMUnitySetup.LogError(error); + throw new System.InvalidOperationException(error); + } } - public List chat + protected virtual void SetupLLMAgent() { - get => llmAgent.GetHistory(); - set => llmAgent.SetHistory(value); + string exceptionMessage = ""; + try + { + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); + } + catch (Exception ex) + { + exceptionMessage = ex.Message; + } + if (llmAgent == null || exceptionMessage != "") + { + string error = "LLMAgent not initialized"; + if (exceptionMessage != "") error += ", error: " + exceptionMessage; + LLMUnitySetup.LogError(error); + throw new InvalidOperationException(error); + } + + if (slot!=-1) llmAgent.SlotId = slot; } /// - /// The Unity Awake function that initializes the state before the application starts. - /// The following actions are executed: - /// - the corresponding LLM server is defined (if ran locally) - /// - the grammar is set based on the grammar file - /// - the prompt and chat history are initialised - /// - the chat template is constructed - /// - the number of tokens to keep are based on the system prompt (if setNKeepToPrompt=true) + /// Unity Start method that initializes the agent with chat functionality. + /// Sets up the underlying LLMAgent with role configuration and loads saved history. /// public override void Start() { base.Start(); - llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); + SetupLLMAgent(); InitHistory(); } protected override void OnValidate() { base.OnValidate(); - if (llm != null && llm.parallelPrompts > -1 && (slot < -1 || slot >= llm.parallelPrompts)) LLMUnitySetup.LogError($"The slot needs to be between 0 and {llm.parallelPrompts - 1}, or -1 to be automatically set"); + + // Validate slot configuration + if (llm != null && llm.parallelPrompts > -1 && (slot < -1 || slot >= llm.parallelPrompts)) + { + LLMUnitySetup.LogError($"Slot must be between 0 and {llm.parallelPrompts - 1}, or -1 for auto-assignment"); + } } protected override void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) { base.SetLLMClient(llmClientSet); - llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); + SetupLLMAgent(); } protected override LLMLocal GetCaller() { - return _llmAgent; + return llmAgent; } + /// + /// Initializes conversation history by clearing current state and loading from file if available. + /// protected virtual void InitHistory() { ClearChat(); LoadHistory(); } + /// + /// Loads conversation history from the saved file if it exists. + /// protected virtual void LoadHistory() { - if (save == "" || !File.Exists(GetJsonSavePath(save))) return; - Load(save); + if (string.IsNullOrEmpty(save) || !File.Exists(GetJsonSavePath(save))) + { + return; + } + + try + { + Load(save); + } + catch (System.Exception ex) + { + LLMUnitySetup.LogError($"Failed to load chat history from '{save}': {ex.Message}"); + } } + #endregion + #region File Path Management + /// + /// Gets the full path for a file in the persistent data directory. + /// + /// Filename or relative path + /// Full file path in persistent data directory protected virtual string GetSavePath(string filename) { + if (string.IsNullOrEmpty(filename)) + { + throw new System.ArgumentNullException(nameof(filename)); + } + return Path.Combine(Application.persistentDataPath, filename).Replace('\\', '/'); } /// - /// Allows to get the save path of the chat history based on the provided filename or relative path. + /// Gets the save path for chat history JSON file. /// - /// filename or relative path used for the save - /// save path + /// Base filename (without extension) + /// Full path to JSON file public virtual string GetJsonSavePath(string filename) { return GetSavePath(filename + ".json"); } /// - /// Allows to get the save path of the LLM cache based on the provided filename or relative path. + /// Gets the save path for LLM cache file. /// - /// filename or relative path used for the save - /// save path + /// Base filename (without extension) + /// Full path to cache file public virtual string GetCacheSavePath(string filename) { return GetSavePath(filename + ".cache"); } + #endregion + #region Chat Management /// - /// Clear the chat of the LLMAgent. + /// Clears the entire conversation history. /// public virtual void ClearChat() { + CheckLLMAgent(); llmAgent.ClearHistory(); } /// - /// Set the system prompt for the LLMAgent. - /// - /// the system prompt - /// whether to clear (true) or keep (false) the current chat history on top of the system prompt. - public virtual void SetPrompt(string newPrompt, bool clearChat = true) - { - //TODO - llmAgent.SystemPrompt = newPrompt; - } - - /// - /// Allows to add a message in the chat history. + /// Adds a message with a specific role to the conversation history. /// - /// message role (e.g. userRole or assistantRole) - /// message content + /// Message role (e.g., userRole, assistantRole, or custom role) + /// Message content public virtual void AddMessage(string role, string content) { - // add the question / answer to the chat list, update prompt + CheckLLMAgent(); llmAgent.AddMessage(role, content); } /// - /// Allows to add a player message in the chat history. + /// Adds a user message to the conversation history. /// - /// message content + /// User message content public virtual void AddUserMessage(string content) { + CheckLLMAgent(); llmAgent.AddUserMessage(content); } /// - /// Allows to add a AI message in the chat history. + /// Adds an AI assistant message to the conversation history. /// - /// message content - public virtual void AddAIMessage(string content) + /// Assistant message content + public virtual void AddAssistantMessage(string content) { + CheckLLMAgent(); llmAgent.AddAssistantMessage(content); } + #endregion + #region Chat Functionality /// - /// Chat functionality of the LLM. - /// It calls the LLM completion based on the provided query including the previous chat history. - /// The function allows callbacks when the response is partially or fully received. - /// The question is added to the history if specified. + /// Processes a user query and generates an AI response using conversation context. + /// The query and response are automatically added to chat history if specified. /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// whether to add the user query to the chat history - /// the LLM response + /// User's message or question + /// Optional streaming callback for partial responses + /// Whether to add the exchange to conversation history + /// AI assistant's response public virtual string Chat(string query, LlamaLib.CharArrayCallback callback = null, bool addToHistory = true) { - // handle a chat message by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received + CheckLLMAgent(); SetCompletionParameters(); return llmAgent.Chat(query, addToHistory, callback); } /// - /// Chat functionality of the LLM (async). - /// It calls the LLM completion based on the provided query including the previous chat history. - /// The function allows callbacks when the response is partially or fully received. - /// The question is added to the history if specified. + /// Processes a user query asynchronously and generates an AI response using conversation context. + /// The query and response are automatically added to chat history if specified. /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// whether to add the user query to the chat history - /// the LLM response - public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) + /// User's message or question + /// Optional streaming callback for partial responses + /// Optional callback when response is complete + /// Whether to add the exchange to conversation history + /// Task that returns the AI assistant's response + public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCallback callback = null, + EmptyCallback completionCallback = null, bool addToHistory = true) { + CheckLLMAgent(); + + // Wrap callback to ensure it runs on the main thread LlamaLib.CharArrayCallback wrappedCallback = null; if (callback != null) { var context = SynchronizationContext.Current; - wrappedCallback = (string msg) => { - if (context != null) context.Post(_ => callback(msg), null); - else callback(msg); + wrappedCallback = (string msg) => + { + if (context != null) + context.Post(_ => callback(msg), null); + else + callback(msg); }; } @@ -238,83 +342,160 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall completionCallback?.Invoke(); return result; } + #endregion + #region Model Warmup /// - /// Allow to warm-up a model by processing the system prompt. - /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. - /// The function allows a callback function for when the prompt is processed and the response received. + /// Warms up the model by processing the system prompt without generating output. + /// This caches the system prompt processing for faster subsequent responses. /// - /// callback function called when the full response has been received - /// the LLM response + /// Optional callback when warmup completes + /// Task that completes when warmup finishes public virtual async Task Warmup(EmptyCallback completionCallback = null) { await Warmup(null, completionCallback); } /// - /// Allow to warm-up a model by processing the provided prompt without adding it to history. - /// The prompt processing will be cached (if cachePrompt=true) allowing for faster initialisation. - /// The function allows a callback function for when the prompt is processed and the response received. - /// + /// Warms up the model with a specific prompt without adding it to history. + /// This pre-processes prompts for faster response times in subsequent interactions. /// - /// user prompt used during the initialisation (not added to history) - /// callback function called when the full response has been received - /// the LLM response + /// Warmup prompt (not added to history) + /// Optional callback when warmup completes + /// Task that completes when warmup finishes public virtual async Task Warmup(string query, EmptyCallback completionCallback = null) { - int currNumPredict = numPredict; - numPredict = 0; - await ChatAsync(query, null, completionCallback, false); - numPredict = currNumPredict; - SetCompletionParameters(); + int originalNumPredict = numPredict; + try + { + // Set to generate no tokens for warmup + numPredict = 0; + await ChatAsync(query, null, completionCallback, false); + } + finally + { + // Restore original setting + numPredict = originalNumPredict; + SetCompletionParameters(); + } } + #endregion + #region Persistence /// - /// Saves the chat history and cache to the provided filename / relative path. + /// Saves the conversation history and optionally the LLM cache to disk. /// - /// filename / relative path to save the chat history - /// + /// Base filename (without extension) for saving + /// Result message from cache save operation, or null if cache not saved public virtual string Save(string filename) { - string filepath = GetJsonSavePath(filename); - string dirname = Path.GetDirectoryName(filepath); - if (!Directory.Exists(dirname)) Directory.CreateDirectory(dirname); - llmAgent.SaveHistory(filepath); - - string cachepath = GetCacheSavePath(filename); - if (remote || !saveCache) return null; - string result = llmAgent.SaveSlot(cachepath); - return result; + if (string.IsNullOrEmpty(filename)) + { + throw new System.ArgumentNullException(nameof(filename)); + } + CheckLLMAgent(); + + // Save chat history + string jsonPath = GetJsonSavePath(filename); + string directory = Path.GetDirectoryName(jsonPath); + + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + + try + { + llmAgent.SaveHistory(jsonPath); + LLMUnitySetup.Log($"Saved chat history to: {jsonPath}"); + } + catch (System.Exception ex) + { + LLMUnitySetup.LogError($"Failed to save chat history to '{jsonPath}': {ex.Message}"); + throw; + } + + // Save cache if enabled and not remote + if (!remote && saveCache) + { + try + { + string cachePath = GetCacheSavePath(filename); + string result = llmAgent.SaveSlot(cachePath); + LLMUnitySetup.Log($"Saved LLM cache to: {cachePath}"); + return result; + } + catch (System.Exception ex) + { + LLMUnitySetup.LogWarning($"Failed to save LLM cache: {ex.Message}"); + } + } + + return null; } /// - /// Load the chat history and cache from the provided filename / relative path. + /// Loads conversation history and optionally the LLM cache from disk. /// - /// filename / relative path to load the chat history from - /// + /// Base filename (without extension) to load from + /// Result message from cache load operation, or null if cache not loaded public virtual string Load(string filename) { - string filepath = GetJsonSavePath(filename); - if (!File.Exists(filepath)) + if (string.IsNullOrEmpty(filename)) { - LLMUnitySetup.LogError($"File {filepath} does not exist."); - return null; + throw new System.ArgumentNullException(nameof(filename)); } - llmAgent.LoadHistory(filepath); - LLMUnitySetup.Log($"Loaded {filepath}"); + CheckLLMAgent(); - string cachepath = GetCacheSavePath(filename); - if (remote || !saveCache || !File.Exists(GetSavePath(cachepath))) return null; - string result = llmAgent.LoadSlot(cachepath); - return result; + // Load chat history + string jsonPath = GetJsonSavePath(filename); + if (!File.Exists(jsonPath)) + { + throw new FileNotFoundException($"Chat history file not found: {jsonPath}"); + } + + try + { + llmAgent.LoadHistory(jsonPath); + LLMUnitySetup.Log($"Loaded chat history from: {jsonPath}"); + } + catch (System.Exception ex) + { + LLMUnitySetup.LogError($"Failed to load chat history from '{jsonPath}': {ex.Message}"); + throw; + } + + // Load cache if enabled and not remote + if (!remote && saveCache) + { + string cachePath = GetCacheSavePath(filename); + if (File.Exists(cachePath)) + { + try + { + string result = llmAgent.LoadSlot(cachePath); + LLMUnitySetup.Log($"Loaded LLM cache from: {cachePath}"); + return result; + } + catch (System.Exception ex) + { + LLMUnitySetup.LogWarning($"Failed to load LLM cache from '{cachePath}': {ex.Message}"); + } + } + } + + return null; } + #endregion + #region Request Management /// - /// Allows to cancel the requests of the LLMAgent + /// Cancels any active requests for this agent. /// public void CancelRequests() { - llmAgent.Cancel(); + llmAgent?.Cancel(); } + #endregion } } diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 87178767..f18ff1fb 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -1,154 +1,216 @@ /// @file -/// @brief File implementing the basic functionality for LLM callers. +/// @brief File implementing the base LLM client functionality for Unity. using System; using System.Collections.Generic; +using System.IO; using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEngine; using UnityEditor; using Newtonsoft.Json.Linq; -using System.IO; namespace LLMUnity { [DefaultExecutionOrder(-2)] /// @ingroup llm /// - /// Class implementing calling of LLM functions (local and remote). + /// Unity MonoBehaviour base class for LLM client functionality. + /// Handles both local and remote LLM connections, completion parameters, + /// and provides tokenization, completion, and embedding capabilities. /// public class LLMClient : MonoBehaviour { - /// show/hide advanced options in the GameObject - [Tooltip("show/hide advanced options in the GameObject")] + #region Inspector Fields + /// Show/hide advanced options in the inspector + [Tooltip("Show/hide advanced options in the inspector")] [HideInInspector] public bool advancedOptions = false; - /// use remote LLM server - [Tooltip("use remote LLM server")] + + /// Use remote LLM server instead of local instance + [Tooltip("Use remote LLM server instead of local instance")] [LocalRemote, SerializeField] protected bool _remote; + + /// Local LLM GameObject to connect to + [Tooltip("Local LLM GameObject to connect to")] + [Local, SerializeField] protected LLM _llm; + + /// API key for remote server authentication + [Tooltip("API key for remote server authentication")] + [Remote, SerializeField] protected string _APIKey; + + /// Hostname or IP address of remote LLM server + [Tooltip("Hostname or IP address of remote LLM server")] + [Remote, SerializeField] protected string _host = "localhost"; + + /// Port number of remote LLM server + [Tooltip("Port number of remote LLM server")] + [Remote, SerializeField] protected int _port = 13333; + + /// Grammar constraints for output formatting (GBNF or JSON schema format) + [Tooltip("Grammar constraints for output formatting (GBNF or JSON schema format)")] + [ModelAdvanced, SerializeField] protected string _grammar = ""; + + // Completion Parameters + /// Maximum tokens to generate (-1 = unlimited) + [Tooltip("Maximum tokens to generate (-1 = unlimited)")] + [Model] public int numPredict = -1; + + /// Cache processed prompts to speed up subsequent requests + [Tooltip("Cache processed prompts to speed up subsequent requests")] + [ModelAdvanced] public bool cachePrompt = true; + + /// Random seed for reproducible generation (0 = random) + [Tooltip("Random seed for reproducible generation (0 = random)")] + [ModelAdvanced] public int seed = 0; + + /// Sampling temperature (0.0 = deterministic, higher = more creative) + [Tooltip("Sampling temperature (0.0 = deterministic, higher = more creative)")] + [ModelAdvanced, Range(0f, 2f)] public float temperature = 0.2f; + + /// Top-k sampling: limit to k most likely tokens (0 = disabled) + [Tooltip("Top-k sampling: limit to k most likely tokens (0 = disabled)")] + [ModelAdvanced, Range(0, 100)] public int topK = 40; + + /// Top-p (nucleus) sampling: cumulative probability threshold (1.0 = disabled) + [Tooltip("Top-p (nucleus) sampling: cumulative probability threshold (1.0 = disabled)")] + [ModelAdvanced, Range(0f, 1f)] public float topP = 0.9f; + + /// Minimum probability threshold for token selection + [Tooltip("Minimum probability threshold for token selection")] + [ModelAdvanced, Range(0f, 1f)] public float minP = 0.05f; + + /// Penalty for repeated tokens (1.0 = no penalty) + [Tooltip("Penalty for repeated tokens (1.0 = no penalty)")] + [ModelAdvanced, Range(0f, 2f)] public float repeatPenalty = 1.1f; + + /// Presence penalty: reduce likelihood of any repeated token (0.0 = disabled) + [Tooltip("Presence penalty: reduce likelihood of any repeated token (0.0 = disabled)")] + [ModelAdvanced, Range(0f, 1f)] public float presencePenalty = 0f; + + /// Frequency penalty: reduce likelihood based on token frequency (0.0 = disabled) + [Tooltip("Frequency penalty: reduce likelihood based on token frequency (0.0 = disabled)")] + [ModelAdvanced, Range(0f, 1f)] public float frequencyPenalty = 0f; + + /// Locally typical sampling strength (1.0 = disabled) + [Tooltip("Locally typical sampling strength (1.0 = disabled)")] + [ModelAdvanced, Range(0f, 1f)] public float typicalP = 1f; + + /// Number of recent tokens to consider for repetition penalty (0 = disabled, -1 = context size) + [Tooltip("Number of recent tokens to consider for repetition penalty (0 = disabled, -1 = context size)")] + [ModelAdvanced, Range(0, 2048)] public int repeatLastN = 64; + + /// Mirostat sampling mode (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0) + [Tooltip("Mirostat sampling mode (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0)")] + [ModelAdvanced, Range(0, 2)] public int mirostat = 0; + + /// Mirostat target entropy (tau) - balance between coherence and diversity + [Tooltip("Mirostat target entropy (tau) - balance between coherence and diversity")] + [ModelAdvanced, Range(0f, 10f)] public float mirostatTau = 5f; + + /// Mirostat learning rate (eta) - adaptation speed + [Tooltip("Mirostat learning rate (eta) - adaptation speed")] + [ModelAdvanced, Range(0f, 1f)] public float mirostatEta = 0.1f; + + /// Include top N token probabilities in response (0 = disabled) + [Tooltip("Include top N token probabilities in response (0 = disabled)")] + [ModelAdvanced, Range(0, 10)] public int nProbs = 0; + + /// Ignore end-of-stream token and continue generating + [Tooltip("Ignore end-of-stream token and continue generating")] + [ModelAdvanced] public bool ignoreEos = false; + #endregion + + #region Public Properties + /// Whether this client uses a remote server connection public bool remote { get => _remote; - set { if (_remote != value) { _remote = value; SetupLLMClient(); } } + set + { + if (_remote != value) + { + _remote = value; + if (started) SetupLLMClient(); + } + } } - /// LLM GameObject to use - [Tooltip("LLM GameObject to use")] // Tooltip: ignore - [Local, SerializeField] protected LLM _llm; + + /// The local LLM instance (null if using remote) public LLM llm { get => _llm; set => SetLLM(value); } - /// API key for the remote server - [Tooltip("API key for the remote server")] - [Remote, SerializeField] protected string _APIKey; + + /// API key for remote server authentication public string APIKey { get => _APIKey; - set { if (_APIKey != value) { _APIKey = value; SetupLLMClient(); } } + set + { + if (_APIKey != value) + { + _APIKey = value; + if (started) SetupLLMClient(); + } + } } - /// host of the remote LLM server - [Tooltip("host of the remote LLM server")] - [Remote, SerializeField] protected string _host = "localhost"; + + /// Remote server hostname or IP address public string host { get => _host; - set { if (_host != value) { _host = value; SetupLLMClient(); } } + set + { + if (_host != value) + { + _host = value; + if (started) SetupLLMClient(); + } + } } - /// port of the remote LLM server - [Tooltip("port of the remote LLM server")] - [Remote, SerializeField] protected int _port; + + /// Remote server port number public int port { get => _port; - set { if (_port != value) { _port = value; SetupLLMClient(); } } + set + { + if (_port != value) + { + _port = value; + if (started) SetupLLMClient(); + } + } } - /// grammar used by the LLM - [Tooltip("grammar used by the LLM")] - [ModelAdvanced, SerializeField] protected string _grammar; + /// Current grammar constraints for output formatting public string grammar { get => _grammar; set => SetGrammar(value); } - /// maximum number of tokens that the LLM will predict (-1 = infinity). - [Tooltip("maximum number of tokens that the LLM will predict (-1 = infinity).")] - [Model] public int numPredict = -1; - /// cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!) - [Tooltip("cache the processed prompt to avoid reprocessing the entire prompt every time (default: true, recommended!)")] - [ModelAdvanced] public bool cachePrompt = true; - /// seed for reproducibility (-1 = no reproducibility). - [Tooltip("seed for reproducibility (-1 = no reproducibility).")] - [ModelAdvanced] public int seed = 0; - /// LLM temperature, lower values give more deterministic answers. - [Tooltip("LLM temperature, lower values give more deterministic answers.")] - [ModelAdvanced, Float(0f, 2f)] public float temperature = 0.2f; - /// Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-k sampling selects the next token only from the top k most likely predicted tokens (0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Int(-1, 100)] public int topK = 40; - /// Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). - /// Higher values lead to more diverse text, while lower value will generate more focused and conservative text. - /// - [Tooltip("Top-p sampling selects the next token from a subset of tokens that together have a cumulative probability of at least p (1.0 = disabled). Higher values lead to more diverse text, while lower value will generate more focused and conservative text. ")] - [ModelAdvanced, Float(0f, 1f)] public float topP = 0.9f; - /// minimum probability for a token to be used. - [Tooltip("minimum probability for a token to be used.")] - [ModelAdvanced, Float(0f, 1f)] public float minP = 0.05f; - /// Penalty based on repeated tokens to control the repetition of token sequences in the generated text. - [Tooltip("Penalty based on repeated tokens to control the repetition of token sequences in the generated text.")] - [ModelAdvanced, Float(0f, 2f)] public float repeatPenalty = 1.1f; - /// Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token presence in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float presencePenalty = 0f; - /// Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled). - [Tooltip("Penalty based on token frequency in previous responses to control the repetition of token sequences in the generated text. (0.0 = disabled).")] - [ModelAdvanced, Float(0f, 1f)] public float frequencyPenalty = 0f; - /// enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens. - [Tooltip("enable locally typical sampling (1.0 = disabled). Higher values will promote more contextually coherent tokens, while lower values will promote more diverse tokens.")] - [ModelAdvanced, Float(0f, 1f)] public float typicalP = 1f; - /// last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size). - [Tooltip("last n tokens to consider for penalizing repetition (0 = disabled, -1 = ctx-size).")] - [ModelAdvanced, Int(0, 2048)] public int repeatLastN = 64; - /// enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0). - [Tooltip("enable Mirostat sampling, controlling perplexity during text generation (0 = disabled, 1 = Mirostat, 2 = Mirostat 2.0).")] - [ModelAdvanced, Int(0, 2)] public int mirostat = 0; - /// The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text. - [Tooltip("The Mirostat target entropy (tau) controls the balance between coherence and diversity in the generated text.")] - [ModelAdvanced, Float(0f, 10f)] public float mirostatTau = 5f; - /// The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text. - [Tooltip("The Mirostat learning rate (eta) controls how quickly the algorithm responds to feedback from the generated text.")] - [ModelAdvanced, Float(0f, 1f)] public float mirostatEta = 0.1f; - /// if greater than 0, the response also contains the probabilities of top N tokens for each generated token. - [Tooltip("if greater than 0, the response also contains the probabilities of top N tokens for each generated token.")] - [ModelAdvanced, Int(0, 10)] public int nProbs = 0; - /// ignore end of stream token and continue generating. - [Tooltip("ignore end of stream token and continue generating.")] - [ModelAdvanced] public bool ignoreEos = false; - protected LLM _prellm; - [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; + /// The underlying LLMClient instance from LlamaLib public UndreamAI.LlamaLib.LLMClient llmClient { get => _llmClient; protected set => SetLLMClient(value); } + #endregion - bool started = false; - string completionParametersPre = ""; + #region Private Fields + private LLM _previousLlm; + [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; + private bool started = false; + private string completionParametersCache = ""; + #endregion + #region Unity Lifecycle /// - /// The Unity Awake function that initializes the state before the application starts. - /// The following actions are executed: - /// - the corresponding LLM server is defined (if ran locally) - /// - the grammar is set based on the grammar file - /// - the prompt and chat history are initialised - /// - the chat template is constructed - /// - the number of tokens to keep are based on the system prompt (if setNKeepToPrompt=true) + /// Unity Awake method that validates configuration and assigns local LLM if needed. /// public virtual void Awake() { - // Start the LLM server in a cross-platform way if (!enabled) return; if (!remote) @@ -156,13 +218,16 @@ public virtual void Awake() AssignLLM(); if (llm == null) { - string error = $"No LLM assigned or detected for LLMAgent {name}!"; + string error = $"No LLM assigned or detected for {GetType().Name} '{name}'!"; LLMUnitySetup.LogError(error); - throw new Exception(error); + throw new InvalidOperationException(error); } } } + /// + /// Unity Start method that initializes the LLM client connection. + /// public virtual void Start() { if (!enabled) return; @@ -170,86 +235,154 @@ public virtual void Start() started = true; } + protected virtual void OnValidate() + { + if (_llm != _previousLlm) SetLLM(_llm); + AssignLLM(); + } + + protected virtual void Reset() + { + AssignLLM(); + } + #endregion + + #region Initialization + private void CheckLLMClient() + { + if (llmClient == null) + { + string error = "LLMClient not initialized"; + LLMUnitySetup.LogError(error); + throw new System.InvalidOperationException(error); + } + } + + /// + /// Sets up the underlying LLM client connection (local or remote). + /// protected virtual void SetupLLMClient() { - if (!remote) llmClient = new UndreamAI.LlamaLib.LLMClient(llm.llmService); - else llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); + string exceptionMessage = ""; + try + { + if (!remote) + { + if (llm?.llmService == null) + { + throw new InvalidOperationException("Local LLM service is not available"); + } + llmClient = new UndreamAI.LlamaLib.LLMClient(llm.llmService); + } + else + { + llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); + } + } + catch (Exception ex) + { + exceptionMessage = ex.Message; + } + if (llmClient == null || exceptionMessage != "") + { + string error = "llmClient not initialized"; + if (exceptionMessage != "") error += ", error: " + exceptionMessage; + LLMUnitySetup.LogError(error); + throw new InvalidOperationException(error); + } + SetGrammar(grammar); - completionParametersPre = ""; + completionParametersCache = ""; } + /// + /// Gets the underlying LLMLocal instance for operations requiring local access. + /// protected virtual LLMLocal GetCaller() { return _llmClient; } /// - /// Sets the LLM object of the LLMClient + /// Sets the local LLM instance for this client. /// - /// LLM object - protected virtual void SetLLM(LLM llmSet) + /// LLM instance to connect to + protected virtual void SetLLM(LLM llmInstance) { - if (llmSet == _llm) return; + if (llmInstance == _llm) return; + if (remote) { - LLMUnitySetup.LogError("The client is in remote mode"); + LLMUnitySetup.LogError("Cannot set LLM when client is in remote mode"); return; } - _llm = llmSet; - _prellm = _llm; + + _llm = llmInstance; + _previousLlm = _llm; + if (started) SetupLLMClient(); } - protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) + /// + /// Sets the underlying LLMClient instance. + /// + protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientInstance) { - _llmClient = llmClientSet; + _llmClient = llmClientInstance; } + #endregion + #region LLM Assignment /// - /// Checks if a LLM can be auto-assigned if the LLM of the LLMClient is null + /// Determines if an LLM instance can be auto-assigned to this client. + /// Override in derived classes to implement specific assignment logic. /// - /// - /// bool specifying whether the LLM can be auto-assigned - public virtual bool IsAutoAssignableLLM(LLM llmSet) + /// LLM instance to evaluate + /// True if the LLM can be auto-assigned + public virtual bool IsAutoAssignableLLM(LLM llmInstance) { return true; } - protected virtual void OnValidate() - { - if (_llm != _prellm) SetLLM(_llm); - AssignLLM(); - } - - protected virtual void Reset() - { - AssignLLM(); - } - + /// + /// Automatically assigns a suitable LLM instance if none is set. + /// protected virtual void AssignLLM() { if (remote || llm != null) return; - List validLLMs = new List(); + var validLLMs = new List(); + #if UNITY_6000_0_OR_NEWER - foreach (LLM foundllm in FindObjectsByType(typeof(LLM), FindObjectsSortMode.None)) + foreach (LLM foundLlm in FindObjectsByType(FindObjectsSortMode.None)) #else - foreach (LLM foundllm in FindObjectsOfType()) + foreach (LLM foundLlm in FindObjectsOfType()) #endif { - if (IsAutoAssignableLLM(foundllm)) validLLMs.Add(foundllm); + if (IsAutoAssignableLLM(foundLlm)) + { + validLLMs.Add(foundLlm); + } } + if (validLLMs.Count == 0) return; - llm = SortLLMsByBestMatching(validLLMs.ToArray())[0]; - string msg = $"Assigning LLM {llm.name} to {GetType()} {name}"; - if (llm.gameObject.scene != gameObject.scene) msg += $" from scene {llm.gameObject.scene}"; - LLMUnitySetup.Log(msg); + llm = SortLLMsByBestMatch(validLLMs.ToArray())[0]; + + string message = $"Auto-assigned LLM '{llm.name}' to {GetType().Name} '{name}'"; + if (llm.gameObject.scene != gameObject.scene) + { + message += $" (from scene '{llm.gameObject.scene.name}')"; + } + LLMUnitySetup.Log(message); } - protected virtual LLM[] SortLLMsByBestMatching(LLM[] arrayIn) + /// + /// Sorts LLM instances by compatibility, preferring same-scene objects and hierarchy order. + /// + protected virtual LLM[] SortLLMsByBestMatch(LLM[] llmArray) { - LLM[] array = (LLM[])arrayIn.Clone(); + LLM[] array = (LLM[]) llmArray.Clone(); for (int i = 0; i < array.Length - 1; i++) { bool swapped = false; @@ -272,87 +405,61 @@ protected virtual LLM[] SortLLMsByBestMatching(LLM[] arrayIn) } return array; } + #endregion + #region Grammar Management /// - /// Sets the provided grammar (gbnf or json schema format) + /// Sets grammar constraints for structured output generation. /// - /// grammar in gbnf or json schema format + /// Grammar in GBNF or JSON schema format public virtual void SetGrammar(string grammarString) { - grammar = grammarString; - GetCaller().SetGrammar(grammarString); + _grammar = grammarString ?? ""; + GetCaller()?.SetGrammar(_grammar); } /// - /// Loads a grammar file + /// Loads grammar constraints from a file. /// - /// path to the grammar file + /// Path to grammar file public virtual void LoadGrammar(string path) { - if (String.IsNullOrEmpty(path)) return; - SetGrammar(File.ReadAllText(path)); - } - - /// - /// Allows to cancel the requests in a specific slot of the LLM - /// - /// slot of the LLM - public void CancelRequest(int id_slot) - { - llmClient.Cancel(id_slot); - } + if (string.IsNullOrEmpty(path)) return; - /// - /// Tokenises the provided query. - /// - /// query to tokenise - /// callback function called with the result tokens - /// list of the tokens - public virtual List Tokenize(string query, Callback> callback = null) - { - List tokens = llmClient.Tokenize(query); - callback?.Invoke(tokens); - return tokens; - } + if (!File.Exists(path)) + { + LLMUnitySetup.LogError($"Grammar file not found: {path}"); + return; + } - /// - /// Detokenises the provided tokens to a string. - /// - /// tokens to detokenise - /// callback function called with the result string - /// the detokenised string - public virtual string Detokenize(List tokens, Callback callback = null) - { - // handle the detokenization of a message by the user - string prompt = llmClient.Detokenize(tokens); - callback?.Invoke(prompt); - return prompt; + try + { + string grammarContent = File.ReadAllText(path); + SetGrammar(grammarContent); + LLMUnitySetup.Log($"Loaded grammar from: {path}"); + } + catch (Exception ex) + { + LLMUnitySetup.LogError($"Failed to load grammar file '{path}': {ex.Message}"); + } } + #endregion + #region Completion Parameters /// - /// Computes the embeddings of the provided input. + /// Applies current completion parameters to the LLM client. + /// Only updates if parameters have changed since last call. /// - /// input to compute the embeddings for - /// callback function called with the result string - /// the computed embeddings - public virtual List Embeddings(string query, Callback> callback = null) - { - // handle the tokenization of a message by the user - List embeddings = llmClient.Embeddings(query); - callback?.Invoke(embeddings); - return embeddings; - } - protected virtual void SetCompletionParameters() { - if (llm.embeddingsOnly) + if (llm != null && llm.embeddingsOnly) { string error = "LLM can't be used for completion, it is an embeddings only model!"; LLMUnitySetup.LogError(error); throw new Exception(error); } - JObject json = new JObject + var parameters = new JObject { ["temperature"] = temperature, ["top_k"] = topK, @@ -372,52 +479,114 @@ protected virtual void SetCompletionParameters() ["n_probs"] = nProbs, ["cache_prompt"] = cachePrompt }; - string completionParameters = json.ToString(); - if (completionParameters != completionParametersPre) + + string parametersJson = parameters.ToString(); + if (parametersJson != completionParametersCache) { - GetCaller().SetCompletionParameters(json); - completionParametersPre = completionParameters; + GetCaller()?.SetCompletionParameters(parameters); + completionParametersCache = parametersJson; } } + #endregion + #region Core LLM Operations /// - /// Completion functionality of the LLM. - /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). - /// The function allows callbacks when the response is partially or fully received. + /// Converts text into a list of token IDs. /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// the LLM response - public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null, int id_slot = -1) + /// Text to tokenize + /// Optional callback to receive the result + /// List of token IDs + public virtual List Tokenize(string query, Callback> callback = null) + { + if (string.IsNullOrEmpty(query)) + { + throw new ArgumentNullException(nameof(query)); + } + CheckLLMClient(); + + List tokens = llmClient.Tokenize(query); + callback?.Invoke(tokens); + return tokens; + } + + /// + /// Converts token IDs back to text. + /// + /// Token IDs to decode + /// Optional callback to receive the result + /// Decoded text + public virtual string Detokenize(List tokens, Callback callback = null) + { + if (tokens == null) + { + throw new ArgumentNullException(nameof(tokens)); + } + CheckLLMClient(); + + string text = llmClient.Detokenize(tokens); + callback?.Invoke(text); + return text; + } + + /// + /// Generates embedding vectors for the input text. + /// + /// Text to embed + /// Optional callback to receive the result + /// Embedding vector + public virtual List Embeddings(string query, Callback> callback = null) { - // handle a completion request by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received + if (string.IsNullOrEmpty(query)) + { + throw new ArgumentNullException(nameof(query)); + } + CheckLLMClient(); + List embeddings = llmClient.Embeddings(query); + callback?.Invoke(embeddings); + return embeddings; + } + + /// + /// Generates text completion for the given prompt. + /// + /// Input prompt text + /// Optional streaming callback for partial responses + /// Slot ID for the request (-1 for auto-assignment) + /// Generated completion text + public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null, int id_slot = -1) + { + CheckLLMClient(); SetCompletionParameters(); return llmClient.Completion(prompt, callback, id_slot); } /// - /// Completion functionality of the LLM (async). - /// It calls the LLM completion based solely on the provided prompt (no formatting by the chat template). - /// The function allows callbacks when the response is partially or fully received. + /// Generates text completion asynchronously. /// - /// user query - /// callback function that receives the response as string - /// callback function called when the full response has been received - /// the LLM response - public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, int id_slot = -1) + /// Input prompt text + /// Optional streaming callback for partial responses + /// Optional callback when completion finishes + /// Slot ID for the request (-1 for auto-assignment) + /// Task that returns the generated completion text + public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, + EmptyCallback completionCallback = null, int id_slot = -1) { - // handle a completion request by the user - // call the callback function while the answer is received - // call the completionCallback function when the answer is fully received - + CheckLLMClient(); SetCompletionParameters(); string result = await llmClient.CompletionAsync(prompt, callback, id_slot); completionCallback?.Invoke(); return result; } + + /// + /// Cancels an active request in the specified slot. + /// + /// Slot ID of the request to cancel + public void CancelRequest(int id_slot) + { + llmClient?.Cancel(id_slot); + } + #endregion } } From 18d1d1ba7492978cc5c78e97bfa6a03346d14265 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 19 Aug 2025 16:35:05 +0300 Subject: [PATCH 19/69] more changes --- Editor/LLMEditor.cs | 8 +- Runtime/LLM.cs | 315 ++++++++++++++++++++++++++++++++++--------- Runtime/LLMAgent.cs | 9 +- Runtime/LLMClient.cs | 8 +- 4 files changed, 271 insertions(+), 69 deletions(-) diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index 9ae3ace4..b8596b51 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -62,11 +62,11 @@ void AddSSLInfo(string propertyName, string type, Callback setterCallbac if (llmScriptSO.FindProperty("advancedOptions").boolValue) { EditorGUILayout.BeginHorizontal(); - AddSSLLoad("certificate", llmScript.SetSSLCert); - AddSSLLoad("key", llmScript.SetSSLKey); + AddSSLLoad("certificate", llmScript.SetSSLCertFromFile); + AddSSLLoad("key", llmScript.SetSSLKeyFromFile); EditorGUILayout.EndHorizontal(); - AddSSLInfo("SSLCertPath", "certificate", llmScript.SetSSLCert); - AddSSLInfo("SSLKeyPath", "key", llmScript.SetSSLKey); + AddSSLInfo("SSLCertPath", "certificate", llmScript.SetSSLCertFromFile); + AddSSLInfo("SSLKeyPath", "key", llmScript.SetSSLKeyFromFile); } Space(); } diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index e46e5053..46bf5431 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -27,68 +27,252 @@ public class LLM : MonoBehaviour /// Enable remote server functionality to allow external connections [Tooltip("Enable remote server functionality to allow external connections")] - [LocalRemote] public bool remote = false; + [LocalRemote, SerializeField] private bool _remote = false; /// Port to use for the remote LLM server [Tooltip("Port to use for the remote LLM server")] - [Remote] public int port = 13333; + [Remote, SerializeField] private int _port = 13333; + + /// API key required for server access (leave empty to disable authentication) + [Tooltip("API key required for server access (leave empty to disable authentication)")] + [Remote, SerializeField] private string _APIKey = ""; + + /// SSL certificate for the remote LLM server + [Tooltip("SSL certificate for the remote LLM server")] + [Remote, SerializeField] private string _SSLCert = ""; + + /// SSL key for the remote LLM server + [Tooltip("SSL key for the remote LLM server")] + [Remote, SerializeField] private string _SSLKey = ""; /// Number of threads to use for processing (-1 = use all available threads) [Tooltip("Number of threads to use for processing (-1 = use all available threads)")] - [LLM] public int numThreads = -1; + [LLM, SerializeField] private int _numThreads = -1; /// Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported [Tooltip("Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported")] - [LLM] public int numGPULayers = 0; + [LLM, SerializeField] private int _numGPULayers = 0; /// Number of prompts that can be processed in parallel (-1 = auto-detect from clients) [Tooltip("Number of prompts that can be processed in parallel (-1 = auto-detect from clients)")] - [LLMAdvanced] public int parallelPrompts = -1; - - /// Persist this LLM GameObject across scene transitions - [Tooltip("Persist this LLM GameObject across scene transitions")] - [LLMAdvanced] public bool dontDestroyOnLoad = true; + [LLMAdvanced, SerializeField] private int _parallelPrompts = -1; /// Size of the prompt context in tokens (0 = use model's default context size) [Tooltip("Size of the prompt context in tokens (0 = use model's default context size). This determines how much conversation history the model can remember.")] - [DynamicRange("minContextLength", "maxContextLength", false), Model] public int contextSize = 8192; + [DynamicRange("minContextLength", "maxContextLength", false), Model, SerializeField] private int _contextSize = 8192; /// Batch size for prompt processing (larger = more memory, potentially faster) [Tooltip("Batch size for prompt processing (larger = more memory, potentially faster)")] - [ModelAdvanced] public int batchSize = 512; + [ModelAdvanced, SerializeField] private int _batchSize = 512; /// LLM model file path (.gguf format) [Tooltip("LLM model file path (.gguf format)")] - [ModelAdvanced] public string model = ""; + [ModelAdvanced, SerializeField] private string _model = ""; + + /// Enable flash attention optimization (requires compatible model) + [Tooltip("Enable flash attention optimization (requires compatible model)")] + [ModelExtras, SerializeField] private bool _flashAttention = false; /// Chat template for conversation formatting ("auto" = detect from model) [Tooltip("Chat template for conversation formatting (\"auto\" = detect from model)")] - [ModelAdvanced] public string chatTemplate = "auto"; + [ModelAdvanced, SerializeField] private string _chatTemplate = "auto"; /// LORA adapter model paths (.gguf format), separated by commas [Tooltip("LORA adapter model paths (.gguf format), separated by commas")] - [ModelAdvanced] public string lora = ""; + [ModelAdvanced, SerializeField] private string _lora = ""; /// Weights for LORA adapters, separated by commas (default: 1.0 for each) [Tooltip("Weights for LORA adapters, separated by commas (default: 1.0 for each)")] - [ModelAdvanced] public string loraWeights = ""; + [ModelAdvanced, SerializeField] private string _loraWeights = ""; + + /// Persist this LLM GameObject across scene transitions + [Tooltip("Persist this LLM GameObject across scene transitions")] + [LLMAdvanced] public bool dontDestroyOnLoad = true; + #endregion + + #region Public Properties with Validation + + /// Number of threads to use for processing (-1 = use all available threads) + public int numThreads + { + get => _numThreads; + set + { + AssertNotStarted(); + if (value < -1) + throw new ArgumentException("numThreads must be >= -1"); + _numThreads = value; + } + } + + /// Number of model layers to offload to GPU (0 = CPU only) + public int numGPULayers + { + get => _numGPULayers; + set + { + AssertNotStarted(); + if (value < 0) + throw new ArgumentException("numGPULayers must be >= 0"); + _numGPULayers = value; + } + } + + /// Number of prompts that can be processed in parallel (-1 = auto-detect from clients) + public int parallelPrompts + { + get => _parallelPrompts; + set + { + AssertNotStarted(); + if (value < -1) + throw new ArgumentException("parallelPrompts must be >= -1"); + _parallelPrompts = value; + } + } + + /// Size of the prompt context in tokens (0 = use model's default context size) + public int contextSize + { + get => _contextSize; + set + { + AssertNotStarted(); + if (value < 0) + throw new ArgumentException("contextSize must be >= 0"); + _contextSize = value; + } + } + + /// Batch size for prompt processing (larger = more memory, potentially faster) + public int batchSize + { + get => _batchSize; + set + { + AssertNotStarted(); + if (value <= 0) + throw new ArgumentException("batchSize must be > 0"); + _batchSize = value; + } + } /// Enable flash attention optimization (requires compatible model) - [Tooltip("Enable flash attention optimization (requires compatible model)")] - [ModelExtras] public bool flashAttention = false; + public bool flashAttention + { + get => _flashAttention; + set + { + AssertNotStarted(); + _flashAttention = value; + } + } + + /// LLM model file path (.gguf format) + public string model + { + get => _model; + set => SetModel(value); + } + + /// Chat template for conversation formatting ("auto" = detect from model) + public string chatTemplate + { + get => _chatTemplate; + set => SetTemplate(value); + } + + /// LORA adapter model paths (.gguf format), separated by commas + public string lora + { + get => _lora; + set + { + if (value == _lora) return; + AssertNotStarted(); + _lora = value; + UpdateLoraManagerFromStrings(); + } + } + + /// Weights for LORA adapters, separated by commas (default: 1.0 for each) + public string loraWeights + { + get => _loraWeights; + set + { + if (value == _loraWeights) return; + _loraWeights = value; + UpdateLoraManagerFromStrings(); + ApplyLoras(); + } + } + + /// Enable remote server functionality to allow external connections + public bool remote + { + get => _remote; + set + { + if (value == _remote) return; + _remote = value; + RestartServer(); + } + } + + /// Port to use for the remote LLM server + public int port + { + get => _port; + set + { + if (value == _port) return; + if (value < 0 || value > 65535) + throw new ArgumentException("port must be between 0 and 65535"); + _port = value; + RestartServer(); + } + } /// API key required for server access (leave empty to disable authentication) - [Tooltip("API key required for server access (leave empty to disable authentication)")] - public string APIKey = ""; + public string APIKey + { + get => _APIKey; + set + { + if (value == _APIKey) return; + _APIKey = value; + RestartServer(); + } + } + + /// SSL certificate for the remote LLM server + public string SSLCert + { + get => _SSLCert; + set + { + AssertNotStarted(); + if (value == _SSLCert) return; + _SSLCert = value; + } + } + + /// SSL key for the remote LLM server + public string SSLKey + { + get => _SSLKey; + set + { + AssertNotStarted(); + if (value == _SSLKey) return; + _SSLKey = value; + } + } - // SSL Configuration - [SerializeField] private string SSLCert = ""; - [SerializeField] private string SSLKey = ""; - public string SSLCertPath = ""; - public string SSLKeyPath = ""; #endregion - #region Public Properties + #region Other Public Properties /// True if the LLM server has started and is ready to receive requests public bool started { get; private set; } = false; @@ -137,8 +321,6 @@ public class LLM : MonoBehaviour public LLMManager llmManager = new LLMManager(); private static readonly object staticLock = new object(); public LoraManager loraManager = new LoraManager(); - private string loraPre = ""; - private string loraWeightsPre = ""; /// \endcond #endregion @@ -148,15 +330,6 @@ public LLM() LLMManager.Register(this); } - void OnValidate() - { - if (lora != loraPre || loraWeights != loraWeightsPre) - { - loraManager.FromStrings(lora, loraWeights); - (loraPre, loraWeightsPre) = (lora, loraWeights); - } - } - /// /// Unity Awake method that initializes the LLM server. /// Sets up the model, starts the service, and handles GPU fallback if needed. @@ -275,6 +448,31 @@ private void CreateLib() } } + /// + /// Setup the remote LLM server + /// + private void SetupServer() + { + if (!remote) return; + + if (!string.IsNullOrEmpty(SSLCert) && !string.IsNullOrEmpty(SSLKey)) + { + LLMUnitySetup.Log("Enabling SSL for server"); + llmService.SetSSL(SSLCert, SSLKey); + } + llmService.StartServer("", port, APIKey); + } + + /// + /// Restart the remote LLM server (on parameter change) + /// + private void RestartServer() + { + if (!started) return; + llmService.StopServer(); + SetupServer(); + } + private async Task CreateServiceAsync(string modelPath, List loraPaths) { int numSlots = GetNumClients(); @@ -294,17 +492,7 @@ await Task.Run(() => flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); llmService = new LLMService(llmlib, llmPtr); - - if (remote) - { - if (!string.IsNullOrEmpty(SSLCert) && !string.IsNullOrEmpty(SSLKey)) - { - LLMUnitySetup.Log("Enabling SSL for server"); - llmService.SetSSL(SSLCert, SSLKey); - } - llmService.StartServer("", port, APIKey); - } - + SetupServer(); llmService.Start(); } }); @@ -360,14 +548,12 @@ public static async Task WaitUntilModelSetup(Callback downloadProgr /// Sets the model file to use. Automatically configures context size and embedding settings. /// /// Path to the model file (.gguf format) - public void SetModel(string path) - { - if (started) - { - throw new InvalidOperationException("Cannot change model after LLM has started"); - } + public void SetModel(string path) + { + if (model == path) return; + AssertNotStarted(); - model = GetLLMManagerAsset(path); + _model = GetLLMManagerAsset(path); if (string.IsNullOrEmpty(model)) return; ModelEntry modelEntry = LLMManager.Get(model) ?? new ModelEntry(GetLLMManagerAssetRuntime(model)); @@ -397,16 +583,17 @@ public void SetModel(string path) /// Mark object dirty in editor public void SetTemplate(string templateName, bool setDirty = true) { + if (_chatTemplate == templateName) return; if (!ChatTemplates.Contains(templateName)) { LLMUnitySetup.LogError($"Unsupported chat template: {templateName}"); return; } - chatTemplate = templateName; + _chatTemplate = templateName; if (started) { - llmService.SetTemplate(chatTemplate == "auto" ? "" : chatTemplate); + llmService.SetTemplate(_chatTemplate == "auto" ? "" : _chatTemplate); } #if UNITY_EDITOR @@ -639,16 +826,20 @@ public void SetLoraWeights(Dictionary loraToWeight) private void UpdateLoras() { - (lora, loraWeights) = loraManager.ToStrings(); - (loraPre, loraWeightsPre) = (lora, loraWeights); - + (_lora, _loraWeights) = loraManager.ToStrings(); #if UNITY_EDITOR if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); #endif } + private void UpdateLoraManagerFromStrings() + { + loraManager.FromStrings(_lora, _loraWeights); + } + private void ApplyLoras() { + if (!started) return; var loras = new List(); float[] weights = loraManager.GetWeights(); @@ -670,9 +861,8 @@ private void ApplyLoras() /// Sets the SSL certificate for secure server connections. ///
/// Path to SSL certificate file - public void SetSSLCert(string path) + public void SetSSLCertFromFile(string path) { - SSLCertPath = path; SSLCert = ReadFileContents(path); } @@ -680,9 +870,8 @@ public void SetSSLCert(string path) /// Sets the SSL private key for secure server connections. ///
/// Path to SSL private key file - public void SetSSLKey(string path) + public void SetSSLKeyFromFile(string path) { - SSLKeyPath = path; SSLKey = ReadFileContents(path); } diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index e65ba3f6..aafc1d5e 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -148,7 +148,7 @@ protected virtual void SetupLLMAgent() throw new InvalidOperationException(error); } - if (slot!=-1) llmAgent.SlotId = slot; + if (slot != -1) llmAgent.SlotId = slot; } /// @@ -212,6 +212,7 @@ protected virtual void LoadHistory() LLMUnitySetup.LogError($"Failed to load chat history from '{save}': {ex.Message}"); } } + #endregion #region File Path Management @@ -249,6 +250,7 @@ public virtual string GetCacheSavePath(string filename) { return GetSavePath(filename + ".cache"); } + #endregion #region Chat Management @@ -291,6 +293,7 @@ public virtual void AddAssistantMessage(string content) CheckLLMAgent(); llmAgent.AddAssistantMessage(content); } + #endregion #region Chat Functionality @@ -342,6 +345,7 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall completionCallback?.Invoke(); return result; } + #endregion #region Model Warmup @@ -379,6 +383,7 @@ public virtual async Task Warmup(string query, EmptyCallback completionCallback SetCompletionParameters(); } } + #endregion #region Persistence @@ -486,6 +491,7 @@ public virtual string Load(string filename) return null; } + #endregion #region Request Management @@ -496,6 +502,7 @@ public void CancelRequests() { llmAgent?.Cancel(); } + #endregion } } diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index f18ff1fb..9707f6ed 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -245,6 +245,7 @@ protected virtual void Reset() { AssignLLM(); } + #endregion #region Initialization @@ -330,6 +331,7 @@ protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientInstan { _llmClient = llmClientInstance; } + #endregion #region LLM Assignment @@ -382,7 +384,7 @@ protected virtual void AssignLLM() /// protected virtual LLM[] SortLLMsByBestMatch(LLM[] llmArray) { - LLM[] array = (LLM[]) llmArray.Clone(); + LLM[] array = (LLM[])llmArray.Clone(); for (int i = 0; i < array.Length - 1; i++) { bool swapped = false; @@ -405,6 +407,7 @@ protected virtual LLM[] SortLLMsByBestMatch(LLM[] llmArray) } return array; } + #endregion #region Grammar Management @@ -443,6 +446,7 @@ public virtual void LoadGrammar(string path) LLMUnitySetup.LogError($"Failed to load grammar file '{path}': {ex.Message}"); } } + #endregion #region Completion Parameters @@ -487,6 +491,7 @@ protected virtual void SetCompletionParameters() completionParametersCache = parametersJson; } } + #endregion #region Core LLM Operations @@ -587,6 +592,7 @@ public void CancelRequest(int id_slot) { llmClient?.Cancel(id_slot); } + #endregion } } From 8f7f869cc2aaf7e1060772b938a7790676bae32a Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 19 Aug 2025 18:30:58 +0300 Subject: [PATCH 20/69] more improvements --- Editor/LLMEditor.cs | 20 ++++------------- Editor/PropertyEditor.cs | 2 +- Runtime/LLM.cs | 19 +++++++++-------- Runtime/LLMAgent.cs | 43 ++++++++++--------------------------- Runtime/LLMClient.cs | 46 ++++++++++++---------------------------- Runtime/LLMEmbedder.cs | 5 +++-- Runtime/LLMUtils.cs | 22 +++++++++++++++++++ 7 files changed, 64 insertions(+), 93 deletions(-) diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index b8596b51..1863a631 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -44,20 +44,8 @@ void AddSSLLoad(string type, Callback setterCallback) } } - void AddSSLInfo(string propertyName, string type, Callback setterCallback) - { - string path = llmScriptSO.FindProperty(propertyName).stringValue; - if (path != "") - { - EditorGUILayout.BeginHorizontal(); - EditorGUILayout.LabelField("SSL " + type + " path", path); - if (GUILayout.Button(trashIcon, GUILayout.Height(actionColumnWidth), GUILayout.Width(actionColumnWidth))) setterCallback(""); - EditorGUILayout.EndHorizontal(); - } - } - EditorGUILayout.LabelField("Server Security Settings", EditorStyles.boldLabel); - EditorGUILayout.PropertyField(llmScriptSO.FindProperty("APIKey")); + EditorGUILayout.PropertyField(llmScriptSO.FindProperty("_APIKey")); if (llmScriptSO.FindProperty("advancedOptions").boolValue) { @@ -65,8 +53,8 @@ void AddSSLInfo(string propertyName, string type, Callback setterCallbac AddSSLLoad("certificate", llmScript.SetSSLCertFromFile); AddSSLLoad("key", llmScript.SetSSLKeyFromFile); EditorGUILayout.EndHorizontal(); - AddSSLInfo("SSLCertPath", "certificate", llmScript.SetSSLCertFromFile); - AddSSLInfo("SSLKeyPath", "key", llmScript.SetSSLKeyFromFile); + EditorGUILayout.PropertyField(llmScriptSO.FindProperty("_SSLCert")); + EditorGUILayout.PropertyField(llmScriptSO.FindProperty("_SSLKey")); } Space(); } @@ -468,7 +456,7 @@ public override void OnInspectorGUI() AddOptionsToggles(llmScriptSO); AddSetupSettings(llmScriptSO); - if (llmScriptSO.FindProperty("remote").boolValue) AddSecuritySettings(llmScriptSO, llmScript); + if (llmScriptSO.FindProperty("_remote").boolValue) AddSecuritySettings(llmScriptSO, llmScript); AddModelLoadersSettings(llmScriptSO, llmScript); AddChatSettings(llmScriptSO); diff --git a/Editor/PropertyEditor.cs b/Editor/PropertyEditor.cs index 31a727a9..58241446 100644 --- a/Editor/PropertyEditor.cs +++ b/Editor/PropertyEditor.cs @@ -26,7 +26,7 @@ public virtual bool ToggleButton(string text, bool activated) public virtual void AddSetupSettings(SerializedObject llmScriptSO) { List attributeClasses = new List(){typeof(LocalRemoteAttribute)}; - SerializedProperty remoteProperty = llmScriptSO.FindProperty("remote"); + SerializedProperty remoteProperty = llmScriptSO.FindProperty("_remote"); if (remoteProperty != null) attributeClasses.Add(remoteProperty.boolValue ? typeof(RemoteAttribute) : typeof(LocalAttribute)); attributeClasses.Add(typeof(LLMAttribute)); if (llmScriptSO.FindProperty("advancedOptions").boolValue) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 46bf5431..71482597 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -11,7 +11,6 @@ namespace LLMUnity { - [DefaultExecutionOrder(-1)] /// @ingroup llm /// /// Unity MonoBehaviour component that manages a local LLM server instance. @@ -35,15 +34,15 @@ public class LLM : MonoBehaviour /// API key required for server access (leave empty to disable authentication) [Tooltip("API key required for server access (leave empty to disable authentication)")] - [Remote, SerializeField] private string _APIKey = ""; + [SerializeField] private string _APIKey = ""; /// SSL certificate for the remote LLM server [Tooltip("SSL certificate for the remote LLM server")] - [Remote, SerializeField] private string _SSLCert = ""; + [SerializeField] private string _SSLCert = ""; /// SSL key for the remote LLM server [Tooltip("SSL key for the remote LLM server")] - [Remote, SerializeField] private string _SSLKey = ""; + [SerializeField] private string _SSLKey = ""; /// Number of threads to use for processing (-1 = use all available threads) [Tooltip("Number of threads to use for processing (-1 = use all available threads)")] @@ -55,7 +54,7 @@ public class LLM : MonoBehaviour /// Number of prompts that can be processed in parallel (-1 = auto-detect from clients) [Tooltip("Number of prompts that can be processed in parallel (-1 = auto-detect from clients)")] - [LLMAdvanced, SerializeField] private int _parallelPrompts = -1; + [LLM, SerializeField] private int _parallelPrompts = -1; /// Size of the prompt context in tokens (0 = use model's default context size) [Tooltip("Size of the prompt context in tokens (0 = use model's default context size). This determines how much conversation history the model can remember.")] @@ -87,7 +86,7 @@ public class LLM : MonoBehaviour /// Persist this LLM GameObject across scene transitions [Tooltip("Persist this LLM GameObject across scene transitions")] - [LLMAdvanced] public bool dontDestroyOnLoad = true; + [LLM] public bool dontDestroyOnLoad = true; #endregion #region Public Properties with Validation @@ -548,8 +547,8 @@ public static async Task WaitUntilModelSetup(Callback downloadProgr /// Sets the model file to use. Automatically configures context size and embedding settings. /// /// Path to the model file (.gguf format) - public void SetModel(string path) - { + public void SetModel(string path) + { if (model == path) return; AssertNotStarted(); @@ -687,7 +686,9 @@ public string Completion(string prompt, LlamaLibUnity.CharArrayCallback streamCa public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) { AssertStarted(); - return await llmService.CompletionAsync(prompt, streamCallback, id_slot); + // Wrap callback to ensure it runs on the main thread + LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(streamCallback); + return await llmService.CompletionAsync(prompt, wrappedCallback, id_slot); } /// diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index aafc1d5e..21094ea8 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -3,14 +3,13 @@ using System; using System.Collections.Generic; using System.IO; -using System.Threading; using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEngine; namespace LLMUnity { - [DefaultExecutionOrder(-2)] + [DefaultExecutionOrder(-1)] /// @ingroup llm /// /// Unity MonoBehaviour that implements a conversational AI agent with persistent chat history. @@ -119,6 +118,12 @@ public List chat #endregion #region Unity Lifecycle and Initialization + public override void Awake() + { + if (!remote) llm?.Register(this); + base.Awake(); + } + private void CheckLLMAgent() { if (llmAgent == null) @@ -129,8 +134,10 @@ private void CheckLLMAgent() } } - protected virtual void SetupLLMAgent() + protected override async Task SetupLLMClient() { + await base.SetupLLMClient(); + string exceptionMessage = ""; try { @@ -149,16 +156,6 @@ protected virtual void SetupLLMAgent() } if (slot != -1) llmAgent.SlotId = slot; - } - - /// - /// Unity Start method that initializes the agent with chat functionality. - /// Sets up the underlying LLMAgent with role configuration and loads saved history. - /// - public override void Start() - { - base.Start(); - SetupLLMAgent(); InitHistory(); } @@ -173,12 +170,6 @@ protected override void OnValidate() } } - protected override void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientSet) - { - base.SetLLMClient(llmClientSet); - SetupLLMAgent(); - } - protected override LLMLocal GetCaller() { return llmAgent; @@ -327,19 +318,7 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall CheckLLMAgent(); // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = null; - if (callback != null) - { - var context = SynchronizationContext.Current; - wrappedCallback = (string msg) => - { - if (context != null) - context.Post(_ => callback(msg), null); - else - callback(msg); - }; - } - + LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback); SetCompletionParameters(); string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); completionCallback?.Invoke(); diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 9707f6ed..0b4c0113 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -6,12 +6,10 @@ using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEngine; -using UnityEditor; using Newtonsoft.Json.Linq; namespace LLMUnity { - [DefaultExecutionOrder(-2)] /// @ingroup llm /// /// Unity MonoBehaviour base class for LLM client functionality. @@ -129,7 +127,7 @@ public bool remote if (_remote != value) { _remote = value; - if (started) SetupLLMClient(); + if (started) _ = SetupLLMClient(); } } } @@ -138,7 +136,7 @@ public bool remote public LLM llm { get => _llm; - set => SetLLM(value); + set => _ = SetLLM(value); } /// API key for remote server authentication @@ -150,7 +148,7 @@ public string APIKey if (_APIKey != value) { _APIKey = value; - if (started) SetupLLMClient(); + if (started) _ = SetupLLMClient(); } } } @@ -164,7 +162,7 @@ public string host if (_host != value) { _host = value; - if (started) SetupLLMClient(); + if (started) _ = SetupLLMClient(); } } } @@ -178,7 +176,7 @@ public int port if (_port != value) { _port = value; - if (started) SetupLLMClient(); + if (started) _ = SetupLLMClient(); } } } @@ -189,18 +187,10 @@ public string grammar get => _grammar; set => SetGrammar(value); } - - /// The underlying LLMClient instance from LlamaLib - public UndreamAI.LlamaLib.LLMClient llmClient - { - get => _llmClient; - protected set => SetLLMClient(value); - } #endregion #region Private Fields - private LLM _previousLlm; - [Local, SerializeField] protected UndreamAI.LlamaLib.LLMClient _llmClient; + protected UndreamAI.LlamaLib.LLMClient llmClient; private bool started = false; private string completionParametersCache = ""; #endregion @@ -228,16 +218,15 @@ public virtual void Awake() /// /// Unity Start method that initializes the LLM client connection. /// - public virtual void Start() + public virtual async void Start() { if (!enabled) return; - SetupLLMClient(); + await SetupLLMClient(); started = true; } protected virtual void OnValidate() { - if (_llm != _previousLlm) SetLLM(_llm); AssignLLM(); } @@ -262,13 +251,14 @@ private void CheckLLMClient() /// /// Sets up the underlying LLM client connection (local or remote). /// - protected virtual void SetupLLMClient() + protected virtual async Task SetupLLMClient() { string exceptionMessage = ""; try { if (!remote) { + if (llm != null) await llm.WaitUntilReady(); if (llm?.llmService == null) { throw new InvalidOperationException("Local LLM service is not available"); @@ -301,14 +291,14 @@ protected virtual void SetupLLMClient() /// protected virtual LLMLocal GetCaller() { - return _llmClient; + return llmClient; } /// /// Sets the local LLM instance for this client. /// /// LLM instance to connect to - protected virtual void SetLLM(LLM llmInstance) + protected virtual async Task SetLLM(LLM llmInstance) { if (llmInstance == _llm) return; @@ -319,17 +309,7 @@ protected virtual void SetLLM(LLM llmInstance) } _llm = llmInstance; - _previousLlm = _llm; - - if (started) SetupLLMClient(); - } - - /// - /// Sets the underlying LLMClient instance. - /// - protected virtual void SetLLMClient(UndreamAI.LlamaLib.LLMClient llmClientInstance) - { - _llmClient = llmClientInstance; + if (started) await SetupLLMClient(); } #endregion diff --git a/Runtime/LLMEmbedder.cs b/Runtime/LLMEmbedder.cs index 1fa04fed..0bbf54e3 100644 --- a/Runtime/LLMEmbedder.cs +++ b/Runtime/LLMEmbedder.cs @@ -1,5 +1,6 @@ /// @file /// @brief File implementing the LLM embedder. +using System.Threading.Tasks; using UnityEngine; namespace LLMUnity @@ -11,9 +12,9 @@ namespace LLMUnity /// public class LLMEmbedder : LLMClient { - protected override void SetLLM(LLM llmSet) + protected override async Task SetLLM(LLM llmSet) { - base.SetLLM(llmSet); + await base.SetLLM(llmSet); if (llmSet != null && !llmSet.embeddingsOnly) { LLMUnitySetup.LogWarning($"The LLM {llmSet.name} set for LLMEmbeddings {gameObject.name} is not an embeddings-only model, accuracy may be sub-optimal"); diff --git a/Runtime/LLMUtils.cs b/Runtime/LLMUtils.cs index 43681479..560f2299 100644 --- a/Runtime/LLMUtils.cs +++ b/Runtime/LLMUtils.cs @@ -2,6 +2,8 @@ /// @brief File implementing LLM helper code. using System; using System.Collections.Generic; +using System.Threading; +using UndreamAI.LlamaLib; namespace LLMUnity { @@ -200,5 +202,25 @@ public string[] GetLoras() return loraPaths; } } + + public class Utils + { + public static LlamaLib.CharArrayCallback WrapCallbackForAsync(LlamaLib.CharArrayCallback callback) + { + LlamaLib.CharArrayCallback wrappedCallback = null; + if (callback != null) + { + var context = SynchronizationContext.Current; + wrappedCallback = (string msg) => + { + if (context != null) + context.Post(_ => callback(msg), null); + else + callback(msg); + }; + } + return wrappedCallback; + } + } /// \endcond } From c715ccf50e28f0c2be68a8d9047f6fd3fcdafac4 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 20 Aug 2025 11:46:03 +0300 Subject: [PATCH 21/69] check callback target for destruction --- Runtime/LLM.cs | 2 +- Runtime/LLMAgent.cs | 2 +- Runtime/LLMUtils.cs | 26 +++++++++++++------------- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 71482597..f793594e 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -687,7 +687,7 @@ public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArray { AssertStarted(); // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(streamCallback); + LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(streamCallback, this); return await llmService.CompletionAsync(prompt, wrappedCallback, id_slot); } diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 21094ea8..a8e55535 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -318,7 +318,7 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall CheckLLMAgent(); // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback); + LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); SetCompletionParameters(); string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); completionCallback?.Invoke(); diff --git a/Runtime/LLMUtils.cs b/Runtime/LLMUtils.cs index 560f2299..f18d37a3 100644 --- a/Runtime/LLMUtils.cs +++ b/Runtime/LLMUtils.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Threading; using UndreamAI.LlamaLib; +using UnityEngine; namespace LLMUnity { @@ -205,21 +206,20 @@ public string[] GetLoras() public class Utils { - public static LlamaLib.CharArrayCallback WrapCallbackForAsync(LlamaLib.CharArrayCallback callback) + public static LlamaLib.CharArrayCallback WrapCallbackForAsync( + LlamaLib.CharArrayCallback callback, MonoBehaviour owner) { - LlamaLib.CharArrayCallback wrappedCallback = null; - if (callback != null) + if (callback == null) return null; + var context = SynchronizationContext.Current; + + return (string msg) => { - var context = SynchronizationContext.Current; - wrappedCallback = (string msg) => - { - if (context != null) - context.Post(_ => callback(msg), null); - else - callback(msg); - }; - } - return wrappedCallback; + if (owner == null) return; + if (context != null) + context.Post(_ => { if (owner != null) callback(msg); }, null); + else + callback(msg); + }; } } /// \endcond From b9e946469dc422945251410ecbc06e75c083991a Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 11 Nov 2025 18:26:58 +0200 Subject: [PATCH 22/69] initial pass of basic unit test --- Editor/LLMBuildProcessor.cs | 2 +- Runtime/LLM.cs | 153 +-- Runtime/LLMAgent.cs | 106 +-- Runtime/LLMCharacter.cs | 34 + Runtime/LLMCharacter.cs.meta | 11 + Runtime/LLMClient.cs | 78 +- Runtime/LLMUnitySetup.cs | 3 +- Runtime/LLMUtils.cs | 31 +- Runtime/LlamaLib/LLM.cs | 36 +- Runtime/LlamaLib/LLMAgent.cs | 68 +- Runtime/LlamaLib/LLMClient.cs | 4 +- Runtime/LlamaLib/LLMService.cs | 16 +- Runtime/LlamaLib/LlamaLib.cs | 20 +- Runtime/LlamaLib/LlamaLib.csproj | 67 ++ Runtime/LlamaLib/LlamaLib.csproj.meta | 7 + Runtime/LlamaLib/LlamaLib.targets | 75 ++ Runtime/LlamaLib/LlamaLib.targets.meta | 7 + Runtime/LlamaLib/README.md | 1 + Runtime/LlamaLib/README.md.meta | 7 + Runtime/RAG/Chunking.cs | 12 +- Runtime/RAG/RAG.cs | 4 +- Runtime/RAG/Search.cs | 34 +- Runtime/RAG/SentenceSplitter.cs | 38 +- Runtime/RAG/TokenSplitter.cs | 6 +- Runtime/RAG/WordSplitter.cs | 36 +- Tests/Runtime/TestLLM.cs | 1186 ++++++++++++------------ Tests/Runtime/TestSearch.cs | 216 +++-- 27 files changed, 1231 insertions(+), 1027 deletions(-) create mode 100644 Runtime/LLMCharacter.cs create mode 100644 Runtime/LLMCharacter.cs.meta create mode 100644 Runtime/LlamaLib/LlamaLib.csproj create mode 100644 Runtime/LlamaLib/LlamaLib.csproj.meta create mode 100644 Runtime/LlamaLib/LlamaLib.targets create mode 100644 Runtime/LlamaLib/LlamaLib.targets.meta create mode 100644 Runtime/LlamaLib/README.md create mode 100644 Runtime/LlamaLib/README.md.meta diff --git a/Editor/LLMBuildProcessor.cs b/Editor/LLMBuildProcessor.cs index 4ac99091..a73ea2ee 100644 --- a/Editor/LLMBuildProcessor.cs +++ b/Editor/LLMBuildProcessor.cs @@ -51,7 +51,7 @@ public static void PostprocessIOSBuild(BuildTarget buildTarget, string outputPat string libraryFile = LLMUnitySetup.RelativePath(LLMUnitySetup.SearchDirectory(outputPath, $"libundreamai_{buildTarget.ToString().ToLower()}.a"), outputPath); string fileGuid = project.FindFileGuidByProjectPath(libraryFile); - if (string.IsNullOrEmpty(fileGuid)) Debug.LogError($"Library file {libraryFile} not found in project"); + if (string.IsNullOrEmpty(fileGuid)) LLMUnitySetup.LogError($"Library file {libraryFile} not found in project"); else { foreach (var phaseGuid in project.GetAllBuildPhasesForTarget(unityMainTargetGuid)) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index f793594e..5120ff98 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -76,6 +76,10 @@ public class LLM : MonoBehaviour [Tooltip("Chat template for conversation formatting (\"auto\" = detect from model)")] [ModelAdvanced, SerializeField] private string _chatTemplate = "auto"; + /// Enable LLM reasoning ("thinking" mode) + [Tooltip("Enable LLM reasoning ('thinking' mode)")] + [ModelAdvanced, SerializeField] private bool _reasoning = false; + /// LORA adapter model paths (.gguf format), separated by commas [Tooltip("LORA adapter model paths (.gguf format), separated by commas")] [ModelAdvanced, SerializeField] private string _lora = ""; @@ -181,6 +185,13 @@ public string chatTemplate set => SetTemplate(value); } + /// Enable LLM reasoning ('thinking' mode) + public bool reasoning + { + get => _reasoning; + set => SetReasoning(value); + } + /// LORA adapter model paths (.gguf format), separated by commas public string lora { @@ -493,14 +504,16 @@ await Task.Run(() => llmService = new LLMService(llmlib, llmPtr); SetupServer(); llmService.Start(); + + started = llmService.Started(); + if (started) + { + ApplyLoras(); + SetTemplate(chatTemplate); + SetReasoning(reasoning); + } } }); - - started = llmService.Started(); - if (!started) return; - - ApplyLoras(); - SetTemplate(chatTemplate); } #endregion @@ -600,6 +613,15 @@ public void SetTemplate(string templateName, bool setDirty = true) #endif } + /// + /// Enable LLM reasoning ("thinking" mode) + /// + /// + public void SetReasoning(bool reasoning) + { + llmService.EnableReasoning(reasoning); + } + /// /// Configure the LLM for embedding generation. /// @@ -630,112 +652,6 @@ public void Register(LLMClient llmClient) clients.Add(llmClient); } - /// - /// Tokenizes the provided text into a list of token IDs. - /// - /// Text to tokenize - /// List of token IDs - public List Tokenize(string content) - { - AssertStarted(); - return llmService.Tokenize(content); - } - - /// - /// Converts token IDs back to text. - /// - /// List of token IDs - /// Detokenised text - public string Detokenize(List tokens) - { - AssertStarted(); - return llmService.Detokenize(tokens); - } - - /// - /// Generates embedding vectors for the provided text. - /// - /// Text to embed - /// Embedding vector - public List Embeddings(string content) - { - AssertStarted(); - return llmService.Embeddings(content); - } - - /// - /// Generates text completion for the given prompt. - /// - /// Input prompt - /// Optional callback for streaming responses - /// Slot ID (-1 for automatic assignment) - /// Generated text - public string Completion(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) - { - AssertStarted(); - return llmService.Completion(prompt, streamCallback, id_slot); - } - - /// - /// Generates text completion asynchronously. - /// - /// Input prompt - /// Optional callback for streaming responses - /// Slot ID (-1 for automatic assignment) - /// Task that returns generated text - public async Task CompletionAsync(string prompt, LlamaLibUnity.CharArrayCallback streamCallback = null, int id_slot = -1) - { - AssertStarted(); - // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(streamCallback, this); - return await llmService.CompletionAsync(prompt, wrappedCallback, id_slot); - } - - /// - /// Cancels the request in the specified slot. - /// - /// Slot ID - public void CancelRequest(int id_slot) - { - AssertStarted(); - llmService.Cancel(id_slot); - } - - /// - /// Cancels all active requests. - /// - public void CancelRequests() - { - for (int i = 0; i < parallelPrompts; i++) - { - CancelRequest(i); - } - } - - /// - /// Saves the state of a specific slot to disk. - /// - /// Slot ID - /// File path to save to - /// Result message - public string SaveSlot(int idSlot, string filepath) - { - AssertStarted(); - return llmService.SaveSlot(idSlot, filepath); - } - - /// - /// Loads the state of a specific slot from disk. - /// - /// Slot ID - /// File path to load from - /// Result message - public string LoadSlot(int idSlot, string filepath) - { - AssertStarted(); - return llmService.LoadSlot(idSlot, filepath); - } - /// /// Gets a list of loaded LORA adapters. /// @@ -902,21 +818,12 @@ private void AssertStarted() string error = null; if (failed) error = "LLM service couldn't be created"; else if (!started) error = "LLM service not started"; - if (error != null) - { - LLMUnitySetup.LogError(error); - throw new Exception(error); - } + if (error != null) LLMUnitySetup.LogError(error, true); } private void AssertNotStarted() { - if (started) - { - string error = "This method can't be called when the LLM has started"; - LLMUnitySetup.LogError(error); - throw new Exception(error); - } + if (started) LLMUnitySetup.LogError("This method can't be called when the LLM has started", true); } /// diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index a8e55535..6323af73 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -3,6 +3,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Threading.Tasks; using UndreamAI.LlamaLib; using UnityEngine; @@ -108,11 +109,25 @@ public string systemPrompt /// Current conversation history as a list of chat messages public List chat { - get => llmAgent?.GetHistory() ?? new List(); + get + { + if (llmAgent == null) return new List(); + + // convert each UndreamAI.LlamaLib.ChatMessage to LLMUnity.ChatMessage + return llmAgent.GetHistory() + .Select(m => new ChatMessage(m)) + .ToList(); + } set { - CheckLLMAgent(); - llmAgent.SetHistory(value ?? new List()); + if (llmAgent != null) + { + // convert LLMUnity.ChatMessage back to UndreamAI.LlamaLib.ChatMessage + var history = value?.Select(m => (UndreamAI.LlamaLib.ChatMessage)m).ToList() + ?? new List(); + + llmAgent.SetHistory(history); + } } } #endregion @@ -124,16 +139,6 @@ public override void Awake() base.Awake(); } - private void CheckLLMAgent() - { - if (llmAgent == null) - { - string error = "LLMAgent not initialized"; - LLMUnitySetup.LogError(error); - throw new System.InvalidOperationException(error); - } - } - protected override async Task SetupLLMClient() { await base.SetupLLMClient(); @@ -151,12 +156,11 @@ protected override async Task SetupLLMClient() { string error = "LLMAgent not initialized"; if (exceptionMessage != "") error += ", error: " + exceptionMessage; - LLMUnitySetup.LogError(error); - throw new InvalidOperationException(error); + LLMUnitySetup.LogError(error, true); } if (slot != -1) llmAgent.SlotId = slot; - InitHistory(); + await InitHistory(); } protected override void OnValidate() @@ -178,16 +182,16 @@ protected override LLMLocal GetCaller() /// /// Initializes conversation history by clearing current state and loading from file if available. /// - protected virtual void InitHistory() + protected virtual async Task InitHistory() { - ClearChat(); - LoadHistory(); + await ClearChat(); + await LoadHistory(); } /// /// Loads conversation history from the saved file if it exists. /// - protected virtual void LoadHistory() + protected virtual async Task LoadHistory() { if (string.IsNullOrEmpty(save) || !File.Exists(GetJsonSavePath(save))) { @@ -196,7 +200,7 @@ protected virtual void LoadHistory() try { - Load(save); + await Load(save); } catch (System.Exception ex) { @@ -248,9 +252,9 @@ public virtual string GetCacheSavePath(string filename) /// /// Clears the entire conversation history. /// - public virtual void ClearChat() + public virtual async Task ClearChat() { - CheckLLMAgent(); + await CheckLLMClient(); llmAgent.ClearHistory(); } @@ -259,9 +263,9 @@ public virtual void ClearChat() /// /// Message role (e.g., userRole, assistantRole, or custom role) /// Message content - public virtual void AddMessage(string role, string content) + public virtual async Task AddMessage(string role, string content) { - CheckLLMAgent(); + await CheckLLMClient(); llmAgent.AddMessage(role, content); } @@ -269,9 +273,9 @@ public virtual void AddMessage(string role, string content) /// Adds a user message to the conversation history. /// /// User message content - public virtual void AddUserMessage(string content) + public virtual async Task AddUserMessage(string content) { - CheckLLMAgent(); + await CheckLLMClient(); llmAgent.AddUserMessage(content); } @@ -279,30 +283,15 @@ public virtual void AddUserMessage(string content) /// Adds an AI assistant message to the conversation history. ///
/// Assistant message content - public virtual void AddAssistantMessage(string content) + public virtual async Task AddAssistantMessage(string content) { - CheckLLMAgent(); + await CheckLLMClient(); llmAgent.AddAssistantMessage(content); } #endregion #region Chat Functionality - /// - /// Processes a user query and generates an AI response using conversation context. - /// The query and response are automatically added to chat history if specified. - /// - /// User's message or question - /// Optional streaming callback for partial responses - /// Whether to add the exchange to conversation history - /// AI assistant's response - public virtual string Chat(string query, LlamaLib.CharArrayCallback callback = null, bool addToHistory = true) - { - CheckLLMAgent(); - SetCompletionParameters(); - return llmAgent.Chat(query, addToHistory, callback); - } - /// /// Processes a user query asynchronously and generates an AI response using conversation context. /// The query and response are automatically added to chat history if specified. @@ -312,10 +301,10 @@ public virtual string Chat(string query, LlamaLib.CharArrayCallback callback = n /// Optional callback when response is complete /// Whether to add the exchange to conversation history /// Task that returns the AI assistant's response - public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCallback callback = null, + public virtual async Task Chat(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) { - CheckLLMAgent(); + await CheckLLMClient(); // Wrap callback to ensure it runs on the main thread LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); @@ -325,9 +314,6 @@ public virtual async Task ChatAsync(string query, LlamaLib.CharArrayCall return result; } - #endregion - - #region Model Warmup /// /// Warms up the model by processing the system prompt without generating output. /// This caches the system prompt processing for faster subsequent responses. @@ -353,7 +339,7 @@ public virtual async Task Warmup(string query, EmptyCallback completionCallback { // Set to generate no tokens for warmup numPredict = 0; - await ChatAsync(query, null, completionCallback, false); + await Chat(query, null, completionCallback, false); } finally { @@ -371,13 +357,13 @@ public virtual async Task Warmup(string query, EmptyCallback completionCallback /// /// Base filename (without extension) for saving /// Result message from cache save operation, or null if cache not saved - public virtual string Save(string filename) + public virtual async Task Save(string filename) { if (string.IsNullOrEmpty(filename)) { throw new System.ArgumentNullException(nameof(filename)); } - CheckLLMAgent(); + await CheckLLMClient(); // Save chat history string jsonPath = GetJsonSavePath(filename); @@ -395,8 +381,7 @@ public virtual string Save(string filename) } catch (System.Exception ex) { - LLMUnitySetup.LogError($"Failed to save chat history to '{jsonPath}': {ex.Message}"); - throw; + LLMUnitySetup.LogError($"Failed to save chat history to '{jsonPath}': {ex.Message}", true); } // Save cache if enabled and not remote @@ -423,13 +408,13 @@ public virtual string Save(string filename) /// /// Base filename (without extension) to load from /// Result message from cache load operation, or null if cache not loaded - public virtual string Load(string filename) + public virtual async Task Load(string filename) { if (string.IsNullOrEmpty(filename)) { throw new System.ArgumentNullException(nameof(filename)); } - CheckLLMAgent(); + await CheckLLMClient(); // Load chat history string jsonPath = GetJsonSavePath(filename); @@ -445,8 +430,7 @@ public virtual string Load(string filename) } catch (System.Exception ex) { - LLMUnitySetup.LogError($"Failed to load chat history from '{jsonPath}': {ex.Message}"); - throw; + LLMUnitySetup.LogError($"Failed to load chat history from '{jsonPath}': {ex.Message}", true); } // Load cache if enabled and not remote @@ -484,4 +468,10 @@ public void CancelRequests() #endregion } + + public class ChatMessage : UndreamAI.LlamaLib.ChatMessage + { + public ChatMessage(string role, string content) : base(role, content) {} + public ChatMessage(UndreamAI.LlamaLib.ChatMessage other) : base(other.role, other.content) {} + } } diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs new file mode 100644 index 00000000..2323882e --- /dev/null +++ b/Runtime/LLMCharacter.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace LLMUnity +{ + public class LLMCharacter : LLMAgent + { + public string playerName + { + get { return userRole; } + set { userRole = value; } + } + public string AIName + { + get { return assistantRole; } + set { assistantRole = value; } + } + public string prompt + { + get { return systemPrompt; } + set { systemPrompt = value; } + } + + public LLMCharacter() + { + Debug.LogWarning("LLMCharacter is deprecated and will be removed from future versions. Please Use LLMAgent instead."); + } + + public void SetPrompt(string newPrompt, bool clearChat = true) + { + systemPrompt = newPrompt; + if (clearChat) ClearChat(); + } + } +} diff --git a/Runtime/LLMCharacter.cs.meta b/Runtime/LLMCharacter.cs.meta new file mode 100644 index 00000000..98ada9cc --- /dev/null +++ b/Runtime/LLMCharacter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a7e2b282042f31439e8018a0e8e746b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 0b4c0113..23e08b61 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -7,6 +7,7 @@ using UndreamAI.LlamaLib; using UnityEngine; using Newtonsoft.Json.Linq; +using System.Threading; namespace LLMUnity { @@ -187,12 +188,14 @@ public string grammar get => _grammar; set => SetGrammar(value); } + #endregion #region Private Fields protected UndreamAI.LlamaLib.LLMClient llmClient; private bool started = false; private string completionParametersCache = ""; + private readonly SemaphoreSlim startSemaphore = new SemaphoreSlim(1, 1); #endregion #region Unity Lifecycle @@ -206,12 +209,7 @@ public virtual void Awake() if (!remote) { AssignLLM(); - if (llm == null) - { - string error = $"No LLM assigned or detected for {GetType().Name} '{name}'!"; - LLMUnitySetup.LogError(error); - throw new InvalidOperationException(error); - } + if (llm == null) LLMUnitySetup.LogError($"No LLM assigned or detected for {GetType().Name} '{name}'!", true); } } @@ -238,14 +236,11 @@ protected virtual void Reset() #endregion #region Initialization - private void CheckLLMClient() + protected virtual async Task CheckLLMClient() { - if (llmClient == null) - { - string error = "LLMClient not initialized"; - LLMUnitySetup.LogError(error); - throw new System.InvalidOperationException(error); - } + await startSemaphore.WaitAsync(); + startSemaphore.Release(); + if (GetCaller() == null) LLMUnitySetup.LogError("LLMClient not initialized", true); } /// @@ -253,37 +248,41 @@ private void CheckLLMClient() /// protected virtual async Task SetupLLMClient() { + await startSemaphore.WaitAsync(); + string exceptionMessage = ""; try { if (!remote) { if (llm != null) await llm.WaitUntilReady(); - if (llm?.llmService == null) - { - throw new InvalidOperationException("Local LLM service is not available"); - } + if (llm?.llmService == null) LLMUnitySetup.LogError("Local LLM service is not available", true); llmClient = new UndreamAI.LlamaLib.LLMClient(llm.llmService); } else { llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); } + + SetGrammar(grammar); + completionParametersCache = ""; } catch (Exception ex) { + LLMUnitySetup.LogError(ex.Message); exceptionMessage = ex.Message; } + finally + { + startSemaphore.Release(); + } + if (llmClient == null || exceptionMessage != "") { string error = "llmClient not initialized"; if (exceptionMessage != "") error += ", error: " + exceptionMessage; - LLMUnitySetup.LogError(error); - throw new InvalidOperationException(error); + LLMUnitySetup.LogError(error, true); } - - SetGrammar(grammar); - completionParametersCache = ""; } /// @@ -439,8 +438,7 @@ protected virtual void SetCompletionParameters() if (llm != null && llm.embeddingsOnly) { string error = "LLM can't be used for completion, it is an embeddings only model!"; - LLMUnitySetup.LogError(error); - throw new Exception(error); + LLMUnitySetup.LogError(error, true); } var parameters = new JObject @@ -481,13 +479,13 @@ protected virtual void SetCompletionParameters() /// Text to tokenize /// Optional callback to receive the result /// List of token IDs - public virtual List Tokenize(string query, Callback> callback = null) + public virtual async Task> Tokenize(string query, Callback> callback = null) { if (string.IsNullOrEmpty(query)) { throw new ArgumentNullException(nameof(query)); } - CheckLLMClient(); + await CheckLLMClient(); List tokens = llmClient.Tokenize(query); callback?.Invoke(tokens); @@ -500,13 +498,13 @@ public virtual List Tokenize(string query, Callback> callback = n /// Token IDs to decode /// Optional callback to receive the result /// Decoded text - public virtual string Detokenize(List tokens, Callback callback = null) + public virtual async Task Detokenize(List tokens, Callback callback = null) { if (tokens == null) { throw new ArgumentNullException(nameof(tokens)); } - CheckLLMClient(); + await CheckLLMClient(); string text = llmClient.Detokenize(tokens); callback?.Invoke(text); @@ -519,13 +517,13 @@ public virtual string Detokenize(List tokens, Callback callback = n /// Text to embed /// Optional callback to receive the result /// Embedding vector - public virtual List Embeddings(string query, Callback> callback = null) + public virtual async Task> Embeddings(string query, Callback> callback = null) { if (string.IsNullOrEmpty(query)) { throw new ArgumentNullException(nameof(query)); } - CheckLLMClient(); + await CheckLLMClient(); List embeddings = llmClient.Embeddings(query); callback?.Invoke(embeddings); @@ -533,31 +531,17 @@ public virtual List Embeddings(string query, Callback> callba } /// - /// Generates text completion for the given prompt. - /// - /// Input prompt text - /// Optional streaming callback for partial responses - /// Slot ID for the request (-1 for auto-assignment) - /// Generated completion text - public virtual string Completion(string prompt, LlamaLib.CharArrayCallback callback = null, int id_slot = -1) - { - CheckLLMClient(); - SetCompletionParameters(); - return llmClient.Completion(prompt, callback, id_slot); - } - - /// - /// Generates text completion asynchronously. + /// Generates text completion. /// /// Input prompt text /// Optional streaming callback for partial responses /// Optional callback when completion finishes /// Slot ID for the request (-1 for auto-assignment) /// Task that returns the generated completion text - public virtual async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallback callback = null, + public virtual async Task Completion(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, int id_slot = -1) { - CheckLLMClient(); + await CheckLLMClient(); SetCompletionParameters(); string result = await llmClient.CompletionAsync(prompt, callback, id_slot); completionCallback?.Invoke(); diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index 86b16d5a..0b0a6cc4 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -194,11 +194,12 @@ public static void LogWarning(string message) Debug.LogWarning(message); } - public static void LogError(string message) + public static void LogError(string message, bool throwException = false) { if ((int)DebugMode > (int)DebugModeType.Error) return; Debug.LogError(message); foreach (Callback errorCallback in errorCallbacks) errorCallback(message); + if (throwException) throw new Exception(message); } static void LoadPlayerPrefs() diff --git a/Runtime/LLMUtils.cs b/Runtime/LLMUtils.cs index f18d37a3..86d42195 100644 --- a/Runtime/LLMUtils.cs +++ b/Runtime/LLMUtils.cs @@ -214,11 +214,32 @@ public static LlamaLib.CharArrayCallback WrapCallbackForAsync( return (string msg) => { - if (owner == null) return; - if (context != null) - context.Post(_ => { if (owner != null) callback(msg); }, null); - else - callback(msg); + try + { + if (owner == null) return; + if (context != null) + { + context.Post(_ => + { + try + { + if (owner != null) callback(msg); + } + catch (Exception e) + { + LLMUnitySetup.LogError($"Exception in callback: {e}"); + } + }, null); + } + else + { + callback(msg); + } + } + catch (Exception e) + { + LLMUnitySetup.LogError($"Exception in callback wrapper: {e}"); + } }; } } diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs index 5dcd9d20..cfad6d74 100644 --- a/Runtime/LlamaLib/LLM.cs +++ b/Runtime/LlamaLib/LLM.cs @@ -95,7 +95,7 @@ public string ApplyTemplate(JArray messages = null) if (messages == null) throw new ArgumentNullException(nameof(messages)); CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Apply_Template(llm, messages.ToString()); + IntPtr result = llamaLib.LLM_Apply_Template(llm, messages.ToString() ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -105,7 +105,7 @@ public List Tokenize(string content) throw new ArgumentNullException(nameof(content)); CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Tokenize(llm, content); + IntPtr result = llamaLib.LLM_Tokenize(llm, content ?? string.Empty); string resultStr = Marshal.PtrToStringAnsi(result) ?? string.Empty; List ret = new List(); try @@ -124,7 +124,7 @@ public string Detokenize(List tokens) CheckLlamaLib(); JArray tokensJSON = JArray.FromObject(tokens); - IntPtr result = llamaLib.LLM_Detokenize(llm, tokensJSON.ToString()); + IntPtr result = llamaLib.LLM_Detokenize(llm, tokensJSON.ToString() ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -142,7 +142,7 @@ public List Embeddings(string content) CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Embeddings(llm, content); + IntPtr result = llamaLib.LLM_Embeddings(llm, content ?? string.Empty); string resultStr = Marshal.PtrToStringAnsi(result) ?? string.Empty; List ret = new List(); @@ -158,7 +158,7 @@ public List Embeddings(string content) public void SetCompletionParameters(JObject parameters = null) { CheckLlamaLib(); - llamaLib.LLM_Set_Completion_Parameters(llm, parameters.ToString()); + llamaLib.LLM_Set_Completion_Parameters(llm, parameters?.ToString() ?? string.Empty); } public JObject GetCompletionParameters() @@ -178,7 +178,7 @@ public JObject GetCompletionParameters() public void SetGrammar(string grammar) { CheckLlamaLib(); - llamaLib.LLM_Set_Grammar(llm, grammar); + llamaLib.LLM_Set_Grammar(llm, grammar ?? string.Empty); } public string GetGrammar() @@ -198,7 +198,7 @@ public void CheckCompletionInternal(string prompt) public string CompletionInternal(string prompt, LlamaLib.CharArrayCallback callback, int idSlot) { IntPtr result; - result = llamaLib.LLM_Completion(llm, prompt, callback, idSlot); + result = llamaLib.LLM_Completion(llm, prompt ?? string.Empty, callback, idSlot); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -227,7 +227,7 @@ public string SaveSlot(int idSlot, string filepath) if (string.IsNullOrEmpty(filepath)) throw new ArgumentNullException(nameof(filepath)); - IntPtr result = llamaLib.LLM_Save_Slot(llm, idSlot, filepath); + IntPtr result = llamaLib.LLM_Save_Slot(llm, idSlot, filepath ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -236,7 +236,7 @@ public string LoadSlot(int idSlot, string filepath) if (string.IsNullOrEmpty(filepath) || !File.Exists(filepath)) throw new ArgumentNullException(nameof(filepath)); - IntPtr result = llamaLib.LLM_Load_Slot(llm, idSlot, filepath); + IntPtr result = llamaLib.LLM_Load_Slot(llm, idSlot, filepath ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -258,7 +258,13 @@ protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} public void SetTemplate(string template) { CheckLlamaLib(); - llamaLib.LLM_Set_Template(llm, template); + llamaLib.LLM_Set_Template(llm, template ?? string.Empty); + } + + public void EnableReasoning(bool enableReasoning) + { + CheckLlamaLib(); + llamaLib.LLM_Enable_Reasoning(llm, enableReasoning); } // LoRA Weight methods @@ -278,7 +284,7 @@ public bool LoraWeight(List loras) throw new ArgumentNullException(nameof(loras)); var lorasJSON = BuildLoraWeightJSON(loras); - return llamaLib.LLM_Lora_Weight(llm, lorasJSON); + return llamaLib.LLM_Lora_Weight(llm, lorasJSON ?? string.Empty); } public bool LoraWeight(params LoraIdScale[] loras) @@ -354,10 +360,10 @@ public void Stop() public void StartServer(string host = "0.0.0.0", int port = -1, string apiKey = "") { CheckLlamaLib(); - if (string.IsNullOrEmpty(host)) - host = "0.0.0.0"; + host = string.IsNullOrEmpty(host) ? "0.0.0.0" : host; + apiKey = apiKey ?? string.Empty; - llamaLib.LLM_Start_Server(llm, host, port, apiKey ?? string.Empty); + llamaLib.LLM_Start_Server(llm, host, port, apiKey); } public void StopServer() @@ -386,7 +392,7 @@ public void SetSSL(string sslCert, string sslKey) throw new ArgumentNullException(nameof(sslKey)); CheckLlamaLib(); - llamaLib.LLM_Set_SSL(llm, sslCert, sslKey); + llamaLib.LLM_Set_SSL(llm, sslCert ?? string.Empty, sslKey ?? string.Empty); } public int EmbeddingSize() diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 11ee4a0e..4f12eb03 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -8,23 +8,23 @@ namespace UndreamAI.LlamaLib { // Data structure for chat messages - public struct ChatMessage + public class ChatMessage { - public string Role { get; set; } - public string Content { get; set; } + public string role { get; set; } + public string content { get; set; } - public ChatMessage(string role, string content) + public ChatMessage(string _role, string _content) { - Role = role; - Content = content; + role = _role; + content = _content; } public JObject ToJson() { return new JObject { - ["role"] = Role, - ["content"] = Content + ["role"] = role, + ["content"] = content }; } @@ -35,6 +35,29 @@ public static ChatMessage FromJson(JObject json) json["content"]?.ToString() ?? string.Empty ); } + + public override bool Equals(object obj) + { + if (obj is not ChatMessage other) + return false; + return role == other.role && content == other.content; + } + + public override int GetHashCode() + { + unchecked + { + int hash = 17; + hash = hash * 23 + (role?.GetHashCode() ?? 0); + hash = hash * 23 + (content?.GetHashCode() ?? 0); + return hash; + } + } + + public override string ToString() + { + return $"{role}: {content}"; + } } // LLMAgent class @@ -52,7 +75,10 @@ public LLMAgent(LLMLocal _llm, string _systemPrompt = "", string _userRole = "us llmBase = _llm; llamaLib = llmBase.llamaLib; - llm = llamaLib.LLMAgent_Construct(llmBase.llm, _systemPrompt ?? "", _userRole ?? "user", _assistantRole ?? "assistant"); + llm = llamaLib.LLMAgent_Construct(llmBase.llm, + _systemPrompt ?? string.Empty, + _userRole ?? "user", + _assistantRole ?? "assistant"); if (llm == IntPtr.Zero) throw new InvalidOperationException("Failed to create LLMAgent"); } @@ -81,7 +107,7 @@ public string UserRole set { CheckLlamaLib(); - llamaLib.LLMAgent_Set_User_Role(llm, value); + llamaLib.LLMAgent_Set_User_Role(llm, value ?? string.Empty); } } @@ -95,7 +121,7 @@ public string AssistantRole set { CheckLlamaLib(); - llamaLib.LLMAgent_Set_Assistant_Role(llm, value); + llamaLib.LLMAgent_Set_Assistant_Role(llm, value ?? string.Empty); } } @@ -109,7 +135,7 @@ public string SystemPrompt set { CheckLlamaLib(); - llamaLib.LLMAgent_Set_System_Prompt(llm, value); + llamaLib.LLMAgent_Set_System_Prompt(llm, value ?? string.Empty); } } @@ -180,24 +206,24 @@ public void ClearHistory() public void AddMessage(string role, string content) { CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, role, content); + llamaLib.LLMAgent_Add_Message(llm, role ?? string.Empty, content ?? string.Empty); } public void AddUserMessage(string content) { CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, UserRole, content); + llamaLib.LLMAgent_Add_Message(llm, UserRole, content ?? string.Empty); } public void AddAssistantMessage(string content) { CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, AssistantRole, content); + llamaLib.LLMAgent_Add_Message(llm, AssistantRole, content ?? string.Empty); } public void AddMessage(ChatMessage message) { - AddMessage(message.Role, message.Content); + AddMessage(message.role, message.content); } public void RemoveLastMessage() @@ -212,7 +238,7 @@ public void SaveHistory(string filepath) throw new ArgumentNullException(nameof(filepath)); CheckLlamaLib(); - llamaLib.LLMAgent_Save_History(llm, filepath); + llamaLib.LLMAgent_Save_History(llm, filepath ?? string.Empty); } public void LoadHistory(string filepath) @@ -221,7 +247,7 @@ public void LoadHistory(string filepath) throw new ArgumentNullException(nameof(filepath)); CheckLlamaLib(); - llamaLib.LLMAgent_Load_History(llm, filepath); + llamaLib.LLMAgent_Load_History(llm, filepath ?? string.Empty); } public int GetHistorySize() @@ -234,7 +260,7 @@ public int GetHistorySize() public string Chat(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false) { CheckLlamaLib(); - IntPtr result = llamaLib.LLMAgent_Chat(llm, userPrompt, addToHistory, callback, returnResponseJson); + IntPtr result = llamaLib.LLMAgent_Chat(llm, userPrompt ?? string.Empty, addToHistory, callback, returnResponseJson); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -260,7 +286,7 @@ public string SaveSlot(string filepath) throw new ArgumentNullException(nameof(filepath)); CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Save_Slot(llm, SlotId, filepath); + IntPtr result = llamaLib.LLM_Save_Slot(llm, SlotId, filepath ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } @@ -270,7 +296,7 @@ public string LoadSlot(string filepath) throw new ArgumentNullException(nameof(filepath)); CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Load_Slot(llm, SlotId, filepath); + IntPtr result = llamaLib.LLM_Load_Slot(llm, SlotId, filepath ?? string.Empty); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } diff --git a/Runtime/LlamaLib/LLMClient.cs b/Runtime/LlamaLib/LLMClient.cs index edc0ab44..7c46b89a 100644 --- a/Runtime/LlamaLib/LLMClient.cs +++ b/Runtime/LlamaLib/LLMClient.cs @@ -40,10 +40,10 @@ private IntPtr CreateClient(LLMProvider provider) private IntPtr CreateRemoteClient(string url, int port, string apiKey = "") { - var llm = llamaLib.LLMClient_Construct_Remote(url, port, apiKey); + var llm = llamaLib.LLMClient_Construct_Remote(url ?? string.Empty, port, apiKey ?? string.Empty); if (llm == IntPtr.Zero) throw new InvalidOperationException($"Failed to create remote LLMClient for {url}:{port}"); return llm; } } -} \ No newline at end of file +} diff --git a/Runtime/LlamaLib/LLMService.cs b/Runtime/LlamaLib/LLMService.cs index 4347023f..3a9eb772 100644 --- a/Runtime/LlamaLib/LLMService.cs +++ b/Runtime/LlamaLib/LLMService.cs @@ -19,9 +19,7 @@ public LLMService(string modelPath, int numSlots = 1, try { llamaLib = new LlamaLib(numGpuLayers > 0); - llm = CreateLLM( - llamaLib, - modelPath, numSlots, numThreads, numGpuLayers, + llm = CreateLLM(llamaLib, modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraPaths); } catch @@ -48,8 +46,8 @@ public static LLMService FromCommand(string paramsString) IntPtr llmInstance = IntPtr.Zero; try { - llamaLibInstance = new LlamaLib(LlamaLib.Has_GPU_Layers(paramsString)); - llmInstance = llamaLibInstance.LLMService_From_Command(paramsString); + llamaLibInstance = new LlamaLib(LlamaLib.Has_GPU_Layers(paramsString ?? string.Empty)); + llmInstance = llamaLibInstance.LLMService_From_Command(paramsString ?? string.Empty); } catch { @@ -59,9 +57,7 @@ public static LLMService FromCommand(string paramsString) return new LLMService(llamaLibInstance, llmInstance); } - public static IntPtr CreateLLM( - LlamaLib llamaLib, - string modelPath, int numSlots, int numThreads, + public static IntPtr CreateLLM(LlamaLib llamaLib, string modelPath, int numSlots, int numThreads, int numGpuLayers, bool flashAttention, int contextSize, int batchSize, bool embeddingOnly, string[] loraPaths) { @@ -81,7 +77,7 @@ public static IntPtr CreateLLM( if (string.IsNullOrEmpty(loraPaths[i])) throw new ArgumentException($"Lora path at index {i} is null or empty"); - IntPtr stringPtr = Marshal.StringToHGlobalAnsi(loraPaths[i]); + IntPtr stringPtr = Marshal.StringToHGlobalAnsi(loraPaths[i] ?? string.Empty); Marshal.WriteIntPtr(loraPathsPtr, i * IntPtr.Size, stringPtr); } } @@ -102,7 +98,7 @@ public static IntPtr CreateLLM( try { var llm = llamaLib.LLMService_Construct( - modelPath, numSlots, numThreads, numGpuLayers, + modelPath ?? string.Empty, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraPathCount, loraPathsPtr); diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index fbec7625..cd340c4b 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -50,6 +50,10 @@ public LlamaLib(bool gpu = false) public static extern void LLM_Logging_Stop_Static(); public static void LoggingStop() => LLM_Logging_Stop_Static(); + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Enable_Reasoning")] + public static extern void LLM_Enable_Reasoning_Static(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); + public void LLM_Enable_Reasoning(IntPtr llm, bool enable_reasoning) => LLM_Enable_Reasoning_Static(llm, enable_reasoning); + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Template")] public static extern IntPtr LLM_Get_Template_Static(IntPtr llm); public IntPtr LLM_Get_Template(IntPtr llm) => LLM_Get_Template_Static(llm); @@ -71,13 +75,13 @@ public LlamaLib(bool gpu = false) public IntPtr LLM_Embeddings(IntPtr llm, string query) => LlamaLib.LLM_Embeddings_Static(llm, query); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Completion")] - public static extern IntPtr LLM_Completion_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false); + public static extern IntPtr LLM_Completion_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, [MarshalAs(UnmanagedType.I1)] bool return_response_json = false); public IntPtr LLM_Completion(IntPtr llm, string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false) => LlamaLib.LLM_Completion_Static(llm, query, callback, id_slot, return_response_json); // LLMLocal functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Template")] - public static extern IntPtr LLM_Set_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); - public IntPtr LLM_Set_Template(IntPtr llm, string template) => LLM_Set_Template_Static(llm, template); + public static extern void LLM_Set_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); + public void LLM_Set_Template(IntPtr llm, string template) => LLM_Set_Template_Static(llm, template); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Save_Slot")] public static extern IntPtr LLM_Save_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); @@ -421,6 +425,7 @@ private void LoadFunctionPointers() LLM_Logging_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Stop"); LLM_Get_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Template"); LLM_Set_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Template"); + LLM_Enable_Reasoning = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Enable_Reasoning"); LLM_Apply_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Apply_Template"); LLM_Tokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); LLM_Detokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Detokenize"); @@ -493,7 +498,10 @@ private void LoadFunctionPointers() public delegate IntPtr LLM_Get_Template_Delegate(IntPtr llm); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Set_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); + public delegate void LLM_Set_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Enable_Reasoning_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLM_Apply_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); @@ -508,7 +516,7 @@ private void LoadFunctionPointers() public delegate IntPtr LLM_Embeddings_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Completion_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false); + public delegate IntPtr LLM_Completion_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, [MarshalAs(UnmanagedType.I1)] bool return_response_json = false); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLM_Save_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); @@ -532,6 +540,7 @@ private void LoadFunctionPointers() public delegate void LLM_Start_Delegate(IntPtr llm); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + [return : MarshalAs(UnmanagedType.I1)] public delegate bool LLM_Started_Delegate(IntPtr llm); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] @@ -671,6 +680,7 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLM_Logging_Stop_Delegate LLM_Logging_Stop; public LLM_Get_Template_Delegate LLM_Get_Template; public LLM_Set_Template_Delegate LLM_Set_Template; + public LLM_Enable_Reasoning_Delegate LLM_Enable_Reasoning; public LLM_Apply_Template_Delegate LLM_Apply_Template; public LLM_Tokenize_Delegate LLM_Tokenize; public LLM_Detokenize_Delegate LLM_Detokenize; diff --git a/Runtime/LlamaLib/LlamaLib.csproj b/Runtime/LlamaLib/LlamaLib.csproj new file mode 100644 index 00000000..7fdd2d64 --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.csproj @@ -0,0 +1,67 @@ + + + net6.0;net8.0;netstandard2.0 + latest + true + AnyCPU;x64;ARM64 + true + snupkg + + + LlamaLib + 2.0.0 + Antonis Maropoulos + UndreamAI + LlamaLib - Cross-platform library for local LLMs + https://undream.ai + MIT + README.md + https://github.com/undreamai/LlamaLib + git + + + + + AnyCPU + + + $(DefineConstants);IOS + $(DefineConstants);VISIONOS + + + + $(DefineConstants);ANDROID;ANDROID_ARM64 + + + + $(DefineConstants);ANDROID;ANDROID_X64 + + + + $(DefineConstants);OSX;OSX_ARM64 + + + + $(DefineConstants);OSX;OSX_X64 + + + + LINUX + WINDOWS + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Runtime/LlamaLib/LlamaLib.csproj.meta b/Runtime/LlamaLib/LlamaLib.csproj.meta new file mode 100644 index 00000000..a98bc22d --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 12607213d34f6819d9781187e66089c4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/LlamaLib.targets b/Runtime/LlamaLib/LlamaLib.targets new file mode 100644 index 00000000..c1c3be80 --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.targets @@ -0,0 +1,75 @@ + + + 2.0.0 + $(NuGetPackageRoot)LlamaLib + $(OutputPath)runtimes\$(RuntimeIdentifier)\native + LlamaLib-v$(LlamaLibVersion) + https://github.com/undreamai/LlamaLib/releases/download/v$(LlamaLibVersion)/$(LlamaLibZipName).zip + $(LlamaLibCacheDir)\$(LlamaLibZipName) + $(LlamaLibExtractDir).zip + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + PreserveNewest + runtimes\$(RuntimeIdentifier)\%(RecursiveDir)%(Filename)%(Extension) + + + + + + + + + + + + + + + + + + PreserveNewest + PreserveNewest + runtimes\%(RecursiveDir)%(Filename)%(Extension) + + + + + + + + \ No newline at end of file diff --git a/Runtime/LlamaLib/LlamaLib.targets.meta b/Runtime/LlamaLib/LlamaLib.targets.meta new file mode 100644 index 00000000..22103294 --- /dev/null +++ b/Runtime/LlamaLib/LlamaLib.targets.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d7178543442603e19c79d712f3aefb9 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LlamaLib/README.md b/Runtime/LlamaLib/README.md new file mode 100644 index 00000000..45b983be --- /dev/null +++ b/Runtime/LlamaLib/README.md @@ -0,0 +1 @@ +hi diff --git a/Runtime/LlamaLib/README.md.meta b/Runtime/LlamaLib/README.md.meta new file mode 100644 index 00000000..286eff47 --- /dev/null +++ b/Runtime/LlamaLib/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8de0ab6e07a0c443c91c9a8e8ce06268 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/RAG/Chunking.cs b/Runtime/RAG/Chunking.cs index 094b4b2b..4040e663 100644 --- a/Runtime/RAG/Chunking.cs +++ b/Runtime/RAG/Chunking.cs @@ -37,7 +37,7 @@ public void ReturnChunks(bool returnChunks) /// /// phrase /// List of start/end indices of the split chunks - public abstract List<(int, int)> Split(string input); + public abstract Task> Split(string input); /// /// Retrieves the phrase with the specific id @@ -60,15 +60,15 @@ public override string Get(int key) /// input phrase /// data group to add it to /// phrase id - public override int Add(string inputString, string group = "") + public override async Task Add(string inputString, string group = "") { int key = nextKey++; // sentence -> phrase List sentenceIds = new List(); - foreach ((int startIndex, int endIndex) in Split(inputString)) + foreach ((int startIndex, int endIndex) in await Split(inputString)) { string sentenceText = inputString.Substring(startIndex, endIndex - startIndex + 1); - int sentenceId = search.Add(sentenceText, group); + int sentenceId = await search.Add(sentenceText, group); sentenceIds.Add(sentenceId); sentenceToPhrase[sentenceId] = key; @@ -166,9 +166,9 @@ public override int Count(string group) /// search query /// data group to search in /// incremental search key - public override int IncrementalSearch(string queryString, string group = "") + public override async Task IncrementalSearch(string queryString, string group = "") { - return search.IncrementalSearch(queryString, group); + return await search.IncrementalSearch(queryString, group); } /// diff --git a/Runtime/RAG/RAG.cs b/Runtime/RAG/RAG.cs index d83e57ca..a1b26183 100644 --- a/Runtime/RAG/RAG.cs +++ b/Runtime/RAG/RAG.cs @@ -117,13 +117,13 @@ public virtual void OnValidate() #endif public override string Get(int key) { return GetSearcher().Get(key); } - public override int Add(string inputString, string group = "") { return GetSearcher().Add(inputString, group); } + public override async Task Add(string inputString, string group = "") { return await GetSearcher().Add(inputString, group); } public override int Remove(string inputString, string group = "") { return GetSearcher().Remove(inputString, group); } public override void Remove(int key) { GetSearcher().Remove(key); } public override int Count() { return GetSearcher().Count(); } public override int Count(string group) { return GetSearcher().Count(group); } public override void Clear() { GetSearcher().Clear(); } - public override int IncrementalSearch(string queryString, string group = "") { return GetSearcher().IncrementalSearch(queryString, group);} + public override async Task IncrementalSearch(string queryString, string group = "") { return await GetSearcher().IncrementalSearch(queryString, group);} public override (string[], float[], bool) IncrementalFetch(int fetchKey, int k) { return GetSearcher().IncrementalFetch(fetchKey, k);} public override (int[], float[], bool) IncrementalFetchKeys(int fetchKey, int k) { return GetSearcher().IncrementalFetchKeys(fetchKey, k);} public override void IncrementalSearchComplete(int fetchKey) { GetSearcher().IncrementalSearchComplete(fetchKey);} diff --git a/Runtime/RAG/Search.cs b/Runtime/RAG/Search.cs index 84e4938f..249beafb 100644 --- a/Runtime/RAG/Search.cs +++ b/Runtime/RAG/Search.cs @@ -33,7 +33,7 @@ public abstract class Searchable : MonoBehaviour /// input phrase /// data group to add it to /// phrase id - public abstract int Add(string inputString, string group = ""); + public abstract Task Add(string inputString, string group = ""); /// /// Removes a phrase from the search. @@ -73,7 +73,7 @@ public abstract class Searchable : MonoBehaviour /// search query /// data group to search in /// incremental search key - public abstract int IncrementalSearch(string queryString, string group = ""); + public abstract Task IncrementalSearch(string queryString, string group = ""); /// /// Retrieves the most similar search results in batches (incremental search). @@ -112,9 +112,9 @@ public abstract class Searchable : MonoBehaviour /// `bool` indicating if the search is exhausted. /// /// - public (string[], float[]) Search(string queryString, int k, string group = "") + public async Task<(string[], float[])> Search(string queryString, int k, string group = "") { - int fetchKey = IncrementalSearch(queryString, group); + int fetchKey = await IncrementalSearch(queryString, group); (string[] phrases, float[] distances, bool completed) = IncrementalFetch(fetchKey, k); if (!completed) IncrementalSearchComplete(fetchKey); return (phrases, distances); @@ -290,11 +290,11 @@ public void SetLLM(LLM llm) /// Array of distances for each result (`float[]`). /// /// - public (string[], float[]) SearchFromList(string query, string[] searchList) + public async Task<(string[], float[])> SearchFromList(string query, string[] searchList) { - float[] embedding = Encode(query); + float[] embedding = await Encode(query); float[][] embeddingsList = new float[searchList.Length][]; - for (int i = 0; i < searchList.Length; i++) embeddingsList[i] = Encode(searchList[i]); + for (int i = 0; i < searchList.Length; i++) embeddingsList[i] = await Encode(searchList[i]); float[] unsortedDistances = InverseDotProduct(embedding, embeddingsList); List<(string, float)> sortedLists = searchList.Zip(unsortedDistances, (first, second) => (first, second)) @@ -339,19 +339,19 @@ public static float[] InverseDotProduct(float[] vector1, float[][] vector2) return results; } - public virtual float[] Encode(string inputString) + public virtual async Task Encode(string inputString) { - return llmEmbedder.Embeddings(inputString).ToArray(); + return (await llmEmbedder.Embeddings(inputString)).ToArray(); } - public virtual List Tokenize(string query, Callback> callback = null) + public virtual async Task> Tokenize(string query, Callback> callback = null) { - return llmEmbedder.Tokenize(query, callback); + return await llmEmbedder.Tokenize(query, callback); } - public virtual string Detokenize(List tokens, Callback callback = null) + public async Task Detokenize(List tokens, Callback callback = null) { - return llmEmbedder.Detokenize(tokens, callback); + return await llmEmbedder.Detokenize(tokens, callback); } public override string Get(int key) @@ -360,10 +360,10 @@ public override string Get(int key) return null; } - public override int Add(string inputString, string group = "") + public override async Task Add(string inputString, string group = "") { int key = nextKey++; - AddInternal(key, Encode(inputString)); + AddInternal(key, await Encode(inputString)); data[key] = inputString; if (!dataSplits.ContainsKey(group)) dataSplits[group] = new List(){key}; @@ -421,9 +421,9 @@ public override int Count(string group) return dataSplit.Count; } - public override int IncrementalSearch(string queryString, string group = "") + public override async Task IncrementalSearch(string queryString, string group = "") { - return IncrementalSearch(Encode(queryString), group); + return IncrementalSearch(await Encode(queryString), group); } public override void Save(ZipArchive archive) diff --git a/Runtime/RAG/SentenceSplitter.cs b/Runtime/RAG/SentenceSplitter.cs index 3d46f938..809300f0 100644 --- a/Runtime/RAG/SentenceSplitter.cs +++ b/Runtime/RAG/SentenceSplitter.cs @@ -25,28 +25,30 @@ public class SentenceSplitter : Chunking /// /// phrase /// List of start/end indices of the split chunks - public override List<(int, int)> Split(string input) + public override async Task> Split(string input) { List<(int, int)> indices = new List<(int, int)>(); - int startIndex = 0; - bool seenChar = false; - for (int i = 0; i < input.Length; i++) - { - bool isDelimiter = delimiters.Contains(input[i]); - if (isDelimiter) + await Task.Run(() => { + int startIndex = 0; + bool seenChar = false; + for (int i = 0; i < input.Length; i++) { - while ((i < input.Length - 1) && (delimiters.Contains(input[i + 1]) || char.IsWhiteSpace(input[i + 1]))) i++; + bool isDelimiter = delimiters.Contains(input[i]); + if (isDelimiter) + { + while ((i < input.Length - 1) && (delimiters.Contains(input[i + 1]) || char.IsWhiteSpace(input[i + 1]))) i++; + } + else + { + if (!seenChar) seenChar = !char.IsWhiteSpace(input[i]); + } + if ((i == input.Length - 1) || (isDelimiter && seenChar)) + { + indices.Add((startIndex, i)); + startIndex = i + 1; + } } - else - { - if (!seenChar) seenChar = !char.IsWhiteSpace(input[i]); - } - if ((i == input.Length - 1) || (isDelimiter && seenChar)) - { - indices.Add((startIndex, i)); - startIndex = i + 1; - } - } + }); return indices; } } diff --git a/Runtime/RAG/TokenSplitter.cs b/Runtime/RAG/TokenSplitter.cs index 7abf563b..cb57313b 100644 --- a/Runtime/RAG/TokenSplitter.cs +++ b/Runtime/RAG/TokenSplitter.cs @@ -47,17 +47,17 @@ protected int DetermineEndIndex(string input, string detokenised, int startIndex /// /// phrase /// List of start/end indices of the split chunks - public override List<(int, int)> Split(string input) + public override async Task> Split(string input) { List<(int, int)> indices = new List<(int, int)>(); - List tokens = search.Tokenize(input); + List tokens = await search.Tokenize(input); if (tokens.Count == 0) return indices; int startIndex = 0; for (int i = 0; i < tokens.Count; i += numTokens) { int batchTokens = Math.Min(tokens.Count, i + numTokens) - i; - string detokenised = search.Detokenize(tokens.GetRange(i, batchTokens)); + string detokenised = await search.Detokenize(tokens.GetRange(i, batchTokens)); int endIndex = DetermineEndIndex(input, detokenised, startIndex); indices.Add((startIndex, endIndex)); startIndex = endIndex + 1; diff --git a/Runtime/RAG/WordSplitter.cs b/Runtime/RAG/WordSplitter.cs index 69fbb6ca..251bdff5 100644 --- a/Runtime/RAG/WordSplitter.cs +++ b/Runtime/RAG/WordSplitter.cs @@ -23,7 +23,7 @@ public class WordSplitter : Chunking /// /// phrase /// List of start/end indices of the split chunks - public override List<(int, int)> Split(string input) + public override async Task> Split(string input) { bool IsBoundary(char c) { @@ -31,25 +31,27 @@ bool IsBoundary(char c) } List<(int, int)> indices = new List<(int, int)>(); - List<(int, int)> wordIndices = new List<(int, int)>(); - int startIndex = 0; - int endIndex; - for (int i = 0; i < input.Length; i++) - { - if (i == input.Length - 1 || IsBoundary(input[i])) + await Task.Run(() => { + List<(int, int)> wordIndices = new List<(int, int)>(); + int startIndex = 0; + int endIndex; + for (int i = 0; i < input.Length; i++) { - while (i < input.Length - 1 && IsBoundary(input[i + 1])) i++; - endIndex = i; - wordIndices.Add((startIndex, endIndex)); - startIndex = i + 1; + if (i == input.Length - 1 || IsBoundary(input[i])) + { + while (i < input.Length - 1 && IsBoundary(input[i + 1])) i++; + endIndex = i; + wordIndices.Add((startIndex, endIndex)); + startIndex = i + 1; + } } - } - for (int i = 0; i < wordIndices.Count; i += numWords) - { - int iTo = Math.Min(wordIndices.Count - 1, i + numWords - 1); - indices.Add((wordIndices[i].Item1, wordIndices[iTo].Item2)); - } + for (int i = 0; i < wordIndices.Count; i += numWords) + { + int iTo = Math.Min(wordIndices.Count - 1, i + numWords - 1); + indices.Add((wordIndices[i].Item1, wordIndices[iTo].Item2)); + } + }); return indices; } } diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 90b70423..7895bf1e 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -1,573 +1,613 @@ -// using NUnit.Framework; -// using LLMUnity; -// using UnityEngine; -// using System.Threading.Tasks; -// using System.Collections.Generic; -// using System; -// using System.Collections; -// using System.IO; -// using System.Linq; -// using System.Threading; -// using UnityEngine.TestTools; - -// namespace LLMUnityTests -// { -// public class TestLLMLoraAssignment -// { -// [Test] -// public void TestLoras() -// { -// GameObject gameObject = new GameObject(); -// gameObject.SetActive(false); -// LLM llm = gameObject.AddComponent(); - -// string lora1 = LLMUnitySetup.GetFullPath("lala"); -// string lora2Rel = "test/lala"; -// string lora2 = LLMUnitySetup.GetAssetPath(lora2Rel); -// LLMUnitySetup.CreateEmptyFile(lora1); -// Directory.CreateDirectory(Path.GetDirectoryName(lora2)); -// LLMUnitySetup.CreateEmptyFile(lora2); - -// llm.AddLora(lora1); -// llm.AddLora(lora2); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "1,1"); - -// llm.RemoveLoras(); -// Assert.AreEqual(llm.lora, ""); -// Assert.AreEqual(llm.loraWeights, ""); - -// llm.AddLora(lora1, 0.8f); -// llm.AddLora(lora2Rel, 0.9f); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "0.8,0.9"); - -// llm.SetLoraWeight(lora2Rel, 0.7f); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "0.8,0.7"); - -// llm.RemoveLora(lora2Rel); -// Assert.AreEqual(llm.lora, lora1); -// Assert.AreEqual(llm.loraWeights, "0.8"); - -// llm.AddLora(lora2Rel); -// llm.SetLoraWeight(lora2Rel, 0.5f); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "0.8,0.5"); - -// llm.SetLoraWeight(lora2, 0.1f); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "0.8,0.1"); - -// Dictionary loraToWeight = new Dictionary(); -// loraToWeight[lora1] = 0; -// loraToWeight[lora2] = 0.2f; -// llm.SetLoraWeights(loraToWeight); -// Assert.AreEqual(llm.lora, lora1 + "," + lora2); -// Assert.AreEqual(llm.loraWeights, "0,0.2"); - -// File.Delete(lora1); -// File.Delete(lora2); -// } -// } - -// public class TestLLM -// { -// protected string modelNameLLManager; - -// protected GameObject gameObject; -// protected LLM llm; -// protected LLMAgent llmAgent; -// protected Exception error = null; -// protected string prompt; -// protected string query; -// protected string reply1; -// protected string reply2; -// protected int tokens1; -// protected int tokens2; -// protected int port; - -// static readonly object _lock = new object(); - -// public TestLLM() -// { -// Task task = Init(); -// task.Wait(); -// } - -// public virtual async Task Init() -// { -// Monitor.Enter(_lock); -// port = new System.Random().Next(10000, 20000); -// SetParameters(); -// await DownloadModels(); -// gameObject = new GameObject(); -// gameObject.SetActive(false); -// llm = CreateLLM(); -// llmAgent = CreateLLMCharacter(); -// gameObject.SetActive(true); -// } - -// public virtual void SetParameters() -// { -// prompt = "You are a scientific assistant and provide short and concise info on the user questions"; -// query = "Can you tell me some fun fact about ants in one sentence?"; -// reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; -// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; -// tokens1 = 20; -// tokens2 = 9; -// } - -// protected virtual string GetModelUrl() -// { -// return "https://huggingface.co/unsloth/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q4_K_M.gguf"; -// } - -// public virtual async Task DownloadModels() -// { -// modelNameLLManager = await LLMManager.DownloadModel(GetModelUrl()); -// } - -// [Test] -// public void TestGetLLMManagerAssetRuntime() -// { -// string path = ""; -// string managerPath = LLM.GetLLMManagerAssetRuntime(path); -// Assert.AreEqual(managerPath, path); - -// string filename = "lala"; -// path = LLMUnitySetup.GetFullPath(filename); -// LLMUnitySetup.CreateEmptyFile(path); -// managerPath = LLM.GetLLMManagerAssetRuntime(path); -// Assert.AreEqual(managerPath, path); -// File.Delete(path); - -// path = modelNameLLManager; -// managerPath = LLM.GetLLMManagerAssetRuntime(path); -// Assert.AreEqual(managerPath, LLMManager.GetAssetPath(path)); - -// path = LLMUnitySetup.GetAssetPath("lala"); -// LLMUnitySetup.CreateEmptyFile(path); -// managerPath = LLM.GetLLMManagerAssetRuntime(path); -// Assert.AreEqual(managerPath, path); -// File.Delete(path); -// } - -// [Test] -// public void TestGetLLMManagerAssetEditor() -// { -// string path = ""; -// string managerPath = LLM.GetLLMManagerAssetEditor(path); -// Assert.AreEqual(managerPath, path); - -// path = modelNameLLManager; -// managerPath = LLM.GetLLMManagerAssetEditor(path); -// Assert.AreEqual(managerPath, modelNameLLManager); - -// path = LLMManager.Get(modelNameLLManager).path; -// managerPath = LLM.GetLLMManagerAssetEditor(path); -// Assert.AreEqual(managerPath, modelNameLLManager); - -// string filename = "lala"; -// path = LLMUnitySetup.GetAssetPath(filename); -// LLMUnitySetup.CreateEmptyFile(path); -// managerPath = LLM.GetLLMManagerAssetEditor(filename); -// Assert.AreEqual(managerPath, filename); -// managerPath = LLM.GetLLMManagerAssetEditor(path); -// Assert.AreEqual(managerPath, filename); - -// path = LLMUnitySetup.GetFullPath(filename); -// LLMUnitySetup.CreateEmptyFile(path); -// managerPath = LLM.GetLLMManagerAssetEditor(path); -// Assert.AreEqual(managerPath, path); -// File.Delete(path); -// } - -// public virtual LLM CreateLLM() -// { -// LLM llm = gameObject.AddComponent(); -// llm.SetModel(modelNameLLManager); -// llm.parallelPrompts = 1; -// llm.port = port; -// return llm; -// } - -// public virtual LLMAgent CreateLLMCharacter() -// { -// LLMAgent llmAgent = gameObject.AddComponent(); -// llmAgent.llm = llm; -// llmAgent.userRole = "User"; -// llmAgent.assistantRole = "Assistant"; -// llmAgent.prompt = prompt; -// llmAgent.temperature = 0; -// llmAgent.seed = 0; -// llmAgent.stream = false; -// llmAgent.numPredict = 50; -// llmAgent.port = port; -// return llmAgent; -// } - -// [UnityTest] -// public IEnumerator RunTests() -// { -// Task task = RunTestsTask(); -// while (!task.IsCompleted) yield return null; -// if (error != null) -// { -// Debug.LogError(error.ToString()); -// throw (error); -// } -// OnDestroy(); -// } - -// public async Task RunTestsTask() -// { -// error = null; -// try -// { -// await Tests(); -// llm.OnDestroy(); -// } -// catch (Exception e) -// { -// error = e; -// } -// } - -// public virtual async Task Tests() -// { -// await llmAgent.Tokenize("I", TestTokens); -// await llmAgent.Warmup(); -// TestArchitecture(); -// TestInitParameters(tokens1, 1); -// TestWarmup(); -// await llmAgent.Chat(query, (string reply) => TestChat(reply, reply1)); -// TestPostChat(3); -// llmAgent.SetPrompt(llmAgent.prompt); -// llmAgent.assistantRole = "False response"; -// await llmAgent.Chat(query, (string reply) => TestChat(reply, reply2)); -// TestPostChat(3); -// await llmAgent.Chat("bye!"); -// TestPostChat(5); -// prompt = "How are you?"; -// llmAgent.SetPrompt(prompt); -// await llmAgent.Chat("hi"); -// TestInitParameters(tokens2, 3); -// List embeddings = await llmAgent.Embeddings("hi how are you?"); -// TestEmbeddings(embeddings); -// } - -// public virtual void TestArchitecture() -// { -// Assert.That(llm.architecture.Contains("avx")); -// } - -// public void TestInitParameters(int nkeep, int chats) -// { -// Assert.AreEqual(llmAgent.nKeep, nkeep); -// Assert.That(ChatTemplate.GetTemplate(llm.chatTemplate).GetStop(llmAgent.userRole, llmAgent.assistantRole).Length > 0); -// Assert.AreEqual(llmAgent.chat.Count, chats); -// } - -// public void TestTokens(List tokens) -// { -// Assert.AreEqual(tokens, new List { 40 }); -// } - -// public void TestWarmup() -// { -// Assert.That(llmAgent.chat.Count == 1); -// } - -// public void TestChat(string reply, string replyGT) -// { -// Debug.Log(reply.Trim()); -// var words1 = reply.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); -// var words2 = replyGT.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); -// var commonWords = words1.Intersect(words2).Count(); -// var totalWords = Math.Max(words1.Length, words2.Length); - -// Assert.That((double)commonWords / totalWords >= 0.7); -// } - -// public void TestPostChat(int num) -// { -// Assert.That(llmAgent.chat.Count == num); -// } - -// public void TestEmbeddings(List embeddings) -// { -// Assert.That(embeddings.Count == 1024); -// } - -// public virtual void OnDestroy() -// { -// if (Monitor.IsEntered(_lock)) -// { -// Monitor.Exit(_lock); -// } -// } -// } - -// public class TestLLM_LLMManager_Load : TestLLM -// { -// public override LLM CreateLLM() -// { -// LLM llm = gameObject.AddComponent(); -// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; -// string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); -// filename = LLMManager.LoadModel(sourcePath); -// llm.SetModel(filename); -// llm.parallelPrompts = 1; -// return llm; -// } -// } - -// public class TestLLM_StreamingAssets_Load : TestLLM -// { -// string loadPath; - -// public override LLM CreateLLM() -// { -// LLM llm = gameObject.AddComponent(); -// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; -// string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); -// loadPath = LLMUnitySetup.GetAssetPath(filename); -// if (!File.Exists(loadPath)) File.Copy(sourcePath, loadPath); -// llm.SetModel(loadPath); -// llm.parallelPrompts = 1; -// return llm; -// } - -// public override void OnDestroy() -// { -// base.OnDestroy(); -// if (!File.Exists(loadPath)) File.Delete(loadPath); -// } -// } - -// public class TestLLM_SetModel_Warning : TestLLM -// { -// public override LLM CreateLLM() -// { -// LLM llm = gameObject.AddComponent(); -// string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; -// string loadPath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); -// llm.SetModel(loadPath); -// llm.parallelPrompts = 1; -// return llm; -// } -// } - -// public class TestLLM_Lora : TestLLM -// { -// protected string loraUrl = "https://huggingface.co/phh/Qwen3-0.6B-TLDR-Lora/resolve/main/Qwen3-0.6B-tldr-lora-f16.gguf"; -// protected string loraNameLLManager; -// protected float loraWeight; - -// public override async Task DownloadModels() -// { -// await base.DownloadModels(); -// loraNameLLManager = await LLMManager.DownloadLora(loraUrl); -// } - -// public override LLM CreateLLM() -// { -// LLM llm = base.CreateLLM(); -// llm.AddLora(loraNameLLManager, loraWeight); -// return llm; -// } - -// public override void SetParameters() -// { -// prompt = ""; -// if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) -// { -// reply1 = "I am sorry, but I cannot assist with this request. Please try again or ask a different question."; -// } -// else -// { -// reply1 = "I am sorry, but I cannot respond to your message as it is empty.Could you please provide a meaningful query or content ?"; -// } -// reply2 = "False response."; -// tokens1 = 5; -// tokens2 = 9; -// loraWeight = 0.9f; -// } - -// public override async Task Tests() -// { -// await base.Tests(); -// TestModelPaths(); -// TestLoraWeight(); -// loraWeight = 0.6f; -// llm.SetLoraWeight(loraNameLLManager, loraWeight); -// TestLoraWeight(); -// } - -// public void TestModelPaths() -// { -// Assert.AreEqual(llm.model, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(GetModelUrl()).Split("?")[0]).Replace('\\', '/')); -// Assert.AreEqual(llm.lora, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(loraUrl).Split("?")[0]).Replace('\\', '/')); -// } - -// public void TestLoraWeight() -// { -// List loras = llm.ListLoras(); -// Assert.AreEqual(loras[0].Scale, loraWeight); -// } -// } - -// public class TestLLM_Remote : TestLLM -// { -// public override LLM CreateLLM() -// { -// LLM llm = base.CreateLLM(); -// llm.remote = true; -// return llm; -// } - -// public override LLMAgent CreateLLMCharacter() -// { -// LLMAgent llmAgent = base.CreateLLMCharacter(); -// llmAgent.remote = true; -// return llmAgent; -// } -// } - -// public class TestLLM_Lora_Remote : TestLLM_Lora -// { -// public override LLM CreateLLM() -// { -// LLM llm = base.CreateLLM(); -// llm.remote = true; -// return llm; -// } - -// public override LLMAgent CreateLLMCharacter() -// { -// LLMAgent llmAgent = base.CreateLLMCharacter(); -// llmAgent.remote = true; -// return llmAgent; -// } -// } - -// public class TestLLM_Double : TestLLM -// { -// LLM llm1; -// LLMAgent llmCharacter1; - -// public override async Task Init() -// { -// SetParameters(); -// await DownloadModels(); -// gameObject = new GameObject(); -// gameObject.SetActive(false); -// llm = CreateLLM(); -// llmAgent = CreateLLMCharacter(); -// llm1 = CreateLLM(); -// llmCharacter1 = CreateLLMCharacter(); -// gameObject.SetActive(true); -// } -// } - -// public class TestLLMCharacter_Save : TestLLM -// { -// string saveName = "TestLLMCharacter_Save"; - -// public override LLMAgent CreateLLMCharacter() -// { -// LLMAgent llmAgent = base.CreateLLMCharacter(); -// llmAgent.save = saveName; -// llmAgent.saveCache = true; -// foreach (string filename in new string[] -// { -// llmAgent.GetJsonSavePath(saveName), -// llmAgent.GetCacheSavePath(saveName) -// }) if (File.Exists(filename)) File.Delete(filename); -// return llmAgent; -// } - -// public override async Task Tests() -// { -// await base.Tests(); -// TestSave(); -// } - -// public void TestSave() -// { -// string jsonPath = llmAgent.GetJsonSavePath(saveName); -// string cachePath = llmAgent.GetCacheSavePath(saveName); -// Assert.That(File.Exists(jsonPath)); -// Assert.That(File.Exists(cachePath)); -// string json = File.ReadAllText(jsonPath); -// File.Delete(jsonPath); -// File.Delete(cachePath); - -// List chatHistory = JsonUtility.FromJson(json).chat; -// Assert.AreEqual(chatHistory.Count, 2); -// Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); -// Assert.AreEqual(chatHistory[0].content, "hi"); -// Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); - -// Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count + 1); -// for (int i = 0; i < chatHistory.Count; i++) -// { -// Assert.AreEqual(chatHistory[i].role, llmAgent.chat[i + 1].role); -// Assert.AreEqual(chatHistory[i].content, llmAgent.chat[i + 1].content); -// } -// } -// } - -// public class TestLLM_CUDA : TestLLM -// { -// public override LLM CreateLLM() -// { -// LLM llm = base.CreateLLM(); -// llm.numGPULayers = 10; -// return llm; -// } - -// public override void SetParameters() -// { -// base.SetParameters(); -// reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; -// if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) -// { -// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; -// } -// } - -// public override void TestArchitecture() -// { -// Assert.That(llm.architecture.Contains("cuda")); -// } -// } - -// public class TestLLM_CUDA_full : TestLLM_CUDA -// { -// public override void TestArchitecture() -// { -// Assert.That(llm.architecture.Contains("cuda") && llm.architecture.Contains("full")); -// } -// } - -// public class TestLLM_CUDA_full_attention : TestLLM_CUDA_full -// { -// public override LLM CreateLLM() -// { -// LLM llm = base.CreateLLM(); -// llm.flashAttention = true; -// return llm; -// } - -// public override void SetParameters() -// { -// base.SetParameters(); -// if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) -// { -// reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; -// } -// } -// } -// } +using NUnit.Framework; +using LLMUnity; +using UnityEngine; +using System.Threading.Tasks; +using System.Collections.Generic; +using System; +using System.Collections; +using System.IO; +using System.Linq; +using System.Threading; +using UnityEngine.TestTools; +using UnityEditor; +using UnityEditor.TestTools.TestRunner.Api; +using ChatMessage = UndreamAI.LlamaLib.ChatMessage; + +namespace LLMUnityTests +{ + [Serializable] + public class ChatListWrapper + { + public List chat; + } + + [InitializeOnLoad] + public static class TestRunListener + { + static TestRunListener() + { + var api = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(new TestRunCallbacks()); + } + } + + public class TestRunCallbacks : ICallbacks + { + public void RunStarted(ITestAdaptor testsToRun) {} + + public void RunFinished(ITestResultAdaptor result) + { + LLMUnitySetup.CUBLAS = false; + } + + public void TestStarted(ITestAdaptor test) + { + LLMUnitySetup.CUBLAS = test.FullName.Contains("cublas"); + } + + public void TestFinished(ITestResultAdaptor result) + { + LLMUnitySetup.CUBLAS = false; + } + } + + public class TestLLMLoraAssignment + { + [Test] + public void TestLoras() + { + GameObject gameObject = new GameObject(); + gameObject.SetActive(false); + LLM llm = gameObject.AddComponent(); + + string lora1 = LLMUnitySetup.GetFullPath("lala"); + string lora2Rel = "test/lala"; + string lora2 = LLMUnitySetup.GetAssetPath(lora2Rel); + LLMUnitySetup.CreateEmptyFile(lora1); + Directory.CreateDirectory(Path.GetDirectoryName(lora2)); + LLMUnitySetup.CreateEmptyFile(lora2); + + llm.AddLora(lora1); + llm.AddLora(lora2); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "1,1"); + + llm.RemoveLoras(); + Assert.AreEqual(llm.lora, ""); + Assert.AreEqual(llm.loraWeights, ""); + + llm.AddLora(lora1, 0.8f); + llm.AddLora(lora2Rel, 0.9f); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "0.8,0.9"); + + llm.SetLoraWeight(lora2Rel, 0.7f); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "0.8,0.7"); + + llm.RemoveLora(lora2Rel); + Assert.AreEqual(llm.lora, lora1); + Assert.AreEqual(llm.loraWeights, "0.8"); + + llm.AddLora(lora2Rel); + llm.SetLoraWeight(lora2Rel, 0.5f); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "0.8,0.5"); + + llm.SetLoraWeight(lora2, 0.1f); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "0.8,0.1"); + + Dictionary loraToWeight = new Dictionary(); + loraToWeight[lora1] = 0; + loraToWeight[lora2] = 0.2f; + llm.SetLoraWeights(loraToWeight); + Assert.AreEqual(llm.lora, lora1 + "," + lora2); + Assert.AreEqual(llm.loraWeights, "0,0.2"); + + File.Delete(lora1); + File.Delete(lora2); + } + } + + public class TestLLM + { + protected string modelNameLLManager; + + protected GameObject gameObject; + protected LLM llm; + protected LLMCharacter llmCharacter; + protected Exception error = null; + protected string prompt; + protected string prompt2; + protected string query; + protected string reply1; + protected string reply2; + protected int tokens1; + protected int tokens2; + protected int port; + + static readonly object _lock = new object(); + + public TestLLM() + { + Task task = Init(); + task.Wait(); + } + + public virtual async Task Init() + { + Monitor.Enter(_lock); + port = new System.Random().Next(10000, 20000); + SetParameters(); + await DownloadModels(); + gameObject = new GameObject(); + gameObject.SetActive(false); + llm = CreateLLM(); + llmCharacter = CreateLLMCharacter(); + gameObject.SetActive(true); + } + + public virtual void SetParameters() + { + prompt = "You are a scientific assistant and provide short and concise info on the user questions"; + prompt2 = "You are a funny assistant and answer the user questions with smartass comments"; + query = "Can you tell me some fun fact about ants in one sentence?"; + reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; + reply2 = "Sure! \"Ants are so sneaky, they can even build nests that look like giant spiders!\""; + tokens1 = 20; + tokens2 = 9; + } + + protected virtual string GetModelUrl() + { + return "https://huggingface.co/unsloth/Qwen3-0.6B-GGUF/resolve/main/Qwen3-0.6B-Q4_K_M.gguf"; + } + + public virtual async Task DownloadModels() + { + modelNameLLManager = await LLMManager.DownloadModel(GetModelUrl()); + } + + [Test] + public void TestGetLLMManagerAssetRuntime() + { + string path = ""; + string managerPath = LLM.GetLLMManagerAssetRuntime(path); + Assert.AreEqual(managerPath, path); + + string filename = "lala"; + path = LLMUnitySetup.GetFullPath(filename); + LLMUnitySetup.CreateEmptyFile(path); + managerPath = LLM.GetLLMManagerAssetRuntime(path); + Assert.AreEqual(managerPath, path); + File.Delete(path); + + path = modelNameLLManager; + managerPath = LLM.GetLLMManagerAssetRuntime(path); + Assert.AreEqual(managerPath, LLMManager.GetAssetPath(path)); + + path = LLMUnitySetup.GetAssetPath("lala"); + LLMUnitySetup.CreateEmptyFile(path); + managerPath = LLM.GetLLMManagerAssetRuntime(path); + Assert.AreEqual(managerPath, path); + File.Delete(path); + } + + [Test] + public void TestGetLLMManagerAssetEditor() + { + string path = ""; + string managerPath = LLM.GetLLMManagerAssetEditor(path); + Assert.AreEqual(managerPath, path); + + path = modelNameLLManager; + managerPath = LLM.GetLLMManagerAssetEditor(path); + Assert.AreEqual(managerPath, modelNameLLManager); + + path = LLMManager.Get(modelNameLLManager).path; + managerPath = LLM.GetLLMManagerAssetEditor(path); + Assert.AreEqual(managerPath, modelNameLLManager); + + string filename = "lala"; + path = LLMUnitySetup.GetAssetPath(filename); + LLMUnitySetup.CreateEmptyFile(path); + managerPath = LLM.GetLLMManagerAssetEditor(filename); + Assert.AreEqual(managerPath, filename); + managerPath = LLM.GetLLMManagerAssetEditor(path); + Assert.AreEqual(managerPath, filename); + + path = LLMUnitySetup.GetFullPath(filename); + LLMUnitySetup.CreateEmptyFile(path); + managerPath = LLM.GetLLMManagerAssetEditor(path); + Assert.AreEqual(managerPath, path); + File.Delete(path); + } + + public virtual LLM CreateLLM() + { + LLM llm = gameObject.AddComponent(); + llm.SetModel(modelNameLLManager); + llm.parallelPrompts = 1; + llm.port = port; + return llm; + } + + public virtual LLMCharacter CreateLLMCharacter() + { + LLMCharacter llmCharacter = gameObject.AddComponent(); + llmCharacter.llm = llm; + llmCharacter.playerName = "User"; + llmCharacter.AIName = "Assistant"; + llmCharacter.prompt = prompt; + llmCharacter.temperature = 0; + llmCharacter.seed = 0; + llmCharacter.numPredict = 50; + llmCharacter.port = port; + return llmCharacter; + } + + [UnityTest] + public IEnumerator RunTests() + { + Task task = RunTestsTask(); + while (!task.IsCompleted) yield return null; + if (error != null) + { + Debug.LogError(error.ToString()); + throw (error); + } + OnDestroy(); + } + + public async Task RunTestsTask() + { + error = null; + try + { + await Tests(); + llm.OnDestroy(); + } + catch (Exception e) + { + error = e; + } + } + + public virtual async Task Tests() + { + TestArchitecture(); + await llmCharacter.Tokenize("I", TestTokens); + await llmCharacter.Warmup(); + Assert.AreEqual(llmCharacter.chat.Count, 1); + TestWarmup(); + + string reply = await llmCharacter.Chat(query); + TestChat(reply, reply1); + TestPostChat(3); + + llmCharacter.SetPrompt(prompt2); + reply = await llmCharacter.Chat(query, TestStreamingChat); + TestChat(reply, reply2); + TestPostChat(3); + + await llmCharacter.Chat("bye!"); + TestPostChat(5); + + List embeddings = await llmCharacter.Embeddings("hi how are you?"); + TestEmbeddings(embeddings); + } + + public virtual void TestArchitecture() + { + Assert.That(llm.architecture.Contains("avx")); + } + + public void TestTokens(List tokens) + { + Assert.AreEqual(tokens, new List { 40 }); + } + + public void TestWarmup() + { + Assert.That(llmCharacter.chat.Count == 1); + } + + public void TestStreamingChat(string reply) + { + Assert.That(reply != ""); + } + + public void TestChat(string reply, string replyGT) + { + Debug.Log(reply.Trim()); + var words1 = reply.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); + var words2 = replyGT.Trim().Split(new[] { ' ', ',', '.', '!', '?' }, StringSplitOptions.RemoveEmptyEntries); + var commonWords = words1.Intersect(words2).Count(); + var totalWords = Math.Max(words1.Length, words2.Length); + + Assert.That((double)commonWords / totalWords >= 0.7); + } + + public void TestPostChat(int num) + { + Assert.That(llmCharacter.chat.Count == num); + } + + public void TestEmbeddings(List embeddings) + { + Assert.That(embeddings.Count == 1024); + } + + public virtual void OnDestroy() + { + if (Monitor.IsEntered(_lock)) + { + Monitor.Exit(_lock); + } + } + } + + public class TestLLM_LLMManager_Load : TestLLM + { + public override LLM CreateLLM() + { + LLM llm = gameObject.AddComponent(); + string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; + string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); + filename = LLMManager.LoadModel(sourcePath); + llm.SetModel(filename); + llm.parallelPrompts = 1; + return llm; + } + } + + public class TestLLM_StreamingAssets_Load : TestLLM + { + string loadPath; + + public override LLM CreateLLM() + { + LLM llm = gameObject.AddComponent(); + string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; + string sourcePath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); + loadPath = LLMUnitySetup.GetAssetPath(filename); + if (!File.Exists(loadPath)) File.Copy(sourcePath, loadPath); + llm.SetModel(loadPath); + llm.parallelPrompts = 1; + return llm; + } + + public override void OnDestroy() + { + base.OnDestroy(); + if (!File.Exists(loadPath)) File.Delete(loadPath); + } + } + + public class TestLLM_SetModel_Warning : TestLLM + { + public override LLM CreateLLM() + { + LLM llm = gameObject.AddComponent(); + string filename = Path.GetFileName(GetModelUrl()).Split("?")[0]; + string loadPath = Path.Combine(LLMUnitySetup.modelDownloadPath, filename); + llm.SetModel(loadPath); + llm.parallelPrompts = 1; + return llm; + } + } + + public class TestLLM_Lora : TestLLM + { + protected string loraUrl = "https://huggingface.co/phh/Qwen3-0.6B-TLDR-Lora/resolve/main/Qwen3-0.6B-tldr-lora-f16.gguf"; + protected string loraNameLLManager; + protected float loraWeight; + + public override async Task DownloadModels() + { + await base.DownloadModels(); + loraNameLLManager = await LLMManager.DownloadLora(loraUrl); + } + + public override LLM CreateLLM() + { + LLM llm = base.CreateLLM(); + llm.AddLora(loraNameLLManager, loraWeight); + return llm; + } + + public override void SetParameters() + { + base.SetParameters(); + // prompt = ""; + if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) + { + reply1 = "I am sorry, but I cannot assist with this request. Please try again or ask a different question."; + } + else + { + reply1 = "I am sorry, but I cannot respond to your message as it is empty.Could you please provide a meaningful query or content ?"; + } + reply2 = "False response."; + tokens1 = 5; + tokens2 = 9; + loraWeight = 0.9f; + } + + public override async Task Tests() + { + await base.Tests(); + TestModelPaths(); + TestLoraWeight(); + loraWeight = 0.6f; + llm.SetLoraWeight(loraNameLLManager, loraWeight); + TestLoraWeight(); + } + + public void TestModelPaths() + { + Assert.AreEqual(llm.model, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(GetModelUrl()).Split("?")[0]).Replace('\\', '/')); + Assert.AreEqual(llm.lora, Path.Combine(LLMUnitySetup.modelDownloadPath, Path.GetFileName(loraUrl).Split("?")[0]).Replace('\\', '/')); + } + + public void TestLoraWeight() + { + var loras = llm.ListLoras(); + Assert.AreEqual(loras[0].Scale, loraWeight); + } + } + + public class TestLLM_Remote : TestLLM + { + public override LLM CreateLLM() + { + LLM llm = base.CreateLLM(); + llm.remote = true; + return llm; + } + + public override LLMCharacter CreateLLMCharacter() + { + LLMCharacter llmCharacter = base.CreateLLMCharacter(); + llmCharacter.remote = true; + return llmCharacter; + } + } + + public class TestLLM_Lora_Remote : TestLLM_Lora + { + public override LLM CreateLLM() + { + LLM llm = base.CreateLLM(); + llm.remote = true; + return llm; + } + + public override LLMCharacter CreateLLMCharacter() + { + LLMCharacter llmCharacter = base.CreateLLMCharacter(); + llmCharacter.remote = true; + return llmCharacter; + } + } + + public class TestLLM_Double : TestLLM + { + LLM llm1; + LLMCharacter llmCharacter1; + + public override async Task Init() + { + SetParameters(); + await DownloadModels(); + gameObject = new GameObject(); + gameObject.SetActive(false); + llm = CreateLLM(); + llmCharacter = CreateLLMCharacter(); + llm1 = CreateLLM(); + llmCharacter1 = CreateLLMCharacter(); + gameObject.SetActive(true); + } + } + + public class TestLLMCharacter_Save : TestLLM + { + string saveName = "TestLLMCharacter_Save"; + + public override LLMCharacter CreateLLMCharacter() + { + LLMCharacter llmCharacter = base.CreateLLMCharacter(); + llmCharacter.save = saveName; + llmCharacter.saveCache = true; + foreach (string filename in new string[] + { + llmCharacter.GetJsonSavePath(saveName), + llmCharacter.GetCacheSavePath(saveName) + }) if (File.Exists(filename)) File.Delete(filename); + return llmCharacter; + } + + public override async Task Tests() + { + await base.Tests(); + TestSave(); + } + + public void TestSave() + { + string jsonPath = llmCharacter.GetJsonSavePath(saveName); + string cachePath = llmCharacter.GetCacheSavePath(saveName); + Assert.That(File.Exists(jsonPath)); + Assert.That(File.Exists(cachePath)); + string json = File.ReadAllText(jsonPath); + File.Delete(jsonPath); + File.Delete(cachePath); + + List chatHistory = JsonUtility.FromJson(json).chat; + Assert.AreEqual(chatHistory.Count, 2); + Assert.AreEqual(chatHistory[0].role, llmCharacter.playerName); + Assert.AreEqual(chatHistory[0].content, "hi"); + Assert.AreEqual(chatHistory[1].role, llmCharacter.AIName); + + Assert.AreEqual(llmCharacter.chat.Count, chatHistory.Count + 1); + for (int i = 0; i < chatHistory.Count; i++) + { + Assert.AreEqual(chatHistory[i].role, llmCharacter.chat[i + 1].role); + Assert.AreEqual(chatHistory[i].content, llmCharacter.chat[i + 1].content); + } + } + } + + public class TestLLM_CUDA : TestLLM + { + public override LLM CreateLLM() + { + LLM llm = base.CreateLLM(); + llm.numGPULayers = 10; + return llm; + } + + public override void SetParameters() + { + base.SetParameters(); + reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; + if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) + { + reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; + } + } + + public override void TestArchitecture() + { + Assert.That(llm.architecture.Contains("cuda")); + } + } + + public class TestLLM_CUDA_full : TestLLM_CUDA + { + public override void TestArchitecture() + { + Assert.That(llm.architecture.Contains("cuda") && llm.architecture.Contains("full")); + } + } + + public class TestLLM_CUDA_full_attention : TestLLM_CUDA_full + { + public override LLM CreateLLM() + { + LLM llm = base.CreateLLM(); + llm.flashAttention = true; + return llm; + } + + public override void SetParameters() + { + base.SetParameters(); + if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) + { + reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; + } + } + } +} diff --git a/Tests/Runtime/TestSearch.cs b/Tests/Runtime/TestSearch.cs index beb4acd7..5a0872b3 100644 --- a/Tests/Runtime/TestSearch.cs +++ b/Tests/Runtime/TestSearch.cs @@ -67,30 +67,40 @@ public static bool ApproxEqual(float x1, float x2) } [UnityTest] - public virtual void RunTests() + public virtual IEnumerator RunTests() + { + Task task = RunTestsTask(); + while (!task.IsCompleted) yield return null; + if (error != null) + { + Debug.LogError(error.ToString()); + throw (error); + } + } + + public virtual async Task RunTestsTask() { error = null; try { - Tests(); + await Tests(); llm.OnDestroy(); } - catch (Exception e) + catch (Exception e) { - Debug.LogError(e.ToString()); - throw (e); + error = e; } } - public virtual void Tests() + public virtual async Task Tests() { - TestAdd(); - TestSearch(); - TestIncrementalSearch(); - TestSaveLoad(); + await TestAdd(); + await TestSearch(); + await TestIncrementalSearch(); + await TestSaveLoad(); } - public virtual void TestAdd() + public virtual async Task TestAdd() { void CheckCount(int[] nums) { @@ -104,32 +114,32 @@ void CheckCount(int[] nums) } int key, num; - key = search.Add(weather); + key = await search.Add(weather); Assert.That(key == 0); Assert.That(search.Get(key) == weather); Assert.That(search.Count() == 1); search.Remove(key); Assert.That(search.Count() == 0); - key = search.Add(weather); + key = await search.Add(weather); Assert.That(key == 1); - key = search.Add(raining); + key = await search.Add(raining); Assert.That(key == 2); - key = search.Add(sometext); + key = await search.Add(sometext); Assert.That(key == 3); Assert.That(search.Count() == 3); search.Clear(); Assert.That(search.Count() == 0); - key = search.Add(weather, "0"); + key = await search.Add(weather, "0"); Assert.That(key == 0); - key = search.Add(raining, "0"); + key = await search.Add(raining, "0"); Assert.That(key == 1); - key = search.Add(weather, "1"); + key = await search.Add(weather, "1"); Assert.That(key == 2); - key = search.Add(sometext, "1"); + key = await search.Add(sometext, "1"); Assert.That(key == 3); - key = search.Add(sometext, "2"); + key = await search.Add(sometext, "2"); Assert.That(key == 4); CheckCount(new int[] {2, 2, 1}); num = search.Remove(weather, "0"); @@ -155,20 +165,20 @@ void CheckCount(int[] nums) Assert.That(search.Count() == 0); } - public virtual void TestSearch() + public virtual async Task TestSearch() { string[] results; float[] distances; - (results, distances) = search.Search(weather, 1); + (results, distances) = await search.Search(weather, 1); Assert.That(results.Length == 0); Assert.That(distances.Length == 0); - search.Add(weather); - search.Add(raining); - search.Add(sometext); + await search.Add(weather); + await search.Add(raining); + await search.Add(sometext); - (results, distances) = search.Search(weather, 2); + (results, distances) = await search.Search(weather, 2); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -176,7 +186,7 @@ public virtual void TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherRainingDiff)); - (results, distances) = search.Search(raining, 2); + (results, distances) = await search.Search(raining, 2); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -186,12 +196,12 @@ public virtual void TestSearch() search.Clear(); - search.Add(weather, "0"); - search.Add(raining, "1"); - search.Add(sometext, "0"); - search.Add(sometext, "1"); + await search.Add(weather, "0"); + await search.Add(raining, "1"); + await search.Add(sometext, "0"); + await search.Add(sometext, "1"); - (results, distances) = search.Search(weather, 2, "0"); + (results, distances) = await search.Search(weather, 2, "0"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -199,7 +209,7 @@ public virtual void TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = search.Search(weather, 2, "0"); + (results, distances) = await search.Search(weather, 2, "0"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], weather); @@ -207,14 +217,14 @@ public virtual void TestSearch() Assert.That(ApproxEqual(distances[0], 0)); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = search.Search(weather, 2, "1"); + (results, distances) = await search.Search(weather, 2, "1"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); Assert.AreEqual(results[1], sometext); Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); - (results, distances) = search.Search(weather, 3, "1"); + (results, distances) = await search.Search(weather, 3, "1"); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -223,13 +233,13 @@ public virtual void TestSearch() search.Clear(); } - public void TestIncrementalSearch() + public async Task TestIncrementalSearch() { string[] results; float[] distances; bool completed; - int searchKey = search.IncrementalSearch(weather); + int searchKey = await search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 0); Assert.That(results.Length == 0); @@ -237,11 +247,11 @@ public void TestIncrementalSearch() Assert.That(completed); search.Clear(); - search.Add(weather); - search.Add(raining); - search.Add(sometext); + await search.Add(weather); + await search.Add(raining); + await search.Add(sometext); - searchKey = search.IncrementalSearch(weather); + searchKey = await search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 0); Assert.That(results.Length == 1); @@ -259,7 +269,7 @@ public void TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = search.IncrementalSearch(weather); + searchKey = await search.IncrementalSearch(weather); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 1); Assert.That(results.Length == 2); @@ -273,12 +283,12 @@ public void TestIncrementalSearch() search.IncrementalSearchComplete(searchKey); search.Clear(); - search.Add(weather, "0"); - search.Add(raining, "1"); - search.Add(sometext, "0"); - search.Add(sometext, "1"); + await search.Add(weather, "0"); + await search.Add(raining, "1"); + await search.Add(sometext, "0"); + await search.Add(sometext, "1"); - searchKey = search.IncrementalSearch(weather, "0"); + searchKey = await search.IncrementalSearch(weather, "0"); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 0); Assert.AreEqual(results.Length, 2); @@ -289,7 +299,7 @@ public void TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = search.IncrementalSearch(weather, "0"); + searchKey = await search.IncrementalSearch(weather, "0"); (results, distances, completed) = search.IncrementalFetch(searchKey, 2); Assert.That(searchKey == 1); Assert.AreEqual(results.Length, 2); @@ -300,7 +310,7 @@ public void TestIncrementalSearch() Assert.That(ApproxEqual(distances[1], weatherSometextDiff)); Assert.That(completed); - searchKey = search.IncrementalSearch(weather, "1"); + searchKey = await search.IncrementalSearch(weather, "1"); (results, distances, completed) = search.IncrementalFetch(searchKey, 1); Assert.That(searchKey == 2); Assert.AreEqual(results.Length, 1); @@ -315,7 +325,7 @@ public void TestIncrementalSearch() Assert.That(ApproxEqual(distances[0], weatherSometextDiff)); Assert.That(completed); - searchKey = search.IncrementalSearch(weather, "1"); + searchKey = await search.IncrementalSearch(weather, "1"); (results, distances, completed) = search.IncrementalFetch(searchKey, 3); Assert.That(searchKey == 3); Assert.AreEqual(results.Length, 2); @@ -327,19 +337,19 @@ public void TestIncrementalSearch() search.Clear(); } - public virtual void TestSaveLoad() + public virtual async Task TestSaveLoad() { string path = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); string[] results; float[] distances; - search.Add(weather); - search.Add(raining); - search.Add(sometext); + await search.Add(weather); + await search.Add(raining); + await search.Add(sometext); search.Save(path); search.Clear(); - search.Load(path); + await search.Load(path); File.Delete(path); Assert.That(search.Count() == 3); @@ -347,7 +357,7 @@ public virtual void TestSaveLoad() Assert.That(search.Get(1) == raining); Assert.That(search.Get(2) == sometext); - (results, distances) = search.Search(raining, 2); + (results, distances) = await search.Search(raining, 2); Assert.AreEqual(results[0], raining); Assert.AreEqual(results[1], weather); Assert.That(ApproxEqual(distances[0], 0)); @@ -355,14 +365,14 @@ public virtual void TestSaveLoad() search.Clear(); - search.Add(weather, "0"); - search.Add(raining, "1"); - search.Add(sometext, "0"); - search.Add(sometext, "1"); + await search.Add(weather, "0"); + await search.Add(raining, "1"); + await search.Add(sometext, "0"); + await search.Add(sometext, "1"); search.Save(path); search.Clear(); - search.Load(path); + await search.Load(path); File.Delete(path); Assert.That(search.Count() == 4); @@ -373,7 +383,7 @@ public virtual void TestSaveLoad() Assert.That(search.Get(2) == sometext); Assert.That(search.Get(3) == sometext); - (results, distances) = search.Search(raining, 2, "0"); + (results, distances) = await search.Search(raining, 2, "0"); Assert.AreEqual(results[0], weather); Assert.AreEqual(results[1], sometext); Assert.That(ApproxEqual(distances[0], weatherRainingDiff)); @@ -391,34 +401,34 @@ public override T CreateSearch() return search; } - public override void Tests() + public override async Task Tests() { - base.Tests(); - TestEncode(); - TestSimilarity(); - TestSearchFromList(); + await base.Tests(); + await TestEncode(); + await TestSimilarity(); + await TestSearchFromList(); } - public void TestEncode() + public async Task TestEncode() { - float[] encoding = search.Encode(weather); + float[] encoding = await search.Encode(weather); Assert.That(ApproxEqual(encoding[0], -0.02910374f)); Assert.That(ApproxEqual(encoding[383], 0.01764517f)); } - public void TestSimilarity() + public async Task TestSimilarity() { - float[] sentence1 = search.Encode(weather); - float[] sentence2 = search.Encode(raining); + float[] sentence1 = await search.Encode(weather); + float[] sentence2 = await search.Encode(raining); float similarity = SimpleSearch.DotProduct(sentence1, sentence2); float distance = SimpleSearch.InverseDotProduct(sentence1, sentence2); Assert.That(ApproxEqual(similarity, 1 - weatherRainingDiff)); Assert.That(ApproxEqual(distance, weatherRainingDiff)); } - public void TestSearchFromList() + public async Task TestSearchFromList() { - (string[] results, float[] distances) = search.SearchFromList(weather, new string[] {sometext, raining}); + (string[] results, float[] distances) = await search.SearchFromList(weather, new string[] {sometext, raining}); Assert.AreEqual(results.Length, 2); Assert.AreEqual(distances.Length, 2); Assert.AreEqual(results[0], raining); @@ -481,18 +491,18 @@ public static (string, List<(int, int)>) GenerateText(int length) return (new string(generatedText), indices); } - public override void Tests() + public override async Task Tests() { - base.Tests(); - TestProperSplit(); + await base.Tests(); + await TestProperSplit(); } - public void TestProperSplit() + public async Task TestProperSplit() { for (int length = 50; length <= 500; length += 50) { (string randomText, _) = GenerateText(length); - List<(int, int)> indices = search.Split(randomText); + List<(int, int)> indices = await search.Split(randomText); int currIndex = 0; foreach ((int startIndex, int endIndex) in indices) { @@ -500,7 +510,7 @@ public void TestProperSplit() currIndex = endIndex + 1; } Assert.AreEqual(currIndex, length); - int key = search.Add(randomText); + int key = await search.Add(randomText); Assert.AreEqual(search.Get(key), randomText); } } @@ -510,13 +520,13 @@ public class TestTokenSplitter : TestSplitter {} public class TestWordSplitter : TestSplitter { - public override void Tests() + public override async Task Tests() { - base.Tests(); - TestSplit(); + await base.Tests(); + await TestSplit(); } - public void TestSplit() + public async Task TestSplit() { System.Random random = new System.Random(); char[] characters = "abcdefghijklmnopqrstuvwxyz".ToCharArray(); @@ -539,7 +549,7 @@ public void TestSplit() } string text = String.Join(" ", splits); - List<(int, int)> indices = search.Split(text); + List<(int, int)> indices = await search.Split(text); for (int i = 0; i < indices.Count; i++) { (int startIndex, int endIndex) = indices[i]; @@ -553,17 +563,17 @@ public void TestSplit() public class TestSentenceSplitter : TestSplitter { - public override void Tests() + public override async Task Tests() { - base.Tests(); - TestSplit(); + await base.Tests(); + await TestSplit(); } - public void TestSplit() + public async Task TestSplit() { - string[] SplitSentences(string text) + async Task SplitSentences(string text) { - List<(int, int)> indices = search.Split(text); + List<(int, int)> indices = await search.Split(text); List sentences = new List(); foreach ((int startIndex, int endIndex) in indices) sentences.Add(text.Substring(startIndex, endIndex - startIndex + 1)); return sentences.ToArray(); @@ -582,9 +592,9 @@ string[] SplitSentences(string text) sentencesGT = (string[])sentences.Clone(); text = String.Join("", sentencesGT); - sentencesBack = SplitSentences(text); + sentencesBack = await SplitSentences(text); Assert.AreEqual(sentencesBack, sentencesGT); - key = search.Add(text); + key = await search.Add(text); Assert.AreEqual(search.Get(key), text); sentencesGT = (string[])sentences.Clone(); @@ -593,18 +603,18 @@ string[] SplitSentences(string text) sentencesGT[2] += ".... "; sentencesGT[3] += " ?"; text = String.Join("", sentencesGT); - sentencesBack = SplitSentences(text); + sentencesBack = await SplitSentences(text); Assert.AreEqual(sentencesBack, sentencesGT); - key = search.Add(text); + key = await search.Add(text); Assert.AreEqual(search.Get(key), text); for (int length = 10; length <= 100; length += 10) { (string randomText, List<(int, int)> indicesGT) = GenerateText(length); - List<(int, int)> indices = search.Split(randomText); + List<(int, int)> indices = await search.Split(randomText); Assert.AreEqual(indices.Count, indicesGT.Count); Assert.AreEqual(indices, indicesGT); - key = search.Add(randomText); + key = await search.Add(randomText); Assert.AreEqual(search.Get(key), randomText); } @@ -651,24 +661,24 @@ public class TestRAG_DBSearch_TokenSplitter : TestRAG public abstract class TestRAG_Chunking : TestRAG { - public override void TestSearch() + public override async Task TestSearch() { - base.TestSearch(); + await base.TestSearch(); string[] results; float[] distances; - search.Add(weather + raining); - search.Add(sometext); + await search.Add(weather + raining); + await search.Add(sometext); search.ReturnChunks(false); - (results, distances) = search.Search(weather, 1); + (results, distances) = await search.Search(weather, 1); Assert.That(results.Length == 1); Assert.That(distances.Length == 1); Assert.AreEqual(results[0], weather + raining); search.ReturnChunks(true); - (results, distances) = search.Search(weather, 1); + (results, distances) = await search.Search(weather, 1); Assert.That(results.Length == 1); Assert.That(distances.Length == 1); Assert.AreEqual(results[0], weather); From 116e41e9600612ecb9585ac3b941b7f50e56f2e7 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 13 Nov 2025 15:02:45 +0200 Subject: [PATCH 23/69] update to latest LlamaLib (remote changes) --- Runtime/LlamaLib/LLM.cs | 24 ++++++++++++------------ Runtime/LlamaLib/LLMAgent.cs | 11 ++++++----- Runtime/LlamaLib/LLMClient.cs | 20 +++++++++++++++----- Runtime/LlamaLib/LlamaLib.cs | 35 ++++++++++++++++++++++++++++------- 4 files changed, 61 insertions(+), 29 deletions(-) diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs index cfad6d74..fde89b61 100644 --- a/Runtime/LlamaLib/LLM.cs +++ b/Runtime/LlamaLib/LLM.cs @@ -42,7 +42,7 @@ public abstract class LLM : IDisposable protected readonly object _disposeLock = new object(); public bool disposed = false; - protected LLM() {} + protected LLM() { } protected LLM(LlamaLib llamaLibInstance) { @@ -76,7 +76,7 @@ protected void CheckLlamaLib() } } - public virtual void Dispose() {} + public virtual void Dispose() { } ~LLM() { @@ -113,7 +113,7 @@ public List Tokenize(string content) JArray json = JArray.Parse(resultStr); ret = json?.ToObject>(); } - catch {} + catch { } return ret; } @@ -151,7 +151,7 @@ public List Embeddings(string content) JArray json = JArray.Parse(resultStr); ret = json?.ToObject>(); } - catch {} + catch { } return ret; } @@ -171,7 +171,7 @@ public JObject GetCompletionParameters() { parameters = JObject.Parse(parametersString); } - catch {} + catch { } return parameters; } @@ -218,9 +218,9 @@ public async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallb // LLMLocal class public abstract class LLMLocal : LLM { - protected LLMLocal() : base() {} + protected LLMLocal() : base() { } - protected LLMLocal(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} + protected LLMLocal(LlamaLib llamaLibInstance) : base(llamaLibInstance) { } public string SaveSlot(int idSlot, string filepath) { @@ -250,9 +250,9 @@ public void Cancel(int idSlot) // LLMProvider class public abstract class LLMProvider : LLMLocal { - protected LLMProvider() : base() {} + protected LLMProvider() : base() { } - protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} + protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) { } public void SetTemplate(string template) @@ -310,7 +310,7 @@ public List ParseLoraListJSON(string result) )); } } - catch {} + catch { } return loras; } @@ -413,7 +413,7 @@ public override void Dispose() { llamaLib.LLM_Delete(llm); } - catch (Exception) {} + catch (Exception) { } } llamaLib?.Dispose(); llamaLib = null; @@ -423,4 +423,4 @@ public override void Dispose() } } } -} +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 4f12eb03..07a8319a 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -75,9 +75,9 @@ public LLMAgent(LLMLocal _llm, string _systemPrompt = "", string _userRole = "us llmBase = _llm; llamaLib = llmBase.llamaLib; - llm = llamaLib.LLMAgent_Construct(llmBase.llm, - _systemPrompt ?? string.Empty, - _userRole ?? "user", + llm = llamaLib.LLMAgent_Construct(llmBase.llm, + _systemPrompt ?? string.Empty, + _userRole ?? "user", _assistantRole ?? "assistant"); if (llm == IntPtr.Zero) throw new InvalidOperationException("Failed to create LLMAgent"); } @@ -179,7 +179,7 @@ public List GetHistory() } } } - catch {} + catch { } return messages; } @@ -306,6 +306,7 @@ public void Cancel() llamaLib.LLM_Cancel(llm, SlotId); } + // Override slot-based methods to hide them private new string SaveSlot(int id_slot, string filepath) { @@ -322,4 +323,4 @@ public void Cancel() Cancel(); } } -} +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LLMClient.cs b/Runtime/LlamaLib/LLMClient.cs index 7c46b89a..4829fe79 100644 --- a/Runtime/LlamaLib/LLMClient.cs +++ b/Runtime/LlamaLib/LLMClient.cs @@ -13,7 +13,7 @@ public LLMClient(LLMProvider provider) llm = CreateClient(provider); } - public LLMClient(string url, int port, string apiKey = "") + public LLMClient(string url, int port, string apiKey = "", int numRetries = 5) { if (string.IsNullOrEmpty(url)) throw new ArgumentNullException(nameof(url)); @@ -21,7 +21,7 @@ public LLMClient(string url, int port, string apiKey = "") try { llamaLib = new LlamaLib(false); - llm = CreateRemoteClient(url, port, apiKey); + llm = CreateRemoteClient(url, port, apiKey, numRetries); } catch { @@ -38,12 +38,22 @@ private IntPtr CreateClient(LLMProvider provider) return llm; } - private IntPtr CreateRemoteClient(string url, int port, string apiKey = "") + private IntPtr CreateRemoteClient(string url, int port, string apiKey = "", int numRetries = 5) { - var llm = llamaLib.LLMClient_Construct_Remote(url ?? string.Empty, port, apiKey ?? string.Empty); + var llm = llamaLib.LLMClient_Construct_Remote(url ?? string.Empty, port, apiKey ?? string.Empty, numRetries); if (llm == IntPtr.Zero) throw new InvalidOperationException($"Failed to create remote LLMClient for {url}:{port}"); return llm; } + + public void SetSSL(string SSL_cert) + { + llamaLib.LLMClient_Set_SSL(llm, SSL_cert ?? string.Empty); + } + + public bool IsServerAlive() + { + return llamaLib.LLMClient_Is_Server_Alive(llm); + } } -} +} \ No newline at end of file diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index cd340c4b..37bcf643 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -198,8 +198,17 @@ public IntPtr LLMService_Construct( public static extern IntPtr LLMClient_Construct_Remote_Static( [MarshalAs(UnmanagedType.LPStr)] string url, int port, - [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); - public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "") => LlamaLib.LLMClient_Construct_Remote_Static(url, port, apiKey); + [MarshalAs(UnmanagedType.LPStr)] string apiKey = "", + int numRetries = 5); + public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "", int numRetries = 5) => LlamaLib.LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Set_SSL")] + public static extern void LLMClient_Set_SSL_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string SSLCert); + public void LLMClient_Set_SSL(IntPtr llm, string SSLCert) => LlamaLib.LLMClient_Set_SSL_Static(llm, SSLCert); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Is_Server_Alive")] + public static extern bool LLMClient_Is_Server_Alive_Static(IntPtr llm); + public bool LLMClient_Is_Server_Alive(IntPtr llm) => LlamaLib.LLMClient_Is_Server_Alive_Static(llm); // LLMAgent functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Construct")] @@ -305,6 +314,7 @@ public static extern void LLMAgent_Add_Message_Static(IntPtr llm, // Desktop platform implementation with dynamic loading private static List instances = new List(); private static readonly object runtimeLock = new object(); + public static string baseLibraryPath = Assembly.GetExecutingAssembly().Location; private static IntPtr runtimeLibraryHandle = IntPtr.Zero; private IntPtr libraryHandle = IntPtr.Zero; private static int debugLevelGlobal = 0; @@ -353,11 +363,9 @@ public static string GetPlatform() public virtual string FindLibrary(string libraryName) { - string baseDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); - List lookupDirs = new List(); - lookupDirs.Add(Path.Combine(baseDir, "runtimes", GetPlatform(), "native")); - lookupDirs.Add(baseDir); + lookupDirs.Add(baseLibraryPath); + lookupDirs.Add(Path.Combine(baseLibraryPath, "runtimes", GetPlatform(), "native")); foreach (string lookupDir in lookupDirs) { @@ -452,6 +460,8 @@ private void LoadFunctionPointers() LLMService_From_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); LLMClient_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); LLMClient_Construct_Remote = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); + LLMClient_Set_SSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Set_SSL"); + LLMClient_Is_Server_Alive = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Is_Server_Alive"); LLMAgent_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Construct"); LLMAgent_Set_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_User_Role"); LLMAgent_Get_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_User_Role"); @@ -586,11 +596,20 @@ public delegate IntPtr LLMService_Construct_Delegate( [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLMService_From_Command_Delegate([MarshalAs(UnmanagedType.LPStr)] string paramsString); + // LLMClient functions [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLMClient_Construct_Delegate(IntPtr llm); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMClient_Construct_Remote_Delegate([MarshalAs(UnmanagedType.LPStr)] string url, int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + public delegate IntPtr LLMClient_Construct_Remote_Delegate( + [MarshalAs(UnmanagedType.LPStr)] string url, int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = "", int numRetries = 5 + ); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMClient_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string SSLCert); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool LLMClient_Is_Server_Alive_Delegate(IntPtr llm); // LLMAgent functions [UnmanagedFunctionPointer(CallingConvention.Cdecl)] @@ -707,6 +726,8 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLMService_From_Command_Delegate LLMService_From_Command; public LLMClient_Construct_Delegate LLMClient_Construct; public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote; + public LLMClient_Set_SSL_Delegate LLMClient_Set_SSL; + public LLMClient_Is_Server_Alive_Delegate LLMClient_Is_Server_Alive; public LLMAgent_Construct_Delegate LLMAgent_Construct; public LLMAgent_Set_User_Role_Delegate LLMAgent_Set_User_Role; public LLMAgent_Get_User_Role_Delegate LLMAgent_Get_User_Role; From 548820b4aa9fe16399e1f375ba5d97aba4d75832 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 13 Nov 2025 15:03:45 +0200 Subject: [PATCH 24/69] simplify library finding --- Runtime/LLM.cs | 27 +++------------------------ Runtime/LLMUnitySetup.cs | 11 +++++++++-- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 5120ff98..ac983c49 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -449,12 +449,12 @@ private async Task StartServiceAsync() private void CreateLib() { bool useGPU = numGPULayers > 0; - llmlib = new LlamaLibUnity(useGPU); + llmlib = new LlamaLib(useGPU); if (LLMUnitySetup.DebugMode <= LLMUnitySetup.DebugModeType.All) { - LlamaLibUnity.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); - LlamaLibUnity.LoggingCallback(LLMUnitySetup.Log); + LlamaLib.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); + LlamaLib.LoggingCallback(LLMUnitySetup.Log); } } @@ -917,25 +917,4 @@ public static string GetLLMManagerAssetRuntime(string path) /// \endcond #endregion } - - /// - /// Unity-specific implementation of LlamaLib for handling native library loading. - /// - public class LlamaLibUnity : UndreamAI.LlamaLib.LlamaLib - { - public LlamaLibUnity(bool gpu = false) : base(gpu) {} - - public override string FindLibrary(string libraryName) - { - string lookupDir = Path.Combine(LLMUnitySetup.libraryPath, GetPlatform(), "native"); - string libraryPath = Path.Combine(lookupDir, libraryName); - - if (File.Exists(libraryPath)) - { - return libraryPath; - } - - throw new FileNotFoundException($"Native library not found: {libraryName} in {lookupDir}"); - } - } } diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index 0b0a6cc4..876d797e 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -9,6 +9,7 @@ using System.Collections.Generic; using UnityEngine.Networking; using System.Text.RegularExpressions; +using UndreamAI.LlamaLib; /// @defgroup llm LLM /// @defgroup template Chat Templates @@ -239,11 +240,17 @@ public static string GetDownloadAssetPath(string relPath = "") return Path.Combine(assetsDir, relPath).Replace('\\', '/'); } + static void InitializeOnLoadCommon() + { + LoadPlayerPrefs(); + LlamaLib.baseLibraryPath = Path.Combine(libraryPath, LlamaLib.GetPlatform(), "native"); + } + #if UNITY_EDITOR [InitializeOnLoadMethod] static async Task InitializeOnLoad() { - LoadPlayerPrefs(); + InitializeOnLoadCommon(); await DownloadLibrary(); } @@ -251,7 +258,7 @@ static async Task InitializeOnLoad() [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] void InitializeOnLoad() { - LoadPlayerPrefs(); + InitializeOnLoadCommon(); } #endif From 1425189ee109d205893efa18029be5a6df6523f4 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 13 Nov 2025 15:09:52 +0200 Subject: [PATCH 25/69] small fixes --- Runtime/LLMAgent.cs | 2 +- Runtime/LLMCharacter.cs | 2 +- Runtime/LLMClient.cs | 16 +++++- Tests/Runtime/TestLLM.cs | 112 ++++++++++++++++++--------------------- 4 files changed, 68 insertions(+), 64 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 6323af73..91e8d60e 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -254,7 +254,7 @@ public virtual string GetCacheSavePath(string filename) /// public virtual async Task ClearChat() { - await CheckLLMClient(); + await CheckLLMClient(checkConnection: false); llmAgent.ClearHistory(); } diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs index 2323882e..f810e76f 100644 --- a/Runtime/LLMCharacter.cs +++ b/Runtime/LLMCharacter.cs @@ -28,7 +28,7 @@ public LLMCharacter() public void SetPrompt(string newPrompt, bool clearChat = true) { systemPrompt = newPrompt; - if (clearChat) ClearChat(); + if (clearChat) _ = ClearChat(); } } } diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 23e08b61..24ebabf0 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -44,6 +44,10 @@ public class LLMClient : MonoBehaviour [Tooltip("Port number of remote LLM server")] [Remote, SerializeField] protected int _port = 13333; + /// Number of retries of remote LLM server + [Tooltip("Number of retries of remote LLM server")] + [Remote, SerializeField] protected int numRetries = 5; + /// Grammar constraints for output formatting (GBNF or JSON schema format) [Tooltip("Grammar constraints for output formatting (GBNF or JSON schema format)")] [ModelAdvanced, SerializeField] protected string _grammar = ""; @@ -236,11 +240,19 @@ protected virtual void Reset() #endregion #region Initialization - protected virtual async Task CheckLLMClient() + protected virtual async Task CheckLLMClient(bool checkConnection = true) { await startSemaphore.WaitAsync(); startSemaphore.Release(); if (GetCaller() == null) LLMUnitySetup.LogError("LLMClient not initialized", true); + if (remote && checkConnection) + { + for (int attempt = 0; attempt <= numRetries; attempt++) + { + if (llmClient.IsServerAlive()) break; + await Task.Yield(); + } + } } /// @@ -261,7 +273,7 @@ protected virtual async Task SetupLLMClient() } else { - llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey); + llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey, numRetries); } SetGrammar(grammar); diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 7895bf1e..adf96aae 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -116,7 +116,7 @@ public class TestLLM protected GameObject gameObject; protected LLM llm; - protected LLMCharacter llmCharacter; + protected LLMAgent llmAgent; protected Exception error = null; protected string prompt; protected string prompt2; @@ -144,7 +144,7 @@ public virtual async Task Init() gameObject = new GameObject(); gameObject.SetActive(false); llm = CreateLLM(); - llmCharacter = CreateLLMCharacter(); + llmAgent = CreateLLMAgent(); gameObject.SetActive(true); } @@ -233,18 +233,18 @@ public virtual LLM CreateLLM() return llm; } - public virtual LLMCharacter CreateLLMCharacter() + public virtual LLMAgent CreateLLMAgent() { - LLMCharacter llmCharacter = gameObject.AddComponent(); - llmCharacter.llm = llm; - llmCharacter.playerName = "User"; - llmCharacter.AIName = "Assistant"; - llmCharacter.prompt = prompt; - llmCharacter.temperature = 0; - llmCharacter.seed = 0; - llmCharacter.numPredict = 50; - llmCharacter.port = port; - return llmCharacter; + LLMAgent llmAgent = gameObject.AddComponent(); + llmAgent.llm = llm; + llmAgent.userRole = "User"; + llmAgent.assistantRole = "Assistant"; + llmAgent.systemPrompt = prompt; + llmAgent.temperature = 0; + llmAgent.seed = 0; + llmAgent.numPredict = 50; + llmAgent.port = port; + return llmAgent; } [UnityTest] @@ -277,24 +277,24 @@ public async Task RunTestsTask() public virtual async Task Tests() { TestArchitecture(); - await llmCharacter.Tokenize("I", TestTokens); - await llmCharacter.Warmup(); - Assert.AreEqual(llmCharacter.chat.Count, 1); + await llmAgent.Tokenize("I", TestTokens); + await llmAgent.Warmup(); + Assert.AreEqual(llmAgent.chat.Count, 1); TestWarmup(); - string reply = await llmCharacter.Chat(query); + string reply = await llmAgent.Chat(query); TestChat(reply, reply1); TestPostChat(3); - llmCharacter.SetPrompt(prompt2); - reply = await llmCharacter.Chat(query, TestStreamingChat); + llmAgent.systemPrompt = prompt2; + reply = await llmAgent.Chat(query, TestStreamingChat); TestChat(reply, reply2); TestPostChat(3); - await llmCharacter.Chat("bye!"); + await llmAgent.Chat("bye!"); TestPostChat(5); - List embeddings = await llmCharacter.Embeddings("hi how are you?"); + List embeddings = await llmAgent.Embeddings("hi how are you?"); TestEmbeddings(embeddings); } @@ -310,7 +310,7 @@ public void TestTokens(List tokens) public void TestWarmup() { - Assert.That(llmCharacter.chat.Count == 1); + Assert.That(llmAgent.chat.Count == 1); } public void TestStreamingChat(string reply) @@ -331,7 +331,7 @@ public void TestChat(string reply, string replyGT) public void TestPostChat(int num) { - Assert.That(llmCharacter.chat.Count == num); + Assert.That(llmAgent.chat.Count == num); } public void TestEmbeddings(List embeddings) @@ -420,16 +420,8 @@ public override LLM CreateLLM() public override void SetParameters() { base.SetParameters(); - // prompt = ""; - if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer) - { - reply1 = "I am sorry, but I cannot assist with this request. Please try again or ask a different question."; - } - else - { - reply1 = "I am sorry, but I cannot respond to your message as it is empty.Could you please provide a meaningful query or content ?"; - } - reply2 = "False response."; + reply1 = "Ants are known for their ability to build complex structures, though it's not always obvious."; + reply2 = "Sure! \"Ants are so sneaky, they can even steal your lunch!\""; tokens1 = 5; tokens2 = 9; loraWeight = 0.9f; @@ -467,11 +459,11 @@ public override LLM CreateLLM() return llm; } - public override LLMCharacter CreateLLMCharacter() + public override LLMAgent CreateLLMAgent() { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.remote = true; - return llmCharacter; + LLMAgent llmAgent = base.CreateLLMAgent(); + llmAgent.remote = true; + return llmAgent; } } @@ -484,18 +476,18 @@ public override LLM CreateLLM() return llm; } - public override LLMCharacter CreateLLMCharacter() + public override LLMAgent CreateLLMAgent() { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.remote = true; - return llmCharacter; + LLMAgent llmAgent = base.CreateLLMAgent(); + llmAgent.remote = true; + return llmAgent; } } public class TestLLM_Double : TestLLM { LLM llm1; - LLMCharacter llmCharacter1; + LLMAgent llmAgent1; public override async Task Init() { @@ -504,28 +496,28 @@ public override async Task Init() gameObject = new GameObject(); gameObject.SetActive(false); llm = CreateLLM(); - llmCharacter = CreateLLMCharacter(); + llmAgent = CreateLLMAgent(); llm1 = CreateLLM(); - llmCharacter1 = CreateLLMCharacter(); + llmAgent1 = CreateLLMAgent(); gameObject.SetActive(true); } } - public class TestLLMCharacter_Save : TestLLM + public class TestLLMAgent_Save : TestLLM { - string saveName = "TestLLMCharacter_Save"; + string saveName = "TestLLMAgent_Save"; - public override LLMCharacter CreateLLMCharacter() + public override LLMAgent CreateLLMAgent() { - LLMCharacter llmCharacter = base.CreateLLMCharacter(); - llmCharacter.save = saveName; - llmCharacter.saveCache = true; + LLMAgent llmAgent = base.CreateLLMAgent(); + llmAgent.save = saveName; + llmAgent.saveCache = true; foreach (string filename in new string[] { - llmCharacter.GetJsonSavePath(saveName), - llmCharacter.GetCacheSavePath(saveName) + llmAgent.GetJsonSavePath(saveName), + llmAgent.GetCacheSavePath(saveName) }) if (File.Exists(filename)) File.Delete(filename); - return llmCharacter; + return llmAgent; } public override async Task Tests() @@ -536,8 +528,8 @@ public override async Task Tests() public void TestSave() { - string jsonPath = llmCharacter.GetJsonSavePath(saveName); - string cachePath = llmCharacter.GetCacheSavePath(saveName); + string jsonPath = llmAgent.GetJsonSavePath(saveName); + string cachePath = llmAgent.GetCacheSavePath(saveName); Assert.That(File.Exists(jsonPath)); Assert.That(File.Exists(cachePath)); string json = File.ReadAllText(jsonPath); @@ -546,15 +538,15 @@ public void TestSave() List chatHistory = JsonUtility.FromJson(json).chat; Assert.AreEqual(chatHistory.Count, 2); - Assert.AreEqual(chatHistory[0].role, llmCharacter.playerName); + Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); Assert.AreEqual(chatHistory[0].content, "hi"); - Assert.AreEqual(chatHistory[1].role, llmCharacter.AIName); + Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); - Assert.AreEqual(llmCharacter.chat.Count, chatHistory.Count + 1); + Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count + 1); for (int i = 0; i < chatHistory.Count; i++) { - Assert.AreEqual(chatHistory[i].role, llmCharacter.chat[i + 1].role); - Assert.AreEqual(chatHistory[i].content, llmCharacter.chat[i + 1].content); + Assert.AreEqual(chatHistory[i].role, llmAgent.chat[i + 1].role); + Assert.AreEqual(chatHistory[i].content, llmAgent.chat[i + 1].content); } } } From 9d75920743c7859227adcba45a797a6a8d87b2f5 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 17 Nov 2025 21:39:35 +0200 Subject: [PATCH 26/69] fix llmagent save test --- Tests/Runtime/TestLLM.cs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index adf96aae..2d51f90c 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -11,10 +11,16 @@ using UnityEngine.TestTools; using UnityEditor; using UnityEditor.TestTools.TestRunner.Api; -using ChatMessage = UndreamAI.LlamaLib.ChatMessage; namespace LLMUnityTests { + [Serializable] + public class ChatMessage + { + public string role; + public string content; + } + [Serializable] public class ChatListWrapper { @@ -512,11 +518,8 @@ public override LLMAgent CreateLLMAgent() LLMAgent llmAgent = base.CreateLLMAgent(); llmAgent.save = saveName; llmAgent.saveCache = true; - foreach (string filename in new string[] - { - llmAgent.GetJsonSavePath(saveName), - llmAgent.GetCacheSavePath(saveName) - }) if (File.Exists(filename)) File.Delete(filename); + foreach (string filename in new string[] {llmAgent.GetJsonSavePath(saveName), llmAgent.GetCacheSavePath(saveName)}) + if (File.Exists(filename)) File.Delete(filename); return llmAgent; } @@ -536,10 +539,10 @@ public void TestSave() File.Delete(jsonPath); File.Delete(cachePath); - List chatHistory = JsonUtility.FromJson(json).chat; - Assert.AreEqual(chatHistory.Count, 2); + List chatHistory = JsonUtility.FromJson("{ \"chat\": " + json + " }").chat; + Assert.AreEqual(chatHistory.Count, 4); Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); - Assert.AreEqual(chatHistory[0].content, "hi"); + Assert.AreEqual(chatHistory[0].content, query); Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count + 1); From 6be3137f2f96347a1ba1507f2f2fed8cbe36d2b8 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 18 Nov 2025 13:13:41 +0200 Subject: [PATCH 27/69] autosave history --- Runtime/LLMAgent.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 91e8d60e..73c613b0 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -310,6 +310,8 @@ public virtual async Task Chat(string query, LlamaLib.CharArrayCallback LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); SetCompletionParameters(); string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); + + if (addToHistory && result != null && save != "") _ = Save(save); completionCallback?.Invoke(); return result; } From 7d27df9a445d657d03f6e688e95208e2d559df04 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 18 Nov 2025 13:14:18 +0200 Subject: [PATCH 28/69] fix blas selection with exclusion list --- Runtime/LLMUnitySetup.cs | 5 +++-- Runtime/LlamaLib/LlamaLib.cs | 30 ++++++++++++++++++++++++++---- Tests/Runtime/TestLLM.cs | 26 ++++++++++++-------------- 3 files changed, 41 insertions(+), 20 deletions(-) diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index 876d797e..d86acbf8 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -242,7 +242,6 @@ public static string GetDownloadAssetPath(string relPath = "") static void InitializeOnLoadCommon() { - LoadPlayerPrefs(); LlamaLib.baseLibraryPath = Path.Combine(libraryPath, LlamaLib.GetPlatform(), "native"); } @@ -250,13 +249,15 @@ static void InitializeOnLoadCommon() [InitializeOnLoadMethod] static async Task InitializeOnLoad() { + LoadPlayerPrefs(); + LlamaLib.libraryExclusion = new List(){CUBLAS ? "tinyblas" : "cublas"}; InitializeOnLoadCommon(); await DownloadLibrary(); } #else [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] - void InitializeOnLoad() + static void InitializeOnLoad() { InitializeOnLoadCommon(); } diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 37bcf643..62ee973c 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -314,7 +314,8 @@ public static extern void LLMAgent_Add_Message_Static(IntPtr llm, // Desktop platform implementation with dynamic loading private static List instances = new List(); private static readonly object runtimeLock = new object(); - public static string baseLibraryPath = Assembly.GetExecutingAssembly().Location; + public static string baseLibraryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); + public static List libraryExclusion = new List(); private static IntPtr runtimeLibraryHandle = IntPtr.Zero; private IntPtr libraryHandle = IntPtr.Zero; private static int debugLevelGlobal = 0; @@ -391,7 +392,7 @@ private string GetRuntimeLibraryPath() return FindLibrary(libName); } - private void LoadLibraries(bool gpu) + private string[] GetAvailableArchitectures(bool gpu) { string architecturesString = Marshal.PtrToStringAnsi(Available_Architectures(gpu)); if (string.IsNullOrEmpty(architecturesString)) @@ -399,9 +400,30 @@ private void LoadLibraries(bool gpu) throw new InvalidOperationException("No architectures available for the specified GPU setting."); } - string[] libraries = architecturesString.Split(','); - Exception lastException = null; + string[] librariesOptions = architecturesString.Split(','); + List libraries = new List(); + foreach (string library in librariesOptions) + { + bool skip = false; + string libraryLower = library.ToLower(); + foreach (string exclusionKeyword in libraryExclusion) + { + if (libraryLower.Contains(exclusionKeyword)) + { + skip = true; + break; + } + } + if (skip) continue; + libraries.Add(library); + } + return libraries.ToArray(); + } + private void LoadLibraries(bool gpu) + { + string[] libraries = GetAvailableArchitectures(gpu); + Exception lastException = null; foreach (string library in libraries) { try diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 2d51f90c..2cd885c2 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -11,6 +11,7 @@ using UnityEngine.TestTools; using UnityEditor; using UnityEditor.TestTools.TestRunner.Api; +using LlamaLibCore = UndreamAI.LlamaLib.LlamaLib; namespace LLMUnityTests { @@ -48,7 +49,8 @@ public void RunFinished(ITestResultAdaptor result) public void TestStarted(ITestAdaptor test) { - LLMUnitySetup.CUBLAS = test.FullName.Contains("cublas"); + LLMUnitySetup.CUBLAS = test.FullName.Contains("cuBLAS"); + LlamaLibCore.libraryExclusion = new List(){LLMUnitySetup.CUBLAS ? "tinyblas" : "cublas"}; } public void TestFinished(ITestResultAdaptor result) @@ -554,7 +556,7 @@ public void TestSave() } } - public class TestLLM_CUDA : TestLLM + public class TestLLM_tinyBLAS : TestLLM { public override LLM CreateLLM() { @@ -567,27 +569,26 @@ public override void SetParameters() { base.SetParameters(); reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; - if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) - { - reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; - } + reply2 = "Sure! \"Ants are so sneaky, they can even build nests that look like giant spiders!\""; } public override void TestArchitecture() { - Assert.That(llm.architecture.Contains("cuda")); + Debug.Log(llm.architecture); + Debug.Log(LLMUnitySetup.CUBLAS); + Assert.That(llm.architecture.Contains("tinyblas")); } } - public class TestLLM_CUDA_full : TestLLM_CUDA + public class TestLLM_cuBLAS : TestLLM_tinyBLAS { public override void TestArchitecture() { - Assert.That(llm.architecture.Contains("cuda") && llm.architecture.Contains("full")); + Assert.That(llm.architecture.Contains("cublas")); } } - public class TestLLM_CUDA_full_attention : TestLLM_CUDA_full + public class TestLLM_cuBLAS_FA : TestLLM_cuBLAS { public override LLM CreateLLM() { @@ -599,10 +600,7 @@ public override LLM CreateLLM() public override void SetParameters() { base.SetParameters(); - if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer) - { - reply2 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; - } + reply1 = "Sure! Ants are known for their incredible teamwork, often working together to build complex structures like nests."; } } } From 68412f69e383cd645051136533ca125d2bfa4773 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 18 Nov 2025 15:13:16 +0200 Subject: [PATCH 29/69] adapt for chat history removal of system prompt --- Tests/Runtime/TestLLM.cs | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 2cd885c2..ac40cf36 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -287,20 +287,19 @@ public virtual async Task Tests() TestArchitecture(); await llmAgent.Tokenize("I", TestTokens); await llmAgent.Warmup(); - Assert.AreEqual(llmAgent.chat.Count, 1); - TestWarmup(); + TestPostChat(0); string reply = await llmAgent.Chat(query); TestChat(reply, reply1); - TestPostChat(3); + TestPostChat(2); llmAgent.systemPrompt = prompt2; reply = await llmAgent.Chat(query, TestStreamingChat); TestChat(reply, reply2); - TestPostChat(3); + TestPostChat(2); await llmAgent.Chat("bye!"); - TestPostChat(5); + TestPostChat(4); List embeddings = await llmAgent.Embeddings("hi how are you?"); TestEmbeddings(embeddings); @@ -316,11 +315,6 @@ public void TestTokens(List tokens) Assert.AreEqual(tokens, new List { 40 }); } - public void TestWarmup() - { - Assert.That(llmAgent.chat.Count == 1); - } - public void TestStreamingChat(string reply) { Assert.That(reply != ""); @@ -547,11 +541,11 @@ public void TestSave() Assert.AreEqual(chatHistory[0].content, query); Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); - Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count + 1); + Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count); for (int i = 0; i < chatHistory.Count; i++) { - Assert.AreEqual(chatHistory[i].role, llmAgent.chat[i + 1].role); - Assert.AreEqual(chatHistory[i].content, llmAgent.chat[i + 1].content); + Assert.AreEqual(chatHistory[i].role, llmAgent.chat[i].role); + Assert.AreEqual(chatHistory[i].content, llmAgent.chat[i].content); } } } From ea13827a098fed08d69e94579c8456bc3623d3e6 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 18 Nov 2025 16:47:36 +0200 Subject: [PATCH 30/69] functionality to return and show the service command --- Runtime/LLM.cs | 1 + Runtime/LlamaLib/LLMService.cs | 13 +++++++++++++ Runtime/LlamaLib/LlamaLib.cs | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index ac983c49..d90e52ec 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -502,6 +502,7 @@ await Task.Run(() => flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); llmService = new LLMService(llmlib, llmPtr); + LLMUnitySetup.Log($"Deploy server command: llamalib_**architecture**_server {llmService.Command}"); SetupServer(); llmService.Start(); diff --git a/Runtime/LlamaLib/LLMService.cs b/Runtime/LlamaLib/LLMService.cs index 3a9eb772..3cff34dc 100644 --- a/Runtime/LlamaLib/LLMService.cs +++ b/Runtime/LlamaLib/LLMService.cs @@ -122,5 +122,18 @@ public static IntPtr CreateLLM(LlamaLib llamaLib, string modelPath, int numSlots } } } + + public string Command + { + get + { + CheckLlamaLib(); + return Marshal.PtrToStringAnsi(llamaLib.LLMService_Command(llm)) ?? ""; + } + + set + { + } + } } } diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 62ee973c..0a405532 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -189,6 +189,10 @@ public IntPtr LLMService_Construct( public static extern IntPtr LLMService_From_Command_Static([MarshalAs(UnmanagedType.LPStr)] string paramsString); public IntPtr LLMService_From_Command(string paramsString) => LlamaLib.LLMService_From_Command_Static(paramsString); + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_Command")] + public static extern IntPtr LLMService_Command_Static(IntPtr llm); + public IntPtr LLMService_Command(IntPtr llm) => LlamaLib.LLMService_Command_Static(llm); + // LLMClient functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Construct")] public static extern IntPtr LLMClient_Construct_Static(IntPtr llm); @@ -480,6 +484,7 @@ private void LoadFunctionPointers() LLM_Embedding_Size = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embedding_Size"); LLMService_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); LLMService_From_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); + LLMService_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Command"); LLMClient_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); LLMClient_Construct_Remote = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); LLMClient_Set_SSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Set_SSL"); @@ -618,6 +623,9 @@ public delegate IntPtr LLMService_Construct_Delegate( [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLMService_From_Command_Delegate([MarshalAs(UnmanagedType.LPStr)] string paramsString); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_Command_Delegate(IntPtr llm); + // LLMClient functions [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate IntPtr LLMClient_Construct_Delegate(IntPtr llm); @@ -746,6 +754,7 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLM_Embedding_Size_Delegate LLM_Embedding_Size; public LLMService_Construct_Delegate LLMService_Construct; public LLMService_From_Command_Delegate LLMService_From_Command; + public LLMService_Command_Delegate LLMService_Command; public LLMClient_Construct_Delegate LLMClient_Construct; public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote; public LLMClient_Set_SSL_Delegate LLMClient_Set_SSL; From 35804a60d9c5aae17dc1b2d609d04b848bdf2df3 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 18 Nov 2025 16:50:19 +0200 Subject: [PATCH 31/69] remove chat template tests --- Tests/Runtime/TestLLMChatTemplates.cs | 200 --------------------- Tests/Runtime/TestLLMChatTemplates.cs.meta | 11 -- 2 files changed, 211 deletions(-) delete mode 100644 Tests/Runtime/TestLLMChatTemplates.cs delete mode 100644 Tests/Runtime/TestLLMChatTemplates.cs.meta diff --git a/Tests/Runtime/TestLLMChatTemplates.cs b/Tests/Runtime/TestLLMChatTemplates.cs deleted file mode 100644 index 10969196..00000000 --- a/Tests/Runtime/TestLLMChatTemplates.cs +++ /dev/null @@ -1,200 +0,0 @@ -// using LLMUnity; -// using System.Collections.Generic; -// using NUnit.Framework.Internal; -// using NUnit.Framework; - -// namespace LLMUnityTests -// { -// public class TestChatTemplate -// { -// List messages = new List() -// { -// new ChatMessage {role = "system", content = "you are a bot"}, -// new ChatMessage {role = "user", content = "Hello, how are you?"}, -// new ChatMessage {role = "assistant", content = "I'm doing great. How can I help you today?"}, -// new ChatMessage {role = "user", content = "I'd like to show off how chat templating works!"}, -// new ChatMessage {role = "assistant", content = "chat template is awesome"}, -// new ChatMessage {role = "user", content = "do you think so?"}, -// }; - -// [Test] -// public void TestChatML() -// { -// Assert.AreEqual( -// new ChatMLTemplate().ComputePrompt(messages, "user", "assistant"), -// "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n" -// ); -// } - -// [Test] -// public void TestGemma() -// { -// Assert.AreEqual( -// new GemmaTemplate().ComputePrompt(messages, "user", "assistant"), -// "user\nyou are a bot\n\nHello, how are you?\nmodel\nI'm doing great. How can I help you today?\nuser\nI'd like to show off how chat templating works!\nmodel\nchat template is awesome\nuser\ndo you think so?\nmodel\n" -// ); -// } - -// [Test] -// public void TestMistralInstruct() -// { -// Assert.AreEqual( -// new MistralInstructTemplate().ComputePrompt(messages, "user", "assistant"), -// "[INST] you are a bot\n\nHello, how are you? [/INST]I'm doing great. How can I help you today?[INST] I'd like to show off how chat templating works! [/INST]chat template is awesome[INST] do you think so? [/INST]" -// ); -// } - -// [Test] -// public void TestMistralChat() -// { -// Assert.AreEqual( -// new MistralChatTemplate().ComputePrompt(messages, "user", "assistant"), -// "[INST] you are a bot\n\n### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today?[INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome[INST] ### user: do you think so? [/INST]### assistant:" -// ); -// } - -// [Test] -// public void TestLLama2() -// { -// Assert.AreEqual( -// new LLama2Template().ComputePrompt(messages, "user", "assistant"), -// "[INST] <>\nyou are a bot\n<> Hello, how are you? [/INST]I'm doing great. How can I help you today? [INST] I'd like to show off how chat templating works! [/INST]chat template is awesome [INST] do you think so? [/INST]" -// ); -// } - -// [Test] -// public void TestLLama2Chat() -// { -// Assert.AreEqual( -// new LLama2ChatTemplate().ComputePrompt(messages, "user", "assistant"), -// "[INST] <>\nyou are a bot\n<> ### user: Hello, how are you? [/INST]### assistant: I'm doing great. How can I help you today? [INST] ### user: I'd like to show off how chat templating works! [/INST]### assistant: chat template is awesome [INST] ### user: do you think so? [/INST]### assistant:" -// ); -// } - -// [Test] -// public void TestLLama3Chat() -// { -// Assert.AreEqual( -// new LLama3ChatTemplate().ComputePrompt(messages, "user", "assistant"), -// "<|start_header_id|>system<|end_header_id|>\n\nyou are a bot<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nHello, how are you?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nI'm doing great. How can I help you today?<|eot_id|><|start_header_id|>user<|end_header_id|>\n\nI'd like to show off how chat templating works!<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\nchat template is awesome<|eot_id|><|start_header_id|>user<|end_header_id|>\n\ndo you think so?<|eot_id|><|start_header_id|>assistant<|end_header_id|>\n\n" -// ); -// } - -// [Test] -// public void TestAlpaca() -// { -// Assert.AreEqual( -// new AlpacaTemplate().ComputePrompt(messages, "user", "assistant"), -// "you are a bot\n\n### user: Hello, how are you?\n### assistant: I'm doing great. How can I help you today?\n### user: I'd like to show off how chat templating works!\n### assistant: chat template is awesome\n### user: do you think so?\n### assistant:" -// ); -// } - -// [Test] -// public void TestVicuna() -// { -// Assert.AreEqual( -// new VicunaTemplate().ComputePrompt(messages, "user", "assistant"), -// "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" -// ); -// } - -// [Test] -// public void TestPhi2() -// { -// Assert.AreEqual( -// new Phi2Template().ComputePrompt(messages, "user", "assistant"), -// "you are a bot\n\nuser: Hello, how are you?\nassistant: I'm doing great. How can I help you today?\nuser: I'd like to show off how chat templating works!\nassistant: chat template is awesome\nuser: do you think so?\nassistant:" -// ); -// } - -// [Test] -// public void TestPhi3() -// { -// Assert.AreEqual( -// new Phi3Template().ComputePrompt(messages, "user", "assistant"), -// "<|user|>\nyou are a bot\n\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" -// ); -// } - -// [Test] -// public void TestPhi3_5() -// { -// Assert.AreEqual( -// new Phi3_5Template().ComputePrompt(messages, "user", "assistant"), -// "<|system|>\nyou are a bot<|end|>\n<|user|>\nHello, how are you?<|end|>\n<|assistant|>\nI'm doing great. How can I help you today?<|end|>\n<|user|>\nI'd like to show off how chat templating works!<|end|>\n<|assistant|>\nchat template is awesome<|end|>\n<|user|>\ndo you think so?<|end|>\n<|assistant|>\n" -// ); -// } - -// [Test] -// public void TestPhi4Mini() -// { -// Assert.AreEqual( -// new Phi4MiniTemplate().ComputePrompt(messages, "user", "assistant"), -// "<|system|>you are a bot<|end|><|user|>Hello, how are you?<|end|><|assistant|>I'm doing great. How can I help you today?<|end|><|user|>I'd like to show off how chat templating works!<|end|><|assistant|>chat template is awesome<|end|><|user|>do you think so?<|end|><|assistant|>" -// ); -// } - -// [Test] -// public void TestPhi4() -// { -// Assert.AreEqual( -// new Phi4Template().ComputePrompt(messages, "user", "assistant"), -// "<|im_start|>system<|im_sep|>you are a bot<|im_end|><|im_start|>user<|im_sep|>Hello, how are you?<|im_end|><|im_start|>assistant<|im_sep|>I'm doing great. How can I help you today?<|im_end|><|im_start|>user<|im_sep|>I'd like to show off how chat templating works!<|im_end|><|im_start|>assistant<|im_sep|>chat template is awesome<|im_end|><|im_start|>user<|im_sep|>do you think so?<|im_end|><|im_start|>assistant<|im_sep|>" -// ); -// } - -// [Test] -// public void TestZephyr() -// { -// Assert.AreEqual( -// new ZephyrTemplate().ComputePrompt(messages, "user", "assistant"), -// "<|system|>\nyou are a bot\n<|user|>\nHello, how are you?\n<|assistant|>\nI'm doing great. How can I help you today?\n<|user|>\nI'd like to show off how chat templating works!\n<|assistant|>\nchat template is awesome\n<|user|>\ndo you think so?\n<|assistant|>\n" -// ); -// } - -// [Test] -// public void TestDeepSeekV2() -// { -// Assert.AreEqual( -// new DeepSeekV2Template().ComputePrompt(messages, "user", "assistant"), -// "<|begin▁of▁sentence|>you are a bot\n\nUser: Hello, how are you?\n\nAssistant: I'm doing great. How can I help you today?<|end▁of▁sentence|>User: I'd like to show off how chat templating works!\n\nAssistant: chat template is awesome<|end▁of▁sentence|>User: do you think so?\n\nAssistant:" -// ); -// } - -// [Test] -// public void TestDeepSeekV3() -// { -// Assert.AreEqual( -// new DeepSeekV3Template().ComputePrompt(messages, "user", "assistant"), -// "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>" -// ); -// } - -// [Test] -// public void TestDeepSeekR1() -// { -// Assert.AreEqual( -// new DeepSeekR1Template().ComputePrompt(messages, "user", "assistant"), -// "<|begin▁of▁sentence|>you are a bot\n\n<|User|>Hello, how are you?<|Assistant|>I'm doing great. How can I help you today?<|end▁of▁sentence|><|User|>I'd like to show off how chat templating works!<|Assistant|>chat template is awesome<|end▁of▁sentence|><|User|>do you think so?<|Assistant|>\n\n\n\n" -// ); -// } - -// [Test] -// public void TestQwen3() -// { -// Assert.AreEqual( -// new Qwen3Template().ComputePrompt(messages, "user", "assistant"), -// "<|im_start|>system\nyou are a bot<|im_end|>\n<|im_start|>user\nHello, how are you?<|im_end|>\n<|im_start|>assistant\nI'm doing great. How can I help you today?<|im_end|>\n<|im_start|>user\nI'd like to show off how chat templating works!<|im_end|>\n<|im_start|>assistant\nchat template is awesome<|im_end|>\n<|im_start|>user\ndo you think so?<|im_end|>\n<|im_start|>assistant\n\n\n\n\n" -// ); -// } - -// [Test] -// public void TestBitNet() -// { -// Assert.AreEqual( -// new BitNetTemplate().ComputePrompt(messages, "user", "assistant"), -// "System: you are a bot<|eot_id|>User: Hello, how are you?<|eot_id|>Assistant: I'm doing great. How can I help you today?<|eot_id|>User: I'd like to show off how chat templating works!<|eot_id|>Assistant: chat template is awesome<|eot_id|>User: do you think so?<|eot_id|>Assistant: " -// ); -// } -// } -// } diff --git a/Tests/Runtime/TestLLMChatTemplates.cs.meta b/Tests/Runtime/TestLLMChatTemplates.cs.meta deleted file mode 100644 index fde7665b..00000000 --- a/Tests/Runtime/TestLLMChatTemplates.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9ec2e4cf62123918282e59dc8af27359 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: From 84ecfc1e4034332172b348309c818228ff35fdcb Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 12:37:36 +0200 Subject: [PATCH 32/69] remove template functionality --- Editor/LLMEditor.cs | 5 +--- Runtime/LLM.cs | 48 ------------------------------------ Runtime/LLMUnitySetup.cs | 1 - Runtime/LlamaLib/LLM.cs | 38 +++++++++------------------- Runtime/LlamaLib/LlamaLib.cs | 18 -------------- 5 files changed, 13 insertions(+), 97 deletions(-) diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index 1863a631..c031b077 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -13,7 +13,6 @@ public class LLMEditor : PropertyEditor { private ReorderableList modelList; static float nameColumnWidth = 150f; - static float templateColumnWidth = 150f; static float textColumnWidth = 150f; static float includeInBuildColumnWidth = 30f; static float actionColumnWidth = 20f; @@ -134,7 +133,7 @@ static void ResetModelOptions() float[] GetColumnWidths(bool expandedView) { - List widths = new List() { actionColumnWidth, nameColumnWidth, templateColumnWidth }; + List widths = new List() { actionColumnWidth, nameColumnWidth }; if (expandedView) widths.AddRange(new List() { textColumnWidth, textColumnWidth }); widths.AddRange(new List() { includeInBuildColumnWidth, actionColumnWidth }); return widths.ToArray(); @@ -308,7 +307,6 @@ void OnEnable() int col = 0; Rect selectRect = rects[col++]; Rect nameRect = rects[col++]; - Rect templateRect = rects[col++]; Rect urlRect = new Rect(); Rect pathRect = new Rect(); if (expandedView) @@ -386,7 +384,6 @@ void OnEnable() int col = 0; EditorGUI.LabelField(rects[col++], ""); EditorGUI.LabelField(rects[col++], "Model"); - EditorGUI.LabelField(rects[col++], "Chat template"); if (expandedView) { EditorGUI.LabelField(rects[col++], "URL"); diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index d90e52ec..b12d3c0a 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -72,10 +72,6 @@ public class LLM : MonoBehaviour [Tooltip("Enable flash attention optimization (requires compatible model)")] [ModelExtras, SerializeField] private bool _flashAttention = false; - /// Chat template for conversation formatting ("auto" = detect from model) - [Tooltip("Chat template for conversation formatting (\"auto\" = detect from model)")] - [ModelAdvanced, SerializeField] private string _chatTemplate = "auto"; - /// Enable LLM reasoning ("thinking" mode) [Tooltip("Enable LLM reasoning ('thinking' mode)")] [ModelAdvanced, SerializeField] private bool _reasoning = false; @@ -178,13 +174,6 @@ public string model set => SetModel(value); } - /// Chat template for conversation formatting ("auto" = detect from model) - public string chatTemplate - { - get => _chatTemplate; - set => SetTemplate(value); - } - /// Enable LLM reasoning ('thinking' mode) public bool reasoning { @@ -313,17 +302,6 @@ public string SSLKey public int minContextLength = 0; public int maxContextLength = 0; - public static readonly string[] ChatTemplates = new string[] - { - "auto", "chatml", "llama2", "llama2-sys", "llama2-sys-bos", "llama2-sys-strip", - "mistral-v1", "mistral-v3", "mistral-v3-tekken", "mistral-v7", "mistral-v7-tekken", - "phi3", "phi4", "falcon3", "zephyr", "monarch", "gemma", "orion", "openchat", - "vicuna", "vicuna-orca", "deepseek", "deepseek2", "deepseek3", "command-r", - "llama3", "chatglm3", "chatglm4", "glmedge", "minicpm", "exaone3", "exaone4", - "rwkv-world", "granite", "gigachat", "megrez", "yandex", "bailing", "llama4", - "smolvlm", "hunyuan-moe", "gpt-oss", "hunyuan-dense", "kimi-k2" - }; - private LlamaLib llmlib = null; // [Local, SerializeField] protected LLMService _llmService; @@ -510,7 +488,6 @@ await Task.Run(() => if (started) { ApplyLoras(); - SetTemplate(chatTemplate); SetReasoning(reasoning); } } @@ -589,31 +566,6 @@ public void SetModel(string path) #endif } - /// - /// Sets the chat template for message formatting. - /// - /// Template name (see ChatTemplates array for options) - /// Mark object dirty in editor - public void SetTemplate(string templateName, bool setDirty = true) - { - if (_chatTemplate == templateName) return; - if (!ChatTemplates.Contains(templateName)) - { - LLMUnitySetup.LogError($"Unsupported chat template: {templateName}"); - return; - } - - _chatTemplate = templateName; - if (started) - { - llmService.SetTemplate(_chatTemplate == "auto" ? "" : _chatTemplate); - } - -#if UNITY_EDITOR - if (setDirty && !EditorApplication.isPlaying) EditorUtility.SetDirty(this); -#endif - } - /// /// Enable LLM reasoning ("thinking" mode) /// diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index d86acbf8..c2f14ad5 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -12,7 +12,6 @@ using UndreamAI.LlamaLib; /// @defgroup llm LLM -/// @defgroup template Chat Templates /// @defgroup utils Utils namespace LLMUnity { diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs index fde89b61..d0b695f0 100644 --- a/Runtime/LlamaLib/LLM.cs +++ b/Runtime/LlamaLib/LLM.cs @@ -42,7 +42,7 @@ public abstract class LLM : IDisposable protected readonly object _disposeLock = new object(); public bool disposed = false; - protected LLM() { } + protected LLM() {} protected LLM(LlamaLib llamaLibInstance) { @@ -76,20 +76,13 @@ protected void CheckLlamaLib() } } - public virtual void Dispose() { } + public virtual void Dispose() {} ~LLM() { Dispose(); } - public string GetTemplate() - { - CheckLlamaLib(); - IntPtr result = llamaLib.LLM_Get_Template(llm); - return Marshal.PtrToStringAnsi(result) ?? string.Empty; - } - public string ApplyTemplate(JArray messages = null) { if (messages == null) @@ -113,7 +106,7 @@ public List Tokenize(string content) JArray json = JArray.Parse(resultStr); ret = json?.ToObject>(); } - catch { } + catch {} return ret; } @@ -151,7 +144,7 @@ public List Embeddings(string content) JArray json = JArray.Parse(resultStr); ret = json?.ToObject>(); } - catch { } + catch {} return ret; } @@ -171,7 +164,7 @@ public JObject GetCompletionParameters() { parameters = JObject.Parse(parametersString); } - catch { } + catch {} return parameters; } @@ -218,9 +211,9 @@ public async Task CompletionAsync(string prompt, LlamaLib.CharArrayCallb // LLMLocal class public abstract class LLMLocal : LLM { - protected LLMLocal() : base() { } + protected LLMLocal() : base() {} - protected LLMLocal(LlamaLib llamaLibInstance) : base(llamaLibInstance) { } + protected LLMLocal(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} public string SaveSlot(int idSlot, string filepath) { @@ -250,16 +243,9 @@ public void Cancel(int idSlot) // LLMProvider class public abstract class LLMProvider : LLMLocal { - protected LLMProvider() : base() { } + protected LLMProvider() : base() {} - protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) { } - - - public void SetTemplate(string template) - { - CheckLlamaLib(); - llamaLib.LLM_Set_Template(llm, template ?? string.Empty); - } + protected LLMProvider(LlamaLib llamaLibInstance) : base(llamaLibInstance) {} public void EnableReasoning(bool enableReasoning) { @@ -310,7 +296,7 @@ public List ParseLoraListJSON(string result) )); } } - catch { } + catch {} return loras; } @@ -413,7 +399,7 @@ public override void Dispose() { llamaLib.LLM_Delete(llm); } - catch (Exception) { } + catch (Exception) {} } llamaLib?.Dispose(); llamaLib = null; @@ -423,4 +409,4 @@ public override void Dispose() } } } -} \ No newline at end of file +} diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 0a405532..144dc1f0 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -54,10 +54,6 @@ public LlamaLib(bool gpu = false) public static extern void LLM_Enable_Reasoning_Static(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); public void LLM_Enable_Reasoning(IntPtr llm, bool enable_reasoning) => LLM_Enable_Reasoning_Static(llm, enable_reasoning); - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Template")] - public static extern IntPtr LLM_Get_Template_Static(IntPtr llm); - public IntPtr LLM_Get_Template(IntPtr llm) => LLM_Get_Template_Static(llm); - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Apply_Template")] public static extern IntPtr LLM_Apply_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); public IntPtr LLM_Apply_Template(IntPtr llm, string messages_as_json) => LLM_Apply_Template_Static(llm, messages_as_json); @@ -79,10 +75,6 @@ public LlamaLib(bool gpu = false) public IntPtr LLM_Completion(IntPtr llm, string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false) => LlamaLib.LLM_Completion_Static(llm, query, callback, id_slot, return_response_json); // LLMLocal functions - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Template")] - public static extern void LLM_Set_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); - public void LLM_Set_Template(IntPtr llm, string template) => LLM_Set_Template_Static(llm, template); - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Save_Slot")] public static extern IntPtr LLM_Save_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); public IntPtr LLM_Save_Slot(IntPtr llm, int id_slot, string filepath) => LlamaLib.LLM_Save_Slot_Static(llm, id_slot, filepath); @@ -457,8 +449,6 @@ private void LoadFunctionPointers() LLM_Debug = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Debug"); LLM_Logging_Callback = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Callback"); LLM_Logging_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Stop"); - LLM_Get_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Template"); - LLM_Set_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Template"); LLM_Enable_Reasoning = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Enable_Reasoning"); LLM_Apply_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Apply_Template"); LLM_Tokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); @@ -531,12 +521,6 @@ private void LoadFunctionPointers() public delegate void LLM_Logging_Stop_Delegate(); // Main lib - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Get_Template_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Set_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string template); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLM_Enable_Reasoning_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); @@ -727,8 +711,6 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLM_Debug_Delegate LLM_Debug; public LLM_Logging_Callback_Delegate LLM_Logging_Callback; public LLM_Logging_Stop_Delegate LLM_Logging_Stop; - public LLM_Get_Template_Delegate LLM_Get_Template; - public LLM_Set_Template_Delegate LLM_Set_Template; public LLM_Enable_Reasoning_Delegate LLM_Enable_Reasoning; public LLM_Apply_Template_Delegate LLM_Apply_Template; public LLM_Tokenize_Delegate LLM_Tokenize; From f11d0bae17062cfce82dfd3811dfa10d116e1a9b Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 13:14:21 +0200 Subject: [PATCH 33/69] Option to debug the LLM prompts --- Runtime/LLMAgent.cs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 73c613b0..fad745c3 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -28,6 +28,10 @@ public class LLMAgent : LLMClient [Tooltip("Save LLM processing cache for faster reload (~100MB per agent)")] [LLM] public bool saveCache = false; + /// Save LLM processing cache for faster reload (~100MB per agent) + [Tooltip("Debug LLM prompts")] + [LLM] public bool debugPrompt = false; + /// Server slot to use for processing (affects caching behavior) [Tooltip("Server slot to use for processing (affects caching behavior)")] [ModelAdvanced, SerializeField] protected int _slot = -1; @@ -292,6 +296,14 @@ public virtual async Task AddAssistantMessage(string content) #endregion #region Chat Functionality + /// \cond HIDE + [Serializable] + public class CompletionResponseJson + { + public string prompt; + public string content; + } + /// \endcond /// /// Processes a user query asynchronously and generates an AI response using conversation context. /// The query and response are automatically added to chat history if specified. @@ -309,7 +321,13 @@ public virtual async Task Chat(string query, LlamaLib.CharArrayCallback // Wrap callback to ensure it runs on the main thread LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); SetCompletionParameters(); - string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback); + string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, returnResponseJson: debugPrompt); + if (debugPrompt) + { + CompletionResponseJson responseJson = JsonUtility.FromJson(result); + LLMUnitySetup.Log(responseJson.prompt); + result = responseJson.content; + } if (addToHistory && result != null && save != "") _ = Save(save); completionCallback?.Invoke(); From 2cf2e41397ebad4042a9adf18576970e926a13aa Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 13:14:37 +0200 Subject: [PATCH 34/69] show grammar with box --- Editor/LLMClientEditor.cs | 2 +- Runtime/LLMClient.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Editor/LLMClientEditor.cs b/Editor/LLMClientEditor.cs index 50b7cac2..1e5cad3a 100644 --- a/Editor/LLMClientEditor.cs +++ b/Editor/LLMClientEditor.cs @@ -27,7 +27,7 @@ public override void AddModelSettings(SerializedObject llmScriptSO) { EditorApplication.delayCall += () => { - string path = EditorUtility.OpenFilePanelWithFilters("Select a gbnf grammar file", "", new string[] { "Grammar Files", "json,gbnf" }); + string path = EditorUtility.OpenFilePanelWithFilters("Select a grammar file", "", new string[] { "Grammar Files", "json,gbnf" }); if (!string.IsNullOrEmpty(path)) { ((LLMAgent)target).LoadGrammar(path); diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 24ebabf0..36e371e6 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -50,7 +50,7 @@ public class LLMClient : MonoBehaviour /// Grammar constraints for output formatting (GBNF or JSON schema format) [Tooltip("Grammar constraints for output formatting (GBNF or JSON schema format)")] - [ModelAdvanced, SerializeField] protected string _grammar = ""; + [ModelAdvanced, TextArea(1, 10), SerializeField] protected string _grammar = ""; // Completion Parameters /// Maximum tokens to generate (-1 = unlimited) From 556e63e096110664927065fe8823e23f0bf7748c Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 13:16:05 +0200 Subject: [PATCH 35/69] comment typo --- Runtime/LLMAgent.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index fad745c3..303e58f3 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -28,7 +28,7 @@ public class LLMAgent : LLMClient [Tooltip("Save LLM processing cache for faster reload (~100MB per agent)")] [LLM] public bool saveCache = false; - /// Save LLM processing cache for faster reload (~100MB per agent) + /// Debug LLM prompts [Tooltip("Debug LLM prompts")] [LLM] public bool debugPrompt = false; From 9250efd487aaab9381888c780a143d3c3b23b731 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 14:39:34 +0200 Subject: [PATCH 36/69] remove save cache functionality --- Runtime/LLMAgent.cs | 128 ++++++++-------------------------------- Runtime/LLMCharacter.cs | 2 +- 2 files changed, 24 insertions(+), 106 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 303e58f3..b46a08ca 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -24,10 +24,6 @@ public class LLMAgent : LLMClient [Tooltip("Filename for saving chat history (saved in Application.persistentDataPath)")] [LLM] public string save = ""; - /// Save LLM processing cache for faster reload (~100MB per agent) - [Tooltip("Save LLM processing cache for faster reload (~100MB per agent)")] - [LLM] public bool saveCache = false; - /// Debug LLM prompts [Tooltip("Debug LLM prompts")] [LLM] public bool debugPrompt = false; @@ -188,27 +184,10 @@ protected override LLMLocal GetCaller() /// protected virtual async Task InitHistory() { - await ClearChat(); - await LoadHistory(); - } - - /// - /// Loads conversation history from the saved file if it exists. - /// - protected virtual async Task LoadHistory() - { - if (string.IsNullOrEmpty(save) || !File.Exists(GetJsonSavePath(save))) - { - return; - } - - try + await ClearHistory(); + if (!string.IsNullOrEmpty(save) && File.Exists(GetSavePath())) { - await Load(save); - } - catch (System.Exception ex) - { - LLMUnitySetup.LogError($"Failed to load chat history from '{save}': {ex.Message}"); + await LoadHistory(); } } @@ -218,36 +197,16 @@ protected virtual async Task LoadHistory() /// /// Gets the full path for a file in the persistent data directory. /// - /// Filename or relative path /// Full file path in persistent data directory - protected virtual string GetSavePath(string filename) + public virtual string GetSavePath() { - if (string.IsNullOrEmpty(filename)) + if (string.IsNullOrEmpty(save)) { - throw new System.ArgumentNullException(nameof(filename)); + LLMUnitySetup.LogError("No save path specified"); + return null; } - return Path.Combine(Application.persistentDataPath, filename).Replace('\\', '/'); - } - - /// - /// Gets the save path for chat history JSON file. - /// - /// Base filename (without extension) - /// Full path to JSON file - public virtual string GetJsonSavePath(string filename) - { - return GetSavePath(filename + ".json"); - } - - /// - /// Gets the save path for LLM cache file. - /// - /// Base filename (without extension) - /// Full path to cache file - public virtual string GetCacheSavePath(string filename) - { - return GetSavePath(filename + ".cache"); + return Path.Combine(Application.persistentDataPath, save).Replace('\\', '/'); } #endregion @@ -256,7 +215,7 @@ public virtual string GetCacheSavePath(string filename) /// /// Clears the entire conversation history. /// - public virtual async Task ClearChat() + public virtual async Task ClearHistory() { await CheckLLMClient(checkConnection: false); llmAgent.ClearHistory(); @@ -329,7 +288,7 @@ public virtual async Task Chat(string query, LlamaLib.CharArrayCallback result = responseJson.content; } - if (addToHistory && result != null && save != "") _ = Save(save); + if (addToHistory && result != null && save != "") _ = SaveHistory(); completionCallback?.Invoke(); return result; } @@ -375,18 +334,17 @@ public virtual async Task Warmup(string query, EmptyCallback completionCallback /// /// Saves the conversation history and optionally the LLM cache to disk. /// - /// Base filename (without extension) for saving - /// Result message from cache save operation, or null if cache not saved - public virtual async Task Save(string filename) + public virtual async Task SaveHistory() { - if (string.IsNullOrEmpty(filename)) + if (string.IsNullOrEmpty(save)) { - throw new System.ArgumentNullException(nameof(filename)); + LLMUnitySetup.LogError("No save path specified"); + return; } await CheckLLMClient(); // Save chat history - string jsonPath = GetJsonSavePath(filename); + string jsonPath = GetSavePath(); string directory = Path.GetDirectoryName(jsonPath); if (!Directory.Exists(directory)) @@ -399,48 +357,29 @@ public virtual async Task Save(string filename) llmAgent.SaveHistory(jsonPath); LLMUnitySetup.Log($"Saved chat history to: {jsonPath}"); } - catch (System.Exception ex) + catch (Exception ex) { LLMUnitySetup.LogError($"Failed to save chat history to '{jsonPath}': {ex.Message}", true); } - - // Save cache if enabled and not remote - if (!remote && saveCache) - { - try - { - string cachePath = GetCacheSavePath(filename); - string result = llmAgent.SaveSlot(cachePath); - LLMUnitySetup.Log($"Saved LLM cache to: {cachePath}"); - return result; - } - catch (System.Exception ex) - { - LLMUnitySetup.LogWarning($"Failed to save LLM cache: {ex.Message}"); - } - } - - return null; } /// /// Loads conversation history and optionally the LLM cache from disk. /// - /// Base filename (without extension) to load from - /// Result message from cache load operation, or null if cache not loaded - public virtual async Task Load(string filename) + public virtual async Task LoadHistory() { - if (string.IsNullOrEmpty(filename)) + if (string.IsNullOrEmpty(save)) { - throw new System.ArgumentNullException(nameof(filename)); + LLMUnitySetup.LogError("No save path specified"); + return; } await CheckLLMClient(); // Load chat history - string jsonPath = GetJsonSavePath(filename); + string jsonPath = GetSavePath(); if (!File.Exists(jsonPath)) { - throw new FileNotFoundException($"Chat history file not found: {jsonPath}"); + LLMUnitySetup.LogError($"Chat history file not found: {jsonPath}"); } try @@ -448,31 +387,10 @@ public virtual async Task Load(string filename) llmAgent.LoadHistory(jsonPath); LLMUnitySetup.Log($"Loaded chat history from: {jsonPath}"); } - catch (System.Exception ex) + catch (Exception ex) { LLMUnitySetup.LogError($"Failed to load chat history from '{jsonPath}': {ex.Message}", true); } - - // Load cache if enabled and not remote - if (!remote && saveCache) - { - string cachePath = GetCacheSavePath(filename); - if (File.Exists(cachePath)) - { - try - { - string result = llmAgent.LoadSlot(cachePath); - LLMUnitySetup.Log($"Loaded LLM cache from: {cachePath}"); - return result; - } - catch (System.Exception ex) - { - LLMUnitySetup.LogWarning($"Failed to load LLM cache from '{cachePath}': {ex.Message}"); - } - } - } - - return null; } #endregion diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs index f810e76f..2025e952 100644 --- a/Runtime/LLMCharacter.cs +++ b/Runtime/LLMCharacter.cs @@ -28,7 +28,7 @@ public LLMCharacter() public void SetPrompt(string newPrompt, bool clearChat = true) { systemPrompt = newPrompt; - if (clearChat) _ = ClearChat(); + if (clearChat) _ = ClearHistory(); } } } From 7726186a1e240452e7186e0ea28509aad7505aca Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 14:39:52 +0200 Subject: [PATCH 37/69] adapt tests to recent changes --- Tests/Runtime/TestLLM.cs | 58 +++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index ac40cf36..44f8cdb5 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -161,8 +161,8 @@ public virtual void SetParameters() prompt = "You are a scientific assistant and provide short and concise info on the user questions"; prompt2 = "You are a funny assistant and answer the user questions with smartass comments"; query = "Can you tell me some fun fact about ants in one sentence?"; - reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have human-like intelligence."; - reply2 = "Sure! \"Ants are so sneaky, they can even build nests that look like giant spiders!\""; + reply1 = "Sure! Ants are known for their incredible teamwork, often working together to build complex structures like nests."; + reply2 = "Of course! Ants are so smart and hardworking that they can build intricate nests with just a few workers."; tokens1 = 20; tokens2 = 9; } @@ -296,13 +296,13 @@ public virtual async Task Tests() llmAgent.systemPrompt = prompt2; reply = await llmAgent.Chat(query, TestStreamingChat); TestChat(reply, reply2); - TestPostChat(2); - - await llmAgent.Chat("bye!"); TestPostChat(4); - List embeddings = await llmAgent.Embeddings("hi how are you?"); - TestEmbeddings(embeddings); + await llmAgent.ClearHistory(); + TestPostChat(0); + + await llmAgent.Chat("bye!"); + TestPostChat(2); } public virtual void TestArchitecture() @@ -336,11 +336,6 @@ public void TestPostChat(int num) Assert.That(llmAgent.chat.Count == num); } - public void TestEmbeddings(List embeddings) - { - Assert.That(embeddings.Count == 1024); - } - public virtual void OnDestroy() { if (Monitor.IsEntered(_lock)) @@ -422,8 +417,8 @@ public override LLM CreateLLM() public override void SetParameters() { base.SetParameters(); - reply1 = "Ants are known for their ability to build complex structures, though it's not always obvious."; - reply2 = "Sure! \"Ants are so sneaky, they can even steal your lunch!\""; + reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't speak."; + reply2 = "Of course! Ants are so sneaky and efficient that they can build a house in just a few days without any help from humans."; tokens1 = 5; tokens2 = 9; loraWeight = 0.9f; @@ -484,6 +479,12 @@ public override LLMAgent CreateLLMAgent() llmAgent.remote = true; return llmAgent; } + + public override void SetParameters() + { + base.SetParameters(); + reply2 = "Of course! Ants are so smart—they can remember the location of food sources and even solve problems without words."; + } } public class TestLLM_Double : TestLLM @@ -507,15 +508,14 @@ public override async Task Init() public class TestLLMAgent_Save : TestLLM { - string saveName = "TestLLMAgent_Save"; + string saveName = "TestLLMAgent_Save.json"; public override LLMAgent CreateLLMAgent() { LLMAgent llmAgent = base.CreateLLMAgent(); llmAgent.save = saveName; - llmAgent.saveCache = true; - foreach (string filename in new string[] {llmAgent.GetJsonSavePath(saveName), llmAgent.GetCacheSavePath(saveName)}) - if (File.Exists(filename)) File.Delete(filename); + string savePath = llmAgent.GetSavePath(); + if (File.Exists(savePath)) File.Delete(savePath); return llmAgent; } @@ -527,18 +527,15 @@ public override async Task Tests() public void TestSave() { - string jsonPath = llmAgent.GetJsonSavePath(saveName); - string cachePath = llmAgent.GetCacheSavePath(saveName); - Assert.That(File.Exists(jsonPath)); - Assert.That(File.Exists(cachePath)); - string json = File.ReadAllText(jsonPath); - File.Delete(jsonPath); - File.Delete(cachePath); + string savePath = llmAgent.GetSavePath(); + Assert.That(File.Exists(savePath)); + string json = File.ReadAllText(savePath); + File.Delete(savePath); List chatHistory = JsonUtility.FromJson("{ \"chat\": " + json + " }").chat; - Assert.AreEqual(chatHistory.Count, 4); + Assert.AreEqual(chatHistory.Count, 2); Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); - Assert.AreEqual(chatHistory[0].content, query); + Assert.AreEqual(chatHistory[0].content, "bye!"); Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count); @@ -559,13 +556,6 @@ public override LLM CreateLLM() return llm; } - public override void SetParameters() - { - base.SetParameters(); - reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; - reply2 = "Sure! \"Ants are so sneaky, they can even build nests that look like giant spiders!\""; - } - public override void TestArchitecture() { Debug.Log(llm.architecture); From ed276ca71c2f6388dd434dbb25d8855c2461055e Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 15:30:14 +0200 Subject: [PATCH 38/69] update Samples to v3 --- Samples~/ChatBot/ChatBot.cs | 4 +- Samples~/ChatBot/Scene.unity | 82 +++---- Samples~/FunctionCalling/FunctionCalling.cs | 2 +- Samples~/FunctionCalling/Scene.unity | 93 ++++---- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 14 +- Samples~/KnowledgeBaseGame/Scene.unity | 208 ++++++++---------- Samples~/MobileDemo/MobileDemo.cs | 2 +- Samples~/MobileDemo/Scene.unity | 92 ++++---- .../MultipleCharacters/MultipleCharacters.cs | 2 +- Samples~/MultipleCharacters/Scene.unity | 126 +++++------ Samples~/RAG/RAGAndLLM_Sample.cs | 7 +- Samples~/RAG/RAGAndLLM_Scene.unity | 200 ++++++++--------- Samples~/RAG/RAG_Sample.cs | 4 +- Samples~/SimpleInteraction/Scene.unity | 82 +++---- .../SimpleInteraction/SimpleInteraction.cs | 2 +- 15 files changed, 393 insertions(+), 527 deletions(-) diff --git a/Samples~/ChatBot/ChatBot.cs b/Samples~/ChatBot/ChatBot.cs index 4897018f..4b2b019a 100644 --- a/Samples~/ChatBot/ChatBot.cs +++ b/Samples~/ChatBot/ChatBot.cs @@ -68,7 +68,7 @@ Bubble AddBubble(string message, bool isPlayerMessage) void ShowLoadedMessages() { - for (int i = 1; i < llmAgent.chat.Count; i++) AddBubble(llmAgent.chat[i].Content, i % 2 == 1); + for (int i = 1; i < llmAgent.chat.Count; i++) AddBubble(llmAgent.chat[i].content, i % 2 == 1); } void onInputFieldSubmit(string newText) @@ -85,7 +85,7 @@ void onInputFieldSubmit(string newText) AddBubble(message, true); Bubble aiBubble = AddBubble("...", false); - Task chatTask = llmAgent.ChatAsync(message, aiBubble.SetText, AllowInput); + Task chatTask = llmAgent.Chat(message, aiBubble.SetText, AllowInput); inputBubble.SetText(""); } diff --git a/Samples~/ChatBot/Scene.unity b/Samples~/ChatBot/Scene.unity index b3ccfb22..c7e6122e 100644 --- a/Samples~/ChatBot/Scene.unity +++ b/Samples~/ChatBot/Scene.unity @@ -178,7 +178,7 @@ MonoBehaviour: font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} fontSize: 16 bubbleWidth: 600 - llmCharacter: {fileID: 1844795171} + llmAgent: {fileID: 1844795172} textPadding: 10 bubbleSpacing: 10 sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} @@ -658,26 +658,22 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 --- !u!1 &1051131186 @@ -1100,9 +1096,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1844795170} - - component: {fileID: 1844795171} + - component: {fileID: 1844795172} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1123,7 +1119,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &1844795171 +--- !u!114 &1844795172 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -1132,25 +1128,20 @@ MonoBehaviour: m_GameObject: {fileID: 1844795168} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - llm: {fileID: 817827756} - host: localhost - port: 13333 - numRetries: 10 - APIKey: - save: - saveCache: 0 - debugPrompt: 0 - stream: 1 - grammar: + _remote: 0 + _llm: {fileID: 817827756} + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 - slot: -1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -1158,25 +1149,20 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - playerName: user - AIName: assistant - prompt: A chat between a curious human and an artificial intelligence assistant. + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: --- !u!1 &2011827136 GameObject: m_ObjectHideFlags: 0 diff --git a/Samples~/FunctionCalling/FunctionCalling.cs b/Samples~/FunctionCalling/FunctionCalling.cs index 4978eba4..c4cb6d5a 100644 --- a/Samples~/FunctionCalling/FunctionCalling.cs +++ b/Samples~/FunctionCalling/FunctionCalling.cs @@ -72,7 +72,7 @@ string CallFunction(string functionName) async void onInputFieldSubmit(string message) { playerText.interactable = false; - string functionName = await llmAgent.ChatAsync(ConstructPrompt(message)); + string functionName = await llmAgent.Chat(ConstructPrompt(message)); string result = CallFunction(functionName); AIText.text = $"Calling {functionName}\n{result}"; playerText.interactable = true; diff --git a/Samples~/FunctionCalling/Scene.unity b/Samples~/FunctionCalling/Scene.unity index dc6a2508..06789d84 100644 --- a/Samples~/FunctionCalling/Scene.unity +++ b/Samples~/FunctionCalling/Scene.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 10 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,12 +38,13 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657832, g: 0.49641222, b: 0.57481664, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -66,6 +67,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -163,7 +167,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 162e77d443c2df77b8297c1dcdfbfdce, type: 3} m_Name: m_EditorClassIdentifier: - llmCharacter: {fileID: 498662973} + llmAgent: {fileID: 498662973} playerText: {fileID: 1966107897} AIText: {fileID: 887085510} --- !u!1 &158550913 @@ -441,7 +445,7 @@ GameObject: - component: {fileID: 498662972} - component: {fileID: 498662973} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -471,22 +475,18 @@ MonoBehaviour: m_GameObject: {fileID: 498662970} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 1047848254} - APIKey: - host: localhost - port: 13333 - numRetries: 10 - save: - saveCache: 0 - debugPrompt: 0 + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: numPredict: -1 - slot: -1 - grammar: cachePrompt: 1 seed: 0 temperature: 0.2 @@ -496,25 +496,20 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - stream: 1 - playerName: user - AIName: assistant - prompt: You are an AI assistant and your task is to answer multiple choice question - setNKeepToPrompt: 1 - chat: [] - grammarString: + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: You are an AI assistant and your task is to answer multiple choice + questions --- !u!1 &724531319 GameObject: m_ObjectHideFlags: 0 @@ -936,8 +931,9 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 909474451} m_Enabled: 1 - serializedVersion: 11 + serializedVersion: 10 m_Type: 1 + m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -987,12 +983,8 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 --- !u!4 &909474453 Transform: m_ObjectHideFlags: 0 @@ -1038,29 +1030,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &1047848255 Transform: m_ObjectHideFlags: 0 diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index 5c971e83..211f1480 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -95,20 +95,20 @@ public async Task CreateEmbeddings() } } - public List Retrieval(string question) + public async Task> Retrieval(string question) { // find similar questions for the current bot using the RAG - (string[] similarQuestions, _) = rag.Search(question, numRAGResults, currentBotName); + (string[] similarQuestions, _) = await rag.Search(question, numRAGResults, currentBotName); // get the answers of the similar questions List similarAnswers = new List(); foreach (string similarQuestion in similarQuestions) similarAnswers.Add(botQuestionAnswers[currentBotName][similarQuestion]); return similarAnswers; } - public string ConstructPrompt(string question) + public async Task ConstructPrompt(string question) { // get similar answers from the RAG - List similarAnswers = Retrieval(question); + List similarAnswers = await Retrieval(question); // create the prompt using the user question and the similar answers string answers = ""; foreach (string similarAnswer in similarAnswers) answers += $"\n- {similarAnswer}"; @@ -118,12 +118,12 @@ public string ConstructPrompt(string question) return prompt; } - protected override void OnInputFieldSubmit(string question) + protected override async void OnInputFieldSubmit(string question) { PlayerText.interactable = false; SetAIText("..."); - string prompt = ConstructPrompt(question); - _ = llmAgent.ChatAsync(prompt, SetAIText, AIReplyComplete); + string prompt = await ConstructPrompt(question); + _ = llmAgent.Chat(prompt, SetAIText, AIReplyComplete); } protected override void DropdownChange(int selection) diff --git a/Samples~/KnowledgeBaseGame/Scene.unity b/Samples~/KnowledgeBaseGame/Scene.unity index 2fee60eb..7704e815 100644 --- a/Samples~/KnowledgeBaseGame/Scene.unity +++ b/Samples~/KnowledgeBaseGame/Scene.unity @@ -1047,7 +1047,7 @@ MonoBehaviour: Answer1: {fileID: 1290124570} Answer2: {fileID: 504847329} Answer3: {fileID: 1278063795} - llmCharacter: {fileID: 1275496423} + llmAgent: {fileID: 1275496425} rag: {fileID: 1400265393} numRAGResults: 3 --- !u!1 &495835622 @@ -2058,30 +2058,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &758599403 Transform: m_ObjectHideFlags: 0 @@ -4327,15 +4321,30 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1275496424} - - component: {fileID: 1275496423} + - component: {fileID: 1275496425} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1275496423 +--- !u!4 &1275496424 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1275496422} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 887.5697, y: 599.9278, z: -4.22581} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1275496425 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -4344,24 +4353,20 @@ MonoBehaviour: m_GameObject: {fileID: 1275496422} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 2142407556} - APIKey: - host: localhost - port: 13333 - numRetries: 10 - save: - saveCache: 0 - debugPrompt: 0 - slot: -1 - grammar: + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -4369,41 +4374,20 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - stream: 1 - playerName: user - AIName: assistant - prompt: A chat between a curious human and an artificial intelligence assistant. + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: ---- !u!4 &1275496424 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1275496422} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 887.5697, y: 599.9278, z: -4.22581} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1278063793 GameObject: m_ObjectHideFlags: 0 @@ -5177,7 +5161,6 @@ GameObject: - component: {fileID: 1400265389} - component: {fileID: 1400265393} - component: {fileID: 1400265392} - - component: {fileID: 1400265395} - component: {fileID: 1400265394} m_Layer: 0 m_Name: RAG @@ -5214,12 +5197,30 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 758599402} - APIKey: - host: localhost - port: 13333 + _APIKey: + _host: localhost + _port: 13333 numRetries: 10 + _grammar: + numPredict: -1 + cachePrompt: 1 + seed: 0 + temperature: 0.2 + topK: 40 + topP: 0.9 + minP: 0.05 + repeatPenalty: 1.1 + presencePenalty: 0 + frequencyPenalty: 0 + typicalP: 1 + repeatLastN: 64 + mirostat: 0 + mirostatTau: 5 + mirostatEta: 0.1 + nProbs: 0 + ignoreEos: 0 --- !u!114 &1400265393 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5232,12 +5233,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a2496546d1575771597fc8cbdd0d852d, type: 3} m_Name: m_EditorClassIdentifier: - searchClass: 1 - search: {fileID: 1400265395} - chunkingClass: 3 - chunking: {fileID: 1400265394} - preSearchClass: 0 - preChunkingClass: 0 + searchType: 1 + search: {fileID: 1400265394} + chunkingType: 0 + chunking: {fileID: 0} --- !u!114 &1400265394 MonoBehaviour: m_ObjectHideFlags: 0 @@ -5247,31 +5246,10 @@ MonoBehaviour: m_GameObject: {fileID: 1400265384} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 354c2418b0d6913efbfb73dccd540d23, type: 3} - m_Name: - m_EditorClassIdentifier: - search: {fileID: 1400265395} - returnChunks: 0 - delimiters: 2e0021003a003b003f000a000d00 ---- !u!114 &1400265395 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1400265384} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f8c6492f8c97ab9a09b0eb0f93a158da, type: 3} + m_Script: {fileID: 11500000, guid: 5102d32385d84d87f98c64d376cbcc90, type: 3} m_Name: m_EditorClassIdentifier: llmEmbedder: {fileID: 1400265392} - advancedOptions: 0 - quantization: 3 - metricKind: 1 - connectivity: 32 - expansionAdd: 40 - expansionSearch: 16 --- !u!1 &1468962044 GameObject: m_ObjectHideFlags: 0 @@ -7579,30 +7557,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &2142407557 Transform: m_ObjectHideFlags: 0 diff --git a/Samples~/MobileDemo/MobileDemo.cs b/Samples~/MobileDemo/MobileDemo.cs index ccf74529..93b85d57 100644 --- a/Samples~/MobileDemo/MobileDemo.cs +++ b/Samples~/MobileDemo/MobileDemo.cs @@ -60,7 +60,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.Chat(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) diff --git a/Samples~/MobileDemo/Scene.unity b/Samples~/MobileDemo/Scene.unity index cb3c6656..7a1087f9 100644 --- a/Samples~/MobileDemo/Scene.unity +++ b/Samples~/MobileDemo/Scene.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 10 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -38,12 +38,13 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657832, g: 0.49641222, b: 0.57481664, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 - m_BakeOnSceneLoad: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -66,6 +67,9 @@ LightmapSettings: m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 m_ReflectionCompression: 2 m_MixedBakeMode: 2 m_BakeBackend: 1 @@ -163,7 +167,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 708542fec6999ea3ebd7c69404932bb3, type: 3} m_Name: m_EditorClassIdentifier: - llmCharacter: {fileID: 498662973} + llmAgent: {fileID: 498662973} ChatPanel: {fileID: 1084608230} playerText: {fileID: 1966107897} AIText: {fileID: 887085510} @@ -651,7 +655,7 @@ GameObject: - component: {fileID: 498662972} - component: {fileID: 498662973} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -681,22 +685,18 @@ MonoBehaviour: m_GameObject: {fileID: 498662970} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 1047848254} - APIKey: - host: localhost - port: 13333 - numRetries: 10 - save: - saveCache: 0 - debugPrompt: 0 + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: numPredict: -1 - slot: -1 - grammar: cachePrompt: 1 seed: 0 temperature: 0.2 @@ -706,26 +706,20 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - stream: 1 - playerName: user - AIName: assistant - prompt: A chat between a curious human and an artificial intelligence assistant. + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: --- !u!1 &659217390 GameObject: m_ObjectHideFlags: 0 @@ -1222,8 +1216,9 @@ Light: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 909474451} m_Enabled: 1 - serializedVersion: 11 + serializedVersion: 10 m_Type: 1 + m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 @@ -1273,12 +1268,8 @@ Light: m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} m_UseBoundingSphereOverride: 0 m_UseViewFrustumForShadowCasterCull: 1 - m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 - m_LightUnit: 1 - m_LuxAtDistance: 1 - m_EnableSpotReflector: 1 --- !u!4 &909474453 Transform: m_ObjectHideFlags: 0 @@ -1324,29 +1315,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &1047848255 Transform: m_ObjectHideFlags: 0 diff --git a/Samples~/MultipleCharacters/MultipleCharacters.cs b/Samples~/MultipleCharacters/MultipleCharacters.cs index 39a426ad..2b66476f 100644 --- a/Samples~/MultipleCharacters/MultipleCharacters.cs +++ b/Samples~/MultipleCharacters/MultipleCharacters.cs @@ -28,7 +28,7 @@ public void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.Chat(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) diff --git a/Samples~/MultipleCharacters/Scene.unity b/Samples~/MultipleCharacters/Scene.unity index 3632c0cb..067eebc6 100644 --- a/Samples~/MultipleCharacters/Scene.unity +++ b/Samples~/MultipleCharacters/Scene.unity @@ -557,7 +557,7 @@ GameObject: - component: {fileID: 714802013} - component: {fileID: 714802014} m_Layer: 0 - m_Name: LLMCharacter2 + m_Name: LLMAgent2 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -587,25 +587,20 @@ MonoBehaviour: m_GameObject: {fileID: 714802011} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - llm: {fileID: 1047848254} - host: localhost - port: 13333 - numRetries: 10 - APIKey: - save: - saveCache: 0 - debugPrompt: 0 - stream: 1 - grammar: + _remote: 0 + _llm: {fileID: 1047848254} + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 - slot: -1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -613,26 +608,21 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - playerName: Human - AIName: Adam - prompt: A chat between a curious human and an artificial intelligence assistant - named Adam. The assistant gives helpful, detailed, and polite answers to the - human's questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant + named Eve. The assistant gives helpful, detailed, and polite answers to the human's + questions. --- !u!1 &726528676 GameObject: m_ObjectHideFlags: 0 @@ -1517,26 +1507,22 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 --- !u!4 &1047848255 @@ -1935,7 +1921,7 @@ GameObject: - component: {fileID: 1493015759} - component: {fileID: 1493015760} m_Layer: 0 - m_Name: LLMCharacter1 + m_Name: LLMAgent1 m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -1965,25 +1951,20 @@ MonoBehaviour: m_GameObject: {fileID: 1493015757} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - llm: {fileID: 1047848254} - host: localhost - port: 13333 - numRetries: 10 - APIKey: - save: - saveCache: 0 - debugPrompt: 0 - stream: 1 - grammar: + _remote: 0 + _llm: {fileID: 1047848254} + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 - slot: -1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -1991,26 +1972,21 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - playerName: Human - AIName: Eve - prompt: A chat between a curious human and an artificial intelligence assistant - named Eve. The assistant gives helpful, detailed, and polite answers to the human's - questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant + named Adam. The assistant gives helpful, detailed, and polite answers to the + human's questions. --- !u!1 &1609985808 GameObject: m_ObjectHideFlags: 0 diff --git a/Samples~/RAG/RAGAndLLM_Sample.cs b/Samples~/RAG/RAGAndLLM_Sample.cs index 4265d3cf..ae341685 100644 --- a/Samples~/RAG/RAGAndLLM_Sample.cs +++ b/Samples~/RAG/RAGAndLLM_Sample.cs @@ -1,5 +1,6 @@ using UnityEngine.UI; using LLMUnity; +using System.Threading.Tasks; namespace LLMUnitySamples { @@ -8,11 +9,11 @@ public class RAGAndLLMSample : RAGSample public LLMAgent llmAgent; public Toggle ParaphraseWithLLM; - protected override void onInputFieldSubmit(string message) + protected override async void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - (string[] similarPhrases, float[] distances) = rag.Search(message, 1); + (string[] similarPhrases, float[] distances) = await rag.Search(message, 1); string similarPhrase = similarPhrases[0]; if (!ParaphraseWithLLM.isOn) { @@ -21,7 +22,7 @@ protected override void onInputFieldSubmit(string message) } else { - _ = llmAgent.ChatAsync("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); + _ = llmAgent.Chat("Paraphrase the following phrase: " + similarPhrase, SetAIText, AIReplyComplete); } } diff --git a/Samples~/RAG/RAGAndLLM_Scene.unity b/Samples~/RAG/RAGAndLLM_Scene.unity index 6bd5dd87..98a3d218 100644 --- a/Samples~/RAG/RAGAndLLM_Scene.unity +++ b/Samples~/RAG/RAGAndLLM_Scene.unity @@ -171,7 +171,7 @@ MonoBehaviour: playerText: {fileID: 1966107897} AIText: {fileID: 887085510} HamletText: {fileID: 4900000, guid: 145dfa55295462fa4bc804a75d8ba9c1, type: 3} - llmCharacter: {fileID: 498662973} + llmAgent: {fileID: 498662973} ParaphraseWithLLM: {fileID: 1151157495} --- !u!1 &158550913 GameObject: @@ -524,7 +524,7 @@ GameObject: - component: {fileID: 498662972} - component: {fileID: 498662973} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -554,24 +554,20 @@ MonoBehaviour: m_GameObject: {fileID: 498662970} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 1047848254} - APIKey: - host: localhost - port: 13333 - numRetries: 10 - save: - saveCache: 0 - debugPrompt: 0 - slot: -1 - grammar: + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -579,31 +575,25 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - stream: 1 - playerName: Text - AIName: Paraphrased text - prompt: 'You are an assistant that answers with phrases from Hamlet. + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: 'You are an assistant that answers with phrases from Hamlet. Your goal is to paraphrase the provided text without changing it too much. Answer directly with the paraphrased text.' - setNKeepToPrompt: 1 - chat: [] - grammarString: --- !u!1 &718309038 GameObject: m_ObjectHideFlags: 0 @@ -1279,30 +1269,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &1047848255 Transform: m_ObjectHideFlags: 0 @@ -1408,8 +1392,7 @@ GameObject: - component: {fileID: 1091532317} - component: {fileID: 1091532316} - component: {fileID: 1091532315} - - component: {fileID: 1091532314} - - component: {fileID: 1091532313} + - component: {fileID: 1091532318} m_Layer: 0 m_Name: RAG m_TagString: Untagged @@ -1417,40 +1400,6 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!114 &1091532313 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1091532312} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 354c2418b0d6913efbfb73dccd540d23, type: 3} - m_Name: - m_EditorClassIdentifier: - search: {fileID: 1091532314} - returnChunks: 0 - delimiters: 2e0021003a003b003f000a000d00 ---- !u!114 &1091532314 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1091532312} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f8c6492f8c97ab9a09b0eb0f93a158da, type: 3} - m_Name: - m_EditorClassIdentifier: - llmEmbedder: {fileID: 1091532315} - advancedOptions: 0 - quantization: 3 - metricKind: 1 - connectivity: 32 - expansionAdd: 40 - expansionSearch: 16 --- !u!114 &1091532315 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1464,12 +1413,30 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 + _remote: 0 _llm: {fileID: 1612143203} - APIKey: - host: localhost - port: 13333 + _APIKey: + _host: localhost + _port: 13333 numRetries: 10 + _grammar: + numPredict: -1 + cachePrompt: 1 + seed: 0 + temperature: 0.2 + topK: 40 + topP: 0.9 + minP: 0.05 + repeatPenalty: 1.1 + presencePenalty: 0 + frequencyPenalty: 0 + typicalP: 1 + repeatLastN: 64 + mirostat: 0 + mirostatTau: 5 + mirostatEta: 0.1 + nProbs: 0 + ignoreEos: 0 --- !u!114 &1091532316 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1482,12 +1449,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a2496546d1575771597fc8cbdd0d852d, type: 3} m_Name: m_EditorClassIdentifier: - searchClass: 1 - search: {fileID: 1091532314} - chunkingClass: 3 - chunking: {fileID: 1091532313} - preSearchClass: 0 - preChunkingClass: 0 + searchType: 1 + search: {fileID: 1091532318} + chunkingType: 0 + chunking: {fileID: 0} --- !u!4 &1091532317 Transform: m_ObjectHideFlags: 0 @@ -1503,6 +1468,19 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1091532318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1091532312} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5102d32385d84d87f98c64d376cbcc90, type: 3} + m_Name: + m_EditorClassIdentifier: + llmEmbedder: {fileID: 1091532315} --- !u!1 &1151157494 GameObject: m_ObjectHideFlags: 0 @@ -1989,30 +1967,24 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 - embeddingsOnly: 0 - embeddingLength: 0 --- !u!4 &1612143204 Transform: m_ObjectHideFlags: 0 diff --git a/Samples~/RAG/RAG_Sample.cs b/Samples~/RAG/RAG_Sample.cs index 3b668e9d..013384db 100644 --- a/Samples~/RAG/RAG_Sample.cs +++ b/Samples~/RAG/RAG_Sample.cs @@ -56,11 +56,11 @@ public async Task CreateEmbeddings() } } - protected virtual void onInputFieldSubmit(string message) + protected virtual async void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - (string[] similarPhrases, float[] distances) = rag.Search(message, 1); + (string[] similarPhrases, float[] distances) = await rag.Search(message, 1); AIText.text = similarPhrases[0]; } diff --git a/Samples~/SimpleInteraction/Scene.unity b/Samples~/SimpleInteraction/Scene.unity index 4d50fc7c..54cc43f8 100644 --- a/Samples~/SimpleInteraction/Scene.unity +++ b/Samples~/SimpleInteraction/Scene.unity @@ -152,7 +152,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: a9898ca92690864a28e9d37d7ba07036, type: 3} m_Name: m_EditorClassIdentifier: - llmCharacter: {fileID: 498662973} + llmAgent: {fileID: 498662974} playerText: {fileID: 1966107897} AIText: {fileID: 887085510} --- !u!4 &107963746 @@ -443,9 +443,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 498662972} - - component: {fileID: 498662973} + - component: {fileID: 498662974} m_Layer: 0 - m_Name: LLMCharacter + m_Name: LLMAgent m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -466,7 +466,7 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!114 &498662973 +--- !u!114 &498662974 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -475,25 +475,20 @@ MonoBehaviour: m_GameObject: {fileID: 498662970} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3f6c87a428fd5d0be9bbc686bdc8c3c2, type: 3} + m_Script: {fileID: 11500000, guid: b4326d5ae3b03ff55847035351559f4e, type: 3} m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - llm: {fileID: 1047848254} - host: localhost - port: 13333 - numRetries: 10 - APIKey: - save: - saveCache: 0 - debugPrompt: 0 - stream: 1 - grammar: + _remote: 0 + _llm: {fileID: 1047848254} + _APIKey: + _host: localhost + _port: 13333 + numRetries: 5 + _grammar: + numPredict: -1 cachePrompt: 1 - slot: -1 seed: 0 - numPredict: -1 temperature: 0.2 topK: 40 topP: 0.9 @@ -501,25 +496,20 @@ MonoBehaviour: repeatPenalty: 1.1 presencePenalty: 0 frequencyPenalty: 0 - tfsZ: 1 typicalP: 1 repeatLastN: 64 - penalizeNl: 1 - penaltyPrompt: mirostat: 0 mirostatTau: 5 mirostatEta: 0.1 nProbs: 0 ignoreEos: 0 - nKeep: -1 - stop: [] - playerName: user - AIName: assistant - prompt: A chat between a curious human and an artificial intelligence assistant. + save: + debugPrompt: 0 + _slot: -1 + _userRole: user + _assistantRole: assistant + _systemPrompt: A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions. - setNKeepToPrompt: 1 - chat: [] - grammarString: --- !u!1 &724531319 GameObject: m_ObjectHideFlags: 0 @@ -1040,26 +1030,22 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: advancedOptions: 0 - remote: 0 - port: 13333 - numThreads: -1 - numGPULayers: 0 - debug: 0 - parallelPrompts: -1 + _remote: 0 + _port: 13333 + _APIKey: + _SSLCert: + _SSLKey: + _numThreads: -1 + _numGPULayers: 0 + _parallelPrompts: -1 + _contextSize: 8192 + _batchSize: 512 + _model: + _flashAttention: 0 + _reasoning: 0 + _lora: + _loraWeights: dontDestroyOnLoad: 1 - contextSize: 8192 - batchSize: 512 - basePrompt: - model: - chatTemplate: chatml - lora: - loraWeights: - flashAttention: 0 - APIKey: - SSLCert: - SSLCertPath: - SSLKey: - SSLKeyPath: minContextLength: 0 maxContextLength: 0 --- !u!4 &1047848255 diff --git a/Samples~/SimpleInteraction/SimpleInteraction.cs b/Samples~/SimpleInteraction/SimpleInteraction.cs index 060e9c41..e3b48168 100644 --- a/Samples~/SimpleInteraction/SimpleInteraction.cs +++ b/Samples~/SimpleInteraction/SimpleInteraction.cs @@ -20,7 +20,7 @@ void onInputFieldSubmit(string message) { playerText.interactable = false; AIText.text = "..."; - _ = llmAgent.ChatAsync(message, SetAIText, AIReplyComplete); + _ = llmAgent.Chat(message, SetAIText, AIReplyComplete); } public void SetAIText(string text) From 84efdf732da3b08000445ac300c552469619f1b1 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 2 Dec 2025 16:51:34 +0200 Subject: [PATCH 39/69] fix setting up of functions dependent on caller object --- Runtime/LLMAgent.cs | 25 ++++++++++++++--------- Runtime/LLMClient.cs | 47 +++++++++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 25 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index b46a08ca..36fed69e 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -139,9 +139,9 @@ public override void Awake() base.Awake(); } - protected override async Task SetupLLMClient() + protected override async Task SetupCallerObject() { - await base.SetupLLMClient(); + await base.SetupCallerObject(); string exceptionMessage = ""; try @@ -158,7 +158,14 @@ protected override async Task SetupLLMClient() if (exceptionMessage != "") error += ", error: " + exceptionMessage; LLMUnitySetup.LogError(error, true); } + } + /// + /// Initialisation after setting up the LLM client (local or remote). + /// + protected override async Task PostSetupCallerObject() + { + await base.PostSetupCallerObject(); if (slot != -1) llmAgent.SlotId = slot; await InitHistory(); } @@ -217,7 +224,7 @@ public virtual string GetSavePath() /// public virtual async Task ClearHistory() { - await CheckLLMClient(checkConnection: false); + await CheckCaller(checkConnection: false); llmAgent.ClearHistory(); } @@ -228,7 +235,7 @@ public virtual async Task ClearHistory() /// Message content public virtual async Task AddMessage(string role, string content) { - await CheckLLMClient(); + await CheckCaller(); llmAgent.AddMessage(role, content); } @@ -238,7 +245,7 @@ public virtual async Task AddMessage(string role, string content) /// User message content public virtual async Task AddUserMessage(string content) { - await CheckLLMClient(); + await CheckCaller(); llmAgent.AddUserMessage(content); } @@ -248,7 +255,7 @@ public virtual async Task AddUserMessage(string content) /// Assistant message content public virtual async Task AddAssistantMessage(string content) { - await CheckLLMClient(); + await CheckCaller(); llmAgent.AddAssistantMessage(content); } @@ -275,7 +282,7 @@ public class CompletionResponseJson public virtual async Task Chat(string query, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, bool addToHistory = true) { - await CheckLLMClient(); + await CheckCaller(); // Wrap callback to ensure it runs on the main thread LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); @@ -341,7 +348,7 @@ public virtual async Task SaveHistory() LLMUnitySetup.LogError("No save path specified"); return; } - await CheckLLMClient(); + await CheckCaller(); // Save chat history string jsonPath = GetSavePath(); @@ -373,7 +380,7 @@ public virtual async Task LoadHistory() LLMUnitySetup.LogError("No save path specified"); return; } - await CheckLLMClient(); + await CheckCaller(); // Load chat history string jsonPath = GetSavePath(); diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 36e371e6..040636c7 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -132,7 +132,7 @@ public bool remote if (_remote != value) { _remote = value; - if (started) _ = SetupLLMClient(); + if (started) _ = SetupCaller(); } } } @@ -153,7 +153,7 @@ public string APIKey if (_APIKey != value) { _APIKey = value; - if (started) _ = SetupLLMClient(); + if (started) _ = SetupCaller(); } } } @@ -167,7 +167,7 @@ public string host if (_host != value) { _host = value; - if (started) _ = SetupLLMClient(); + if (started) _ = SetupCaller(); } } } @@ -181,7 +181,7 @@ public int port if (_port != value) { _port = value; - if (started) _ = SetupLLMClient(); + if (started) _ = SetupCaller(); } } } @@ -223,7 +223,7 @@ public virtual void Awake() public virtual async void Start() { if (!enabled) return; - await SetupLLMClient(); + await SetupCaller(); started = true; } @@ -240,11 +240,11 @@ protected virtual void Reset() #endregion #region Initialization - protected virtual async Task CheckLLMClient(bool checkConnection = true) + protected virtual async Task CheckCaller(bool checkConnection = true) { await startSemaphore.WaitAsync(); startSemaphore.Release(); - if (GetCaller() == null) LLMUnitySetup.LogError("LLMClient not initialized", true); + if (GetCaller() == null) LLMUnitySetup.LogError("LLM caller not initialized", true); if (remote && checkConnection) { for (int attempt = 0; attempt <= numRetries; attempt++) @@ -258,7 +258,16 @@ protected virtual async Task CheckLLMClient(bool checkConnection = true) /// /// Sets up the underlying LLM client connection (local or remote). /// - protected virtual async Task SetupLLMClient() + protected virtual async Task SetupCaller() + { + await SetupCallerObject(); + await PostSetupCallerObject(); + } + + /// + /// Sets up the underlying LLM client connection (local or remote). + /// + protected virtual async Task SetupCallerObject() { await startSemaphore.WaitAsync(); @@ -275,9 +284,6 @@ protected virtual async Task SetupLLMClient() { llmClient = new UndreamAI.LlamaLib.LLMClient(host, port, APIKey, numRetries); } - - SetGrammar(grammar); - completionParametersCache = ""; } catch (Exception ex) { @@ -297,6 +303,15 @@ protected virtual async Task SetupLLMClient() } } + /// + /// Initialisation after setting up the LLM client (local or remote). + /// + protected virtual async Task PostSetupCallerObject() + { + SetGrammar(grammar); + completionParametersCache = ""; + } + /// /// Gets the underlying LLMLocal instance for operations requiring local access. /// @@ -320,7 +335,7 @@ protected virtual async Task SetLLM(LLM llmInstance) } _llm = llmInstance; - if (started) await SetupLLMClient(); + if (started) await SetupCaller(); } #endregion @@ -497,7 +512,7 @@ public virtual async Task> Tokenize(string query, Callback> { throw new ArgumentNullException(nameof(query)); } - await CheckLLMClient(); + await CheckCaller(); List tokens = llmClient.Tokenize(query); callback?.Invoke(tokens); @@ -516,7 +531,7 @@ public virtual async Task Detokenize(List tokens, Callback { throw new ArgumentNullException(nameof(tokens)); } - await CheckLLMClient(); + await CheckCaller(); string text = llmClient.Detokenize(tokens); callback?.Invoke(text); @@ -535,7 +550,7 @@ public virtual async Task> Embeddings(string query, Callback embeddings = llmClient.Embeddings(query); callback?.Invoke(embeddings); @@ -553,7 +568,7 @@ public virtual async Task> Embeddings(string query, Callback Completion(string prompt, LlamaLib.CharArrayCallback callback = null, EmptyCallback completionCallback = null, int id_slot = -1) { - await CheckLLMClient(); + await CheckCaller(); SetCompletionParameters(); string result = await llmClient.CompletionAsync(prompt, callback, id_slot); completionCallback?.Invoke(); From f08e89a4494ed219dbfc97ec50f9d2da7b07f1ef Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 5 Dec 2025 13:28:46 +0200 Subject: [PATCH 40/69] Add undream libraries in macOS Xcode --- Editor/LLMBuildProcessor.cs | 68 ++++++++++++++++++++++++++----------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/Editor/LLMBuildProcessor.cs b/Editor/LLMBuildProcessor.cs index a73ea2ee..cfbe57b3 100644 --- a/Editor/LLMBuildProcessor.cs +++ b/Editor/LLMBuildProcessor.cs @@ -2,7 +2,8 @@ using UnityEditor.Build; using UnityEditor.Build.Reporting; using UnityEngine; -#if UNITY_IOS || UNITY_VISIONOS +using System.Collections.Generic; +#if UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_VISIONOS using System.IO; using UnityEditor.iOS.Xcode; #endif @@ -27,48 +28,75 @@ private void OnBuildError(string condition, string stacktrace, LogType type) if (type == LogType.Error) BuildCompleted(); } -#if UNITY_IOS || UNITY_VISIONOS +#if UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_VISIONOS /// /// Postprocess the iOS Build /// public static void PostprocessIOSBuild(BuildTarget buildTarget, string outputPath) { + List libraryFileNames = new List(); +#if UNITY_IOS string projPath = PBXProject.GetPBXProjectPath(outputPath); -#if UNITY_VISIONOS - projPath = projPath.Replace("Unity-iPhone", "Unity-VisionOS"); + libraryFileNames.Add("libllamalib_ios-arm64.a"); +#elif UNITY_VISIONOS + string projPath = PBXProject.GetPBXProjectPath(outputPath).Replace("Unity-iPhone", "Unity-VisionOS"); + libraryFileNames.Add("libllamalib_visionos-arm64.a"); +#else + string projPath = Path.Combine(outputPath, Path.GetFileName(outputPath) + ".xcodeproj", "project.pbxproj"); + if (!File.Exists(projPath)) return; + libraryFileNames.Add("libllamalib_osx-universal_acc.dylib"); + libraryFileNames.Add("libllamalib_osx-universal_no-acc.dylib"); #endif + PBXProject project = new PBXProject(); project.ReadFromFile(projPath); - string targetGuid = project.GetUnityFrameworkTargetGuid(); - string frameworkTargetGuid = project.GetUnityFrameworkTargetGuid(); string unityMainTargetGuid = project.GetUnityMainTargetGuid(); - string embedFrameworksGuid = project.GetResourcesBuildPhaseByTarget(frameworkTargetGuid); + string targetGuid = project.GetUnityFrameworkTargetGuid(); // Add Accelerate framework project.AddFrameworkToProject(unityMainTargetGuid, "Accelerate.framework", false); - project.AddFrameworkToProject(targetGuid, "Accelerate.framework", false); + if (targetGuid != null) project.AddFrameworkToProject(targetGuid, "Accelerate.framework", false); + + List libraryFiles = new List(); + foreach (string libraryFileName in libraryFileNames) + { + string lib = LLMUnitySetup.SearchDirectory(outputPath, libraryFileName); + if (lib != null) libraryFiles.Add(lib); + } - string libraryFile = LLMUnitySetup.RelativePath(LLMUnitySetup.SearchDirectory(outputPath, $"libundreamai_{buildTarget.ToString().ToLower()}.a"), outputPath); - string fileGuid = project.FindFileGuidByProjectPath(libraryFile); - if (string.IsNullOrEmpty(fileGuid)) LLMUnitySetup.LogError($"Library file {libraryFile} not found in project"); + if (libraryFiles.Count == 0) + { + Debug.LogError($"No library files found for the build"); + } else { - foreach (var phaseGuid in project.GetAllBuildPhasesForTarget(unityMainTargetGuid)) + foreach (string libraryFile in libraryFiles) { - if (project.GetBuildPhaseName(phaseGuid) == "Embed Frameworks") + string relLibraryFile = LLMUnitySetup.RelativePath(libraryFile, outputPath); + string fileGuid = project.FindFileGuidByProjectPath(relLibraryFile); + if (string.IsNullOrEmpty(fileGuid)) { - project.RemoveFileFromBuild(phaseGuid, fileGuid); - break; + Debug.LogError($"Library file {relLibraryFile} not found in project"); } - } + else + { + foreach (var phaseGuid in project.GetAllBuildPhasesForTarget(unityMainTargetGuid)) + { + if (project.GetBuildPhaseName(phaseGuid) == "Embed Frameworks") + { + project.RemoveFileFromBuild(phaseGuid, fileGuid); + break; + } + } - project.AddFileToBuild(unityMainTargetGuid, fileGuid); - project.AddFileToBuild(targetGuid, fileGuid); + project.AddFileToBuild(unityMainTargetGuid, fileGuid); + if (targetGuid != null) project.AddFileToBuild(targetGuid, fileGuid); + } + } } project.WriteToFile(projPath); - AssetDatabase.ImportAsset(projPath); } #endif @@ -76,7 +104,7 @@ public static void PostprocessIOSBuild(BuildTarget buildTarget, string outputPat // called after the build public void OnPostprocessBuild(BuildReport report) { -#if UNITY_IOS || UNITY_VISIONOS +#if UNITY_STANDALONE_OSX || UNITY_IOS || UNITY_VISIONOS PostprocessIOSBuild(report.summary.platform, report.summary.outputPath); #endif EditorApplication.delayCall += () => From 1c4c7017dc164cd535f3c4c0dd89a9d553a67a5a Mon Sep 17 00:00:00 2001 From: amakropoulos Date: Fri, 5 Dec 2025 11:31:53 +0000 Subject: [PATCH 41/69] update tooltips --- Runtime/LLM.cs | 16 +--------------- Runtime/LLMAgent.cs | 6 +----- Runtime/LLMClient.cs | 7 ------- 3 files changed, 2 insertions(+), 27 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index b12d3c0a..b29a3eda 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -25,63 +25,48 @@ public class LLM : MonoBehaviour [HideInInspector] public bool advancedOptions = false; /// Enable remote server functionality to allow external connections - [Tooltip("Enable remote server functionality to allow external connections")] [LocalRemote, SerializeField] private bool _remote = false; /// Port to use for the remote LLM server - [Tooltip("Port to use for the remote LLM server")] [Remote, SerializeField] private int _port = 13333; /// API key required for server access (leave empty to disable authentication) - [Tooltip("API key required for server access (leave empty to disable authentication)")] [SerializeField] private string _APIKey = ""; /// SSL certificate for the remote LLM server - [Tooltip("SSL certificate for the remote LLM server")] [SerializeField] private string _SSLCert = ""; /// SSL key for the remote LLM server - [Tooltip("SSL key for the remote LLM server")] [SerializeField] private string _SSLKey = ""; /// Number of threads to use for processing (-1 = use all available threads) - [Tooltip("Number of threads to use for processing (-1 = use all available threads)")] [LLM, SerializeField] private int _numThreads = -1; /// Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported - [Tooltip("Number of model layers to offload to GPU (0 = CPU only). Falls back to CPU if GPU unsupported")] [LLM, SerializeField] private int _numGPULayers = 0; /// Number of prompts that can be processed in parallel (-1 = auto-detect from clients) - [Tooltip("Number of prompts that can be processed in parallel (-1 = auto-detect from clients)")] [LLM, SerializeField] private int _parallelPrompts = -1; /// Size of the prompt context in tokens (0 = use model's default context size) - [Tooltip("Size of the prompt context in tokens (0 = use model's default context size). This determines how much conversation history the model can remember.")] [DynamicRange("minContextLength", "maxContextLength", false), Model, SerializeField] private int _contextSize = 8192; /// Batch size for prompt processing (larger = more memory, potentially faster) - [Tooltip("Batch size for prompt processing (larger = more memory, potentially faster)")] [ModelAdvanced, SerializeField] private int _batchSize = 512; /// LLM model file path (.gguf format) - [Tooltip("LLM model file path (.gguf format)")] [ModelAdvanced, SerializeField] private string _model = ""; /// Enable flash attention optimization (requires compatible model) - [Tooltip("Enable flash attention optimization (requires compatible model)")] [ModelExtras, SerializeField] private bool _flashAttention = false; /// Enable LLM reasoning ("thinking" mode) - [Tooltip("Enable LLM reasoning ('thinking' mode)")] [ModelAdvanced, SerializeField] private bool _reasoning = false; /// LORA adapter model paths (.gguf format), separated by commas - [Tooltip("LORA adapter model paths (.gguf format), separated by commas")] [ModelAdvanced, SerializeField] private string _lora = ""; /// Weights for LORA adapters, separated by commas (default: 1.0 for each) - [Tooltip("Weights for LORA adapters, separated by commas (default: 1.0 for each)")] [ModelAdvanced, SerializeField] private string _loraWeights = ""; /// Persist this LLM GameObject across scene transitions @@ -288,6 +273,7 @@ public string SSLKey public LLMService llmService { get; private set; } /// Model architecture name (e.g., "llama", "mistral") + [Tooltip("Model architecture name (e.g., "llama", "mistral")")] public string architecture => llmlib?.architecture; /// True if this model only supports embeddings (no text generation) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 36fed69e..2c9311a7 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -21,7 +21,7 @@ public class LLMAgent : LLMClient { #region Inspector Fields /// Filename for saving chat history (saved in persistentDataPath) - [Tooltip("Filename for saving chat history (saved in Application.persistentDataPath)")] + [Tooltip("Filename for saving chat history (saved in persistentDataPath)")] [LLM] public string save = ""; /// Debug LLM prompts @@ -29,19 +29,15 @@ public class LLMAgent : LLMClient [LLM] public bool debugPrompt = false; /// Server slot to use for processing (affects caching behavior) - [Tooltip("Server slot to use for processing (affects caching behavior)")] [ModelAdvanced, SerializeField] protected int _slot = -1; /// Role name for user messages in conversation - [Tooltip("Role name for user messages in conversation")] [Chat, SerializeField] protected string _userRole = "user"; /// Role name for AI assistant messages in conversation - [Tooltip("Role name for AI assistant messages in conversation")] [Chat, SerializeField] protected string _assistantRole = "assistant"; /// System prompt that defines the AI's personality and behavior - [Tooltip("System prompt that defines the AI's personality and behavior")] [TextArea(5, 10), Chat, SerializeField] protected string _systemPrompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; #endregion diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 040636c7..f5c101e2 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -25,31 +25,24 @@ public class LLMClient : MonoBehaviour [HideInInspector] public bool advancedOptions = false; /// Use remote LLM server instead of local instance - [Tooltip("Use remote LLM server instead of local instance")] [LocalRemote, SerializeField] protected bool _remote; /// Local LLM GameObject to connect to - [Tooltip("Local LLM GameObject to connect to")] [Local, SerializeField] protected LLM _llm; /// API key for remote server authentication - [Tooltip("API key for remote server authentication")] [Remote, SerializeField] protected string _APIKey; /// Hostname or IP address of remote LLM server - [Tooltip("Hostname or IP address of remote LLM server")] [Remote, SerializeField] protected string _host = "localhost"; /// Port number of remote LLM server - [Tooltip("Port number of remote LLM server")] [Remote, SerializeField] protected int _port = 13333; /// Number of retries of remote LLM server - [Tooltip("Number of retries of remote LLM server")] [Remote, SerializeField] protected int numRetries = 5; /// Grammar constraints for output formatting (GBNF or JSON schema format) - [Tooltip("Grammar constraints for output formatting (GBNF or JSON schema format)")] [ModelAdvanced, TextArea(1, 10), SerializeField] protected string _grammar = ""; // Completion Parameters From ec01c69ccef6a4408c087c885ce09d2000474c55 Mon Sep 17 00:00:00 2001 From: trkim Date: Fri, 21 Nov 2025 13:28:42 +0900 Subject: [PATCH 42/69] fix: Bypasses the issue where errors occur due to antivirus program detection when using the temporaryCachePath. --- Runtime/LLMBuilder.cs | 47 +++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/Runtime/LLMBuilder.cs b/Runtime/LLMBuilder.cs index 9d595c2a..a4c642c1 100644 --- a/Runtime/LLMBuilder.cs +++ b/Runtime/LLMBuilder.cs @@ -15,7 +15,7 @@ namespace LLMUnity public class LLMBuilder : AssetPostprocessor { static List movedPairs = new List(); - public static string BuildTempDir = Path.Combine(Application.temporaryCachePath, "LLMUnityBuild"); + public static string BuildTempDir = Path.Combine(Directory.GetParent(Application.dataPath).FullName, "LLMUnityBuild"); static string movedCache = Path.Combine(BuildTempDir, "moved.json"); [InitializeOnLoadMethod] @@ -36,6 +36,28 @@ public static string PluginLibraryDir(string platform, bool relative = false) return Path.Combine(PluginDir(platform, relative), LLMUnitySetup.libraryName); } + public static void Retry(System.Action action, int retries = 10, int delayMs = 100) + { + for (int i = 0; i < retries; i++) + { + try + { + action(); + return; + } + catch (IOException) + { + if (i == retries - 1) throw; + System.Threading.Thread.Sleep(delayMs); + } + catch (System.UnauthorizedAccessException) + { + if (i == retries - 1) throw; + System.Threading.Thread.Sleep(delayMs); + } + } + } + /// /// Performs an action for a file or a directory recursively /// @@ -46,7 +68,7 @@ public static void HandleActionFileRecursive(string source, string target, Actio { if (File.Exists(source)) { - actionCallback(source, target); + Retry(() => actionCallback(source, target)); } else if (Directory.Exists(source)) { @@ -106,8 +128,8 @@ public static bool DeletePath(string path) LLMUnitySetup.LogError($"Safeguard: {path} will not be deleted because it may not be safe"); return false; } - if (File.Exists(path)) File.Delete(path); - else if (Directory.Exists(path)) Directory.Delete(path, true); + if (File.Exists(path)) Retry(() => File.Delete(path)); + else if (Directory.Exists(path)) Retry(() => Directory.Delete(path, true)); return true; } @@ -300,8 +322,21 @@ public static void Reset() bool refresh = false; foreach (var pair in movedPairs) { - if (pair.source == "") refresh |= DeletePath(pair.target); - else refresh |= MoveAction(pair.target, pair.source, false); + if (pair.source == "") + { + refresh |= DeletePath(pair.target); + } + else + { + if (File.Exists(pair.source) || Directory.Exists(pair.source)) + { + refresh |= DeletePath(pair.target); + } + else + { + refresh |= MoveAction(pair.target, pair.source, false); + } + } } if (refresh) AssetDatabase.Refresh(); DeletePath(movedCache); From 750c06a7d1fe9ddbf2fce4e43381b86093180be5 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 8 Dec 2025 16:46:08 +0200 Subject: [PATCH 43/69] Add migration guide --- Migration.md | 200 ++++++++++++++++++++++++++++++++++++++++++++++ Migration.md.meta | 7 ++ 2 files changed, 207 insertions(+) create mode 100644 Migration.md create mode 100644 Migration.md.meta diff --git a/Migration.md b/Migration.md new file mode 100644 index 00000000..bc32248b --- /dev/null +++ b/Migration.md @@ -0,0 +1,200 @@ +# **LLMUnity Migration Guide: Upgrading to the New Architecture** + +This guide helps you migrate to LLMUnity v3 from v2. + +The LLM backend, [LlamaLib](https://github.com/undreamai/LlamaLib), has been completely rewritten and most of the LLM functionality in Unity has now been ported to the backend.
+At the same time, LlamaLib has been implemented as a clean, high-level library that can been used on its own by C++ and C# developers.
+Special care has been taken to provide better support for future llama.cpp versions, streamlining more the upgrade process. + +## **Breaking Changes - Graphical Interface** +In terms of graphical interface in Unity, there have been almost no changes: +- The LLMCharacter class has been renamed to LLMAgent +- The chat templates have been removed from the LLM model management (LLM GameObjects) +- "Use extras" has been renamed to "Use cuBLAS" (LLM GameObjects) +- Grammars can be directly edited (LLMAgent GameObjects) + +## **Breaking Changes - Scripting** + +### **1\. LLM Server (LLM.cs)** + +#### **API Changes** + +**Setting Model:** + +``` c# +// OLD +llm.SetModel("path/to/model.gguf"); + +// NEW +llm.model = "path/to/model.gguf"; +``` + +**Setting Chat Template:** + +Setting the chat template is not needed anymore, it is handled by LlamaLib and loads the LLM-supported template automatically. + +``` c# +// OLD +llm.SetTemplate("chatml"); + +// NEW +// Template is auto-detected from model_ +``` + +### **2\. Chat Agent (LLMCharacter → LLMAgent)** + +LLMCharacter has been moved to a new class LLMAgent.
+**Note:** LLMCharacter still exists as a deprecated wrapper for backward compatibility, but will be removed in future versions. + +#### **Property changes** + +| **Old Property** | **New Property** | **Migration** | +| --- | --- | --- | +| playerName | userRole | Direct rename | +| AIName | assistantRole | Direct rename | +| prompt | systemPrompt | Direct rename | +| chat | chat | Now a property with getter/setter | +| saveCache | Removed | Cache management removed | + + +#### **API Changes** + +**Clear History:** +``` c# +// OLD +character.ClearChat(); + +// NEW +await agent.ClearHistory(); +``` + +**Setting / Changing the System Prompt:** +- Without clearing the history + +``` c# +// OLD +character.SetPrompt("You are a helpful assistant", clearChat: false); + +// NEW +agent.systemPrompt = "You are a helpful assistant"; +``` + +- Clearing the history +``` c# +// OLD +character.SetPrompt("You are a helpful assistant", clearChat: true); + +// NEW +agent.systemPrompt = "You are a helpful assistant"; +await agent.ClearHistory(); +``` + +**Managing History:** + +``` c# +character.AddPlayerMessage("Hello"); +character.AddAIMessage("Hi there"); + +// NEW +await agent.AddUserMessage("Hello"); +await agent.AddAssistantMessage("Hi there"); +``` + +**Saving/Loading:** + +``` c# +// OLD +await character.Save("chat_history"); +await character.Load("chat_history"); + +// NEW +await agent.SaveHistory(); +await agent.LoadHistory(); +``` + +The history path is directly the `character.save` property. + +**Grammar:** + +Setting the grammar directly: +``` c# +// OLD +llmClient.grammarString = "your grammar here"; + +// NEW +llmClient.grammar = "your grammar here"; +``` + +Loading a grammar file: +``` c# +// OLD +await character.SetGrammar("path/to/grammar.gbnf"); +await character.SetJSONGrammar("path/to/schema.json"); + +// NEW +llmClient.LoadGrammar("path/to/grammar.gbnf"); +llmClient.LoadGrammar("path/to/schema.json"); +``` + +### **Reasoning Mode (New Feature)** + +``` c# +// NEW - Enable "thinking" mode of the LLM +llm.reasoning = true; +// Or +llm.SetReasoning(true); +``` + +## **Migration Steps** + +### **Step 1: Update Class Inheritance** + +``` c# +// Change LLMCharacter to LLMAgent +public class MyNPC : LLMAgent // was LLMCharacter +{ +// Your code_ +} +``` + +### **Step 2: Update Property Names** + +``` c# +// In LLMAgent +agent.userRole = "Player"; // was character.playerName +agent.assistantRole = "AI"; // was character.AIName +agent.systemPrompt = "..."; // was character.prompt +``` + +### **Step 3: Update Method Calls** + +``` c# +// History management +await agent.ClearHistory(); // was character.ClearChat() +await agent.AddUserMessage("Hi"); // was character.AddPlayerMessage("Hi") +await agent.AddAssistantMessage("Hello"); // was character.AddAIMessage("Hello") +``` + +### **Step 4: Update Grammar** + +``` c# +agent.grammar = "your grammar here"; // was character.grammarString = "your grammar here" +// or +agent.LoadGrammar("grammar.gbnf"); // was await character.SetGrammar("path/to/grammar.gbnf"); or await character.SetJSONGrammar("path/to/schema.json"); +``` + +### **Step 5: Update Save/Load** + +``` c# +agent.save = "history"; // Set once +await agent.SaveHistory(); // was await character.Save("history"); +await agent.LoadHistory(); // was await character.Load("history"); +``` + +### **Step 6: Remove Chat Template** + +``` c# +// OLD +// Remove: +// llm.SetTemplate("phi-3"); +``` diff --git a/Migration.md.meta b/Migration.md.meta new file mode 100644 index 00000000..585a65b1 --- /dev/null +++ b/Migration.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 950db95695065d546bdb3e9f742544ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: From 56137388a5d8ce4185c1fe5bba8b9aadb6485b49 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Mon, 8 Dec 2025 20:43:02 +0200 Subject: [PATCH 44/69] await rag.Add --- Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs | 2 +- Samples~/RAG/RAG_Sample.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index 211f1480..b948da9a 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -82,7 +82,7 @@ public async Task CreateEmbeddings() PlayerText.text += $"Creating Embeddings for {botName} (only once)...\n"; List questions = botQuestionAnswers.Keys.ToList(); stopwatch.Start(); - foreach (string question in questions) rag.Add(question, botName); + foreach (string question in questions) await rag.Add(question, botName); stopwatch.Stop(); Debug.Log($"embedded {rag.Count()} phrases in {stopwatch.Elapsed.TotalMilliseconds / 1000f} secs"); } diff --git a/Samples~/RAG/RAG_Sample.cs b/Samples~/RAG/RAG_Sample.cs index 013384db..e81b0b7a 100644 --- a/Samples~/RAG/RAG_Sample.cs +++ b/Samples~/RAG/RAG_Sample.cs @@ -44,7 +44,7 @@ public async Task CreateEmbeddings() playerText.text += $"Creating Embeddings (only once)...\n"; Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); - foreach (string phrase in phrases) rag.Add(phrase); + foreach (string phrase in phrases) await rag.Add(phrase); stopwatch.Stop(); Debug.Log($"embedded {rag.Count()} phrases in {stopwatch.Elapsed.TotalMilliseconds / 1000f} secs"); // store the embeddings From 73280490cab1bafab24503cb3560080cdac92a2c Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 9 Dec 2025 10:29:16 +0200 Subject: [PATCH 45/69] retain loras in Editor --- Runtime/LLM.cs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index b29a3eda..f70a9482 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -295,6 +295,8 @@ public string SSLKey public LLMManager llmManager = new LLMManager(); private static readonly object staticLock = new object(); public LoraManager loraManager = new LoraManager(); + string loraPre = ""; + string loraWeightsPre = ""; /// \endcond #endregion @@ -304,6 +306,15 @@ public LLM() LLMManager.Register(this); } + void OnValidate() + { + if (lora != loraPre || loraWeights != loraWeightsPre) + { + loraManager.FromStrings(lora, loraWeights); + (loraPre, loraWeightsPre) = (lora, loraWeights); + } + } + /// /// Unity Awake method that initializes the LLM server. /// Sets up the model, starts the service, and handles GPU fallback if needed. From 73a8556b6908a8cefa75bb67a2c21d4f710234f9 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 9 Dec 2025 10:29:46 +0200 Subject: [PATCH 46/69] work around async warning --- Runtime/LLMClient.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index f5c101e2..23f20167 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -303,6 +303,7 @@ protected virtual async Task PostSetupCallerObject() { SetGrammar(grammar); completionParametersCache = ""; + await Task.Yield(); } /// From 9db50a454f23fb44c5becbe90bb4394aa4dedcbd Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 10 Dec 2025 18:29:26 +0200 Subject: [PATCH 47/69] use LLMUnity exceptions alongside an error log --- Runtime/LLM.cs | 28 +++++++++---------- Runtime/LLMBuilder.cs | 8 +++--- Runtime/LLMClient.cs | 6 ++-- Runtime/LLMGGUF.cs | 8 +++--- Runtime/LLMUnitySetup.cs | 7 +++-- Runtime/LLMUtils.cs | 2 +- Runtime/RAG/DBSearch.cs | 2 +- Runtime/RAG/RAG.cs | 3 +- Runtime/RAG/Search.cs | 6 ++-- Runtime/RAG/SimpleSearch.cs | 2 +- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 4 +-- Samples~/RAG/RAG_Sample.cs | 4 +-- 12 files changed, 41 insertions(+), 39 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index f70a9482..cc077618 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -84,7 +84,7 @@ public int numThreads { AssertNotStarted(); if (value < -1) - throw new ArgumentException("numThreads must be >= -1"); + LLMUnitySetup.LogError("numThreads must be >= -1", true); _numThreads = value; } } @@ -97,7 +97,7 @@ public int numGPULayers { AssertNotStarted(); if (value < 0) - throw new ArgumentException("numGPULayers must be >= 0"); + LLMUnitySetup.LogError("numGPULayers must be >= 0", true); _numGPULayers = value; } } @@ -110,7 +110,7 @@ public int parallelPrompts { AssertNotStarted(); if (value < -1) - throw new ArgumentException("parallelPrompts must be >= -1"); + LLMUnitySetup.LogError("parallelPrompts must be >= -1", true); _parallelPrompts = value; } } @@ -123,7 +123,7 @@ public int contextSize { AssertNotStarted(); if (value < 0) - throw new ArgumentException("contextSize must be >= 0"); + LLMUnitySetup.LogError("contextSize must be >= 0", true); _contextSize = value; } } @@ -136,7 +136,7 @@ public int batchSize { AssertNotStarted(); if (value <= 0) - throw new ArgumentException("batchSize must be > 0"); + LLMUnitySetup.LogError("batchSize must be > 0", true); _batchSize = value; } } @@ -212,7 +212,7 @@ public int port { if (value == _port) return; if (value < 0 || value > 65535) - throw new ArgumentException("port must be between 0 and 65535"); + LLMUnitySetup.LogError("port must be between 0 and 65535", true); _port = value; RestartServer(); } @@ -351,7 +351,7 @@ private void ValidateParameters() { if ((SSLCert != "" && SSLKey == "") || (SSLCert == "" && SSLKey != "")) { - throw new ArgumentException("Both SSL certificate and key must be provided together!"); + LLMUnitySetup.LogError("Both SSL certificate and key must be provided together!", true); } } @@ -359,13 +359,13 @@ private string GetValidatedModelPath() { if (string.IsNullOrEmpty(model)) { - throw new ArgumentException("No model file provided!"); + LLMUnitySetup.LogError("No model file provided!", true); } string modelPath = GetLLMManagerAssetRuntime(model); if (!File.Exists(modelPath)) { - throw new ArgumentException($"Model file not found: {modelPath}"); + LLMUnitySetup.LogError($"Model file not found: {modelPath}", true); } return modelPath; } @@ -380,7 +380,7 @@ private List GetValidatedLoraPaths() string resolvedPath = GetLLMManagerAssetRuntime(loraPath); if (!File.Exists(resolvedPath)) { - throw new ArgumentException($"LORA file not found: {resolvedPath}"); + LLMUnitySetup.LogError($"LORA file not found: {resolvedPath}", true); } loraPaths.Add(resolvedPath); } @@ -401,7 +401,7 @@ private async Task StartServiceAsync() CreateLib(); await CreateServiceAsync(modelPath, loraPaths); } - catch (ArgumentException ex) + catch (LLMUnityException ex) { LLMUnitySetup.LogError(ex.Message); failed = true; @@ -507,7 +507,7 @@ public async Task WaitUntilReady() if (failed) { - throw new InvalidOperationException("LLM failed to start"); + LLMUnitySetup.LogError("LLM failed to start", true); } } @@ -596,7 +596,7 @@ public void Register(LLMClient llmClient) { if (llmClient == null) { - throw new ArgumentNullException(nameof(llmClient)); + LLMUnitySetup.LogError("llmClient is null", true); } clients.Add(llmClient); @@ -680,7 +680,7 @@ public void SetLoraWeights(Dictionary loraToWeight) { if (loraToWeight == null) { - throw new ArgumentNullException(nameof(loraToWeight)); + LLMUnitySetup.LogError("loraToWeight is null", true); } foreach (var entry in loraToWeight) diff --git a/Runtime/LLMBuilder.cs b/Runtime/LLMBuilder.cs index a4c642c1..b06a3193 100644 --- a/Runtime/LLMBuilder.cs +++ b/Runtime/LLMBuilder.cs @@ -45,14 +45,14 @@ public static void Retry(System.Action action, int retries = 10, int delayMs = 1 action(); return; } - catch (IOException) + catch (IOException e) { - if (i == retries - 1) throw; + if (i == retries - 1) LLMUnitySetup.LogError(e.Message, true); System.Threading.Thread.Sleep(delayMs); } - catch (System.UnauthorizedAccessException) + catch (System.UnauthorizedAccessException e) { - if (i == retries - 1) throw; + if (i == retries - 1) LLMUnitySetup.LogError(e.Message, true);; System.Threading.Thread.Sleep(delayMs); } } diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 23f20167..38298a9a 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -504,7 +504,7 @@ public virtual async Task> Tokenize(string query, Callback> { if (string.IsNullOrEmpty(query)) { - throw new ArgumentNullException(nameof(query)); + LLMUnitySetup.LogError("query is null", true); } await CheckCaller(); @@ -523,7 +523,7 @@ public virtual async Task Detokenize(List tokens, Callback { if (tokens == null) { - throw new ArgumentNullException(nameof(tokens)); + LLMUnitySetup.LogError("tokens is null", true); } await CheckCaller(); @@ -542,7 +542,7 @@ public virtual async Task> Embeddings(string query, Callback { new uint[] { temp_version } }, data = new List { 0 }, types = new List { GGUFValueType.UINT32 } }); ulong[] temp_counts = new ulong[2]; @@ -172,7 +172,7 @@ private byte[] ReadBytes(int offset, int count) private int PushField(ReaderField field, bool skip_sum = false) { if (fields.ContainsKey(field.name)) - throw new ArgumentException($"Duplicate {field.name} already in list at offset {field.offset}"); + LLMUnitySetup.LogError($"Duplicate {field.name} already in list at offset {field.offset}", true); fields[field.name] = field; if (skip_sum) return 0; @@ -240,7 +240,7 @@ private int PushField(ReaderField field, bool skip_sum = false) return (offs - orig_offs, aparts, data_idxs, types); } // We can't deal with this one. - throw new ArgumentException($"Unknown/unhandled field type {(GGUFValueType)raw_type}"); + LLMUnitySetup.LogError($"Unknown/unhandled field type {(GGUFValueType)raw_type}", true); } private int BuildFields(int offs, int count) diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index c2f14ad5..e93d9f79 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -68,9 +68,10 @@ public class LLMAdvancedAttribute : AdvancedAttribute {} public class ModelAdvancedAttribute : AdvancedAttribute {} public class ChatAdvancedAttribute : AdvancedAttribute {} - public class NotImplementedException : Exception + + public class LLMUnityException : Exception { - public NotImplementedException() : base("The method needs to be implemented by subclasses.") {} + public LLMUnityException(string message = "") : base(message) {} } public delegate void EmptyCallback(); @@ -199,7 +200,7 @@ public static void LogError(string message, bool throwException = false) if ((int)DebugMode > (int)DebugModeType.Error) return; Debug.LogError(message); foreach (Callback errorCallback in errorCallbacks) errorCallback(message); - if (throwException) throw new Exception(message); + if (throwException) throw new LLMUnityException(message); } static void LoadPlayerPrefs() diff --git a/Runtime/LLMUtils.cs b/Runtime/LLMUtils.cs index 86d42195..43763936 100644 --- a/Runtime/LLMUtils.cs +++ b/Runtime/LLMUtils.cs @@ -148,7 +148,7 @@ public void FromStrings(string loraString, string loraWeightsString) { List loraStringArr = new List(loraString.Split(delimiter)); List loraWeightsStringArr = new List(loraWeightsString.Split(delimiter)); - if (loraStringArr.Count != loraWeightsStringArr.Count) throw new Exception($"LoRAs number ({loraString}) doesn't match the number of weights ({loraWeightsString})"); + if (loraStringArr.Count != loraWeightsStringArr.Count) LLMUnitySetup.LogError($"LoRAs number ({loraString}) doesn't match the number of weights ({loraWeightsString})", true); List lorasNew = new List(); for (int i = 0; i < loraStringArr.Count; i++) lorasNew.Add(new LoraAsset(loraStringArr[i].Trim(), float.Parse(loraWeightsStringArr[i]))); diff --git a/Runtime/RAG/DBSearch.cs b/Runtime/RAG/DBSearch.cs index e0888530..9f919641 100644 --- a/Runtime/RAG/DBSearch.cs +++ b/Runtime/RAG/DBSearch.cs @@ -77,7 +77,7 @@ public override int IncrementalSearch(float[] embedding, string group = "") public override ValueTuple IncrementalFetchKeys(int fetchKey, int k) { - if (!incrementalSearchCache.ContainsKey(fetchKey)) throw new Exception($"There is no IncrementalSearch cached with this key: {fetchKey}"); + if (!incrementalSearchCache.ContainsKey(fetchKey)) LLMUnitySetup.LogError($"There is no IncrementalSearch cached with this key: {fetchKey}", true); (float[] embedding, string group, List seenKeys) = incrementalSearchCache[fetchKey]; diff --git a/Runtime/RAG/RAG.cs b/Runtime/RAG/RAG.cs index a1b26183..19b8d07e 100644 --- a/Runtime/RAG/RAG.cs +++ b/Runtime/RAG/RAG.cs @@ -99,7 +99,8 @@ protected Searchable GetSearcher() { if (chunking != null) return chunking; if (search != null) return search; - throw new Exception("The search GameObject is null"); + LLMUnitySetup.LogError("The search GameObject is null", true); + return null; } #if UNITY_EDITOR diff --git a/Runtime/RAG/Search.cs b/Runtime/RAG/Search.cs index 249beafb..264ad599 100644 --- a/Runtime/RAG/Search.cs +++ b/Runtime/RAG/Search.cs @@ -314,8 +314,8 @@ public void SetLLM(LLM llm) /// \cond HIDE public static float DotProduct(float[] vector1, float[] vector2) { - if (vector1 == null || vector2 == null) throw new ArgumentNullException("Vectors cannot be null"); - if (vector1.Length != vector2.Length) throw new ArgumentException("Vector lengths must be equal for dot product calculation"); + if (vector1 == null || vector2 == null) LLMUnitySetup.LogError("Vectors cannot be null", true); + if (vector1.Length != vector2.Length) LLMUnitySetup.LogError("Vector lengths must be equal for dot product calculation", true); float result = 0; for (int i = 0; i < vector1.Length; i++) { @@ -526,7 +526,7 @@ public static void Save(ZipArchive archive, object saveObject, string name) public static T Load(ZipArchive archive, string name) { ZipArchiveEntry baseEntry = archive.GetEntry(name); - if (baseEntry == null) throw new Exception($"No entry with name {name} was found"); + if (baseEntry == null) LLMUnitySetup.LogError($"No entry with name {name} was found", true); using (Stream entryStream = baseEntry.Open()) { BinaryFormatter formatter = new BinaryFormatter(); diff --git a/Runtime/RAG/SimpleSearch.cs b/Runtime/RAG/SimpleSearch.cs index 8d97d645..e30af1a4 100644 --- a/Runtime/RAG/SimpleSearch.cs +++ b/Runtime/RAG/SimpleSearch.cs @@ -51,7 +51,7 @@ public override int IncrementalSearch(float[] embedding, string group = "") public override ValueTuple IncrementalFetchKeys(int fetchKey, int k) { - if (!incrementalSearchCache.ContainsKey(fetchKey)) throw new Exception($"There is no IncrementalSearch cached with this key: {fetchKey}"); + if (!incrementalSearchCache.ContainsKey(fetchKey)) LLMUnitySetup.LogError($"There is no IncrementalSearch cached with this key: {fetchKey}", true); bool completed; List<(int, float)> sortedLists; diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index b948da9a..4a6856ce 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -90,7 +90,7 @@ public async Task CreateEmbeddings() rag.Save(ragPath); #else // if in play mode throw an error - throw new System.Exception("The embeddings could not be found!"); + Debug.LogError("The embeddings could not be found!"); #endif } } @@ -168,7 +168,7 @@ void CheckLLM(LLMClient llmClient, bool debug) { string error = $"Please select a llm model in the {llmClient.llm.gameObject.name} GameObject!"; if (debug) Debug.LogWarning(error); - else throw new System.Exception(error); + else Debug.LogError(error); } } diff --git a/Samples~/RAG/RAG_Sample.cs b/Samples~/RAG/RAG_Sample.cs index e81b0b7a..decb5e7d 100644 --- a/Samples~/RAG/RAG_Sample.cs +++ b/Samples~/RAG/RAG_Sample.cs @@ -51,7 +51,7 @@ public async Task CreateEmbeddings() rag.Save(ragPath); #else // if in play mode throw an error - throw new System.Exception("The embeddings could not be found!"); + Debug.LogError("The embeddings could not be found!"); #endif } } @@ -88,7 +88,7 @@ protected void CheckLLM(LLMClient llmClient, bool debug) { string error = $"Please select a llm model in the {llmClient.llm.gameObject.name} GameObject!"; if (debug) Debug.LogWarning(error); - else throw new System.Exception(error); + else Debug.LogError(error); } } From a24c721b25095b9c6f70227511ddfb0c70d8fb8a Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 10 Dec 2025 18:31:56 +0200 Subject: [PATCH 48/69] update Readme --- README.md | 78 +++++++++++++++++++++++++++---------------------------- 1 file changed, 38 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index b108a329..93dd6cfb 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,9 @@ LLM for Unity enables seamless integration of Large Language Models (LLMs) within the Unity engine.
It allows to create intelligent characters that your players can interact with for an immersive experience.
-The package also features a Retrieval-Augmented Generation (RAG) system that allows to performs semantic search across your data, which can be used to enhance the character's knowledge. +The package also features a Retrieval-Augmented Generation (RAG) system that allows to performs semantic search across your data, which can be used to enhance the character's knowledge.
LLM for Unity is built on top of the awesome [llama.cpp](https://github.com/ggerganov/llama.cpp) library. +The LLM backend, [LlamaLib](https://github.com/undreamai/LlamaLib) is provided as a standalone C++/C# library. At a glance  •  @@ -46,8 +47,12 @@ LLM for Unity is built on top of the awesome [llama.cpp](https://github.com/gger 🧪 Tested on Unity: 2021 LTS, 2022 LTS, 2023, Unity 6
🚦 [Upcoming Releases](https://github.com/orgs/undreamai/projects/2/views/10) + +### Business inquiries +For business inquiries you can reach out at hello@undream.ai. + ## How to help -- [⭐ Star](https://github.com/undreamai/LLMUnity) the repo, leave us a [review](https://assetstore.unity.com/packages/slug/273604) and spread the word about the project! +- [⭐ Star](https://github.com/undreamai/LLMUnity) the repo, leave a [review](https://assetstore.unity.com/packages/slug/273604) and spread the word about the project! - Join us at [Discord](https://discord.gg/RwXKQb6zdv) and say hi. - [Contribute](CONTRIBUTING.md) by submitting feature requests, bugs or even your own PR. - [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/amakropoulos) this work to allow even cooler features! @@ -70,8 +75,10 @@ LLM for Unity is built on top of the awesome [llama.cpp](https://github.com/gger - [Dungeon Chat](https://www.meta.com/experiences/dungeonchat/8527310950709276/) - [Tomonaka Desk](https://joycatdev.itch.io/tomonaka-desk) - [Digital Humans](https://store.steampowered.com/app/3089280/Digital_Humans/) +- [CakeMix](https://ripenedpeach.itch.io/cakemix) +- [HeyWaifu](https://squirclegames.itch.io/hey-waifu-ai) -Contact us to add your project! +Contact hello@undream.ai to add your project! ## Setup _Method 1: Install using the asset store_ @@ -94,11 +101,9 @@ First you will setup the LLM for your game 🏎: Then you can setup each of your characters as follows 🙋‍♀️: - Create an empty GameObject for the character.
In the GameObject Inspector click `Add Component` and select the LLMAgent script. -- Define the role of your AI in the `Prompt`. You can define the name of the AI (`AI Name`) and the player (`Player Name`). +- Define the role of your AI in the `System Prompt`. You can define the role of the AI (`Assistant Role`) and the player (`User Role`). - (Optional) Select the LLM constructed above in the `LLM` field if you have more than one LLM GameObjects. -You can also adjust the LLM and character settings according to your preference (see [Options](#options)). - In your script you can then use it as follows 🦄: ``` c# using LLMUnity; @@ -120,8 +125,7 @@ public class MyScript { } } ``` -You can also specify a function to call when the model reply has been completed.
-This is useful if the `Stream` option is enabled for continuous output from the model (default behaviour): +You can also specify a function to call when the model reply has been completed: ``` c# void ReplyCompleted(){ // do something when the reply from the model is complete @@ -182,20 +186,15 @@ The [MobileDemo](Samples~/MobileDemo) is an example application for Android / iO
-Restrict the output of the LLM / Function calling +Restrict the output of the LLM / Function calling / Grammar To restrict the output of the LLM you can use a grammar, read more [here](https://github.com/ggerganov/llama.cpp/tree/master/grammars).
-The grammar can be saved in a .gbnf file and loaded at the LLMAgent with the `Load Grammar` button (Advanced options).
+The grammar can edited directly in the `Grammar` field of the LLMAgent or saved in a gbnf / json schema file and loaded with the `Load Grammar` button (Advanced options).
For instance to receive replies in json format you can use the [json.gbnf](https://github.com/ggerganov/llama.cpp/blob/b4218/grammars/json.gbnf) grammar.
-Graamars in JSON schema format are also supported and can be loaded with the `Load JSON Grammar` button (Advanced options).
Alternatively you can set the grammar directly with code: ``` c# -// GBNF grammar -llmAgent.grammarString = "your GBNF grammar here"; - -// or JSON schema grammar -llmAgent.grammarJSONString = "your JSON schema grammar here"; +llmAgent.grammar = "your grammar here"; ``` For function calling you can define similarly a grammar that allows only the function names as output, and then call the respective function.
@@ -205,23 +204,32 @@ You can look into the [FunctionCalling](Samples~/FunctionCalling) sample for an
Access / Save / Load your chat history The chat history of a `LLMAgent` is retained in the `chat` variable that is a list of `ChatMessage` objects.
-The ChatMessage is a struct that defines the `role` of the message and the `content`.
-The first element of the list is always the system prompt and then alternating messages with the player prompt and the AI reply.
-You can modify the chat history directly in this list.
+The ChatMessage is a class that defines the `role` of the message and the `content`.
+The list contains alternating messages with the player prompt and the AI reply.
+You can modify the chat history and then set it to you LLMAgent GameObject: +``` c# +List newChat = new List(); +... +llmAgent.chat = newChat; +``` + +To add new messages you can do: +``` c# +_ = llmAgent.AddUserMessage("your user message"); +_ = llmAgent.AddAssistantMessage("your assistant reply"); +``` To automatically save / load your chat history, you can specify the `Save` parameter of the LLMAgent to the filename (or relative path) of your choice. -The file is saved in the [persistentDataPath folder of Unity](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html). -This also saves the state of the LLM which means that the previously cached prompt does not need to be recomputed. +The chat history is saved in the [persistentDataPath folder of Unity](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html) as a json object. To manually save your chat history, you can use: ``` c# - llmAgent.Save("filename"); + _ = llmAgent.SaveHistory(); ``` and to load the history: ``` c# - llmAgent.Load("filename"); + _ = llmAgent.Loadistory(); ``` -where filename the filename or relative path of your choice.
@@ -265,7 +273,7 @@ where filename the filename or relative path of your choice. // your game function ... string message = "The cat is away"; - _ = llmAgent.Complete(message, HandleReply, ReplyCompleted); + _ = llmAgent.Completion(message, HandleReply, ReplyCompleted); ... } ``` @@ -309,13 +317,10 @@ public class MyScript : MonoBehaviour // set the model using the filename of the model. // The model needs to be added to the LLM model manager (see LLM model management) by loading or downloading it. // Otherwise the model file can be copied directly inside the StreamingAssets folder. - llm.SetModel("Phi-3-mini-4k-instruct-q4.gguf"); + llm.model = "Qwen3-4B-Q4_K_M.gguf"; // optional: you can also set loras in a similar fashion and set their weights (if needed) llm.AddLora("my-lora.gguf"); - llm.SetLoraWeight(0.5f); - // optional: you can set the chat template of the model if it is not correctly identified - // You can find a list of chat templates in the ChatTemplate.templates.Keys - llm.SetTemplate("phi-3"); + llm.AddLora("my-lora-2.gguf", 0.5f); // optional: set number of threads llm.numThreads = -1; // optional: enable GPU by setting the number of model layers to offload to it @@ -326,18 +331,14 @@ public class MyScript : MonoBehaviour // set the LLM object that handles the model llmAgent.llm = llm; // set the character prompt - llmAgent.SetPrompt("A chat between a curious human and an artificial intelligence assistant."); + llmAgent.systemPrompt = "A chat between a curious human and an artificial intelligence assistant."; // set the AI and player name llmAgent.assistantRole = "AI"; llmAgent.userRole = "Human"; - // optional: set streaming to false to get the complete result in one go - // llmAgent.stream = true; // optional: set a save path - // llmAgent.save = "AICharacter1"; - // optional: enable the save cache to avoid recomputation when loading a save file (requires ~100 MB) - // llmAgent.saveCache = true; + llmAgent.save = "AICharacter1.json"; // optional: set a grammar - // await llmAgent.SetGrammar("json.gbnf"); + llmAgent.grammar = "your grammar here"; // re-enable gameObject gameObject.SetActive(true); @@ -513,9 +514,6 @@ The samples can be run with the `Scene.unity` scene they contain inside their fo In the scene, select the `LLM` GameObject and click the `Download Model` button to download a default model or `Load model` to load your own model (see [LLM model management](#llm-model-management)).
Save the scene, run and enjoy! -## Options -Details on the different parameters are provided as Unity Tooltips. Previous documentation can be found [here](Options.md) (deprecated). - ## License The license of LLM for Unity is MIT ([LICENSE.md](LICENSE.md)) and uses third-party software with MIT and Apache licenses. Some models included in the asset define their own license terms, please review them before using each model. From 12924ff9834c1148beaa527f286d2f8eab79350f Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 10 Dec 2025 18:35:47 +0200 Subject: [PATCH 49/69] fix typos --- Runtime/LLM.cs | 1 - Runtime/LLMGGUF.cs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index cc077618..8e5ca828 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -273,7 +273,6 @@ public string SSLKey public LLMService llmService { get; private set; } /// Model architecture name (e.g., "llama", "mistral") - [Tooltip("Model architecture name (e.g., "llama", "mistral")")] public string architecture => llmlib?.architecture; /// True if this model only supports embeddings (no text generation) diff --git a/Runtime/LLMGGUF.cs b/Runtime/LLMGGUF.cs index 8ba4ae3a..e1813b4c 100644 --- a/Runtime/LLMGGUF.cs +++ b/Runtime/LLMGGUF.cs @@ -241,6 +241,7 @@ private int PushField(ReaderField field, bool skip_sum = false) } // We can't deal with this one. LLMUnitySetup.LogError($"Unknown/unhandled field type {(GGUFValueType)raw_type}", true); + return (-1, null, null, null); } private int BuildFields(int offs, int count) From c6b16475bd9c5946f4a755ed05f85b1a9a6ba4eb Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 11 Dec 2025 16:43:04 +0200 Subject: [PATCH 50/69] update LlamaLib --- Runtime/LlamaLib/LLM.cs | 5 - Runtime/LlamaLib/LLMAgent.cs | 11 +- Runtime/LlamaLib/LlamaLib.cs | 859 +++++++++++++++++++---------------- 3 files changed, 478 insertions(+), 397 deletions(-) diff --git a/Runtime/LlamaLib/LLM.cs b/Runtime/LlamaLib/LLM.cs index d0b695f0..0e1d8193 100644 --- a/Runtime/LlamaLib/LLM.cs +++ b/Runtime/LlamaLib/LLM.cs @@ -69,11 +69,6 @@ protected void CheckLlamaLib() if (disposed) throw new ObjectDisposedException(GetType().Name); if (llamaLib == null) throw new InvalidOperationException("LlamaLib instance is not initialized"); if (llm == IntPtr.Zero) throw new InvalidOperationException("LLM instance is not initialized"); - if (llamaLib.LLM_Status_Code() != 0) - { - string status_msg = Marshal.PtrToStringAnsi(llamaLib.LLM_Status_Message()) ?? string.Empty; - throw new AccessViolationException(status_msg); - } } public virtual void Dispose() {} diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 07a8319a..4f12eb03 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -75,9 +75,9 @@ public LLMAgent(LLMLocal _llm, string _systemPrompt = "", string _userRole = "us llmBase = _llm; llamaLib = llmBase.llamaLib; - llm = llamaLib.LLMAgent_Construct(llmBase.llm, - _systemPrompt ?? string.Empty, - _userRole ?? "user", + llm = llamaLib.LLMAgent_Construct(llmBase.llm, + _systemPrompt ?? string.Empty, + _userRole ?? "user", _assistantRole ?? "assistant"); if (llm == IntPtr.Zero) throw new InvalidOperationException("Failed to create LLMAgent"); } @@ -179,7 +179,7 @@ public List GetHistory() } } } - catch { } + catch {} return messages; } @@ -306,7 +306,6 @@ public void Cancel() llamaLib.LLM_Cancel(llm, SlotId); } - // Override slot-based methods to hide them private new string SaveSlot(int id_slot, string filepath) { @@ -323,4 +322,4 @@ public void Cancel() Cancel(); } } -} \ No newline at end of file +} diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 144dc1f0..ea6c85b7 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -8,14 +8,348 @@ namespace UndreamAI.LlamaLib { public class LlamaLib { - public string architecture { get; private set; } + //################################################## FUNCTION DELEGATES ##################################################// - // Function delegates [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void CharArrayCallback([MarshalAs(UnmanagedType.LPStr)] string charArray); + // Main lib + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Enable_Reasoning_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Apply_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Tokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Detokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string tokens_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Embeddings_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Completion_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, [MarshalAs(UnmanagedType.I1)] bool return_response_json = false); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Save_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Load_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Cancel_Delegate(IntPtr llm, int idSlot); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool LLM_Lora_Weight_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string loras_as_json); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Lora_List_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Delete_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Start_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + [return : MarshalAs(UnmanagedType.I1)] + public delegate bool LLM_Started_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Stop_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Start_Server_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string host = "0.0.0.0", int port = -1, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Stop_Server_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Join_Service_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Join_Server_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string sslCert, [MarshalAs(UnmanagedType.LPStr)] string sslKey); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLM_Status_Code_Delegate(); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Status_Message_Delegate(); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLM_Embedding_Size_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_Construct_Delegate( + [MarshalAs(UnmanagedType.LPStr)] string modelPath, + int numSlots = 1, + int numThreads = -1, + int numGpuLayers = 0, + [MarshalAs(UnmanagedType.I1)] bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_From_Command_Delegate([MarshalAs(UnmanagedType.LPStr)] string paramsString); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMService_Command_Delegate(IntPtr llm); + + // LLMClient functions + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMClient_Construct_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMClient_Construct_Remote_Delegate( + [MarshalAs(UnmanagedType.LPStr)] string url, int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = "", int numRetries = 5 + ); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMClient_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string SSLCert); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool LLMClient_Is_Server_Alive_Delegate(IntPtr llm); + + // LLMAgent functions + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Construct_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", + [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", + [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_User_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_User_Role_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_Assistant_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_Assistant_Role_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_System_Prompt_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_System_Prompt_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_Grammar_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string grammar); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Get_Grammar_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLM_Set_Completion_Parameters_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string parameters); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLM_Get_Completion_Parameters_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_Slot_Delegate(IntPtr llm, int slotId); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLMAgent_Get_Slot_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string userPrompt, + [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, + CharArrayCallback callback = null, + [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Clear_History_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr LLMAgent_Get_History_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Set_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, + [MarshalAs(UnmanagedType.LPStr)] string role, + [MarshalAs(UnmanagedType.LPStr)] string content); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Remove_Last_Message_Delegate(IntPtr llm); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Save_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Load_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate int LLMAgent_Get_History_Size_Delegate(IntPtr llm); + + //################################################## FUNCTION POINTERS ##################################################// + + // Main lib + public LLM_Enable_Reasoning_Delegate LLM_Enable_Reasoning_Internal; + public LLM_Apply_Template_Delegate LLM_Apply_Template_Internal; + public LLM_Tokenize_Delegate LLM_Tokenize_Internal; + public LLM_Detokenize_Delegate LLM_Detokenize_Internal; + public LLM_Embeddings_Delegate LLM_Embeddings_Internal; + public LLM_Completion_Delegate LLM_Completion_Internal; + public LLM_Save_Slot_Delegate LLM_Save_Slot_Internal; + public LLM_Load_Slot_Delegate LLM_Load_Slot_Internal; + public LLM_Cancel_Delegate LLM_Cancel_Internal; + public LLM_Lora_Weight_Delegate LLM_Lora_Weight_Internal; + public LLM_Lora_List_Delegate LLM_Lora_List_Internal; + public LLM_Delete_Delegate LLM_Delete_Internal; + public LLM_Start_Delegate LLM_Start_Internal; + public LLM_Started_Delegate LLM_Started_Internal; + public LLM_Stop_Delegate LLM_Stop_Internal; + public LLM_Start_Server_Delegate LLM_Start_Server_Internal; + public LLM_Stop_Server_Delegate LLM_Stop_Server_Internal; + public LLM_Join_Service_Delegate LLM_Join_Service_Internal; + public LLM_Join_Server_Delegate LLM_Join_Server_Internal; + public LLM_Set_SSL_Delegate LLM_Set_SSL_Internal; + public LLM_Status_Code_Delegate LLM_Status_Code_Internal; + public LLM_Status_Message_Delegate LLM_Status_Message_Internal; + public LLM_Embedding_Size_Delegate LLM_Embedding_Size_Internal; + public LLMService_Construct_Delegate LLMService_Construct_Internal; + public LLMService_From_Command_Delegate LLMService_From_Command_Internal; + public LLMService_Command_Delegate LLMService_Command_Internal; + public LLMClient_Construct_Delegate LLMClient_Construct_Internal; + public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote_Internal; + public LLMClient_Set_SSL_Delegate LLMClient_Set_SSL_Internal; + public LLMClient_Is_Server_Alive_Delegate LLMClient_Is_Server_Alive_Internal; + public LLMAgent_Construct_Delegate LLMAgent_Construct_Internal; + public LLMAgent_Set_User_Role_Delegate LLMAgent_Set_User_Role_Internal; + public LLMAgent_Get_User_Role_Delegate LLMAgent_Get_User_Role_Internal; + public LLMAgent_Set_Assistant_Role_Delegate LLMAgent_Set_Assistant_Role_Internal; + public LLMAgent_Get_Assistant_Role_Delegate LLMAgent_Get_Assistant_Role_Internal; + public LLMAgent_Set_System_Prompt_Delegate LLMAgent_Set_System_Prompt_Internal; + public LLMAgent_Get_System_Prompt_Delegate LLMAgent_Get_System_Prompt_Internal; + public LLMAgent_Set_Slot_Delegate LLMAgent_Set_Slot_Internal; + public LLMAgent_Get_Slot_Delegate LLMAgent_Get_Slot_Internal; + public LLM_Set_Completion_Parameters_Delegate LLM_Set_Completion_Parameters_Internal; + public LLM_Get_Completion_Parameters_Delegate LLM_Get_Completion_Parameters_Internal; + public LLM_Set_Grammar_Delegate LLM_Set_Grammar_Internal; + public LLM_Get_Grammar_Delegate LLM_Get_Grammar_Internal; + public LLMAgent_Chat_Delegate LLMAgent_Chat_Internal; + public LLMAgent_Clear_History_Delegate LLMAgent_Clear_History_Internal; + public LLMAgent_Get_History_Delegate LLMAgent_Get_History_Internal; + public LLMAgent_Set_History_Delegate LLMAgent_Set_History_Internal; + public LLMAgent_Add_Message_Delegate LLMAgent_Add_Message_Internal; + public LLMAgent_Remove_Last_Message_Delegate LLMAgent_Remove_Last_Message_Internal; + public LLMAgent_Save_History_Delegate LLMAgent_Save_History_Internal; + public LLMAgent_Load_History_Delegate LLMAgent_Load_History_Internal; + public LLMAgent_Get_History_Size_Delegate LLMAgent_Get_History_Size_Internal; + + //################################################## STATUS CHECKING WRAPPER ##################################################// + + public void CheckStatus() + { + int status = LLM_Status_Code_Internal(); + if (status != 0) + { + string msg = Marshal.PtrToStringAnsi(LLM_Status_Message_Internal()) ?? ""; + throw new InvalidOperationException($"LlamaLib error {status}: {msg}"); + } + } + + private T CallWithStatus(Func f) + { + CheckStatus(); + T r = f(); + CheckStatus(); + return r; + } + + private void CallWithStatus(Action a) + { + CheckStatus(); + a(); + CheckStatus(); + } + + //################################################## COMMON IMPLEMENTATION ##################################################// + + public string architecture { get; private set; } + + public void LLM_Enable_Reasoning(IntPtr llm, bool enable_reasoning) => CallWithStatus(() => LLM_Enable_Reasoning_Internal(llm, enable_reasoning)); + public IntPtr LLM_Apply_Template(IntPtr llm, string messages_as_json) => CallWithStatus(() => LLM_Apply_Template_Internal(llm, messages_as_json)); + public IntPtr LLM_Tokenize(IntPtr llm, string query) => CallWithStatus(() => LLM_Tokenize_Internal(llm, query)); + public IntPtr LLM_Detokenize(IntPtr llm, string tokens_as_json) => CallWithStatus(() => LLM_Detokenize_Internal(llm, tokens_as_json)); + public IntPtr LLM_Embeddings(IntPtr llm, string query) => CallWithStatus(() => LLM_Embeddings_Internal(llm, query)); + public IntPtr LLM_Completion(IntPtr llm, string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false) => CallWithStatus(() => LLM_Completion_Internal(llm, query, callback, id_slot, return_response_json)); + public IntPtr LLM_Save_Slot(IntPtr llm, int id_slot, string filepath) => CallWithStatus(() => LLM_Save_Slot_Internal(llm, id_slot, filepath)); + public IntPtr LLM_Load_Slot(IntPtr llm, int id_slot, string filepath) => CallWithStatus(() => LLM_Load_Slot_Internal(llm, id_slot, filepath)); + public void LLM_Cancel(IntPtr llm, int idSlot) => CallWithStatus(() => LLM_Cancel_Internal(llm, idSlot)); + public bool LLM_Lora_Weight(IntPtr llm, string loras_as_json) => CallWithStatus(() => LLM_Lora_Weight_Internal(llm, loras_as_json)); + public IntPtr LLM_Lora_List(IntPtr llm) => CallWithStatus(() => LLM_Lora_List_Internal(llm)); + public void LLM_Delete(IntPtr llm) => CallWithStatus(() => LLM_Delete_Internal(llm)); + public void LLM_Start(IntPtr llm) => CallWithStatus(() => LLM_Start_Internal(llm)); + public bool LLM_Started(IntPtr llm) => CallWithStatus(() => LLM_Started_Internal(llm)); + public void LLM_Stop(IntPtr llm) => CallWithStatus(() => LLM_Stop_Internal(llm)); + public void LLM_Start_Server(IntPtr llm, string host = "0.0.0.0", int port = -1, string apiKey = "") => CallWithStatus(() => LLM_Start_Server_Internal(llm, host, port, apiKey)); + public void LLM_Stop_Server(IntPtr llm) => CallWithStatus(() => LLM_Stop_Server_Internal(llm)); + public void LLM_Join_Service(IntPtr llm) => CallWithStatus(() => LLM_Join_Service_Internal(llm)); + public void LLM_Join_Server(IntPtr llm) => CallWithStatus(() => LLM_Join_Server_Internal(llm)); + public void LLM_Set_SSL(IntPtr llm, string sslCert, string sslKey) => CallWithStatus(() => LLM_Set_SSL_Internal(llm, sslCert, sslKey)); + public int LLM_Status_Code() => CallWithStatus(() => LLM_Status_Code_Internal()); + public IntPtr LLM_Status_Message() => CallWithStatus(() => LLM_Status_Message_Internal()); + public int LLM_Embedding_Size(IntPtr llm) => CallWithStatus(() => LLM_Embedding_Size_Internal(llm)); + public IntPtr LLMService_Construct( + string modelPath, + int numSlots = 1, + int numThreads = -1, + int numGpuLayers = 0, + bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default + ) => CallWithStatus(() => LLMService_Construct_Internal(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths)); + public IntPtr LLMService_From_Command(string paramsString) => CallWithStatus(() => LLMService_From_Command_Internal(paramsString)); + public IntPtr LLMService_Command(IntPtr llm) => CallWithStatus(() => LLMService_Command_Internal(llm)); + public IntPtr LLMClient_Construct(IntPtr llm) => CallWithStatus(() => LLMClient_Construct_Internal(llm)); + public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "", int numRetries = 5) => CallWithStatus(() => LLMClient_Construct_Remote_Internal(url, port, apiKey, numRetries)); + public void LLMClient_Set_SSL(IntPtr llm, string SSLCert) => CallWithStatus(() => LLMClient_Set_SSL_Internal(llm, SSLCert)); + public bool LLMClient_Is_Server_Alive(IntPtr llm) => CallWithStatus(() => LLMClient_Is_Server_Alive_Internal(llm)); + public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "", string userRole = "user", string assistantRole = "assistant") + => CallWithStatus(() => LLMAgent_Construct_Internal(llm, systemPrompt, userRole, assistantRole)); + public void LLMAgent_Set_User_Role(IntPtr llm, string userRole) => CallWithStatus(() => LLMAgent_Set_User_Role_Internal(llm, userRole)); + public IntPtr LLMAgent_Get_User_Role(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_User_Role_Internal(llm)); + public void LLMAgent_Set_Assistant_Role(IntPtr llm, string assistantRole) => CallWithStatus(() => LLMAgent_Set_Assistant_Role_Internal(llm, assistantRole)); + public IntPtr LLMAgent_Get_Assistant_Role(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_Assistant_Role_Internal(llm)); + public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => CallWithStatus(() => LLMAgent_Set_System_Prompt_Internal(llm, systemPrompt)); + public IntPtr LLMAgent_Get_System_Prompt(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_System_Prompt_Internal(llm)); + public void LLM_Set_Completion_Parameters(IntPtr llm, string parameters) => CallWithStatus(() => LLM_Set_Completion_Parameters_Internal(llm, parameters)); + public IntPtr LLM_Get_Completion_Parameters(IntPtr llm) => CallWithStatus(() => LLM_Get_Completion_Parameters_Internal(llm)); + public void LLM_Set_Grammar(IntPtr llm, string grammar) => CallWithStatus(() => LLM_Set_Grammar_Internal(llm, grammar)); + public IntPtr LLM_Get_Grammar(IntPtr llm) => CallWithStatus(() => LLM_Get_Grammar_Internal(llm)); + public void LLMAgent_Set_Slot(IntPtr llm, int slotId) => CallWithStatus(() => LLMAgent_Set_Slot_Internal(llm, slotId)); + public int LLMAgent_Get_Slot(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_Slot_Internal(llm)); + public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = true, CharArrayCallback callback = null, bool returnResponseJson = false) + => CallWithStatus(() => LLMAgent_Chat_Internal(llm, userPrompt, addToHistory, callback, returnResponseJson)); + public void LLMAgent_Clear_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Clear_History_Internal(llm)); + public IntPtr LLMAgent_Get_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_History_Internal(llm)); + public void LLMAgent_Set_History(IntPtr llm, string historyJson) => CallWithStatus(() => LLMAgent_Set_History_Internal(llm, historyJson)); + public void LLMAgent_Add_Message(IntPtr llm, string role, string content) => CallWithStatus(() => LLMAgent_Add_Message_Internal(llm, role, content)); + public void LLMAgent_Remove_Last_Message(IntPtr llm) => CallWithStatus(() => LLMAgent_Remove_Last_Message_Internal(llm)); + public void LLMAgent_Save_History(IntPtr llm, string filepath) => CallWithStatus(() => LLMAgent_Save_History_Internal(llm, filepath)); + public void LLMAgent_Load_History(IntPtr llm, string filepath) => CallWithStatus(() => LLMAgent_Load_History_Internal(llm, filepath)); + public int LLMAgent_Get_History_Size(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_History_Size_Internal(llm)); + + //################################################## MOBILE IMPLEMENTATION ##################################################// + #if ANDROID || IOS || VISIONOS - // Static P/Invoke declarations for mobile platforms #if ANDROID_ARM64 public const string DllName = "libllamalib_android-arm64"; #elif ANDROID_X64 @@ -24,131 +358,97 @@ public class LlamaLib public const string DllName = "__Internal"; #endif - public LlamaLib(bool gpu = false) - { -#if ANDROID_ARM64 - architecture = "android-arm64"; -#elif ANDROID_X64 - architecture = "android-x64"; -#elif IOS - architecture = "ios-arm64"; -#elif VISIONOS - architecture = "visionos-arm64"; -#endif - } - - // Base LLM functions + // Static functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Debug")] public static extern void LLM_Debug_Static(int debugLevel); - public static void Debug(int debugLevel) => LLM_Debug_Static(debugLevel); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Logging_Callback")] public static extern void LLM_Logging_Callback_Static(CharArrayCallback callback); - public static void LoggingCallback(CharArrayCallback callback) => LLM_Logging_Callback_Static(callback); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Logging_Stop")] public static extern void LLM_Logging_Stop_Static(); + + public static void Debug(int debugLevel) => LLM_Debug_Static(debugLevel); + public static void LoggingCallback(CharArrayCallback callback) => LLM_Logging_Callback_Static(callback); public static void LoggingStop() => LLM_Logging_Stop_Static(); + // LLM functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Enable_Reasoning")] public static extern void LLM_Enable_Reasoning_Static(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); - public void LLM_Enable_Reasoning(IntPtr llm, bool enable_reasoning) => LLM_Enable_Reasoning_Static(llm, enable_reasoning); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Apply_Template")] public static extern IntPtr LLM_Apply_Template_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); - public IntPtr LLM_Apply_Template(IntPtr llm, string messages_as_json) => LLM_Apply_Template_Static(llm, messages_as_json); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Tokenize")] public static extern IntPtr LLM_Tokenize_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); - public IntPtr LLM_Tokenize(IntPtr llm, string query) => LlamaLib.LLM_Tokenize_Static(llm, query); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Detokenize")] public static extern IntPtr LLM_Detokenize_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string tokens_as_json); - public IntPtr LLM_Detokenize(IntPtr llm, string tokens_as_json) => LlamaLib.LLM_Detokenize_Static(llm, tokens_as_json); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Embeddings")] public static extern IntPtr LLM_Embeddings_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); - public IntPtr LLM_Embeddings(IntPtr llm, string query) => LlamaLib.LLM_Embeddings_Static(llm, query); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Completion")] public static extern IntPtr LLM_Completion_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, [MarshalAs(UnmanagedType.I1)] bool return_response_json = false); - public IntPtr LLM_Completion(IntPtr llm, string query, CharArrayCallback callback, int id_slot = -1, bool return_response_json = false) => LlamaLib.LLM_Completion_Static(llm, query, callback, id_slot, return_response_json); // LLMLocal functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Save_Slot")] public static extern IntPtr LLM_Save_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); - public IntPtr LLM_Save_Slot(IntPtr llm, int id_slot, string filepath) => LlamaLib.LLM_Save_Slot_Static(llm, id_slot, filepath); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Load_Slot")] public static extern IntPtr LLM_Load_Slot_Static(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); - public IntPtr LLM_Load_Slot(IntPtr llm, int id_slot, string filepath) => LlamaLib.LLM_Load_Slot_Static(llm, id_slot, filepath); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Cancel")] public static extern void LLM_Cancel_Static(IntPtr llm, int idSlot); - public void LLM_Cancel(IntPtr llm, int idSlot) => LlamaLib.LLM_Cancel_Static(llm, idSlot); // LLMProvider functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_Weight")] public static extern bool LLM_Lora_Weight_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string loras_as_json); - public bool LLM_Lora_Weight(IntPtr llm, string loras_as_json) => LlamaLib.LLM_Lora_Weight_Static(llm, loras_as_json); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Lora_List")] public static extern IntPtr LLM_Lora_List_Static(IntPtr llm); - public IntPtr LLM_Lora_List(IntPtr llm) => LlamaLib.LLM_Lora_List_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Delete")] public static extern void LLM_Delete_Static(IntPtr llm); - public void LLM_Delete(IntPtr llm) => LlamaLib.LLM_Delete_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Start")] public static extern void LLM_Start_Static(IntPtr llm); - public void LLM_Start(IntPtr llm) => LlamaLib.LLM_Start_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Started")] [return : MarshalAs(UnmanagedType.I1)] public static extern bool LLM_Started_Static(IntPtr llm); - public bool LLM_Started(IntPtr llm) => LlamaLib.LLM_Started_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Stop")] public static extern void LLM_Stop_Static(IntPtr llm); - public void LLM_Stop(IntPtr llm) => LlamaLib.LLM_Stop_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Start_Server")] public static extern void LLM_Start_Server_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string host = "0.0.0.0", int port = -1, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); - public void LLM_Start_Server(IntPtr llm, string host = "0.0.0.0", int port = -1, string apiKey = "") => LlamaLib.LLM_Start_Server_Static(llm, host, port, apiKey); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Stop_Server")] public static extern void LLM_Stop_Server_Static(IntPtr llm); - public void LLM_Stop_Server(IntPtr llm) => LlamaLib.LLM_Stop_Server_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Join_Service")] public static extern void LLM_Join_Service_Static(IntPtr llm); - public void LLM_Join_Service(IntPtr llm) => LlamaLib.LLM_Join_Service_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Join_Server")] public static extern void LLM_Join_Server_Static(IntPtr llm); - public void LLM_Join_Server(IntPtr llm) => LlamaLib.LLM_Join_Server_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_SSL")] public static extern void LLM_Set_SSL_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string sslCert, [MarshalAs(UnmanagedType.LPStr)] string sslKey); - public void LLM_Set_SSL(IntPtr llm, string sslCert, string sslKey) => LlamaLib.LLM_Set_SSL_Static(llm, sslCert, sslKey); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Status_Code")] public static extern int LLM_Status_Code_Static(); - public int LLM_Status_Code() => LlamaLib.LLM_Status_Code_Static(); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Status_Message")] public static extern IntPtr LLM_Status_Message_Static(); - public IntPtr LLM_Status_Message() => LlamaLib.LLM_Status_Message_Static(); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Embedding_Size")] public static extern int LLM_Embedding_Size_Static(IntPtr llm); - public int LLM_Embedding_Size(IntPtr llm) => LlamaLib.LLM_Embedding_Size_Static(llm); // LLMService functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_Construct")] @@ -163,32 +463,16 @@ public static extern IntPtr LLMService_Construct_Static( [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, int loraCount = 0, IntPtr loraPaths = default); - public IntPtr LLMService_Construct( - int numSlots = 1, - string modelPath, - int numThreads = -1, - int numGpuLayers = 0, - bool flashAttention = false, - int contextSize = 4096, - int batchSize = 2048, - bool embeddingOnly = false, - int loraCount = 0, - IntPtr loraPaths = default) - => LlamaLib.LLMService_Construct_Static(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, - contextSize, batchSize, embeddingOnly, loraCount, loraPaths); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_From_Command")] public static extern IntPtr LLMService_From_Command_Static([MarshalAs(UnmanagedType.LPStr)] string paramsString); - public IntPtr LLMService_From_Command(string paramsString) => LlamaLib.LLMService_From_Command_Static(paramsString); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_Command")] public static extern IntPtr LLMService_Command_Static(IntPtr llm); - public IntPtr LLMService_Command(IntPtr llm) => LlamaLib.LLMService_Command_Static(llm); // LLMClient functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Construct")] public static extern IntPtr LLMClient_Construct_Static(IntPtr llm); - public IntPtr LLMClient_Construct(IntPtr llm) => LlamaLib.LLMClient_Construct_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Construct_Remote")] public static extern IntPtr LLMClient_Construct_Remote_Static( @@ -196,15 +480,12 @@ public static extern IntPtr LLMClient_Construct_Remote_Static( int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = "", int numRetries = 5); - public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "", int numRetries = 5) => LlamaLib.LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Set_SSL")] public static extern void LLMClient_Set_SSL_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string SSLCert); - public void LLMClient_Set_SSL(IntPtr llm, string SSLCert) => LlamaLib.LLMClient_Set_SSL_Static(llm, SSLCert); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMClient_Is_Server_Alive")] public static extern bool LLMClient_Is_Server_Alive_Static(IntPtr llm); - public bool LLMClient_Is_Server_Alive(IntPtr llm) => LlamaLib.LLMClient_Is_Server_Alive_Static(llm); // LLMAgent functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Construct")] @@ -212,56 +493,42 @@ public static extern IntPtr LLMAgent_Construct_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); - public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "", string userRole = "user", string assistantRole = "assistant") - => LLMAgent_Construct_Static(llm, systemPrompt, userRole, assistantRole); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_User_Role")] public static extern void LLMAgent_Set_User_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); - public void LLMAgent_Set_User_Role(IntPtr llm, string userRole) => LLMAgent_Set_User_Role_Static(llm, userRole); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_User_Role")] public static extern IntPtr LLMAgent_Get_User_Role_Static(IntPtr llm); - public IntPtr LLMAgent_Get_User_Role(IntPtr llm) => LLMAgent_Get_User_Role_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_Assistant_Role")] public static extern void LLMAgent_Set_Assistant_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); - public void LLMAgent_Set_Assistant_Role(IntPtr llm, string assistantRole) => LLMAgent_Set_Assistant_Role_Static(llm, assistantRole); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_Assistant_Role")] public static extern IntPtr LLMAgent_Get_Assistant_Role_Static(IntPtr llm); - public IntPtr LLMAgent_Get_Assistant_Role(IntPtr llm) => LLMAgent_Get_Assistant_Role_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_System_Prompt")] public static extern void LLMAgent_Set_System_Prompt_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); - public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => LLMAgent_Set_System_Prompt_Static(llm, systemPrompt); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_System_Prompt")] public static extern IntPtr LLMAgent_Get_System_Prompt_Static(IntPtr llm); - public IntPtr LLMAgent_Get_System_Prompt(IntPtr llm) => LLMAgent_Get_System_Prompt_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Completion_Parameters")] public static extern void LLM_Set_Completion_Parameters_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string parameters); - public void LLM_Set_Completion_Parameters(IntPtr llm, string parameters) => LLM_Set_Completion_Parameters_Static(llm, parameters); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Completion_Parameters")] public static extern IntPtr LLM_Get_Completion_Parameters_Static(IntPtr llm); - public IntPtr LLM_Get_Completion_Parameters(IntPtr llm) => LLM_Get_Completion_Parameters_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Set_Grammar")] public static extern void LLM_Set_Grammar_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string grammar); - public void LLM_Set_Grammar(IntPtr llm, string grammar) => LLM_Set_Grammar_Static(llm, grammar); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLM_Get_Grammar")] public static extern IntPtr LLM_Get_Grammar_Static(IntPtr llm); - public IntPtr LLM_Get_Grammar(IntPtr llm) => LLM_Get_Grammar_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_Slot")] public static extern void LLMAgent_Set_Slot_Static(IntPtr llm, int slotId); - public void LLMAgent_Set_Slot(IntPtr llm, int slotId) => LLMAgent_Set_Slot_Static(llm, slotId); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_Slot")] - public static extern IntPtr LLMAgent_Get_Slot_Static(IntPtr llm); - public IntPtr LLMAgent_Get_Slot(IntPtr llm) => LLMAgent_Get_Slot_Static(llm); + public static extern int LLMAgent_Get_Slot_Static(IntPtr llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Chat")] public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, @@ -269,42 +536,98 @@ public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, CharArrayCallback callback = null, [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); - public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = true, CharArrayCallback callback = null, bool returnResponseJson = false) - => LLMAgent_Chat_Static(llm, userPrompt, addToHistory, callback, returnResponseJson); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Clear_History")] public static extern void LLMAgent_Clear_History_Static(IntPtr llm); - public void LLMAgent_Clear_History(IntPtr llm) => LLMAgent_Clear_History_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_History")] public static extern IntPtr LLMAgent_Get_History_Static(IntPtr llm); - public IntPtr LLMAgent_Get_History(IntPtr llm) => LLMAgent_Get_History_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_History")] public static extern void LLMAgent_Set_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); - public void LLMAgent_Set_History(IntPtr llm, string historyJson) => LLMAgent_Set_History_Static(llm, historyJson); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Add_Message")] public static extern void LLMAgent_Add_Message_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string role, [MarshalAs(UnmanagedType.LPStr)] string content); - public void LLMAgent_Add_Message(IntPtr llm, string role, string content) => LLMAgent_Add_Message_Static(llm, role, content); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Remove_Last_Message")] public static extern void LLMAgent_Remove_Last_Message_Static(IntPtr llm); - public void LLMAgent_Remove_Last_Message(IntPtr llm) => LLMAgent_Remove_Last_Message_Static(llm); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Save_History")] public static extern void LLMAgent_Save_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); - public void LLMAgent_Save_History(IntPtr llm, string filepath) => LLMAgent_Save_History_Static(llm, filepath); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Load_History")] public static extern void LLMAgent_Load_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); - public void LLMAgent_Load_History(IntPtr llm, string filepath) => LLMAgent_Load_History_Static(llm, filepath); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_History_Size")] public static extern int LLMAgent_Get_History_Size_Static(IntPtr llm); - public int LLMAgent_Get_History_Size(IntPtr llm) => LLMAgent_Get_History_Size_Static(llm); + + public LlamaLib(bool gpu = false) + { +#if ANDROID_ARM64 + architecture = "android-arm64"; +#elif ANDROID_X64 + architecture = "android-x64"; +#elif IOS + architecture = "ios-arm64"; +#elif VISIONOS + architecture = "visionos-arm64"; +#endif + + LLM_Enable_Reasoning_Internal = (llm, enable_reasoning) => LLM_Enable_Reasoning_Static(llm, enable_reasoning); + LLM_Apply_Template_Internal = (llm, messages_as_json) => LLM_Apply_Template_Static(llm, messages_as_json); + LLM_Tokenize_Internal = (llm, query) => LLM_Tokenize_Static(llm, query); + LLM_Detokenize_Internal = (llm, tokens_as_json) => LLM_Detokenize_Static(llm, tokens_as_json); + LLM_Embeddings_Internal = (llm, query) => LLM_Embeddings_Static(llm, query); + LLM_Completion_Internal = (llm, query, callback, id_slot, return_response_json) => LLM_Completion_Static(llm, query, callback, id_slot, return_response_json); + LLM_Save_Slot_Internal = (llm, id_slot, filepath) => LLM_Save_Slot_Static(llm, id_slot, filepath); + LLM_Load_Slot_Internal = (llm, id_slot, filepath) => LLM_Load_Slot_Static(llm, id_slot, filepath); + LLM_Cancel_Internal = (llm, idSlot) => LLM_Cancel_Static(llm, idSlot); + LLM_Lora_Weight_Internal = (llm, loras_as_json) => LLM_Lora_Weight_Static(llm, loras_as_json); + LLM_Lora_List_Internal = (llm) => LLM_Lora_List_Static(llm); + LLM_Delete_Internal = (llm) => LLM_Delete_Static(llm); + LLM_Start_Internal = (llm) => LLM_Start_Static(llm); + LLM_Started_Internal = (llm) => LLM_Started_Static(llm); + LLM_Stop_Internal = (llm) => LLM_Stop_Static(llm); + LLM_Start_Server_Internal = (llm, host, port) => LLM_Start_Server_Static(llm, host, port, apiKey); + LLM_Stop_Server_Internal = (llm) => LLM_Stop_Server_Static(llm); + LLM_Join_Service_Internal = (llm) => LLM_Join_Service_Static(llm); + LLM_Join_Server_Internal = (llm) => LLM_Join_Server_Static(llm); + LLM_Set_SSL_Internal = (llm, sslCert, sslKey) => LLM_Set_SSL_Static(llm, sslCert, sslKey); + LLM_Status_Code_Internal = () => LLM_Status_Code_Static(); + LLM_Status_Message_Internal = () => LLM_Status_Message_Static(); + LLM_Embedding_Size_Internal = (llm) => LLM_Embedding_Size_Static(llm); + LLMService_Construct_Internal = (modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths) => LLMService_Construct_Static(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths); + LLMService_From_Command_Internal = (paramsString) => LLMService_From_Command_Static(paramsString); + LLMService_Command_Internal = (llm) => LLMService_Command_Static(llm); + LLMClient_Construct_Internal = (llm) => LLMClient_Construct_Static(llm); + LLMClient_Construct_Remote_Internal = (url, port, apiKey, numRetries) => LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); + LLMClient_Set_SSL_Internal = (llm, SSLCert) => LLMClient_Set_SSL_Static(llm, SSLCert); + LLMClient_Is_Server_Alive_Internal = (llm) => LLMClient_Is_Server_Alive_Static(llm); + LLMAgent_Construct_Internal = (llm, systemPrompt, userRole, assistantRole) => LLMAgent_Construct_Static(llm, systemPrompt, userRole, assistantRole); + LLMAgent_Set_User_Role_Internal = (llm, userRole) => LLMAgent_Set_User_Role_Static(llm, userRole); + LLMAgent_Get_User_Role_Internal = (llm) => LLMAgent_Get_User_Role_Static(llm); + LLMAgent_Set_Assistant_Role_Internal = (llm, assistantRole) => LLMAgent_Set_Assistant_Role_Static(llm, assistantRole); + LLMAgent_Get_Assistant_Role_Internal = (llm) => LLMAgent_Get_Assistant_Role_Static(llm); + LLMAgent_Set_System_Prompt_Internal = (llm, systemPrompt) => LLMAgent_Set_System_Prompt_Static(llm, systemPrompt); + LLMAgent_Get_System_Prompt_Internal = (llm) => LLMAgent_Get_System_Prompt_Static(llm); + LLM_Set_Completion_Parameters_Internal = (llm, parameters) => LLM_Set_Completion_Parameters_Static(llm, parameters); + LLM_Get_Completion_Parameters_Internal = (llm) => LLM_Get_Completion_Parameters_Static(llm); + LLM_Set_Grammar_Internal = (llm, grammar) => LLM_Set_Grammar_Static(llm, grammar); + LLM_Get_Grammar_Internal = (llm) => LLM_Get_Grammar_Static(llm); + LLMAgent_Set_Slot_Internal = (llm, slotId) => LLMAgent_Set_Slot_Static(llm, slotId); + LLMAgent_Get_Slot_Internal = (llm) => LLMAgent_Get_Slot_Static(llm); + LLMAgent_Chat_Internal = (llm, userPrompt, addToHistory, callback, returnResponseJson) => LLMAgent_Chat_Static(llm, userPrompt, addToHistory, callback, returnResponseJson); + LLMAgent_Clear_History_Internal = (llm) => LLMAgent_Clear_History_Static(llm); + LLMAgent_Get_History_Internal = (llm) => LLMAgent_Get_History_Static(llm); + LLMAgent_Set_History_Internal = (llm, historyJson) => LLMAgent_Set_History_Static(llm, historyJson); + LLMAgent_Add_Message_Internal = (llm, role, content) => LLMAgent_Add_Message_Static(llm, role, content); + LLMAgent_Remove_Last_Message_Internal = (llm) => LLMAgent_Remove_Last_Message_Static(llm); + LLMAgent_Save_History_Internal = (llm, filepath) => LLMAgent_Save_History_Static(llm, filepath); + LLMAgent_Load_History_Internal = (llm, filepath) => LLMAgent_Load_History_Static(llm, filepath); + LLMAgent_Get_History_Size_Internal = (llm) => LLMAgent_Get_History_Size_Static(llm); + } #else // Desktop platform implementation with dynamic loading @@ -317,6 +640,16 @@ public static extern void LLMAgent_Add_Message_Static(IntPtr llm, private static int debugLevelGlobal = 0; private static CharArrayCallback loggingCallbackGlobal = null; + // Runtime lib + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate IntPtr Available_Architectures_Delegate([MarshalAs(UnmanagedType.I1)] bool gpu); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate bool Has_GPU_Layers_Delegate([MarshalAs(UnmanagedType.LPStr)] string command); + + public static Available_Architectures_Delegate Available_Architectures; + public static Has_GPU_Layers_Delegate Has_GPU_Layers; + private void LoadRuntimeLibrary() { lock (runtimeLock) @@ -449,68 +782,62 @@ private void LoadFunctionPointers() LLM_Debug = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Debug"); LLM_Logging_Callback = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Callback"); LLM_Logging_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Logging_Stop"); - LLM_Enable_Reasoning = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Enable_Reasoning"); - LLM_Apply_Template = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Apply_Template"); - LLM_Tokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); - LLM_Detokenize = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Detokenize"); - LLM_Embeddings = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embeddings"); - LLM_Completion = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Completion"); - LLM_Save_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Save_Slot"); - LLM_Load_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Load_Slot"); - LLM_Cancel = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Cancel"); - LLM_Lora_Weight = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_Weight"); - LLM_Lora_List = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_List"); - LLM_Delete = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Delete"); - LLM_Start = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start"); - LLM_Started = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Started"); - LLM_Stop = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop"); - LLM_Start_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start_Server"); - LLM_Stop_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop_Server"); - LLM_Join_Service = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Service"); - LLM_Join_Server = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Server"); - LLM_Set_SSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_SSL"); - LLM_Status_Code = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Code"); - LLM_Status_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Message"); - LLM_Embedding_Size = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embedding_Size"); - LLMService_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); - LLMService_From_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); - LLMService_Command = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Command"); - LLMClient_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); - LLMClient_Construct_Remote = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); - LLMClient_Set_SSL = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Set_SSL"); - LLMClient_Is_Server_Alive = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Is_Server_Alive"); - LLMAgent_Construct = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Construct"); - LLMAgent_Set_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_User_Role"); - LLMAgent_Get_User_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_User_Role"); - LLMAgent_Set_Assistant_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Assistant_Role"); - LLMAgent_Get_Assistant_Role = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Assistant_Role"); - LLMAgent_Set_System_Prompt = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_System_Prompt"); - LLMAgent_Get_System_Prompt = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_System_Prompt"); - LLMAgent_Set_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Slot"); - LLMAgent_Get_Slot = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Slot"); - LLM_Set_Completion_Parameters = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Completion_Parameters"); - LLM_Get_Completion_Parameters = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Completion_Parameters"); - LLM_Set_Grammar = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Grammar"); - LLM_Get_Grammar = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Grammar"); - LLMAgent_Chat = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Chat"); - LLMAgent_Clear_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Clear_History"); - LLMAgent_Get_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History"); - LLMAgent_Set_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_History"); - LLMAgent_Add_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_Message"); - LLMAgent_Remove_Last_Message = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Remove_Last_Message"); - LLMAgent_Save_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Save_History"); - LLMAgent_Load_History = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Load_History"); - LLMAgent_Get_History_Size = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History_Size"); - } - // Delegate definitions for desktop platforms - // Runtime lib - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr Available_Architectures_Delegate([MarshalAs(UnmanagedType.I1)] bool gpu); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool Has_GPU_Layers_Delegate([MarshalAs(UnmanagedType.LPStr)] string command); + LLM_Enable_Reasoning_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Enable_Reasoning"); + LLM_Apply_Template_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Apply_Template"); + LLM_Tokenize_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Tokenize"); + LLM_Detokenize_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Detokenize"); + LLM_Embeddings_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embeddings"); + LLM_Completion_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Completion"); + LLM_Save_Slot_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Save_Slot"); + LLM_Load_Slot_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Load_Slot"); + LLM_Cancel_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Cancel"); + LLM_Lora_Weight_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_Weight"); + LLM_Lora_List_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Lora_List"); + LLM_Delete_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Delete"); + LLM_Start_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start"); + LLM_Started_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Started"); + LLM_Stop_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop"); + LLM_Start_Server_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Start_Server"); + LLM_Stop_Server_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Stop_Server"); + LLM_Join_Service_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Service"); + LLM_Join_Server_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Join_Server"); + LLM_Set_SSL_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_SSL"); + LLM_Status_Code_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Code"); + LLM_Status_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Message"); + LLM_Embedding_Size_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embedding_Size"); + LLMService_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); + LLMService_From_Command_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); + LLMService_Command_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Command"); + LLMClient_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); + LLMClient_Construct_Remote_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); + LLMClient_Set_SSL_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Set_SSL"); + LLMClient_Is_Server_Alive_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Is_Server_Alive"); + LLMAgent_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Construct"); + LLMAgent_Set_User_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_User_Role"); + LLMAgent_Get_User_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_User_Role"); + LLMAgent_Set_Assistant_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Assistant_Role"); + LLMAgent_Get_Assistant_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Assistant_Role"); + LLMAgent_Set_System_Prompt_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_System_Prompt"); + LLMAgent_Get_System_Prompt_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_System_Prompt"); + LLMAgent_Set_Slot_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Slot"); + LLMAgent_Get_Slot_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Slot"); + LLM_Set_Completion_Parameters_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Completion_Parameters"); + LLM_Get_Completion_Parameters_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Completion_Parameters"); + LLM_Set_Grammar_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Set_Grammar"); + LLM_Get_Grammar_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Get_Grammar"); + LLMAgent_Chat_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Chat"); + LLMAgent_Clear_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Clear_History"); + LLMAgent_Get_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History"); + LLMAgent_Set_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_History"); + LLMAgent_Add_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_Message"); + LLMAgent_Remove_Last_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Remove_Last_Message"); + LLMAgent_Save_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Save_History"); + LLMAgent_Load_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Load_History"); + LLMAgent_Get_History_Size_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History_Size"); + } + // Static functions [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLM_Debug_Delegate(int debugLevel); @@ -520,249 +847,9 @@ private void LoadFunctionPointers() [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLM_Logging_Stop_Delegate(); - // Main lib - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Enable_Reasoning_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.I1)] bool enable_reasoning); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Apply_Template_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string messages_as_json); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Tokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Detokenize_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string tokens_as_json); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Embeddings_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Completion_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string query, CharArrayCallback callback, int id_slot = -1, [MarshalAs(UnmanagedType.I1)] bool return_response_json = false); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Save_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Load_Slot_Delegate(IntPtr llm, int id_slot, [MarshalAs(UnmanagedType.LPStr)] string filepath); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Cancel_Delegate(IntPtr llm, int idSlot); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool LLM_Lora_Weight_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string loras_as_json); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Lora_List_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Delete_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Start_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - [return : MarshalAs(UnmanagedType.I1)] - public delegate bool LLM_Started_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Stop_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Start_Server_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string host = "0.0.0.0", int port = -1, [MarshalAs(UnmanagedType.LPStr)] string apiKey = ""); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Stop_Server_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Join_Service_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Join_Server_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string sslCert, [MarshalAs(UnmanagedType.LPStr)] string sslKey); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate int LLM_Status_Code_Delegate(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Status_Message_Delegate(); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate int LLM_Embedding_Size_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMService_Construct_Delegate( - [MarshalAs(UnmanagedType.LPStr)] string modelPath, - int numSlots = 1, - int numThreads = -1, - int numGpuLayers = 0, - [MarshalAs(UnmanagedType.I1)] bool flashAttention = false, - int contextSize = 4096, - int batchSize = 2048, - [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, - int loraCount = 0, - IntPtr loraPaths = default); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMService_From_Command_Delegate([MarshalAs(UnmanagedType.LPStr)] string paramsString); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMService_Command_Delegate(IntPtr llm); - - // LLMClient functions - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMClient_Construct_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMClient_Construct_Remote_Delegate( - [MarshalAs(UnmanagedType.LPStr)] string url, int port, [MarshalAs(UnmanagedType.LPStr)] string apiKey = "", int numRetries = 5 - ); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMClient_Set_SSL_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string SSLCert); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate bool LLMClient_Is_Server_Alive_Delegate(IntPtr llm); - - // LLMAgent functions - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Construct_Delegate(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", - [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", - [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_User_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_User_Role_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_Assistant_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_Assistant_Role_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_System_Prompt_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_System_Prompt_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Set_Grammar_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string grammar); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Get_Grammar_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLM_Set_Completion_Parameters_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string parameters); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLM_Get_Completion_Parameters_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_Slot_Delegate(IntPtr llm, int slotId); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate int LLMAgent_Get_Slot_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string userPrompt, - [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, - CharArrayCallback callback = null, - [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Clear_History_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_History_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string role, - [MarshalAs(UnmanagedType.LPStr)] string content); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Remove_Last_Message_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Save_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Load_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string filepath); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate int LLMAgent_Get_History_Size_Delegate(IntPtr llm); - - - // Function pointers for desktop platforms - // Runtime lib - public static Available_Architectures_Delegate Available_Architectures; - public static Has_GPU_Layers_Delegate Has_GPU_Layers; - - // Main lib public LLM_Debug_Delegate LLM_Debug; public LLM_Logging_Callback_Delegate LLM_Logging_Callback; public LLM_Logging_Stop_Delegate LLM_Logging_Stop; - public LLM_Enable_Reasoning_Delegate LLM_Enable_Reasoning; - public LLM_Apply_Template_Delegate LLM_Apply_Template; - public LLM_Tokenize_Delegate LLM_Tokenize; - public LLM_Detokenize_Delegate LLM_Detokenize; - public LLM_Embeddings_Delegate LLM_Embeddings; - public LLM_Completion_Delegate LLM_Completion; - public LLM_Save_Slot_Delegate LLM_Save_Slot; - public LLM_Load_Slot_Delegate LLM_Load_Slot; - public LLM_Cancel_Delegate LLM_Cancel; - public LLM_Lora_Weight_Delegate LLM_Lora_Weight; - public LLM_Lora_List_Delegate LLM_Lora_List; - public LLM_Delete_Delegate LLM_Delete; - public LLM_Start_Delegate LLM_Start; - public LLM_Started_Delegate LLM_Started; - public LLM_Stop_Delegate LLM_Stop; - public LLM_Start_Server_Delegate LLM_Start_Server; - public LLM_Stop_Server_Delegate LLM_Stop_Server; - public LLM_Join_Service_Delegate LLM_Join_Service; - public LLM_Join_Server_Delegate LLM_Join_Server; - public LLM_Set_SSL_Delegate LLM_Set_SSL; - public LLM_Status_Code_Delegate LLM_Status_Code; - public LLM_Status_Message_Delegate LLM_Status_Message; - public LLM_Embedding_Size_Delegate LLM_Embedding_Size; - public LLMService_Construct_Delegate LLMService_Construct; - public LLMService_From_Command_Delegate LLMService_From_Command; - public LLMService_Command_Delegate LLMService_Command; - public LLMClient_Construct_Delegate LLMClient_Construct; - public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote; - public LLMClient_Set_SSL_Delegate LLMClient_Set_SSL; - public LLMClient_Is_Server_Alive_Delegate LLMClient_Is_Server_Alive; - public LLMAgent_Construct_Delegate LLMAgent_Construct; - public LLMAgent_Set_User_Role_Delegate LLMAgent_Set_User_Role; - public LLMAgent_Get_User_Role_Delegate LLMAgent_Get_User_Role; - public LLMAgent_Set_Assistant_Role_Delegate LLMAgent_Set_Assistant_Role; - public LLMAgent_Get_Assistant_Role_Delegate LLMAgent_Get_Assistant_Role; - public LLMAgent_Set_System_Prompt_Delegate LLMAgent_Set_System_Prompt; - public LLMAgent_Get_System_Prompt_Delegate LLMAgent_Get_System_Prompt; - public LLMAgent_Set_Slot_Delegate LLMAgent_Set_Slot; - public LLMAgent_Get_Slot_Delegate LLMAgent_Get_Slot; - public LLM_Set_Completion_Parameters_Delegate LLM_Set_Completion_Parameters; - public LLM_Get_Completion_Parameters_Delegate LLM_Get_Completion_Parameters; - public LLM_Set_Grammar_Delegate LLM_Set_Grammar; - public LLM_Get_Grammar_Delegate LLM_Get_Grammar; - public LLMAgent_Chat_Delegate LLMAgent_Chat; - public LLMAgent_Clear_History_Delegate LLMAgent_Clear_History; - public LLMAgent_Get_History_Delegate LLMAgent_Get_History; - public LLMAgent_Set_History_Delegate LLMAgent_Set_History; - public LLMAgent_Add_Message_Delegate LLMAgent_Add_Message; - public LLMAgent_Remove_Last_Message_Delegate LLMAgent_Remove_Last_Message; - public LLMAgent_Save_History_Delegate LLMAgent_Save_History; - public LLMAgent_Load_History_Delegate LLMAgent_Load_History; - public LLMAgent_Get_History_Size_Delegate LLMAgent_Get_History_Size; public static void Debug(int debugLevel) { From 2930ddd679fe5df6fd04d09de58ff89e7916622e Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 11 Dec 2025 16:44:26 +0200 Subject: [PATCH 51/69] try-catch in Chat --- Runtime/LLMAgent.cs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 2c9311a7..82158520 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -279,20 +279,27 @@ public virtual async Task Chat(string query, LlamaLib.CharArrayCallback EmptyCallback completionCallback = null, bool addToHistory = true) { await CheckCaller(); + string result = ""; + try + { + // Wrap callback to ensure it runs on the main thread + LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); + SetCompletionParameters(); + result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, returnResponseJson: debugPrompt); + if (debugPrompt) + { + CompletionResponseJson responseJson = JsonUtility.FromJson(result); + LLMUnitySetup.Log(responseJson.prompt); + result = responseJson.content; + } - // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); - SetCompletionParameters(); - string result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, returnResponseJson: debugPrompt); - if (debugPrompt) + if (addToHistory && result != null && save != "") _ = SaveHistory(); + completionCallback?.Invoke(); + } + catch (Exception ex) { - CompletionResponseJson responseJson = JsonUtility.FromJson(result); - LLMUnitySetup.Log(responseJson.prompt); - result = responseJson.content; + LLMUnitySetup.LogError(ex.Message, true); } - - if (addToHistory && result != null && save != "") _ = SaveHistory(); - completionCallback?.Invoke(); return result; } From 95f000d10fd97045ba3b6676d160a2110bb99d1e Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 11 Dec 2025 23:48:29 +0200 Subject: [PATCH 52/69] update LlamaLib --- Runtime/LlamaLib/LLMAgent.cs | 48 ++------------------ Runtime/LlamaLib/LlamaLib.cs | 85 ++++++++++-------------------------- 2 files changed, 25 insertions(+), 108 deletions(-) diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 4f12eb03..619678d7 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -75,10 +75,7 @@ public LLMAgent(LLMLocal _llm, string _systemPrompt = "", string _userRole = "us llmBase = _llm; llamaLib = llmBase.llamaLib; - llm = llamaLib.LLMAgent_Construct(llmBase.llm, - _systemPrompt ?? string.Empty, - _userRole ?? "user", - _assistantRole ?? "assistant"); + llm = llamaLib.LLMAgent_Construct(llmBase.llm, _systemPrompt ?? string.Empty); if (llm == IntPtr.Zero) throw new InvalidOperationException("Failed to create LLMAgent"); } @@ -97,34 +94,6 @@ public int SlotId } } - public string UserRole - { - get - { - CheckLlamaLib(); - return Marshal.PtrToStringAnsi(llamaLib.LLMAgent_Get_User_Role(llm)) ?? ""; - } - set - { - CheckLlamaLib(); - llamaLib.LLMAgent_Set_User_Role(llm, value ?? string.Empty); - } - } - - public string AssistantRole - { - get - { - CheckLlamaLib(); - return Marshal.PtrToStringAnsi(llamaLib.LLMAgent_Get_Assistant_Role(llm)) ?? ""; - } - set - { - CheckLlamaLib(); - llamaLib.LLMAgent_Set_Assistant_Role(llm, value ?? string.Empty); - } - } - public string SystemPrompt { get @@ -203,27 +172,16 @@ public void ClearHistory() llamaLib.LLMAgent_Clear_History(llm); } - public void AddMessage(string role, string content) - { - CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, role ?? string.Empty, content ?? string.Empty); - } - public void AddUserMessage(string content) { CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, UserRole, content ?? string.Empty); + llamaLib.LLMAgent_Add_User_Message(llm, content ?? string.Empty); } public void AddAssistantMessage(string content) { CheckLlamaLib(); - llamaLib.LLMAgent_Add_Message(llm, AssistantRole, content ?? string.Empty); - } - - public void AddMessage(ChatMessage message) - { - AddMessage(message.role, message.content); + llamaLib.LLMAgent_Add_Assistant_Message(llm, content ?? string.Empty); } public void RemoveLastMessage() diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index ea6c85b7..87fd835f 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -120,22 +120,7 @@ public delegate IntPtr LLMClient_Construct_Remote_Delegate( // LLMAgent functions [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Construct_Delegate(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", - [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", - [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_User_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_User_Role_Delegate(IntPtr llm); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Set_Assistant_Role_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); - - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate IntPtr LLMAgent_Get_Assistant_Role_Delegate(IntPtr llm); + public delegate IntPtr LLMAgent_Construct_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = ""); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLMAgent_Set_System_Prompt_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); @@ -178,9 +163,10 @@ public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, public delegate void LLMAgent_Set_History_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string role, - [MarshalAs(UnmanagedType.LPStr)] string content); + public delegate void LLMAgent_Add_User_Message_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string content); + + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void LLMAgent_Add_Assistant_Message_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string content); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLMAgent_Remove_Last_Message_Delegate(IntPtr llm); @@ -228,10 +214,6 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLMClient_Set_SSL_Delegate LLMClient_Set_SSL_Internal; public LLMClient_Is_Server_Alive_Delegate LLMClient_Is_Server_Alive_Internal; public LLMAgent_Construct_Delegate LLMAgent_Construct_Internal; - public LLMAgent_Set_User_Role_Delegate LLMAgent_Set_User_Role_Internal; - public LLMAgent_Get_User_Role_Delegate LLMAgent_Get_User_Role_Internal; - public LLMAgent_Set_Assistant_Role_Delegate LLMAgent_Set_Assistant_Role_Internal; - public LLMAgent_Get_Assistant_Role_Delegate LLMAgent_Get_Assistant_Role_Internal; public LLMAgent_Set_System_Prompt_Delegate LLMAgent_Set_System_Prompt_Internal; public LLMAgent_Get_System_Prompt_Delegate LLMAgent_Get_System_Prompt_Internal; public LLMAgent_Set_Slot_Delegate LLMAgent_Set_Slot_Internal; @@ -244,7 +226,8 @@ public delegate void LLMAgent_Add_Message_Delegate(IntPtr llm, public LLMAgent_Clear_History_Delegate LLMAgent_Clear_History_Internal; public LLMAgent_Get_History_Delegate LLMAgent_Get_History_Internal; public LLMAgent_Set_History_Delegate LLMAgent_Set_History_Internal; - public LLMAgent_Add_Message_Delegate LLMAgent_Add_Message_Internal; + public LLMAgent_Add_User_Message_Delegate LLMAgent_Add_User_Message_Internal; + public LLMAgent_Add_Assistant_Message_Delegate LLMAgent_Add_Assistant_Message_Internal; public LLMAgent_Remove_Last_Message_Delegate LLMAgent_Remove_Last_Message_Internal; public LLMAgent_Save_History_Delegate LLMAgent_Save_History_Internal; public LLMAgent_Load_History_Delegate LLMAgent_Load_History_Internal; @@ -322,13 +305,8 @@ public IntPtr LLMService_Construct( public IntPtr LLMClient_Construct_Remote(string url, int port, string apiKey = "", int numRetries = 5) => CallWithStatus(() => LLMClient_Construct_Remote_Internal(url, port, apiKey, numRetries)); public void LLMClient_Set_SSL(IntPtr llm, string SSLCert) => CallWithStatus(() => LLMClient_Set_SSL_Internal(llm, SSLCert)); public bool LLMClient_Is_Server_Alive(IntPtr llm) => CallWithStatus(() => LLMClient_Is_Server_Alive_Internal(llm)); - public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "", string userRole = "user", string assistantRole = "assistant") - => CallWithStatus(() => LLMAgent_Construct_Internal(llm, systemPrompt, userRole, assistantRole)); - public void LLMAgent_Set_User_Role(IntPtr llm, string userRole) => CallWithStatus(() => LLMAgent_Set_User_Role_Internal(llm, userRole)); - public IntPtr LLMAgent_Get_User_Role(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_User_Role_Internal(llm)); - public void LLMAgent_Set_Assistant_Role(IntPtr llm, string assistantRole) => CallWithStatus(() => LLMAgent_Set_Assistant_Role_Internal(llm, assistantRole)); - public IntPtr LLMAgent_Get_Assistant_Role(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_Assistant_Role_Internal(llm)); - public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => CallWithStatus(() => LLMAgent_Set_System_Prompt_Internal(llm, systemPrompt)); + public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "") => CallWithStatus(() => LLMAgent_Construct_Internal(llm, systemPrompt)); + public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => CallWithStatus(() => LLMAgent_Set_System_Prompt_Internal(llm, systemPrompt)); public IntPtr LLMAgent_Get_System_Prompt(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_System_Prompt_Internal(llm)); public void LLM_Set_Completion_Parameters(IntPtr llm, string parameters) => CallWithStatus(() => LLM_Set_Completion_Parameters_Internal(llm, parameters)); public IntPtr LLM_Get_Completion_Parameters(IntPtr llm) => CallWithStatus(() => LLM_Get_Completion_Parameters_Internal(llm)); @@ -341,7 +319,8 @@ public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = t public void LLMAgent_Clear_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Clear_History_Internal(llm)); public IntPtr LLMAgent_Get_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_History_Internal(llm)); public void LLMAgent_Set_History(IntPtr llm, string historyJson) => CallWithStatus(() => LLMAgent_Set_History_Internal(llm, historyJson)); - public void LLMAgent_Add_Message(IntPtr llm, string role, string content) => CallWithStatus(() => LLMAgent_Add_Message_Internal(llm, role, content)); + public void LLMAgent_Add_User_Message(IntPtr llm, string content) => CallWithStatus(() => LLMAgent_Add_User_Message_Internal(llm, content)); + public void LLMAgent_Add_Assistant_Message(IntPtr llm, string content) => CallWithStatus(() => LLMAgent_Add_Assistant_Message_Internal(llm, content)); public void LLMAgent_Remove_Last_Message(IntPtr llm) => CallWithStatus(() => LLMAgent_Remove_Last_Message_Internal(llm)); public void LLMAgent_Save_History(IntPtr llm, string filepath) => CallWithStatus(() => LLMAgent_Save_History_Internal(llm, filepath)); public void LLMAgent_Load_History(IntPtr llm, string filepath) => CallWithStatus(() => LLMAgent_Load_History_Internal(llm, filepath)); @@ -489,22 +468,7 @@ public static extern IntPtr LLMClient_Construct_Remote_Static( // LLMAgent functions [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Construct")] - public static extern IntPtr LLMAgent_Construct_Static(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = "", - [MarshalAs(UnmanagedType.LPStr)] string userRole = "user", - [MarshalAs(UnmanagedType.LPStr)] string assistantRole = "assistant"); - - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_User_Role")] - public static extern void LLMAgent_Set_User_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userRole); - - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_User_Role")] - public static extern IntPtr LLMAgent_Get_User_Role_Static(IntPtr llm); - - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_Assistant_Role")] - public static extern void LLMAgent_Set_Assistant_Role_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string assistantRole); - - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_Assistant_Role")] - public static extern IntPtr LLMAgent_Get_Assistant_Role_Static(IntPtr llm); + public static extern IntPtr LLMAgent_Construct_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt = ""); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_System_Prompt")] public static extern void LLMAgent_Set_System_Prompt_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string systemPrompt); @@ -546,10 +510,11 @@ public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Set_History")] public static extern void LLMAgent_Set_History_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string historyJson); - [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Add_Message")] - public static extern void LLMAgent_Add_Message_Static(IntPtr llm, - [MarshalAs(UnmanagedType.LPStr)] string role, - [MarshalAs(UnmanagedType.LPStr)] string content); + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Add_User_Message")] + public static extern void LLMAgent_Add_User_Message_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string content); + + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Add_Assistant_Message")] + public static extern void LLMAgent_Add_Assistant_Message_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string content); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Remove_Last_Message")] public static extern void LLMAgent_Remove_Last_Message_Static(IntPtr llm); @@ -605,11 +570,7 @@ public LlamaLib(bool gpu = false) LLMClient_Construct_Remote_Internal = (url, port, apiKey, numRetries) => LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); LLMClient_Set_SSL_Internal = (llm, SSLCert) => LLMClient_Set_SSL_Static(llm, SSLCert); LLMClient_Is_Server_Alive_Internal = (llm) => LLMClient_Is_Server_Alive_Static(llm); - LLMAgent_Construct_Internal = (llm, systemPrompt, userRole, assistantRole) => LLMAgent_Construct_Static(llm, systemPrompt, userRole, assistantRole); - LLMAgent_Set_User_Role_Internal = (llm, userRole) => LLMAgent_Set_User_Role_Static(llm, userRole); - LLMAgent_Get_User_Role_Internal = (llm) => LLMAgent_Get_User_Role_Static(llm); - LLMAgent_Set_Assistant_Role_Internal = (llm, assistantRole) => LLMAgent_Set_Assistant_Role_Static(llm, assistantRole); - LLMAgent_Get_Assistant_Role_Internal = (llm) => LLMAgent_Get_Assistant_Role_Static(llm); + LLMAgent_Construct_Internal = (llm, systemPrompt) => LLMAgent_Construct_Static(llm, systemPrompt); LLMAgent_Set_System_Prompt_Internal = (llm, systemPrompt) => LLMAgent_Set_System_Prompt_Static(llm, systemPrompt); LLMAgent_Get_System_Prompt_Internal = (llm) => LLMAgent_Get_System_Prompt_Static(llm); LLM_Set_Completion_Parameters_Internal = (llm, parameters) => LLM_Set_Completion_Parameters_Static(llm, parameters); @@ -622,7 +583,8 @@ public LlamaLib(bool gpu = false) LLMAgent_Clear_History_Internal = (llm) => LLMAgent_Clear_History_Static(llm); LLMAgent_Get_History_Internal = (llm) => LLMAgent_Get_History_Static(llm); LLMAgent_Set_History_Internal = (llm, historyJson) => LLMAgent_Set_History_Static(llm, historyJson); - LLMAgent_Add_Message_Internal = (llm, role, content) => LLMAgent_Add_Message_Static(llm, role, content); + LLMAgent_Add_User_Message_Internal = (llm, content) => LLMAgent_Add_User_Message_Static(llm, content); + LLMAgent_Add_Assistant_Message_Internal = (llm, content) => LLMAgent_Add_Assistant_Message_Static(llm, content); LLMAgent_Remove_Last_Message_Internal = (llm) => LLMAgent_Remove_Last_Message_Static(llm); LLMAgent_Save_History_Internal = (llm, filepath) => LLMAgent_Save_History_Static(llm, filepath); LLMAgent_Load_History_Internal = (llm, filepath) => LLMAgent_Load_History_Static(llm, filepath); @@ -814,10 +776,6 @@ private void LoadFunctionPointers() LLMClient_Set_SSL_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Set_SSL"); LLMClient_Is_Server_Alive_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Is_Server_Alive"); LLMAgent_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Construct"); - LLMAgent_Set_User_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_User_Role"); - LLMAgent_Get_User_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_User_Role"); - LLMAgent_Set_Assistant_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Assistant_Role"); - LLMAgent_Get_Assistant_Role_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_Assistant_Role"); LLMAgent_Set_System_Prompt_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_System_Prompt"); LLMAgent_Get_System_Prompt_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_System_Prompt"); LLMAgent_Set_Slot_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_Slot"); @@ -830,7 +788,8 @@ private void LoadFunctionPointers() LLMAgent_Clear_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Clear_History"); LLMAgent_Get_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Get_History"); LLMAgent_Set_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Set_History"); - LLMAgent_Add_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_Message"); + LLMAgent_Add_User_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_User_Message"); + LLMAgent_Add_Assistant_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Add_Assistant_Message"); LLMAgent_Remove_Last_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Remove_Last_Message"); LLMAgent_Save_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Save_History"); LLMAgent_Load_History_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMAgent_Load_History"); From bcd67aa3e2ab8cfc1aab5e385abfc9f4dad0fbd0 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Thu, 11 Dec 2025 23:49:48 +0200 Subject: [PATCH 53/69] remove user and assistant roles --- Runtime/LLMAgent.cs | 47 +---------------------------------------- Runtime/LLMCharacter.cs | 10 --------- 2 files changed, 1 insertion(+), 56 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 82158520..c8cef607 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -31,12 +31,6 @@ public class LLMAgent : LLMClient /// Server slot to use for processing (affects caching behavior) [ModelAdvanced, SerializeField] protected int _slot = -1; - /// Role name for user messages in conversation - [Chat, SerializeField] protected string _userRole = "user"; - - /// Role name for AI assistant messages in conversation - [Chat, SerializeField] protected string _assistantRole = "assistant"; - /// System prompt that defines the AI's personality and behavior [TextArea(5, 10), Chat, SerializeField] protected string _systemPrompt = "A chat between a curious human and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the human's questions."; @@ -57,34 +51,6 @@ public int slot } } - /// Role identifier for user messages - public string userRole - { - get => _userRole; - set - { - if (_userRole != value) - { - _userRole = value; - if (llmAgent != null) llmAgent.UserRole = _userRole; - } - } - } - - /// Role identifier for assistant messages - public string assistantRole - { - get => _assistantRole; - set - { - if (_assistantRole != value) - { - _assistantRole = value; - if (llmAgent != null) llmAgent.AssistantRole = _assistantRole; - } - } - } - /// System prompt defining the agent's behavior and personality public string systemPrompt { @@ -142,7 +108,7 @@ protected override async Task SetupCallerObject() string exceptionMessage = ""; try { - llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt, userRole, assistantRole); + llmAgent = new UndreamAI.LlamaLib.LLMAgent(llmClient, systemPrompt); } catch (Exception ex) { @@ -224,17 +190,6 @@ public virtual async Task ClearHistory() llmAgent.ClearHistory(); } - /// - /// Adds a message with a specific role to the conversation history. - /// - /// Message role (e.g., userRole, assistantRole, or custom role) - /// Message content - public virtual async Task AddMessage(string role, string content) - { - await CheckCaller(); - llmAgent.AddMessage(role, content); - } - /// /// Adds a user message to the conversation history. /// diff --git a/Runtime/LLMCharacter.cs b/Runtime/LLMCharacter.cs index 2025e952..0150e1f9 100644 --- a/Runtime/LLMCharacter.cs +++ b/Runtime/LLMCharacter.cs @@ -4,16 +4,6 @@ namespace LLMUnity { public class LLMCharacter : LLMAgent { - public string playerName - { - get { return userRole; } - set { userRole = value; } - } - public string AIName - { - get { return assistantRole; } - set { assistantRole = value; } - } public string prompt { get { return systemPrompt; } From 7857ebd71584b9739b34a84cf8e82ba356a8e8d8 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 18 Jul 2025 00:44:40 +0300 Subject: [PATCH 54/69] fix usearch for iOS --- Runtime/RAG/usearch/NativeMethods.cs | 4 ++++ Runtime/RAG/usearch/USearchIndex.cs | 13 +++---------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/Runtime/RAG/usearch/NativeMethods.cs b/Runtime/RAG/usearch/NativeMethods.cs index 34ba5898..9f38f04f 100644 --- a/Runtime/RAG/usearch/NativeMethods.cs +++ b/Runtime/RAG/usearch/NativeMethods.cs @@ -11,7 +11,11 @@ namespace Cloud.Unum.USearch { public static class NativeMethods { +#if UNITY_IOS + private const string LibraryName = "__Internal"; +#else private const string LibraryName = "libusearch_c"; +#endif [DllImport(LibraryName, CallingConvention = CallingConvention.Cdecl)] public static extern usearch_index_t usearch_init(ref IndexOptions options, out usearch_error_t error); diff --git a/Runtime/RAG/usearch/USearchIndex.cs b/Runtime/RAG/usearch/USearchIndex.cs index 9c9b39c4..9603e8ac 100644 --- a/Runtime/RAG/usearch/USearchIndex.cs +++ b/Runtime/RAG/usearch/USearchIndex.cs @@ -318,17 +318,10 @@ private int Search(T[] queryVector, int count, out ulong[] keys, out float[] } else { - if (Application.platform == RuntimePlatform.Android) + lock (filterLock) { - lock (filterLock) - { - FilterFunction = filter; - matches = checked((int)usearch_filtered_search(this._index, queryVectorPtr, scalarKind, (UIntPtr)count, StaticFilter, IntPtr.Zero, keys, distances, out error)); - } - } - else - { - matches = checked((int)usearch_filtered_search(this._index, queryVectorPtr, scalarKind, (UIntPtr)count, (int key, IntPtr state) => filter(key), IntPtr.Zero, keys, distances, out error)); + FilterFunction = filter; + matches = checked((int)usearch_filtered_search(this._index, queryVectorPtr, scalarKind, (UIntPtr)count, StaticFilter, IntPtr.Zero, keys, distances, out error)); } } HandleError(error); From 1e4aa405ae80eac8610c33d9d636e653c57b31da Mon Sep 17 00:00:00 2001 From: amakropoulos Date: Fri, 12 Dec 2025 15:33:16 +0000 Subject: [PATCH 55/69] update tooltips --- Runtime/LLM.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 8e5ca828..cc077618 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -273,6 +273,7 @@ public string SSLKey public LLMService llmService { get; private set; } /// Model architecture name (e.g., "llama", "mistral") + [Tooltip("Model architecture name (e.g., "llama", "mistral")")] public string architecture => llmlib?.architecture; /// True if this model only supports embeddings (no text generation) From b5900c8e79d71639c52922c68656a718595adc0d Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Fri, 12 Dec 2025 15:30:06 +0200 Subject: [PATCH 56/69] update tests --- .../KnowledgeBaseGame/KnowledgeBaseGame.cs | 3 -- Tests/Runtime/TestLLM.cs | 32 +++++++++---------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs index 4a6856ce..5f579827 100644 --- a/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs +++ b/Samples~/KnowledgeBaseGame/KnowledgeBaseGame.cs @@ -133,9 +133,6 @@ protected override void DropdownChange(int selection) currentBotName = CharacterSelect.options[selection].text; botImages[currentBotName].gameObject.SetActive(true); Debug.Log($"{currentBotName}: {rag.Count(currentBotName)} phrases available"); - - // set the LLMAgent name - llmAgent.assistantRole = currentBotName; } void SetAIText(string text) diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 44f8cdb5..226d9ee0 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -153,6 +153,7 @@ public virtual async Task Init() gameObject.SetActive(false); llm = CreateLLM(); llmAgent = CreateLLMAgent(); + llmAgent.temperature = 0; gameObject.SetActive(true); } @@ -161,8 +162,8 @@ public virtual void SetParameters() prompt = "You are a scientific assistant and provide short and concise info on the user questions"; prompt2 = "You are a funny assistant and answer the user questions with smartass comments"; query = "Can you tell me some fun fact about ants in one sentence?"; - reply1 = "Sure! Ants are known for their incredible teamwork, often working together to build complex structures like nests."; - reply2 = "Of course! Ants are so smart and hardworking that they can build intricate nests with just a few workers."; + reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, which is a fascinating example of teamwork."; + reply2 = "Of course! Ants are the most intelligent insects on Earth—working in perfect harmony to build their homes and solve problems."; tokens1 = 20; tokens2 = 9; } @@ -245,8 +246,6 @@ public virtual LLMAgent CreateLLMAgent() { LLMAgent llmAgent = gameObject.AddComponent(); llmAgent.llm = llm; - llmAgent.userRole = "User"; - llmAgent.assistantRole = "Assistant"; llmAgent.systemPrompt = prompt; llmAgent.temperature = 0; llmAgent.seed = 0; @@ -328,7 +327,7 @@ public void TestChat(string reply, string replyGT) var commonWords = words1.Intersect(words2).Count(); var totalWords = Math.Max(words1.Length, words2.Length); - Assert.That((double)commonWords / totalWords >= 0.7); + Assert.That((double)commonWords / totalWords >= 0.5); } public void TestPostChat(int num) @@ -417,8 +416,8 @@ public override LLM CreateLLM() public override void SetParameters() { base.SetParameters(); - reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't speak."; - reply2 = "Of course! Ants are so sneaky and efficient that they can build a house in just a few days without any help from humans."; + reply1 = "Ants are known for their ability to build complex structures, though it's not always obvious."; + reply2 = "Ants are known for their incredible teamwork and ability to create intricate structures like nests!"; tokens1 = 5; tokens2 = 9; loraWeight = 0.9f; @@ -479,12 +478,6 @@ public override LLMAgent CreateLLMAgent() llmAgent.remote = true; return llmAgent; } - - public override void SetParameters() - { - base.SetParameters(); - reply2 = "Of course! Ants are so smart—they can remember the location of food sources and even solve problems without words."; - } } public class TestLLM_Double : TestLLM @@ -534,9 +527,9 @@ public void TestSave() List chatHistory = JsonUtility.FromJson("{ \"chat\": " + json + " }").chat; Assert.AreEqual(chatHistory.Count, 2); - Assert.AreEqual(chatHistory[0].role, llmAgent.userRole); + Assert.AreEqual(chatHistory[0].role, "user"); Assert.AreEqual(chatHistory[0].content, "bye!"); - Assert.AreEqual(chatHistory[1].role, llmAgent.assistantRole); + Assert.AreEqual(chatHistory[1].role, "assistant"); Assert.AreEqual(llmAgent.chat.Count, chatHistory.Count); for (int i = 0; i < chatHistory.Count; i++) @@ -566,6 +559,12 @@ public override void TestArchitecture() public class TestLLM_cuBLAS : TestLLM_tinyBLAS { + public override void SetParameters() + { + base.SetParameters(); + reply2 = "Of course! Ants are the most intelligent insects on Earth—though they don’t understand humans."; + } + public override void TestArchitecture() { Assert.That(llm.architecture.Contains("cublas")); @@ -584,7 +583,8 @@ public override LLM CreateLLM() public override void SetParameters() { base.SetParameters(); - reply1 = "Sure! Ants are known for their incredible teamwork, often working together to build complex structures like nests."; + reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; + reply2 = "Of course! Here’s a fun fact: Ants are the most intelligent insects on Earth—though they’re not really smart, they’ve got a lot of teamwork and problem-solving skills."; } } } From c536a627fe9c7d234bd4c5357b77c70596ca0ad5 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 15:09:48 +0200 Subject: [PATCH 57/69] implement changes for IL2CPP --- Editor/LLMEditor.cs | 2 +- Runtime/IL2CPP.cs | 65 ++++++++++++++++++++++++++++++++++++ Runtime/IL2CPP.cs.meta | 11 ++++++ Runtime/LLM.cs | 6 +++- Runtime/LLMAgent.cs | 23 +++++++++---- Runtime/LLMClient.cs | 24 +++++++++---- Runtime/LLMManager.cs | 6 ++-- Runtime/LLMUnitySetup.cs | 18 ++++------ Runtime/LLMUtils.cs | 19 +++++++++-- Runtime/RAG/Search.cs | 4 +-- Runtime/ResumingWebClient.cs | 6 ++-- Samples~/ChatBot/Bubble.cs | 9 +++-- 12 files changed, 152 insertions(+), 41 deletions(-) create mode 100644 Runtime/IL2CPP.cs create mode 100644 Runtime/IL2CPP.cs.meta diff --git a/Editor/LLMEditor.cs b/Editor/LLMEditor.cs index c031b077..a0617d53 100644 --- a/Editor/LLMEditor.cs +++ b/Editor/LLMEditor.cs @@ -31,7 +31,7 @@ public class LLMEditor : PropertyEditor public void AddSecuritySettings(SerializedObject llmScriptSO, LLM llmScript) { - void AddSSLLoad(string type, Callback setterCallback) + void AddSSLLoad(string type, Action setterCallback) { if (GUILayout.Button("Load SSL " + type, GUILayout.Width(buttonWidth))) { diff --git a/Runtime/IL2CPP.cs b/Runtime/IL2CPP.cs new file mode 100644 index 00000000..d02cfbf1 --- /dev/null +++ b/Runtime/IL2CPP.cs @@ -0,0 +1,65 @@ +#if ENABLE_IL2CPP +using System; +using System.Runtime.InteropServices; +using AOT; +using UndreamAI.LlamaLib; + +namespace LLMUnity +{ + public class IL2CPP_Logging + { + private static Action onLogging; + private static LlamaLib.CharArrayCallback nativeLoggingThunk; + + public static void LoggingCallback(Action callback) + { + onLogging = callback; + if (nativeLoggingThunk == null) + { + nativeLoggingThunk = LoggingThunkImpl; + LlamaLib.LoggingCallback(nativeLoggingThunk); + } + } + + [MonoPInvokeCallback(typeof(LlamaLib.CharArrayCallback))] + private static void LoggingThunkImpl(IntPtr msg) + { + if (onLogging == null || msg == IntPtr.Zero) + return; + try + { + onLogging(Marshal.PtrToStringUTF8(msg)); + } + catch {} + } + } + + public class IL2CPP_Completion + { + private static Action onCompletion; + private static LlamaLib.CharArrayCallback nativeCompletionThunk; + + public static LlamaLib.CharArrayCallback CreateCallback(Action callback) + { + onCompletion = callback; + if (nativeCompletionThunk == null) + { + nativeCompletionThunk = CompletionThunkImpl; + } + return nativeCompletionThunk; + } + + [MonoPInvokeCallback(typeof(LlamaLib.CharArrayCallback))] + private static void CompletionThunkImpl(IntPtr msg) + { + if (onCompletion == null || msg == IntPtr.Zero) + return; + try + { + onCompletion(Marshal.PtrToStringUTF8(msg)); + } + catch {} + } + } +} +#endif diff --git a/Runtime/IL2CPP.cs.meta b/Runtime/IL2CPP.cs.meta new file mode 100644 index 00000000..03f29d0c --- /dev/null +++ b/Runtime/IL2CPP.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ead93fb64def342459157a5bf521df71 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index cc077618..401c704b 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -429,7 +429,11 @@ private void CreateLib() if (LLMUnitySetup.DebugMode <= LLMUnitySetup.DebugModeType.All) { LlamaLib.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); +#if ENABLE_IL2CPP + IL2CPP_Logging.LoggingCallback(LLMUnitySetup.Log); +#else LlamaLib.LoggingCallback(LLMUnitySetup.Log); +#endif } } @@ -516,7 +520,7 @@ public async Task WaitUntilReady() ///
/// Optional callback for download progress updates /// True if setup succeeded, false if it failed - public static async Task WaitUntilModelSetup(Callback downloadProgressCallback = null) + public static async Task WaitUntilModelSetup(Action downloadProgressCallback = null) { if (downloadProgressCallback != null) { diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index c8cef607..314dbada 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -230,15 +230,26 @@ public class CompletionResponseJson /// Optional callback when response is complete /// Whether to add the exchange to conversation history /// Task that returns the AI assistant's response - public virtual async Task Chat(string query, LlamaLib.CharArrayCallback callback = null, - EmptyCallback completionCallback = null, bool addToHistory = true) + public virtual async Task Chat(string query, Action callback = null, + Action completionCallback = null, bool addToHistory = true) { await CheckCaller(); string result = ""; try { - // Wrap callback to ensure it runs on the main thread - LlamaLib.CharArrayCallback wrappedCallback = Utils.WrapCallbackForAsync(callback, this); + LlamaLib.CharArrayCallback wrappedCallback = null; + if (callback != null) + { +#if ENABLE_IL2CPP + // For IL2CPP: wrap to IntPtr callback, then wrap for main thread + Action mainThreadCallback = Utils.WrapActionForMainThread(callback, this); + wrappedCallback = IL2CPP_Completion.CreateCallback(mainThreadCallback); +#else + // For Mono: direct callback wrapping + wrappedCallback = Utils.WrapCallbackForAsync(callback, this); +#endif + } + SetCompletionParameters(); result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, returnResponseJson: debugPrompt); if (debugPrompt) @@ -264,7 +275,7 @@ public virtual async Task Chat(string query, LlamaLib.CharArrayCallback ///
/// Optional callback when warmup completes /// Task that completes when warmup finishes - public virtual async Task Warmup(EmptyCallback completionCallback = null) + public virtual async Task Warmup(Action completionCallback = null) { await Warmup(null, completionCallback); } @@ -276,7 +287,7 @@ public virtual async Task Warmup(EmptyCallback completionCallback = null) /// Warmup prompt (not added to history) /// Optional callback when warmup completes /// Task that completes when warmup finishes - public virtual async Task Warmup(string query, EmptyCallback completionCallback = null) + public virtual async Task Warmup(string query, Action completionCallback = null) { int originalNumPredict = numPredict; try diff --git a/Runtime/LLMClient.cs b/Runtime/LLMClient.cs index 38298a9a..98c3d4ae 100644 --- a/Runtime/LLMClient.cs +++ b/Runtime/LLMClient.cs @@ -500,7 +500,7 @@ protected virtual void SetCompletionParameters() /// Text to tokenize /// Optional callback to receive the result /// List of token IDs - public virtual async Task> Tokenize(string query, Callback> callback = null) + public virtual async Task> Tokenize(string query, Action> callback = null) { if (string.IsNullOrEmpty(query)) { @@ -519,7 +519,7 @@ public virtual async Task> Tokenize(string query, Callback> /// Token IDs to decode /// Optional callback to receive the result /// Decoded text - public virtual async Task Detokenize(List tokens, Callback callback = null) + public virtual async Task Detokenize(List tokens, Action callback = null) { if (tokens == null) { @@ -538,7 +538,7 @@ public virtual async Task Detokenize(List tokens, Callback /// Text to embed /// Optional callback to receive the result /// Embedding vector - public virtual async Task> Embeddings(string query, Callback> callback = null) + public virtual async Task> Embeddings(string query, Action> callback = null) { if (string.IsNullOrEmpty(query)) { @@ -559,12 +559,24 @@ public virtual async Task> Embeddings(string query, CallbackOptional callback when completion finishes /// Slot ID for the request (-1 for auto-assignment) /// Task that returns the generated completion text - public virtual async Task Completion(string prompt, LlamaLib.CharArrayCallback callback = null, - EmptyCallback completionCallback = null, int id_slot = -1) + public virtual async Task Completion(string prompt, Action callback = null, + Action completionCallback = null, int id_slot = -1) { await CheckCaller(); + + LlamaLib.CharArrayCallback wrappedCallback = null; + if (callback != null) + { +#if ENABLE_IL2CPP + Action mainThreadCallback = Utils.WrapActionForMainThread(callback, this); + wrappedCallback = IL2CPP_Completion.CreateCallback(mainThreadCallback); +#else + wrappedCallback = Utils.WrapCallbackForAsync(callback, this); +#endif + } + SetCompletionParameters(); - string result = await llmClient.CompletionAsync(prompt, callback, id_slot); + string result = await llmClient.CompletionAsync(prompt, wrappedCallback, id_slot); completionCallback?.Invoke(); return result; } diff --git a/Runtime/LLMManager.cs b/Runtime/LLMManager.cs index 98813062..2f3c9d05 100644 --- a/Runtime/LLMManager.cs +++ b/Runtime/LLMManager.cs @@ -110,7 +110,7 @@ public class LLMManager static List llms = new List(); public static float downloadProgress = 1; - public static List> downloadProgressCallbacks = new List>(); + public static List> downloadProgressCallbacks = new List>(); static Task SetupTask; static readonly object lockObject = new object(); static long totalSize; @@ -124,7 +124,7 @@ public class LLMManager public static void SetDownloadProgress(float progress) { downloadProgress = (completedSize + progress * currFileSize) / totalSize; - foreach (Callback downloadProgressCallback in downloadProgressCallbacks) downloadProgressCallback?.Invoke(downloadProgress); + foreach (Action downloadProgressCallback in downloadProgressCallbacks) downloadProgressCallback?.Invoke(downloadProgress); } /// @@ -626,7 +626,7 @@ public static void SaveToDisk() /// Saves the model manager to disk along with models that are not (or can't) be downloaded for the build /// /// copy function - public static void Build(ActionCallback copyCallback) + public static void Build(Action copyCallback) { SaveToDisk(); diff --git a/Runtime/LLMUnitySetup.cs b/Runtime/LLMUnitySetup.cs index e93d9f79..83aead21 100644 --- a/Runtime/LLMUnitySetup.cs +++ b/Runtime/LLMUnitySetup.cs @@ -74,12 +74,6 @@ public class LLMUnityException : Exception public LLMUnityException(string message = "") : base(message) {} } - public delegate void EmptyCallback(); - public delegate void Callback(T message); - public delegate Task TaskCallback(T message); - public delegate T2 ContentCallback(T message); - public delegate void ActionCallback(string source, string target); - [Serializable] public struct StringPair { @@ -170,7 +164,7 @@ public class LLMUnitySetup static string DebugModeKey = "DebugMode"; public static bool CUBLAS = false; static string CUBLASKey = "CUBLAS"; - static List> errorCallbacks = new List>(); + static List> errorCallbacks = new List>(); static readonly object lockObject = new object(); static Dictionary androidExtractTasks = new Dictionary(); @@ -199,7 +193,7 @@ public static void LogError(string message, bool throwException = false) { if ((int)DebugMode > (int)DebugModeType.Error) return; Debug.LogError(message); - foreach (Callback errorCallback in errorCallbacks) errorCallback(message); + foreach (Action errorCallback in errorCallbacks) errorCallback(message); if (throwException) throw new LLMUnityException(message); } @@ -242,7 +236,9 @@ public static string GetDownloadAssetPath(string relPath = "") static void InitializeOnLoadCommon() { +#if UNITY_EDITOR || !((UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS)) LlamaLib.baseLibraryPath = Path.Combine(libraryPath, LlamaLib.GetPlatform(), "native"); +#endif } #if UNITY_EDITOR @@ -275,7 +271,7 @@ public static void CancelDownload(string savePath) public static async Task DownloadFile( string fileUrl, string savePath, bool overwrite = false, - Callback callback = null, Callback progressCallback = null + Action callback = null, Action progressCallback = null ) { if (File.Exists(savePath) && !overwrite) @@ -541,13 +537,13 @@ public static string AddAsset(string assetPath) /// \endcond /// Add callback function to call for error logs - public static void AddErrorCallBack(Callback callback) + public static void AddErrorCallBack(Action callback) { errorCallbacks.Add(callback); } /// Remove callback function added for error logs - public static void RemoveErrorCallBack(Callback callback) + public static void RemoveErrorCallBack(Action callback) { errorCallbacks.Remove(callback); } diff --git a/Runtime/LLMUtils.cs b/Runtime/LLMUtils.cs index 43763936..f7cf8ad5 100644 --- a/Runtime/LLMUtils.cs +++ b/Runtime/LLMUtils.cs @@ -206,13 +206,14 @@ public string[] GetLoras() public class Utils { - public static LlamaLib.CharArrayCallback WrapCallbackForAsync( - LlamaLib.CharArrayCallback callback, MonoBehaviour owner) + // Extract main thread wrapping logic + public static Action WrapActionForMainThread( + Action callback, MonoBehaviour owner) { if (callback == null) return null; var context = SynchronizationContext.Current; - return (string msg) => + return msg => { try { @@ -242,6 +243,18 @@ public static LlamaLib.CharArrayCallback WrapCallbackForAsync( } }; } + +#if !ENABLE_IL2CPP + // Keep original for Mono builds + public static LlamaLib.CharArrayCallback WrapCallbackForAsync( + Action callback, MonoBehaviour owner) + { + if (callback == null) return null; + Action mainThreadCallback = WrapActionForMainThread(callback, owner); + return msg => mainThreadCallback(msg); + } + +#endif } /// \endcond } diff --git a/Runtime/RAG/Search.cs b/Runtime/RAG/Search.cs index 264ad599..110fa83a 100644 --- a/Runtime/RAG/Search.cs +++ b/Runtime/RAG/Search.cs @@ -344,12 +344,12 @@ public virtual async Task Encode(string inputString) return (await llmEmbedder.Embeddings(inputString)).ToArray(); } - public virtual async Task> Tokenize(string query, Callback> callback = null) + public virtual async Task> Tokenize(string query, Action> callback = null) { return await llmEmbedder.Tokenize(query, callback); } - public async Task Detokenize(List tokens, Callback callback = null) + public async Task Detokenize(List tokens, Action callback = null) { return await llmEmbedder.Detokenize(tokens, callback); } diff --git a/Runtime/ResumingWebClient.cs b/Runtime/ResumingWebClient.cs index fc299758..b4716bc6 100644 --- a/Runtime/ResumingWebClient.cs +++ b/Runtime/ResumingWebClient.cs @@ -38,7 +38,7 @@ public long GetURLFileSize(Uri address) return response.ContentLength; } - public Task DownloadFileTaskAsyncResume(Uri address, string fileName, bool resume = false, Callback progressCallback = null) + public Task DownloadFileTaskAsyncResume(Uri address, string fileName, bool resume = false, Action progressCallback = null) { var tcs = new TaskCompletionSource(address); FileStream fs = null; @@ -101,7 +101,7 @@ public void AbortRequest(WebRequest request) } } - private async void DownloadBitsAsync(WebRequest request, Stream writeStream, long bytesToSkip = 0, Callback progressCallback = null, TaskCompletionSource tcs = null) + private async void DownloadBitsAsync(WebRequest request, Stream writeStream, long bytesToSkip = 0, Action progressCallback = null, TaskCompletionSource tcs = null) { try { @@ -159,7 +159,7 @@ private async void DownloadBitsAsync(WebRequest request, Stream writeStream, lon } } - private void PostProgressChanged(Callback progressCallback, long BytesReceived, long TotalBytesToReceive) + private void PostProgressChanged(Action progressCallback, long BytesReceived, long TotalBytesToReceive) { if (progressCallback != null && BytesReceived > 0) { diff --git a/Samples~/ChatBot/Bubble.cs b/Samples~/ChatBot/Bubble.cs index cbfcf60e..403ef09e 100644 --- a/Samples~/ChatBot/Bubble.cs +++ b/Samples~/ChatBot/Bubble.cs @@ -22,9 +22,9 @@ struct BubbleUI public class RectTransformResizeHandler : MonoBehaviour { - EmptyCallback callback; + Action callback; - public void SetCallBack(EmptyCallback callback) + public void SetCallBack(Action callback) { this.callback = callback; } @@ -125,7 +125,7 @@ void SetSortingOrder(GameObject bubbleObject, GameObject imageObject) imageCanvas.sortingOrder = 1; } - public void OnResize(EmptyCallback callback) + public void OnResize(Action callback) { RectTransformResizeHandler resizeHandler = bubbleObject.AddComponent(); resizeHandler.SetCallBack(callback); @@ -169,7 +169,7 @@ class InputBubble : Bubble protected GameObject placeholderObject; public InputBubble(Transform parent, BubbleUI ui, string name, string message, int lineHeight = 4) : - base(parent, ui, name, emptyLines(message, lineHeight)) + base(parent, ui, name, emptyLines(message, lineHeight)) { Text textObjext = bubbleObject.GetComponent(); RectTransform bubbleRectTransform = bubbleObject.GetComponent(); @@ -289,5 +289,4 @@ public void ReActivateInputField() inputField.ActivateInputField(); } } - } From 60dd270a151e4b4afcc591f9c31b699d39549957 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 15:10:07 +0200 Subject: [PATCH 58/69] fix build location for Android --- Runtime/LLMBuilder.cs | 39 +++++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/Runtime/LLMBuilder.cs b/Runtime/LLMBuilder.cs index b06a3193..9dfc9c9d 100644 --- a/Runtime/LLMBuilder.cs +++ b/Runtime/LLMBuilder.cs @@ -4,6 +4,7 @@ using UnityEngine; using System.IO; using System.Collections.Generic; +using System; #if UNITY_EDITOR namespace LLMUnity @@ -31,11 +32,6 @@ public static string PluginDir(string platform, bool relative = false) return pluginDir; } - public static string PluginLibraryDir(string platform, bool relative = false) - { - return Path.Combine(PluginDir(platform, relative), LLMUnitySetup.libraryName); - } - public static void Retry(System.Action action, int retries = 10, int delayMs = 100) { for (int i = 0; i < retries; i++) @@ -64,10 +60,12 @@ public static void Retry(System.Action action, int retries = 10, int delayMs = 1 /// source file/directory /// targer file/directory /// action - public static void HandleActionFileRecursive(string source, string target, ActionCallback actionCallback) + public static void HandleActionFileRecursive(string source, string target, Action actionCallback) { if (File.Exists(source)) { + string targetDir = Path.GetDirectoryName(target); + if (targetDir != "" && !Directory.Exists(targetDir)) Directory.CreateDirectory(targetDir); Retry(() => actionCallback(source, target)); } else if (Directory.Exists(source)) @@ -146,9 +144,8 @@ static void AddTargetPair(string target) static bool MoveAction(string source, string target, bool addEntry = true) { - ActionCallback moveCallback; - if (File.Exists(source)) moveCallback = File.Move; - else if (Directory.Exists(source)) moveCallback = MovePath; + Action moveCallback; + if (File.Exists(source) || Directory.Exists(source)) moveCallback = MovePath; else return false; if (addEntry) AddMovedPair(source, target); @@ -158,7 +155,7 @@ static bool MoveAction(string source, string target, bool addEntry = true) static bool CopyAction(string source, string target, bool addEntry = true) { - ActionCallback copyCallback; + Action copyCallback; if (File.Exists(source)) copyCallback = File.Copy; else if (Directory.Exists(source)) copyCallback = CopyPath; else return false; @@ -180,6 +177,17 @@ static void AddActionAddMeta(string target) AddTargetPair(target + ".meta"); } + static string MobileSuffix(BuildTarget buildTarget) + { + return (buildTarget == BuildTarget.Android) ? "so" : "a"; + } + + static string MobilePluginPath(BuildTarget buildTarget, string arch, bool relative = false) + { + string os = buildTarget.ToString(); + return Path.Combine(PluginDir(os, relative), arch, $"libllamalib_{os.ToLower()}.{MobileSuffix(buildTarget)}"); + } + /// /// Moves libraries in the correct place for building /// @@ -252,8 +260,8 @@ public static void BuildLibraryPlatforms(BuildTarget buildTarget) { foreach (string platform in platforms) { - string source = Path.Combine(LLMUnitySetup.libraryPath, platform, "native"); - string target = Path.Combine(PluginLibraryDir(buildTarget.ToString()), platform); + string source = Path.Combine(LLMUnitySetup.libraryPath, platform, "native", $"libllamalib_{platform}.{MobileSuffix(buildTarget)}"); + string target = MobilePluginPath(buildTarget, platform.Split("-")[1].ToUpper()); string pluginDir = PluginDir(buildTarget.ToString()); MoveAction(source, target); MoveAction(source + ".meta", target + ".meta"); @@ -266,13 +274,12 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse { foreach (BuildTarget buildTarget in new BuildTarget[] { BuildTarget.iOS, BuildTarget.VisionOS, BuildTarget.Android }) { - string suffix = (buildTarget == BuildTarget.Android) ? "so" : "a"; - string platformDir = Path.Combine("Assets", PluginLibraryDir(buildTarget.ToString(), true)); + string platformDir = Path.Combine("Assets", PluginDir(buildTarget.ToString(), true)); if (!Directory.Exists(platformDir)) continue; foreach (string archDir in Directory.GetDirectories(platformDir)) { string arch = Path.GetFileName(archDir); - string pathToPlugin = Path.Combine(platformDir, $"libllamalib_{arch}.{suffix}"); + string pathToPlugin = Path.Combine("Assets", MobilePluginPath(buildTarget, arch, true)); for (int i = 0; i < movedAssets.Length; i++) { if (movedAssets[i] == pathToPlugin) @@ -281,7 +288,7 @@ static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAsse if (importer != null && importer.isNativePlugin) { importer.SetCompatibleWithPlatform(buildTarget, true); - importer.SetPlatformData(buildTarget, "CPU", arch.Split("_")[1].ToUpper()); + importer.SetPlatformData(buildTarget, "CPU", arch); AssetDatabase.ImportAsset(pathToPlugin); } } From cf2bcb76d1d3c89ae19392bddf3c116840bfb131 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 15:10:26 +0200 Subject: [PATCH 59/69] adapt Readme --- .github/FUNDING.yml | 1 + README.md | 28 +++++++++++++++++----------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 43d692a5..e0cfe47f 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1 +1,2 @@ github: [amakropoulos] +ko_fi: amakropoulos diff --git a/README.md b/README.md index 93dd6cfb..edf2f56e 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ For business inquiries you can reach out at hello@undream.ai. - [⭐ Star](https://github.com/undreamai/LLMUnity) the repo, leave a [review](https://assetstore.unity.com/packages/slug/273604) and spread the word about the project! - Join us at [Discord](https://discord.gg/RwXKQb6zdv) and say hi. - [Contribute](CONTRIBUTING.md) by submitting feature requests, bugs or even your own PR. -- [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/amakropoulos) this work to allow even cooler features! +- [![](https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&color=%23fe8e86)](https://github.com/sponsors/amakropoulos) this work or buy me a [![Ko-fi](https://img.shields.io/badge/Ko--fi-FF5E5B?logo=ko-fi&logoColor=white)](#) to allow even cooler features! ## Games / Projects using LLM for Unity @@ -101,7 +101,7 @@ First you will setup the LLM for your game 🏎: Then you can setup each of your characters as follows 🙋‍♀️: - Create an empty GameObject for the character.
In the GameObject Inspector click `Add Component` and select the LLMAgent script. -- Define the role of your AI in the `System Prompt`. You can define the role of the AI (`Assistant Role`) and the player (`User Role`). +- Define the role of your AI in the `System Prompt`. - (Optional) Select the LLM constructed above in the `LLM` field if you have more than one LLM GameObjects. In your script you can then use it as follows 🦄: @@ -111,16 +111,23 @@ using LLMUnity; public class MyScript { public LLMAgent llmAgent; - void HandleReply(string reply){ - // do something with the reply from the model - Debug.Log(reply); + void HandleReply(string replySoFar){ + // do something with the reply from the model as it is being produced + Debug.Log(replySoFar); } void Game(){ - // your game function + // handle the response as it is being produced ... - string message = "Hello bot!"; - _ = llmAgent.Chat(message, HandleReply); + _ = llmAgent.Chat("Hello bot!", HandleReply); + ... + } + + async void GameAsync(){ + // or handle the entire response in one go + ... + string reply = await llmAgent.Chat("Hello bot!"); + Debug.Log(reply); ... } } @@ -129,14 +136,13 @@ You can also specify a function to call when the model reply has been completed: ``` c# void ReplyCompleted(){ // do something when the reply from the model is complete - Debug.Log("The AI replied"); + Debug.Log("The AI has finished replying"); } void Game(){ // your game function ... - string message = "Hello bot!"; - _ = llmAgent.Chat(message, HandleReply, ReplyCompleted); + _ = llmAgent.Chat("Hello bot!", HandleReply, ReplyCompleted); ... } ``` From e58836db74b99de2e89ae73e100c72b3053796f6 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 15:10:37 +0200 Subject: [PATCH 60/69] update LlamaLib --- Runtime/LlamaLib/LibraryLoader.cs | 12 +++++++----- Runtime/LlamaLib/LlamaLib.cs | 29 +++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/Runtime/LlamaLib/LibraryLoader.cs b/Runtime/LlamaLib/LibraryLoader.cs index 93b3a3f4..6893cfde 100644 --- a/Runtime/LlamaLib/LibraryLoader.cs +++ b/Runtime/LlamaLib/LibraryLoader.cs @@ -29,6 +29,7 @@ public static T GetSymbolDelegate(IntPtr library, string name) where T : Dele return Marshal.GetDelegateForFunctionPointer(symbol); } + /// /// Loads the provided library in a cross-platform manner /// @@ -39,7 +40,7 @@ public static IntPtr LoadLibrary(string libraryPath) if (string.IsNullOrEmpty(libraryPath)) throw new ArgumentNullException(nameof(libraryPath)); -#if ANDROID || IOS || VISIONOS +#if (ANDROID || IOS || VISIONOS) || (UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) return Mobile.dlopen(libraryPath); #else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -63,7 +64,7 @@ public static IntPtr GetSymbol(IntPtr library, string symbolName) if (string.IsNullOrEmpty(symbolName)) throw new ArgumentNullException(nameof(symbolName)); -#if ANDROID || IOS || VISIONOS +#if (ANDROID || IOS || VISIONOS) || (UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) return Mobile.dlsym(library, symbolName); #else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -85,7 +86,7 @@ public static void FreeLibrary(IntPtr library) if (library == IntPtr.Zero) return; -#if ANDROID || IOS || VISIONOS +#if (ANDROID || IOS || VISIONOS) || (UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) Mobile.dlclose(library); #else if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) @@ -191,7 +192,7 @@ private static class Mobile { public static IntPtr dlopen(string path) => dlopen(path, 1); -#if ANDROID || IOS || VISIONOS +#if (ANDROID || IOS || VISIONOS) || (UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) [DllImport("__Internal")] public static extern IntPtr dlopen(string filename, int flags); @@ -215,7 +216,8 @@ public static int dlclose(IntPtr handle) { return 0; } + #endif } } -} \ No newline at end of file +} diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 87fd835f..7e0dbcab 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -9,9 +9,13 @@ namespace UndreamAI.LlamaLib public class LlamaLib { //################################################## FUNCTION DELEGATES ##################################################// - +#if ENABLE_IL2CPP + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] + public delegate void CharArrayCallback(IntPtr charArray); +#else [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void CharArrayCallback([MarshalAs(UnmanagedType.LPStr)] string charArray); +#endif // Main lib [UnmanagedFunctionPointer(CallingConvention.Cdecl)] @@ -306,7 +310,7 @@ public IntPtr LLMService_Construct( public void LLMClient_Set_SSL(IntPtr llm, string SSLCert) => CallWithStatus(() => LLMClient_Set_SSL_Internal(llm, SSLCert)); public bool LLMClient_Is_Server_Alive(IntPtr llm) => CallWithStatus(() => LLMClient_Is_Server_Alive_Internal(llm)); public IntPtr LLMAgent_Construct(IntPtr llm, string systemPrompt = "") => CallWithStatus(() => LLMAgent_Construct_Internal(llm, systemPrompt)); - public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => CallWithStatus(() => LLMAgent_Set_System_Prompt_Internal(llm, systemPrompt)); + public void LLMAgent_Set_System_Prompt(IntPtr llm, string systemPrompt) => CallWithStatus(() => LLMAgent_Set_System_Prompt_Internal(llm, systemPrompt)); public IntPtr LLMAgent_Get_System_Prompt(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_System_Prompt_Internal(llm)); public void LLM_Set_Completion_Parameters(IntPtr llm, string parameters) => CallWithStatus(() => LLM_Set_Completion_Parameters_Internal(llm, parameters)); public IntPtr LLM_Get_Completion_Parameters(IntPtr llm) => CallWithStatus(() => LLM_Get_Completion_Parameters_Internal(llm)); @@ -328,8 +332,10 @@ public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = t //################################################## MOBILE IMPLEMENTATION ##################################################// -#if ANDROID || IOS || VISIONOS -#if ANDROID_ARM64 +#if (ANDROID || IOS || VISIONOS) || ((UNITY_ANDROID || UNITY_IOS || UNITY_VISIONOS) && !UNITY_EDITOR) +#if UNITY_ANDROID + public const string DllName = "libllamalib_android"; +#elif ANDROID_ARM64 public const string DllName = "libllamalib_android-arm64"; #elif ANDROID_X64 public const string DllName = "libllamalib_android-x64"; @@ -528,15 +534,20 @@ public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Get_History_Size")] public static extern int LLMAgent_Get_History_Size_Static(IntPtr llm); + public static IntPtr Available_Architectures([MarshalAs(UnmanagedType.I1)] bool gpu) { return IntPtr.Zero; } + public static bool Has_GPU_Layers([MarshalAs(UnmanagedType.LPStr)] string command) { return false; } + public LlamaLib(bool gpu = false) { -#if ANDROID_ARM64 +#if UNITY_ANDROID + architecture = "android"; +#elif ANDROID_ARM64 architecture = "android-arm64"; #elif ANDROID_X64 architecture = "android-x64"; -#elif IOS +#elif IOS || UNITY_IOS architecture = "ios-arm64"; -#elif VISIONOS +#elif VISIONOS || UNITY_VISIONOS architecture = "visionos-arm64"; #endif @@ -555,7 +566,7 @@ public LlamaLib(bool gpu = false) LLM_Start_Internal = (llm) => LLM_Start_Static(llm); LLM_Started_Internal = (llm) => LLM_Started_Static(llm); LLM_Stop_Internal = (llm) => LLM_Stop_Static(llm); - LLM_Start_Server_Internal = (llm, host, port) => LLM_Start_Server_Static(llm, host, port, apiKey); + LLM_Start_Server_Internal = (llm, host, port, apiKey) => LLM_Start_Server_Static(llm, host, port, apiKey); LLM_Stop_Server_Internal = (llm) => LLM_Stop_Server_Static(llm); LLM_Join_Service_Internal = (llm) => LLM_Join_Service_Static(llm); LLM_Join_Server_Internal = (llm) => LLM_Join_Server_Static(llm); @@ -591,6 +602,8 @@ public LlamaLib(bool gpu = false) LLMAgent_Get_History_Size_Internal = (llm) => LLMAgent_Get_History_Size_Static(llm); } + public void Dispose() {} + #else // Desktop platform implementation with dynamic loading private static List instances = new List(); From 73ad5401274b49f83d105f8d9bb794da9da57fe7 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 22:12:36 +0200 Subject: [PATCH 61/69] update LlamaLib --- Runtime/LlamaLib/LlamaLib.cs | 97 ++++++++++++++++++++++++++++++------ 1 file changed, 82 insertions(+), 15 deletions(-) diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 7e0dbcab..9bb1f3da 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -210,8 +210,6 @@ public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, public LLM_Status_Code_Delegate LLM_Status_Code_Internal; public LLM_Status_Message_Delegate LLM_Status_Message_Internal; public LLM_Embedding_Size_Delegate LLM_Embedding_Size_Internal; - public LLMService_Construct_Delegate LLMService_Construct_Internal; - public LLMService_From_Command_Delegate LLMService_From_Command_Internal; public LLMService_Command_Delegate LLMService_Command_Internal; public LLMClient_Construct_Delegate LLMClient_Construct_Internal; public LLMClient_Construct_Remote_Delegate LLMClient_Construct_Remote_Internal; @@ -436,6 +434,9 @@ public static extern void LLM_Set_SSL_Static(IntPtr llm, public static extern int LLM_Embedding_Size_Static(IntPtr llm); // LLMService functions + public LLMService_Construct_Delegate LLMService_Construct_Internal; + public LLMService_From_Command_Delegate LLMService_From_Command_Internal; + [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMService_Construct")] public static extern IntPtr LLMService_Construct_Static( [MarshalAs(UnmanagedType.LPStr)] string modelPath, @@ -574,8 +575,8 @@ public LlamaLib(bool gpu = false) LLM_Status_Code_Internal = () => LLM_Status_Code_Static(); LLM_Status_Message_Internal = () => LLM_Status_Message_Static(); LLM_Embedding_Size_Internal = (llm) => LLM_Embedding_Size_Static(llm); - LLMService_Construct_Internal = (modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths) => LLMService_Construct_Static(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths); - LLMService_From_Command_Internal = (paramsString) => LLMService_From_Command_Static(paramsString); + LLMService_Construct_Internal = (modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths) => LLMService_Construct_With_Fallback(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths); + LLMService_From_Command_Internal = (paramsString) => LLMService_From_Command_With_Fallback(paramsString); LLMService_Command_Internal = (llm) => LLMService_Command_Static(llm); LLMClient_Construct_Internal = (llm) => LLMClient_Construct_Static(llm); LLMClient_Construct_Remote_Internal = (url, port, apiKey, numRetries) => LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); @@ -614,6 +615,8 @@ public void Dispose() {} private IntPtr libraryHandle = IntPtr.Zero; private static int debugLevelGlobal = 0; private static CharArrayCallback loggingCallbackGlobal = null; + private string[] availableLibraries = null; + private int currentLibraryIndex = 0; // Runtime lib [UnmanagedFunctionPointer(CallingConvention.Cdecl)] @@ -625,6 +628,25 @@ public void Dispose() {} public static Available_Architectures_Delegate Available_Architectures; public static Has_GPU_Layers_Delegate Has_GPU_Layers; + // LLM construction of single library + public LLMService_Construct_Delegate LLMService_Construct_Internal_Single; + public LLMService_From_Command_Delegate LLMService_From_Command_Internal_Single; + + public IntPtr LLMService_Construct_Internal( + [MarshalAs(UnmanagedType.LPStr)] string modelPath, + int numSlots = 1, + int numThreads = -1, + int numGpuLayers = 0, + [MarshalAs(UnmanagedType.I1)] bool flashAttention = false, + int contextSize = 4096, + int batchSize = 2048, + [MarshalAs(UnmanagedType.I1)] bool embeddingOnly = false, + int loraCount = 0, + IntPtr loraPaths = default) => CreateLLMWithFallback(() => LLMService_Construct_Internal_Single(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths)); + + public IntPtr LLMService_From_Command_Internal([MarshalAs(UnmanagedType.LPStr)] string paramsString) => CreateLLMWithFallback(() => LLMService_From_Command_Internal_Single(paramsString)); + + private void LoadRuntimeLibrary() { lock (runtimeLock) @@ -726,30 +748,75 @@ private string[] GetAvailableArchitectures(bool gpu) private void LoadLibraries(bool gpu) { - string[] libraries = GetAvailableArchitectures(gpu); - Exception lastException = null; - foreach (string library in libraries) + availableLibraries = GetAvailableArchitectures(gpu); + currentLibraryIndex = -1; + + if (!TryNextLibrary()) + { + throw new InvalidOperationException($"Failed to load any library. Available libraries: {string.Join(", ", availableLibraries)}"); + } + } + + public bool TryNextLibrary() + { + if (availableLibraries == null) + return false; + + if (libraryHandle != IntPtr.Zero) + { + try { LibraryLoader.FreeLibrary(libraryHandle); } catch {} + libraryHandle = IntPtr.Zero; + } + + while (++currentLibraryIndex < availableLibraries.Length) { + string library = availableLibraries[currentLibraryIndex]; try { string libraryPath = FindLibrary(library.Trim()); if (debugLevelGlobal > 0) Console.WriteLine("Trying " + libraryPath); + libraryHandle = LibraryLoader.LoadLibrary(libraryPath); LoadFunctionPointers(); architecture = library.Trim(); if (debugLevelGlobal > 0) Console.WriteLine("Successfully loaded: " + libraryPath); - return; + return true; } catch (Exception ex) { - if (debugLevelGlobal > 0) Console.WriteLine($"Failed to load library {library}: {ex.Message}."); - lastException = ex; - continue; + if (libraryHandle != IntPtr.Zero) + { + if (debugLevelGlobal > 0) Console.WriteLine($"Failed to load library {library}: {ex.Message}."); + try { LibraryLoader.FreeLibrary(libraryHandle); } catch {} + libraryHandle = IntPtr.Zero; + } } } - // If we get here, no library was successfully loaded - throw new InvalidOperationException($"Failed to load any library. Available libraries: {string.Join(", ", libraries)}", lastException); + return false; + } + + public IntPtr CreateLLMWithFallback(Func createFunc) + { + while (true) + { + try + { + IntPtr llmInstance = createFunc(); + if (llmInstance == IntPtr.Zero) throw new InvalidOperationException("LLMService construction returned null pointer"); + CheckStatus(); + return llmInstance; + } + catch (Exception ex) + { + if (!TryNextLibrary()) + { + throw new InvalidOperationException( + $"Failed LLMService construction with all available libraries. Last error: {ex.Message}", + ex); + } + } + } } private void LoadFunctionPointers() @@ -781,8 +848,8 @@ private void LoadFunctionPointers() LLM_Status_Code_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Code"); LLM_Status_Message_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Status_Message"); LLM_Embedding_Size_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLM_Embedding_Size"); - LLMService_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); - LLMService_From_Command_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); + LLMService_Construct_Internal_Single = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Construct"); + LLMService_From_Command_Internal_Single = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_From_Command"); LLMService_Command_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMService_Command"); LLMClient_Construct_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct"); LLMClient_Construct_Remote_Internal = LibraryLoader.GetSymbolDelegate(libraryHandle, "LLMClient_Construct_Remote"); From 09a17287e54843cd31ef95092a8782e2e0e7c066 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 22:13:11 +0200 Subject: [PATCH 62/69] set debug level before creating LlamaLib --- Runtime/LLM.cs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 401c704b..ba751cf2 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -272,8 +272,8 @@ public string SSLKey /// The underlying LLM service instance public LLMService llmService { get; private set; } - /// Model architecture name (e.g., "llama", "mistral") - [Tooltip("Model architecture name (e.g., "llama", "mistral")")] + /// Model architecture name (e.g., llama, mistral) + [Tooltip("Model architecture name (e.g., llama, mistral)")] public string architecture => llmlib?.architecture; /// True if this model only supports embeddings (no text generation) @@ -423,9 +423,6 @@ private async Task StartServiceAsync() private void CreateLib() { - bool useGPU = numGPULayers > 0; - llmlib = new LlamaLib(useGPU); - if (LLMUnitySetup.DebugMode <= LLMUnitySetup.DebugModeType.All) { LlamaLib.Debug(LLMUnitySetup.DebugModeType.All - LLMUnitySetup.DebugMode + 1); @@ -435,6 +432,8 @@ private void CreateLib() LlamaLib.LoggingCallback(LLMUnitySetup.Log); #endif } + bool useGPU = numGPULayers > 0; + llmlib = new LlamaLib(useGPU); } /// From e2e66c8864e5a50e9cb59a353ca3b9f3ac328aa5 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 16 Dec 2025 22:38:16 +0200 Subject: [PATCH 63/69] build usearch for Android 16kb support --- .../usearch/Android/arm64-v8a/libusearch_c.so | Bin 1921808 -> 1955440 bytes .../usearch/Android/x86_64/libusearch_c.so | Bin 1844480 -> 1859760 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/Resources/usearch/Android/arm64-v8a/libusearch_c.so b/Resources/usearch/Android/arm64-v8a/libusearch_c.so index 34a669744ad2daac098ba51525cbdadf3be0047e..b6023ed15c37118d643b07f107e073f1c2014c15 100755 GIT binary patch literal 1955440 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

8xx$v;*Yy*z`bezmCoNA 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
A#ZpcLB3cRY1rV*as$aq8 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

4_dlPoW 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 DNQ97B)vQxx0eY3B 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%0ADldM)AK1;2Q5Ff?~y0J2vO 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

{*Q&<7Vv)} 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%0Aeh~ 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%0Ajph9o2PrPQZhsLC4_T|^f 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

c=gq!#(l^kb zKo@at=z-n(^>xs9n@@an{kHmSdRdQM=C=orWWGAVzvcG|_QN5lN zeurK9>3TMZ+k_G7h{9>=h(H}L^Jo&EB5n!V^e0N6ev9-{w@208pq*viQZTfwS zzDj=`HlW{fJziGt#diP>!EW>Q8ZYy4k;e`Dpg!-t>TSMK=OB4xo;u%UDTcx&phLjw?bR;X2`z|E0%gn#2r3id=lSo^GTi6|7g}H#6HQs>G=+z8-jiq zfa5R;Q!ov+pDjLQ(Th)p@g=xy(Vx;U^K$=^nP)%L_4KOuuwLEz&yaTox_{Z!Lbq6=E|;;ZBG#IL}D z`29E52kQJbzbx@uKTQ7!Ov8*tZ>y_#Mf!DoPTp99!yH!fzSoU;*m-MVDo~2-n~yJcK%4;v~<8iqrZU<8|189_Fj{ z3Hndq_OF?B8fX|E{JNpnavt-<6<`r=K%H-!{s!#F*XA$!L-Z9`?=rrGZof-?xkvo~ z=Vt^)Sg$px=ijSd&S9PN=*3s^1X;gH%l=$8zSn${oS!h9hEb^3L+cXgQWpIR=du9T z;5yX)z3Oeg8y5dw^;zbXhbyoEi*N(#`D|0i4%~zLumY=4$4gv^@gsN)Yp?-zyu_6m z--Wu41Ny~R>e7DNN8%2Nmw8BCI)0aPzYh=Lk>z@5(m(JU=Ds!veNg**=dVbUN z@BDYe64do}ir4x*d=KC;tiUR)Lml5o9Z9$XH!SrH&>!tl??XQXLr~Wv{)0;I?@>Qu z(T7gW`cJ|s7>8+?flDw4b-mh8$6r=2^-ZgKmM!&Mw|Xcm$8(3Dogx^lvC#)1oi^ zuBqn$2L6X>Pr|{E`M7opAJq9e#cTZ`c`9(1JV&sTe(##~2lyXa>XACDj8|P|eVS0$ zUq|QppPU=m54B$F{OD#Z`f>V0a0*WMs1IB8+w_;=K0LJOmpLa{*npFNz^s$&;|$YK z&)*jBCf)}}pdSWcuYOwJtADq3>G=;>=HJIW`k@D1pGBWzeQPl1<~%|@KhdwE--bJ| z1b5*c+=trlvhlsvaX=kd@!B$o|PWFR*`Q*tG0t zn7Cz_gM~}_#feYAl=wkgKE2-(pCm2=m!Q_?m}j^1mvwWoKW^xOeQ*Tod$`dVIHo*CVbNM(CgRFx(!;^Z;bvd9Qb&% zPD4=7w^#jSkN#QmZov{P!(CW`y1oYe{hwgwF#!G0rgt;$fqifg+Tv|-l3(Ww;g^Fe za24A0lZ;Qnutl$R)97Yk945Mqk6dxQo}bL4Q=Q$eSB83*;4;iYoqxb%&dDGQ!f|+6 z{WLx^Fb9hkf1AEw(I@H8zyo-EMfz3cTcO<)|4%gQ=Z2|IG3_+e>u2*j5kD2MM*ljj z!kR^ItII=u%HGwh-iuEb*8h;1@8l;NYX4z$nJ)DKbki^bQ&9Vdl|D*)#-h*D@BSoH zZ$CWwgQnetu0GS=W`25}$Cmku|GMPIU*{X3-v@&*0;5pRSM>fa_1)%KvgGr!9)oZQ z`emI|fui#<9)LkO2~$voyChEXgjAf?XBp4IJY0ub?`B_D;NTxN`<#JZuG=Zg^*cU?4P^Ki0*zvxrwGcem_d<0#hOMSFQ{TBLNxY2LcuLkw}d)1%d+k`HzKR49= zTGxlpYth%(=Q=!vO{o2Q)mwcn>(i@#n0fhO0FJ>RoPv5ja^I?R|4LGq>|=)WnYEn% z%f|PbuaElrp$`thF&Kn;z7pqU+z$hA98N+VFL48m4?VA*SYc44paTJQTb<2MXPpdV^|iT*u!2#+oLCjDvZ zEy68J{i09wsCT3Hz(MGP!%)vh^0^q7cyEvTev95#M+p5SoUz1@(=Yld+F^^{{pn^u zQ!ouPa0xEMna?o#IMnOYtxp!e96W@b{G<*YzhjB_Qs)31gg!U~{ZQxc6n9yDg}ha` z@<+`27NGWTpgV!9=+@pMz0`3^JyOTIrJi2(p#ifVQ!or?pk5!Xk9N?HQD+cN!D$$U zGf?M~xN*iqP<$e^wNJw0=l-K+zQI3cI1M9E=NG+)I6n-)G4X?Mw|Fn}l6i+@zFn@L zjxVTqy*T-k7W*x6 z4oa{L_n_XdP5QUt4wQJUKW5zf$IbP6`X>#W(59~tSAz|B0-Ml<@00r1mH(;sR|QHv z5-0UYT(9+9wV$lR0PEs|S*WJtnx;PjXJGt_^htcuFawt@{uTPGFgIwCD%A5? zqyIpkGoSI%`V#tGxCd80^J0CK@e}An=eOt!^smBoxM9(k=iT=tpNbFl zx?!KCe%XJ$f8+Rs;1ryO5g3ItP}l#YK3V)8-S;imqxKIICv{3)arzT51D9a8`MUK_ zs~`MRW<7myA09yMKSIAB9>L?cNH28+R2>ydJ-zCeKijNN4(8!1)a#@5#SZ#3 zb!K1=uD~K(g*ub31#)r&&Gk@A}1s0&rFZvL1Ntl9Z@q=%-_%QR5 zc`wU+yIemVf1u*^dWnA)T@L1<*4uO|7JZTa5-dZhtJ8Uq_*LT8;5yud+JBe+J=kr& zPX7CEvEL5o;1o8Y`*Y0orT44Gcmtk5iP!o8e8MpB`Nnq)+Vq3yhu{eG!!a0yPwGER zy!Z!{zphW}kvOSG;(D#;s{LdgrkO_+mZ6@{3jGDR3fHbkzk$yd+=eBK|KR7E^WlTL za1S2BBdF(dOn;v`XF!E#2|R^IBj$QMhI)Uy^=abg!e^>WKdD2<`z`T#`d459 z7U3$~fOXAAIE%o%OFX6Kb_u!Gm zU+WJ$=(nhQ8}7n=cnFW6-Vce}VY~#z=YY2MsaX7$-f8xK+i$oJ51`I3`eoua;3nJ> zKlpZw&oeKXcS+{k<@)LPKH_Bk^?HeanLN924{E(lw{OuO(tiq@Q0nS*9wh#VxMNs> zHK_ev%-apS&DY7_^A`J^kUubLuBS0L4)uNw(LVzHP~x?In(;hL-86a9(58=|pMeRO zglU+8PwF2hUi?$aU)Lw~NSxFoalO`a)qb)LE6k$^n^4bZpZ)`Q1dp#sU&W^m8}QWP zAGu-9M-;lAF>N>OhhC`XGeG~OI%gTnc?+Nq!g1&cn7rCQ%6JkM;Re+DK771z5c(|s z0s6bGe+qpXE?-f67N6V``Xz{4f7Yy{%tx z5%f_QhY6_td)24#$-pI;wfM{a>;2ndKT2>H?!yCk2#=ty|4DtC_{n|Wc0FqUJ>sNJ zsq2{j3T(g=*loUU{pt6lb_U~ z2(bQ>^?Zu%|KOC6ikBXvY9_4KMg z6`vQ(y11bi>h;n3{to&&bvK}kd>+^jy;6rtC~+smpDLd|i_f6NZ-;stf5yz$6Ey6D zD!oheCE}{E2J7Mn-)`}H%uD8dD)a4f{dD{!akBn;y~MvM>xteCwce)lSoHn$2jCc# zx;mW)iT4sW00-d^)c!&G$6>emI{Am*Vn09EO$w&rlI41up+5nWP~!Fet}wm_H{Wfp z*DYw%7tpW5b+`ey;5K|x|25*pe^dGE`lKF-lX@hs*LtqnPu5|dc^tyAFEZ<{=i{Nj z4|?Ii73qEW48su^u=p3~FT&uvOx@#f3WlMc&oup6b(8Ozf~6~pFXOZOgnsM9RmROa%6#@vOw_u&E5dYkUh zq7T!bfJrEMwST-veF1$DuEBMv{d?7K;*%!g#9>$F5*3~5B5VZ)b&59 z&lrAk-?v?l+TTr_)G2ih&_4)ApdWUduUr3Nd;?FJ{|WcCnJ+fiSsW%{5~g7IJw`VT z_5OD2lg2LtcVQ<#sYAzaSmNE(>4AN)A9|q=>inJJE~`Hv?;%_caleDwzk;p`^XOLI zBE8g6qaLZFV5z59ePF_@M-Yy~Fx2a#^-~@6!_+wfgD?cAU>NFr66a?;0L5pLw)Tlw z{7$HMHBX9<4{|x<0u-kl{{FmQiza-~i6K=sBsP}7?{&lzk zC0^_I8Fx>b>#jCsScf+K0dYsL0;{kN8}Lc}kBJxmn)286Nj(xL^+;T=^<1@|tb>R3 z?uTip=M$oT5{BXQ73rh+#9;!aEdB@dAHvLw=DaMy9Lz&KpB4Jc>YOz!=WP@HHr#>B zUt;oV|3k*BupgbzqR-NwhXq))=r`%_w*Fo8b$EJ3@lAYOFPU}dwVn#`gRHy6>-BUo z?uH)N2esa&>$m9h)V~flpybv5Ydz`@&>zBMSb^HVSA7ki20VdHi@)r@-akM301Uzq zoP<*_40Zia>XXJ#?)$duQTvY*Cv{3))AUDR0w!U%`MULw=QhXe03c?aPTtV4aCwusw>{pf5yPg{K7mznwY!x0!@ z9d*6E>Pz^Q;V#^R`_PuJ!T1S0?Vu0;#gA>5oK{?;EiBU(dY4U{aFe!h=r5V^06h82 zrY$V}71I`0X$$jNGcGLrHPaTZ=1g07_*JGYJpO9a7Dm6uw1o}Y!ojaKLS~}{nJcanDv^raNyHTTbLbS91eb_ zX$uoR(-u}g+q8w_pJUp> zrPoYbc={2>;nA{b3o}{M76x;sEzEos<1q5orY$`E8q*dQzuvTkW8Y}n!lQ38ZDHn{ zOhaSa!+QRUj(F=>Th2bA( z92S4Vw1vTa(-wMv(zJy|+QQ^dnQ`ICPn))I?Pp9|7(X;^VUf0Qjka*`XN_JsL|a(> zIWsOCKQiq{{CV2&NHP8kW?XnmTe$LzW?Z;lF>T@GFPXN`^UJ0!O#O;!3$r!T78d`T zX$$4Q?^Y=P{i?z;|NWXm`S0@+`uXqQ69)M2qZ1B&jCqd|&V0OS3(KEi+QO|*F>Rsz z-;WmNKf{a*%LBwi`M*~xbotD5dxw-rI7w*T> zvoBA4*~_D`#~p6?XOr`<+?$KX9?iD3PPeD--V97kjL|taao2Ts{$A|%Y-;xQeEKz4 zEOtASi8*U?cm8(lmQ!+U{%$Jiy0?&?zw=sb;oh98-JM^Q z)c5D^w36PPxc%_1Gxvqm-2K+F`&yg$!V4_L3op#yi#uMgq=R>o3$y7FXLzw)x-YqK z@0Byn`FribbFq@@>@0)tY6YE>-JQF;aR0T~-Pu%X{@yF+)+Bf{@GjrGUU=c&Lfkng zzIV756Z3b{vG~G=@41q559gAxSLW`S!ku++G>N&{cAA%V=07HrdGXHO54KO` z8*YSiEL#Wn4a$4b?AXM_=nZFwOdZY!O?>dNGjV;Xo%6dmcmLsByV}u!nPPJOZu@*r zxE52h_gdR`J289zU5}O3X?A0+shvH9&PhqkE+(8wKJInnPI5LKYY*RjkWA0VoC~*g z#9GTJg~jLYIp?-@?mjp%8hCZ?wf3!GF}aX#-v*wEjXsxLSa|h8D%Kind$n#4s(*3z zuJyKY+qr3sK9gEVJ#ea-i?ysBgLlV9{p~ERW1pUQ|4T0iVy=%YI*a05h3)I*vH3iA zzjYd&Qk|o6!R_gTPM-D^{%p*3d*Q*o#~0)p_x$c``gWpyhjC`|+?#vUpEWo5m~-x& zU5=%1I0xRjQ_bCf#knEfOD{P8Yx=%(hni2d&K_wl($HOl&Tba_;G^a}`Qm;CR8kJU#JDDt-Tg-^v@$ zo7;l9`kYc`}})&g^`0F5bR_$dA{AYc{@+O2?dE<5y#kpY0n@(Z&AU+=m`G zzj}{uz|PV-SNB9JH8Fo~&jP90`TH-Pe@uCUdEDssruD4lrltBH-Lzt79&*}utBWRZ z(|P!LITV`+EPi6T<(fXU~&E{ zTaQhz%%$hoqoi=f$a8qZ1S1+u@gPyBtk=;Z@h2 zy9@CWhKMUP(=9F4koX^CZpZ@kU z%ws-hmMVPv4c5xJo@KS(bHjNWbbc$&-g?e&?u+5O6V5dlJF{q!+1bVWH%8|dV|N!G z&c$vo+;i6M!R_?Cv#2jlJ4fW%hqK8CbBp&!$3!!`*m^)~t@?}3T~rhk4<`bx)tq?0 z)A{nvn5+E@opQEj)>+e7>ySNKfcCS3?;Y>B=yrX<`UMu98?^b6zZrjU_wH-4)cu85 zoYi!mkDcGh_Uhbl9#Q6)TOXWr-Zfgs)9)xoZ=O38&Vf;f;+b>f z6R!6CWYOh3d*6C+`&H*5rhWHxIZq^u&N(%2EsL#+5m=hyJgU1z3uZ*`aOIewkb{kpXFV6>;4PQovn_B&bM z|5Et9x16=T8@}y4OtxR`VnOu)|N8sTW6$=F&9lox^=KNiUvc9Zxwh3(PCPRd^V^s0 z;wf}@N8ms>2RZXvEbUyn&LhN)nCsqL#`!6X%{#Y`bnA`GdCE*VJKMenTif&KnPT)g z=Vh(+P#C+lu#k*7*X-P*yP~r*v9VbD1+x9HGCI+IV3}y&AY0e}XrMj%=m*WY&?C-X zOiax?vmJf5b*FR=RQt`jbwxWjmG?Qnch9$ud#rtpw@Nv8+q*I5Tr|#8RNA>T=VHz& z^UFJK>psa<$XlK~J?kWNE~EGz=icSKAUc;q`xw6Or4J@GCXYVbxCj9y)g)d{wjhl`+KibZ3`Ly#8+Aif%m`s;+Idv-WPVB%iHhk z3-{yB_nq0>A98Nz$<}(RyWyF|zdJwCdIE3%mO9m@UG3NO)`4xsefjH`%`>sH-#1>o zJ9W!B@;9Ejy>K_>ys0^l#LlC^J?A~cx#c^bA0F-2#QX0$Pb@L#RrO416V48t+vc0* z(~0xR!+CEr?*xxsDE>2V`_7eZev(EJ znscR&-gMrU(#|fN|CD%rC6A8Yc0NqbJMTv4zb*ul&cjS=4y_-X^Ru}*@4U_3cb-L@ zQD?EgbT-qz5?(*i&pFrO+$;B;_mlR++w8sci?`Z$`rFCZkMHAOH?MJ$&g1jlTh5hx z_I;^+w+t|F`_ZStiI<#5Me`!ndO|cGlg!t(_A8;f;?KU4IxnKFd-n$?=03!ar@mgg z`1WM3Q|E`*i9MgIi{Q~`(+g>5-Q{y?+*~@!=i)DbyyKkx6g&ISc}Z@+%%l_dov)0} z&*EdZfH!!XeA7RHjkbO=<=fx|Z+lNst-g(e&)x7#51of~=R5V|=j6igjyKH_cD{JW9y%`y3w$y;e=@G|3e?Z|w;$eertds| zIDZT=1vxj1)N8HxkoiYH@6Jiq&)qyvnGbF1nY{f2Z~jQ(JZ81N-8&!ByLD_mDm?zN zt^4?MpX|H9&jP74-$L4V&6h6Wb>^v8>z9YYG8oJj$#g7UYeZ$CSoR2TB$3AraV5I)Q^ZFzCV#4_~eV42Kd~Z(9v@X2LoS&2S_gh|~+TS{CV-E>wVNa|J>w!vNYcX&z=8K&VTEBa_bFv^v2mgzD!Kqd~mNd=M!CeoW$HG|a@6PFGZa5DT?JuHn zm-F}V#2uIOY5v}g)(z?5{r2C>og+H+{KLh2sn(a$JK>8ybB#K`fwx~yKkvlMIxp>u zj-&G^d&gx$THj9Z-FALZ9)8$#f8_iZ&&Tcqqc>Bt&Rf>&uaD{H+a0fO?74O5;$f`) z_0xHflQ+26Z%gLy$j;2p|1zjgqgVZ9wDoTb%(v4sUq;)1d~vm&bkBSOefRxW+CK@e z-;kYEK6`fCe~J&?IC~e?2jzz4`={Jc&wYAvKDIozAszmJdf0uY6FnaTa(dRy|%deiJk9{qE;;)~xuYWXtbaK@-b^d0i ze#>se-uPdsIKO|6q`Q9{aqhLc^$vZ7f8uEUhCg;8e{t)JTlqdEYq4gt>lW&M#lu`724R_1Po1n2x{jg84^L z4&Re({axqwyOXbk7n1Y0UmNkYJ}mo&-|>0F>cRgF{+-ohU+3RI`+2^53(n1YF7^07 z>v@AH-#dEA;dB1PTO@c&UF2mMW@5e5Zn`horoImT{pL_Av#Kgn!!`3fD>)FJ4 z_;LO??CiSvHGa4-A8#EN?Q`Zz?&<-ID^@+mUG(-6aNd~XX6v5lkD50w{E$4+uCm)d zZnn=^*!kCatv_`*|AOi9kGU6B{@7m-otsPR2&((LbKkr8(-;2=u^rRp{at_0X#X~h zK4ZR<@h?bPFIs`wcsv$9|Fd(^6ee0zpuY z-?=|G_o&gjc|UgCp1E=M&t1;zt@&p(|BJnMVQ%9{vPSV!bR)i)uxGquHVHnY&?v%V z!!uZEEG}hF>^C>=?Evv0A>m~_NXc=-zx|$*Syf#x08NU`p}yFSSxX{;?&|8Qtjv=q zPii_x=&pb|Iqq$5A6I;YwO3%6_splKOOCT5udqe>95`C*mVu~7V~{;yes4<3*;EHU1 ztT-?fV8m-t6te4^pyNCr4apNR6l1kxb%~tX;*}!H7%AC}DJm!KuH0BjaIV{q_n8ZEArospAfERYzLauK8 zDRu50Z@!jGuIC)c_|x7>i*4MQ73BR+;X9I3SRHT|Qe_cMX@-Jl*ne0cxCF_n=`7}) z(9`~8vx1w@nNBlkbnY8P+jzVRWtTaQZQ;jQh8A75wi}+rcv(v3Pv6y+uqAV}6s0YxxERb62D_VG^^A9ddg&80Xn zUN@ek+PiV;HqH(mi{souZQAA5FC89ZHiV@JI>toG376x`4eeBS&?ycik0gZ1qUT?P zOfn>2(v{^ouC+2uhPEKNo6V%v0|>QlO(ui!4N)!TTW}ckr!3w$#Sc&vS-IIcYCNhH zO4(qT;>rA~Ky6=@&*>vsv;^_2wVqGrw?o5+pA3W^KcC?Ch^=F9w+dHM?4-fdF~$QV z`J+`z!McA!6cj;Vr<)my5R>ic4z%rsUXG80r3 z5h18^0q5)cQV{M;#s?F90#uD>w0TC<%$~nyS&tOhaK2Drg9M7)FpVNXyr(61uL@4L zQ~<+efA@FP>b&d9l=4F;7n7R(%|eLGut2t4s=#LuSh{M5muj8F=V0beV+;PRo;4rO z5F-tSF72)NT}(CrUsr#=M*6!rIC=i!@I>?9!5Ve76Qi(lLNi?0V^LbuOHCyyM&Hdr z8XmO)C@W8{@C0p_#nO@|dctEBYZZDR&27ZPBWuIvsKt;X6-7eszB^xIdpfshAiHUc z8}xm)3NI`tt2V4LavAb`r&RNi+q9S5vG4wY4XK;*{S==)DLn`iJ`l@Z7+>SB*K=T& zHd96a&=f^HqEQqtb=kXZ%_jpB;{mjR72=U3$sx)5XvySC{w@U`t?y=oB@?(`6~$5e z`QhQ&H_!gGxSHd?m-7ke1%H~X@sIzQPWUt8T!Uxx*|TN)?DVvKI{f-se*y}?GZ6v6 z&x_MPAN=|7*;m)=^=Z6KeCu5dqu#`dxp)CnO zQG=qswjwn~j6k6wI%3fwk%eBo3=Pn-^?U(th^g{Hv<7-#j&$<$E06TW{*b{jih}YH zz;GzQAwa}MO4i}R+H zeu6pM-L*2wzM?=_LoGRS=lS_A5MZL*a1IgciQ-{`b^Dnz;~icyON8%VYEjJy#9whO zA>s&s5&01aCSJnAqJl`oQr!lJFot=4lM}arHiWAWU7?(4cD254@qtijxcnrHy>c-p znF#qJl%6AtkT@r~P2u8XWkPR>lk;jdVVrCvJFLaCD?Ret?_2Kifb|lAg$6*0C1bbm zy7haArzZB=TML4~-IuorKzEAVA<6)-f2ZTY06~9jiZg`xfhELa{TfV>4A^{Q2 zw0da>N=1dSIzChSTUM{-b8tbqsi1;~2Zx6*4o|;kf+QNBTL}i=e5E*o<@jS-CRB{= zy=KOPLECxo*y30>V7%1m3Y43OMJxziEPnbo2c#khAu@rw=x1dg$}5 zzp%=8;iRl@_=g}FZZn*TJMea~0)PSSvZMeCsI=`#dYI6zB5Vd|(N>{bhbVjiAp}RDL zh#LGPkRisSm-JP?c@|X2`5|E-sI?2Cg`aHQBRb|hYuy4=__QiZ_kWj1It`m1hp=0a zSvEbcv=505J!vaAqstRQUbFsYNd-7)f=7$xxx+>U_}hX!*%}`RCG+zol~6<|S!s9f z-ynri-H16$N=%Cl4#J}bm!8s3Jw0!@_@at}M-FXTgM+YwVw)A};g!!BJbwhd4>lV=z zlz}161N9@Z(7}T^fTb4KH^f@pP79?ViX%gx)f)S1D?uTLwMeuV3VOQ>>>~=le&2$0 z0=2v=hZjN74hv$CPJ&8`BZez3XOa(3byKbU_93=*^&HDautCi~!iMwujF z5XuowJ%58>CAg0V!bM1eoXZDROf3Q^$hGShRvp+!6-h;zjhwkSwwb`jvO-1| zwe91j6bin?rjojKBZBnok6(ZDtZ=1Gwqox;A}ngB3X;`miRL0)#W`Dj=_#hWncGKc zJ|O|u*MX|Jxns@{mRQ5?+uaI%C?Z7Ngj$v=ei);O#2-th$rBNj3s$qco3cwj#FP5NF@VDj zM1Gf*a*dLv6kst&h@s$@(6DiW=f+88={lA&oPZgyx&Y{V$*Kta%FySloE;}Dcqu)JjW4RSt)PU>KdnosMI;Q@ETObD7NCNb*X0eRaB`$x;VDIx3Wqe z;H=|3T6!imhxT7h;PmzcmU?5&9gB$ zembPfcuQ}?8@KTvD~_X;b4+-g6@4=TRXu;I8FHuD;u>my83^>r33;hXzOLh$J43RQ zI(UbaNG(w8O$drHWhUx2B=n$II{}*=-Nt?h0H5Ef(++!EqFt_8kx@ znjC-sJ#}#Er;?>wKzI!;8v#2>(*pob$jC{Dv6e{R3p`@vJ|!h#RI6Ls&`u&Kdb;B4 zG-8mgszGwlJe0+^_4^i&4A6!arM0PKSjSWEd_K%9GO2l4{Wjl;7$KQfQOg}|8# zzE?p%vs@BaM3I5P^=;R*Qv)OtBm>d<0Pn@OZ4og#^ ztt_TYeO)f%0hiKDC*UbyDaml7<<$7-aY~2s9RdNs$)?N%kRDU6$ug125WWAvHwOQh z|714~kIShzo2LhymtKd6a45abAQdt#RYS^^(>r+<1~YJFwTlftY?AHCZftJ84hu0# z-b$1@K(dFK1U8v?%$w{1t_u%trFMEe^mIfii;OsVR5Y+g=E&i&vXe zpl%y-btq*rt$)%B=Hfck_}Ip%m&5h#a5zf{WSI*As203fw7@kQ^Kr7cznofgu*l8V zJaB5e@8}%QyCYr!!ATL-;E+s^>us6^&&_~+g>k}r_&<>@h~4bE7iJnZWmV}!dO3T{ zqq~!OV%Tx=I^4Mw;BLcTotH**EUTT3`e3>9HK<97Qp;_v8wKt=TOuMVlg@w!HRC1hS|E8BKs8SDa#`Dbz#{m`M;-!3MMWVas=lvgM zgpn>_m`yC=d4REMM3_ioUH!Hd6jNNplJ`G>It%raCMFex1W>{_5=?_7WZn??<0nU27>q>urv@~5;0V$ z|E?2g*+nyzZ7oC_1Wo7A(95m;$77O()j+@x1cAW8_q+rv2`49Xdm#$@V|nqKebI0n z!j%A}1MSzYhA}{VC#qsVF;OY`U`e3|WVNwWaTb#DsyM4LUfF{T#jqS9LqG|cWcAwG z>#BMlU@kNvxw1$N3n`)~xyNZQzuC3{Kc~DNVz7J5>rqS&Sv2$w?A%PrxMNPc)dLMW zd9>zYmJ`KO?q03yYUzdJ)EtcaH@qWUJ(nnZ_g`$3+JRm@D(tyG#RBXru7|g!?I7bS z`wE?P_4c2`rma_HUmS@VHHeI=MSVAVYEQvvF{ASRc#Bq`G>@{#BXtP3BBnt&l2UAK zL&td9wud8xvZLQt<7o!xhVvaX%8hRS;3aTrm7Rw;F;=LeUvOJQgj6I&t*(G-X1{5( zeIb0$ObJ0TCcTzg+lTK8}96`hzv`z(;0PfGgBpL|vK{deaY~iF@a?U&;c0w_jhO3XHUfCcR> zf`)Ld-wmZYc~X}psl^FzFHndJY+QDU+nXVhrwLBgu!-J44*Y2gncfMlxrM&}tFQ=^ zuEp!qGa3A7Li5QZ<{&p)>W}_lA~Hjk;fFL~p8Klf#rqC~O-6SDWnPw|}C|wb zb_9FXVq@8K!3NnOShx9Vs75N<6uw1sG;m33CRXZR_!aWEWAut)R+QV!hdT`3gcZC4XLe?m99Iog$Z9A;k3Vhcf5^{FXFqo0T^jvPw9XISMwn=S$QwxbiYl zS%)^Gl#K>Fjz0(dQ(A;lb#v4jE=Ne@K!o~ogrchzVwCynn#Ad=;$VVIk0g4)npiR0 z1D*Lk59d>4covt->a}DW>@vYF_1@F7|6|eFO@fooOy4x zLEAW>TJ<$rw?e%;-B2d{k*{FRf?ADmLsVq2*4l)@$f)*;dl*{Y9rh_-cwV#<`*gI$ zK1Dxw_Gx{h{Uu{FRd`t$?b-Shq}Rx;cOX$b2X{iQJHNX^a%nj<=j1C8dt7-j(3Q&`+%pX-!Z*>}`h}kdVVhyut-oZo z!rO1;jci5KPnBvVdc~7Owh$*vg`XHvJ{&eUoDRz_eyM_SSmL-qAU}E`4ta3WSbJi< zPAL%>Er21hAtjtF?g)1X=Q~c0BHS==O*{B{yL5Sj5f0oiQ6OzMkwrxAkgX*#e&!GX zV8eaDO8GEc&W2FS9}hUDTKm(cl-;lkba(dqu%czuqN=e&N*${|6(hJm)mk(Nlx&SG zDdd^O!k8YimAjYB|4U7RKp7UO}*2B1jXn z;ooR)@WHuq|JPsmN-j}tuV_JrnH&tZIa9=*fnc~xF+pdVLWK?9c`F2=eKd=YXNaH6 z(Mj8p6H!B-S)LhBFyo$sJV)gb`uNd#DVKChH#h^&D42 z+aWUBd8-zNdG8h3ONoQb{M%qv+H*iNEs&UKHs~NI@m4&x+;P)fn1T#!a4>!;2T85lF(SJ6$Wm0v_yg>Y{HIs2~;~%|q2ucUaeh z&P_@__@CFY9=v#=G1H3|j(Z{PV48m&uqJAeb3u!T0@bUG_rya&x6iv$Ej-DHZ)&qR zUtxtfY_cJ;3hi!->Q@YpMNT5(Qhnl7Xr4BQlh2~G%L!PYUjb)_!#4ovWf;!zv*7~Y z!l}dfgy_6l%uIu98~l>Hi83W5ABB0Jo=X`4P^e1F5mu5ZP?q!M015=Dhn`Ri;qBn$ z!(j@!p4k@A`(B0;(KFOkZ%rAXLUl@5z{81e>_qiTmtw-mjkbXeGw{3H&_KV+MKCNJ zvOR&&w}GTs6`yhk4N}kSjHr#r-ANZSU3ar0gq%ux2HD!Ark?VD1bDn_$4Al*z=51I zwrLi1llmA(vPX8@qT=%q&OpBlhThBGV2nZ|)m9}Acm%Z8&54w!g#KH~g?$ft&N&D= zXpcH$8@3_q>gKaCcAHBx93QchXCS(^J%Jv+jUaA9kPt#sEGfe2qw&PhgV1eDNeqBbZIQaDF&6GZ=T zpM~@ZTWp)fMvJkcNeXK0ralkZ3}VQ}uZIc|n?VM#0kJbdY%a&WRU%)ob&%Xw4RU5J zLskSyFllltnV9gEc#jR_OZ4CO%v^{(1o6qagror{7E^gxfnT&sNDZ}F0>HWxV zLR00Y6HNM!0$?De#&+uIB{*gMugNXUfxu61ygWsv)4icX2CKpIlKyQBp1kFF+6`1x zRwlya3Woo1^frAo`)j&mO_fCI2=?kB)=s;r``;i9E{|~5oj}cOF&}i{6#&Q-W`E}f zyAo;$o%75AvaNI}``m}ey6P>d1B4s$R^j}t<@2O%6WzAjq@knU+*xIMA_yJZr=(cV zQ2`%QwhI63Ba{W%05M==_vD*f#DgEM#hTp3`N3XWL`n9=@`9-FMz_RwZ-QD5lYhn< zj2b20Q9gO+6F034a{#0Xt*vSa!+fqT%vpJX{Xnq&*g+3Uv*~h6v7^DrG=&!(!;a&3 zTgo=7M{kj|84N!nq+(9Y1WSl=3_vb1#kbe<>G0dj;cPSh_$}K+tX!{2s)r9yK)N1} zdj0k4TWGCH(#P?p(FOry09@qI_rJ7I9bbX*e`4gp44|h{C@^X+zP6aBT_k6)3$O-b zN~5}ZeS8r=?oDoc$jJ!(i;AUmGM%H4&uzHMNawX@g@X+xEDZ$n<(gK|C3bT2pLV1m zX;lxsSMdEjWeNTpanZ^K@FsyFAAW@?+#nKeiJ0&dU0oB$`i^NA>Qw@ijYnRj3C?Cu z-!Ro$y~Z8w&5ENSOT^OsGgRvVuvoM*38N}d0+x`3f`Wbepb9>e;&S$#I7EsdsYggt z!3DPl?;AALCO(6dUlE_(ZMUpa2_rRG&7?2@zmVSB z`feWUWZzE02Km!VOp=4m@M9*TuHV5B(DQ(GLij{ zO~=|MCA?WIpuSBn#*(*liCt_rN_`RUVp^#s=$iTYA_5@C9>s~}4zbC|i{C8(^( zxnH&-(UzFc8*=X>6TeHxP<~e8Hdv zVUzV7lvey`3})Hz%gmV|D4$-uKL7F3U}lmrLXns5hNmH}nra(Asv#QvV9>_FXSR?3 zZgO=#pNzFhj5}=#sB>NSCL^E)=wXZ&lJ11*PPqNc=N<~SS{4N&S_B=#t7UJ}CCS%- zU@+7M1{0Hg0Tb9|n?W?~0{IO|)6&`Qb??fL9Lbcge02si+=*_0XV%H61{UJzJDAe{ z{z?v+!W0(4#HFZ+O5ylZBSgt+ZX}Lr^$vMb%qWVs?pZZ;ItU_FTQ+AUYV2y&PkvLh zg$AqyJ`jQ5LuW=A!Tm{Zx^N6^X743s$zGgs-es#RmF8k9im^d%K_B%^Ro93JmH_uF_1&oHb{sD=c2|am(O_ z5Xq5YaDVAX#!gW9!On`$JSsf%ONnvvo9iLT_vgJ+55$ugM~*`(^uJ)ml&m(13!SC2 z2)II0dWoD41^QY-!b<&6FCO7W-OXaDPEL=)%smaAW9f@LMmJ;tvJe}&>h(Xd7Pv4UQ?Dyp{zaU8xzm z6p2^7cXjWi3jGs`B+?RsXca%kDS{z}TH=Dq0lp-kU&VIfQ?$8ZwORTBh+rp5Eh8Ha zu5#dNb3;2Uj1`c+hSKhl0B=Szrnxadio#W(u&-l@mv>NlV6jxOKi2V|2xC|i@VkuC zAfxf(@s@Zkb#zq+Cm+;gC$&_Ih4xN)BZEtLx2fA|9!NXSfK1g&4o}%uHv{Dy)Rky| z(92E#18h7?%TC%__Z7aJ+=WjxUs`({C$XLszUhGuAkeZ;v`N(4`XJFfcU(8+yrnTi zT_td*0BvM2JaO@w2(iJM;}PXDJxF}0_;*!T(jA!QgWH-FLaS2r!l7(6p3V^n!teL} zdGmF=ez5U~SoPPxiK@M%XNPNTJ7xsJp?8$g;Lqh_(BaSa3!pU>q;XXo;QGRfsbs@f z5a2Qwb?4J=(eLPpoA$0$b0u0|8LWAY?d%F-)hm=k@(mE$OtO9%Ai7BO3AnVg z9k|6GNpf1qxA%-N0V91^&L*ZK9Yb^HTT>Y1;7h_FxeTy?0>IG-^k7*HZm4Jpyer7+ ztG%~GTms9cfQxXL_fPD$1a;14g*_%j@&)4uO?!*Q4n0+Xn`8EcDuuqvbkBTR_C%~Z zggM!v2G5JQM~oOSFc6&~Z8OEdenYlerGd+TwJEdWqNtG)XIS-ci@1!@nztuWZ*I#d zz#)-*ocm^mBh%c9{>uh4C4SCQSsBAyz)4}xr|TNVbCGtPN>euQuO zx$W}-mQlzl9|Qnl%qVw~3K&@cn>yeS-cW$Ak~@dB4(-I%s%J$YwtZPlxj(>Aj#@h6 z(Q7U7@c5IvAQ(j;76HWY(iJ*HCZsBGNH)CJ3z0rzbO-mGBN^*hCtRuQ8(fyyK+#;!+&q-qU8ECDR;cI zy1URwTMbKe#}%hSyWm1ogKmD5@MJ$*A;e2Do9Gyj4E^#k3!esPM7Nq5pT<6dg`FJY z2IohjYum!j=9N~M?B!TQc31u7ctM#d`@0sa&aiz!DK$--Fa;yHb5O}e)bpVQSpu09 z96l7-NOrJaed*oT}ZUDQD8VZDCR=|OI$MA<NnhMlxn z_aUN39d6;0v{;MpTZ2!t9<7mMKs@5qNlTv21?D8VX)YXvb}HpzlilNCCAAG z!^9d*kygI$KeXbU5;K~oUdo*WOSi}k0R#m`M#z760Y!->yC z(N4ZN*&cxlwSb$opMN>Y@h<~CQI4Or7M92aDJGn#V4|(0`y9{@(6xT*{lpdHj+X5W z<$kQH?>leCMXjcCh>^T94$=Q~CH&_=XY zn3O|wGGhes68;huSjBm(IG(#Nz3_sEj6)EZzg?_N)2l9h>83uaYF%W}Z6~GLT0zHO z$_7}8hnV}z3CVS;1FPzp?pkUXK+CB{n@pU`M!fC=Xsi(RZ8xiBVI?O8^NJOVHhEXj z;6fBYHanV5V+|Dm423)jr0@iuDq81l1qw+p{Ww}qg?uXb1nPEXD%5&85omC=7!nOs z!B%zb2|==u2k&@HFmOrjin9EO|4-WiyV9gC+*#?wXC&%=$4Upb2+vPFPxeIybsV`3 z=ZTxbx)|W`qqBM{sr_%EBk^ZYH(#`ilNZJ5*Qg=Z#xV|LzxRcxp0EMDSxPbVDF@46eQN>qx$H_>pz^vlZAo zWG5K#N#IQ9=I9V}bOi3QGo-1+M1#j_aH`i+v}~Chh)S~=QmK| zutn=*eEaS{%XdFP>z0bz zhvoZB7quVfOElyZQaP323y13wZ!-J|_p_Kb;C|tNJ@Ic*E5n+>wN`#ZG}nZ<+^Pel z3X#>JNc9X2e(>*9TDR&p&-Pu3iSyh}&hWi?d*UGi2LTTgtrCVa;*LV%Gt_+6t*iFn z%Fldz*fEE;6UBop@BIXIL9l9RbFPo|x^o3s;l5!3T%2~DU!mD8XP)z5WcYbS($Hc$ zs~H=;pa$)zu!h(JBIKjlxGOQ~|MrnFyn%MZO-oRUWNANf!seOn@Wmxl!aw*2+T23L zEj>FQZK5k~d$I}~=IAsk;t=Tx=D@8QQj$^2LXuA(K&YO_>P;q_vO)V$HJZvDB+cD; zdx9b_0I*nSgR&q7Xl{6}<=`W}3&_*=r03V;-xDfuC!oCY{!mbwYPUIR#!!MXmRfPi zVF?Z}*x;Q6Aff5p^uA-o3&Qvz|5@NW6CHtJyY{c=XcNWe?4-L0eYym$Yuh(TY#3cQ zEz8&5d8D>zPXmS7f}!6nK_S^p*ECKXIHSXi{AJXeX-noJZ*8rXLzso9xigLx=l%aI z0cjqO&b{)=N8WeNEL0RZW8wR5&JZNLzO9~94xKwf?!Pm|?uw8GRI6N})cOigY1L7g z4KqAt&ALkPN)L{gl1DG`6(HgWJ|-C_BaKPC@orByT1-wh!VZQkY{<-+`yd<}O>=Vj zb#IZC*a#38Fu%-Ae%I1q;R>XQ?jp!4NfeYppu$fTg~w#hVfZ;?x9SYo{*K5yBFFg* zy>##?f`;j`0IGYEJnvEMeiTlB!j%^LO~*%C;2WRe@f1MNx&^=}9{Nm|1_R-#T| zyXyHQk>nt(@*rG54et7|vyn+2hwtSWEN)cROhG*Y&dvCKIlkPm9cFjXIfBn$S*%P( zXGih)qqo`0bpu4B^x?1Uq4m8-C$Bh1wo+tD#Ddu$%8i4vG-Hjp3WQdc zwY8xU-eK_BoYhWjK5m4W$PfX&Ag&h4!z!ij-v%LG>EsB>GziQaHJ0u9c%vy$To;f1AGmVE30LXN0aHnebKcNlSIluW~ z0eduB0GA#Q5wJ2d%vOL};c!{5HqwUzz7KtE_VIyYIx^P3m5-S%#(o6?D;YK~(y2<> z{Ys~lTD6ayN6M)jhM6O(P@xgcDV(uJFJ{h@DgjGsHTu1}MfWbY<#eO7G;p@@oL&#b zx{CZ(6=lq!#(aLzg0k z`#W4Bn({nc)3BK2ZBZ&;qXHHbR#lKNy;*TcP9gEAl@x+;!I=)yZmjq zoCArR;|$cFuhyR?5YvV-3greX!4%PiT};N1QTu&I@q;TbOC7*%frev02SM1jPoIo> zL!p^Gh75jBS3+c_L!>M4gN!IKxYag{f>BW+PgoPD)uc<>l^wAGHi8JoX5UZ=gr zQ3oI15)>Yn=M(6fLx>lpGGrUjRdYE>uC8FFz6AAkt3u6+O!lzSy4_Tq=85OCvC4pa z{E*V`p7^*W#O2V>N~jyA_NjQd3Pv?)Vb@t>!$Xyj#11uRc=}u0DmHi1?J3=DHD`)2 z{xw})4Gywk5u!P2JibQ^YVI&wWAI`0`?cJ8&Z|$~h%7l3% zbPOtur<<%WZ;#Y1YJt^9RSVv;BqShYPLbCh{(G%T=Oeh%AJ^&=iwrun(?_kfv~ZPA zps9nYUYVdngD-VMlnM?Kv=dRgEDAb%dcFRJhl3&x1qeq&+yye}yrg{BNT!bgUR829 z18w5E_|&>JwKDu2wR7fZGo+xFS(8-2f_=jCf!Mv?pdO$v%>V;mX&-ci#R%kx392_I zaP?W_lMVWT1)#d8_YrG9un$2SP5^d@CE||+-#~j}z8aLhn;2xXc$qI3&36Z~8I<55 za}j`8h`5~q9`(HM+xJ}Z!c4CUwQIjwXy?zD0LFQCXow}@7VBxDP%0aRD>pPb_F%E5 zmEFo54l$7NeLfD6)E`Cht|L7U&_k8NF|SxTqQqI%LJDT`38f{UvyIqjyj-oj*w5r@ z|6E>hXJev+F(-m*c*|ld9JxVXrJnZDk`SQ<*k$2cmsAg*PrnmEoi0?w`Py;6Hm!#< z(XH|%g^+-g-J*r!n1SyYI6?IwwTmdfp}^y9&4JC#^7-*N?jEhMeDGtwPS&J zy_DNsDv;uVIQ{EK9!Ih`edhvmEM$FmaOQFK=pFc1=zNBh4o?qQtWwH(jNNEXwEgp5 zvftX_9BpGN1y}6AU$^?Kl_8J{T zF8vlFlDAO9qU8mmdP9I4i7;D)N%1|Jvr)M@X}2_`jwXPD5lT>K&_g&6;6j>|JHa0T z7=^}Y&a?8ni;M66cloaSFLd|)-{+mObaQDvklBYBDz{M0$JJq&D2?C_%JNIM8ynHl?kEEuvzrQvCsQMX)$Xln5JJHm}veSzRO85D~vG?>Q{efzZjrPhnoNttf*% zeqRyt{-oNxv?iwQHsY0_i|iwA*6om5zDi;`#alOLLsfa7?lH%sM7um*WM_>hl2uwjUfKD=;$1`n-cJ|4?1qOXS8;-B8FXzh@g)|hHL+o)HXCz=9@Oxtqs1}ZVw^P&;??m1EoNEa~X z#nVWTFW8y3`2#^(>3@VW2UX>AUX&L@gH*x8AGHuL}w@$K|k$bpNzqZTH?gVLkaMRP@q-* z(w(h;CUHd=G|=osm`03HH)F6*0$j}0NWVwp$}N~iCiVl0Hl}~Cr9I(GZ*B(_2UWW{ zh6;v&Wo63}M?OXjo(mt6>j5C3oIcSf9BBpql$>|~G=-nFD_6hwwugu6q=5`m-j3JT zWpA@axZcOgv*Mi37_>b5;~!f#nl@q`2q163Hm5>jX*x9+LD|$sw=R2NPcd0H86x4wONPrj za2T=rb00xwPL_-G-0SuX{jUdpNG7G^+NYV0cwKal5tg58ZRZZqqK#l|Ts4h{DJ?U| z6|}&i2R=m((r-e0@tR4)BX=5>;AMqb!vI}Uk)i6uO$+~uqq&3)+SFowEM-|Zalyq( zXYJUoXoC;QDX{0J$%S%l9tP7^n-909@-Uk(TYHLxdO9ZXGU{^u_0Cs8UX)!M$$qlcQo&F3zFIjxY5$h1= z5*8Fl0*)oE$9J{v3(p;=8L$c^ey#3>=udpF!~=#Rh-@vXV*OH&nlvJQLW?!er_3#d z&kR39BC?$Mb)(J}WqMMB*WCJh4C&j)l^pmi30$V&l|YmnI$z#9=slr{@0QSgwrFBb zd-!fG0O~y21C}_e?mugsAp(p;2Us0UrK+J$L9;&(|^|o2rPt8mS zu{`;L;dEuw=0<|^#fu7UL95N=68|$^1W~5XQ!+Vso!@VsMMVTiqM-lZ`jf-!zWz!i z?!TyRFwg$*&9g6Y)Kz6Wq1E{k84t-PIll1NNdEjV{}EKx5OR#phQocm zAgM*PuUv&nCoG@xwr7W6^nYF;GbE^V=ZByBlm2A2Ji@B#oH9WVTB>wKSS>O?KLC>5 z0l@RO@`uG+q=?YCX7ypE*|#)=Ng5cPnpSldw+|DV{Ye)Nq69fEBNa(<7553-2)a(E z@4hP`n8=_L8G{I4VU|j;c|i7{Vc{Wfrcw#}14JgrvzUw;?Z8@PJg6Ouy=<32ih6n^ zA2g~oNDSM;g0KmQHdMv0RR>0LTd!P~Rg>z94v~ud@+#?!BHzdua!*mFnYx5{h90fX z!xNT?VQ?fQMH30p<_1C`y+mi{2_A2jjG3G^Pk5|p;1`+1hiv%yh?&IC2<5gX5I+o; zv*DyfMXHooK4PTtu(~-tvBp~p`yNb0j`o~X1rtBy#B!uIF*Upq>l`)zsMU@mg8E>&pxAWP`u2K09e#T`oNdM*zhxQo>RVG>^R1Igl#azHmt}t< z)~aZ8LJ%6kmTC2t%N`JO`LARPkZUwBB$9~eHnMh@{kMOSz9VV2&WgeuOW$aq{QH6d zl$xNaonVs@epsW+Z*iz1J6fp1Y?j|Sn}yn(Zs#cFOHHO;$qHppBka53>Ia({)i%XG z8_dbA#6-2HXJECbNpcco-+kmGJl%)!nm+`v>>cZCj!6zc(oF>PQRC0$jsl}}>wF2d zEJtLYql^WDKw!r8AxsKcgw&)x?Hsb-N+Ni(Pn>FCQ$v~p2XT5vqA|)#@PqY0x-lfL z;wgByl3Yho}pbwT~7K%HtO#tTzNnA`lC;wZoN>t#$!$=~ z!9Vdl_EA6ExdEBWdV@E;P^M^ac7-HOE(4s&QJkWz6g8wvgvSHzBoMy(>@*d~wb8(^ z%Ub809SFQ1wESWYSN_UWzY?#)4V@9HNix&nH{z(h$m{29skD%_6_kfpr57f53L%s6 zbdEqeqo!JX1hvamfmk{$8^@z%KwLN*WUhyAtE@G0nz`l(HJ=PgVNK*;_olEcSC+kG z8Nn=Vc6}kjx4FetTB&d23m$dOSDD;;hHSIypwCc9LEl~$F_mfo#9g;g(5vP{S9s+G z)=8fqi_S%Sjc}>>!!=AIdH)e{21U`>;CKj2Vo?v?=N5)ENx!t~6+f15YGCw%@d;OT zA?*P0FEY=Rkf?uC(Hs@jnV==~5}Dc7jV-}YmO^rL)7HD z3xd8v5ff0;IoQXnqv=xMLv5^F~4k~Vy z=gT=N34eq#mmjzpF`U651VwqYCAUuCUD<*ODy)>YCLmwbKkSEme|jyTuO#Sjo(cE~ zC?DElTDSuMA8i(rnLSzkx`BQI7XoPh;NL8Vc){=rq^N}jCzv>Cub#Yr2(|fzzmuV1a-(~d(&Yx7--R46MEDuH@X9Cn7b|`M z%!$=g>dC=<6f4tW)z+X?N*$DN1~~1!N;d0WE2pR$q1Id@5s`AH>ZGd>kG$n(N-S}m zFBiuOIa%q(fqEx_L9BHhPyP`SXyOf3E(#cno=`~_jt$%L9&OQ6soazca(i*)rC`)oXrEfihC`Tg=XEX<;Ja-PKzR&&Na3X^nc45h^ zg61qu(rZqcA+Wbiho-X zz$~b(`H5h~Bt*F_kbACX%!8uucTEd++Xg+RR5u9bfxc9T_q}ejC0hVao_A%p>F!+d zwpdhKQW*^HT0xTFIlvl9qRg(U&-YO)?h7LYU(jVxefS1R?Ag$q2$jCU|*t)k7kn0uomHMKaFDgR>vtN3+ z4%ndJ1py*zK@S2%0_v%?1}K*E-$wAJD5!e@`CWudqN`-(wQLPBrF&4i`toKz9!O8G z2q(@%5&$u!t*yk0;kodn&Sp?8d&u!us_RZ;K63Acx{I(S`mx3Mhn3_!Tv=pT1+FW* z1pKLk14s`)hq7M0g!ARn@u$M$9KSWMoS93G$@~*g_p28#n6a&jvy&m;=~`Y|U9?Ek z8MyD|G)o`Ffd=}UFKx>G#S0vh%+MPxp-gJ`P6G(%MjA9oH87&L-vF0t&j~W~rmc^` zo{`q{A3s{`Q1d9O&84$f+($o`=fDV~k4m!|66Q#chms6A@;MyQ*`7lv1tOt2zb#jv zkl~+}qCe6Zi}*;i`GcM3`jJ zWpB1(s@OG03XqD*7kdh<`!4~-(qtv6vR@1njxjuVo3j}?$~HT4&&M99zT)>e~{4>^fc(hHu_ zUs)sW1!R?iOu(J=|(p`_`^2H#9^ut?C? zLhDlc4d>H>TCicIq9j_+euEzQ7#DM+>H zs5+~ip_q8}!Q|f!x83$!ol?44`U-GdVVviw|EX_{M3(2!y2sBvk{?Q1>6EP(N1&8x zX5-y`@K1c;cOen0^DG#J-~&5Td}yfs{Edv#$0GKO!j~Qg5xgBiM zQ0;XOTA#w|3MVo{$Xcm(i3EwU`fvD-qhU8z92rRtvr6*&40QYjB&)XbsK0>07srN1 zZFH3eDk+xi{HIN2FAmsW1-y#!;3LpFj6OU~Pfc$INdF7fIK^upuj_3&`LT|F5r zA1t_UgNaj|X?=9!b^%i7Q|ou@Ev3^L*@y?M7DN-4j=Y@k{WW*PLab<|wF7%9KADok zpmUV5Nxprp(phhS?Jdw107NwD!5ErV??ms*k$#ZNL3aDf5r(3()S{_%59i{pSF(o{ z8EW7snJiTLQoZZe&FO4y(c!WmDzTS;)~S6~KbK*9E6DhAj!nOF3K9-xXH_lMi@xDz zuHcUFGJ>|jv{=Heg8-FZzN=Qi6e3$_@M$%sMUD=6H57J2 z09Hd5t|)h*eHb@pNV;r%s%}xw(ORpcm2y~vjKD6Myjg;12kH-aE5?nJfSm>^(F^m! zt4BTFN}Wg3#ADH}+x3*5U0Cg~T&B8#x`S{b&Te(OWxth5xmTQX1L48gv-hW z_J!tSOq?DhXP^v;0}=Xu(wLE=jWNV+k#q|Npg}`LLl6>vdcNegdV%_q3D9B$-DN;zevAple6}f6N%trbU_BcvO}}jpv4j&uK6h*j0RB*_LwITBM3m=)^<1Dn ze%OarWkSX~SoRi*k0lTlW3zUcqa4DUL+BKLP+Mh-{ zs6x?`4O0CoXMW^*m`tm#(?iP=U?`#+6difdf{uEuMDP3oaSF@wCBXTByW;!Yu0W@P zAJYiKJ9fBwqDOteaLYbw%)d>H%Y6e&e>IXgSYA#(NWWVYI$e*^Jb<}E5hsn0m>r1c zvp+(@ELxDeKQ1fLc|_0QT8u|)Y-s2AP)4;lEn_{vjtYo{CTh1Wh3nHf=YKjk*w=uy zv}p@;uv}UcE({LgE`HZ3p#B>4aOBwwmu$^SXW>9I85!0^CZlw6bdS*1;%*avw@;&` zeXMjY3aceG`n@(2g4Qny=4(odx!@t(!KI}?A`56ZdeFv~!k*a>MKZ4B81*vf`@}kS z0{;4sUjJ7Faw3!x97w)Tv3SEC!OJDi;MBoCJW#hnd3?CG^yE3iIXK4n4N$ueoDM}; zEUn`Ye+grO)bIn>_USlc`1jq*ua%x+au$i?a5xb@>|p|!*Ha01Ochb^@jJ?c$j71O zurmGEKIdA+fhih7v1bkqeB$~R$HVDjP4$J?H+tgZE{>tec#V=-8g_%ku7){@ga!{Z z-FKM0;oxeh>5gD2HFs;L3=zM!=5ARO5TqjY0b)9(C}>o9Tx)=Epu}i+g9AFQY5@d; zJJN~)sviV1o`RbYab8-Cx(c2$bkZ7yJMGbT~YATC9a zpXLw2tP#%e4a^owEnkBxHc%?aBe;;D>tCDs42(%`hAQ%Tibw#CFhVd6Gfs_sJg?hm z;9;W?G!DW40WWnuaR8-pNlF}NY3CNEF~74_>J~Pw$#Snq;<3|S#eVjVkr2<_Io)rZ zkBktlzOLWEwJAv7jaU1yg9))`@QwnFEXJZ9b{Bj1VP|@BVDtI9wLszHQGom zR2{vC=R@|c8Ij39X|csE`25mLdICcYaR-chJzYqb5B!O4=WJV}jcm}iM*lLp1$d5Y zpnc7(KZS(LzfNzpV!$nuTr20>6r8)8^N~$7c<--n)WX7h=ptr@v zje3n3^2c+Au*jLcMzv{vm=R~Z02)FNB>6@zCARJWdr}}UIBN4mEcxuz`aR~2Nd{OJ zq*d(Ee!)mm*Kq=ZOxyJWwZ*eB=Ezqo9tm7C`>*+ahpNZnpz~-ckh7|h3<^g&R6{nVfH8H?E@6{;mn6g)+& zZsTxC(wcuo(WOswlGr-3O;w|l1bzrItsP474LY<9?BI>eTriR<-5lv`O@A|~0~TDpQu zIWz;w#}bqN2}BsCCI|D|S#?G>kes|{ZZZ{~3=L9u`o2?%qx!isbLcf_LIWhPGd)M0 z^c20H&VRf#y*Xvg+gB`RMr{bIL1ibr`>AZ9=oGjCU>9ghdi5PV7T~(0w(x3rq*+Ol zKhbl0HvV-pL`)&O$KN2Y`DXWt-0pnXk7+15@AJCf^> zd2&c~9MbH#1Z`ndqvQZDlc`+|e=Ym$B0EC^TIOvfx0*T%22-{lh?1|t?zbH}Tpbhf z9+nXBrBa9V2%?^loL(aluYENLD9Hg$iAUbMf)g_xH2@X0ZvhfkZxAVkTq*I+G%c>; zBncroQC*C%lP8TR!wH_x2Di4f3GVNF*553FB=${maVzx0J<{Ap-9|bwxuVp-0%?VE zg26twWQ-hfUf(D9r{#svvRl8$+H2{udE&(_h1cnTPAzzJ6!SsSXF;#w$@_GHZdrh( z|BsYhED4dg=#2;K28P!}O=uDxuqeta6$#9g=RP%Sb#}C!b44F|ZY1`hIa65NxiJSy zXQ5oLK~leBl%@8+!9i=RD&n^#kc^YkTJ&@j0mNI?N=@((+N;y_*^+Ks>DRXydrJ@S z+eD?u#)iZ?9vgLe0d5_bbUszTdXtrS1bM$M-%P}o&e zRVh*7goKwVovHct6IYjhIb7ckhckdaX^x@ryK*?+ht5o}ErX8@ZYYG38HRtY1p~>N z3FL9^+}f5q4##!B?D(k4lv+##Sm+8fjq}qhV7FOoKI{GNn-NkA<;|jbes0E7@f5LO zFTuIZK;8V~tFN!S6y z@h_gOuF=UTr*v_;g3Y6me%WX7IXYDM(+0#HD${o-Uu5;zd0SRE+@U&hcN;=+`T_+-HdDx z7^I>(58>X=FqMiUzyA`8ab%-_;N$O%xPk%Ci1YFRYYIp+PbzKN1mrP?t6Rhewi48c zAu-F76NbwlNWn8^^Ud~qHsZ!a;Lss5f=-+RH0&CnJQf`f1|Zuf6YKKb+v{<0y|+d* z)-BC=R^LDHq#~`6PAak-CvpV3VTjqQM8?=u#;r%AFNT(8dj!TZkbozoD2-}l>!84H zyt1Ky>0jd^|EY1TBeR3aO{sQ!)EDh4sHWin<)uKtNP_8FwhXNPxd^EJaOma)_YxHb zE!V_?K?6uM(^+FXvql&D?#KD^79s>)BOlj-BHwz5!q3SMMvo6a!SCKKR(lE}UbWDl zQPb@C=-B#Qd-5ld0G%^uUws{4R@o6%<}V53V)_K%*qg(n(Et&l)S&oF)Pce8xgLWN7&Rst^jgRBQ}FaIu><*P<{HL1Vo*f zj3SqS@ZHcT0}|ZX&`kq0-YlW_0a{-&7q)OqUz~8w8 z4V@r`YiN>%oeScd-EIbi_4gM)smu480#D0aQJ&UefI|Hf~blE zPDXe*Vxe_dU-|ZD5(4Gdy7%$4J(d-jw3oz+Mkj1lDiGcZN{k>da5J2&TE9D#T$y4h zXQk09XTvLaEh-uy`mxy9_D{(Rgm2s58>(mvbXjVJ7~Su1+^7aDxX zgKEtLNYx5F4+7`U6)*A z8AvLE^Ew@U4G;TN6nC%=FEYAI*1fm>5^<_C>2L>XT&Ra$h|nu7$+x zK;xuvrW#xY@v(76?~_u}bqiBGNgAFsmVdAKTKE{b=Wa85jP-{z3UX^aqjW-rYorSi zURpYZzGEY`r(`g(`al*&7^G%^r+dLjJ`m+7D8?-$awL5eEbtup;rt!!@yp_uH{U!v z!%6kcGi}v;5T9B>{lz2@@&OZz>38%~Hy(*#!v-hLJoy%kn6n)%se5(V>ZnQ;lKBus zp^?V2PkguHJ`6Q#ouOK1Jd*r*ELj+a?fF=lTi)sv-BlL%d4F6@N9^o(U3m-qC?=IW! zf+mmGOuD}NU4|y#r;hdnt6>dvM}UNpx?Ru;65;*+a6AE7ANz~50X6=c5|uK2Ks$r+ z6=a1J?-8yw@t#}J5o(QYN$;3mt{^}J-hOMozSf4WHTE)9{25_oTG9?vJ(HX{$SD83 z6-A#2c=8zanbrJ&G7ue0)K|3vtC`~g41yU&h>}}eMrx?MB+7=Pz$gbsjisC@095{#6AfpdL%{gx#Jc z4@5S!a!K6EM(Fj!{Kv}>SKQC8CFciN9{qO6%wx&U*6_VSR>EUJJpyqJsw)`T_@HAm zW6*n^={;Mwykl_wSlu3U*Hzt~1wAYT4}f^!W1&#uz$i|Yrg3xl{URmfK_f>S^#)IO zb~T*gm7(Anw1W9;j1#e%=E0lk@ev```|6c&ZZV~bJh<1o+Z+o0`*ZF%01f>DSYd%l z5;?Y#{b1n_{IVLp1Ky49OUZmkN81A$gTih-9K?or(v0NM9>t>wrP3T$3UoTcD@~*y zRd)sfz=RomQydD!#%gppDo7MuPm1!E{hJ*&rk;+=0|s>081$=vGehP@=1o#;3Hs+T zU0=0+r}s(ha}5FR-qoXu6g1WO`H|3}ot>V$<-31~m=?jF_o>i?D)kep*82?0yR4A=;U@d}b_%P8TGN7C-v^qe6t z5_@PeQSn>l$sR)w7m$%t=P_4q1!paf39!!>bNG1bgE_N%Ujl7LB7yGJ`(B?K#}ERt zk7xo6>Du<8b^i0;FFN1-Q2yhWpF95zIgN|A7vKNA^ZjcF`+v(xj66h-{5~ZEB0d-Q z;Rh$}PA32m%6^qo678p8wj#PMmUQ)L*SjWkW=OBasP@rJp}l}Ab9a<(LkpwF&!pg? z33LQdi0A;L0la>PTaaxLnRN|^eZ%SbVYH*>pI9AX{Xubdp%| z0IyEYl?MHPZy;n)q{YM1cxpuwIjqNmhGP!<>-4A`3; zxM=_wAMQ_R)Z6IOPiTnF{M-CMW*y|5&QLI^g4T&9Ay8@=64H2J@n9of6gd)Jh~=WU znsn6s1*_=JUQZpV&;-}zqh{cF30QrIzf-YPp8SwROALjkXE)zCr*wgyUA_k8CfqW5#83`Nz56qN)P$& zTWtEsiO9Iu7qE7_1%+8) zDL}$`td6>xo&_QaZLXmt5?zwUfcNm};MqZ^U(^9i`WZ_!-mngZ9i*pP48w+-!F{ur zO2G$5t+!oykLDcUZIQR7zJ}Yexp5%DD}p^p4^wUCt|0ushrfrM&D(bliA_P+3VIWg zo3w4@AtWu7FM9xsmdoBJu<35m`($j!t>An`@)0{cB_ur zX$%b_bv;}n1qr{1}kW_W)l+q@4Gyx+ye&k43} zUc9Z+4qUS-B7l08}&@t;((G()HNxOQfwGK1tv5nK+nPR5A)y zo*wGya#9xf^f)BJiT&V1zhC8&O`+v#ike$D%#ALMps2A=Svrspiz`7AohJtrF|A~t z(lgYQozjurn$LAj^BfLr_q~P0LF~rV4zok? z<<#e?qG6L`$_^=o7&4P><%kreP|2kTHIQOa6nr4ik@uLFz=cU&wi5atBFYK1I2&|d{LWXxJ(GUjr2H4qj3U>DSO-35{fL-EQ87ktt!{w+C zUI#MKm#7D&qAyB6iGe`g7aNH3zQgIS8+08UNjWHs>e%ER%s_*9m=1&Bz~L&m25Lj~ zFNv)%X3bh3#Rejbp-%c&5Re5(KB9mOr9!pHMvB*Dd_5&zRCY2Ck4GLtkQgNd+N~W* zvle==Si+jxvx+MSdNdw7X)A-O_E5VrEJvFe>N==9058lZu!)2<3bCIY?;*(r@7&i( z*4$F*uvZb^0-L1O;NQoW{lx-ggoPI0adO%JkXt11XphM|6)-6JMRUH#iT0nndl-l+ zE|p}HvcMD60D*?@3WEcoG>{6X=O|MCWg)WqVpLg4U<6*B@D!3|QYgCNODpOD9$Yf+fETQ^t(ORVfDmJ$QsG)S*5RtnKJN+3 ziM0$)O-dKo`eE7Tk9Dx_ZASvOhlkc1?uqrV;E_6K0mvyos#BAUw_jrUouhFv-I-1Y z>jtTNXkLkg_+Us*IW{cp6_HrPRS@hy*1}*ERdVZ!Fjieg*VkV~q1g^Yau=gh2_WC) zTXaFH@;~7qOWC1h5agf025^KSsX$C3Mk}u2OVewq7*57_qNDl2UKu$Vl9}!r8>7r7 z()CDI-@iS6&y7(#W%wvdVyd6EM&A+aP7Vq1++iLi&3Okqgk=-4fG0hDt z>kVx2E$AUEva|Sf#;1x%87i6gqH8tY@OqFLgaFk|q|j(+2kxXv1xa`onXe3>QnW*7 z=ZvM9v|+--4AM%F$w6lm%^}04!FNH14prUYV2wvFwO}t$X>?<$a8X2T_I&;Ia-j1|s3#=!vTXc0kM<@Qs~gE7z(VxiQ~=WdY^N`rPq-ESY7$VnzqV%Msk zQ!wmcX9YTHQ)wTH41s$_OnH2U1bC6DCeTDX=KBtW76^2sYfDJ7h@7HKxuzf(-#pWL z&F<=ZauUV6Uj+w>niM@YVjolj_|+AhT~?UfP&loe29M#7C}AV z9123jMOwdmxJLTED>bQRt!>y#qGK}|@uBsE*jdG?h#6K%dC+&*rC2~|;x7~Q8_+z= z@T1gC9-&{8bFP@uI)QVCY9#lwOu6O_oN@*cY>^9M|LS_wV#6h=)x_ULlFPy~IsUI$+h z8yDKAu-6)(C>Gqt>$nI%WfS4ym5#kMn#7K%-}|{dXMr%*!)z{O8N6;*cLTV3`4u|R zUk-ZDdh2K3UeBk)Z!d?l&G_TD{W&^Zerxi?-$EN>vKb7$e>-#g=j+AdMR9a|jQ@O{ z__-DfvoWj8bvWX7$fH8Ay9N+TDn{Iv4fDcAC#-@2P=qG{+cmX5&ABNLqToZ5XxVx- zXhILB>2t6hGukHV(}k$dKjdo`B-$$KV}5~kMYsqRi*insf!^J=#wX4}3DUS+N>$Yf zU?g)Sdu>!6X6+sxoF2Y7Jo!4)n8mJMTc!LA70I!pU(+V=^Mg-}xoafcTBQ?llP=NN zO5}u^Ly4Lg+)vd8M7^`svvnq{8=_e|PFIv0=RCj2M+PW$To$LMgpK~Q2-LA{Q}pvy zj~q$-y!6N>z)3sVW0gp!Xc893Q8uazaH}{TjHyg4q!KCgefMLD{}Dfd1)(cceXDoX zamc;!0Ua9}Itp0pIH|!xgiJ9y1(^gGavrV4*q7*$%C6YYG{}%<)q;GQ{kXRW2sxoR zBXL&mgvQ3(D7DB98qm)M&n0LLU|TGQ=D_s7?*P*;9GKp%52hz)dTxURDuTTP>kf7( zRe!7ELy|j%fh(<4tDn1~L}{|}y(b4bZB^oj0+3hohp7XS!O=${<}KwZavf<+6fbu# z`_FY3Wo;Y@F?q}KgY8he5M+UtYx@}FQe_xvnWJ}m+vo@)m7ox#rzlf-;BKU~qeln+ z{=)Y06zlk1@zpG$&d@l_CKHVXb2P?N;m#JrI7XOgFQVYLelMM+oK4ltk}Q=b;jJAx ztJ=+d{y}#+fr2yJpiNr$=cGPDcNuo#psbzyU|%k#v~@-O6@(5pe8&=@%jwl%A%RU< zU7T7gdqS8B0ZqfS)Z&4^E2Y^J^iak!b8=|7)NC-ukusEXR?F_>qoiJH_OtwX;Siqx z`~QJ@tIaM1XGfS;s53g*N>mO* z%8snE3;1w#g)P~I5Ms+S7FC&z;)5;FDSFylI5wpTw z+~J|Kpu|7j07tP0M(Uv-ZSl~fpF0oThVZeYexiB31;Y2sP5%SfiZ?B7VN(6bStyH+ zYrm}Z1Z7t@y)mjJSg<2{hnaSQx##g6Dme#0>Q@avb-X1<8q8UM7!Us00fMH&yyX88 z)a5LP`-G)AqTMS(7N#!GXPl$3FrWyUk9*{Hcq|r~HC0`1@r#=t-tciG_rk>wUpuq> zw~WLTX6wh$ycb>z2Kj_EN`HWY7)?w zUh4`nU4dxuXuu1v_Ns(<3DlL{s^+67ZOON$k6%IMeTQF9RI(3AZ)sc{lscDeBNzT-P~OhoBD|MA@1Hz|)iA+J~dh z(MY>6b*Bo}f0pQCY9-HeDp<8bAgckVQIHRN z)Ob{&Z^tI~w0;vp)vO$2y#iB-+$u9%fQl}Pp5>*)K*S!LwZ(|xF(mb(0BslD@_<`3jDr28nY9#5OiP5Ix7gQ(F-g%ZJb(Y~%lt zZgBl1gqIukbBWxw9kex)$~MJGi-nxnz3ZOHHkw}Dm zpVes15$&k06-?ER!beE$-`4D)tIEsZ2;$UK!9+cw${A`i=okUexTKG?0`sqj&QN?a zUtkvKW64|Aawu`$iwLlaaGg;xZfIJ(S$v0O_(hE zClu!~Q%k!FEUX7zso(Tj<`ZTHnPh_W#Sni1o8%MJsI$V-CsLqC9DMYd7otRN;kJ zw=@Q&1OyY;bdbS43_>3)77|Zb5ltNh)4DTsN>Ad3(BkAYXTCy*pqijIyB~MKY-gV3 zsN~bZ^h|&MLY?fW4aw+#2VBK>nV6s-fpYKuma2L>&rtpI{D^|2x3RP)Zf+LT`LTZjWc;;j;6els&T#=wS)8IAMzV|gV z(uloEKOvc5re-DE5u`7==&~(2jsdnj(0+2;9gj-hQne!PDvB`vSS>F0nxS5~rD*Ze z?#da7g!x7FU6>>2{(#+!;R(}>RM&89foMV-s7!^l!Yr8wuifdJq&rJB18T2u8S2C} zOR-vin#k?l_=}yrTzg)dCTYs+;HlMmqK3p>X?vzb`)$K|B2b6MQ8ha^%rW$&^h4$( zT%ft+nq7>Bm?^Jcj)t68UGSpzs2oTWj%sAt-W>3Ds;AxAE-6qc)WgMnv(2FMOX4-6 zFDnw-{@eh;?-Xj1=$Gdm+&|}LD9mVYu{2);1r+R zHwb)?#riI>lgv-AZ z-Pwok?zGGC{eh|ZctI*OjmlKdC^BJk}ez+NG=qTu!@WM{|^*~$z^zis>?*e(P3wu zqtP2HY3TNN1HsYPTzHR#%fuXWAMo<$kls~JXIJyVH9RD!X+ts+7T^GVz2R#y;RA7B zu-Jo~Wrrdh(-kgzQhJb>L=(&L+ zpu@=-gm|+zU38&gYguH9(Ly+fM+D+M{U6%z$?2$kT&4qyk7sOdW0nT_9avf=0FPOT zD%QtC#vZ&-Ob*tk*Y*7l1!6XB!^D;SyKx5R3ohlA`!ORDyfpbCTsbnKRf~HCh++O= z13h&i9N4g0x=6Ffp@>IOev$k9i8Dn8i8Tuun!9P-P@W^ zl|P-gTsfMUoMhGdc^|=!w0mKQI{F_{j$7_iTi_&}roU-WlS6`2Q#JbI!v3?*)c~Z{v$A!yoZnKzO8`QsPGQa^p)KMt?%-javt?*$ zZDuCj<6$SwzBSKDj5FC5k9kBNNUL;k!(bIRw`LE~$NjygvEuxf{&Xqq}5sMJ!2CU56@%kF-A5;8KNLQgt=MA@RYH?dmItyAAUZsk@z3~3I zFI81Hxo@=FMnku9Cw?T>XT@|bBHDkf6D2A#WR#T-^ zbI4xPvSio{-61RPMl7jAk$d!0Jeky9QGia@0|kIt0uP(xB5(jgkkIoJiMkx~pOf;$ z>WY%kuCh(RC6|>(6HL9CE?cRK>56FL+QNiZ%0LxPhA7(G+2W|_xTB)*!O0pR_pXo% zpGCe?)y1Q0AKRds(#qDSJUrb&VefSGP`Bz|xQpoIajLhE#S~Tvgc0WkG~<*VUJW2k zQ;pgDzYnZEo~PV7z8s=`su~rysP^`lv(>l$S`!*9%%&=WNfGxNdg&`t^IE@>JISnC zf3=uNBe@=G!l16czM)K8>uM@$T{k0bNKRe#KDyIM0|c z^uDLs03lU0+i`k|c$nvt6d*u>;v!wQY0sVY-va<%ZF-F;jm-O@S7e^8~1#7RN< zcKlCD+mJee>>3hTh>U(iw!OarPXk5ny({Q!Pm$CFM{ULaTH{gq+i*E=T^>TP7OHNQ zV#!K+G7x(Pf65eccsYI5ud32>?l=teFqjOL{-8%C$oGNImIq$_GYJek0^Oe6kk({q zFee3KCL?5jzDIKC4y9s=wrM!ELXPEq1xmsxeH?L~ys}G2+=yB+9`cCt z3PO>ddV_a1m_DgxY>0olCB^oDrL@wjm6fyr4oLzn`)H*QpNTuHNTm{mC__uhRG7d< z9g7XhjgVtoh^mmH7?ML1LQRwvL;P74L7A}SJ?hU;ipF0cwZwh}5~}KTfrDHj*F;!^ zfT;8e33jb^I8r$s^jY)MQd(oO<2c2n^i+2kzU^EaI6AYDF$ZkCc+b3%F*f@WMy4+U zl9tXobB!i-SfZc|g{b~=ykNl-ifYhRc;K{ao@veywQiXTjV1oO4F z$(Q6nt)WOmrQqZfPdOBz1&q*x#MU$+^1d0bK$o+{P4Yx;0o~U;#>7#!CWEmLqv_~H zJz&*Qafof^3J4z=&)ZtzllCNHea~R{$m2U5e1dczToyylnlCW`blYMw8L65_1^W*V z`qy*hfmz4O>N#y0(*b|S(pc`h0y~D`Vofo^cG&0MQq|zYg_xk1XP{Y@)Hlq%n&i`m zfL-E(8fY!yeq_5@#E9B!)s)LD2SN5ejsfJjw1=IJDfsR^@brB3-QBPWt3~F?(5jeK zy4T%>-&e1;Lfp|}l>PnSRc9wW18e0oWx3$-2nP{WZAR0}bXX0VpyLSEKZeUaqjXnd z2Xmt~Y$))*0RLYCbb|2s06n9m!i<*)-hUvBFzrI#p(eVlojG4_!LBW|9U%!BxZLhC z`G!b+84qa7CGzb_%?RbeezqAjo6(R%>%=R6{qH$I=fmdyl zO;cr-Tc-aec({Laj^2JcpzY%iLD;R$LPNXnnax^QEQZ1*!o-6%%qG@6LO3l=z}Z)E zgkN5vc4It4&xp|yWkFJN0gxG*!N|-k=BUV+Zx#^lBfum_(BN-2i}wzWJ|r>*6`;K6;z0Ybcd}><^V0c+(QC zt$0669!c7_^%tL1?aM)mctloIu>3u?I{A2%z_2!A2q!ydSg3b!)-^awu z=c?G|2X@Cm*=pG$RT8)IGo=D?1p4%lWRID~wjNx#_P;mt@qk3%QHwDy**X&I8sD%c zlAmvJv6yU-&{;{7i^GG10x&-y{=obk=0UuuWo zx3mK%;2e<=hqkfJH&;Z`<91%&0uWd(A!~Id1&v3r94=}e;de+iU8Lt%b8ZX0rKjAd z^=@rg%U{SXeG6-=Vmh$}D~<#Vh5Zrb_3mJ|vXz9DuvD8qn8Ho-2@PV|G0Z_54?PD# znOd&nQTM-R>(%lINx%~n$S&rCE|xxm1ZhImxxu5Ltgmy9k}QgXS4Q@;_O|pLG3{#( zPiwZXNf2(OodSkNKTjk{QT&}8E_XefaqLWuinya1;;0qf7F%w@Ur4G^Or2rUqZ2F6 zI3a|~feJkTqx3D}kisL(8xw)1-R7xsw!An8hZ}4aT^jsFLV>_9eW)8KMc@PqHbVM` z%Rq3_7B0i;Pv?MA**8mzxPw9XeEa^*NQW6tg#VH0B&Q}PI3X6bPeS0XJsT#RFa zBS9U|;wV5rohi)B)xLO{vY^Ft%f~M(fpT2S5}yBG=^Tq*BqPWOuFVsV7;2T;y9lX`jHb-qVHtC6K-?TwvdDVnLof63YZ;*;|of>a<(Jo%pnA z;Mm+k|Ayi9oxA%YcJ0-0=modT7@Wc~4^gE)L0boGK*-{CFKr>Z zpTRmE>>JX%uq8(0t2@kG?{X;UlVK^Ww_vDsakr3<8|vPK&s6t{_H(vh0QNS}&m8+1 z4Lv2n>hMOPHTDn+=02T42qkkJP#2;`12qBEK*=W#H8VgdNb__n9gr0;V*B%IB`Qvw z|J)h;+6{e>;Nzw2Bl!IE@4ROAK#d`nHTlHSoZL3M53p$u-@*6_aAR?xT%=&P)q*tn zAwp7KpWN!1&a*7lq8*C&*rAjc=sxcy30DfaKNc*tbg!BmQWdOPs z%%sR$8*Y$)u8MS*yE~;na76myV6V4YqUq!c-aR=IJTV!nju9@hd!LC6S4+@2&1ZU0 zjRQ4-ACSl-iXAClZQg-fh|ws{&(TZpLB|39RUE@!C?5-xytT>fOJZ4GQ#ZD8tx$0F z*D;x)UGlR40pr?O7t`p(NV#A((aM)=JiJOG$|Azw(mhtcf^0it9hK^B%k~d0(45oo zASLy6IG6v_er zaX9!ah%JQAkBS#Z&jFtg(4V|FZhe3h@vrc4d|RiK;ML|bHh5+u5CzkE-GEo05^;6= z+`F}K1byTv%gm99s)$<*5wjKZi$>NWFU5|f&~d+aL`C)uPdC>V0?IOIeCF5c?ZL_qOuvbIyNTjBq9LnD zXW)^CH;~V#r4Sh(TbV!jsFxH)PkVSe!+|s~QXf1xgmW=oL)powCB0}G)u!+6$Vy@x zgaLGO`vAgk+OsWIZj!_+%~=Ixo!%02>kEg<$m^RwGSAf9K(=ZHBn;d>bS&A=6P_bW z?o2_QH2kJ!vAC0)Rqra3Ci9@y>VCnQ(%b_kIP0+}WdI5PU6vC2j<#4h6#6902(FUIJ+zs4T6dcTqFTOV^%suDqy7te^d$Q%|q3)fNen$wjR`s`-?u&1glH{K?i zUvcxntC4CjS+o!g8aF)I)+s0{MRv9P72yaQunc(}`7qiPjH4aTJ|5 zZRVnxvNY^Jg}cWgE6PxYjRw9SI#ky6Fn>l?ppOOEo~Io;e~OL_;(!8!defhKz7bt} zx2kbtdT)){A=@ONyc?l#lIeYD)Q}`q-NB9hh_eH&$0@|KB)i6{h1Khjwww*}FGQ(_ z?f_PDHk~#ADG4Fw>)8!@`KRTDYO)qbR~=$Mlw8je^0$X^xAKU^K5Hh)l)VRnxlhFk zG?lbeGo!S|#I^{1h;cUN?v50R{W+tU=F(OU*jiE+iS)SmSP@UG`np6t((k2aBU$0O zCPbf;iEzQABcrS7-_b0FE1*lLiEbYouEKEdWF-mX4mTDx!&zHnF2`KCg@=se@&}t| z!h)X--C;I|E)!?%e=zdCyO|9k)IFzQzUA@=ddWHxMRfY~{U>pb)FAP0;D~tW54lYV z5V@5eu0}YOMs(~a7j(pPyE_& zdy%gf3m zn>QEfZ4%eoL~zCp!>}J4J?2cBrdxfi(zF@aK4ho$TLJMg=?uj`_)e9=<~a=WP14A= zYChAH_mZYVQ=*t3PKStiUf0@$*1ZXbVB#ecJ(oruLGBwI<2R*r=EA+Z9!Hn$W8A1` z5X0v@9eO(4+3^v7-c%0B71TP-CHOgaz8}0q*Yyv;b(35~%9ARtnu)c6hwD_o#IFpS zbHf7s%9HbPeYw85TyGn(1;}e*k|=&?^W?@*T|-#NMm8EsjN^C&w>aHu49+Ol;r>I3 zI{@oUJGYLkKgn$S{Q(Q`+l>W~ZAQr?H4VS$1}q&-IanJyeBP{i$U>1zpkij`z98#E z&i&Vrvu)IBMyP@jaoDSjNZ63&uHKDiBDK`L$$Xn;YIrFE$F4;s=W^#XOO73aypx(nr z4BKJo&&CbvJw*Qu8#;W4;Ul)&e)tYQ8%OM(@a{etfVkoyGm5lF5kT5$z%$N;w$8g=7>!mrwRf+m$;c1385atU1 z4o5%44bZ4NQxw42ABg4rUBd5&@nP9qZGegMcAPzb?m?syn0yGau7O0Z;m`=hoX}7L zje2uWo12?-jXE8!KZ>HG!K4+CTub-RAI3>iCx)q0Gjc$E8$)^&jmMaP?n9KDn*4P8 z@FYvJOc;M5^6jiQ|D5;>E?9kIkptqB6c1;d>#7hbu}!pjHrhbsYn+QSxnA2?SRKEn zVz+9@b2`pb8HI5OtqR$;<}nSMinHvnb@YaY%*B~l#HjYl-8W_4Nau7T#M=bQG>yU3p6p{C|J({Ctu3|Ux|Txnuhtg(%m?JX)-Yov|2W2Sp{Zsc+W zcnG5d=Ad)q*+ggf<&_-wr;rh*=h}GPFcay<>NXnSA&xROHD{Rhisx=a;wcFA8DEsZ z*f)ZV?DG!TX{U)3XC83K(4BV5PHr4qj^ir}u%hg=&ABu$iv~9-=Vl`-l+{d==uo7p z>H23FG1$X6%m^bbOyUfJ7!DH7_Q!Qz2G==Lr{~Q$#G?dzqz3ZF2#7f-*Mf3EUA5nx zOyn*yancMohYTO8B+%DKV|0pX$uD{CGy(j%A3>&u7upI{UuJ48!+n-~* z50PFyGM-GBlO`WJe;Q{%k-n3=zV!{}Lqq>PkM)VS0;{g9oD%K_vTD8 zDwnuDWDDR4c?qx9(w+IJV;!`n0JKbWgNSqDO`4Q;pohq98+jS?qITHs0J3` z8x3o!(-d>@m@!$ys+)LA;W0)u=;l%fADVMGiu&OmxSzWwHMWjA{gW z%G8tXdOMNuP2m}z%Qk*%MLQywaOE83MC$p$V;YWf+Hl#lDxalmgbii5FDxEud=8On zr;SjU7@TcmMg)Q3op=?&C&J*CcaWUCf9N2X10*)D&% zF;JTtKQ-&}0@jf55><9Wu58oQP;ysb+)BHP$z862++1WjA3A2-3=ThMOiN4ZVe+c9 zIGO=#n*!8$v zL)#P=TTxdoRufk>Jl)`gEsU)i`gNyg-njWJG`%STh_ZQ1ByV#L_!N-EJNkdK20W&2n6h(xv)1&}(+nSzZU5OFN+-ruH~GmpN=|-XsM;P$Vz1p3FLc+$a2;F;rHvh4Va{ zmcN;vH=S%zL_Wo0Hd*mcr_G#BRs1++;GW_CVrw8Qf`>nyra-970oQMZHl4@iS{xl? zw?;R#)yIs6C|O-1f`{Rr2vPMa?-0c%bNg9cJ~(Vhw#REMjL}pSha?BBn?Q}J$$?SRjG%swFD1eB1U+=!Kx7L8X&8>8t7M2X3v?mkgJ*K>UdyovXYGJ z=2TL44Vn1UY7iK++_ae)rJ|AOG!2c0fPiFel{tLw#43{ID(;z^(dRO>`X}N|F~x)& ziW5vXvMW}^2w^}R5CBH*N3ziII!9d_G2c(kG5mjH+OL0cw=@?NvXsIwOIw{SAE8Oe z(}|@X`ZpgqO*dw^$*ts~Vud*<-rz~w4%6$#X^RAvpUxYGx)8>{*q@s?ljh8sw1}JG zhhewUNnTpeB+C1&SqJ1r-W7B6&O0?fuQ2a7{qyqj^Yj1Swp@Sm^LXNajh|rU)&G>2 zmrmWO$`HUgL=oSH)8B384BLM4;CXn~LR4@*96Wvcf*FHJDzpE5qyh4M&YZt+n}s8` zpSb<-!Nl&EGi%m7PRiz_PsyNAsMgyalvj|4zue^M^ADJkb&{ssqghc=nz`@E0|yRX zFm!MnG;MI2K!(Hlma`EOxJx%oeM=nmP_^Y6k;p%gl?%`vkk5-gRG%5Tg$W^ zS`%?`<=USv&bQER%f^T7NTQ%gORWpEBnt^$s1x$&^kX2+Z`!b7t+8^O7S2Ax?&Vo)5|%z$=Xg?%dzxWU@9GY@Qb@U&2~X{fiz zpdBy-_8?6Xl6kYkBpN*SkCyKu3}`a=fcarUu9lh$Hsym_s_n^YyqQtIMaDa6?u>1S ztEjY~gULHds7W#A=2u#w$b(y^<(S;~k#X~?H@>IT?%df^CO12(sNrUBG=_#)=&WW& zz&f<|pB3U8lrtDN>9?C5EI#zfE_32%p!?3v-bD;~@1-RmkK02Fs?(Fh=9_uoF;Lt? zq?z0HHd|^Lvl^EZ&a|07<}9Q+Ezl8U(rI^_88}h%TsVky4&C@_DPZNAV$!)Mo4q?R zkr^{4wV;NUu^mXGZ}thKS0&RA`c$)bgK7)THhZ(UM9ut8>^9S99fmjW{x||O|0Eh% zf`cYapGxSUxzpwmWxCm+mhLd?bO5(Rf_ThZ)N-9=5G-w}{4S0pvgbH+!K_1C5S;P6 z2FD&f-vuyn$(R@&nSU4EWv8eP`_t9S^hvQl=pVkd$l0r(9-tS@cBh<{n{jlmur2);D<>>BKS@O08jAxU3JD**45STWMUps=ez1m;#wHV zrv-JSTsb#BBU|uYprp8+M{Ni@%gZY%m~fOyC&{yJ`9V*tfIGtf~LVzUYt){>@5M#$Sc5_hc zogF}DiS?PEAEti>lM^5L!(@usyNhboPQw10mrU5jN7eG9c!jT2VG%IojN4!wZk=wK6YuK(U;gOhbM!IaY6U7LHp{UE932%4BB~- zgk9og%I$->Nv%N8EgST-(k4-6U*)NtayuFH`i4bNzX@C2E)}EKs%6oTH~4BCw?0u8 zu2kVjCbTyG`jmey7}POnU(k;!Ttinu!k)=XY0SaWU_y1!K9Ss`yeKmF)7Pk|5hF{O0qUVLLk|b3OyzyqZD_dfD47LHV9Rui_o_r$=?rvzoVy zl0lF0LC-y@w0SZZZ6zs|uEgG(oAgTememC1^Co zVaFCEeH4FR!V4RwhYH&h?5+;_Q<3@hSIKHniOzOi8teyZ<%1t~#e!r|lBfwPz<8m= z2?aHcppD&=uR8fwvpD5Dg5n7~y@17O5Qhr3%4a8wm_TW6%}*ul#3M8Q^!$;m zTEb4y@6Y%RdAdQr|8!)EAKAO)tm7hlxW5om6a2i?E@IaM?s9woh?=0Xnm$VHj>9#@ zLH1XMS;SgD&tD2tHhg|_gSY&+TfS)uVbyQ2R`_U~$mX9$%p6O1qx#dVX?&_Go*1 z2XeT1nf(x4UUfwANNTPw-M>dV0$T*Dhfj3X)D)od8{Md<5FFf_%!3V(`TU zgYrXE1S3I6kQ@}%$jj}G!)WPkfsQ|=jFa8V{|k%kngzvc8RK#$!q$5I@ERV@2M!S3 zgq?DPqk%nMNc9t0vc3sBH~eU)AK|3D4IgV%RiD|k*9VZovRZrca8^1IbZ6U_vToIE zk!>N6y?kMS*0l>#;V2*>ulszN;>nciEUYNE)1f=G`Zw)8yAYNJGXAH)GRkf&*79|? z+W7)o7dxKC?N;rdjwudbeQ{VSD8GwWqit!i=1^kiY7Y0#^f_D<6xk1%mRl#QBXn#IjM5i)gPc!!N-RWvGd(r1p zX}?i3RlMrJD;3+^?#mbBEZhdh{kSh|FWUf7w_s;m&Lm6N=?^TTvkw4{odL}n0S3@= zC#y^bUB(BU#s(v7rY70h{vbLyE+J5l6xOYvf#4WDr-F_N`-djH?1&^kYVt+B`E>OczZ0E zrdB>bJP8C!Aar_rT=aGWnBfI~T;~-V_aE%FZS2-XDVDgzE)sENduu!E`AJA;5%7gw zR|RENLD9IXoF|5~m0iWGgdcxCB3Z4m?iLS}T|Y17WaMMt<&}26BOTnCaoTl9s59_E z#74cXabi-h_W*ic#1P8H21V7?RZK5@W=M<;xca!#U3aqU3RApI2E)pdb}iJ$o-Wjn z6n}knSkW5-00oemN`Z#iN)}WU=r{Z=3WnKVA_{c5WAH{P(2J)5{=Nc7p?aCws9}4gA0^S}b(; zZ!lcnbn(X$y9AzS&n#4z2s>Anrl44=#kr z8w<4%L+mAAD5#y&fx-5IKM(gEBszCKAg6CTIHjJ|!-wE$#MgFKd%{|uF=&{Pv48Q) z2*Eya>7l&T?m3dtH!K^As3giX5%$3!kKCAeTt~8rwUrO!?tYK(ilT_9v;x^?WoAG< z&Wr~1K2)*16zVTYy*k(`oYj@lazXurimD(8<+9UQAjudXIejZPJ+}$W&IobNYC-o- z!H?~{!vxj9*0?-VVP`|k5f{QwTHA656@+w=!*qpc1KzH%mz#eog2*+1aQ3aEJ!a}svr950)& z`<*D2*l#O&dk&iC*n}NzDR1b0$NNrpVy7g#Xba>V`wVW|*ItQc|M6sv_uuWhu3^v5 z&D4B0x2s_3ko#fFAr5~yDBje=pggdzeb^J=A*#QK-a}5G*?hOcYYdU;8-|xdCK_ll z*4TQV9f7Gv#(-c*sa;(Lxhg_lz1CSnxvk5WZY!Sh0`#ohev5Xsy{&-!Nqst7$c{0j z8kvs<*nF$XYN1zBg`bbhGl{v$f*!HK;i0(G$J=Nh*_#Vob!ph

kC9Yj|b3eMGSa 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

u}%RE;{@HGxBkX3Ce- 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 JCEQq}@&BE5P?G=v diff --git a/Resources/usearch/Android/x86_64/libusearch_c.so b/Resources/usearch/Android/x86_64/libusearch_c.so index 74199181c92083ec85193c46b9dbf6113f8c2b10..e51f02ac348d4a283ef7c233caaaba3cce06ce17 100755 GIT binary patch literal 1859760 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 z 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%0AiPjUYk4B0)=Y$qXQ*+I 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%0DYI(=Np9P0rv|JC@Btwj3LyBt# z-fu=ms=V85rlnH#o3jGaRVY>ELNYDYnQ2ey(H51)+Aam00dt!9e78+c@f|m$@46v< z=M72sLtimV`M#QzzPE<-{WWB&$FP~|G01G)-1k_PA-==H`Th#$yDOaUt#H1x!uh@m z=esJL@2POUqr!F8PjrWtbT{5wVty@5%J*P?Prx`vZcOh9(wNV_bn;uNYXZ^7Si(Vt zT_?Yvbxk0$>y+BzK>EYV%qsr4GGu3az6?foe4Z+V`)`{-upVd$oTogETh-V|`S#w!B(Z)mJ zt`l!+NABX^p(lG*H;1648cuh&Jk@a4rBkZmX{_;Ybi)l36PHZ9n*(a4E}6a>E}b~N z@ew?vqRQJlW?j=q{V!E1=~U&37F4P;)0#CE=L2J{O-arNhRoJ`eYZ_d@f|m$@46v< z=M72sLtim<`M#QzzPE<-{WWB&$FP~|G04t(EVG>NuyDS=!ujqB=X)!h@2qgXufqAR z3g>$&obRY`o%Pc!i0EkK`MQ>vUkj7+J(%AUq%prINMkOujYXXtBF{9h> zXI&GBES*w297umynOVgjSBC6t&zHf-zR6RCaQ|%+2-X8n1$LOsT(w zt0_LBz!wmZiYi|}Fq2`ChNMI#(v_(?BBWCNbFUI`iZIq%H4CQ*Lw2_9Oy}`qVP_tV z0;6F_KOTnkBVtI#Bn$wiI6nX;r5^%A`av+{L+WuD2G~pu1IW&XL1sfg3c~qaLO4GL z!ucT(&X0g_egK5?{TI%6UpU`;;e6+X>#XnSH!bO&^=^szwJ<5)gZVuHV;gxFVo#99 zeD-Bm>QL^Qd~B0sc@fI*dR>!`ti=4m*ERY4|DAlW;%E)r)XU|AW&QcVvYnlOBCC_R zB{nlC-*zWfC;x~p*$Be5&;-tPVQCZm(o8SQ=E##;4o%y|8Lc0yzF0P!t#9cIM0~Ra zzamx_Yg(hH_;o5R+gV$MV(XYeDb~nmv-h0VjkiEMc%hz;j6Io>g^zW+!u&hb^!y*1 zRnC;u`??#*6RDo2RJUNMd{~XJJWM%O)tMnhm7e4WOJiA2$E*ZR+eV;un#!$dXp3Ip z69H7|fjZ>dM@knuRs0Cj_^8lGbC%qQab*)nm*6r#}V%h`ym14dzZsYd^F4|%7@fwhBfT)<7)d$1^Ek; zKhl=(=)-gB({D8Ci@9fcS(Co)vhdSFt^@fK1(W_$v-Au~%JG966U;Av#K@kgZ?N}} zuL0^Ya-Y^?-Q}3gMv9M#72=bF_!*Cw|D+iC)AaJ3kJ^&=pBE!PNUtrqAS7R<{3Mm+ zTNJ@3PXq$4dJS zEA9KMbT)Sj)m^%clRi~O09Tt&xz7gBe?$7-8`AgPkiO@J^!+xZ@3kR)pAG4IY{+c> z9-{uThj;aQ6ETKmoQ4PUJ5_cA{GLV1C=kx?1j6}!Ksdh(2u$tQwWL+6DIPCklV)vZ}<@*eZF7rhKP*nLC6*_HO;D-U}{3w9(gJ81yQ846t z2m`J{-b1dpvj^`O?NK9C<_8xy77<*e_Wdp1`)j>9Z}74B{NU4l znh3&1n3~$@r>1uLsi~cQYHFvSn%e27rgr+NshvLSOLkZ46dBgLHnrZhsr9Z+t#@r| zy=znJU7K3(+SGd2W*e-(@#>A!c!^(e;ryBl$EvT^DOotb?!x(%7w*5PUMZ(H`1gNy z3Ff!AU4r>7Zdt$0Ez4Ht*~PMcyIa<8dCU4e*Rp=+wQOhm336dAmBt^iY5W13#vib0 z`~jQBAFyfs0h`7ju$}cM7VMw%2-XRHBY^T-0F)noP=4$|`GE)JM;(+Oa!}dg{gTdq ze^iOxBdVOrv8Hbhd}j>lyJJY-Aw&8u8Pa#kkiJ`n^c^!~uCCD!+}rWJ0Ok7t%J%@2 zUw=@3?Lql<2j$lsROjoxe|4oW-uuVU9oEgZ$ki&-54UWs=3BATx8F%}o7B_T$~gIE ztJj$+-etYz;b+0#Wzq7I#sc3N@|~@MJxBT0ESsyX1?pC=bvUo{VYoOYOLex|y$@Ob zli;KlpS7)LtCOEnnZpf0j*}Z*mKjtz^s)O}_Jxv^Wr))Ll&dtS-4^|DtkQ(PQ92gP zpvonfrt~Li8t}I0mG)<5rL#5hchu__o%dB#cQ`6**q_v-&#F97ezIt3P*OUegJ13B zZSTKnrhmHf;#3RVi#+iIR4opvY`%@uq-VJ-S?>mq)1+*9OrEJH*^bsd^Y!8>hqcOl zE$b>*y&9@v@mXt3D`A$b4-LGBQm##jOV&Q&XZf%lM2!Vy%gYK&W0+n~oH_XJ7tbwJ*0 z^Ir)h@4r_}p3@0mlp$ZL6A0%Q@)gSSOh*1GxRdxf}X!1vaaDFEc z&hG=l`CULbzXu5CcL3r1_7~1?e&KR$efpH!6#|39zK{EJzSE$5pFz=Oejx)CRZe^8 zw7I_P?gznS^`l_O_Yj60c8eH>NbqvFCpcbv)J&D;o*=<0B{SU<2=pK8VL|EVebj*zY#zh9(FldYSul^9p7 z8vQ_m@*@X|p<*CF`F?})9R=lk2FiB?)PHNe+1vNGc<-un^UFF#hV`yZt#@r|y=znJU7K3(+SGd2rq;VQ zwcc6p3GVaijnjCEUvc65nhVFOzoJvJaDLr|^D8f0wn=0^s@HzC1oPu+mtcO2Th?!L z%d*vZcCoDA?w0ji-m-qrwXENHE!)|Cf?QZjrSS)B8h^m1@ds=gf54{k2W%RDz^3sB zY-jz!Jwe|YP`)Rid^bS(K7jHa0Oi*nlwWmFov-))u~;e4iQ#sc3&4J$t zhV+}kkbXlL(r*ew`i)^ozc~!)H;5s#H3?m#AGjUodjZP#0hI3nD8K%o{Mv)^>ki7V zIjGLpd;jW6VZ8T`p*u~x{x{qZNOx_Jt<`)hcKY@^Np6#R8e17B-)!}|G{w8Do6~+4 z>|L6Bg1$54J6i>Nj`FQpHdk9;Qnzxg!_v-&;ii-wH4_W?`;G`CxwXHv=PTsCE zhkJq?Cl9zRGpKUtWA|6?3HsBm(*BgIG^gD%{q;+w35O|-dxBKC1k;rMB(1bRD=Y2K z%t~kLfX}Pf`R>!TRaARADr?x^R4Z?*?9@HMBek3XuDm$a6GLi3o+Z z>m9Zwnv^Y%{Sm*_LHR8Ximm;uUOeTnv9eCfy319shH6-R)*91Fm?i7|viDHRw^HJg zwNLn2{)2mhz4Svx#qNVeS$#ZKlb(=!mJyotJeMWwJwYbDK(i#@6C}Grk4Eo~kZaLn zk$Zxq_?;`>Yx~Hdw!`zgh~)hb=8@-g!cPQ}@1ytfIKPlDSDt4w^3BR~;vwIrJZB#A z*@opbb(!DC!%QXj1oB^kA$_k6>HBO*-(y2&^LMWL%O2j<>rKQMmal1e za8Hmby8$-RQbvJrekTyl?*qd5T|hX$2MFhP0O9=h7tU{f;c{(#`jp!h0)xZ8k6U}b z)1Z8xLD6M?`V|yaPJ8IIZGj&KN#{*>p!^`1tbP;>`5wZM!)_775D8um_XL+~kGe&r zxhF_)zml2m3G(>&HC_69f;`IhNxh5aH&<#3zx7g6urbd$%7!;J1&^?8)7^*jn>y8s z-}0#`{Em>W9KT2=y@*M@`dj`sP1k`_Pz1iFM zw|MWb_2#_651E>Kf&^hBOik_dQ&T(r)YMKtHMP@EP3`nkQ#<|C)J~suBl8KJBEx#u zrq;VQwcfR<^{!2=cWr9DYg6l8n_BOzd-=y6XooZFjnjCEUvc65nhVFOpQ}@{aDLr| z^D8f0wn=0^s@HzC1oPu+mtcO2Th?!L%d*vZcCoDA?w0ji-m-qrwXENHE!)|Cf?QZj zrSS)B8h^m1@ds=gf54{k2W%RDz^3sBY-jz!?Ks~VP`)Rid^bS(K7jHa0Oi*nlwWmF zov-))u~<1#=f9Ix;+`N?PKj94HwS(r7}9SBL;4M2NWUoz={JTU{pK*F-ynv})+BU| ze&BYT?*%B|2T;BTp#1uS@@o&uuRAEe=Ab%X@BOPQh4J1$hHkxf{b$_}NOx_Jt<`)h zcKY@^Np6#R8e17B-)!}2Oz|%3=Cq#$dza>(pzjR%&Q`&mqkLQ=6GXzF|z zzMGOI>pj8uAJv$E3u%&c^_4j9wlVmiV7CQ}vF;f~50_K#@Nqg8h5 zp5VEf=>k_?oa&^I`lPC}LMoeYYc%OPmnG{Rwy$YYwmkMn{8k6$w>T)a_6d6Nl*7hK zvzGO9SG^jlVewgOOeAe#m=mE04YtB`Ih z?R%}X@3hjs&r16)EA4x%wC}LezQ3eHPmSigyGq@q+qfr4l@Y-D|Ea+D-;lodhV*?m zr0=;QeZLLqdu>SHXG8iPTQZBkx2nJF;a$Dn1dL&MO2dPDf>hZJu#uKB3WW1JfpC5w z5YF!c!udTwIKKl3=eNIbe)AhH$JVD$xm_VJI2`-9Kj%9Q%J&%*U0&bM)(aF>PJ8II zZGj&Kr1PTy$`69c>PNwnoex6}yG0B`BzQU86a2dNs7)%(JwbvOl+1KbkjMX^>C)d5 zRmLyxl&X3t(TgDjrlEY%+wS-!nRF!AI@*;R4abVr>5{bLb`JNevvj!mTtmU z`hV=537lV5dH4TAhGc*M6G0LpLf9ngs|J^vR;#hreVdug#00YtmRIYF2qaPz5EtB9 zbg*JY2A8_GrD_#-w4$h0acimCw^%pSSBlyzznO z=8%q`MD`)O_NgV9k8806^DSO*eVZ3tTAjN~!S(H4aDB@cT;FpGuJ63!x{i|TCnjZU zsXqP~w~s%@?cZDk3Yuk<4@qae>s2bah!L?Sl$z3c{hyZeK3}Hz*ydT zV|mj9%l*sSy>Bd5HfsLcqS8)}AeqW-O@Cd-H$s=`o1x3}4bf%#rsy(#V|1CmIl4^W zAO$niB)Enj_BhUaVJz>1vAhSy^7b3cTW>6HyRp3Gf#v@Bu2i*q-|9+by!VZv`(AbZ zU&SHNZ*Sllt#ZTmD8=;cJ4v%iy$@D$^3B=x(TaE3!)Y&KXPVt-g5DYUZA~cdQ68<} zHpTjh+-hpWXWNJ2n-!7lGr`>;GMC^~)o0uKU*+TvRW^7g$T(S~BY1mA2g%U4)8Ft+ z&`-Bw`zcp!rrlk~7o9+CE`KSuse@z*rkZ||7TeFtV*8mHw(Eg@cD}p3eq!`~4D!^- z%7*=6s`?m}t)2-!TSCu``X(S>P_kYm@|7jaxmKCOKA@`CMUm_iwi{HHmbdc}-|EKl zEp9AY`<3xaP)>I~@FL#pfjj_&hu0Ed}_w;rd>MiNC~d zGgx?5_$oz+aER@rA+`^O*gh6w`%sAOBO$gAgxEd~V*4DGEfx9w9;!7~3w~ z(D7mEGJR0GOdpai(+8x>^x^0-eK5LAABry12cpaLVdye*LHMwOz$m$WfH9}o^FSX6WBE83%ZI^OM4@w1VXLtqnPIKZ-_r4sv3fo*#`1CLiu%BGnFB4|59$C95{$Gcf&_pu}w`)LACJ(lG65!LJeSdw39vg(68--6W|zCo)seEU{w z(A@j0xvMq!h1T!)u+VpgDvIwL)f&F5^wZ;ePQN<2jzl{Wd0XxJP#ep~)>uB6#v*#e z##lZS#`3-!%R6f<@0+py2f4zixec_+ZO9d7sXJ&c>n28WQ8v}q>HykW9Y9;F188e? z0Bx-fpsm#bw6!{bwpIsF_AvKIw-~oa2~}4%R9)Fnb!9`-$T= z^*yHG(r36G7F^$J3a;-r1=o*-g6oGv!EM{iOv+Y_eY`YoA1{sD$4le(@zS_`yfkhf zFOA#BOXK$O(ztECybVoZwgU34Wh~!R#`5iCEZ<1R@-1X6-#o_hZDTCoFviNY$_q3b zzeJ@S@j-Iiv|Z129q(V4={@W+y^md{_p;0Mes-DO(=OBd+GTogyUeEk;+#E5^{yGq zJ7z5Jma)83#_}#1%R6K&?~bv&GsbG~%0Ax<%U0QEmpA{cfpqL0iuUV2cyn#*QHmRh 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

gt1n*%2&-f-`0dB+l5~77}Ny7G&wyRMm;B`e(|p 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

    c`53g1E#W*MkHy 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%0D$)ZdFSCT47F!|gGq_;jnntl!e4>TuUA@sD8U(S z2EeaZQhIH}Sqv$HM|2*25#IY#2i3 zuyTgO82z>%w0$p-m~$%C(uqBRV9o^if6TTwkeRb{tVdJ!26A)gt@q9zLZ zzf=}g-McA3-vR_r{|bS3AQfqT2L6RKwT7Ke_(oaO2HsbhpUwlUR@6d3PzFM*SJW^D zqD+x)-q#$C?TT6p2x>6OvRie*g9^m6P>K)-6*ZK%EO6O(SnoWug4BrK-GPhtz&yw~ zjw`*;blx{vV%DSI!nZ(+dv^s|K!>cKkfwI>zQyU#+SXoct@M5pMu2x)04`0xSAn() zD)5`%56JC-`r+-6oP^dbcn8>GVEv<2w{Shk`xFRvjSh(*vT)+MMka&XHL^mdL3X(a zAgdjPk|vFT4h@0-WYgG{n?W0F{U!h%83hey0I)J1|HZOC6A3h){ST-lD|APm*ZR^> z405Z7M#muiH>#Y_!dT=4l?e}O4bbdfRlJ+)!6k z{Z~QeQj6>iV8eW9PoVM25x=LOP1VGLOT=A)!Dy0y5V7EH{H~^sdpD3CzN$i5%YewP z04A~rsaKII_z*vN*e>^{`_seSFqD1*~=e@@{R<~ z2$zG<5Qy+OKP#&xfWbZCAXk8lSdZbyfE;3&DVm$knQ~hy@sdO;(p6sd$~cKwpGXxf|I@Pafbsqks2jc- zJllZ?KLTJ6fWf`+GYsT&Iwgnq0(lEj11I2;0Ei_0j*cd_qttQ4)+#xCE~vGL?J)rL zh;2WBbBXOs{FD(}qoi;bLId1`cEIPo)MOtxG;T6(ryIDPR;bzM zVB?AeoN}0`9}4fMqk*IKMlik)V_~bwzM>T^+F$x?@BL~4wfYM6C%%o`FdbYpTWGE; z070E`z?Q1nR1!_{hN^S<>%+N<2F84~3x$`eCJ%w{QSddS^!~8@>CrBr3Wu+RYC-Ki ztj2CW;9}shxjTv|HJCzW(wLj04ua+*F)P%8S$I-l9;&Z_(<=1AWK(!2**)*_v{cA* zn1<8G<57pDNcIz?^OU!TxscjVQ`x>iDIA1!I)~}q%Y3YZcfUQw>Eh?8>pr0BpSKs) zqSZo|JsnV=+up+o@yEKN{rY&|qNG1o_dN`tIqKLR%F%j1HAI{oWt0Q$H4fD&RXwS_ zc7m-TrQ@|%ve912{?%Z$+bhLsFApAk9|>5YUWSpigj%W=aMDtMRx3=^G;#{LF*KZB z9Ud^ORvIJ_`r#CweKY4t(G2Lkmd{6}UwaJ-cp+gnvZE2F)cc&{Ri}dSKx*1@OWt0?&W=)8>z==M%}OTtauoF z2N>oVArl3ANm>Fddds7Kq3a;h^=_1?Tex;dTi30=2QdQllOr(ex|Ls`Y5m^xT}dwr zSwDeUKY^>2LhpUPDO86oG+pgy*w$O0-?H_7$2T1_emd*Dn_<@b*0$85Ye~!I&`oRk zqNC-mgqdg%t);+mT66>W?G`;q+DMBsEGJFq3c0M z*WsP)7TuMg&Wh^Fa2#Dnf#25kOo*~|Wmt42xGG(lPjn@ibv@Z0x>71e*HJ*JX(&;* zYxT}iU9&qxb!9k?t|9Q-y3T+oTUUlfSAwh3mH9+hf?3y^DA-G>7+p65rSeds)^)C< z>sJYFI@-Dl%(?=`a+rSWaLD^Q;WI;zA6-w(PfXJz?`MWtkCqTxs*$k${nt#P<#|{q56v^i=}GaY{Y<7o`%-E|p*|bpnKzstnBi z>KmujzFneq9o!{aD#LL~Jsa7psw>g#QVHf#`$H&>V^FChQI;Mu!LD|xlYJe#+NBE2 zrB2qJ_ZCf_clqX#xVQSKLRruX6@TTxl;8{(!L&a*4n>qXusl|sP+uU(Z0gao?+3RVbPvp(Vk(^o?+3R z;HtD|KGB|F)_xh3D^;f#L;H^$?Pr`5ZTolfquMiUYA@Pcg6!#{4a3qW3`?IdEHz?DoiESTti; zG-g<8%dpgzVbPx8s63P50L769o0vlYd8E!UyTc*suNsE_2&)M85Y$U z7S$OR)fpDm85Y$U7S$OR)d_~`)ll{(wGHOj`MvAH!po%}sQx*r{ty(_t)AH(s&^uT zbcN4)BiUqKD|w6EG7X!wR7fM4J@W&mEvczX=2wdcMJ>Xa9Bp3C7j zcwf};GU|wR4708Z1(&LB5UtLDK3cQq4b3jRD5@F5aWuQy(2QZxjNqy?V?NQ0VbP3W z*6dsqT&f-;&9*q2^*AruX767d)r{ddnw1%vF)W%9T$N_bCz>%Vni0&J?M1<*>L=1{ z2=viy_L-sC(MzJ5F&sy;>^q~q$*^cfa8;TypJ>LgXhtw=_8|%`RhJ>DesMG#biVzF zH1_Sm_O`Y^1RhNfbz?owZX&pekB^hyLGT&AainDlnc+Ko8(qN;F#ZwXe&sm84m3zAZ>~z`__X&D1m24=LqLn%cr`KD}_clb? zii90S)^ai4X(;9grphu1{bf%^r}dsp&A^xcK$+yE zduus+GMhwxf%(JUA?q`e|gO?A-Cw^VA zZCNd4ZA zCRZWc9(@8_Bc(Hn3=Tn>zXMO_fQwlVBTWtG&q_&ck5@EJa5S~oDx|YHTw+#>Q3#T8 z71B8za4~B&(i{V@4hLP#nsg01C=B^^IqYKASO4%>3v!S?okK5X)w$MVah$+LI^759 zuVC)`o2P7QjPiold8{R?!QUc5wL*1(yh@N*PDuGWwGyT*@RXbZO85lo*am*{MF6YzF~5BD!A$p z*HLhtL0r=hAf})ptbLv2@H%j<20oktU;_aB<8Q3@31g5-ZJtsW2M_rZYu~JDI7a1s zW^J?4u^GO$Dq)KKjkV^K@2tPUTfl#bNE)8#f<~c#V%yz?wA7ik{Ifdv8zh!|3L1X` z;$py;#~zL$Azb{SvqwJv$oxVIsE-1&2B0&G+M#pXq|gU*{C!V_QG4K<;&UupSq_c4SV?tT;D24j91*r5SkT>I-V5fYcFg*dIRb|nuI4Y+nNM5)b;W~ z{Y5;+vhxU83gjz?z}PcoURQ7y5%MEKuEA)%EQLO(=MU&N(zZ4JWs%g&QkwG@^EQ$u zGyY;eVamPoxx8+3`eYujIKRZ7#gOdpmr?`W_Y;zM)z;w@{q@f(!yODIDZ}sviN1mV zSqe%gnYX3l?R}&H(8N!lz}x&C0YkM5@F(#;t=egnqhCsE{&w6(5|_U?u>l(Roh{Ol zE}H!bIT*~3)kEVTIYlJ%fS*c2df!Ur^2fpHG4h<-T`VLDB}k$_SF z+X?sxz+M12AC+52#H=PPzG2)AB(-yR5ME-@V;x=!KsPdH zuOP;Iko_y*o$Pd?k+QeOfgsL)GXT!M8Gz2tqw#%Fn@8ha?$PL?RWTY-Tm7kjV|hC8 z_SW(bOwphEyO8v$KR<@_oqsLeA6Ei|0GdUL@7E7Y8xnA7N?o2uTu96#c-WdO1#^h5 z(XolVq+mWF;uzrhU#J%vI8|hF?FOgR!u#~y)<_We%&LoeC4xxcN&bC{40jh1!yUAE zUnn}-J`eI}?IB6{dHSA_~#1Hz6- z3EB;zub_EKCT+av^4(@l#_N5)fnuwJz8vQOtQ5MFX1Pq(be<49Zz)A+jlt4)bdrD$ z6l%&v*Wrz#L(#Y?H{;t|88X$>Am6NVOp(>p6?_d$U;d?{Y!N@+;IAZeg;p-P9>r@&SZIr<)c5s4FJdKFrIKJj(>EM!p*?{FTV&Id*&>@bUM#Zd z$?GS=g6ls)EVAjzwnbL1*dn_xnJu#BH;YAfe==KSttN^^HY1rrVAt@@nyGk^T$;>Z zm9Gb#Ewl%d*+NUYO)Rq6$rPzM>lLKgBAb&;QJJ$AO%{u6ZZbt|&Pv0vVz$U0;{&}} z=OWD(*+QKjk2G6c%aYjwy8y?=+2VRKnZD=B`fe&JNEYF8O<#Bi0#M(L^a`E-DAIf1 zz#93qPM6#b6Bh2de@!x5c&Ybztg|V-LCaf?G)ErV#pzJB$#~5?LqChWygZbQ73A^^ zphHh%j&aeBC$_JZFmACbc@Y$OkkceHkMNnvwfRAIA?ZO@{ha66MWg3f^^?bVo1&Sa zh$b_ufF6U@1S0zqMH4^;rPz=tAQLkW8~6U%$);(!|5nqq94?x%X*n;sdiXl@P1Ll! z)+EnQ)~4lHvnd`+ZW1nHZ3~?uuV%c zXs1i5JaH{du7`6!PEjTeMSkJ-&L>UrIFRnKDgdcrD@TlA&?OF$L zD74+#^jqgb`t|h1ZzLDPb_fA00bB!Ma6TmDVhXzGjO=Bq1roiHs8!xvQ;LbwEOjsu z$}}N75n0l^W*h zvFa000iY#-P_yI8$yS%L^+~OdZ0&&#*9KEQfKZab#P<5dsi%V}OiUxdR0jb5v1!}< zLEWglN}CuY&ITG6j{ym6RDzxpV%8^ z`48axEAbP3v+_*$Fmt9>KGr?dY=&3ZR2b_}+Z;%4!FITfBpKQ(EO5L+7cFXs7gX{J zTZ-hkUSWG7M!mv?KU_^}8vbEzl*0aDOuyeH1;)CEX1`}XCQReey^*Pq6;C14%*ZWv)PALTzF?%fUm?B0bQwB0-Q4i^(6d52d5?_@8R z>`wqm-4*^E0B3Lgke!`J5oMOPiHU4BJD!PEYdETIsa*2?s2iw$d|i4>dU?8py|#?E9D)m zD7p5OkMoUF%7Fa1*lRiK0A2Ao6Q9PB6E-KxnLyK)IAiP)R+qkso+H=WqGoa8Bvli|ajB5kITr%0El_T}Hp6J~WF9J`irg8EhV3!hdn z_jlk0>x=EN-5-L@uebZxVtnA`%;Pw*rf5r9WAgzOPOXQIcS2@7htKXx)j#m7Xct2B zjdS?A@JDj#{Xc^H)YUVlF{I8>pY*1)(;1sAs~CHZYPyqe4j|BJ&A}O8l1cG6V`X+Q zWOmdt@urd_(SoG8`OYQ|+HqGZACWCp^@xM^BMpve2sr4!HI>}BLXJRsYbv>jC|waZ z?MB9OPcXPA*xdWtg1e8yO_8P3Cyzio6(?Q;tW}53RBp>eBQ!`{ua09!My`puE>W}_ z)D<|IyBpfE%rBzP=Q3wQ8?6GzA>mgc3sZ@wkbTaDTs^J)LRP16#Z@SHVQTdHsFGB^ z&4_*0MXY}M_1A#siBwwh(?7~XBP>s)0IGPEb#n($p3;qmb~r{gYlbZitpwFf2Sb^b zNY1maXz(o1S?jf2gWzV+`K8g?RNA7Tmqara_vZ`TB!pO?WBb0q z?Segs1&a3+)^Xcp&3IY%5MD~9*PPkq(=EhVO#+tUtWFr9kop`cinB_of2t-pEd2~V ztH{p14;It8uVAft11M&O`M0=lGrTy3_dMmXKY~j;rk>lNFo5)Kw);P9* zUC152n84UhI8_b}dsT_<9r6hMyHe}$n&m=LXjnDWv7}tI=$bXuw4|(Ir1$|*oJDJO zT_~)nSJFPM3%LWMgx^Wj5XI_}Vy~tmKu7^wpQ^88dD<*&A+zOqoBf7D_2q!Rs=pD> zH%}z;`u18XHUtXzU6bnTm^3yETYqHIB;01dXHtC)!=?` z>$lsbAeQo8Y7GuiTR~a&r8W)cY?2VQqX0M|YIE-gnL^Ya1(rk9J_mq8)P@G)XQt6j z5}7tgF`cb~L--wr%zT~wmRBVpZOUsBkai|8PC(kl#76;XyMoMLOg9CY1JVuwUJ<&P-0*cX z*s^`E8wXo{XR&^Gu)zw?DYXqhQ7)t%Y}tj3d7@mjs-7q-yBNAX=WQ9vb(A)|MX^yN669^-#+^uiJvJYD^^F@bXOPLfTF1 zOn?R7AmVm!RKtHTwN7{o8m;+**rV%+pJKv3gU4~u8wfBAL^uV&U;z9$o-T#a)D~E+ zYGF<`9>>+l3~V^u32n&nq3-~|@u33%oX4?(_~>zb5mW@|Q`j!Je<3wHl8+w05=I5j<2IG|De#_@r&||tH{t`)%g_fz4o_LJFGJ@F zF_{YCm!U)drrTR0IoYshw|A)H_PS`~_743kw>NXUh{9+@pi9iRY_@#FW(&U~%zqHt zm7^nHM-#9YSbMwS1r`&Tyufk5I&NGUVc`Y-0VKO|ckd84ZZ`nq9ijCQ7_nkOO(%06 z;r^ZG+!5z3)!oEPAv=N51=U5f$0&+%EvVuHejrOKFZUm(CUG!u7m|HIS_a8Br+*an z`)!#v2_7utD22QWyHVj?h$GQQd>c3xLG4)J1wm!U0(M<+zOGYObgmjW3~#zVWxMYC z#fDwC?g_cW;Yodm!yibqo%f`^!{NLo9({J_NqvXI14ys^2F^FbE>*R)>wXLSO1|1Zh6r^K=@&Ogd|sylh&T#xI*5 zE%jJ@_2GMQu*}GwI=ep zGz__Z{DMVCx}OFOUQRnbJQ-^9B@tTy@Ffu`Pa5{bZsH?*VlS|4PxJ%8A@A=7;9L@6 z-Gw>mS#>RDunuHUgil*;ToO?#s?hTrb4f&v$##6(;3@n|%Pui4jmXnd3&USS8qa`j z(W*QHz6^{r0~Qe<&48mo<{7Xb$UFny4ZxlOLrGYqKNekvQ6IdLhArp;ba`i}8GcR) z?OdW+-Xuil%PgUbJH!2+!T=+-o|Iakhb(th6E9xR^u8QuD>N6sb%a=rWHj;CWIMuz ztSfdzBjF@ryh=TSLS&W7D2B1pTo`yu^bBuxl<*-+IA73bQ3)G(6wy_kk^RX2C+k7W z`8~pA!4LFrO2b}hKe{P1GU#bp-Ae$l{dMk2V|9N-vNa*$_UdjTX>}jJLRR-y0NDOo zjUI>`LMmo;F9)7h_oqOLuI?M85UROtf0;OEbvKdD>TV*r-BM8#b9FCB_2E1py@)MK zs}&xP>e0H4$4yPK~I$*TJ-nq@T7@20(gA{(Gze*hus@-Kx6eQo)}7=fzqBV@LQCV(UGs1`qyh#5p2Kv!Xfk3+)! zB&zKy*q8+T24E=xH=%aV0Vo)OpPAGo?YyUj*Mj^HAoPeGCt~^CR(o#_k60HHBQ}F9 zUlU0!55Hj}#FUZTj^3PbbCkBlk=t72@?+A;TZiSkkhWYCspazc?;!$snd-{ppUxdU zCTMQuooNlR!MNShF4z^03uZI1$v`exBAEOQ95?I=IqEkXw%bY(Sex4QJv=HTa1jW& zNZ={_;d5-y2opOd^HMvAK*v+OLcgB~(K)uCgtr+9+?Upd1+s@%fYHPr9^3f2kLeCY zPvBmwwDWn9cOluvk2qelixyqvBd$e0y8`{OOTA7-wbWNi?^4yCtJ3{AOSJHl79Xc+ z_rry>-47QsMl~0$D%Gs)ynFCW4S+K2etgW&PIeI?p97L_wf;h1$g&(eMyo;af18#Q z4&tQ}U1Js=0AL${$U*>n2)J<_&dn0A48TVK*pJ+_P&aKus?=hdqx-xCr?6Jyjfl_R z0il}@A~nSN4ZrMSn*21y)q7D-anTIj!5SF_G*5Wt&@A!;QZW-=@LoOPm4OtU@D7PK zq?0}2nK);{Gm*}OXCisRYlND*CcH#cJ0B(cE7IzRe?rTIfUpXt;kSs;U#DebvY?yd zcnxeP>J(7p{OF;H#90IT2@OVA%o@1p1!E1oO4#DAfn$W|S_553dkvf*oYXK}wNFuq zxdz@Q4AC`EFM=~<(6%BqkEWf5N36`^Ww6N_Sq8PCL)HHxtzCF3&}`^z1Hgt(+ViHN zLwscD90ZmPoq+(@(76wQbGOeM#v|)8cyiae?)JepAaA8q0L_+52ULtLmrcMpmP>Eq zBg^GFklAt>2r^qP_W`gi7mFR%X;O9~)tMeta#&qR+hKJf?T68EShXj3t5Fk@hVk+i zCcDMZ$p1r{_6c@BuAd_I^=GDLMJGKzIjH*T_d+QRaJSD?F`nox0*rlj7zD-iR#Kip z|3grGM6SL)XpkSTRVq6R4UMaXhLvi?`oOwT1Lwg9>2eP322a?hy#~Jd?KLFWOBf!c zeeYn){T{0|c3=G?g0y)a+=?{s<&FrF$sTNTK+cbi2+|&Sa1zo9S7W&!8KkIkS(}mG zOw0e(!8fo$ot1qMyC!5Rj0)1;Z`OFEpGt=OF)Tmp9i(6Pg8v3ihaQ@Vy8}gWp7O5_ z;&?^hM}f9NPvUoq5UFku+6=_iM9eP3lAm?i`&hN#1LejbSsz*NAl-qgb5oFZ{Ii;U zAl~d)E-u@GRg<;mFfIrp9VP_n?z!{?RK!1?1@OK_9+^H9f*ryOkUN=nD9Qmi8yLfg zOdA-D4(SaH-nTezRD$;{)KD_|^)BK}WZ`WKAByIoe<=VS`tL!AGxT>89}WE}AoI{4 z4Kfe?5&+K7w?Z4x26sKBJDj(#?+sQDe~Mghf)LL5&|~ce5DF&ZiveNd7A*62>c0zT zcueHQ4U@0rPYVpji|f!VMgz8iV4Zg-|O@mM23 zTcw`asYl*gZ0!d#k>GpoKMM?PfK8e;i2#%rKbeBiR&@BQ$5s^8D?o1+64Bd6Watz&HAd_S0o&<(t=$`u)_B)Uv zG9CcO(A@xlW9S|SV8qbvMqw)PFBktghOR2$5W2bV;6xcTqJJEBwhYAvz6@07xU<(t zE@~f+J3F)o-gkiW3!Is&AkJ?BL&C2>#*aXRrq8#m1(JmhGI`(jcL@7;d#p!5z_W(m z{f0!4gW--KzeZ#$w4gQ)ehNJR1ccW_v}o9ROF@Ar#Xc&t9XHvI2Xf-Dk&2dFNrsnV zR^WJ`H`s9C&(Sqa$d0a~UAi_GGS!}SEs5$%uRhueJ*1_>*Xti=6AVX3$xehN#2Zqq z{yJ0r3dBjPRLhioctw9y#*WP0!$)DFup0>P`mTeatLRv2^qr^Gv;>6;si%JL4@YzdG#AuMX2QXzJ|48;j}x>VX-!Z|ZXW ziuf|hNyq(+oP2P4Kq|fL)bC^m7*YnN9yk-_^GoLfe#HmPe`x|KGaM<=SEdDt@+$g{ zz2JD(;fO}jdLkM{>j{pcwNmYVUO$!;k5~=-9GOmDObhDSf9h#12O}rA5{cYp7=v^4 zeYDx9V60&Q^v>1ku}C*T6bJ7-uk#htMHWot-l-4%99Yudn>&St*@C+mqKXEO*83T%QzXuv3>3Mrls5Cct7t)=#aW|dy z7YUqWu33l2k;8j?Vo985RBi_fEg6fsO7hTC?JeDdY|YeKT zfiIEZYk3FhE#1~%h_N@6hf?ns;;y^p0-MSF)o!MDOSpAD126(a{~;wo z)y~B3z2Mb|HSAHZ=)ZK9o~E=!%vGxwH3u*7fnn>zCERwXtTTF6khj%{YMt6AY ziCo@^wRd=3NL#Ln)N*-;w~GisIXLF$?C{PIbbUhK#yh-avcnraWMeahiAnG9mYF-e za?plP0X-`MYY^{bbQ|p!(K#UA+O?_tkkSF5L{Obuz41A06FL4vd%LfRC|F-KVrXx- z%;LS>$1#rhSh8nUHTqQ9;yvEag`Y>vJ+jB^Lh?px^fa%FX7Am=t#j}3u11gSQeJFZ zME7`mA{D*Q+jYc5t=1!erf>g!vd8N}+Ize%WQ=MqT2-pyFb+L+FF+aI-pDnPG#x&CQl`Tm0C+lFjRGUTA{8?omIF`I;Z~5M)8R@fgo?7KLlfsrhbGdQ z4oxIahs{tEb2?n2Xzw;SA2pbtR-bol^C>aMy<=Nbw1~H3+eT>79b0?J+kvIVd24x| zu*F^SdI{0B_okFKXzkg|E+ zrKfJ)7Rz!W?G0NO(tfgHHf(!}H1eeA8OG6X+IO8O77xttgju#%6E=X)TC=)e5AQ$eRIFPC$SBi9fixl>n}~b`V7E5@R->!??IO)(jGKq?Zq2J zMQ6dZmbYNAa@?Z8bLu{e);v1DZXF6NT`3`FMrak!{6}BPho>#h2#m5 z;@U4yhF2|q`5{wcm45l>!sYVIXAAPL{PI%uCAN;$H0Ytn&w9*`7*&%7084KYG`2!x z3;P30uMjl04wf45jv!vzJCE`fP9A~rTE-72II^%5s$)?OJl%!7@zdPq7>QA+sM=b_ zXS6XfU(vqOCbby*1Z~fv=RcQ!=w(YTJ?h5K1=M0q`{4I|eBE$KVbcPDg^0uH>E3h@ z9-!j!9?R3LR2}&c<=o_y^ZGIS{sJABe~x+(G~Zloc$BKA@T(R%yf2bOy2#6aX2M+q zd7>d^L=M9$r`~ka`i7mmgeu?5x^>xwup?B31<59aJ3`gB zsAC(L;W|Q917YL^mLgO&L6xFm1e%*`ELGn%uMX2hAYIB6DCCKc2+i$W_7=a1k z;xGaSz~y}A@8UujftBFmFap&8*kAn9p_RL&RQ7bLj!PtbkC#Ci0 zgf0}m(BlYIHj=GXe40ncw;qKWKVuB>wx2|(Dk9{<46iFf)oMcSC1gy5s?i(tXyZdX zc7!S$nL#SWetAss!;CMF%OUyiM5tOW1*MbBzZIcsz2rEJa@Y~7Y$UBNu@S0VG}~mv zNeB2PuToHdZUU}doIcN62uAt_xg2;Wdl6xg zy-|*29}R%NL0$*Ih)^|M)aKC`6QRmQt70^ww)z|71Fz^-;_VnaLX`^{`wcSnmp*I4 z5vuYwX#wzoq7kZGNcz&(j8J70c}by9eJe$%dey95r3h6nYHWlm7ZJn#??kBDA;t07 ztRg~{&BFsTUWBUMB7|Ba8lmc#U>gv&QiQ52WCn&eXhx_S@1Ua*ss>0ufz^pnl`PK` zeWM%=FGUfmhB=gIgsR^h+`o-b_3R2*C!)E06dmUb5E(+T5vpd&XoyCrDt*jrHO?nL z=}!z{$3mM|M=UalP<4G>vB)Gs)g`%NkyRC;s$M;@$nH;Oi>zUNvB;{3Q1uMxW`wFg zabkllGKo<291c9NMJ5rdW;Yg#Od?bzoFNvOM5sCoX){9AwMd&0sya6ni%TL@ebx*W zB#TfYRLyGcbw#K;fV3H*YEB+Z*vr8$5vshcy{-sVk0Bi!q3T6xeO_K-B2>9(@gh{c zCYgDJ+Yzc<$e2&|T{PDx`#M6^YMRV+gsKVxkzGfq%6l9sHY7MgRS_lK5vu-)&WW0q zHD1+I44ak|p=ucVCTdz{n`ApeRRckCQ&5DeLfodsrsbQ+?3k7&8=01mf{RVd-@)aW zmM$)smhXUzP0Kt0wrNQbsya%kJT1pWs4{6N3J1y@`7TnW2vy@mXib_!s*X^#n3~au zQ1u=LpcA2LHxca!Rn{W-dlI24kKn(EP*oGdmLpUx2H-@f8irg>gsPcHI1#GKh$0cH ztP&=KuSeFH2vtR|=`Q8&i5sEHq+7WRZFFwLude0j!<<+3s@{TB@)SOg)SoCH2_Y8Dm!-` zIfR}uV zP&E-6R{h1Hj!^ZLWMZc!CPI~qMiHv~m@a?cBH^N3RG3peL9F_O2P`3qQ1z=6$3rqU zLY0dcFG7`z0d~jVj!>0RrpFuHs=tg-)mZrW%g-tzR5cYI$4IFW8vl?&3r>-afGVcXNp%S5vuYq31lq?(u`0wjF7(q85^N$(PrHmY>rkP zp~`0C@f7PP#zd%^iL(A8Le+LDG1fgaBNcJn;tzze4z-OPp~^;**0B+)T(qbi?s|L3 zUf~gu%p)(>EBs7|QLpgtMyRSV#l}Raa?!{u{Pz*6%BUSFLe-cy;uSstfFo4x1HkTK zHC$TA?jhZ5>yA)05g3k8wGsgPhuzy5{^3bcmN#Ww{-G;EmCeRa3vJ3&icnQSY8w7w z5T&qx7!#qY-RpX!#kz-Pzh_=5OykkLkqMCGc!#-*Q4D#9CxB(|upcf4biBi1L?-WW z6|jzbx0tY)kJ_Cj?%k^Z*u6{aV7qr5p{kr1$vf-~ypuim37vf&knCI@2Ef@Hb+ohd zd##nCHjm1f2vsgx6{FI^zYrbo$dF#)7yEXEDi<==JFFC;Dk4(~?OaukP-RoOKWS2l ziBL6+s!S28#-N7L2vsx8MLJ%DDw84pB0Wn)@N{NJsB$4=7HJpFod0x$s-9w{kuPUN zs48^O(Fj$$Wu*aYG(wfL4%iW@$O$`7W>#=kicq!5p;eAEMe&O-m%hU*jF<>jk2;jf zIq4hnhBADR(>JT^KaNmU*)N=Sllxa2eNT;f40!+A^VGy`-@Dr zs!#6!KhmxPJgTZ`-<#cR5)xox*CdM|p$URWXo`xOC`yqMT7notkz%0)MG&O~6cq#w z0)jOWMT``&A)k$)V8Ip@Mg34??}`OMMfu;EGxzQ}cQ*n4kLNMYnVD1WDRbt`d+yy$ zqSl2k!w>0Vc#XC(neq?13i4^(xXj#MOPU32{w9TK^H2 z)ky0Q*XSW8#8r*74sjhn)P%TJAk6_19pZXb^{xqV2{R7Fbv~Xc8i!~hiY~-;9Udtf zhd5CeyAYQ!*|#Hz>+V4khxiwn-8e*7O^xCZZ$pdY5S>A|aRNgNafl>z5yv4ehL#hD zV2DeKI~>F%YP<&?4&oAB>cA+(r8DC~T)G0hjoKhCQ6)zqvKE6I196E0cV#TZB~laO z5~dDu=`3vV3gQx`260v0hh_}Qm&1%eT-NTc?;3uDWsBr!Orz;ST*Bn&mFGuToD3|Bx{YxlE-8dZ$$OZ2 zL4?u6%#r>G%j=Spr>Ym?(q%^mag|fg62x^g#*HDaZ6Npza{vUNVX}vLAg-}s@DXMu z2tLAexIjC?yf4i-9K@x!Rvlqz*tKubRZ-)#Bg{cm7a!t!LrpO68O8%~i55d#W6)yv z5M!-DMRbVy3S2(KoHblK#N?2e4l%31bx$EB#Kj?|*@bcnc?blbLVgFKL0pxjNQap2 zg<5v&0hN6|n0$zN83bo$;5^^ys3=}hk-#tU)1 zsR}S5E}cn71q0#|VJ#4s{sgfQmoANgxOCx>LR^xkR)|Ya^!g8g{)*vn!67rAc$Y*xz$YO~Dak&x=;&OS1g}9b(hj$_^uNmSZM<@p3 zlCh0KT#GjQtdDcZLmQ4M>_S|>BBB2X%PU1D#Pt9U*nH`zCWvb`pm+AjZmPo`SqV;c z?2**~aixqgA+F)$Oo%IWya{prj5K>>0&$JH*o3&2A+1APFCwi&Tq`dzA+ED8Ga;@Y zk=B2NrSn7+;@UgKgt$f)n-JH2q+=j1>3!Z_ybzZziwkjy0?%+4;?kL(GyhgyW}NvI z#FazFOhH^FL?XL_xGE`y3^<0-kFZ#4ku)K$))<_qYuTVmnHU%1dInsq$Z)X25`144E!3qZK8rJ)7avK_{nUCYJLa$HM>xTH8X%U*~} zlX)R7T@(v(iS#fKS2lH{263HqsRnV4BB29ul_KFlT$M!E0&z`6DGYHP1mQwldy&h9 zxUwG9Ag(+l9Eht_3Bs=+s~6&WOARRxPke|=)2IpJ5|tx>xHQefL0s>umL-zKjtg;V z3h|?7VbL%lE}iLFNk#@^B`JtYT3-Xi^)W05LtN7)3&eFSY)2I0lH6X1tJNfdxc&mc zKf;oW{85NYvNffC&>*gf(2hb}qQw5X25~(GB?ICTJs0BIg{lq@iu@DP_|;wc#eap}Ui5SOlSR1nwOYQAxhx0WAaX)SuSLR_MgL}Nxy zN-YqVsCpnSnWS+cE|GEJ`XtTVE@d&qHDjur3I*b-gb|1&Ty8>Kdx<#&%ovD^LOb|( zIEYKsjs)V$sz7Jd{39$cOHtnAp$>H@h)Wbrh)bB%>KKSimqq>XI1ra8^33y|3cnIz z^i+7n5SL!87vj=oM+R}_Q9lyIwG-pUr^0_gFvQjI3OOEL41$k`Wgtw5YZo|tK1`Y> z=fg4(?iI*`(xAgZT%yLSB`(BOLe139hZ9jtT!?FznrYtSp+4@J=Zg|UTyLW!_jI_4 zs-e?i{*`h%d>DiaaqT5BoeqDxlWqRv(gK3>9QJTC9OaOaY=WZ5SPyMo(^LnE-@PvxrzgE ziIm5ajEV>1+Dng25Z6vTp$2hDHr}M;LR^|c{7rhPXs|hRAugTi*`$pOy8RP~OT08X z%jpo8%hn(+*(;!`L0n=)iOE00LWi&(QD!W}<;r4#Du%e6r4kEqxsuqN3~|X6`F}!O zvFF0&_F_CtA_egQalNM&o`SeGK+xpBoF#5Ib<1aa*Imm#iH5DakzX9>iW4}u}Cg&-K>dJ_agTnVU3hq$B}S!jk1adp8} z9RuPjMYU0gYq#oo>Yo^htCBPc;(7yRxF3A#C0Sh9sL@;PtTBlw1m+w7y9TpxBE{i0d{8^|!d1EH)voa-?g0i|bt| z2*g!^DuZ>Fm=M=lNb3;SyEmH<*N3;55Z8!O6XI&U)P%TJ-D*NyuOh8OT>m1iLtM`; zGa;_-%T0)DKGHv3i|wLgs`}Miq+=kik5uobVh#k{x448E2jW_bXNtxlT8Lr_<)*i| zs_}@?IK+v%*oC-+$-W&yTz{e)_^R!25N;fztENVAh?A%@aA!7r3$)xggrS8v#6{5J zIK*~nIdKSvxTLtlL0qE7d*I<9F43h9j6z&GGcLrXE5O^R4dN12hPd$Mu2_gm6u2v6 zAuf@c5SK7@h)ZW-i&qerFze96VQN4l@FAl@fEvZ6?H3Ma;#-^uERQ ziJEOD#3jrlfw-)VXwKkNpzTHUp7I=9%4$VB09vJeY+fD?gZf;VyZ|?hnU~Nbx$F|hrz`mX7(L&3JKgP zr;t1l+94*76zLGN3Vb(vsbv2cOg_Z4yi2lA2B95d7D}^uHhLj0T~@toeR zCd8#Py@wbt#Pz8vz=XJTCLI+Fh)aaLrO;U+_AM^`31T5GT^a*%>B1w0xFiqH&6?ig z5*?nHaUm{Ipx)3RF5$KyZY;zlmX(f0I>hC&HHb@wg#05H;*vEL2jX%i8pP%D4hwNj z`vl&Jw7h1BiyWaCh)c#c3UN((%V(`%4{bB1unTeZzuSbkTHRwpTnS}|fw(?^fo=s??B zxO%TMA+B4H*5Bgl`>+XdJ&iQ~=Ht_K*n=CqDGtOXz0cc=7vj=oaUm{I;2G{hTsqTp z=HIHzj5EK2xT?sQDTph$2_&*Bh%1j$>_{-gRZ2+{;<^@t6Ll>ce5OncyO#78S0=_L z>RL9^#V*7pOzsMTxSC+R*tML4%&u$MLQ^BxauAIwxt5PX%XKXcEx499K#N_=Z=mJ4 zmJD%8acq{o5SJ$NLR`8i7UB}=VIZzb>P8LXT7>(t?ps`YN$5aaS&u{^t~{b^fw*2r zDGYH9!~At2t`g*OA+AkGxNmV)lSJO)%6e42#nlQ~y%5*uYDjr_;zL}TMokcxsMI6l zTKijEn&#mkuCGHIBnVywoWH45eg1DshH9%aatrv)^YJ)&r zGdAiFm*mc-Ueey;nul!s7FRy9F~oH@h$zG**}M?f%g7dmxJ1bdan(mj2E-+Lyyeqd zT-j*hVIeNb#D^B|TU@$~Ag6C;%|Eh#FYml z5Gi`Zgt$tGxe3e|i0ez$8x3f(*76pYsPTOAUWN3$#kC1_)dq1%Q4Og^?IRyL)S)0Q zQ8XbgVN$DOATC`N^~2*pT%yP`&wDETN`%o<;Sobzda+)JOP3uP#8plGND$ZYkIJd= z0uT&wEdjwdAh(0yROo%J{F*zSz1cJ|pe}jlZT+*N*b)<1VG~eP9HC`=oA+F$K zC_p|ndUtn>f@eyz9=!ob<*S7=`e??q0`}`;PM5?)F-slVF`)pbT}4V z_jp%HT-c)@!Q|uJ^v!a-s|2B)4z0(bNThC&HHb_03aDxjml#oEGQ>rPupUun zEX3u?Vu31#xSXXD3vs!U*qjV;$rSm2LR_)u!sYf9JWL`5@d0stqZXcmxJn_&Jl(d= z!Y{Y4x10P&9T9gB#C0Qv+<>?wBSTzIKr`koE>R#m8Ut}@vRH^qgzG7z266p_N*Lm5 z_LKv0i6%o_WzT33S0!dDLtJ-2m*3*52H`?ndr3?X*YQsa#5Dn8hPWnz!*6jt3W6c7 zFF`QG)ebc<#8m`Bhq$B}S!l2hag{#nfw;1sz!SM|aeb?Lp86*S;>sgUg1Fi~r$bzl z#f6QgL#n;SrIpCAQ3b?0#3gcCWVJzDx>_v|m#B52(&D_uC1SU&dyKa35ivbIx3&IO zx2+6ui9DoAKbp6=Bqu**EfALs8ijCNh)c2p;<{!uLtHV{twUTL-!LJrlixHUuKysd zf2i==LA+GLtq-Y%CL|yDcT*74Ejv%g~cx;YC zY({1`4$)Opqd3GOXmK3kduX|F2tx~Th^^4#I7Ai*Cl0|7mlVg|R4pGW6gA!h4+n9H zE_GlO;?kLMAue43-bQT@m#8wtH4=jv^A?vVa974cTq5PuqWhsjVd@Z<&cYV2ATD8Q z5ZB(#IHJ^fR}M1*ab-P8=N2&ax41?T^BZD%A+BH4Y%?J)VUm?P+=mKFQSuQ%TvDd@ z3{wllB{@upOPCzJ@Ez5!uCT#a|j5oQ1gKEiwr!ac&gFU>d{#HF`Z9br6gaqXqX zX-AmHQA>P?>sK|wyk{5>#3fqOG2@CFy{{c&vbLZiI>g)qE+1m{gK#0PQ6#2AOx_3D zDWsgZIE8!wCZ9sad?=@o^&qrEOf@OeA?A1R-7`?ue^mC<{wvu_K=2`ECkX8jvrwAN zv(XE2>9QJTBc4_uuDz<4IHur!s8DBm4>4Yd>o-+EXIir7r#1~O9cEkEI+KnH2E-*o z-csnS5DRhXPY?@n>Cza8OBWs~#3gxZg}6kAmsnhgOBAR#G>A*MEr=TnafxN6W04MV zxoi#Mk|81g$c4CMvBZJ6T!{v8xxB+dTm^r@JCT;x3~`Yo6a#U|*hV3)ydQj4-?Qlw zQo}u(hxQN>`deJ{J~AP$qK^*)adpMnNFXlu$huY64smURT>nsE!!JyT>jk9s4;8Nc z(uBA&zcwMR^O4pet~p5SZ*dLy#)P>3`qqTF)_i9|T;C(DLtGF3WI|jSKbsKO!$`-x z#U;JZ+lv?C(q(ZWE>Yka?m}ET({twEs>_Tszk;|%kug&cS2>Z$t{|>zN+E;1#g+9G zk|xCU$>+Lj+2D6&VqA!88pbB-S~k+fF2p5F?h1mqW_~5E<%h`Zx|S_8HF7OCLW^C? z`XF4_($Ioy`8kB_TJ`|pxRwlYNpWnJy%3is^Fmy@C>G)p>0uzQJnBXb;`#~`(1o~4 zNa#RZn~-qc;;JUP7KrNvOk0My9tYtoO=A z5SQq=5Z7X~@UReK zFanXMz|=of7<>lIv|r*tT>DjT91h|VwIhMJa!^-o5SJ9?Js#>%hl037(S*2!Nv)27 zxO7?6503+Ji6YND@2T)B5k^miM+|Z4#d;wwU3O#;S26V?L0t1OZhZ0a2@ni%eG7t* zhgrYM@vs1d32`k3hp#|x1;OXTg5R|B;X!H8;UF$i*>9F4Kaypyq() z7Klr_J51Bt{ZOIK^qvl5Aucf+H9%Y<eiBZF@L1mY4ejm~m9#O1Ozh)ebgsA>?G7*S#}#6^d&9#Lj2#O2Cj zfhvZ$oTU;Aak-M%oD6Zv6#0KbT(RfE<@O*vOd}U+crO9F;E)lM$j2gt%2bD0yH5-I_i%T>a z;`;k<4dTkfOl64c59l())tye!_+nwW|r$Fcsmoy^_4b~y99}apTu1%;m3UU3ddY<|x2I8tFO@g?t|3`=(HcI^0g^gAnn_w*yIW4li zb6YQqwv{0+k^es+F3HJHSqsD^gGM2oS25}cI8alYS58?zYSW2C)-v5X?^c%B^+|JI{WBX-tZ%7 zt)Wq2*WGGa38b3=4OMA-Py>I+LFZm4s*QJ(YI~@Kc0u)QS9KvOSE{$MYK6TqGr^kl z4wNRiO0%8vLLH>MUQnp82hX#t+uK3)R#%mNh;7_jcrAeg$?2`}Yl@TZVmcc%ay*a6 zKd}{ZYZd~_kFog62hpoDZFrmR~yKxxcvlk@(@dw0@AB=}PK0_E}cBT^Xi*+M;)o zEW2R$i`cKj7zE0KclwF9jBOf?*FL3LwN>_ES;ktXF?u~Y$?Q8F^wBLCj zkJsK$Ys+r_WrE+zqA71#!Q0RCTii8mRoA5Ul&)#Z#Rg|1&3)6B+ZXv6Y3`kN{+xvSJPTFo+#gur>?iwzE${a8X=Rjo>acA3U z;TOTZ1&pG!K7Q*hA}$88hlrm+d`(2x^ZnKxMBD&k4H3IRY$D=>zJBXzB4&bk5ya5O zXhlhe>RI}m`%trVdsusLkFkdp;D1WxHeF?B3y%u*H7)V)@ra4kITiNVvutYwDEkn2 zYMrN}v~iOw_+fc`REB5lud&RQEwikCVKQU(!0)FefSw5YO*_%w@3`Fmz*14NUsEgh z=E4Mv)cR#v)}Vz*^lR3Qnptj_WU9wljJDVX3u>Go-Tas!RD?Er)%l3>jNWe);Rb?GIboG#@jQW?taU_|u=Oa}VmdGtjUtc0%{ zF9VQ6K$39)IS?cn2J~Q-zHx&m8f~#%v10S)QU#G7K2r8Ta8pVVG}_&J^r#b zBPN;lY!cVw+R{meJ)6wW>e$jL{;~Arz4H841>!Xow{zM_CE_Dw||Cef1@nS z$B2KRaIa==;dnGC4+7sTf7|d45Y7c7eCi;-wTOtNAXb1Fo`FB*r1x4{xEgAwlJr|h zdk~R3*l!I0ap4$r$w$YkCr+Wh-wxl1$Gx#);>SJF4ZlFwYg%c&+RfJ_W95*QCDV#h zb3PVcP8{mDI)M>B z6~q}t>;TaV#PChj9!yqRH3z_a1?j@M_>%`FOzP?3cKKv|!EN}8Wt9;3ZM#c&DYz}b zC~T1e!${o4u&vv{?E*$o5s0&h*bkx)5giKr)=(lQfEY!@9Uv|v;&l+yi8y8$29Jnd zAQlsG4TzOQYy`2Ih)+Rm05NnA+O$e~o%%la+hfx0i+%+682h3OXehJ$lCJU#7RqpC znTIROOr=!mD!*o?+hbKJW4RO>U-DOaz|%NLV|X*NDBD53K5oi=+$B7w%k6a#CejF0 z*mris@0EkHx4IeL1LYVSEyFYR(j?ouAOH0`o{Y3T@XDu%CVRy8J3DH#J6cg&4&O-G z@6HEMu=R}n2VBFU`RI#JI%0~cVsbyBVg@~e(sRFNa$6f{eA*w4A9VV+;C{v=Z5g@W zhEMTXgAQUh$^DMW|73&vJ(FuMMz$ZQeS^{~LH^3zk?%m^HzqG8@^>aXRf60{Buqrk zacXU>M?cyHeKBjiYlE6)H@~@#yEb4YltUJOR|#KWtc>Wc!s}uLq_QsNY3t&3%!$xQ zOnRq16=)Byj~9?(5iN^S5G#mC8Sb~rK@7hgZK{^_(H+c3k;cE}_Hq!3RAhzSaD9Tc z3zYpJcxq;B1?3rN%200amA+8EX9@bkeN^#1r=XUj_dV%BGo8ZO_xu#)czny`g6z9-l1l-&bmM@lc0x}(15-YivjU1cC^oCKrmViJh&nOA5U$mfyP4P=)Q z#x#gLfVA#={(y9xiSTwRCc={#U8hZT&?cS;SF=b07}TM3{(n1>Y9; z0?Y+Sv+tP)rt5o_Qi6QXQ$}jOXBBbD_nZwb`<^d=VBfRpDDgcX0KvZJ4PaFlt`UZVQ;}w{s5GH4R~rw-wMi^ z(&Bqk26zB1RQ<|PI%%gkN?oFkQWxHf*-`4^I7&gug%~pC;uz!#mf)#)KNLr457N4$ z)a@b}ZgG^BBhACzPkECcBJFjQT1hoW=O}fMT(_Zdk*u*YnH@)|+^!ON0Z-=J(0F$h zADz=fUa-gMxgXW(PLER;`Q(wvIBARH^aOD(kBoA-n$wd50XsdPLgit*y~{0PEz zdP+$TPEU6*+37iVf;c^QgK(Xmw_2$|ZirU6PEYpnig|$T$vfx%dvhP+p4DLA*bhMD4qsJcm;@a ziD-5y+!_$W*PuN?ghj~d83N{WNEc4SpBymR>A3;iCB!ACrB+iGe4Sw+*w-lq!EVqCAlT{o0|YxgCrlKlXDSGGdhQ3oPS0)-?DW)`Bu>v6 zAY7;Ce(7~y@9~|UUAjtqr{^PGrADV`>$kS`4LLp6qBFcs&s#Q+>2kXq!bBQ@3j4`Q z+u8uie%#IQDk#TrXc;Q(4MEG=MTJ+px>1j+%5FqKuW~!PjhbXnVfNSsNv~>aP3@Ri zdMaRYRKXgmDbp#NcH>AfI$7H=3*SPks%VfW_?w1k9t@V2jE1(a%I*{*-`8MbIut#L zVtCBI1HrCu^T{$DhJ)Z)uml9pf=UoP_<<=h_@{#4!Ji0%J>D`9H24>iuj*9S0BwNB z%fW~1q+L8AXtXa-F75?U7k7!S5`VNS>_-8ZSJHSChhhi&O?zrfjK^AgZwfSSbu}o+ zqhfX+sp$Y8M=JXiu997Fx;|q6i<`kC=9K+0%8tB^p5YNwZU!%5>s<`a_5P;3a&stw zmCL7;5=zhrwJ(-|nGJ&1>FXePU_w)6U@ic`XOej{)Ch6!=eAXIQI;OYpl~#LqEfGO zFD2fzPYu6oSq&eq<;N~m?!4u{K z5Ns{drpbgk3j|M?%R#u-;_4HOCa2ru)!}A*^oX=USBXD=HtQ-heCOAi=!W%*` zuJn-C`+J8EUg@{)0)ri-65@Vj_vGN*CQ6Wlv<8iwvt5F7)x;$S=~r;sK{^X1u!D3n z2oBD5nJx~}1Q6^Xm4o2m-1{KdL27`(Vh5==2sb#lUvE4G=Pp$1<3hDQD1KL0A6Rmb z3>Azs{*~L+?NwhYPvxd3QkIjl#n;NxhX?&$=tGCiG% zNb4b?mys4vhl8s1X2yCti6^PX9i69BUve!)<03;)EUzc!>G0?U0VMb?^k=6h&$WuJ zPRBJby8=N^9?KjO(O5RTMjOjw;?h{23oei4ohX)v@Bj!NxsF%M$Xx=0M{YF;9=Q)e z(8v{Ch3q^7HiIC~m~Gt!(q1}+v9miwjpdN&SYD>9&{!HO$VXPJ2fE1~mg(5Js1>WW z`CwjdZ<1o@Glq6SwQj|Z&c~y&JwD#IcqGloYgCRti!7Zby{~*b?)@t2%&Yv(!<*;( zEw|%??@PzmxmN4=JmONv=Yh)|e;Wwy!e2q~2+X`r7SUD^JQNKU$WV+1!9(#F2p$S7 z<>(?B(^0b{w1~`2h8EFPx(ao?p+f!Ms1$9Cyze}yxU2mz3{}+lS^m6m=h=RX#wC0M zh%q44Ec^iCYP)y%1#sPd7)4x~fEjbNe%M4@>W2~FazES$g8ShR2=0gL=Sn}k27>$H zxDx4y$so8NDnW2R1m|h}@Lu*|`{4&&C2l`(SkeMG#~%79l+Paeiy#)gjCf-LM%(q! zvq=vg`Z7q_Lq8Kz4ohAQf;{y5ZHh~dB0Uw4tgwran06IrZueuIIer7})Euo!O%UIz zw6l5`csZEk7rhqaTLlMW4jg?nf~v}N3P<$BitIo+x^vYY&Dul_hI3VDqhjm7NTeoo zE}C|O-#UjF_*Y>+huF#}dJcc%*ypH|AU;XyOlTbMYAkVmlFS75I4kUGII=fVIelHN zXn&+BEr4@fRDS@QMSrZ+`{RG{T(~=&vZtf$$m@7W&2w38??Zp&P#2KvaxB_dsuI1! zc{lp4Y%mJ%>guzqiJO_wbG3aO_Rj1*NF^n7#V&dVG)gFm{NZwB$)_yTu~o!POXw2* z6WoSi6b)J!?O}LpUDY%1<7eIl1@9q_U~{|q2~DGcnJ-X+eu&FoWFF#PMp{3_opzIZ zh~xdM1Zg?MQQtU`>&u#;%@c4!%lZgyrbFDHP`s7SZZCqkn~1X(V;;~Ut_#|e2R%B( zT@GeHq}f)KQf3DXtfB;&h%Hc=cB1skSxrA~a@pH`U+d`CvALXf5bG>cR|K3I-EB2z_){5sFBpN-OM?^AoIVK-rgr zr@Ct)D5tyR^hz1vA4shf*02lu*VtW8HA8nP#K+rR1$YX*yBV3$fIxK2d>m~@sQ3+upwX?#`0|NUHD0`Qi z;d@X{4{I69?UGZ~xMB&Thv%b*gTJAA-EkhULV8fJ)OASfj&ss&uH#IbLZlzk-Vosm zspjY$=Q7E)8I6l9L$SK!Os2Y=`VNkBIAf*XS_?)YnQW^XT$t>lN#Kqm2L7$Jzn~55 z>*h`$MmMlyRUekyqfQeu%^}Cl=nQu@9i2N$WqaJw$Iuqd9nEy=T8*|v+N?6&QhK&g z)p!bWOQ%3c&!+aHQeyLd)Tk0qIaUpHPC*C2h)5jp#bvpS@&2`EnJ-AK_AZ6F-W=Pp}`U->_ z+f1Ib*$r-vIzur5i(&Tt7H55{;AZ3FvA$`G#PmG#E^}YJ0cm}KS0Sw}@JQrt zcVFb`*%#?J!Od%10 zslx6Kle7qweKL5;B=rO3SQs8Dl>rBODV!FuU675dMPA>BOupT`OKW$G-Bl-Bo>guR zaUs&$5J$H>9^fsI$^h%oha_IU7Azsv^Z=@-g?9Vu7! z%Utf4d(kiMbP)9RYP5zQ`>2A^%ka#ZPT{jqc;p3?qn(#1`edE0D)({aAER=PKJ|!3 zpL#^2Pd%LIQ&4g}#km^df>f~Q{pKcmAJW`r*+dT^t#6_iu5mZf+i4TM7isS%+DfW9 zx=pl$wY+T|?!NdEh2{3>2WTBM%y1yBbODFaiJD9XBPzzAX@; z)nQ*tx?x63nuoB-V+}b8evm*V-+Hft&7fcd2Ub`UmEKB-y59 ztzA?I?s+bEJSeAo2STKG@AKSIuM9+n8E%GYZbxM%+@wbAX41Ib&_I)K+lC7`Bzeq~ zthJN-g8PcgrAx|c4tx<9g)7H+sGEC3<9k;ldKr3@x(vO}u9oGn9GzenG-?mShbg?? zzU%?N`?2oAftW=(Fm{0@DJfy!S{P6;3QxeFV&cwCX%g-YF0GI73J_-!@ezogq}Kvh zu*;!`RnjBe>OsGC5*S5OL39Jrs0yN@ok*RBRESkPV-@1eTCO&|_^e^-ja$F`gH=vqtNeQO=uQ*_r(RvO&20cfdMB>GEiW0v@C4}zY zkMp-=C({^M!t#=Yvdxe{p#>)WEK#72MENP9x?bi~yGdvd>N7N_+wg{l{sJ}?bPn>& zlY%m-pwg5OTCyskjMjVMpJ+}tMnD<}cEh?D*hLtEHXu|>Z#Mj`;pj7 ziAlbep+QT0Rz?pszqn0PeaD7>L4gw>z`xKh(B3I+YR+v+ZXB9fidXY=X1>35=$W0i zwM&@X&lmZRMen@@HWkzi%kBp~584t+^)k04H03t^p%?T_0u>}JqOwj$w&SGL$ZuNjwq%KVHNh8d@lnCw_dzPH8K}*ga9CyL# zYP8_&!Eu&b;d5wa*4LQHQa|^^R{`pY2ko+9G-C^CZRL^j*UaB!^O`DZ z`H>fyp3XuD8D&8vm5GJ}rH6~@X zy&b7aO1&3oV}*P$TlYvQbR{ORA_cRcpds10P&J-nlL%WYVFV4Yw93f3Lv0`a7b^Y} z8;@wELCZJVmx9+#+mtPbplA`=Q3gT{_%otM)5$l6^|H&hx$|MWF20Dx-8AuQB4!gk z7GnQWw1u-^CTkLfc#L2yeG;$3MwD2xCm3D#4WqyuXIp}GEV-T=+)~-ky$SC|1txNv9Y=Dq>qzeY*S6ZXL8i~#Oyn`6fnCXCJK%EJ zWBcD4ICVyX_4^={+W%yyyV(D&wSfRD&-Pgh?eyOUAd*S{{|e%Pb*@UV(tj%kpo7P4Mj5^~GAM<2SfRpR^_ykYBc-%c zoYqsRO6gTmx(d#(MM@nFC6s@VMy99B-SH!L@>rT1BV6vqpm4yro(~wE7eF@Cm7Vzu z<|==$YI0xzTv=3bhl7HM7Ox88dX@*jLBp9uMW zq#JIhcX&A+>UEyq`al|j>q(R^3$`@5Y&Zm=t*_gLG%z5L%+fa?04QDki)A%PSQ`8g zN4uood{^OR?@&H^=zx?+`*zarz8>jz-e|BxIUZTyyX5S2UvYBT`49|^c%%)_%4K0o z@beQ-B9(rBSw`XXJt4|J0sQ>LEAW^86@I%LNZ7Badmnu9m)`P6f6TJMK-K9PP~+F2 zLvO=5TZvR?4gQW5ak3Hz!#g0}N@6Rt7e*~GL}e#GF=@ZA1$V~Z5QGx0hItby=>&!Z z>a(;i1R>f`4e1(qv((LL`?>6wQADcb4pHu*fgpDJ55Z=&FQ|%cYxQt zV+`s0%L*4;)r11yXkj5F{YmQ`q4W*g}*iou^fNz$%U<$0HLo&d3#SU;KIx%tp zT||M3q(na%iAF(~%*gxbnCymF*8z?Wh3G2)A4u=jr&0s{=IQ=faIf!!1V2x>0sm90 zaZG> zK!KLWwC`;zsh&W?{o8Cs~#h2y~Hjd!-*>TL-f^o>`S z#oA?ET7z9SRN~s@P%#=ZPug$-wQpO(IT*%O{<3QzLD!y-2<`?^pf!O9$O?V+f@LtN zH_{WA23s^J`x_#jjCv+~c}c`P**kC_sel=(AP3}0y&tmtZS{W8WwHIBOKa!{LnVGc z&^SFUZQyar@^{w9sZwtrkJBL6LDFTaeV1zvk}l=;LFjRi3>9i0R7?kn$7#E?p~i9g zO%!;XvSgferaMlN=r|d28K+1Yk5g-NoR$fIzz)su%HB!ns?5QB zNMs&agQ;csjcojv)Xd+6=aJ5I+t)1GK0_|;Yo^-Q)NEg;R`}A9R1u&mn)@4}eP@7; z*aGZPstDO$HTP$Rj<166r7_+5PbfPbBA&;FT61ea!%a_u^`B>G%<@0Ji})=R$H>gTJe+;ordB00#bzqOJQ1*{vzimt=8u zI*Y4I-HAb*FD?y*Ddt-EMzY;4%^re1-D2_97;%m+-tUSBCd@`|D#J>hk_9kHW;V3# zZdU5bUO)<6)}VwSiW%zG(oA~7Z3N3zE4Co#sjhsGf2p+`VD><6?9hZO5Lx-TiEZ^2 z4Ng3xCr%WHi6yJ_ge85H`Y6t$cT0ksm29=7GwO3|ZL8(qIQ@hXQn7Gy9}qYYw5**3 z$k6#vA!y%Wp5maKJr-QrtQB{{L&&n$ZjXSseZ9-Q50{wuCT+mB7Yt>M%Wj6ogRVwP zcsGv5E2Od9-T`4EwdX0jN?Q3ahSe_k3W64R_}-AMx6gP_otxjHPmaBd1bby25+?wB z40ha&UWEIS)FF|=JB7dW1=fSfla!s3KM-GmpigWRz4|^v(nQRJ zPFoP6Q}E|AX~r>VMqoyuY4|Lt^@1S(kn_(TjAVEL_``^AUqs3CP{?EuBOI+m_Dm#U zPkLgW2lJIZV`Gz@h_L9Op#3Yp4%QPdjgzJ3TzVc}iJ_MfO=vA_c3V0o!usXC19qrSg((XR3Y-GjP_Qu_A3Pc7 zWXU=DDJ1GT37V)`lCa*eKirUDb?Qp7ye$4h1C>SaFaJS=q(pRApYeO`)TxnHWM$SiWxF(z2Hn#PL*8Bd9r#xF24EhF7G zSKFs`Deuz|diH5Uh4yKv82dDb95xrIS;3IS+_Ymu6e}>8(O3b82n<=&WTTathos2` zNJQqMV;G*kksm)ZBo&z?(-@-rGte#U9ZW$rT?(&#fn#e7B{jtNpeVHIdF+)WvdLU%YE6}gDkq*izo!kw-y3d2FS=TqyU;% zJ%?teb7;0<;RaZM8O+BwL3+X1G`JKm3rr?OdteymBYW}!7=Y${p@rh#N;dGW&W_r^ zmFbuPlOMvBm_c2ZfV`42<0={cF1N`7VIMs|>Gealm4c~elRZ(b+(4E^sjRjCpeLX& zG%49de>g$pRZb8&3$WTcJNp7<9d5;7;I1VyPofh@9)^Ao2ppIf#6=pH1fLNOKUmx1WQ^)4uRqZ(NJb@=pJPcCZHRzVusfZbxY7 zT>tfbux^HYBSGdq96yR&`>h0-&sXWyd;Qjba2+M-F1~XVT7`{bhBTZe5z5KUw;rMG zg9FkFMaGVGZ+{kGw*yu*BCU&gFJ!TVq|34R8u*r$CvZ%9pr2#XG;7-ws-8-t3I`)7 z#kts*CX1?zRrIxxqpz&xhF=XWwylL6eq}9+ztX=(RYn^M{2Vr=HgwV3a6wEPbaBmX zFtloFL*WbWp)rU$Cl%qfmhs==)eJBSr{Yfz#iA$Lx#5)W{nqth6m5n0Rw4#~a}N=3 z{ouDAA|mjk-`WgfwS5sRZ!xkGvB540UOdze&1(4#I)QLlT;Dz;ea) zAXc|0NPHtCMW>?Jdq60V_I@dctqtFvm=i_ibAbV_69uXc71a&3^DqN+&*MTbQ{D3@ z2AgV{4_|7N6vXGvk^Y9N#Y-Sjk;?%i)D!W{8-??hIZ1SJ%>!g;)i6Mf%F&gPiRcFU zjAznl6?m;8=8Ir*;B|}&ywb!OE$yPNOd1mIR%pNe9Y=x5JLy!Pe;+?8PFpYZtFyFl`L16oeSBZsBEAv zJ1?4V4swsyWj!h1N-nbkf2ZoQUX<^7S2j;IvI%~s1eQqDYOucohR)g7b>X)0i{b<0d^K9qCWT$9Jrx&-nC$(XVxIg zQa#H&{|TWxAiF&_%VS`(-)hL<)5)d3JnhmSJkMBVkf-kxtONkVd0K71=lR7xF$FQ{=$V?b1p^7AQChV4eW;h9phVCV)p=H6@G+fY@%k&_n#3?`^j&80|o+q@8hFVG6S-ysQC!C z`Q~Jo&4&QvRbrPd2E})O9KB5F@xDTO3vuN~>G3U~VJJCz3n;lr83)cm8;oyGH+ARf zCg|~_b1dNB*&8*Kp?irxi4ipBz<`H?Lx4ABTI@Hgjq(oL9r zuuu!YohODYI#1MWcBUR58t#y%1FDRG93L8V7VQ9hdNr6Z_!$IfJ4`3Qh%#{b0L^c> zlibop{<^r~9qNOF%k9$GR#eR*e|Ek-5?su`@`TGkjHpbQLI2CS7JrML!{FZnLfuOH zLbAf6wUU-#Ci|CG*=2k&jqiG89bkUl@Gr>b-u21@m+yL=@w43ZS_p#gdX+#_^chm_ zU9a;-sv)Lrwbr{{o2XQ}>(w2uGvD=^0>ZuW+fT|Nn-p{9m-gOAq_=tRU98U~?s;8Y z^WJM{)v))f$kj{I9v<9MKkoUG!%o2~P}qh?f@0&XD@I*+G2T#gjklrbox7xH%v}mr z?b7-rX{o=SYJ(fE(#0IFQcdKL6+=d!N`8t#BrWsflbF#vE4nNeGSa0rKt_g2e8`A~ z?O7Q%26UI>o-H@hjrTiZnndQx=L;r=*yuCNa602WFU4~>hNDLD&NzlvykX}%CXSY~ zBvn(5OD6A0b!^X<`|EP3@dshjHqW6(b+2Z$S{VG`D`Or!AmSPx+z`im@KniP`-2-= zH9okbRm+1nmFiBSskBlaysI!X-3LDoQORb~9mkUDopgkv_0k>^E8}$>q`HfoZ(Q8v zKZ$$mYALD(Wx7Z2Ex1ZAM|TQGkIvZUd_grYYdeLZXmp?`Vzm|h4GW~g$vl~^lSa^x z)oeoyts48((Td-vjjCY{Bc;E{C6zJ`A{2fIa3Y9JKdBrC+>;>u5)8|F$tL(`6bW!> zC5)&PG|#lcr(lLENpi2haoGQ>-`W92xEREnAPR4M2R;ZXe}>oPP6Kxt7~uy%+zoPLp>;HyxF?vO@M-ls5uxAT9d@cySCtUbBv`R_-y+5VsE3g~lY1D1?JIAP5 ze;jq;*Z3B-e-2(Rpxf$d8eBu&PCwsyJ=Me)*mvt$zT+&L)CKmU$56I%Wz=d9U8G8< zPEEQWM%j+H+I1}jEO;UsyxJWtUVwC?j17~l_E0sZYh$U6C-NG9qI!a#AqnmDhyy?K zl*K%Mm&AYJPkYJDGu5A%nI6D0Xwj@J5nfd|^1I)v4}$uDsybhkX*DOsR;7#MR5eU; zbFjf%Ro`e;se3RdoKTaBRa&V(Uxd$ANOTH3|I#c5;}|m}A46$0kmC|XFbPw1^#JQB zbnvsN2BCx312Fv4W#MOoN_?uMZ08IeEyD(KI7HR;2mJh5uEr1rDzb?0W;?--)Co7^ z*Kahv=^Rxhq>`TJUso~^7qy+%TB(z7x7;%wxT?zjFCjuIemXNtY-{vtG=GmUQx72F zc<62ikpHhPj5|(n>K)AztX|@BIVGji6FuWH2l|4Q2~-B7rK$m$__d+VvQ?+qgM9GO z)ZOwzVWw7&^IMMl0FA_@l?pMH!BP)0`tFYq$Q0w6nz08jHc5i&V<=a3zhA|LcN0k3<$!>s z;}Qvg3zj0yAn7;-lJ2<7Z_<5b1s? zlOfXaCPb>slqHKoq=t+(IDtt2i`sOEbd!2o1(EJWf(laGNcKUbqS$D?@v4(KLN>v~ zMs=BqjlKpr^uO{943z%pBnT+|-ANEoicZH<eJECEZ&vu!#- zJq;W9^@3s=Ob?1_$k=hp{@bxcN z9ZN^SKxJCp!hQHrpelNr7t(@7ucM{O77Am`WvS>=4h&?bgSp&}$jU~Mok+5m)9Qt< z#E9Py0bI%h)+ibI+E%Brr!udG6c-k^hy=bcquliyi|CcQ)lP2;82M%F)=>JQ?<85e(x zA>u~a#Jt!_RM7C-3=N0uIX>%n=?Zf518=9bh9OG>yC?y={4=~=LAXD|>u5J7?Sb`h zZL^3F;}9Xnj*Pr~g&Y?t^8+R((!lqtCxT z)@O~EO1RH=ry=w;2Uz_dkic=Y==Yy+wThPVZc*eJr&goEa^PQsiDiflF`>QRax4Yy zlE2wQln=5?77^`|d<#oq!eq0oRC>>>j;sPwm@Xwb>s+>0b{xQh5gRt~nZNO1PSYg^_0ouG3rd_6C+T{wV)h|9tCPjViwKH4^pUh?z( z!9T8Ny=AvwX<1idGYyp61G_wc{jU5Se4hoavS|>`as0*L|8#o)&>lGVSQ~U-#8%avfjoRCP06fh?b)*-Y(|P%RBIN$ zviPjMYM*5dxP{sL=S9?q-g*uH%Sk+LWP(*XV0>;{4CJE8_!QH4E7t~Z1=Gp7tr}Ps z-A))VKA8J!Kik^I{LI`{Xvk+wH_pvRBYaaRZ&vP4r3u!2tg->)Tjt&i4^)-eCU@R8 z+d6Nl5B%)h*U-TioIquE%l!uz7Zjb7TXq4QQ7)%fZqv^2N0}a$TY+*EeR1yXDCctK zUuCtWw@aph(dWXp}c zQ?{J8yFvbfdt-ghYD=xY5l@xZuwt3D$W~8JKP5jzB-rvkvT(Y_%N-=00>* zpHXcKL0bJ$-N?2RKrTen^3HBcn)UERd8s}k{exjJeVCqW(M!K9!@OAnU0KqgJZoV+ zG}hYT<VH;ekdk1v{kHv>twM%y9 zrMk#NkZM=%BD*>!TH570{n8!Zr29phfL^uKO*&k0a$gD5r5s*`&~uZ{P@(WDRE(Q+ zgqZL&qk$VmUh z2I+yz@logI>f(0vHYeZUZlm5a;ZR+Q+A=8~#D>F~Z8i=wYshtvy z+j|#^@N^Omf>67z7g>O`cAbxVBM1{6xGAk6{1EDk`~>Uil73q-&%K`JsIUj(xhj!H6h^K7BrZIQu(H8H|Y#1a4NYi2o>`t zot1g76h4vqaf{Q*a$9hX2uF}`TxW3!wcCO@)Twk^uoHxQTksHyaBmA1lh|`xu$*`? zw*{YZ#eSRaPUN`q6b*+ zPNeWbJo>-1x?TanlZsv@`$a0G^AJ`SZj=n=mqN_7gHMiAW8rbiyISfxV%=G4X>xqn zdmS-dgmqAIK>4Ev%kf7ICi|l;$#R;P+?U&(uY^gxZ6KM{XRs4J3CivXp0eDRf>I`R z9>+|SNuB4IRLYF=`VFeNTj3(x1vi3sCY#ixe#)fsd3`z(a$dIw!K8kPw02&1OsbsE zr}Y<;s!s2b9fJ~$^LlICNY~Hnw;)}^dA+b38nm|_25lW|;Ylc%9xvP%uQH4P!M5-- zc>*>8*CpcpsUcBY_>~AVXeh5sY>?lE%wBq6nsqr00Z%sF1XhYVkB@WoH<%t1Xvho` z$VdO-H>%#{dFeU&8!|mBAN{lHTX8#9+br7}lV4aQk zI0n+F-3fw6jn>#dT6<_Z1A8(vtxQO}G=foLGsp}}t zFdWk@8fT~yUG4x+oZ&~29Z%IzoFNg{fhErHjTUEkZ;@&aO)`lyR7cOehE$z-tF<$) zAy#Kz67ToM8M34j-kps&1D&wlNQ16sL>frT6Kl|QjaUQen$d?P(G zVDd$DE!vPTZS_VQ=0KOD4Ud3uqYaLByl8_XixX|2S$CaObOQDKJ7m{K(wxH;K$>ys zcD_5`?h;MDFNOIAmD*-ozUCM0ldM`u5>6*izIM z(x`uvnru9|)fQr~oGrv)@)n{(8e-va!sn0%$MxIFVq^`+E;(@l!a42~1r6Z%2B8WH zNQ9)}jyeS-u6B7t448&O49u43U_mN< zUM6xJ0Gjd@#=(-{VsE3zQTTGR>RQ-y8H=(;og8%52#O*C4OhQ$RMEELEuvTPDPc9u~R zp6+RUD(__J9=4+ors4~3BVPnNd;)r+3PgyGSdJ2pQl;-Se#@&11VdlLaa5P~Zdr$g ze}X@BA?|({!sC>16ZrJ6kOnR$g}54BT}o zKC89#DAkWZTk6aO_(=*6kK&}uHQv%TR!g!Q3l1Qa0Qdi3~yM1BgAXf5Ebz z{Q*zC)?R!Htk~ZeVCAzfCM(9lz1DRI%!19@E9GJt!9#D0r{Br;st%x5_sznYNU*)? z9b|j;4bp6%dIv{i6$U$u6?4=($mZxCr0GSVK%XGnv$}xu*u3-!vU!<>G@F;cK{hWR z9!Rk2m8um&E@Yrz5Oe5)FTuvAMKHFJcaejgg8^J(A${6l6Ak)+;PK%Oh?&zz0}6BS zr<%CA%LZU^Xli_3{f(`K6&{?_R)4-&VN%%_SA>%NdKBSaG((Y;DDUedMB>XI- z&Nq}A6+;@iA0m1|A&?iOMIHGE>G%2~Jv3N`bm0RS|4mQ~-3fl z!kzN^5APp58ho^xogVYBk;&!|X_C^j{`3@S-m-^n{0b%y>H(?uB}H zLg4%h-E^zpx=6~S_c#KBf?4pUZUYo+Rn^LNGuWSXQkF>rCp5G(WsxKo82P!*-aHhn}jG`SwHB#4Z>oup9m@qA}pXR2%N zgWNmoh76GfxwEb=m^T1<|1;Wn2fT5Z4xPX^J6h{r+n0Z}*?e~L+O zb#gd7`_e>f5s42%yqt&*;FN<172wZ2y{#MVOR$l79qZFA-xv90XCg0e|+A-jjAgIEbO&LgIrc=XoMJK<^C@>L1&$W>Pt<9{jpt zFjn~A1=b?l9`vM$q85ovf?<&;wz^cU?wc?ScEM5@xnK{9tqz&2nVCD0U^DY?eKs?n zAD^I>=SE$Ly?@BGWRXsT^*rd&N|8)Q5 z&PTBt%yAa1vu@Q}R6J*^RI%g2zo0apv!|n9dCooujyq?AVVSd&A?7(d3}T+MH-T{G zY$yfBW~;Pi40UwFU_IEEFxa7X`16s-FazQ3(6>%!XO^7|LHL|2F{4PWAO8FwXNGPAl9P+hibPaPr6P}iR7OtPoprqi)ZSIPS|hSagB;XzR0@R@5< zL)T#wnkAKEkFo-hARV)B0lVno8Hv^!BKCoJgossFC0fsd;NA5W$<~~*E%UYHEmUXH z7Wyixq%E{)0SMkS^Dy0tI-*3+rda|$ZJPf=F}i84lS=eWQ|Gyxrp|OXO`XY;WGw2{ zH_gI&iEuDbbD(iBJ^U&jF9HU3cCaFU12+1D&XcWzyWw^=yAc3FoL1BP}{IP zIt9T;5Hr6kiz~L%q{Hh$u(?`Cu0{n3)K701gVx(f34&%}f|e#vXV(`3s@x z(D+S+3#fz)66VhXJKO^$+(bn!0 zv7swetNB=Tvabm*F@uREmO(Cu&ZOSMUib`($)R#j^)(64N4YP!AoRi!o-8ZXF*_#mXTXaSitRFu|ph<<-k6+M(M#boh*K7js4&mJYA#j`5?3<8U zIoRUVtM(T+C0KW1M=AUPEh(q2>lo}@NX@FE#PsC6LTU~+B^>{gyM*6DZfeGG3b}Ne){&j)M&-m@4(8yI$lf*TNmo;Grw5ya_d&>>^y#z3 zlb#2HJ?X-0#go1TgzHHUS*a#X6Y9bv@T7HpG6QMz<9gDAz-FTmgtt)iF;X6*kOMv$ zg>?``jlyNp8r>-9Jl81bOxGyrOg0J)@T9s?U;wL?)S;$xu%kQe8qD?Xx$Xww8h2%mPlZSL#Fk;yHY^m0Vj&^Om&XiX~T}yAs97~Tq)wJ`4$v6|0Q-$4w&BGsJ zutQ*2h1cP46|uVo@%5ejTj=CO`}`BPsqrqP@%|m(vDfzbcSOb)2914w;XG}h|3cK_ z?(;v1(Aeh=dy7Uq9dm{)^2B^*u|>2=#uX^$2wyB4~Pqx&mo$gnHwh>gn3i7<(hs`{dEtj8M-;T8~gu7}p!2 zzDo*VE98w(JHq%8YC~FMgnErsK$F`Wq24Mo_Nd}UsNWNfR+L*ss124Aq24Qcycy|o(T25(kOPS&8Oz5%OH`P5$ao4 z`Yorrqm58!N$*gJW`w$PtVANz6I_XkQ2%)+;>;c%MW}aay!a7nG6ZIX8lP>tTg_XT zKLmyz!n3`|*64E#jBAYsA;zS~pSK~c$DflCU1B(_caV+E45an=^H)gg@#mp1@ZR`y ze`yHsNP7Hv6h&}0S=T48x$*6Bz2-4sv)4>Nb5ZmYQXa2)FZkp&KMhgTYd%(5 zL+j9qKkGc#Yu1^r*Q_(yYi@=oHN0kuKi?_gw*s5v&yI{;Fem=3GrjR=Ll*U+b{BhsV0Uo|2-jWABRz5# z^Wo5Q?C)KO*)`>@6mP<9dq7$E3XQJ_X{CO(Udi;3{(t7;40agYZ zE{Q*1eQ#|1IbR;N1?`mH`11r2@>%C7u>CqhAgwl8pb^yV1a101H{#*h*GyeP+#5DOh{=5ST`bP`)XyVVCRI%g2 zJIiIxhS9G)XIFyb&e^@BM{~9(#5`v^Ld|Ajz3Rbqs5=!lx#-)S!dD~dOxb<_;V2m-ZZnDVAHIF5w&}3&M>*@1@70`15Dbi^iWRvg@n=Ko#${sT&w1#J z*X)!B_4xBxq-uyimr&O^@#jsHaN^I^l%V+YL&)vMpMy=ob*c}40+AUQYLo+oNVvj` zKbH`55}4ljb0rl=@#i-nWKTN$ka*I=L9i#?b(46~7lUv;>E&2A^zTUH&$>RDfiE}4 z^`zT9EJk53T2}NVQXZp_m8Fcrbr403!a8Y*YZP=Q8-?#sxNa0U{ya|V zP}BLy;?GVVcN*3he(S!a6V&xXvg^zq}*B~&5BpC7|uN8`_% zi0z3#?}HJhfAQkaA!%Z4{CNyU*~OV#idx)#{v;6^`@F$)_W6@V)7|GEL?!w@-(3`< z`@D)j_mW45i9dgZr{|5Hm zJ|Nr!#dT7xd!V3u;bY*-g+GH@^hA+|^7usY=mzo54uW9sY%U1bJ1ZqU^3FQox!F65 zK+N7*Ul5LWrsB^zQaSswPW;(mdg9N9%rP|ag`WdE&^F zVFkXWNpa-8*wE--G>$wL(o4>zBh__JXh*8ZW;2ew18F^uT>Ru=;>eA+xN+pOQAO}& zr1dy*>;IT>fyAjdA1%_BHw!6G!eR0*)isd&Z0-=OeAhkryKEjU(@o z0^-Jz9bx=9vLUT8j{K!m5HF5=NMtp~k<($*=wB=RCvjwh<;0P*MUQv2XdHR741hO| z{9jBXH;(Km@hHW_k#%WI9N7@Yiz5e{!@7Fn$e&81YKkM@DsnT9{NVm&<_fdRC$-|>KGI?6`kIY&8I5HUmZydQ;a;Z4-uXwiS&n0X0 z45p|X;A!`)8ArYYX+4hoDbf;0W@D50oEb;ninJa_K51)g9QkHxNK70#2O}4`0XgP1 z!_?F6F&ER2QXKhH2;DexIdLhD{A8sTN3H^w;>bUM$#LY?Alx{zg%2puJ?3WHB#t}< zQa6sA4QV7FqMrz6lsNLkNPFYR#Zcrp@;(UF?ThD~+ZQ0%`^|Ytyx%K8xZZDXI0E$V zNaM)5K6$_UcEt65Pk&Lo-*U99=q02)-ftE7bR=F5QPlgrP+CLl(1|1KJlFfxnXdP% zGuiw73xylrFU65Rm*K7@j!bS8{o@_u2;#^;iawhUjw2Us#kU@WtHqHgfz5GbM`rlK zI@23RHe^v>I9?pt!uL2hj{G5po@01fFNoVW9)#=mWs@GceI2%o+qV&7cKbdB;ktdc z42tXaIdS9}$QSkcicuVUeLXQH_}0NKAlT~*gK)jRO{7O&-}B(I*S8Vnu-Eq~2-oXV zapZfY6XV2@Pmy-Ti6cAq29D1txTgQd-kHGJShj!s9L7X?OC?dNVN?tQ{qA#~bIp0)IcJ9V z^}e6K&!_pG`?`PEbzk@W+|P2Z&YV&IxQ^U|E@8!+tILf4F4JYE9W~5#@_X=gt0R8^qsKb3jlR^{s3QmO#U30=FO0VyTj+&r4=SD7gHt}n9xP5Tj6L`` zy>Ql%`;pGQj(m{1opt15^mal0Qzxu1b>u7#8(aF#Pq1gt(FYR?AH zvKxE$R_ZqPY(sjX_pDJze&TJ;#Zw)*5Bi!>p6;Jx{*3}V-(RLf=JEaI7<9V5zjQO| z_m@vYsV+;#_3-geo!3L7EHxDZ*ZWJOj=TuwJay#ZT-J4eK@0z?7W`pPPaO;*=W>}KcoDeb!4|*eMK$px8GwOS-pW(|70CG>NC`l7t;%) zj@ETrXh_wavgfXA6cX?#p?SVwZu)cG1=8kb2W9jZkkmw zi20^zwmEN_W~1|_X*L?0qzui(eA6`Q$SE|kQAZw4)8jhw0y33*`_R9xBUh*Tllo`e z8D$;06FL`>z+6ZEkj8MZ_#CsFQO7kK zIj(WSzKsB)j%;7et8B!zs3U8Q^UQOrBj1JyDvq;`>}JeUM|SIV)>rb@k%MV1KDK{L z3*q`4bHl@yb>x0(>2w`AOEq*Id7EmeI`RbacGi(|l~oU4dLwm-I&y&e_2_eCH-C<~ zpE5T8JZ~L&0d*L4l6wV?W^F_gIb6yn8M(0JrY&0$kA5w7h zMZu^eFTxnSoxQ6gYaiz}w5%hmYkn}zP1li~*ZS2M*6rEZY?O6mw?2KP_gqKrrv_AY z1AK4~5cspC3nq z;Ak0_jZqM|?(d0k};$f~Yy)Yi;-l7-Ihq+v(Qx9`P zzQDs=E_E9ZbAe=WzMFhAQFrLo3(+lU*S&GuB zr?cWTZ{z9gSBhgiojpuC{dC54v~D*_!Ie zU$5ZHghrDXE!D5oFy2z(8#CsA=Uzu{ z^?g2dv?9)ayUE*O6`ibgv^v{^(vuUP^6q9l6LU_d0SfYRfwEV^r)` z|Ej9np!_^?2BvOYxtuJpK*{$1S9eI>FxQ9COEc6>&%c72K)>zh&dti!r>d4d3 zVbqa-q{T6RV@8eB?sep7YRfuudHO#C>Yv9tvhMU;M|SJAtRp{+0X)@_pFp2=9l0wM z536I#pGS5x={mCd9~|nRaaVKIk$=YlkagsBv{KGGvKARfDNh~Q+?%J4?AGb2j+{$Z zIax=pfMaG=M?Qe0-RsB|xBJ=jaK3&Xc>zYuTSs1-w+D6PADum1N1n2aPG_t#{uh|> zM+iEbY@X}L>Ovsv$gAPSb>#Xqw=KriXclczXC2w^jC&n9joRiq^83_A9oe|pR5|Nj zN1j7%a~=7XpYqm`_aTuyb>sl`hiChdhpZzb>vKCRdwX7bEZ1-YO<<2 z@(wZ@bz~d8aMqDes$QxiUm>IMdE}P#!dXWyMc-XpuEx*qb>zv^mUZMv5*l^nebmXH zqWDFBih^Dkb>wmv@$}o4UO1nAr)=c2#@jlwS+Aac_x9_O+JpE=;W_=e>OFaFq zCcAq2O{6Z@)9*ZFqs~KJM>gA>PrqiP^Xb=YG@gDBQgFAYUsXpA#2Ejgj{FED#vQ|p zI&yVW+WdVOZyoltg}`d6Bd;g3QAgH&ZqLGIqpTyl^|_vfJ=KvLYWhtF{>YGR1##7%j)NMTVy-zQkPkmfR{>FK2$@6^}!;qJU z$0vQgp$DG@@9_rbI`Zpu3G-{A>d0TyS>U|PJo1}+9XXNO<~s6vYNL*9TxPCP+x&Ut zh~Is!Bkv&(a~(PG5BECqAZnZI$RASMTt}|~f3u6zyL@%6gJxV=>Js5o%d+;0THuhj?vN-F=jY;QT zM_xhQ&N^}ga#1I&FLmS;4jWr~)D`U6o%F)kv#scbbI-0;I<;pnlhxR>-_h{Ko-IQb zy=RR&^4RxzT|Cv1UqxRtb%fl0Pj(+2Pv`r~b&z>{f4K#nZtpMMjQaiMPAJvY)VLm& zzUsUl8t*SZhQRgy(x@Z<0CS!?atHEv)sX`>@kEUWE-&lI+Q+!EdjEYG>T+7ueK@0z z?7W`pPPaO;*=W>}mr?%CI&W&0MjbhmUKn-cz-y*D z@{@3Lt0S9@>K5AdFVvAs(F>!FoJ-rS?`CR=n`S@_zG+UOF4s+SFa|N-G|e{WP19_2 z-ZafdW0U+s!Ob^KqmCR&BO7((t~5QaBWIGS+|zddfBAhFiJN(ksNC{=AI1!HE>fMQ z@56Y7#&Fh=XG7$%j=UC~lT-v#9r;s=VAPTCq0`LxJn}JmVbqa3QO3?X@@h3LRY#sl z-L5+FJ=vVKTOHZWsO!CEqgp-Gkx#0)s*d~*8qHNl{tW4I;SF_UH=~YgHga6!ggu7< zqK+Jne2uskb!4q^o_TI{Q=IyK_yBYJ;k==To^_9GJmt;0B3acrzzVS4)xG0tc7%Uee-O^4HYpI-=>$NT(Bbh_Q=-HiG^|1Oly z`+QFt#9T+-41w!D&voQoIP3G&k>}9tU3KIIYWAv*e4fn48;Ux`{P|&SEWL0(%(Mc^l^JR!4R-iaN4epT5v|t|PBSY~yaH z>&P2mRI@eJkss2JaprHkNPv;QF$0cnb>xOvJEM*qjRuM_|Kg31xsLogomjc}bd*(CMPRY$%^y-_XHTdJ@-{9SLU_EN)K zM;=zn-|h3r74P)tw^&x+yu6PDs3RYsAxe$Bi_RRi!|=_^Ur^ip&C69v`@4Pf@_1^S z>&VBcZT?=1TKD+psUs)R=cm-as`Ou;I`Vo<-MDm#Ize7 zH@22V9oek0tRv6G6!X-PKS764N8Uz@W3D3?FXQj_dF02bE$hg==~H0ppT|0~?(|$o zcI&mQBgbL@Pj%$6=(DaP&xYb*b!_p?%Vv|VBd>Sx25mE9I;sYmsr3 z^3;*dy?N@$Zk?X$$ouIkC+o;jNXn{?d>8uN>&SzS(KjzUdwlym@=2$k{9cO-d3#Vt zeiSRJYsQ~_MZakzY{oY)n{1xz$m&8M>&UtAI%j;Z#dw3iF+xJ=wp|-h>e3IHmImZ0G$~$=f=cyyxYSF`Hy>k9} z>d3*=VbqalP^Ytw+)r6m9Xb9!f7ka~WRX?Xk>``qs3U(tKF&JwHq}dY3)}ne`n(LyM>1EV8So-{#cidip(%Y}9$E>&RxC^Xb=Y zbUyu>jmFdO3JUJ_^lN;tGRF89b>uimj5~%Gb>u`-+FVEe`7C{}GOVUL@?T^&>d3m! z?OE7tlyzjcKG(Cbr#kXBwHZ_$c`6-xsj(dvQwNXblE;EOzZLT9f80hcg=aJte4|5&)Dz(kuYtgh4ZsbMy zdzD|Iwz-a6tg^o?&-W_RFB+(Sf%IRVI`X6FEJz)>9(;`}r2bxua2P$-k+;!7HtNXV zQr^ZMto$(cU<$o(zV*meI<*HMe*}B*ed;#$;5mBXtRn~1F*cX!dzB}VgR_o23Av~f z)|WbRB!`VH-Q`j2+1KcWv1cpN3+JBAQaZI~50KT^vzuvnW6%CVFZ7-@>d0G>i>EsB zm*{Jzj*wd&c`+SN=ljcxka>K6`8PV<-e0;I_4`Zpk$d$|T}_Sa;W-+_{QmMb2wd+k z`FoXN&QnJYs)DzdMj4?WWX1!Rmvv0tNaj5@OOda66s4t0L7h1qD- zktb08&N{MNufC#|ewQR3>d2!oxU3`JUDcnzSGfnhFzU!x>4ocimEq=AM}EO%RJYI? zL3|7Cdz!{JZkqdPyY-z#W^vQB)#aOJGYvIjPaXLnIv1%j#&Fh=KZnR; z9r*$}C#eXgI`R^VVAPR+rWZyXd2Mynk*iV0&N_0InwF{~CsMboj@*TQ`9uA4t0TJ^ zb-mYYRI7(N@-`J$)sg>6ab0!fI}w))Z~A+c%|;#9tmL>x9l1KRqK-Vy9KxcGtToOv z&#jI;6%o|Dopoe4W1c#)Td%XelDCeWOKb75eI_lttB(8&wJhq$0rhC<^yiTyRYTX2 zGgU*?k!#m5)sa^#s~*1eAnFozx8hWV}R1`MnnXsKclu_Xx(5^lS9O zc#{5sUKpRq*cOH-=?nD2`H76qAM>X1wvKGptII%2ZI4gV?~>WLC}dG)eVfpT;-avP z?CMGS4(f7U6b2(3^F_gIb6yn8M(0JrY&0$k85G=nQ7~=*4`U48&fe9LwU2WfTGo-( zH9uD!4b+jH*ZN=#>-OwyHp)7(Tc5ttd#)n~JWd0uI&z~Ba~(NSnMECWJ^fyl`sb;R zd=Pzk>&WM7neOx7L+0^5|1&z>?(=R&eV_jwO6Pq(l=h7IK7SPg*L@z}s|u{Hbk&h_DW37kl!mlu#yg5<=!Nlgb}PMbKAiFfx-&`)Pv zN48;b<5`xjGyJ{EW}~PhyE*6!jpsV@1zbgqyPd8h{{f?#t*MUe(2sHEI`Rq_`FoY& z=vGG_jZFD_mC>-SBkMOp<~s6eI7Uxb!6r6mR9o<{oz!5r7|^(+FH?!Ku%#FM zVfe|)-l5kp`n&MPOIy$=8qU9j-PWt@JbST#UUwg`ms?}Ey++nvrHk7R*bjYZx4orW zWlEK@`PZpc#8#}hf6Q`vq9_$KgnqO20L3oSDrgG*Vo^evMvYuWP`x*p85_ahv(e{OI3IgMAHll;!b zRmrRNgS3NNCy`Ix+|Mi^y`IY4D-{BY(Pu!~3AN0@In{G2LVlb>kQhK>nv zCd_j*T$&D`jW>dprSDkd=%^nw{<#lnv}4ABQ9sC%rq=7YaX8cuThk}#3>&qa9A|8! z-522M$+lmnGb41(Y-Kiw*rO)BF^@WyPLt5R&bjKfZ>bjS6T`eJSMM7&VOrGnWbhBC zU0Td9+y1MX-9AHTETQV8ga@mz9~&zq{Il(y>9~gOH~I{hlILjv#J-bW7gI5^?W5Ik zscA$uj^^j~{b~xK`nVlet?us2YCB@@NGmgfmdi2La8*CZ`UCCDbjr!m&TJh`OaC`5 zm!qTE8cS!X0|>@>CB=39KFrf?qlq>#&ivIM47F9Xod@vHqLBKrMMT5k#(@y zx}LUHyAR1a(QF+-8zYb|e2x^e^?tf!wW5W0WSFfEn(?zV69;cu)kQOorOfKm3E_Cr ztX;K={w|Fg?M;_8NS%gPDY2+ZL2BRrO4~20fpNJ^r65stv+WPi84*?4a2fZjae(Ll zM*1pd%VK2-GFzTf-c`+()k;&%Y{{YNM^!glex*Yd^_ba`xtzRem@R)Q4WH@A=Mj}* zh*{&`le~EUK+}PiE-KWl8B2#Gs=m__@Dfk1GOcq|J=M^cgg&%pQMFZ^00i5s5)U(5 z66rWZHFR16rgE@RwC$oAsYZZt%@6wX0{!t4+95GD=zdW=CMbLmHSW7ee|@m3Exaln zbmMh(KU>jubSVAkqd)XkzHzb3bf(pfZ5=+0hEW;EwzY*%q!l(^xAzMlqwSH!!^hDH zVAwm}79K_sjn|z^h0maEV!ZBJIy{c1WW4TPHvBz0F2?Jg<-;4(rZHak4hU~aTU%X3 zV*6GOKToHGnm}y7U^+YJQKUFN0?Rtl6;YkU8|>6EnU*w;4}^QiRoYf@5h`+kaY-;P z08Y1FbZp{U8of@pfPmjrP^H=0!=M~H+wK=j={7e6#&yV<&=NX-<63!2DBB*Zl5OMeqyu)O zC5x+R>;g3r%HiBkWC=CqZ2WM>q`s%=JddkosMS?304_CXH^4FK~LIuYW+oc;mo z6$MG6BNvT_u}sKScXHZjA9v z;p)t`Pg99cHSStwbC^nel5yX0nsu5z)XF?(+^X{Q9ap1FGoC5(^u3^FJ;QjW$kR8G zPOi9KuC-MHN_wR_>eQSG~&Xc%q?tSFaP-Q;I-KT4Q73Dlqq&w#nEB#gUh(oIww30~We^ zj1-!FK<8~q%3{DuR}cG?ELy}ii4qy`o~ws_y3y$|pH7?s+g&}z-b0FEupXiEhOwrg<+4f@Fsc)|Pis?n3Lf5RgmxUj4N>V4> z8=m{#qPfJq>FP7j<)S+E`WPu10#~w6T{iakI6|>U=-NwXk=g(?jPnBL)hp_-&o;7E zX43qn;?*-On>j#^3Xn@z^lbYKb!_V!L#XSdF|UB{SjLK%mEv(%IzmSKR?Q{S5ICQv zI7GJnUA3nhxSU&Dq3eaw#26}Cw*79kDN|e_lB7%>kDc~^s3TEVO)J}e2i+;-_`%3H zSjJ_SZu%XHXWNI7_!!6ssjh4Ia+wNxV@{)4d}~Z-i4#Thn`Ki6dza@lnPDtMS9|=k9Ro9!+O>d|M+&^|pbcq3>aH__y3%Vp ziI%tMahol^lgq(Kyy+dk+iYv7H@>H<2ch1bKvUWvL(QP`^)|W-#t(EkU=4=RX;+t* z&FC}C&)WyTWuNb7x6zAb_OgD&x$SJ@lv%k!`l@P?5iJS#s>zw3-pc>`s%; z;WgSE5z}1ebzw!+th%U-XSvKcCiUoWMa*@YN%#qEyoguLmO->TBHngd0><%kMW&j_ z4wqTIBLDB`RvHoIG?V2GI%y+Dm@O0NER5J~wrrtY5D{y(w5HQ3Vzk*ZSski)v*iuC zphYB_Et}{hjTmCKe5_XPJ(nfN{(_2gXWo@ts-k`3QfAxF(oHAgGqYuqn)D>I<-F2N zaanTgZ>b|tLB`LqN2(cB7j`~uIrbct_`{;pmSewPZH_9^o^Ag??dlJl!|J2|wA%O6 zjZ<6o(dti8Ykk-$Buk1qp687RA!rV%WB!-fvP-4&y4kCX%6^gA(n#%{rDn?|wHD`$ z$1g;ltJeCm%aUV1ppHjryR&#ibG)Y9?%_G&)bFK6`@t1E$9}6ilgi13$gxjTGk(Bi zH>wyp_FZa$N|@|MMmhFR)y)1O>;X7SK2+QAv};&;Kwm-Oe=}S5tCMrR(_&OPXjNCJ zqrS#v#tF8JF3J&KIL$QMk}9Izl>qrpr^m>M_Qun!k$tv3PR+lg+0sm{c2~2dg4!BA zot6N&ey$eyE2o*lciT?k`RO;pJtu8{dU1qG&mumaH>@-uxYpRlEzS*){9hsF*OF#}?&Pn** zha}wTGOJf){#HedcACkuMF~fmEtS>s?J--9sI3uawro^+j4@k=tCMGt*)mkkHOXvw zPF*BY&6ag)bG+}eiS#sK3APfkBCm%vQMhb5hU$YBU4k)aSp4G{-^3#aotDt(du_m z0X}yM$ueDCmVPxZInbO?`}S|MB|)78Z3wPM9= zuhGG79Tqeo+0S;2mMpT_G5ZdhacqD4Me5DAe?ix|*qO$4x;beA)DJTMK!+*zHN(=_ zpZ@m{)klo?FO%uSh)po;-Px{QXWRSGp^qJJJii%ldUEV%X|&h}?1pIqOQ#Tuv3{D0 z^PLJEV06;StP+1M#r~wQU^|U zABW%Zzt*8gENgoWOz7Jr&axl4r^elVKJMl(Dn^X zGb~1?s6FkZ%^o<+ESyI11IOg?|8N2cpUGq1OIthew9`M}YH?%l{z`iz+kQ}Wo^f@S zD`9j#L@1^dO@^ogJRUow+z4t6(zUWMI$Z-3oxZjvHPi$~@jJ&H`%K!-fp^+nN5nj- z?%&W9#u>iKOqrAzM)EhD7LIbvzL?I{zNz{u8vp(qe|(O5Ye@Z$&?Y#?z0_=|+)$+j09;dOe*sS5Z}J zH7d?_+X=h9R1{rthiz2_%DqJCnfC1}*r)X4>S4RBL}KG& zij7M=5x%>%&9-X^*_ztI)fYt6D_P7|qGj>$VRP-aUzELDsqka<>3`xpNUwXB4R5^G z&ae9ggcm!4*ZnJp@2p1uBS>im28WmOr}DUZolw^n)QkeYN)HhwD$caGrq}cBed(9M z`G3x-|B*p6jUsc9IzA>^mFM_^>gZW^)vZv^|Rv@^>asa zKl*tlhF0zVjYa8QfXy}q{2lxoG&)T`s`#kaaTmaE1*pd{g*IOLs&BHH^N#~JW^+3S zl<}`@;{G7$n?bieAN>PD|CWWm{1%QM44wsl24y~4U(HK>Tj-*|L~sHq<5$?m`7{RS z?%?+8pwzd7?iug{@YWC5Z&VI*A!y}4T=;*7w$v{cx+vroZ;{_L!YLck_BI0;he4 z*u%O>&}ly_eK9Zfi=bNp9sy5*7r-8SdHliP>!2L}3)t^Mo})pXx705{|1R(_c-JR9 zUS%*Cl>WZz=Oa!I7_^VasSe8czUp%=;?}i@Ur_z+h<6VdU=e>3>|4Mc;P2pVpYr@m zgL3{>{^z~)e+jyGz0@!EQC}H(KMB4KzGpF?POx_a=Yp^Pm*`I;&&vDxxU~o4KzaPK zU|#{Q1Fu@>%YDXiyMtrE*`SPn>jBmWfy2PDU}5!X2RZ&Qa0K`aDC5_Gy%V?=Y+RZ!!PE z`ujTG$H-IfyY1L_d%?$$XP8C4h4t6_T#p-xae7*e=c_&m^YAwQO6=bp@FVQw4qx(d zl>7B0`hNt^g1>`*g8uL?36=pL2b+L0{&d(^fyKV!JdS}_TO=X{Pnn*V%(R}*5mH782>-*pKGTg zHvMbp$GoK&v-&;E=fFVvyt?`q3@!l;qv?l^*SZMnC*96`?M~))#QOwnQHJeN;L1R5 z-(H!yx*BsMcoaMdwnQG0;BYV#Tmb&B=erf_EZ4(yXpEQsI4*gP5B#OR+#S6B4}ev` z8+AN=J$@lKSw0hPvV1PwWchR|#rx?cP@d0n|Me-LJ|2E4;8UQCZ>94#Kj}Z-$9&u3 zx)=@0>z&NEH+22H)DMKt*YmY{B|c7a{7l4q7Mv~Od#j%dKdIN_*2efPz#bO)IAGWJ z3tz7vOX0r;EcP(Z`yZgpZ##6mz#!-zv(OKKy`cGN|3t)j3LKZucsGk)=Q#`cz5y0= zJ!HIP*D2n!h;!r-KK>^_dHn0b-WKc*uC~yB2)m5?73^}q%JB{g|NQh9puYqbf0XA_ z29)uw^rbBHC$LTx5I?`?t8bvc75Y0sZ~adT|N9E)pNlwu6f&NEZd!=vDE+)#p*XMe zQasnb10Dx|1E=9R_viaqzYEW?`@vlB5~!bRyW=@F1=Rasj(E0IzXmP`Z`ASh_4uv5$?_@Y&&T0rS)YuXET6;3r`#>PPV#(~`|s-l z>d(UOSMV=T#<$XWo1gUe!@Rup-v|BopuFD6e7}P3TQBuzp!0P<-gYk^A31&zT*q$% z%Yr(-xBC0xC-r*V(ir~{u&zZujbPXJ3tz7vli{BQ{s5i>Wqu1`Ujp7*me=WaQ0iO2 zUeNrse>=qK1xDpF-p!)dd1fHr@nAvML&kgdI>j4=I2+3G@!Sl`<5?E=YG7S3%R>Jq z>@w~a*yVneF1u2(DvoO7gzZ&$XNIJbMi+C!TBDKg9ZNc#hTA{ZryOw=teyb=`8H zc+Sm2TOS8`eE(PS9gKCB>mld+K8{PC<708Z*#Y}*@Gy9zj;F83@5`GkpBg22-`*_i z^V&_8&o$)J^j2Occ|ObiS^_#>_4mN9JoqRm<6G&x9Z&i{=3~B>puZj0M|r)I`4)%n zHZS$1q4RY=Cf?7-M~+_&@xs6+BEGl!2>4089ybHyKLgIS$mccK_5H%v>&I#Mp9dq# z^Ss-EGCx1qi-Uu}Bn$mw*bADU_J133Hh~}HGv3Xj*LfaBzTbicT@M-W%yo*l2XXFw zkdJ?PP#*u`4{-lfa1NLYN_|npk#Qe{UG7)uf4A_@Pag_>U9ctC6_oL<^pO_&@|b57 znBVhN1?XCXPx|OzMfmqDpnov@>J&1bes1bsl=nd|T*or-|G)Kft^S-sAf9U*f_mTU z&nf87CFtwE{#=5-FV@BLtA4KQhqm4alhM}4K_1`#m3(Jmo#lGS`Ig3U$#Z-x?l-@{ zegV7&-l*g0>+!qgHr{79OFlhrvV3;mWcgJ22OqCQP@d0nzlIi2{{;M+gB?H_-%96g ze$v0YkNH-_b+IleuXi%vn$U%Lsc!_Gujj`ns4vLzyCPmcFhRukR-X(%sn_Ek#`r&i zmo4(S2D`pr_}_$4e9b`RQjs zKL=a_z6;9uR{GTz`catg2Vj2BSL2{t2Cnkae~R#bzkvQ(@O!C{@$_@kJ9v&-h0j@S zD9!suf1Y

    bClGxL=?>7|*$rK>azLB-Cw}fckT4`g03MVGpj(>EIEj};T^e$fS7GNjv-*vowJ-)qe^8DVu$@6>QZa&^O z>+v0p{5}BX^+E3UX9}pF0l$~QMWBptrSmpF>A%9qe23z?I~A1IPnqx2&^_y={zd2t zyC0@i=6xmeS(Z=y>#fhieMsM*@{6zaGvFundS0_Izs2Bt7W3T-yT0G~dVMQVh1c;; zFcwS%Wqy@luM9p5K5wD_2=;>Jr~N-coa5j(`HXk7=yjgIA>SfFyxs*}4;k;)>lE({ z@~cyo^J@Ug<39)EtpGQIr7ZM;u*{=K`Fe!Nfg@7)DkT+e*f&qCZI;Av2QZdo2b ztzQY<``~Wj|2x{(+h32nMvVJ0+Irl}7UTcN{U77wxE0I+i_~DdT(9luKMDQ@{s|UV z-xcHb1#hj%dE5oc_;rH0KOF1r(P$0B=SrE)4|Oa`IoQF`9A_y0TV%)|Bz7D z-(8D&8vGNK`nk}*1uhl-Qr`h_Mu7{##TM~>)sMrxrhv=AwHEW;9>(+h9<gzg-u=lcleR}~Ba z!@ve$IM@Pg3w8v%fqlSea3Ginrh$5WXQM6m%m3%g=gEy)U%e0X{{K(y1AV^feW1@b zxgY-9^8En&dJm|tbGJ9<<604X7?ktX`lImg(}?}1gU3M~Px}9g{xVOnUt6#nxEH(t zN`IZ#2yq|K*RjItYhm8a!33}f#_J6xS=0_A)wSm;wM^fO^!4z2{>wa_1h{jsK;*W+MQQ0DU^^!{Gz|L{?t8Nqoh z1Q&rFo3mZ!qxH`TeRB)_I_Qpo4?tJdLjQ@6dL8#P{C)v1f_j`Vi}AjPuAu(?5O*Rt z39Q+|^ZIH1V4;7+Lf;tn{$MP4Z)?x-wZ4tem$cBo1YO6L9PbEt4V1@!!wuG3<#9(V z&hK8Z5;zsS0Lpy(TFmQai5Gz55)L*24_F*8t*(9bZ z>z}sJ{{nmOwj6&c_$?^oYkdi!-(;cx8}Yr>Yh5M8({XoN#4iiGxB5oVhl9<)mf!*K zb5PE|E$oqCXRteX4Ezd|{;S*ZIyZ06Tml{grT$jfOM~0NT^9Pvu-61X1rJ*2yFJNy zTU`zO|wea8ZANIG(I}!QI`95PY&+Db1fpKSpbHP_Y zy^h%y>-idVZ-R@#W#9+!+hyUuwG$u5lAW2|!AYQ8k8{xHf)~I)zzq0}u<-vAx@%xj z=xzZ=gX1jxM|9ylzXb2^%I)T$%y$EHo4~E$b}$Tn^)38&L$?n+2p$C+!LNyh|2Ek7 zf?t5ocH_KdzP{>DAzm=zbppp*#Mk;;gnqDv{x8J$R;?6& z1pi0DAh0?(5*!1{_0NKR9=Hf>+THW#26HUp4~P9Ja11yOd>`Bb%Hy#g_T%7>;Go`~_q(t9 zONjRv;!m-4b($T^>-G|O0F?PW z)Sq=@Ks$5|E%e{P{`>&;djZ@7%J?LZ69v zbHP~&9Cr;U#i@`;2!9h?B(m*#oCR{ATcp7pB{@6{ykzX!T! zE%ezpSpP{f=P@OPnS(rjw8$p_>(C7B1ePD>dA?Tqt3y5OGZC*W`a6R?!3;1Ll>6h6 zbdLKixE;FF7Wx3>-3;sm)*I-x%dNAFXdI z^eso#c$9Vu;oay=a zYW<(^)A|_}`f6i2&Qx#+bQ%AzH@31~m(5t855Ql*1gw)@H@W}+-=FtaLD#R@IQDM| z_6I)#<$A}AXMKqY%+#lu<3Xt(1br$vG9Ud6=-vXCg5QHOz8~_C`RH+^z8mzHz)6!h z{~6!`@F+M4`RaMfcv@E!igHm6~LZ|bS`VJQQ6pQ!^VSfkQ0Oo*SfL7xz zM*j*>`)@}31b7mZ`4-lH72@jrx1z1{{|;@d{0r+}W-9NW+F+^a+-?n?0{;f({I8dP zIWhiyV*Ilf<9CH$6gVDy8kG5d1N#-Q*fgH+HqcxBJ2zOr%*XhF*Gb@)>2JpJx$&JM0I+ zqu}@8pPK>Y&vEe78KWqd20xA{r`_k7HE?i`-~o8U(915oB`rQc+se`YSn z&jK&J%IzzljQ<{VyIyA9Z{V~cQOz`hUE^B-(6 z|19X%ft!8wpCSA|E};L*@O!^;H!=Krvd`pVF^0=pN`zXtrm3K_2$ z&YRL;Ij|Dg4Aj>fxxU5G{|`|6KZtez%IwzjCie=a6YkMBDfS>14{p+@DK7*e+K$MFZDnBs6P+=U5H-+^maV$e+hA} z6*AsKOL<*C0k497%RC?dMD)+_QvWXE900!plb3srFZJc2%TNC?;`Yi%pSgm^-2rZW zhua^4a{o*(p#CNJ%?Fo)GQO40+x(>eY9I4$_BPMIJ=h(L0%g8d`d$|LUMo3%G`JL8 z4a)elgzjY=mz5UB$5;Kkh~H{8=hY6JE%w2u7UNxozuzkM?+o?^<$OxRUKSh)jAYn8 zpOJS-=N_U^b??)4bBA*finI@*kwL?9I0=yp7T8gW^Ca0 z1TY8O1@=U~dY&?#)&)V=5!8NCzXx%>)knY2`OVwR49;f8fHM9L=qqeuT`1_Q{}IGV z5dLz!7ty~FEQUObgHnIULZ|bSdOPCCxB(XNJHs9g4ggcZDWKJO-O%3~)cy%*PX)6; znQvkJ9f+&*PexnkKLc&6{0r;96Z`51a9a-VqbuN?54pV(l=Ht{{=3Ead&KzjEXMcW z!uj0^)&#>qneTMimx1fSl&u`cTYdBm*7x)={y`t-Yo-4iaqhwR<-j1Y3uu*Je*SWO z{XXDz?*nFldLLTp?}cuDKKjk*KL!S4Uxk7){v`{YRX)`aN5*Yq5kDRF3E*UKCb%55 z8gCf-M}gXZ8rrMCb)cMIVg1JC5im@dLm=z-yq)rylGMa6I_Dg}&2Hj(-`9-ox!wP{!}6b>N_U^b??) z4bBA*finI@*kwL?9I0>d5$Agf%-GHC31AMm3+#z}^*m)ftqX##BdGnPeh=b$tB?Me z^P9Ji8T=_T29)u4Kwse#)`fz;`X51@1mQ2odlCH`!D7g>I4JdpEOa_QskbAJj2mDP zzccL7-~cccoB~>n*A4x>LG7P__Eaznl=&9c-+{O~|75gv{xi_F%D=GwJF%~R0Jk0D zeRKt!bC}yJK{@~H<-c2uzekKe&tiQ4{hZ&OU`;R#l=)7FeHpkOO!;m=ab(;!7V*c_3d;CBwGJGVkA4Dlv%$IGAyCG@2)oQjk0bRhzTkXMff>iSJps%C zcY!^Tub!ujr*%Qlbp*Aa)bBxDZ}rh%aenhoGK0Ti#(*;Z4(Ka<&AL#~SN|i3lOX)% zcrT)VBUlW176+yNkcCd?C-rv3k#Peo;&+BU8XN$of>S`N@w%bEH>mv+(4GorfimC1 z`a2L;=bwzW&VL5lR{0m!e<$|U58$?c@;*c>&jK4>WKhI)(|8F_J zJHeV@7%20d4*N22J(%(x$MIGleS`HqeT;w5$N5_6|3;j9Fn&2O2pE|03)%A3cuLw>ZoBo&qz@aeD%o1MUKQB40gE8Bgnipz8=~KdIk?xZdicb2-0x zzcPa_Fk?U&e+Tpx&a*BQ^ws|e;v@)vIo^xt-v|~%p2b0_KV+fP`ANMUab(;8i};;k zj|K;Tso)gQYP@df?+t4I1hl7uS)k0fu>KCj)%ho*t@EFOwpIRx_1}qo^#i!=67Qoc z;GE0cUJ1(iUoZdNV*EW~{CO7R`(Nbz?gVRsVW7-+I_%59^1+GVcreyRw{`LBe1FZeTf{yOQ){>kG9fPaA3K$%ZH*d5?_@OcY; z-K!jbFF5!wZvXW+bLlna8c>d>{TstSKfTt;@n&OO89yFzp905#IiS=}gna?H9^7=D z^ed3(D)4)((~qFc$5;Ix#Qg<)5OG5+;vc}gPJplDIO*dc^U=D2h;M^_EI1w1aq{z@ z>!tpCiRcH~tCEC=@1`O1VaesPh%9!JWH+lm>cdEn!AZhumQIie_Y9BAcV3jX=& zwN8!~hjC^6dWhQwY!AK&N_}V8Q@}~!bJs~f3VDtN*I}JDfHEIn^)DmtR`6%gZV~?t z%xeWW1jk7q2bqu7)kWO>i2Ee`qCg!dKmT|y_3Myde)_MV`zLrBtcHALK05!Sn1{|^ zk0bR*k?&wX-q$6IF<c>-Mip>;8jrOqw`;adFcH0I8wg^`95Bp_w{iw@m6k^E6JFo$H~vXgqQlx7%xBl80ek`r+^=WG9R7) zaFM?rN9ui)!@=F) zy`|YM^%3ZIfHB|rO%^4bet1TR_SJNZ6dkLSTz;63F%@0Y{q{~c_2KkIse$>3D*OYj#^ zuJ`qh7l6F)e}MCP5Ull}=lRTp-XFTz;N90rKS#u$mrs0O^{*n&Mc^Uus73xAD)2fa zfaAe!VD*aJe*~1r>%ZN(Cbr58`$TxUw3z*H-tu zUjJ$TH01p)_$Bh*U)6KIBZdC#b=K=V^g8N1^g7D@uJsK?9&cgY|K0j#kMX)q24{ft zK$%ag8?0ZA_;&|$UI8J@=Rujz-8H!XAgJ|^LEkDL|LXbpx4XgqdY(b0(eSOvI zc$YBGqKJDtSPrZN)&T2)^7w3neJA)W_y-tJi;r)0usPTVl<}nhBf`IHKK@J4zY6rL z&EuB@D}q(Pr@&`GnU9W>gLpd5T_R4fh_gJOc<+mNw~KhyM7-DjP4V%8^+b>4dZ za=m=j=VBc?*X4EY2EGBx_^V-ms2=Mpf|;Py`@wz(*ba1DCw*}dze_&xx1oO*cn~}S z=7N{OBK3KmCBdp-9Z=5qM#rCwahHQ%gJ&)BndhUv$m2ZU;@}-%$A)Z|^R18m9^iZ6 zLGTaojt1!jClbv`<-RX#Ube-iVGXw2)<5}Xan^$CPM z3`_<`{D<@lFzy}Uoc~>5Dk$^+4*I{rhR}7&M}I}=+g&I9Urjjg!A+S75zKT@=CAdg zZjk;q#C^oe`1ks#9|!$p@C9%#DCfHv_7A{4;DgP0ovye3cEt5Iet!Bch!+D62B(2C z|K38MiuPy=y;aTj{13hRFah z{nQKW3(EX`)vrYSZQwyL*dl&m^#O?MZT$T7myqurhWa^0h0m+^ho zPehy?@DuP5*t7*7_cov$udx1Bv>tl`wr{i@1_0^AN8*x z?wjCxuue`rWX94W0t)Se!3~)mKJbZ{z2u--dX9 zf^8!Cc=QGbgK3~V9v5J*+=2c2fipn=&TJnFN`D)4(mw%qsn@!`=zj(L4AkR%WiehD zbkctb>~cIkkC(+bw{+xr>2dtJa61Sb2+DY0AkH<=SO4EJFK@@wc|P2U^P3Io<0A8` zCv=&Z$Fmmm@m1g1$M|1i+<$cC{D*;KL79IU*eiiyp!O@QzHc|qV*r>6J_E}5Qa`MK z`mq-A8+Ye?o&xuRC&07d1yJU+jyl;c_XXTsk~|CJc8i-mp*?B$SuR3FYK8I;(YQ|zZh}#yyhXFk{0m`s$Ye1-b4Id;HTgbP_C!;+W>#*C-qvV=kpulTFqxd ze?E?9z~^GQJp+{SXF>O_m-@v%>L10pHNf^@SBrdB!F~~J703B^0A>DvL01y}_k-H6 zGur)ckiW0veTzJo_u>OpEw>Uaz3P2KG%Ii~Z9c_HJMwa5#7wyb8+WaRT-W;PXkmPiKHq z|2uR#t_`|dz&>EKg}=_@Z^XG9x<|nvupJl)>bNqW`%^gIYTzPp2iQG>`}={u`b)hY zrxD^08N%_Wfcfc%{+sk;E%MQM&O?7CtV_7X`n&<%pP*kV&-XS^&bI^X-N00E7`PBz z2HtG`I`24<_tPTp_bl=+tbb}6ukU!UK{~f{K)GHmU~dEV1p9)?U>Z0PoD41omxD6? zldyLMW57Y+aBwU*4V($C0^bE?{I%G3C%}IU<@wG61BP+C3n=|J3xBN-vC!-I4L-Oa-NW0qh$@-mh5X@2mbd#3}I<=T!}i1Z6(GU{3|d zfwL|2i(uaX=70yi)PHoH^?KYN5ceEdWR&OquoCvoV8$5M4F~1=?1Jtaup4v(^U)s` zdI$8;`S|xjzqk4((968^yySeezKzJkO0U=DL+CG!<@G9($*lSeGZd8Lg+aFl{0Y1Q zN_{uj7ka5bg>?=?en-K7BG2G)oL}I0W{ru=o}e6G$GeKSB}cQqJt*~ez}^IGo{zpJ z@~RIu0V6;e-%8igLVpByJ^$92e}7QM55v0jnc%)Iaaf!IFZEA& zsXvYQ*TDSZ=lZBGhIv*72TkI2c;acMoNpQE9t4L%KLLCm`~xh3I9Bm4B2ES9&p?0C zVtilq?GRVbD;#m(w}@X*eHV-qg}ABUNN~Kxc-pTI{H32{5+=CcC(aU1w8 zXq)W$_!fix0dNBNI{4^w>{kPn`Q_&?^#i7Gym!H^;76d;cX*cdIp8_)4vT!WexsNA zUWnsAmB*qC)eCol%| zcK*_TgYcL0-;Mr#;8E}!&|Cd+3;hV#bsqU0zj4sN1upZ^f1>bTUqJuo;P+x7;|+L` z_w5R>*BoxgfO36@7f?S2ev`l~P{y~?d7Gc~f62#uUzox3p9?Ml*MKr#EB$f{{qUI_ ze;ha+Tnx(iZ^PbP9GAfs$L9j{e}c_s@px@P8Q%}~;@}`K$wI#vc5n01`c?4D20zRv z{>`G-d0x=@&gS*>cK*`8cme&t$M_L1xsNZ8XJ_>H00)9YKyUSfE%d>#hk^~jCoJ?j z?^DQM`pJBr$NDS>*MoOj#D5(9qd|S$vN}JSK{pUg@zKA9@PDd+{_Ww{rI7LF;X2TK zF7J!@mzhIAxxSO;aeo&03b+!K`lwe~@BbR}9`FIsN*@cq+2G6I&8|;Fo-@EVL2u_T z{r?dDa{eXe^Sa&+mIW(--sP|(A)V-|CR;xuLQqI3who2_;USbqJJ*91Y84pt6y%RPk}uR90iWG z(CfS_BY){9^VtX8S@1WogGKzO(4P(J>z38|F%h~Y;A$WJpAr6>3h4hl{ALw0-f>(9 zo_>q>#nQ#hHK1JI9ZR@>KX?NC8I=0hm$AP23T79u4``)d1i#P0W8lrMUyD2sg5QDO z&R_c1S?<1ma{jH*-yZA^MuFbyds*l&BY&Moe#g&_IFEoqptt^h!oPL_{Y%2{u0qE9 z5&N{-+k703zr*|vlcKa$G=T7iZP{ywg`%ZCO&RQIwH0YlKw}T&pGX6x^Cxd6epDpx{uI9YG%}48N zz^@_L6qNbgY}$cz z;8qL0&U+y8mwqyz+YzTKSR0&f5q}fn{srpmmeu*O9lBFsu8;m73I9I}=)VtshYK0+ z{3x_@q9OR>aGvS|6K>s%I>sZKm zkG{|QF9E!N8@B^NxxRG^sBZ+n2rv?q@vU^;<|qBT`IzsMn|S^`z=7ZpQ08l;A8eto zyP4yMgB`#Dpp2ggyT3RtRV|LsTIe@{e%U<59lBj$5Oj}O=m)^=Z9ZC`48PIf zgnZ)PEP9>iTI9P8^mhKze^&wh7s9XDRz9A3e0e-eqrV(j84Llv)mOF9=WgNgFMwCU zYoLs;^In4drJvNdN1VZ62Kbpp{67)5A^P=o%j*2_gRU|d40`K-i|~KEfd03`@18=& z>xJup{|9_rs^l<3K)JpVA98;r*c(g&rM|)r*6-ZOJPdvbTInB#Ustdvc(dz6k!L3` z2K09R(tm^Sm-F9^{(az4@Eg!u{c#KZ2-tNV`5nJ;(7y#P^U;5z@Lyj*|L5TMVj<%V z_=xxI3b5BF+>Qa|`VKFkehmC3fmxu8Z>94#Kk5IHkNLi^i|0QVTmr5EWxiJW*?+MrGN1P`hSn{BR+N?UmnlS=IYlsgJBN^8-Pz( z=yl$wkiYbk`8<#HSq`oT@3e^jIQmC}`nqLxel&w_AeiE#e+%LNQ~~|l!>>yrG0)7Zu#oxcSs4?UzFc&Pjj_swu>R>Q95KIAwtY>{D z_!DS*m+gKV5fA(uw7tjnN?wl0Pu&}+|C6{)Zun1u*u_y2lfY3z^mchZ)?Jw1ZIIBgZsgzO%V@F0#m@JBDg;j z?9`mw{lL%`+-?k(ZO!cf@E~{+e7OzxF94I;aXSU9_ax$h13IA}yt50p1Hi3axxEd1 zt{bQnkC%c27Upa1aDi${iVPK%ek%jG1~jV%b;xq>pp#lxgWf`mfN;< z%!M17tHBA`+|B}nwsSieytaeeww=s{dzh=i37>L13k>?4+ri+qBiyzfWiC9yTn$e6 zhTB~aKZ&{XMsUixE%~$`;*(YtIU1ZnES!`MftgA0hn|P zw^P7ICAr-gy!{Stmjd6tliS|+aB3*Gv%vnfxSax?uFY-z_qu+lgEpxD zK9v4@Q2OsbY4)kl`hH-ShG>I_p5V6rdn@|ytLVR9qW@k=W;pAvfwm^xE((?c_kjDs zgWyR}|NW562=>?C|K6_!x0|+PMuLaHli-Bb+@A%OYQt?!{e9sJo@D!?NakuVrwh0D zgZleiGrO|AYrV z@YQ6r!GRgvP63aPUNc;*Fe=Ysn8Q%_E3yZ(Kd zlsVjf{blBAFz8io2ZQ?eKLTE3yZ$`t>P6iCW-&7t9JGwvDWLv*Wxo|{*Pr*u#pj|b ztY>>LxD5Yae>JE-zp&sv*6IJB5{&=f5S4@Rz%$#qoeS#!KX4NNpFr0uQa)kbGhh}N zVDWx5BP}*6HD;hAF*ZFlKE^RPKB>PW-Ih_;G1#WN(qf_#qEa34$`;wVWygr{W{!4U zI!APObc|@)rDLa7T_YUrBW)Q;Y4HP+V*3ZA4NOi=w>cc~N$GVdmZN9;HnlR6G7{?` zU`TLWNSGr!K0VEmo{%2Vu}!BChb=iJHZ>|eIkjp-<>02TStl_zF*$XFBQYu^B|d3@ zBPt;wIYx;c1JYZyO$@6Q5fRl%#i{AYJDNA%AvM#J)1wj`!=lpCWBW%8wIwC@k4{u7G zjg3gmJGpw%8F6v3#yWTyod)!rX~A=9-zn75s#9GDCKXXDEq-JyEtouJ_0-{wO;-zH zO#ENxp$^}ZooYF3;NJwJTaL2&ds1zMdEb?`nW=Kd(R8s%={!!`b0JQIv9_DZ) z^&cEkDnO)Q>zz<^~>zx^&7%)5eZZ=gWdV^dYs-L21S*V`4-^n@(Ylh?Epw zc=t=qjmxlhbnJlmq<{06Y3WhvX%Ug_X~K1k*R)9!ZHe(|`g)X-uC4_QVv>{6(gU1F zkS@fHZ2jZuu%^XRkB2K-NNrsIQ!gCi&))=h&( zbt^LFUtA#QimtCTe1)&=DIw1nmqhlgXRM9d(sZyAl9LB#q&No0j&KZ&N*n0$?o^8} z;r(f~VvQX(D59Ra0wu%_jZN@$z(YKEgeAl$(iM>9Zg(?J>X6{5q!EtvfvK@k>h2>~ z>&ETkklMKYr^cpbB&0ji!{Vai6X+JGj!B)^)Kt31rbpNkV^asjs{46zp4>c6CzPk+ zpxg9dM>-!l+Db9Wi75%ObcfBmsX{`cT@M9`2@(Bmu|qQAoqLw<%?;EeME&}BhNxd3 z8+KsS(Advq5C94fdYWFKvNS!>VbE~w70kL?z85$cy&pm05q4BZ9XvWIlIl-Et4o5ly1rGquR@PxkA)*&{I!h3T=lpx(uX5#iu%A6Jirv zMb>dR(wetw8__mCm{y2Zr?$f}AU54CQd%rscsw0k^PF(qPLGHgiUn{#Jv?aDW(*0% zV<8&=1H&VrQT_U+$B=*^x);aCC8s7j z==zZ0=pUa(kLuAG>2xi(?rG3JIU_nDwvjC{Bb^>dqw+pinVucf{>3FYO<#a()24{^ zc*s0l|3cg^0ZnW2{!NUgBa$|Z9_91}2lpzqU;#nK8SB0s5StELT>Jn>It5CkJ6=W- zy%(^h(YY@#3;i<^6Gu2wQj-U$J?x+xU!D`Pw&@I`3r2tS4AI#UnfJO|vt}BdMRb5i zMybVi=4?Ez(y5MHNOVTbU^=f-lIa2&n`#>tMd)vfNk~qMO-pyAB_yZQ&6jT1Nilh{ zjZ271=Q~j%U4G*o{Kzcl*RSt9g^cruF5va+(_MhJyy+?MIHo*xyEeyhB-w)XQ}AJ}P10yu$ikB{4$ahJX}X$h5ergdb9-$q zE$amoSua%;0HW=he*2!|9uXO@dVwf3cz4EnL;}obWQ2$N@#DwK>0rPQ#Zk5&wp<>3 z_x(X~_nHhEcQF3r>1`iZoG+)J8se$&Zt9#xCQu=~^K>S8(?cJEu47q6$kbYhfd&CG2fxNlwH zKN3QJD9ZOQ_`eU$^4*8S(yl@{h=^O9A@v^=UcAA4+PmDgbp{+~IiKFw?}W$5MK#`T zD4XHgy0@tZ(0eXSd3cW&5E){Id}@euP~Kv6u_zV9n$CNOYv=t@^_h-vd4m}OI4qr! zcA?p=?;MvAWP;xiJKXRVC`DstTy5Rvmkr<~u>AmK_?<)7vU%va9`NqeZ#@RsQQ?x4 z{_yI$L*H^)&C<2GzZk^8T}RlsV1nW)9DSF)KSqM@oZ(Yp#S`Qb$P#N@_jLNnm0*_i zu0jx~vAD*{|CD}%;*rA^%ZA1)u%YE}j2T_QgGI~^=&5%o(u=V-gPEt(7L|1cu*Z>KjCItktmmw^?|V2-ZnQDJ#z z1`W%!b>6LJRd=|&$5@%81HW;lvmQ8?@Tva@V~hqIqzT}o{^waG03@Ourkwan(dx+r zlIMeYzfZs}^96I0>Zt1VTH}j1v^svGsm0JUzTrM?Mg*)iD?+tlJZX3KWGUrd>=d{> zJjbln$&4G;QPt_gX}xk`YxlN;LEI8o8#3Dxhd(t$7lLfTx=L(XaT?!KO~R3Z@Ve6l zXXXHLL#s6yBfd{Q6k&hKPmY?4-+8cnULP}T4O)U(!wY+VQX-Vm<9kEEgI9fo-kI0& zAV>Q?>8HAebTFw)b}^bQe2Y)qZa+;o0X%n^b2 zN`cNFe3dPb+M)m`2=qcQcE)KZvKhdPb1UJ7kQvhFwB?;8&`z5{BJy}cfVjG61mK|A ze;X`fxU%26=#Cq+ z>0(;QC0y=q(uDi<>t--7h7F0s zX4Ue#es8ym(wENI#&ExFk3Y7G6I>KvBzy$jhty!6S#-4D8-hT=9JgXMNgfD@3r*~) z05RCP-hC*sfto$dU_%LXm0bOmJHyz*Z${O))2j}u<-rfv({cZYPJePU{QN_ge2X7U zZs&*Y4@hJD8F`E!kBieEi?ggL$?bW`TmPeZWG>2R*B_A9(f?H#&sPJazM7&|iXLq?7G5bC-AT|5}dUzm?OPg-&Pl z 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 z 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­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

    $WQwz0UVbr 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 literal 1844480 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 z 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

    Rgig&wY0RWQ(_ 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%0AXsV9kKKsK*q0dDmd>Hz? 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%0DBr=5IR%# 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≪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%0AiqmScDYL@&nbd2cKzcREDX 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%0Ar;x^18C5@D!o{Z0F{ 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�?H`_o?jvw#jP+M*^}j1;{g+X1 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®k{?=U3Z*zWKxj^IJgATQ{LR)(# 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 From 3ce0451fbd22bf90905b93c92a0e18a07f8fbd5d Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Wed, 17 Dec 2025 11:29:01 +0200 Subject: [PATCH 64/69] serialize embedding fields --- Runtime/LLM.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index ba751cf2..80b742e5 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -72,6 +72,14 @@ public class LLM : MonoBehaviour ///

    Persist this LLM GameObject across scene transitions [Tooltip("Persist this LLM GameObject across scene transitions")] [LLM] public bool dontDestroyOnLoad = true; + + /// True if this model only supports embeddings (no text generation) + [SerializeField] + private bool _embeddingsOnly = false; + + /// Number of dimensions in embedding vectors (0 if not an embedding model) + [SerializeField] + private int _embeddingLength = 0; #endregion #region Public Properties with Validation @@ -277,10 +285,10 @@ public string SSLKey public string architecture => llmlib?.architecture; /// True if this model only supports embeddings (no text generation) - public bool embeddingsOnly { get; private set; } = false; + public bool embeddingsOnly => _embeddingsOnly; /// Number of dimensions in embedding vectors (0 if not an embedding model) - public int embeddingLength { get; private set; } = 0; + public int embeddingLength => _embeddingLength; #endregion #region Private Fields @@ -582,8 +590,8 @@ public void SetReasoning(bool reasoning) /// True if model only supports embeddings public void SetEmbeddings(int embeddingLength, bool embeddingsOnly) { - this.embeddingsOnly = embeddingsOnly; - this.embeddingLength = embeddingLength; + _embeddingsOnly = embeddingsOnly; + _embeddingLength = embeddingLength; #if UNITY_EDITOR if (!EditorApplication.isPlaying) EditorUtility.SetDirty(this); From a741e631dfb0e641644b92367470d9a820f7d105 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 23 Dec 2025 12:57:25 +0200 Subject: [PATCH 65/69] update LlamaLib API --- Runtime/LlamaLib/LLMAgent.cs | 8 ++++---- Runtime/LlamaLib/LlamaLib.cs | 24 +++++++++++++----------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/Runtime/LlamaLib/LLMAgent.cs b/Runtime/LlamaLib/LLMAgent.cs index 619678d7..e7a58826 100644 --- a/Runtime/LlamaLib/LLMAgent.cs +++ b/Runtime/LlamaLib/LLMAgent.cs @@ -215,16 +215,16 @@ public int GetHistorySize() } // Chat functionality - public string Chat(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false) + public string Chat(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false, bool debugPrompt = false) { CheckLlamaLib(); - IntPtr result = llamaLib.LLMAgent_Chat(llm, userPrompt ?? string.Empty, addToHistory, callback, returnResponseJson); + IntPtr result = llamaLib.LLMAgent_Chat(llm, userPrompt ?? string.Empty, addToHistory, callback, returnResponseJson, debugPrompt); return Marshal.PtrToStringAnsi(result) ?? string.Empty; } - public async Task ChatAsync(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false) + public async Task ChatAsync(string userPrompt, bool addToHistory = true, LlamaLib.CharArrayCallback callback = null, bool returnResponseJson = false, bool debugPrompt = false) { - return await Task.Run(() => Chat(userPrompt, addToHistory, callback, returnResponseJson)); + return await Task.Run(() => Chat(userPrompt, addToHistory, callback, returnResponseJson, debugPrompt)); } // Override completion methods to use agent-specific implementations diff --git a/Runtime/LlamaLib/LlamaLib.cs b/Runtime/LlamaLib/LlamaLib.cs index 9bb1f3da..e95ffada 100644 --- a/Runtime/LlamaLib/LlamaLib.cs +++ b/Runtime/LlamaLib/LlamaLib.cs @@ -155,7 +155,8 @@ public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userPrompt, [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, CharArrayCallback callback = null, - [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); + [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false, + [MarshalAs(UnmanagedType.I1)] bool debugPrompt = false); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void LLMAgent_Clear_History_Delegate(IntPtr llm); @@ -237,10 +238,10 @@ public delegate IntPtr LLMAgent_Chat_Delegate(IntPtr llm, //################################################## STATUS CHECKING WRAPPER ##################################################// - public void CheckStatus() + public void CheckStatus(bool crashesOnly = false) { int status = LLM_Status_Code_Internal(); - if (status != 0) + if (status > 0 || (status < 0 && !crashesOnly)) { string msg = Marshal.PtrToStringAnsi(LLM_Status_Message_Internal()) ?? ""; throw new InvalidOperationException($"LlamaLib error {status}: {msg}"); @@ -249,7 +250,7 @@ public void CheckStatus() private T CallWithStatus(Func f) { - CheckStatus(); + CheckStatus(true); T r = f(); CheckStatus(); return r; @@ -257,7 +258,7 @@ private T CallWithStatus(Func f) private void CallWithStatus(Action a) { - CheckStatus(); + CheckStatus(true); a(); CheckStatus(); } @@ -316,8 +317,8 @@ public IntPtr LLMService_Construct( public IntPtr LLM_Get_Grammar(IntPtr llm) => CallWithStatus(() => LLM_Get_Grammar_Internal(llm)); public void LLMAgent_Set_Slot(IntPtr llm, int slotId) => CallWithStatus(() => LLMAgent_Set_Slot_Internal(llm, slotId)); public int LLMAgent_Get_Slot(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_Slot_Internal(llm)); - public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = true, CharArrayCallback callback = null, bool returnResponseJson = false) - => CallWithStatus(() => LLMAgent_Chat_Internal(llm, userPrompt, addToHistory, callback, returnResponseJson)); + public IntPtr LLMAgent_Chat(IntPtr llm, string userPrompt, bool addToHistory = true, CharArrayCallback callback = null, bool returnResponseJson = false, bool debugPrompt = false) + => CallWithStatus(() => LLMAgent_Chat_Internal(llm, userPrompt, addToHistory, callback, returnResponseJson, debugPrompt)); public void LLMAgent_Clear_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Clear_History_Internal(llm)); public IntPtr LLMAgent_Get_History(IntPtr llm) => CallWithStatus(() => LLMAgent_Get_History_Internal(llm)); public void LLMAgent_Set_History(IntPtr llm, string historyJson) => CallWithStatus(() => LLMAgent_Set_History_Internal(llm, historyJson)); @@ -506,7 +507,8 @@ public static extern IntPtr LLMAgent_Chat_Static(IntPtr llm, [MarshalAs(UnmanagedType.LPStr)] string userPrompt, [MarshalAs(UnmanagedType.I1)] bool addToHistory = true, CharArrayCallback callback = null, - [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false); + [MarshalAs(UnmanagedType.I1)] bool returnResponseJson = false, + [MarshalAs(UnmanagedType.I1)] bool debugPrompt = false); [DllImport(DllName, CallingConvention = CallingConvention.Cdecl, EntryPoint = "LLMAgent_Clear_History")] public static extern void LLMAgent_Clear_History_Static(IntPtr llm); @@ -575,8 +577,8 @@ public LlamaLib(bool gpu = false) LLM_Status_Code_Internal = () => LLM_Status_Code_Static(); LLM_Status_Message_Internal = () => LLM_Status_Message_Static(); LLM_Embedding_Size_Internal = (llm) => LLM_Embedding_Size_Static(llm); - LLMService_Construct_Internal = (modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths) => LLMService_Construct_With_Fallback(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths); - LLMService_From_Command_Internal = (paramsString) => LLMService_From_Command_With_Fallback(paramsString); + LLMService_Construct_Internal = (modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths) => LLMService_Construct_Static(modelPath, numSlots, numThreads, numGpuLayers, flashAttention, contextSize, batchSize, embeddingOnly, loraCount, loraPaths); + LLMService_From_Command_Internal = (paramsString) => LLMService_From_Command_Static(paramsString); LLMService_Command_Internal = (llm) => LLMService_Command_Static(llm); LLMClient_Construct_Internal = (llm) => LLMClient_Construct_Static(llm); LLMClient_Construct_Remote_Internal = (url, port, apiKey, numRetries) => LLMClient_Construct_Remote_Static(url, port, apiKey, numRetries); @@ -591,7 +593,7 @@ public LlamaLib(bool gpu = false) LLM_Get_Grammar_Internal = (llm) => LLM_Get_Grammar_Static(llm); LLMAgent_Set_Slot_Internal = (llm, slotId) => LLMAgent_Set_Slot_Static(llm, slotId); LLMAgent_Get_Slot_Internal = (llm) => LLMAgent_Get_Slot_Static(llm); - LLMAgent_Chat_Internal = (llm, userPrompt, addToHistory, callback, returnResponseJson) => LLMAgent_Chat_Static(llm, userPrompt, addToHistory, callback, returnResponseJson); + LLMAgent_Chat_Internal = (llm, userPrompt, addToHistory, callback, returnResponseJson, debugPrompt) => LLMAgent_Chat_Static(llm, userPrompt, addToHistory, callback, returnResponseJson, debugPrompt); LLMAgent_Clear_History_Internal = (llm) => LLMAgent_Clear_History_Static(llm); LLMAgent_Get_History_Internal = (llm) => LLMAgent_Get_History_Static(llm); LLMAgent_Set_History_Internal = (llm, historyJson) => LLMAgent_Set_History_Static(llm, historyJson); From 0b1d1b9e9e880ddab99da6b9f3efec136967dfa1 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 23 Dec 2025 12:57:41 +0200 Subject: [PATCH 66/69] update tests --- Tests/Runtime/TestLLM.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Tests/Runtime/TestLLM.cs b/Tests/Runtime/TestLLM.cs index 226d9ee0..aa35ecae 100644 --- a/Tests/Runtime/TestLLM.cs +++ b/Tests/Runtime/TestLLM.cs @@ -549,6 +549,12 @@ public override LLM CreateLLM() return llm; } + public override void SetParameters() + { + base.SetParameters(); + reply2 = "Of course! Ants are so smart—well, they’re not really!"; + } + public override void TestArchitecture() { Debug.Log(llm.architecture); @@ -584,7 +590,7 @@ public override void SetParameters() { base.SetParameters(); reply1 = "Sure! Here's a fun fact: Ants work together to build complex structures like nests, even though they don't have a brain."; - reply2 = "Of course! Here’s a fun fact: Ants are the most intelligent insects on Earth—though they’re not really smart, they’ve got a lot of teamwork and problem-solving skills."; + reply2 = "Of course! Here’s a fun fact: Ants are so smart—they can navigate mazes and even solve problems by using their exoskeleton as a map."; } } } From 8436724bb9227ac88c05135081b8e2ca91255cd4 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 23 Dec 2025 12:57:54 +0200 Subject: [PATCH 67/69] use internal debug prompt --- Runtime/LLMAgent.cs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/Runtime/LLMAgent.cs b/Runtime/LLMAgent.cs index 314dbada..8251595f 100644 --- a/Runtime/LLMAgent.cs +++ b/Runtime/LLMAgent.cs @@ -251,14 +251,7 @@ public virtual async Task Chat(string query, Action callback = n } SetCompletionParameters(); - result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, returnResponseJson: debugPrompt); - if (debugPrompt) - { - CompletionResponseJson responseJson = JsonUtility.FromJson(result); - LLMUnitySetup.Log(responseJson.prompt); - result = responseJson.content; - } - + result = await llmAgent.ChatAsync(query, addToHistory, wrappedCallback, false, debugPrompt); if (addToHistory && result != null && save != "") _ = SaveHistory(); completionCallback?.Invoke(); } From 3855ab51661120c7fba2503bd9847dff643bd54c Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 23 Dec 2025 13:07:10 +0200 Subject: [PATCH 68/69] update license --- LICENSE.md | 222 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 201 insertions(+), 21 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index dd36148d..261eeb9e 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,21 +1,201 @@ -MIT License - -Copyright (c) 2023 Undream AI - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 102eb53533639b8e4f87bc777a2dc11f9da43843 Mon Sep 17 00:00:00 2001 From: Antonis Makropoulos Date: Tue, 23 Dec 2025 13:26:50 +0200 Subject: [PATCH 69/69] show server architecture in the command --- Runtime/LLM.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/Runtime/LLM.cs b/Runtime/LLM.cs index 80b742e5..bf16470a 100644 --- a/Runtime/LLM.cs +++ b/Runtime/LLM.cs @@ -488,7 +488,15 @@ await Task.Run(() => flashAttention, contextSize, batchSize, embeddingsOnly, loraPaths.ToArray()); llmService = new LLMService(llmlib, llmPtr); - LLMUnitySetup.Log($"Deploy server command: llamalib_**architecture**_server {llmService.Command}"); + + string serverString = "llamalib_**architecture**_server"; + if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer || Application.platform == RuntimePlatform.WindowsServer) + serverString = "llamalib_win-x64_server.exe"; + else if (Application.platform == RuntimePlatform.OSXEditor || Application.platform == RuntimePlatform.OSXPlayer || Application.platform == RuntimePlatform.OSXServer) + serverString = SystemInfo.processorType.Contains("Intel") ? "llamalib_osx-x64_server" : "llamalib_osx-arm64_server"; + else if (Application.platform == RuntimePlatform.LinuxEditor || Application.platform == RuntimePlatform.LinuxPlayer || Application.platform == RuntimePlatform.LinuxServer) + serverString = "llamalib_linux-x64_server"; + LLMUnitySetup.Log($"Deploy server command: {serverString} {llmService.Command}"); SetupServer(); llmService.Start();