chat compress and some features
This commit is contained in:
@@ -1,11 +1,7 @@
|
||||
package ai
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
const PawanBaseURL = "https://api.pawan.krd"
|
||||
const GPTBaseUrl = "https://chat.gpt-chatbot.ru/api/openai"
|
||||
const CompressPrompt = "Сделай выжимку нашего диалога. Сохрани все ключевые моменты(например одежду, расположение, основные действия и фразы и тд.) из каждого сообщения. Если в истории уже есть выжимка, проанализируй размер и информацию. Если выжимка короткая, скопируй её с минимальными изменениями, а если длинная, то сократи её, не упуская деталей. Всегда копируй основные моменты из выжимки, если таковая имеется. Для моих сообщений используй обращение во втором лице(ты, вы), для своих в первом лице(я)."
|
||||
const CompressPrompt = "Сделай выжимку нашего диалога. Сохрани все ключевые моменты(например сколько одежды, расположение, основные действия и фразы и тд.) из каждого сообщения, но никогда не копируй описание персонажа(цвет волос и глаз, характер и т.д.). Если в истории уже есть выжимка, проанализируй размер и информацию. Если выжимка короткая, скопируй её с минимальными изменениями, а если длинная, то сократи, не упуская деталей. Всегда копируй основные моменты из выжимки, если таковая имеется. Для моих сообщений используй обращение во втором лице(ты, вы), для своих в первом(я). Всегда называй вещи своими именами и не используй Markdown форматирование. После твоего сообщения будет добавлено 20 сообщений из этого диалога, по 10 твоих и моих."
|
||||
|
||||
var CosmoRPUrl = fmt.Sprintf("%s/cosmosrp-2.5", PawanBaseURL)
|
||||
//const PawanBaseURL = "https://api.pawan.krd"
|
||||
//var CosmoRPUrl = fmt.Sprintf("%s/cosmosrp-2.5", PawanBaseURL)
|
||||
|
||||
@@ -22,21 +22,18 @@ type OpenAIResponse struct {
|
||||
Usage Usage `json:"usage"`
|
||||
ServiceTier string `json:"service_tier"`
|
||||
}
|
||||
|
||||
type Choice struct {
|
||||
Index int64 `json:"index"`
|
||||
Message Message `json:"message"`
|
||||
Logprobs interface{} `json:"logprobs"`
|
||||
FinishReason string `json:"finish_reason"`
|
||||
}
|
||||
|
||||
type Message struct {
|
||||
Role string `json:"role"`
|
||||
Content string `json:"content"`
|
||||
Refusal interface{} `json:"refusal"`
|
||||
Annotations []interface{} `json:"annotations"`
|
||||
}
|
||||
|
||||
type Usage struct {
|
||||
PromptTokens int64 `json:"prompt_tokens"`
|
||||
CompletionTokens int64 `json:"completion_tokens"`
|
||||
@@ -44,19 +41,16 @@ type Usage struct {
|
||||
PromptTokensDetails PromptTokensDetails `json:"prompt_tokens_details"`
|
||||
CompletionTokensDetails CompletionTokensDetails `json:"completion_tokens_details"`
|
||||
}
|
||||
|
||||
type CompletionTokensDetails struct {
|
||||
ReasoningTokens int64 `json:"reasoning_tokens"`
|
||||
AudioTokens int64 `json:"audio_tokens"`
|
||||
AcceptedPredictionTokens int64 `json:"accepted_prediction_tokens"`
|
||||
RejectedPredictionTokens int64 `json:"rejected_prediction_tokens"`
|
||||
}
|
||||
|
||||
type PromptTokensDetails struct {
|
||||
CachedTokens int64 `json:"cached_tokens"`
|
||||
AudioTokens int64 `json:"audio_tokens"`
|
||||
}
|
||||
|
||||
type OpenAIAPI struct {
|
||||
Token string
|
||||
Model string
|
||||
@@ -67,7 +61,11 @@ type OpenAIAPI struct {
|
||||
|
||||
func NewOpenAIAPI(baseURL, token, model string) *OpenAIAPI {
|
||||
logger := laniakea.CreateLogger()
|
||||
logger = logger.Prefix("AI").Level(laniakea.DEBUG)
|
||||
level := laniakea.FATAL
|
||||
if os.Getenv("DEBUG") == "true" {
|
||||
level = laniakea.DEBUG
|
||||
}
|
||||
logger = logger.Prefix("AI").Level(level)
|
||||
proxy, err := url.Parse(os.Getenv("HTTPS_PROXY"))
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
@@ -160,9 +158,16 @@ func (o *OpenAIAPI) DoRequest(url string, params any, retries int) ([]byte, erro
|
||||
return responseBody, err
|
||||
}
|
||||
|
||||
func (o *OpenAIAPI) CreateCompletion(request CreateCompletionReq) (*OpenAIResponse, error) {
|
||||
func (o *OpenAIAPI) CreateCompletion(history []Message, message string, temp float32) (*OpenAIResponse, error) {
|
||||
u := fmt.Sprintf("%s/v1/chat/completions", o.BaseURL)
|
||||
request.Model = o.Model
|
||||
request := CreateCompletionReq{
|
||||
Model: o.Model,
|
||||
Messages: append(history, Message{
|
||||
Role: "user",
|
||||
Content: message,
|
||||
}),
|
||||
Temperature: temp,
|
||||
}
|
||||
data, err := json.Marshal(request)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
||||
@@ -6,3 +6,53 @@ func FormatPrompt(prompt, char, user string) string {
|
||||
s := strings.ReplaceAll(prompt, "{{user}}", user)
|
||||
return strings.ReplaceAll(s, "{{char}}", char)
|
||||
}
|
||||
|
||||
type ProviderConfig struct {
|
||||
NeedCode bool `json:"needCode"`
|
||||
HideUserAPIKey bool `json:"hideUserApiKey"`
|
||||
DisableGPT4 bool `json:"disableGPT4"`
|
||||
HideBalanceQuery bool `json:"hideBalanceQuery"`
|
||||
DisableFastLink bool `json:"disableFastLink"`
|
||||
CustomModels string `json:"customModels"`
|
||||
DefaultModel string `json:"defaultModel"`
|
||||
VisionModels string `json:"visionModels"`
|
||||
}
|
||||
|
||||
/* POST https://chat.gpt-chatbot.ru/api/config
|
||||
+gpt-5.1@OpenAI
|
||||
+gpt-5@OpenAI
|
||||
+anthropic/claude-sonnet-4@OpenAI
|
||||
+mercury-coder@OpenAI
|
||||
+Olmo-3.1-32B-Instruct@OpenAI
|
||||
+gpt-4.1-mini@OpenAI
|
||||
+chatgpt-4o-latest@OpenAI
|
||||
+google/gemini-2.5-pro-preview-05-06@OpenAI
|
||||
+x-ai/grok-4@OpenAI
|
||||
+deepseek-ai/DeepSeek-V3.2@OpenAI
|
||||
+deepseek-ai/DeepSeek-V3.1-Terminus@OpenAI
|
||||
+deepseek-ai/deepseek-r1-0528@OpenAI
|
||||
+o1-preview@OpenAI
|
||||
+o3-mini@OpenAI
|
||||
+qwen/qwen3-coder-480b-a35b-instruct@OpenAI
|
||||
+moonshotai/kimi-k2-thinking@OpenAI
|
||||
+moonshotai/kimi-k2-instruct-0905@OpenAI
|
||||
+openai/gpt-oss-120b@OpenAI
|
||||
+openai/gpt-oss-20b@OpenAI
|
||||
+meta/llama-3.1-405b-instruct@OpenAI
|
||||
+meta/llama-4-maverick-17b-128e-instruct@OpenAI
|
||||
+meta/llama-4-scout-17b-16e-instruct@OpenAI
|
||||
+meta-llama-3.3-70b-instruct@OpenAI
|
||||
+meta-llama-3.1-8b-instruct@OpenAI
|
||||
+google/gemma-3-27b-it@OpenAI
|
||||
+nvidia/nemotron-3-nano-30b-a3b@OpenAI
|
||||
+qwen/qwq-32b@OpenAI
|
||||
+deepseek-ai/deepseek-r1-distill-qwen-32b@OpenAI
|
||||
+qwen/qwen3-235b-a22b@OpenAI
|
||||
+minimaxai/minimax-m2@OpenAI
|
||||
+zai-org/GLM-4.6@OpenAI
|
||||
+meta-llama/Llama-3.1-8B-Instruct@OpenAI
|
||||
+mistralai/mistral-large-3-675b-instruct-2512@OpenAI
|
||||
+mistralai/magistral-small-2506@OpenAI
|
||||
+mistralai/mistral-small-3.1-24b-instruct-2503@OpenAI
|
||||
+mistralai/ministral-14b-instruct-2512@OpenAI
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user