summaryrefslogtreecommitdiff
path: root/agent/request.go
blob: 2d557acab3097b0b6ec2479291cd2d4432247315 (plain)
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
package agent

import (
	"bytes"
	"encoding/json"
	"gf-lt/config"
	"gf-lt/models"
	"io"
	"log/slog"
	"net/http"
)

var httpClient = &http.Client{}

type AgentClient struct {
	cfg      *config.Config
	getToken func() string
	log      slog.Logger
}

func NewAgentClient(cfg *config.Config, log slog.Logger, gt func() string) *AgentClient {
	return &AgentClient{
		cfg:      cfg,
		getToken: gt,
		log:      log,
	}
}

func (ag *AgentClient) Log() *slog.Logger {
	return &ag.log
}

func (ag *AgentClient) FormMsg(sysprompt, msg string) (io.Reader, error) {
	agentConvo := []models.RoleMsg{
		{Role: "system", Content: sysprompt},
		{Role: "user", Content: msg},
	}
	agentChat := &models.ChatBody{
		Model:    ag.cfg.CurrentModel,
		Stream:   true,
		Messages: agentConvo,
	}
	b, err := json.Marshal(agentChat)
	if err != nil {
		ag.log.Error("failed to form agent msg", "error", err)
		return nil, err
	}
	return bytes.NewReader(b), nil
}

func (ag *AgentClient) LLMRequest(body io.Reader) ([]byte, error) {
	req, err := http.NewRequest("POST", ag.cfg.CurrentAPI, body)
	if err != nil {
		ag.log.Error("llamacpp api", "error", err)
		return nil, err
	}
	req.Header.Add("Accept", "application/json")
	req.Header.Add("Content-Type", "application/json")
	req.Header.Add("Authorization", "Bearer "+ag.getToken())
	req.Header.Set("Accept-Encoding", "gzip")
	resp, err := httpClient.Do(req)
	if err != nil {
		ag.log.Error("llamacpp api", "error", err)
		return nil, err
	}
	defer resp.Body.Close()
	return io.ReadAll(resp.Body)
}