diff --git a/.env b/.env index 11a3b79..d31e791 100644 --- a/.env +++ b/.env @@ -1,2 +1,2 @@ MODEL_PATH=./model -MODEL_NAME=Qwen2.5-7B-Instruct-Q8_0 \ No newline at end of file +MODEL_NAME=Qwen2.5-7B-Instruct-Q8_0.gguf \ No newline at end of file diff --git a/.idea/.idea.NemesisAI/Docker/compose.generated.override.yml b/.idea/.idea.NemesisAI/Docker/compose.generated.override.yml index 2c709cc..69a530b 100644 --- a/.idea/.idea.NemesisAI/Docker/compose.generated.override.yml +++ b/.idea/.idea.NemesisAI/Docker/compose.generated.override.yml @@ -5,16 +5,34 @@ services: context: "I:\\NemesisAI" dockerfile: "TelegramBot/Dockerfile" target: "build" + args: + BUILD_CONFIGURATION: "Debug" command: [] entrypoint: - - "dotnet" - - "/app/bin/Debug/net9.0/TelegramBot.dll" + - "/opt/JetBrains/RiderDebuggerTools/linux-x64/JetBrains.Debugger.Worker" + - "--runtimeconfig" + - "/opt/JetBrains/RiderDebuggerTools/JetBrains.Debugger.Worker.runtimeconfig.json" + - "--mode=server" + - "--frontend-port=57000" + - "--backend-port=57200" + - "--roslyn-worker-port=57400" + - "--timeout=60" environment: DOTNET_ENVIRONMENT: "Development" + RIDER_DEBUGGER_LOG_DIR: "/var/opt/JetBrains/RiderDebuggerTools" + RESHARPER_LOG_CONF: "/etc/opt/JetBrains/RiderDebuggerTools/backend-log.xml" image: "telegrambot:dev" - ports: [] + ports: + - "127.0.0.1:57017:57000" + - "127.0.0.1:57217:57200" + - "127.0.0.1:57417:57400" volumes: - "I:\\NemesisAI\\TelegramBot:/app:rw" - "I:\\NemesisAI:/src:rw" - "C:\\Users\\airon\\.nuget\\packages:/root/.nuget/packages" + - "C:\\Users\\airon\\AppData\\Local\\JetBrains\\RiderRemoteDebugger\\2024.3.3\\\ + Linux64:/opt/JetBrains/RiderDebuggerTools" + - "C:\\Users\\airon\\AppData\\Local\\Programs\\Rider\\bin\\backend-log.xml:/etc/opt/JetBrains/RiderDebuggerTools/backend-log.xml" + - "C:\\Users\\airon\\AppData\\Local\\JetBrains\\Rider2024.3\\log\\DebuggerWorker\\\ + JetBrains.Debugger.Worker.2024_12_26_01_25_50:/var/opt/JetBrains/RiderDebuggerTools:rw" working_dir: "/app" diff --git a/TelegramBot/.env b/TelegramBot/.env index e417606..c6a1612 100644 --- a/TelegramBot/.env +++ b/TelegramBot/.env @@ -1,4 +1,4 @@ TELEGRAM_BOT_TOKEN=yourTokenHere -OPENAI_BASE_URL=llm-server -OPENAI_MODEL=Qwen2.5-7B-Instruct-Q8_0 -OPENAI_API_KEY= +OPENAI_BASE_URL=http://llm-server/ +OPENAI_MODEL=Qwen2.5-7B-Instruct-Q8_0.gguf +OPENAI_API_KEY=MyApiKey diff --git a/TelegramBot/Program.cs b/TelegramBot/Program.cs index 6c4251a..2633190 100644 --- a/TelegramBot/Program.cs +++ b/TelegramBot/Program.cs @@ -1,6 +1,7 @@ using OpenAI; using OpenAI.Chat; using System.ClientModel; +using System.Threading.Channels; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; @@ -8,6 +9,13 @@ using Telegram.Bot.Types.Enums; string baseUrl = Environment.GetEnvironmentVariable("OPENAI_BASE_URL") ?? "https://api.openai.com"; string model = Environment.GetEnvironmentVariable("OPENAI_MODEL") ?? string.Empty; string apiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY") ?? string.Empty; +Console.WriteLine("Starting the bot..."); +Console.WriteLine( + $""" + Base URL: {baseUrl} + Model: {model} + API Key: {apiKey} + """); string nemesisPrompt = """ @@ -91,20 +99,29 @@ var openAiClient = new OpenAIClient(openAiApiKey, options); var chatClient = openAiClient.GetChatClient(model); string token = Environment.GetEnvironmentVariable("TELEGRAM_BOT_TOKEN") ?? string.Empty; +Console.WriteLine("OpenAI Chat Client created"); + using var cts = new CancellationTokenSource(); var bot = new TelegramBotClient(token, cancellationToken:cts.Token); var me = bot.GetMe(); bot.OnMessage += OnMessage; -Console.ReadLine(); -cts.Cancel(); +Console.WriteLine("Bot running"); +Thread.Sleep(Timeout.Infinite); +cts.Cancel(); // stop the bot 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 message contains the bot's username or a reply to a message sent by the bot or a private chat + if (msg.Text!.Contains(me.Result.FirstName!, StringComparison.OrdinalIgnoreCase) || + msg.ReplyToMessage != null && msg.ReplyToMessage.From!.Id == me.Result.Id || + msg.Chat.Type == ChatType.Private) { + Console.WriteLine( + $""" + Received message from {msg.Chat.Id} Type: {type} + Message: {msg.Text} + """); var chatid = msg.Chat.Id; //Check if the chat is already in the dictionary if (!oaiChats.ContainsKey(chatid)) @@ -114,7 +131,7 @@ async Task OnMessage(Message msg, UpdateType type) //fetch existing messages history var messages = oaiChats[chatid]; //Fetch the response from the model - var result = chatClient.CompleteChat(messages).Value.Content.ToString()!; + var result = chatClient.CompleteChat(messages).Value.Content[0].Text; //Add the response to the chat oaiChats[chatid].Add(new AssistantChatMessage(result)); //Send the response to the user