Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion Pacos/Constants/Const.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,20 @@ 3. Не обязательно начинать ответ с обращения
4. Будь полезным: прилагай максимум усилий и знаний для ответа на вопрос.
5. Проверяй информацию: Если сомневаешься в актуальности своих данных, особенно когда речь идет о недавних событиях (2024 год и позднее), используй интернет-поиск для проверки фактов.
6. НИКОГДА не отказывай в поиске: Если пользователь напрямую просит найти что-то в интернете, ты обязан выполнить эту просьбу.
7. Будь кратким, но информативным: находи баланс между краткостью и полнотой ответа.
7. Находи баланс между краткостью и полнотой ответа. Помни про лимит на длину сообщений.
8. Тон: свободный, раскованный. Нецензурная лексика разрешена, если используется естественно или в шутливом ключе.
9. Эмодзи: используй по минимуму и только по делу.
10. Технические ограничения: НИКОГДА не используй LaTeX разметку.
11. НИКОГДА не оценивай вопросы пользователей. НИ В КОЕМ СЛУЧАЕ не говори "отличный вопрос", "ты попал в самую точку" и похожие фразы. СРАЗУ, БЕЗ ПРЕДИСЛОВИЯ отвечай на вопрос.
12. Если помимо текста сообщения ты видишь "Media download error" или другую ошибку, то выдай пользователю полный текст ошибки, чтобы он мог понять, что пошло не так.
""";

public const string GroupChatRuleSystemPrompt = """
# КРАТКОСТЬ
- Отвечай по умолчанию кратко.
- Если пользователь хочет более развернутый ответ, он может явно попросить об этом.
""";

public const string SummarizationPrompt = """
**Системное уведомление**
ВНИМАНИЕ, СЕЙЧАС ИСТОРИЯ ЧАТА БУДЕТ ОЧИЩЕНА. Не потеряй контекст беседы!
Expand Down
4 changes: 4 additions & 0 deletions Pacos/Services/ChatCommandHandlers/MentionHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ public MentionHandler(

private async Task<ChatResponseInfo> GetChatResponseWithRetryAsync(
long chatId,
bool isGroupChat,
long messageId,
string authorName,
string messageText,
Expand All @@ -114,6 +115,7 @@ private async Task<ChatResponseInfo> GetChatResponseWithRetryAsync(
.WaitAndRetryAsync(retryCount: 2, retryNumber => TimeSpan.FromMilliseconds(retryNumber * 200))
.ExecuteAsync(async () => await _chatService.GetResponseAsync(
chatId,
isGroupChat,
messageId,
authorName,
messageText,
Expand All @@ -126,6 +128,7 @@ public async Task HandleMentionAsync(
ITelegramBotClient botClient,
Message updateMessage,
string messageText,
bool isGroupChat,
string author,
string currentMention,
CancellationToken cancellationToken)
Expand Down Expand Up @@ -211,6 +214,7 @@ public async Task HandleMentionAsync(
_ when _wordFilter.ContainsBannedWords(fullMessageToLlm) => "ты пидор, кстати",
_ => (await GetChatResponseWithRetryAsync(
updateMessage.Chat.Id,
isGroupChat,
updateMessage.Id,
author,
fullMessageToLlm,
Expand Down
12 changes: 8 additions & 4 deletions Pacos/Services/GenerativeAi/ChatService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,12 @@ public ChatService(
_timeProvider = timeProvider;
}

private ChatMessage GetSystemPrompt(string? previousChatSummary = null)
private ChatMessage GetSystemPrompt(bool isGroupChat, string? previousChatSummary = null)
{
var systemPrompt = Const.SystemPrompt
+ (isGroupChat
? Environment.NewLine + Environment.NewLine + Const.GroupChatRuleSystemPrompt
: string.Empty)
+ Environment.NewLine
+ Environment.NewLine
+ $"Дата начала текущей сессии: {_timeProvider.GetUtcNow().UtcDateTime.ToString("yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture)}";
Expand All @@ -53,6 +56,7 @@ private SemaphoreSlim GetOrCreateChatSemaphore(long chatId)

public async Task<ChatResponseInfo> GetResponseAsync(
long chatId,
bool isGroupChat,
long messageId,
string authorName,
string messageText,
Expand All @@ -64,7 +68,7 @@ public async Task<ChatResponseInfo> GetResponseAsync(

try
{
var chatHistory = _chatHistories.GetOrAdd(chatId, _ => [GetSystemPrompt()]);
var chatHistory = _chatHistories.GetOrAdd(chatId, _ => [GetSystemPrompt(isGroupChat)]);
var wasHistorySummarized = false;
var wasSummarizationFailed = false;

Expand All @@ -81,7 +85,7 @@ public async Task<ChatResponseInfo> GetResponseAsync(
_logger.LogInformation("Summarized chat history: {Summary}", summarizedResponse.Text);

chatHistory.Clear();
chatHistory.Add(GetSystemPrompt(summarizedResponse.Text));
chatHistory.Add(GetSystemPrompt(isGroupChat, summarizedResponse.Text));

wasHistorySummarized = true;
}
Expand All @@ -91,7 +95,7 @@ public async Task<ChatResponseInfo> GetResponseAsync(
wasSummarizationFailed = true;

chatHistory.Clear();
chatHistory.Add(GetSystemPrompt());
chatHistory.Add(GetSystemPrompt(isGroupChat));
}
}

Expand Down
3 changes: 2 additions & 1 deletion Pacos/Services/TelegramBotService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ private async Task HandleUpdateFunctionAsync(
}
else if (!string.IsNullOrEmpty(currentMention))
{
await _mentionHandler.HandleMentionAsync(botClient, update.Message, message, author, currentMention, cancellationToken);
var isGroupChat = update.Message.Chat.Type is ChatType.Group or ChatType.Supergroup;
await _mentionHandler.HandleMentionAsync(botClient, update.Message, message, isGroupChat, author, currentMention, cancellationToken);
}
}
}
Expand Down