@@ -21,6 +21,7 @@ import (
2121 "encoding/json"
2222 "os"
2323 "strconv"
24+ "strings"
2425
2526 "github.com/88250/lute/ast"
2627 "github.com/siyuan-note/siyuan/kernel/util"
@@ -102,24 +103,32 @@ func defaultEmbedding() *Embedding {
102103 return & Embedding {Timeout : 30 }
103104}
104105
106+ func defaultAgent () * Agent {
107+ return & Agent {
108+ SessionTimeout : 600 ,
109+ ConfirmTimeout : 120 ,
110+ MaxRetries : 3 ,
111+ Temperature : 1.0 ,
112+ MaxCompletionTokens : 0 ,
113+ MaxToolCallRounds : 64 ,
114+ }
115+ }
116+
117+ func defaultEditing () * Editing {
118+ return & Editing {
119+ MaxHistoryMessages : 7 ,
120+ Temperature : 1.0 ,
121+ MaxCompletionTokens : 0 ,
122+ }
123+ }
124+
105125func NewAI () * AI {
106126 ai := & AI {
107127 Providers : []* Provider {},
108128 MCP : & MCP {Servers : []MCPServer {}},
109129 Embedding : defaultEmbedding (),
110- Agent : & Agent {
111- SessionTimeout : 600 ,
112- ConfirmTimeout : 120 ,
113- MaxRetries : 3 ,
114- Temperature : 1.0 ,
115- MaxCompletionTokens : 0 ,
116- MaxToolCallRounds : 64 ,
117- },
118- Editing : & Editing {
119- MaxHistoryMessages : 7 ,
120- Temperature : 1.0 ,
121- MaxCompletionTokens : 0 ,
122- },
130+ Agent : defaultAgent (),
131+ Editing : defaultEditing (),
123132 }
124133
125134 apiKey := os .Getenv ("SIYUAN_OPENAI_API_KEY" )
@@ -286,25 +295,64 @@ func (ai *AI) Normalize() {
286295 } else if ai .MCP .Servers == nil {
287296 ai .MCP .Servers = []MCPServer {}
288297 }
298+ if ai .Agent == nil {
299+ ai .Agent = defaultAgent ()
300+ }
301+ if ai .Editing == nil {
302+ ai .Editing = defaultEditing ()
303+ } else {
304+ if 0 > ai .Editing .MaxCompletionTokens {
305+ ai .Editing .MaxCompletionTokens = 0
306+ }
307+ if 0 > ai .Editing .Temperature {
308+ ai .Editing .Temperature = 0
309+ } else if 2 < ai .Editing .Temperature {
310+ ai .Editing .Temperature = 2
311+ }
312+ if 1 > ai .Editing .MaxHistoryMessages {
313+ ai .Editing .MaxHistoryMessages = 1
314+ } else if 64 < ai .Editing .MaxHistoryMessages {
315+ ai .Editing .MaxHistoryMessages = 64
316+ }
317+ }
318+ providers := make ([]* Provider , 0 , len (ai .Providers ))
289319 for _ , p := range ai .Providers {
290320 if p == nil {
291321 continue
292322 }
293- if p .Models == nil {
294- p .Models = []* Model {}
323+ p .BaseURL = strings .TrimSpace (p .BaseURL )
324+ if "" == p .BaseURL {
325+ p .BaseURL = "https://api.openai.com/v1"
326+ }
327+ p .DisplayName = strings .TrimSpace (p .DisplayName )
328+ p .APIKey = strings .TrimSpace (p .APIKey )
329+ if 1 > p .RequestTimeout {
330+ p .RequestTimeout = 30
331+ } else if 600 < p .RequestTimeout {
332+ p .RequestTimeout = 600
295333 }
296334 if ! ast .IsNodeIDPattern (p .ID ) {
297335 p .ID = ast .NewNodeID ()
298336 }
337+ models := make ([]* Model , 0 , len (p .Models ))
299338 for _ , m := range p .Models {
300339 if m == nil {
301340 continue
302341 }
342+ m .Name = strings .TrimSpace (m .Name )
343+ if "" == m .Name {
344+ m .Name = "model"
345+ }
346+ m .DisplayName = strings .TrimSpace (m .DisplayName )
303347 if ! ast .IsNodeIDPattern (m .ID ) {
304348 m .ID = ast .NewNodeID ()
305349 }
350+ models = append (models , m )
306351 }
352+ p .Models = models
353+ providers = append (providers , p )
307354 }
355+ ai .Providers = providers
308356 if ai .Embedding == nil {
309357 ai .Embedding = defaultEmbedding ()
310358 }
0 commit comments