Skip to content

Commit 85a8ee4

Browse files
committed
fix(aichat): truncate copy params
1 parent 47e2bd1 commit 85a8ee4

1 file changed

Lines changed: 41 additions & 31 deletions

File tree

chat/agent.go

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -195,43 +195,53 @@ func togobaev(ev *zero.Event) *goba.Event {
195195
}
196196
}
197197

198-
func truncate(params map[string]any) {
199-
stack := []map[string]any{params}
200-
for len(stack) > 0 {
201-
// 弹出栈顶元素
202-
current := stack[len(stack)-1]
203-
stack = stack[:len(stack)-1]
204-
205-
// 遍历当前 map 的所有值
206-
for k, v := range current {
207-
switch val := v.(type) {
208-
case string:
209-
if len(val) > 512 {
210-
current[k] = val[:200] + " ... " + val[len(val)-200:]
211-
}
212-
case int64, int:
213-
case map[string]any:
214-
// 非叶子节点,压入栈中待处理
215-
stack = append(stack, val)
216-
case message.Message:
217-
for _, m := range val {
218-
for k, v := range m.Data {
219-
if len(v) > 512 {
220-
m.Data[k] = v[:200] + " ... " + v[len(v)-200:]
221-
}
222-
}
198+
func truncatecopy(params map[string]any) map[string]any {
199+
cpp := make(map[string]any, len(params))
200+
for k, v := range params {
201+
switch val := v.(type) {
202+
case string:
203+
if len(val) > 512 {
204+
cpp[k] = val[:200] + " ... " + val[len(val)-200:]
205+
} else {
206+
cpp[k] = val
207+
}
208+
case int64, int:
209+
cpp[k] = val
210+
case message.Message:
211+
valCopy := make(message.Message, len(val))
212+
copy(valCopy, val)
213+
for i, m := range val {
214+
valCopy[i] = message.Segment{
215+
Type: m.Type,
216+
Data: make(map[string]string, len(m.Data)),
223217
}
224-
case message.Segment:
225-
for k, v := range val.Data {
218+
for k, v := range m.Data {
226219
if len(v) > 512 {
227-
val.Data[k] = v[:200] + " ... " + v[len(v)-200:]
220+
valCopy[i].Data[k] = v[:200] + " ... " + v[len(v)-200:]
221+
} else {
222+
valCopy[i].Data[k] = v
228223
}
229224
}
230-
default:
231-
logrus.Warnln("[chat] agent unknown params typ:", reflect.TypeOf(v))
232225
}
226+
cpp[k] = valCopy
227+
case message.Segment:
228+
valCopy := message.Segment{
229+
Type: val.Type,
230+
Data: make(map[string]string, len(val.Data)),
231+
}
232+
for k, v := range val.Data {
233+
if len(v) > 512 {
234+
valCopy.Data[k] = v[:200] + " ... " + v[len(v)-200:]
235+
} else {
236+
valCopy.Data[k] = v
237+
}
238+
}
239+
cpp[k] = valCopy
240+
default:
241+
logrus.Warnln("[chat] agent unknown params typ:", reflect.TypeOf(v))
233242
}
234243
}
244+
return cpp
235245
}
236246

237247
func logev(ctx *zero.Ctx) {
@@ -254,7 +264,7 @@ func logev(ctx *zero.Ctx) {
254264
logrus.Debugln("[chat] agent", gid, "skip non-msg other triggered action:", req.Action)
255265
return
256266
}
257-
truncate(req.Params)
267+
req.Params = truncatecopy(req.Params)
258268
ag := AgentOf(ctx.Event.SelfID, "aichat")
259269
logrus.Debugln("[chat] agent others", gid, "add requ:", &req)
260270
ag.AddRequest(gid, &req)

0 commit comments

Comments
 (0)