36 lines
1.1 KiB
Go
36 lines
1.1 KiB
Go
package go_llm
|
|
|
|
import (
|
|
"context"
|
|
"gitea.stevedudenhoeffer.com/steve/go-llm/schema"
|
|
"reflect"
|
|
)
|
|
|
|
// Parse takes a function pointer and returns a function object.
|
|
// fn must be a pointer to a function that takes a context.Context as its first argument, and then a struct that contains
|
|
// the parameters for the function. The struct must contain only the types: string, int, float64, bool, and pointers to
|
|
// those types.
|
|
// The struct parameters can have the following tags:
|
|
// - Description: a string that describes the parameter, passed to openaiImpl to tell it what the parameter is for
|
|
|
|
func NewFunction[T any](name string, description string, fn func(context.Context, T) (string, error)) *Function {
|
|
var o T
|
|
|
|
res := Function{
|
|
Name: name,
|
|
Description: description,
|
|
Parameters: schema.GetType(o),
|
|
fn: reflect.ValueOf(fn),
|
|
paramType: reflect.TypeOf(o),
|
|
}
|
|
|
|
if res.fn.Kind() != reflect.Func {
|
|
panic("fn must be a function")
|
|
}
|
|
if res.paramType.Kind() != reflect.Struct {
|
|
panic("function parameter must be a struct")
|
|
}
|
|
|
|
return &res
|
|
}
|