Merge pull request #822 from trheyi/main
Refactor call method in Assistant to streamline context handling
This commit is contained in:
commit
1d9d9b2aa8
1 changed files with 5 additions and 21 deletions
|
|
@ -206,26 +206,10 @@ func (ast *Assistant) call(ctx context.Context, method string, context chatctx.C
|
||||||
return nil, fmt.Errorf(HookErrorMethodNotFound)
|
return nil, fmt.Errorf(HookErrorMethodNotFound)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create done channel for handling cancellation
|
// Call the method directly in the current thread
|
||||||
done := make(chan struct{})
|
|
||||||
var result interface{}
|
|
||||||
var callErr error
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
defer close(done)
|
|
||||||
// Call the method
|
|
||||||
args = append([]interface{}{context.Map()}, args...)
|
args = append([]interface{}{context.Map()}, args...)
|
||||||
result, callErr = scriptCtx.Call(method, args...)
|
|
||||||
}()
|
|
||||||
|
|
||||||
// Wait for either context cancellation or method completion
|
|
||||||
select {
|
|
||||||
case <-ctx.Done():
|
|
||||||
if scriptCtx != nil {
|
if scriptCtx != nil {
|
||||||
scriptCtx.Close() // Force close the script context
|
return scriptCtx.CallWith(ctx, method, args...)
|
||||||
}
|
|
||||||
return nil, ctx.Err()
|
|
||||||
case <-done:
|
|
||||||
return result, callErr
|
|
||||||
}
|
}
|
||||||
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue