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 }