54 lines
1.9 KiB
C#
54 lines
1.9 KiB
C#
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<long, LMStudio.Chat> 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);
|
|
}
|