diff --git a/BotSharp.sln b/BotSharp.sln index ccaa90c5..e8de4184 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -47,8 +47,6 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Debug|x64 = Debug|x64 - GPU|Any CPU = GPU|Any CPU - GPU|x64 = GPU|x64 Release|Any CPU = Release|Any CPU Release|x64 = Release|x64 EndGlobalSection @@ -57,10 +55,6 @@ Global {197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|Any CPU.Build.0 = Debug|Any CPU {197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|x64.ActiveCfg = Debug|Any CPU {197885F1-2EB2-4709-B9AA-A777878D74B3}.Debug|x64.Build.0 = Debug|Any CPU - {197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|Any CPU.Build.0 = Release|Any CPU - {197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|x64.ActiveCfg = Release|Any CPU - {197885F1-2EB2-4709-B9AA-A777878D74B3}.GPU|x64.Build.0 = Release|Any CPU {197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|Any CPU.ActiveCfg = Release|Any CPU {197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|Any CPU.Build.0 = Release|Any CPU {197885F1-2EB2-4709-B9AA-A777878D74B3}.Release|x64.ActiveCfg = Release|Any CPU @@ -69,10 +63,6 @@ Global {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|Any CPU.Build.0 = Debug|Any CPU {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|x64.ActiveCfg = Debug|x64 {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Debug|x64.Build.0 = Debug|x64 - {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|Any CPU.Build.0 = Release|Any CPU - {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|x64.ActiveCfg = Release|x64 - {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.GPU|x64.Build.0 = Release|x64 {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|Any CPU.ActiveCfg = Release|Any CPU {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|Any CPU.Build.0 = Release|Any CPU {36F5CEBD-31A8-4BEF-8BAA-BAC4E63E4815}.Release|x64.ActiveCfg = Release|x64 @@ -81,10 +71,6 @@ Global {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|Any CPU.Build.0 = Debug|Any CPU {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|x64.ActiveCfg = Debug|Any CPU {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Debug|x64.Build.0 = Debug|Any CPU - {07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|Any CPU.Build.0 = Release|Any CPU - {07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|x64.ActiveCfg = Release|Any CPU - {07AD18C5-CE7B-495A-815F-170E93CCC42A}.GPU|x64.Build.0 = Release|Any CPU {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|Any CPU.ActiveCfg = Release|Any CPU {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|Any CPU.Build.0 = Release|Any CPU {07AD18C5-CE7B-495A-815F-170E93CCC42A}.Release|x64.ActiveCfg = Release|Any CPU @@ -93,10 +79,6 @@ Global {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|Any CPU.Build.0 = Debug|Any CPU {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|x64.ActiveCfg = Debug|Any CPU {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Debug|x64.Build.0 = Debug|Any CPU - {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|Any CPU.Build.0 = Release|Any CPU - {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|x64.ActiveCfg = Release|Any CPU - {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.GPU|x64.Build.0 = Release|Any CPU {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|Any CPU.ActiveCfg = Release|Any CPU {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|Any CPU.Build.0 = Release|Any CPU {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899}.Release|x64.ActiveCfg = Release|Any CPU @@ -105,10 +87,6 @@ Global {57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|Any CPU.Build.0 = Debug|Any CPU {57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|x64.ActiveCfg = Debug|Any CPU {57806BAF-7736-425A-B499-13A2A2DF1E63}.Debug|x64.Build.0 = Debug|Any CPU - {57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|Any CPU.Build.0 = Release|Any CPU - {57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|x64.ActiveCfg = Release|Any CPU - {57806BAF-7736-425A-B499-13A2A2DF1E63}.GPU|x64.Build.0 = Release|Any CPU {57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|Any CPU.ActiveCfg = Release|Any CPU {57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|Any CPU.Build.0 = Release|Any CPU {57806BAF-7736-425A-B499-13A2A2DF1E63}.Release|x64.ActiveCfg = Release|Any CPU @@ -117,10 +95,6 @@ Global {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|Any CPU.Build.0 = Debug|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|x64.ActiveCfg = Debug|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Debug|x64.Build.0 = Debug|Any CPU - {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|Any CPU.Build.0 = Release|Any CPU - {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|x64.ActiveCfg = Release|Any CPU - {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.GPU|x64.Build.0 = Release|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|Any CPU.ActiveCfg = Release|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|Any CPU.Build.0 = Release|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|x64.ActiveCfg = Release|Any CPU @@ -129,10 +103,6 @@ Global {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|x64.ActiveCfg = Debug|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|x64.Build.0 = Debug|Any CPU - {2323A7A3-E938-488D-A57E-638638054BC4}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {2323A7A3-E938-488D-A57E-638638054BC4}.GPU|Any CPU.Build.0 = Release|Any CPU - {2323A7A3-E938-488D-A57E-638638054BC4}.GPU|x64.ActiveCfg = Release|Any CPU - {2323A7A3-E938-488D-A57E-638638054BC4}.GPU|x64.Build.0 = Release|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Release|Any CPU.ActiveCfg = Release|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Release|Any CPU.Build.0 = Release|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Release|x64.ActiveCfg = Release|Any CPU @@ -141,10 +111,6 @@ Global {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|Any CPU.Build.0 = Debug|Any CPU {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|x64.ActiveCfg = Debug|Any CPU {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Debug|x64.Build.0 = Debug|Any CPU - {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|Any CPU.Build.0 = Release|Any CPU - {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|x64.ActiveCfg = Release|Any CPU - {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.GPU|x64.Build.0 = Release|Any CPU {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|Any CPU.ActiveCfg = Release|Any CPU {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|Any CPU.Build.0 = Release|Any CPU {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6}.Release|x64.ActiveCfg = Release|Any CPU @@ -153,10 +119,6 @@ Global {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|Any CPU.Build.0 = Debug|Any CPU {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|x64.ActiveCfg = Debug|Any CPU {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Debug|x64.Build.0 = Debug|Any CPU - {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|Any CPU.Build.0 = Release|Any CPU - {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|x64.ActiveCfg = Release|Any CPU - {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.GPU|x64.Build.0 = Release|Any CPU {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|Any CPU.ActiveCfg = Release|Any CPU {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|Any CPU.Build.0 = Release|Any CPU {6D8D18A9-86D7-455E-81EC-9682C30AB7E7}.Release|x64.ActiveCfg = Release|Any CPU @@ -165,10 +127,6 @@ Global {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|Any CPU.Build.0 = Debug|Any CPU {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|x64.ActiveCfg = Debug|Any CPU {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Debug|x64.Build.0 = Debug|Any CPU - {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|Any CPU.Build.0 = Release|Any CPU - {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|x64.ActiveCfg = Release|Any CPU - {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.GPU|x64.Build.0 = Release|Any CPU {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|Any CPU.ActiveCfg = Release|Any CPU {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|Any CPU.Build.0 = Release|Any CPU {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83}.Release|x64.ActiveCfg = Release|Any CPU @@ -177,10 +135,6 @@ Global {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|Any CPU.Build.0 = Debug|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|x64.ActiveCfg = Debug|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Debug|x64.Build.0 = Debug|Any CPU - {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|Any CPU.ActiveCfg = Debug|Any CPU - {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|Any CPU.Build.0 = Debug|Any CPU - {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|x64.ActiveCfg = Debug|Any CPU - {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.GPU|x64.Build.0 = Debug|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|Any CPU.ActiveCfg = Release|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|Any CPU.Build.0 = Release|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|x64.ActiveCfg = Release|Any CPU @@ -189,10 +143,6 @@ Global {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|Any CPU.Build.0 = Debug|Any CPU {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.ActiveCfg = Debug|Any CPU {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.Build.0 = Debug|Any CPU - {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.ActiveCfg = Debug|Any CPU - {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.Build.0 = Debug|Any CPU - {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.ActiveCfg = Debug|Any CPU - {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.Build.0 = Debug|Any CPU {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.ActiveCfg = Release|Any CPU {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.Build.0 = Release|Any CPU {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|x64.ActiveCfg = Release|Any CPU diff --git a/docs/architecture/data_storage.md b/docs/architecture/data_storage.md new file mode 100644 index 00000000..ab6ea077 --- /dev/null +++ b/docs/architecture/data_storage.md @@ -0,0 +1 @@ +# Data Storage \ No newline at end of file diff --git a/docs/conf.py b/docs/conf.py index b11cd052..666719bf 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -64,9 +64,9 @@ author = 'Haiping Chen' # built documents. # # The short X.Y version. -version = '0.8' +version = '0.9' # The full version, including alpha/beta/rc tags. -release = '0.8.0' +release = '0.9.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/docs/configuration/db.rst b/docs/configuration/db.rst deleted file mode 100644 index 6276150a..00000000 --- a/docs/configuration/db.rst +++ /dev/null @@ -1,6 +0,0 @@ -Database Settings -================= - -:: - -"Redis": "127.0.0.1:6379,defaultDatabase=BotSharp,poolsize=50,ssl=false,writeBuffer=10240,prefix=agent_" \ No newline at end of file diff --git a/docs/configuration/platform.rst b/docs/configuration/platform.rst deleted file mode 100644 index f3d23026..00000000 --- a/docs/configuration/platform.rst +++ /dev/null @@ -1,16 +0,0 @@ -Platform Settings -================= - -* app.json - -:: - -"Assemblies": "BotSharp.Core" - - - -* BotSharpAi.json - -:: - -"Pipe": "BotSharpTokenizer, BotSharpTagger, BotSharpCRFNer, BotSharpIntentClassifier" \ No newline at end of file diff --git a/docs/index.rst b/docs/index.rst index 371c2a0e..838df89c 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -66,18 +66,27 @@ The main documentation for the site is organized into the following sections: .. toctree:: :maxdepth: 3 - :caption: Channels Integration Documentation: + :caption: Channels Integration integrations/facebook-messenger +.. _knowledge-base: + +.. toctree:: + :maxdepth: 3 + :caption: Knowledge Base + + knowledge-base/text-embedding + knowledge-base/vector-database + knowledge-base/similarity-search + .. _architecture-docs: .. toctree:: :maxdepth: 3 - :caption: Architecture Documentation: + :caption: Architecture: - configuration/db - configuration/platform + architecture/data_storage If you feel that this project is helpful to you, please Star us on the project, we will be very grateful. diff --git a/docs/knowledge-base/assets/feed_knowledge_answer.png b/docs/knowledge-base/assets/feed_knowledge_answer.png new file mode 100644 index 00000000..5e80731e Binary files /dev/null and b/docs/knowledge-base/assets/feed_knowledge_answer.png differ diff --git a/docs/knowledge-base/assets/feed_knowledge_pdf.png b/docs/knowledge-base/assets/feed_knowledge_pdf.png new file mode 100644 index 00000000..11a86f78 Binary files /dev/null and b/docs/knowledge-base/assets/feed_knowledge_pdf.png differ diff --git a/docs/knowledge-base/similarity-search.md b/docs/knowledge-base/similarity-search.md new file mode 100644 index 00000000..b8f02778 --- /dev/null +++ b/docs/knowledge-base/similarity-search.md @@ -0,0 +1,17 @@ +# Similarity Search + +After we have learned the concepts of `Text Embedding` and `Vector Database`, we can start to use BotSharp to actually build an LLM-based knowledge base question system. +Below we will walk through how to use an existing PDF document to make a Q&A chatbot. + +## Feed knowledge + +Use the feed knowledge interface to feed knowledge into the database. Before that, you need to create an Agent to manage the Chatbot, and the Agent's `id` is needed in subsequent operations. +`http://localhost:5500/knowledge/{agentId}`, You can add `startPageNum` and `endPageNum` to select useful parts of the document. + +![Alt text](assets/feed_knowledge_pdf.png) + +## Retrieve knowledge + +After you have finished inputting knowledge, you can start asking related questions with your AI Assistant. + +![Alt text](assets/feed_knowledge_answer.png) \ No newline at end of file diff --git a/docs/knowledge-base/text-embedding.md b/docs/knowledge-base/text-embedding.md new file mode 100644 index 00000000..17b213f5 --- /dev/null +++ b/docs/knowledge-base/text-embedding.md @@ -0,0 +1,59 @@ +# Text Embedding + +Text embeddings represent human language to computers, enabling tasks like semantic search. `BotSharp` supports a variety of Embedding methods, and supports the extension of more Embedding methods through engineering abstraction. + +## fastText embedding +[FastText](https://fasttext.cc/) is an open-source, free, lightweight library that allows users to learn text representations and text classifiers. It works on standard, generic hardware. Models can later be reduced in size to even fit on mobile devices. In order to use the fastText embedding method, please make sure to install [BotSharp.Plugin.MetaAI](https://www.nuget.org/packages/BotSharp.Plugin.MetaAI), and enable this plugin in your local settings. It is also necessary to [download](https://fasttext.cc/docs/en/english-vectors.html) the pre-trained model of fastText and specify the location of the model in the settings. + +```json +"PluginLoader": { + "Assemblies": [ + "BotSharp.Plugin.MetaAI" + ], + "Plugins": [ + "KnowledgeBasePlugin", + "MemVecDbPlugin", + "MetaAiPlugin" + ] +}, + +"KnowledgeBase": { + "TextEmbedding": "fastTextEmbeddingProvider" +}, + +"MetaAi": { + "fastText": { + "ModelPath": "crawl-300d-2M-subword.bin" + } +} +``` + +## LLamaSharp.TextEmbeddingProvider +`LLamaSharp` also provides an LLM embedding. For more operation methods of LLamaSharp, please refer to its [repo address](https://github.com/SciSharp/LLamaSharp) . +You need to download the corresponding LLM open source model like `llama2` to the local. + +```json +"PluginLoader": { + "Assemblies": [ + "BotSharp.Core" + ], + "Plugins": [ + "KnowledgeBasePlugin", + "MemVecDbPlugin", + "LLamaSharpPlugin" + ] +}, + +"KnowledgeBase": { + "TextEmbedding": "LLamaSharp.TextEmbeddingProvider" +}, + +"LlamaSharp": { + "ModelPath": "llama-2-7b-chat.ggmlv3.q3_K_S.bin" +} +``` + +## TensorFlow BERT + +## Train your own embedding +You can also train an embedding model yourself from scratch using [TensorFlow.NET](https://github.com/SciSharp/TensorFlow.NET). \ No newline at end of file diff --git a/docs/knowledge-base/vector-database.md b/docs/knowledge-base/vector-database.md new file mode 100644 index 00000000..f7e0c77c --- /dev/null +++ b/docs/knowledge-base/vector-database.md @@ -0,0 +1,6 @@ +# Vector Database + +In order to use your own private data to build a knowledge base question answering system, you must first convert your documents into plain text, and then embed the text into the Vector database for indexing to improve subsequent search efficiency. + +## Memory vector datbase +`MemVecDb` is a lightweight memory vector database provided by BotSharp for rapid development and testing. It is not recommended to be used in the actual production environment. \ No newline at end of file diff --git a/src/Infrastructure/BotSharp.Core/Plugins/LLamaSharp/ChatCompletionProvider.cs b/src/Infrastructure/BotSharp.Core/Plugins/LLamaSharp/ChatCompletionProvider.cs index ea32da04..02516b9a 100644 --- a/src/Infrastructure/BotSharp.Core/Plugins/LLamaSharp/ChatCompletionProvider.cs +++ b/src/Infrastructure/BotSharp.Core/Plugins/LLamaSharp/ChatCompletionProvider.cs @@ -19,9 +19,33 @@ public class ChatCompletionProvider : IChatCompletion throw new NotImplementedException(); } - public Task GetChatCompletionsAsync(Agent agent, List conversations, Func onMessageReceived) + public async Task GetChatCompletionsAsync(Agent agent, List conversations, Func onMessageReceived) { - throw new NotImplementedException(); + var content = string.Join("\n", conversations.Select(x => $"{x.Role}: {x.Content.Replace("user:", "User:")}")).Trim(); + content += "\nBob: "; + + var llama = _services.GetRequiredService(); + llama.LoadModel(); + var executor = new StatelessExecutor(llama.Model); + var inferenceParams = new InferenceParams() + { + Temperature = 1.0f, + AntiPrompts = new List { "User:" }, + MaxTokens = 256 + }; + + string totalResponse = ""; + + var prompt = agent.Instruction + content; + await foreach (var response in executor.InferAsync(prompt, inferenceParams)) + { + Console.Write(response); + totalResponse += response; + } + + await onMessageReceived(new RoleDialogModel("assistant", totalResponse)); + + return true; } public async Task GetChatCompletionsStreamingAsync(Agent agent, List conversations, Func onMessageReceived)