X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/b2873a2a0bf8b0ba648aebac51759e5fed89a2e2..d50c22617aafed0d3d87bf4596e933b343a10b60:/turn.go?ds=inline diff --git a/turn.go b/turn.go index 0b2b29e..029f24e 100644 --- a/turn.go +++ b/turn.go @@ -11,9 +11,9 @@ import ( "time" ) -// modelClient sends model calls. -type modelClient interface { - Create(ctx context.Context, request Request) (Response, error) +// TurnClient sends model calls. +type TurnClient interface { + Create(ctx context.Context, request ModelRequest) (ModelResponse, error) } // Event tells the clients what the agent does as it happens. Kind is the kind @@ -47,7 +47,7 @@ type Event struct { type loop struct { agent *Agent memory *Memory - client modelClient + client TurnClient tools *toolbox layout *viewLayout clock func() time.Time @@ -76,7 +76,7 @@ type functionCallOutput struct { // newLoop returns the loop of agent with its memory. Its calls go through // client, and notify gets each event. The clock gives the date of a turn. -func newLoop(agent *Agent, memory *Memory, client modelClient, clock func() time.Time, notify func(Event)) (*loop, error) { +func newLoop(agent *Agent, memory *Memory, client TurnClient, clock func() time.Time, notify func(Event)) (*loop, error) { layout, err := loadLayout(filepath.Join(agent.dir, layoutFileName)) if err != nil { return nil, err @@ -283,7 +283,7 @@ func (l *loop) chain(ctx context.Context) error { input := turnInput(view, l.state(), messages) for turn := "first"; ; turn = "next" { - response, err := l.client.Create(ctx, Request{ + response, err := l.client.Create(ctx, ModelRequest{ Model: l.agent.config.Model, Effort: l.agent.config.Effort, Instructions: instructions, @@ -310,7 +310,7 @@ func (l *loop) chain(ctx context.Context) error { // input of the next request: input, the output items, the tool results, and // the user messages that came in the meantime. After the final answer it // returns no input. -func (l *loop) handle(ctx context.Context, input []any, response Response) ([]any, error) { +func (l *loop) handle(ctx context.Context, input []any, response ModelResponse) ([]any, error) { var outputs []any for _, raw := range response.Output { item, err := inputItem(raw) @@ -328,7 +328,7 @@ func (l *loop) handle(ctx context.Context, input []any, response Response) ([]an switch call.Type { case "message": - text, err := outputText([]json.RawMessage{raw}) + text, err := modelOutputText([]json.RawMessage{raw}) if err != nil { return nil, err } @@ -362,7 +362,7 @@ func (l *loop) handle(ctx context.Context, input []any, response Response) ([]an input = append(input, outputs...) for _, message := range l.take() { - input = append(input, userMessage(message.Text)) + input = append(input, modelUserMessage(message.Text)) } return input, nil @@ -381,12 +381,12 @@ func (l *loop) state() string { func turnInput(view []string, state string, messages []Message) []any { input := make([]any, 0, len(view)+1+len(messages)) for _, text := range view { - input = append(input, userMessage(text)) + input = append(input, modelUserMessage(text)) } - input = append(input, userMessage(state)) + input = append(input, modelUserMessage(state)) for _, message := range messages { - input = append(input, userMessage(message.Text)) + input = append(input, modelUserMessage(message.Text)) } return input