From b926215e94ab91088773c6f74bbfab1835f35c97 Mon Sep 17 00:00:00 2001 From: Mason Payne Date: Sat, 1 Feb 2025 22:57:23 -0700 Subject: [PATCH] update to latest gpt model --- .idea/dataSources.xml | 2 +- LLMMapper/llmMapper.go | 35 +++++++++++++++++++++++------------ cmd/chat/chat.go | 6 +++--- cmd/rateTest/rate.go | 31 +++++++++++++++++++++++++++++++ go.mod | 8 ++++---- go.sum | 10 ++++++++++ 6 files changed, 72 insertions(+), 20 deletions(-) create mode 100644 cmd/rateTest/rate.go diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml index 077f2fb..8abf982 100644 --- a/.idea/dataSources.xml +++ b/.idea/dataSources.xml @@ -2,7 +2,7 @@ - sqlite.xerial + deb3aec9-bcff-4dad-9d3a-a86d8508caa5 true org.sqlite.JDBC jdbc:sqlite:C:\Users\gomas\src\ctxGPT\context.db diff --git a/LLMMapper/llmMapper.go b/LLMMapper/llmMapper.go index 60ee9de..f1f1e5b 100644 --- a/LLMMapper/llmMapper.go +++ b/LLMMapper/llmMapper.go @@ -12,11 +12,17 @@ import ( ) const encodingName = "gpt-4" -const model = openai.GPT4TurboPreview -const maxTokens = 4096 + +// const model = openai.GPT4Turbo +const model = "o3-mini" + +// const model = openai.GPT4TurboPreview +const maxTokens = 100000 + +//const maxTokens = 4096 // const maxTokens = 128000 -const temperature = 0.3 +const temperature = 0.7 func GetTokenCount(input string) (int, error) { tke, err := tiktoken.EncodingForModel(encodingName) // cached in "TIKTOKEN_CACHE_DIR" @@ -59,10 +65,10 @@ func singlePromptInteraction(systemPrompt, prompt string, retries int) (openai.C resp, err := client.CreateChatCompletion( context.Background(), openai.ChatCompletionRequest{ - Model: model, // switch to the configured Model - Messages: messages, - MaxTokens: messageTokenSize, // might want to think about how to reduce this - Temperature: temperature, + Model: model, // switch to the configured Model + Messages: messages, + MaxCompletionTokens: messageTokenSize, // might want to think about how to reduce this + //Temperature: temperature, }, ) if err != nil { @@ -100,7 +106,12 @@ func SendPrompt(messages []openai.ChatCompletionMessage) (openai.ChatCompletionR } func sendPrompt(messages []openai.ChatCompletionMessage, retries int) (openai.ChatCompletionResponse, error) { - client := openai.NewClient(os.Getenv("OPENAI_API_KEY")) + config := openai.DefaultConfig(os.Getenv("OPENAI_API_KEY")) + if os.Getenv("OPENAI_BASE_URL") != "" { + config.BaseURL = os.Getenv("OPENAI_BASE_URL") + } + + client := openai.NewClientWithConfig(config) previousTokenCount, err := GetPreviousTokenUsage(messages) if err != nil { @@ -113,10 +124,10 @@ func sendPrompt(messages []openai.ChatCompletionMessage, retries int) (openai.Ch resp, err := client.CreateChatCompletion( context.Background(), openai.ChatCompletionRequest{ - Model: model, // switch to the configured Model - Messages: messages, - MaxTokens: messageTokenSize, - Temperature: temperature, + Model: model, // switch to the configured Model + Messages: messages, + MaxCompletionTokens: messageTokenSize, + //Temperature: temperature, }, ) if err != nil { diff --git a/cmd/chat/chat.go b/cmd/chat/chat.go index 5d3e31b..2e0e859 100644 --- a/cmd/chat/chat.go +++ b/cmd/chat/chat.go @@ -17,6 +17,7 @@ func main() { fmt.Println("---------------------") systemPrompt := "" + //systemPrompt := "You are Mixtral, a locally hosted AI assistant." messages := []openai.ChatCompletionMessage{ { @@ -52,13 +53,12 @@ func main() { } fmt.Println("AI: ", resp.Choices[0].Message.Content) - //fmt.Println("Finish Reason: ", resp.Choices[0].FinishReason) messages = append(messages, resp.Choices[0].Message) currLength := estimateTokenCount(messages) - if currLength > 3000 { - fmt.Println("Token count exceeded 3000, summarizing context") + if currLength > 2000 { + fmt.Println("Token count exceeded 2000, summarizing context") summarized, err := summarizeChatSoFar(messages) if err != nil { fmt.Printf("error summarizing chat so far | %v\n", err) diff --git a/cmd/rateTest/rate.go b/cmd/rateTest/rate.go new file mode 100644 index 0000000..d8844d2 --- /dev/null +++ b/cmd/rateTest/rate.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "sync" + "time" +) + +type Rate struct { + RPM int + mu sync.Mutex +} + +func main() { + r := Rate{RPM: 10} + for i := 0; i < 10; i++ { + go func(j int) { + r.RateLimit() + fmt.Println("Rate limiting") + }(i) + } + time.Sleep(time.Minute) +} + +func (r *Rate) RateLimit() { + // Lock for the fraction of a minute based on RPM + r.mu.Lock() + // Unlock after the fraction of a minute + time.Sleep(time.Minute / time.Duration(r.RPM)) + r.mu.Unlock() +} diff --git a/go.mod b/go.mod index 884e12a..c12872e 100644 --- a/go.mod +++ b/go.mod @@ -3,15 +3,15 @@ module ctxGPT go 1.19 require ( - github.com/pkoukk/tiktoken-go v0.1.6 - github.com/sashabaranov/go-openai v1.17.9 + github.com/pkoukk/tiktoken-go v0.1.7 + github.com/sashabaranov/go-openai v1.36.1 zombiezen.com/go/sqlite v0.13.1 ) require ( - github.com/dlclark/regexp2 v1.10.0 // indirect + github.com/dlclark/regexp2 v1.11.4 // indirect github.com/dustin/go-humanize v1.0.1 // indirect - github.com/google/uuid v1.3.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/mattn/go-isatty v0.0.16 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/stretchr/testify v1.8.3 // indirect diff --git a/go.sum b/go.sum index 29c782e..1459ae3 100644 --- a/go.sum +++ b/go.sum @@ -1,21 +1,31 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/dlclark/regexp2 v1.10.0 h1:+/GIL799phkJqYW+3YbOd8LCcbHzT0Pbo8zl70MHsq0= github.com/dlclark/regexp2 v1.10.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= +github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= +github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/pkoukk/tiktoken-go v0.1.6 h1:JF0TlJzhTbrI30wCvFuiw6FzP2+/bR+FIxUdgEAcUsw= github.com/pkoukk/tiktoken-go v0.1.6/go.mod h1:9NiV+i9mJKGj1rYOT+njbv+ZwA/zJxYdewGl6qVatpg= +github.com/pkoukk/tiktoken-go v0.1.7 h1:qOBHXX4PHtvIvmOtyg1EeKlwFRiMKAcoMp4Q+bLQDmw= +github.com/pkoukk/tiktoken-go v0.1.7/go.mod h1:9NiV+i9mJKGj1rYOT+njbv+ZwA/zJxYdewGl6qVatpg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/sashabaranov/go-openai v1.17.9 h1:QEoBiGKWW68W79YIfXWEFZ7l5cEgZBV4/Ow3uy+5hNY= github.com/sashabaranov/go-openai v1.17.9/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sashabaranov/go-openai v1.23.0 h1:KYW97r5yc35PI2MxeLZ3OofecB/6H+yxvSNqiT9u8is= +github.com/sashabaranov/go-openai v1.23.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= +github.com/sashabaranov/go-openai v1.36.1 h1:EVfRXwIlW2rUzpx6vR+aeIKCK/xylSrVYAx1TMTSX3g= +github.com/sashabaranov/go-openai v1.36.1/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg= github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=