first commit
This commit is contained in:
commit
58fc945222
6 changed files with 188 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
chat-go
|
12
go.mod
Normal file
12
go.mod
Normal file
|
@ -0,0 +1,12 @@
|
|||
module chat-go
|
||||
|
||||
go 1.23.3
|
||||
|
||||
require github.com/openai/openai-go v0.1.0-alpha.38
|
||||
|
||||
require (
|
||||
github.com/tidwall/gjson v1.14.4 // indirect
|
||||
github.com/tidwall/match v1.1.1 // indirect
|
||||
github.com/tidwall/pretty v1.2.1 // indirect
|
||||
github.com/tidwall/sjson v1.2.5 // indirect
|
||||
)
|
12
go.sum
Normal file
12
go.sum
Normal file
|
@ -0,0 +1,12 @@
|
|||
github.com/openai/openai-go v0.1.0-alpha.38 h1:j/rL0aEIHWnWaPgA8/AXYKCI79ZoW44NTIpn7qfMEXQ=
|
||||
github.com/openai/openai-go v0.1.0-alpha.38/go.mod h1:3SdE6BffOX9HPEQv8IL/fi3LYZ5TUpRYaqGQZbyk11A=
|
||||
github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/gjson v1.14.4 h1:uo0p8EbA09J7RQaflQ1aBRffTR7xedD2bcIVSYxLnkM=
|
||||
github.com/tidwall/gjson v1.14.4/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
|
||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
|
||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
|
||||
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
|
||||
github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY=
|
||||
github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28=
|
3
go.work
Normal file
3
go.work
Normal file
|
@ -0,0 +1,3 @@
|
|||
go 1.23.3
|
||||
|
||||
use ./
|
12
go.work.sum
Normal file
12
go.work.sum
Normal file
|
@ -0,0 +1,12 @@
|
|||
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.14.0/go.mod h1:l38EPgmsp71HHLq9j7De57JcKOWPyhrsW1Awm1JS6K0=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.7.0/go.mod h1:9kIvujWAA58nmPmWB1m23fyWic1kYZMxD9CxaWn4Qpg=
|
||||
github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY=
|
||||
github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
|
||||
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
|
||||
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
|
||||
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
|
||||
golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M=
|
||||
golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE=
|
||||
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
148
main.go
Normal file
148
main.go
Normal file
|
@ -0,0 +1,148 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/openai/openai-go"
|
||||
"github.com/openai/openai-go/option"
|
||||
)
|
||||
|
||||
var (
|
||||
sys = `You are an expert golang programmer.`
|
||||
|
||||
model = "Qwen/Qwen2.5-Coder-7B-Instruct"
|
||||
|
||||
reader = bufio.NewReader(os.Stdin)
|
||||
|
||||
history = []History{}
|
||||
|
||||
client = openai.NewClient(
|
||||
option.WithAPIKey("EMPTY"), // defaults to os.LookupEnv("OPENAI_API_KEY")
|
||||
option.WithBaseURL("http://192.168.55.14:8001/v1/"),
|
||||
)
|
||||
ctx = context.Background()
|
||||
)
|
||||
|
||||
type History struct {
|
||||
Assistant string
|
||||
User string
|
||||
}
|
||||
|
||||
func readKey(input chan rune) {
|
||||
char, _, err := reader.ReadRune()
|
||||
if err != nil {
|
||||
fmt.Println("Error reading key: ", err)
|
||||
}
|
||||
input <- char
|
||||
}
|
||||
|
||||
func push(h History) int {
|
||||
history = append(history, h)
|
||||
return len(history)
|
||||
}
|
||||
|
||||
func resume(s string) string {
|
||||
|
||||
resumer := "you are a golang expert; very able to resume the conversation; Limited to responding to the question without adding anything else."
|
||||
question := "resume this conversation in max 100 tokens: " + s
|
||||
|
||||
completion, err := client.Chat.Completions.New(ctx, openai.ChatCompletionNewParams{
|
||||
Messages: openai.F([]openai.ChatCompletionMessageParamUnion{
|
||||
openai.SystemMessage(resumer),
|
||||
openai.UserMessage(question),
|
||||
}),
|
||||
Model: openai.F(model),
|
||||
})
|
||||
if err != nil {
|
||||
fmt.Printf("Error: %v\n", err)
|
||||
}
|
||||
|
||||
return completion.Choices[0].Message.Content
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
||||
input := make(chan rune, 1)
|
||||
|
||||
for {
|
||||
|
||||
current_history := History{
|
||||
Assistant: "",
|
||||
User: "",
|
||||
}
|
||||
|
||||
print("> ")
|
||||
loop:
|
||||
for {
|
||||
go readKey(input)
|
||||
|
||||
select {
|
||||
case i := <-input:
|
||||
current_history.User += string(i)
|
||||
switch i {
|
||||
case '\n':
|
||||
break loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
println()
|
||||
|
||||
// stream := client.Chat.Completions.NewStreaming(ctx, openai.ChatCompletionNewParams{
|
||||
// Messages: openai.F([]openai.ChatCompletionMessageParamUnion{
|
||||
// openai.SystemMessage(sys), openai.UserMessage(user),
|
||||
// }),
|
||||
// Model: openai.F(model),
|
||||
// })
|
||||
|
||||
var messages_hist []openai.ChatCompletionMessageParamUnion
|
||||
for _, h := range history {
|
||||
messages_hist = append(messages_hist, openai.UserMessage(h.User), openai.AssistantMessage(h.Assistant))
|
||||
}
|
||||
|
||||
// fmt.Printf("%+v\n", messages_hist)
|
||||
|
||||
msg := []openai.ChatCompletionMessageParamUnion{
|
||||
openai.SystemMessage(sys),
|
||||
}
|
||||
msg = append(msg, messages_hist...)
|
||||
msg = append(msg, openai.UserMessage(current_history.User))
|
||||
|
||||
stream := client.Chat.Completions.NewStreaming(ctx, openai.ChatCompletionNewParams{
|
||||
Messages: openai.F(msg),
|
||||
Model: openai.F(model),
|
||||
})
|
||||
|
||||
// fmt.Printf("%+v\n", msg)
|
||||
|
||||
fmt.Println()
|
||||
|
||||
// history = append(history, openai.UserMessage(user))
|
||||
|
||||
for stream.Next() {
|
||||
evt := stream.Current()
|
||||
if len(evt.Choices) > 0 {
|
||||
print(evt.Choices[0].Delta.Content)
|
||||
current_history.Assistant += evt.Choices[0].Delta.Content
|
||||
}
|
||||
}
|
||||
println()
|
||||
|
||||
if err := stream.Err(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
current_history.Assistant = resume(current_history.Assistant)
|
||||
|
||||
// println()
|
||||
// fmt.Printf("%+v\n", current_history)
|
||||
|
||||
history = append(history, current_history)
|
||||
|
||||
println()
|
||||
println()
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue