aboutsummaryrefslogblamecommitdiffstats
path: root/types.go
blob: 7f1be930e3df4a1234ab031ee4400b01dd3b0e50 (plain) (tree)
1
2
3
4
5
6
7
8
9


            
                 

                 


                                         
                                   
                                        










                                                 



                                         

 




                                   
                       






                                                     

 




                        
                     

                                         

 




                                                                         
                                                                      




















                                                                              
                                                                     
                                                                              
                                                                     
                                                                     
                                                                            
                                                                       
                                                 
                                                 


















                                                                           
                                         


                                                              

 

















                                                              



                                                 


                                      















                                                                        
























                                                          



























                                                                



                                       













                                            

















                                                                                             





                               
package main

import (
	"context"
	"log"
	"runtime"
	"time"

	"github.com/jackc/pgx/v5/pgxpool"
	"github.com/mmcdole/gofeed"
	lua "github.com/yuin/gopher-lua"
)

type LogModel struct {
	// Id        int64       `db:"id"`
	// Channel   string      `db:"channel"`
	Log string `db:"log"`
	// Nick      string      `db:"nick"`
	// DateAdded pgtype.Date `db:"dateadded"`
}

type CustomCommand struct {
	SQL     string   `toml:"sql"`
	Limit   int      `toml:"limit"`
	Context []string `toml:"context"`
	Prompt  string   `toml:"prompt"`
}

type LuaLstates struct {
	LuaState *lua.LState
	Cancel   context.CancelFunc
}

type WatchList struct {
	AlertChannel []string   `toml:"alertChannel"`
	WatchList    [][]string `toml:"watchList"`
	WatchFiles   []string   `toml:"watchFiles"`
	Words        []string   `toml:"watchWords"`
	EventTypes   []string   `toml:"eventTypes"`
	FGColor      int        `toml:"fgColor"`
	BGColor      int        `toml:"bgColor"`
}

type LuaCommand struct {
	Path     string
	FuncName string
}

type RssFile struct {
	RssFile string   `toml:"rssFile"`
	Channel []string `toml:"channel"`
}

type TomlConfig struct {
	IrcServer           string                   `toml:"ircServer"`
	IrcNick             string                   `toml:"ircNick"`
	IrcSaslUser         string                   `toml:"ircSaslUser"`
	IrcSaslPass         string                   `toml:"ircSaslPass"`
	Endpoint            string                   `toml:"endpoint"`
	Model               string                   `toml:"model"`
	ChromaStyle         string                   `toml:"chromaStyle"`
	ChromaFormatter     string                   `toml:"chromaFormatter"`
	Provider            string                   `toml:"provider"`
	Apikey              string                   `toml:"apikey"`
	OllamaSystem        string                   `toml:"ollamaSystem"`
	ClientCertPath      string                   `toml:"clientCertPath"`
	ServerPass          string                   `toml:"serverPass"`
	Bind                string                   `toml:"bind"`
	Name                string                   `toml:"name"`
	DatabaseAddress     string                   `toml:"databaseAddress"`
	DatabasePassword    string                   `toml:"databasePassword"`
	DatabaseUser        string                   `toml:"databaseUser"`
	DatabaseName        string                   `toml:"databaseName"`
	LLMProxy            string                   `toml:"llmProxy"`
	IRCProxy            string                   `toml:"ircProxy"`
	IRCDName            string                   `toml:"ircdName"`
	WebIRCPassword      string                   `toml:"webIRCPassword"`
	WebIRCGateway       string                   `toml:"webIRCGateway"`
	WebIRCHostname      string                   `toml:"webIRCHostname"`
	WebIRCAddress       string                   `toml:"webIRCAddress"`
	RSSFile             string                   `toml:"rssFile"`
	AnthropicVersion    string                   `toml:"anthropicVersion"`
	Plugins             []string                 `toml:"plugins"`
	Context             []string                 `toml:"context"`
	CustomCommands      map[string]CustomCommand `toml:"customCommands"`
	WatchLists          map[string]WatchList     `toml:"watchList"`
	LuaStates           map[string]LuaLstates
	LuaCommands         map[string]LuaCommand
	Rss                 map[string]RssFile `toml:"rss"`
	Temp                float64            `toml:"temp"`
	RequestTimeout      int                `toml:"requestTimeout"`
	MillaReconnectDelay int                `toml:"millaReconnectDelay"`
	IrcPort             int                `toml:"ircPort"`
	KeepAlive           int                `toml:"keepAlive"`
	MemoryLimit         int                `toml:"memoryLimit"`
	PingDelay           int                `toml:"pingDelay"`
	PingTimeout         int                `toml:"pingTimeout"`
	TopP                float32            `toml:"topP"`
	TopK                int32              `toml:"topK"`
	EnableSasl          bool               `toml:"enableSasl"`
	SkipTLSVerify       bool               `toml:"skipTLSVerify"`
	UseTLS              bool               `toml:"useTLS"`
	DisableSTSFallback  bool               `toml:"disableSTSFallback"`
	AllowFlood          bool               `toml:"allowFlood"`
	Debug               bool               `toml:"debug"`
	Out                 bool               `toml:"out"`
	AdminOnly           bool               `toml:"adminOnly"`
	pool                *pgxpool.Pool
	Admins              []string   `toml:"admins"`
	IrcChannels         [][]string `toml:"ircChannels"`
	ScrapeChannels      [][]string `toml:"scrapeChannels"`
}

func (config *TomlConfig) insertLState(
	name string,
	luaState *lua.LState,
	cancel context.CancelFunc,
) {
	if config.LuaStates == nil {
		config.LuaStates = make(map[string]LuaLstates)
	}
	config.LuaStates[name] = LuaLstates{
		LuaState: luaState,
		Cancel:   cancel,
	}
}

func (config *TomlConfig) deleteLstate(name string) {
	if config.LuaStates == nil {
		return
	}

	if config.LuaStates[name].Cancel != nil {
		config.LuaStates[name].Cancel()
	}
	delete(config.LuaStates, name)
}

func (config *TomlConfig) insertLuaCommand(
	cmd, path, name string,
) {
	if config.LuaCommands == nil {
		config.LuaCommands = make(map[string]LuaCommand)
	}
	config.LuaCommands[cmd] = LuaCommand{Path: path, FuncName: name}
}

func (config *TomlConfig) deleteLuaCommand(name string) {
	if config.LuaCommands == nil {
		return
	}
	delete(config.LuaCommands, name)
}

type AppConfig struct {
	Ircd map[string]TomlConfig `toml:"ircd"`
}

type OllamaRequestOptions struct {
	Temperature float64 `json:"temperature"`
}

type OllamaChatResponse struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

type OllamaChatMessagesResponse struct {
	Messages OllamaChatResponse `json:"message"`
}

type OllamaChatRequest struct {
	Model     string               `json:"model"`
	Stream    bool                 `json:"stream"`
	KeepAlive time.Duration        `json:"keep_alive"`
	Options   OllamaRequestOptions `json:"options"`
	Messages  []MemoryElement      `json:"messages"`
}

type ORMessage struct {
	Role    string `json:"role"`
	Content string `json:"content"`
	Refusal string `json:"refusal"`
}

type ORChoice struct {
	FinishReason string    `json:"finish_reason"`
	Index        int       `json:"index"`
	Message      ORMessage `json:"message"`
}

type ORUsage struct {
	PromptTokens     int `json:"prompt_tokens"`
	CompletionTokens int `json:"completion_tokens"`
	TotalTokens      int `json:"total_tokens"`
}
type ORResponse struct {
	Id                string     `json:"id"`
	Provider          string     `json:"provider"`
	Model             string     `json:"model"`
	Object            string     `json:"object"`
	Created           int64      `json:"created"`
	Choices           []ORChoice `json:"choices"`
	SystemFingerprint string     `json:"system_fingerprint"`
	Usage             ORUsage    `json:"usage"`
}

type MemoryElement struct {
	Role    string `json:"role"`
	Content string `json:"content"`
}

type FeedConfig struct {
	Name       string `json:"name"`
	URL        string `json:"url"`
	UserAgent  string `json:"userAgent"`
	Proxy      string `json:"proxy"`
	Timeout    int    `json:"timeout"`
	FeedParser *gofeed.Parser
}

type RSSConfig struct {
	Feeds  []FeedConfig `json:"feeds"`
	Period int          `json:"period"`
}

func LogError(err error) {
	fn, file, line, ok := runtime.Caller(1)
	if ok {
		log.Printf("%s: %s-%d >>> %v", runtime.FuncForPC(fn).Name(), file, line, err)
	} else {
		log.Print(err)
	}
}

func LogErrorFatal(err error) {
	fn, file, line, ok := runtime.Caller(1)
	if ok {
		log.Fatalf("%s: %s-%d >>> %v", runtime.FuncForPC(fn).Name(), file, line, err)
	} else {
		log.Fatal(err)
	}
}

type ProxyRoundTripper struct {
	APIKey string

	ProxyURL string
}