-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAI.cs
85 lines (71 loc) · 3.02 KB
/
AI.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
using DSharpPlus.Entities;
using OllamaSharp;
using OllamaSharp.Models.Chat;
namespace SeekDeeper
{
internal class AI
{
private Uri ApiAddress;
private OllamaApiClient OllamaClient;
public AI(string url = "http://localhost:11434")
{
ApiAddress = new Uri(url);
OllamaClient = new OllamaApiClient(ApiAddress)
{
SelectedModel = "deepseek-r1:8b"
};
}
public async Task<string?> GenerateResponse(DiscordMessage triggerMessage, DiscordChannel channel)
{
return await Task.Run(() =>
{
List<DiscordMessage> rawMessages = channel.GetMessagesBeforeAsync(triggerMessage.Id, limit: 20).ToBlockingEnumerable().ToList();
List<Message> messages = [];
string setupMessage =
"""
You are SeekDeep. A Discord chat bot.
You are direct and reply shortly and promptly.
Your username: SeekDeeper
Your ID: 1342955845817733241
Messages will be provided to you in the following standard:
{username} | {userID}: {messageContent}
You reply without this formatting.
To mention a user use this format: <@{userID}>
Limit message text formatting to the minumum or to what Discord supports
""";
messages.Add
(
new Message(ChatRole.System, setupMessage)
);
foreach (DiscordMessage rawMessage in rawMessages)
{
if (rawMessage.Author == null)
{
continue;
}
if (rawMessage.Author.IsCurrent)
{
messages.Add(new Message(ChatRole.Assistant, $"{rawMessage.Author.Username} | {rawMessage.Author.Id}: {rawMessage.Content}"));
}
else
{
messages.Add(new Message(ChatRole.User, $"{rawMessage.Author.Username} | {rawMessage.Author.Id}: {rawMessage.Content}"));
}
}
messages.Add(new Message(ChatRole.User, $"{triggerMessage.Author?.Username} | {triggerMessage.Author?.Id}: {triggerMessage.Content}"));
messages.Add(new Message(ChatRole.System, "As SeekDeeper, generate a response to the user"));
ChatRequest chatRequest = new()
{
Messages = messages,
Options = new OllamaSharp.Models.RequestOptions()
{
Temperature = 1,
FrequencyPenalty = 1.1F,
PresencePenalty = 1,
}
};
return OllamaClient.ChatAsync(chatRequest).StreamToEndAsync().Result?.Message.Content;
});
}
}
}