feat: allow more input types to functions, fix tests (#377)
* feat: use json.rawMessage, test functions
* chore: lint
* fix: tests
the ChatCompletion mock server doesn't actually run otherwise. N=0
is the default request but the server will treat it as n=1
* fix: tests should default to n=1 completions
* chore: add back removed interfaces, custom marshal
* chore: lint
* chore: lint
* chore: add some tests
* chore: appease lint
* clean up JSON schema + tests
* chore: lint
* feat: remove backwards compatible functions
for illustrative purposes
* fix: revert params change
* chore: use interface{}
* chore: add test
* chore: add back FunctionDefine
* chore: /s/interface{}/any
* chore: add back jsonschemadefinition
* chore: testcov
* chore: lint
* chore: remove pointers
* chore: update comment
* chore: address CR
added test for compatibility as well
---------
Co-authored-by: James <jmacwhyte@MacBooger-II.local>
This commit is contained in:
34
chat.go
34
chat.go
@@ -54,23 +54,23 @@ type ChatCompletionRequest struct {
|
||||
FrequencyPenalty float32 `json:"frequency_penalty,omitempty"`
|
||||
LogitBias map[string]int `json:"logit_bias,omitempty"`
|
||||
User string `json:"user,omitempty"`
|
||||
Functions []*FunctionDefine `json:"functions,omitempty"`
|
||||
FunctionCall string `json:"function_call,omitempty"`
|
||||
Functions []FunctionDefinition `json:"functions,omitempty"`
|
||||
FunctionCall any `json:"function_call,omitempty"`
|
||||
}
|
||||
|
||||
type FunctionDefine struct {
|
||||
type FunctionDefinition struct {
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description,omitempty"`
|
||||
// it's required in function call
|
||||
Parameters *FunctionParams `json:"parameters"`
|
||||
// Parameters is an object describing the function.
|
||||
// You can pass a raw byte array describing the schema,
|
||||
// or you can pass in a struct which serializes to the proper JSONSchema.
|
||||
// The JSONSchemaDefinition struct is provided for convenience, but you should
|
||||
// consider another specialized library for more complex schemas.
|
||||
Parameters any `json:"parameters"`
|
||||
}
|
||||
|
||||
type FunctionParams struct {
|
||||
// the Type must be JSONSchemaTypeObject
|
||||
Type JSONSchemaType `json:"type"`
|
||||
Properties map[string]*JSONSchemaDefine `json:"properties,omitempty"`
|
||||
Required []string `json:"required,omitempty"`
|
||||
}
|
||||
// Deprecated: use FunctionDefinition instead.
|
||||
type FunctionDefine = FunctionDefinition
|
||||
|
||||
type JSONSchemaType string
|
||||
|
||||
@@ -83,8 +83,9 @@ const (
|
||||
JSONSchemaTypeBoolean JSONSchemaType = "boolean"
|
||||
)
|
||||
|
||||
// JSONSchemaDefine is a struct for JSON Schema.
|
||||
type JSONSchemaDefine struct {
|
||||
// JSONSchemaDefinition is a struct for JSON Schema.
|
||||
// It is fairly limited and you may have better luck using a third-party library.
|
||||
type JSONSchemaDefinition struct {
|
||||
// Type is a type of JSON Schema.
|
||||
Type JSONSchemaType `json:"type,omitempty"`
|
||||
// Description is a description of JSON Schema.
|
||||
@@ -92,13 +93,16 @@ type JSONSchemaDefine struct {
|
||||
// Enum is a enum of JSON Schema. It used if Type is JSONSchemaTypeString.
|
||||
Enum []string `json:"enum,omitempty"`
|
||||
// Properties is a properties of JSON Schema. It used if Type is JSONSchemaTypeObject.
|
||||
Properties map[string]*JSONSchemaDefine `json:"properties,omitempty"`
|
||||
Properties map[string]JSONSchemaDefinition `json:"properties,omitempty"`
|
||||
// Required is a required of JSON Schema. It used if Type is JSONSchemaTypeObject.
|
||||
Required []string `json:"required,omitempty"`
|
||||
// Items is a property of JSON Schema. It used if Type is JSONSchemaTypeArray.
|
||||
Items *JSONSchemaDefine `json:"items,omitempty"`
|
||||
Items *JSONSchemaDefinition `json:"items,omitempty"`
|
||||
}
|
||||
|
||||
// Deprecated: use JSONSchemaDefinition instead.
|
||||
type JSONSchemaDefine = JSONSchemaDefinition
|
||||
|
||||
type FinishReason string
|
||||
|
||||
const (
|
||||
|
||||
Reference in New Issue
Block a user