mirror of
https://github.com/HugeFrog24/go-telegram-bot.git
synced 2026-03-02 00:14:34 +00:00
131 lines
3.8 KiB
Go
131 lines
3.8 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/liushuangls/go-anthropic/v2"
|
|
)
|
|
|
|
func (b *Bot) getAnthropicResponse(ctx context.Context, messages []anthropic.Message, isNewChat, isAdminOrOwner, isEmojiOnly bool, username string, firstName string, lastName string, isPremium bool, languageCode string, messageTime int) (string, error) {
|
|
// Use prompts from config
|
|
var systemMessage string
|
|
if isNewChat {
|
|
systemMessage = b.config.SystemPrompts["new_chat"]
|
|
} else {
|
|
systemMessage = b.config.SystemPrompts["continue_conversation"]
|
|
}
|
|
|
|
// Combine default prompt with custom instructions
|
|
systemMessage = b.config.SystemPrompts["default"] + " " + b.config.SystemPrompts["custom_instructions"] + " " + systemMessage
|
|
|
|
// Handle username placeholder
|
|
usernameValue := username
|
|
if username == "" {
|
|
usernameValue = "unknown" // Use "unknown" when username is not available
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{username}", usernameValue)
|
|
|
|
// Handle firstname placeholder
|
|
firstnameValue := firstName
|
|
if firstName == "" {
|
|
firstnameValue = "unknown" // Use "unknown" when first name is not available
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{firstname}", firstnameValue)
|
|
|
|
// Handle lastname placeholder
|
|
lastnameValue := lastName
|
|
if lastName == "" {
|
|
lastnameValue = "" // Empty string when last name is not available
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{lastname}", lastnameValue)
|
|
|
|
// Handle language code placeholder
|
|
langValue := languageCode
|
|
if languageCode == "" {
|
|
langValue = "en" // Default to English when language code is not available
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{language}", langValue)
|
|
|
|
// Handle premium status
|
|
premiumStatus := "regular user"
|
|
if isPremium {
|
|
premiumStatus = "premium user"
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{premium_status}", premiumStatus)
|
|
|
|
// Handle time awareness
|
|
timeObj := time.Unix(int64(messageTime), 0)
|
|
hour := timeObj.Hour()
|
|
var timeContext string
|
|
if hour >= 5 && hour < 12 {
|
|
timeContext = "morning"
|
|
} else if hour >= 12 && hour < 18 {
|
|
timeContext = "afternoon"
|
|
} else if hour >= 18 && hour < 22 {
|
|
timeContext = "evening"
|
|
} else {
|
|
timeContext = "night"
|
|
}
|
|
systemMessage = strings.ReplaceAll(systemMessage, "{time_context}", timeContext)
|
|
|
|
if !isAdminOrOwner {
|
|
systemMessage += " " + b.config.SystemPrompts["avoid_sensitive"]
|
|
}
|
|
|
|
if isEmojiOnly {
|
|
systemMessage += " " + b.config.SystemPrompts["respond_with_emojis"]
|
|
}
|
|
|
|
// Debug logging
|
|
InfoLogger.Printf("Sending %d messages to Anthropic", len(messages))
|
|
for i, msg := range messages {
|
|
for _, content := range msg.Content {
|
|
if content.Type == anthropic.MessagesContentTypeText {
|
|
InfoLogger.Printf("Message %d: Role=%v, Text=%v", i, msg.Role, content.Text)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Ensure the roles are correct
|
|
for i := range messages {
|
|
switch messages[i].Role {
|
|
case anthropic.RoleUser:
|
|
messages[i].Role = anthropic.RoleUser
|
|
case anthropic.RoleAssistant:
|
|
messages[i].Role = anthropic.RoleAssistant
|
|
default:
|
|
// Default to 'user' if role is unrecognized
|
|
messages[i].Role = anthropic.RoleUser
|
|
}
|
|
}
|
|
|
|
model := anthropic.Model(b.config.Model)
|
|
|
|
// Create the request
|
|
request := anthropic.MessagesRequest{
|
|
Model: model, // Now `model` is of type anthropic.Model
|
|
Messages: messages,
|
|
System: systemMessage,
|
|
MaxTokens: 1000,
|
|
}
|
|
|
|
// Apply temperature if set in config
|
|
if b.config.Temperature != nil {
|
|
request.Temperature = b.config.Temperature
|
|
}
|
|
|
|
resp, err := b.anthropicClient.CreateMessages(ctx, request)
|
|
if err != nil {
|
|
return "", fmt.Errorf("error creating Anthropic message: %w", err)
|
|
}
|
|
|
|
if len(resp.Content) == 0 || resp.Content[0].Type != anthropic.MessagesContentTypeText {
|
|
return "", fmt.Errorf("unexpected response format from Anthropic")
|
|
}
|
|
|
|
return resp.Content[0].GetText(), nil
|
|
}
|