initial commit of untested function stuff
This commit is contained in:
35
functions.go
Normal file
35
functions.go
Normal file
@@ -0,0 +1,35 @@
|
||||
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
|
||||
}
|
Reference in New Issue
Block a user