Skip to content

Commit

Permalink
Merge pull request #113 from wesen/task/add-event-ui-connection
Browse files Browse the repository at this point in the history
✨ Add tool execution and update UI connectivity
  • Loading branch information
wesen committed Jan 17, 2024
2 parents 4c863f7 + bdfb092 commit 9a265b9
Show file tree
Hide file tree
Showing 45 changed files with 2,093 additions and 1,056 deletions.
47 changes: 6 additions & 41 deletions cmd/experiments/agent/codegen/run.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ package codegen

import (
"context"
"encoding/json"
"fmt"
"github.com/ThreeDotsLabs/watermill"
"github.com/ThreeDotsLabs/watermill/message"
"github.com/ThreeDotsLabs/watermill/pubsub/gochannel"
"github.com/go-go-golems/bobatea/pkg/chat/conversation"
"github.com/go-go-golems/geppetto/pkg/cmds"
context2 "github.com/go-go-golems/geppetto/pkg/context"
"github.com/go-go-golems/geppetto/pkg/steps"
"github.com/go-go-golems/geppetto/pkg/steps/ai/chat"
"github.com/go-go-golems/geppetto/pkg/steps/ai/settings"
Expand Down Expand Up @@ -106,40 +105,6 @@ func NewPrinterFunc(name string, w io.Writer) func(string) error {
return p.Print
}

func stepPrinterFunc(name string, w io.Writer) func(msg *message.Message) error {
isFirst := true
return func(msg *message.Message) error {
e := &chat.Event{}
err := json.Unmarshal(msg.Payload, e)
if err != nil {
return err
}

switch e.Type {
case chat.EventTypeError:
return err
case chat.EventTypePartial:
if isFirst {
isFirst = false
err := printToStdout(fmt.Sprintf("\n%s: \n", name), w)
if err != nil {
return err
}
}
err := printToStdout(e.Text, w)
if err != nil {
return err
}
case chat.EventTypeFinal:
case chat.EventTypeInterrupt:
}

msg.Ack()

return nil
}
}

var MultiStepCodgenTestCmd = &cobra.Command{
Use: "multi-step",
Short: "Test codegen prompt",
Expand Down Expand Up @@ -179,12 +144,12 @@ var MultiStepCodgenTestCmd = &cobra.Command{
router.AddNoPublisherHandler("scientist",
"scientist",
pubSub,
stepPrinterFunc("Scientist", cmd.OutOrStdout()),
chat.StepPrinterFunc("Scientist", cmd.OutOrStdout()),
)
router.AddNoPublisherHandler("writer",
"writer",
pubSub,
stepPrinterFunc("Writer", cmd.OutOrStdout()),
chat.StepPrinterFunc("Writer", cmd.OutOrStdout()),
)

writerParams := &TestCodegenCommandParameters{
Expand Down Expand Up @@ -216,10 +181,10 @@ var MultiStepCodgenTestCmd = &cobra.Command{
errgrp := errgroup.Group{}
errgrp.Go(func() error {
var scientistResult steps.StepResult[string]
scientistResult, err = scientistStep.Start(ctx, manager.GetMessagesWithSystemPrompt())
scientistResult, err = scientistStep.Start(ctx, manager.GetConversation())
cobra.CheckErr(err)
mergeResult := steps.Bind[string, []*context2.Message](ctx, scientistResult, mergeStep)
writerResult := steps.Bind[[]*context2.Message, string](ctx, mergeResult, writerStep)
mergeResult := steps.Bind[string, conversation.Conversation](ctx, scientistResult, mergeStep)
writerResult := steps.Bind[conversation.Conversation, string](ctx, mergeResult, writerStep)

res := writerResult.Return()
_ = res
Expand Down
19 changes: 10 additions & 9 deletions cmd/experiments/agent/codegen/test-codegen2.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package codegen

import (
context2 "context"
"github.com/go-go-golems/bobatea/pkg/chat/conversation"
context "github.com/go-go-golems/geppetto/pkg/context"
"github.com/go-go-golems/geppetto/pkg/steps"
"github.com/go-go-golems/geppetto/pkg/steps/ai"
Expand All @@ -17,10 +18,10 @@ const testCodegenCommandSystemPrompt = ""

type TestCodegenCommand struct {
*cmds.CommandDescription
StepSettings *settings.StepSettings `yaml:"-"`
Prompt string `yaml:"prompt"`
Messages []*context.Message `yaml:"messages,omitempty"`
SystemPrompt string `yaml:"system-prompt"`
StepSettings *settings.StepSettings `yaml:"-"`
Prompt string `yaml:"prompt"`
Messages []*conversation.Message `yaml:"messages,omitempty"`
SystemPrompt string `yaml:"system-prompt"`
}

type TestCodegenCommandParameters struct {
Expand All @@ -34,8 +35,8 @@ var _ context.GeppettoRunnable = (*TestCodegenCommand)(nil)

func (c *TestCodegenCommand) CreateManager(
params *TestCodegenCommandParameters,
) (*context.Manager, error) {
return context.CreateManager(c.SystemPrompt, c.Prompt, c.Messages, params)
) (*conversation.ManagerImpl, error) {
return conversation.CreateManager(c.SystemPrompt, c.Prompt, c.Messages, params)
}

func (c *TestCodegenCommand) CreateStep(options ...chat.StepOption) (
Expand All @@ -50,15 +51,15 @@ func (c *TestCodegenCommand) CreateStep(options ...chat.StepOption) (

func (c *TestCodegenCommand) RunWithManager(
ctx context2.Context,
manager *context.Manager,
manager conversation.Manager,
) (steps.StepResult[string], error) {
// instantiate step frm factory
step, err := c.CreateStep()
if err != nil {
return nil, err
}

stepResult, err := step.Start(ctx, manager.GetMessagesWithSystemPrompt())
stepResult, err := step.Start(ctx, manager.GetConversation())
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -92,7 +93,7 @@ func (c *TestCodegenCommand) RunToString(
func (c *TestCodegenCommand) RunToContextManager(
ctx context2.Context,
params *TestCodegenCommandParameters,
) (*context.Manager, error) {
) (conversation.Manager, error) {
manager, err := c.CreateManager(params)
if err != nil {
return nil, err
Expand Down
35 changes: 18 additions & 17 deletions cmd/experiments/agent/codegen/unit-tests.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package codegen

import (
context1 "context"
context "github.com/go-go-golems/geppetto/pkg/context"
"context"
conversation "github.com/go-go-golems/bobatea/pkg/chat/conversation"
context1 "github.com/go-go-golems/geppetto/pkg/context"
steps "github.com/go-go-golems/geppetto/pkg/steps"
ai "github.com/go-go-golems/geppetto/pkg/steps/ai"
chat "github.com/go-go-golems/geppetto/pkg/steps/ai/chat"
Expand All @@ -17,10 +18,10 @@ const unitTestsCommandSystemPrompt = "You are a meticulous and experienced softw

type UnitTestsCommand struct {
*cmds.CommandDescription
StepSettings settings.StepSettings `yaml:"-"`
Prompt string `yaml:"prompt"`
Messages []*context.Message `yaml:"messages,omitempty"`
SystemPrompt string `yaml:"system-prompt"`
StepSettings settings.StepSettings `yaml:"-"`
Prompt string `yaml:"prompt"`
Messages conversation.Conversation `yaml:"messages,omitempty"`
SystemPrompt string `yaml:"system-prompt"`
}

type UnitTestsCommandParameters struct {
Expand All @@ -43,48 +44,48 @@ func (c *UnitTestsCommand) CreateStep(options ...chat.StepOption) (chat.Step, er
return stepFactory.NewStep(options...)
}

func (c *UnitTestsCommand) CreateManager(params *UnitTestsCommandParameters) (*context.Manager, error) {
return context.CreateManager(c.SystemPrompt, c.Prompt, c.Messages, params)
func (c *UnitTestsCommand) CreateManager(params *UnitTestsCommandParameters) (conversation.Manager, error) {
return conversation.CreateManager(c.SystemPrompt, c.Prompt, c.Messages, params)
}

func (c *UnitTestsCommand) RunWithManager(ctx context1.Context, manager *context.Manager) (steps.StepResult[string], error) {
func (c *UnitTestsCommand) RunWithManager(ctx context.Context, manager conversation.Manager) (steps.StepResult[string], error) {
// instantiate step from factory
step, err := c.CreateStep()
if err != nil {
return nil, err
}
stepResult, err := step.Start(ctx, manager.GetMessagesWithSystemPrompt())
stepResult, err := step.Start(ctx, manager.GetConversation())
if err != nil {
return nil, err
}
return stepResult, nil
}

func (c *UnitTestsCommand) RunIntoWriter(ctx context1.Context, params *UnitTestsCommandParameters, w io.Writer) error {
func (c *UnitTestsCommand) RunIntoWriter(ctx context.Context, params *UnitTestsCommandParameters, w io.Writer) error {
manager, err := c.CreateManager(params)
if err != nil {
return err
}
return context.RunIntoWriter(ctx, c, manager, w)
return context1.RunIntoWriter(ctx, c, manager, w)
}

func (c *UnitTestsCommand) RunToString(ctx context1.Context, params *UnitTestsCommandParameters) (string, error) {
func (c *UnitTestsCommand) RunToString(ctx context.Context, params *UnitTestsCommandParameters) (string, error) {
manager, err := c.CreateManager(params)
if err != nil {
return "", err
}
return context.RunToString(ctx, c, manager)
return context1.RunToString(ctx, c, manager)
}

func (c *UnitTestsCommand) RunToContextManager(ctx context1.Context, params *UnitTestsCommandParameters) (*context.Manager, error) {
func (c *UnitTestsCommand) RunToContextManager(ctx context.Context, params *UnitTestsCommandParameters) (conversation.Manager, error) {
manager, err := c.CreateManager(params)
if err != nil {
return nil, err
}
return context.RunToContextManager(ctx, c, manager)
return context1.RunToContextManager(ctx, c, manager)
}

var _ context.GeppettoRunnable = (*UnitTestsCommand)(nil)
var _ context1.GeppettoRunnable = (*UnitTestsCommand)(nil)

func NewUnitTestsCommand() (*UnitTestsCommand, error) {
var flagDefs = []*parameters.ParameterDefinition{{
Expand Down
25 changes: 15 additions & 10 deletions cmd/experiments/agent/tool/tool.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import (
"context"
"encoding/json"
"fmt"
"github.com/go-go-golems/bobatea/pkg/chat/conversation"
"github.com/go-go-golems/geppetto/pkg/cmds"
geppetto_context "github.com/go-go-golems/geppetto/pkg/context"
helpers2 "github.com/go-go-golems/geppetto/pkg/helpers"
"github.com/go-go-golems/geppetto/pkg/steps"
"github.com/go-go-golems/geppetto/pkg/steps/ai/openai"
Expand Down Expand Up @@ -63,32 +63,37 @@ var ToolCallCmd = &cobra.Command{
geppettoLayers, err := cmds.CreateGeppettoLayers(stepSettings)
cobra.CheckErr(err)
layers_ := layers.NewParameterLayers(layers.WithLayers(geppettoLayers...))
parsedLayers, err := cli.ParseLayersFromCobraCommand(cmd, layers_)

parser, err := cli.NewCobraParserFromLayers(
layers_,
cli.WithCobraMiddlewaresFunc(cmds.GetCobraCommandGeppettoMiddlewares))
cobra.CheckErr(err)

parsedLayers, err := parser.Parse(cmd, nil)
cobra.CheckErr(err)

err = stepSettings.UpdateFromParsedLayers(parsedLayers)
cobra.CheckErr(err)

ctx, cancel := context.WithCancel(cmd.Context())
defer cancel()
messages := []*geppetto_context.Message{
{
Text: "Give me the weather in Boston on november 9th 1924, please, including the windspeed for me, an old ass american. Also, the weather in paris today, with temperature.",
Role: geppetto_context.RoleUser,
},
messages := []*conversation.Message{
conversation.NewChatMessage(
conversation.RoleUser,
"Give me the weather in Boston on november 9th 1924, please, including the windspeed for me, an old ass american. Also, the weather in paris today, with temperature.",
),
}

//
reflector := new(jsonschema.Reflector)
err = reflector.AddGoComments("github.com/go-go-golems/geppetto", "./cmd/experiments/agent")
if err != nil {
log.Warn().Err(err).Msg("Could not add go comments")
}
getWeatherOnDayJsonSchema, _ := helpers2.GetFunctionParametersJsonSchema(getWeatherOnDay)
getWeatherOnDayJsonSchema, _ := helpers2.GetFunctionParametersJsonSchema(reflector, getWeatherOnDay)
s, _ := json.MarshalIndent(getWeatherOnDayJsonSchema, "", " ")
fmt.Printf("getWeatherOnDayJsonSchema:\n%s\n\n", s)

getWeatherJsonSchema, _ := helpers2.GetFunctionParametersJsonSchema(getWeather)
getWeatherJsonSchema, _ := helpers2.GetFunctionParametersJsonSchema(reflector, getWeather)
s, _ = json.MarshalIndent(getWeatherJsonSchema, "", " ")
fmt.Printf("getWeatherJsonSchema:\n%s\n\n", s)

Expand Down
13 changes: 6 additions & 7 deletions cmd/experiments/agent/uppercase.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ package main
import (
"context"
"fmt"
"github.com/go-go-golems/bobatea/pkg/chat/conversation"
"github.com/go-go-golems/geppetto/pkg/cmds"
geppetto_context "github.com/go-go-golems/geppetto/pkg/context"
"github.com/go-go-golems/geppetto/pkg/helpers"
"github.com/go-go-golems/geppetto/pkg/steps"
"github.com/go-go-golems/geppetto/pkg/steps/ai/openai"
Expand Down Expand Up @@ -40,16 +40,15 @@ var upperCaseCmd = &cobra.Command{

ctx, cancel := context.WithCancel(cmd.Context())
defer cancel()
messages := []*geppetto_context.Message{
{
Text: "Hello, my friend?",
Role: geppetto_context.RoleUser,
},
messages := []*conversation.Message{
conversation.NewChatMessage(conversation.RoleUser, "Hello, my friend?"),
}

stepSettings.Chat.Stream = true
// LLM completion step
step := openai.NewStep(stepSettings)
step, err := openai.NewStep(stepSettings)
cobra.CheckErr(err)

// uppercase lambda step
uppercaseStep := &utils.LambdaStep[string, string]{
Function: func(s string) helpers.Result[string] {
Expand Down
38 changes: 38 additions & 0 deletions cmd/experiments/tool-ui/cmd.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package main

type WeatherData struct {
City string `json:"city"`
Temperature float64 `json:"temperature"`
WindSpeed float64 `json:"wind_speed"`
}

type WeatherRequest struct {
// The city for which to request the data
City string `json:"city"`
// Return windspeed in km/h
WindSpeed bool `json:"wind_speed"`
// Return temperature in Celsius
Temperature bool `json:"temperature"`
}

func getWeather(request WeatherRequest) WeatherData {
return WeatherData{
City: request.City,
Temperature: 23.0,
WindSpeed: 10.0,
}
}

type WeatherOnDayRequest struct {
WeatherRequest
// The date for which to request the data
Date string `json:"date"`
}

func getWeatherOnDay(request WeatherOnDayRequest) WeatherData {
return WeatherData{
City: request.City,
Temperature: 23.0,
WindSpeed: 10.0,
}
}
Loading

0 comments on commit 9a265b9

Please sign in to comment.