using System.ClientModel; using System.ClientModel.Primitives; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; using LMStudio; using OpenAI; using OpenAI.Chat; string baseUrl = Environment.GetEnvironmentVariable("LMSTUDIO_BASE_URL") ?? "http://lmstudio:8001"; string model = Environment.GetEnvironmentVariable("LMSTUDIO_MODEL") ?? string.Empty; string apiKey = Environment.GetEnvironmentVariable("LMSTUDIO_API_KEY") ?? string.Empty; var lmsclient = new ModelConnection(baseUrl, model, apiKey); Dictionary lmsChats = new(); var options = new OpenAIClientOptions() { Endpoint = new(baseUrl), NetworkTimeout = new TimeSpan(0, 0, 30) }; var openAiApiKey = new ApiKeyCredential(apiKey); var openAiClient = new OpenAIClient(openAiApiKey, options); string token = Environment.GetEnvironmentVariable("TELEGRAM_BOT_TOKEN") ?? string.Empty; using var cts = new CancellationTokenSource(); var bot = new TelegramBotClient(token, cancellationToken:cts.Token); var me = bot.GetMe(); bot.OnMessage += OnMessage; Console.ReadLine(); cts.Cancel(); async Task OnMessage(Message msg, UpdateType type) { //Discard any message that is not a text message if (msg.Type != MessageType.Text) return; //Check if the message contains the bot's username or a reply to a message sent by the bot if (msg.Text!.Contains(me.Result.Username!, StringComparison.OrdinalIgnoreCase) || msg.ReplyToMessage != null && msg.ReplyToMessage.From!.Id == me.Result.Id) { //Check if the chat is already in the dictionary if (!lmsChats.ContainsKey(msg.Chat.Id)) AddChatToDictionary(msg.Chat.Id); lmsChats[msg.Chat.Id].CreateChatCompletion(msg.Text); } } void AddChatToDictionary(long id) { //Create a new chat object var chat = new LMStudio.Chat(lmsclient); //add the entry to the dictionary lmsChats.Add(id, chat); }