Refactor toolbox and function handling to support synthetic fields and improve type definitions
This commit is contained in:
40
context.go
40
context.go
@@ -7,9 +7,10 @@ import (
|
||||
|
||||
type Context struct {
|
||||
context.Context
|
||||
request Request
|
||||
response *ResponseChoice
|
||||
toolcall *ToolCall
|
||||
request Request
|
||||
response *ResponseChoice
|
||||
toolcall *ToolCall
|
||||
syntheticFields map[string]string
|
||||
}
|
||||
|
||||
func (c *Context) ToNewRequest(toolResults ...ToolCallResponse) Request {
|
||||
@@ -55,20 +56,32 @@ func (c *Context) ToolCall() *ToolCall {
|
||||
return c.toolcall
|
||||
}
|
||||
|
||||
func (c *Context) SyntheticFields() map[string]string {
|
||||
if c.syntheticFields == nil {
|
||||
c.syntheticFields = map[string]string{}
|
||||
}
|
||||
|
||||
return c.syntheticFields
|
||||
}
|
||||
|
||||
func (c *Context) WithContext(ctx context.Context) *Context {
|
||||
return &Context{Context: ctx, request: c.request, response: c.response, toolcall: c.toolcall}
|
||||
return &Context{Context: ctx, request: c.request, response: c.response, toolcall: c.toolcall, syntheticFields: c.syntheticFields}
|
||||
}
|
||||
|
||||
func (c *Context) WithRequest(request Request) *Context {
|
||||
return &Context{Context: c.Context, request: request, response: c.response, toolcall: c.toolcall}
|
||||
return &Context{Context: c.Context, request: request, response: c.response, toolcall: c.toolcall, syntheticFields: c.syntheticFields}
|
||||
}
|
||||
|
||||
func (c *Context) WithResponse(response *ResponseChoice) *Context {
|
||||
return &Context{Context: c.Context, request: c.request, response: response, toolcall: c.toolcall}
|
||||
return &Context{Context: c.Context, request: c.request, response: response, toolcall: c.toolcall, syntheticFields: c.syntheticFields}
|
||||
}
|
||||
|
||||
func (c *Context) WithToolCall(toolcall *ToolCall) *Context {
|
||||
return &Context{Context: c.Context, request: c.request, response: c.response, toolcall: toolcall}
|
||||
return &Context{Context: c.Context, request: c.request, response: c.response, toolcall: toolcall, syntheticFields: c.syntheticFields}
|
||||
}
|
||||
|
||||
func (c *Context) WithSyntheticFields(syntheticFields map[string]string) *Context {
|
||||
return &Context{Context: c.Context, request: c.request, response: c.response, toolcall: c.toolcall, syntheticFields: syntheticFields}
|
||||
}
|
||||
|
||||
func (c *Context) Deadline() (deadline time.Time, ok bool) {
|
||||
@@ -84,8 +97,19 @@ func (c *Context) Err() error {
|
||||
}
|
||||
|
||||
func (c *Context) Value(key any) any {
|
||||
if key == "request" {
|
||||
switch key {
|
||||
case "request":
|
||||
return c.request
|
||||
|
||||
case "response":
|
||||
return c.response
|
||||
|
||||
case "toolcall":
|
||||
return c.toolcall
|
||||
|
||||
case "syntheticFields":
|
||||
return c.syntheticFields
|
||||
|
||||
}
|
||||
return c.Context.Value(key)
|
||||
}
|
||||
|
Reference in New Issue
Block a user