Chore: config update

This commit is contained in:
Grail Finder
2025-11-21 11:17:00 +03:00
parent 7ee2a87b49
commit 866a74e459
3 changed files with 10 additions and 87 deletions

8
bot.go
View File

@@ -545,7 +545,13 @@ func charToStart(agentName string) bool {
} }
func init() { func init() {
cfg = config.LoadConfigOrDefault("config.toml") var err error
cfg, err = config.LoadConfig("config.toml")
if err != nil {
fmt.Println("failed to load config.toml")
os.Exit(1)
return
}
defaultStarter = []models.RoleMsg{ defaultStarter = []models.RoleMsg{
{Role: "system", Content: basicSysMsg}, {Role: "system", Content: basicSysMsg},
{Role: cfg.AssistantRole, Content: defaultFirstMsg}, {Role: cfg.AssistantRole, Content: defaultFirstMsg},

View File

@@ -1,8 +1,6 @@
package config package config
import ( import (
"fmt"
"github.com/BurntSushi/toml" "github.com/BurntSushi/toml"
) )
@@ -68,41 +66,14 @@ type Config struct {
FilePickerExts string `toml:"FilePickerExts"` FilePickerExts string `toml:"FilePickerExts"`
} }
func LoadConfigOrDefault(fn string) *Config { func LoadConfig(fn string) (*Config, error) {
if fn == "" { if fn == "" {
fn = "config.toml" fn = "config.toml"
} }
config := &Config{} config := &Config{}
_, err := toml.DecodeFile(fn, &config) _, err := toml.DecodeFile(fn, &config)
if err != nil { if err != nil {
fmt.Println("failed to read config from file, loading default", "error", err) return nil, err
config.ChatAPI = "http://localhost:8080/v1/chat/completions"
config.CompletionAPI = "http://localhost:8080/completion"
config.DeepSeekCompletionAPI = "https://api.deepseek.com/beta/completions"
config.DeepSeekChatAPI = "https://api.deepseek.com/chat/completions"
config.OpenRouterCompletionAPI = "https://openrouter.ai/api/v1/completions"
config.OpenRouterChatAPI = "https://openrouter.ai/api/v1/chat/completions"
config.RAGEnabled = false
config.EmbedURL = "http://localhost:8080/v1/embiddings"
config.ShowSys = true
config.LogFile = "log.txt"
config.UserRole = "user"
config.ToolRole = "tool"
config.AssistantRole = "assistant"
config.SysDir = "sysprompts"
config.ChunkLimit = 8192
config.DBPATH = "gflt.db"
//
config.RAGBatchSize = 100
config.RAGWordLimit = 80
config.RAGWorkers = 5
// tts
config.TTS_ENABLED = false
config.TTS_URL = "http://localhost:8880/v1/audio/speech"
config.FetchModelNameAPI = "http://localhost:8080/v1/models"
config.STT_SR = 16000
config.FilePickerDir = "." // Default to current directory
config.FilePickerExts = "png,jpg,jpeg,gif,webp" // Default allowed extensions
} }
config.CurrentAPI = config.ChatAPI config.CurrentAPI = config.ChatAPI
config.APIMap = map[string]string{ config.APIMap = map[string]string{
@@ -119,5 +90,5 @@ func LoadConfigOrDefault(fn string) *Config {
} }
} }
// if any value is empty fill with default // if any value is empty fill with default
return config return config, nil
} }

View File

@@ -81,32 +81,6 @@ After that you are free to respond to the user.
sysLabels = []string{"basic_sys", "tool_sys"} sysLabels = []string{"basic_sys", "tool_sys"}
) )
// func populateTools(cfg config.Config) {
// // if we have access to some server with funcs we can populate funcs (tools|toolbelt?) with it
// // there must be a better way
// if cfg.SearchAPI == "" || cfg.SearchDescribe == "" {
// return
// }
// resp, err := httpClient.Get(cfg.SearchDescribe)
// if err != nil {
// logger.Error("failed to get websearch tool description",
// "link", cfg.SearchDescribe, "error", err)
// return
// }
// defer resp.Body.Close()
// descResp := models.Tool{}
// if err := json.NewDecoder(resp.Body).Decode(&descResp); err != nil {
// logger.Error("failed to unmarshal websearch tool description",
// "link", cfg.SearchDescribe, "error", err)
// return
// }
// fnMap["web_search"] = websearch
// baseTools = append(baseTools, descResp)
// logger.Info("added web_search tool", "tool", descResp)
// }
// {"type":"function","function":{"name":"web_search","description":"Perform a web search to find information on varioust topics","parameters":{"type":"object","properties":{"num_results":{"type":"integer","description":"Maximum number of results to return (default: 10)"},"query":{"type":"string","description":"The search query to find information about"},"search_type":{"type":"string","description":"Type of search to perform: 'api' for SearXNG API search or 'scraper' for web scraping (default: 'scraper')"}},"required":["query"]}}}
// web search (depends on extra server) // web search (depends on extra server)
func websearch(args map[string]string) []byte { func websearch(args map[string]string) []byte {
// make http request return bytes // make http request return bytes
@@ -126,32 +100,6 @@ func websearch(args map[string]string) []byte {
"limit_arg", limitS, "error", err) "limit_arg", limitS, "error", err)
limit = 3 limit = 3
} }
// // external
// payload, err := json.Marshal(args)
// if err != nil {
// logger.Error("failed to marshal web_search arguments", "error", err)
// msg := fmt.Sprintf("failed to marshal web_search arguments; error: %s\n", err)
// return []byte(msg)
// }
// req, err := http.NewRequest("POST", cfg.SearchAPI, bytes.NewReader(payload))
// if err != nil {
// logger.Error("failed to build an http request", "error", err)
// msg := fmt.Sprintf("failed to build an http request; error: %s\n", err)
// return []byte(msg)
// }
// resp, err := httpClient.Do(req)
// if err != nil {
// logger.Error("failed to execute http request", "error", err)
// msg := fmt.Sprintf("failed to execute http request; error: %s\n", err)
// return []byte(msg)
// }
// defer resp.Body.Close()
// data, err := io.ReadAll(resp.Body)
// if err != nil {
// logger.Error("failed to read response body", "error", err)
// msg := fmt.Sprintf("failed to read response body; error: %s\n", err)
// return []byte(msg)
// }
resp, err := extra.WebSearcher.Search(context.Background(), query, limit) resp, err := extra.WebSearcher.Search(context.Background(), query, limit)
if err != nil { if err != nil {
msg := "search tool failed; error: " + err.Error() msg := "search tool failed; error: " + err.Error()
@@ -223,8 +171,6 @@ func recallTopics(args map[string]string) []byte {
return []byte(joinedS) return []byte(joinedS)
} }
// func fullMemoryLoad() {}
type fnSig func(map[string]string) []byte type fnSig func(map[string]string) []byte
var fnMap = map[string]fnSig{ var fnMap = map[string]fnSig{