Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 19 additions & 19 deletions agent/agent.go
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ func Complete(ctx context.Context, client *sdk.Client, opts CompleteOptions) (*C
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
for _, msg := range opts.Messages {
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
Type: types.MagentaType(msg.Type),
Type: types.CompleteMessageType(msg.Type),
Text: msg.Text,
Meta: msg.Meta,
})
Expand Down Expand Up @@ -230,7 +230,7 @@ func CompleteStream(ctx context.Context, client *sdk.Client, opts CompleteOption
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
for _, msg := range opts.Messages {
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
Type: types.MagentaType(msg.Type),
Type: types.CompleteMessageType(msg.Type),
Text: msg.Text,
Meta: msg.Meta,
})
Expand Down Expand Up @@ -577,25 +577,25 @@ func CompleteWithTools(ctx context.Context, client *sdk.Client, opts CompleteWit
messageFunctions = append(messageFunctions, types.ConversationMessageCompleteRequestFunction{
Name: name,
Description: tool.Description,
Parameters: types.PurpleParameters{
Type: types.PurpleObject,
Parameters: types.MessageCompleteFunctionParameters{
Type: types.MessageCompleteFunctionParametersTypeObject,
Properties: properties,
Required: required,
},
Result: &types.PurpleResult{
Result: &types.MessageCompleteFunctionResult{
Channel: &channel,
},
})
} else {
functions = append(functions, types.ConversationCompleteRequestFunction{
Name: name,
Description: tool.Description,
Parameters: types.IndigoParameters{
Type: types.IndigoObject,
Parameters: types.CompleteFunctionParameters{
Type: types.CompleteFunctionParametersTypeObject,
Properties: properties,
Required: required,
},
Result: &types.IndigoResult{
Result: &types.CompleteFunctionResult{
Channel: &channel,
},
})
Expand Down Expand Up @@ -628,7 +628,7 @@ func CompleteWithTools(ctx context.Context, client *sdk.Client, opts CompleteWit
apiMessages := make([]types.ConversationCompleteRequestMessage, 0, len(opts.Messages))
for _, msg := range opts.Messages {
apiMessages = append(apiMessages, types.ConversationCompleteRequestMessage{
Type: types.MagentaType(msg.Type),
Type: types.CompleteMessageType(msg.Type),
Text: msg.Text,
Meta: msg.Meta,
})
Expand Down Expand Up @@ -1259,17 +1259,17 @@ func convertMessageExtensions(extensions *types.ConversationCompleteRequestExten
}

if len(extensions.Datasets) > 0 {
result.Datasets = make([]types.PurpleDataset, 0, len(extensions.Datasets))
result.Datasets = make([]types.MessageCompleteDataset, 0, len(extensions.Datasets))
for _, dataset := range extensions.Datasets {
converted := types.PurpleDataset{
converted := types.MessageCompleteDataset{
Description: dataset.Description,
Name: dataset.Name,
}

if len(dataset.Records) > 0 {
converted.Records = make([]types.PurpleRecord, 0, len(dataset.Records))
converted.Records = make([]types.MessageCompleteRecord, 0, len(dataset.Records))
for _, record := range dataset.Records {
converted.Records = append(converted.Records, types.PurpleRecord{
converted.Records = append(converted.Records, types.MessageCompleteRecord{
Meta: record.Meta,
Text: record.Text,
})
Expand All @@ -1281,27 +1281,27 @@ func convertMessageExtensions(extensions *types.ConversationCompleteRequestExten
}

if len(extensions.Features) > 0 {
result.Features = make([]types.PurpleFeature, 0, len(extensions.Features))
result.Features = make([]types.MessageCompleteFeature, 0, len(extensions.Features))
for _, feature := range extensions.Features {
result.Features = append(result.Features, types.PurpleFeature{
result.Features = append(result.Features, types.MessageCompleteFeature{
Name: feature.Name,
Options: feature.Options,
})
}
}

if len(extensions.Skillsets) > 0 {
result.Skillsets = make([]types.PurpleSkillset, 0, len(extensions.Skillsets))
result.Skillsets = make([]types.MessageCompleteSkillset, 0, len(extensions.Skillsets))
for _, skillset := range extensions.Skillsets {
converted := types.PurpleSkillset{
converted := types.MessageCompleteSkillset{
Description: skillset.Description,
Name: skillset.Name,
}

if len(skillset.Abilities) > 0 {
converted.Abilities = make([]types.PurpleAbility, 0, len(skillset.Abilities))
converted.Abilities = make([]types.MessageCompleteAbility, 0, len(skillset.Abilities))
for _, ability := range skillset.Abilities {
converted.Abilities = append(converted.Abilities, types.PurpleAbility{
converted.Abilities = append(converted.Abilities, types.MessageCompleteAbility{
Description: ability.Description,
Instruction: ability.Instruction,
Meta: ability.Meta,
Expand Down
10 changes: 5 additions & 5 deletions agent/agent_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,20 +53,20 @@ func TestConvertMessageExtensions(t *testing.T) {

extensions := &types.ConversationCompleteRequestExtensions{
Backstory: &backstory,
Datasets: []types.IndigoDataset{{
Datasets: []types.CompleteDataset{{
Name: &datasetName,
Records: []types.IndigoRecord{{
Records: []types.CompleteRecord{{
Text: "A record",
Meta: map[string]interface{}{"source": "test"},
}},
}},
Features: []types.IndigoFeature{{
Features: []types.CompleteFeature{{
Name: "skills",
Options: map[string]interface{}{"enabled": true},
}},
Skillsets: []types.IndigoSkillset{{
Skillsets: []types.CompleteSkillset{{
Name: &skillsetName,
Abilities: []types.IndigoAbility{{
Abilities: []types.CompleteAbility{{
Name: "lookup",
Description: "Look something up",
Instruction: "Search the knowledge base",
Expand Down
2 changes: 1 addition & 1 deletion examples/agent-with-embedded-skills/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ Call the exit function when done.`
Tools: tools,
MaxIterations: 20,
Extensions: &types.ConversationCompleteRequestExtensions{
Features: []types.IndigoFeature{
Features: []types.CompleteFeature{
{
Name: skillsFeature["name"].(string),
Options: skillsFeature["options"].(map[string]interface{}),
Expand Down
4 changes: 2 additions & 2 deletions examples/chatbot/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func main() {

// Add user message to history
messages = append(messages, types.ConversationCompleteRequestMessage{
Type: types.HilariousUser,
Type: types.CompleteMessageRoleUser,
Text: userInput,
})

Expand Down Expand Up @@ -114,7 +114,7 @@ func main() {

// Add bot response to history
messages = append(messages, types.ConversationCompleteRequestMessage{
Type: types.HilariousBot,
Type: types.CompleteMessageRoleBot,
Text: responseText.String(),
})

Expand Down
12 changes: 6 additions & 6 deletions examples/portable-embedded-agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func runPortableAgent(
client *sdk.Client,
conversationID string,
task string,
skillsFeature types.IndigoFeature,
skillsFeature types.CompleteFeature,
) error {
backstory := strings.TrimSpace(`
You are a portable ChatBotKit agent running from a self-contained Go executable.
Expand All @@ -149,7 +149,7 @@ When the task is complete, call the exit tool with code 0.
Tools: tools,
MaxIterations: 20,
Extensions: &types.ConversationCompleteRequestExtensions{
Features: []types.IndigoFeature{skillsFeature},
Features: []types.CompleteFeature{skillsFeature},
},
})

Expand Down Expand Up @@ -199,20 +199,20 @@ func loadEmbeddedSkills() ([]agent.SkillDefinition, error) {
return result.GetSkills(), nil
}

func createSkillsFeature(skills []agent.SkillDefinition) (types.IndigoFeature, error) {
func createSkillsFeature(skills []agent.SkillDefinition) (types.CompleteFeature, error) {
featureMap := agent.CreateSkillsFeature(skills)

name, ok := featureMap["name"].(string)
if !ok || name == "" {
return types.IndigoFeature{}, errors.New("skills feature is missing name")
return types.CompleteFeature{}, errors.New("skills feature is missing name")
}

options, ok := featureMap["options"].(map[string]interface{})
if !ok {
return types.IndigoFeature{}, errors.New("skills feature is missing options")
return types.CompleteFeature{}, errors.New("skills feature is missing options")
}

return types.IndigoFeature{
return types.CompleteFeature{
Name: name,
Options: options,
}, nil
Expand Down
4 changes: 2 additions & 2 deletions examples/stateful-agent/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,12 +173,12 @@ func main() {
fmt.Println("\n---")
fmt.Println("Final persisted conversation:")
for _, message := range messages.Items {
if message.Type != types.IndecentUser && message.Type != types.IndecentBot {
if message.Type != types.MessageItemRoleUser && message.Type != types.MessageItemRoleBot {
continue
}

prefix := "User"
if message.Type == types.IndecentBot {
if message.Type == types.MessageItemRoleBot {
prefix = "Bot"
}

Expand Down
27 changes: 27 additions & 0 deletions sdk/blueprint.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,30 @@ func (c *BlueprintClient) ListResources(ctx context.Context, blueprintID string)
}
return &result, nil
}

// ListBulletins lists the bulletins on a blueprint's shared board.
func (c *BlueprintClient) ListBulletins(ctx context.Context, blueprintID string, opts *types.BlueprintBulletinListParams) (*types.BlueprintBulletinListResponse, error) {
path := fmt.Sprintf("/api/v1/blueprint/%s/bulletin/list", blueprintID)

query := url.Values{}
if opts != nil {
query = params.BuildListQuery(opts.Cursor, opts.Order, opts.Take, nil)
}

var result types.BlueprintBulletinListResponse
if err := c.httpClient.Get(ctx, path, query, &result); err != nil {
return nil, err
}
return &result, nil
}

// CreateBulletin posts a bulletin to a blueprint's shared board.
func (c *BlueprintClient) CreateBulletin(ctx context.Context, blueprintID string, req types.BlueprintBulletinCreateRequest) (*types.BlueprintBulletinCreateResponse, error) {
path := fmt.Sprintf("/api/v1/blueprint/%s/bulletin/create", blueprintID)

var result types.BlueprintBulletinCreateResponse
if err := c.httpClient.Post(ctx, path, req, &result); err != nil {
return nil, err
}
return &result, nil
}
106 changes: 106 additions & 0 deletions types/aliases.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package types

// This file provides hand-maintained, stable aliases for generated type names.
//
// The generated types in this package (types.go) are produced by quicktype,
// which assigns arbitrary, order-dependent names (e.g. "FriskyType",
// "IndecentFeature") to anonymous nested objects and enums in the OpenAPI spec.
// Those names change whenever endpoints are added or reordered, which would
// otherwise break every consumer that references them.
//
// Reference the stable aliases below instead of the raw generated names. When
// types.go is regenerated and a referenced name changes, update ONLY the
// right-hand sides in this file - every consumer keeps using the unchanged
// left-hand names.
//
// This file is hand-maintained and is NOT overwritten by `script:sync-types:go`
// (which only writes types.go).

// --- Conversation complete request message role ---

// CompleteMessageType is the role of a message sent in a conversation complete
// request.
type CompleteMessageType = FriskyType

const (
// CompleteMessageRoleUser marks a sent message authored by the end user.
CompleteMessageRoleUser = AmbitiousUser
// CompleteMessageRoleBot marks a sent message authored by the bot.
CompleteMessageRoleBot = AmbitiousBot
)

// --- Conversation message list item role ---

// MessageItemType is the role of a message returned from a conversation message
// listing.
type MessageItemType = IndecentType

const (
// MessageItemRoleUser marks a listed message authored by the end user.
MessageItemRoleUser = IndecentUser
// MessageItemRoleBot marks a listed message authored by the bot.
MessageItemRoleBot = IndecentBot
)

// --- Conversation complete request (stateful) extensions ---

type (
// CompleteDataset is an inline dataset on a conversation complete request.
CompleteDataset = IndecentDataset
// CompleteRecord is a record within a CompleteDataset.
CompleteRecord = IndecentRecord
// CompleteFeature is an inline feature on a conversation complete request.
CompleteFeature = IndecentFeature
// CompleteSkillset is an inline skillset on a conversation complete request.
CompleteSkillset = IndecentSkillset
// CompleteAbility is an ability within a CompleteSkillset.
CompleteAbility = IndecentAbility
)

// --- Conversation complete request (stateful) functions ---

type (
// CompleteFunctionParameters is the JSON-schema parameters of a function on
// a conversation complete request.
CompleteFunctionParameters = IndigoParameters
// CompleteFunctionResult is the result configuration of a function on a
// conversation complete request.
CompleteFunctionResult = IndigoResult
)

// CompleteFunctionParametersTypeObject is the "object" value of a function
// parameters schema type on a conversation complete request.
const CompleteFunctionParametersTypeObject = IndigoObject

// --- Conversation message complete request (stateless) extensions ---

type (
// MessageCompleteDataset is an inline dataset on a conversation message
// complete request.
MessageCompleteDataset = PurpleDataset
// MessageCompleteRecord is a record within a MessageCompleteDataset.
MessageCompleteRecord = PurpleRecord
// MessageCompleteFeature is an inline feature on a conversation message
// complete request.
MessageCompleteFeature = PurpleFeature
// MessageCompleteSkillset is an inline skillset on a conversation message
// complete request.
MessageCompleteSkillset = PurpleSkillset
// MessageCompleteAbility is an ability within a MessageCompleteSkillset.
MessageCompleteAbility = PurpleAbility
)

// --- Conversation message complete request (stateless) functions ---

type (
// MessageCompleteFunctionParameters is the JSON-schema parameters of a
// function on a conversation message complete request.
MessageCompleteFunctionParameters = PurpleParameters
// MessageCompleteFunctionResult is the result configuration of a function
// on a conversation message complete request.
MessageCompleteFunctionResult = PurpleResult
)

// MessageCompleteFunctionParametersTypeObject is the "object" value of a
// function parameters schema type on a conversation message complete request.
const MessageCompleteFunctionParametersTypeObject = PurpleObject
Loading
Loading