Skip to content

Commit 1a63db0

Browse files
authored
Merge pull request #11 from neurocult/experimental
Add streaming
2 parents cbd7680 + 30b6abd commit 1a63db0

File tree

32 files changed

+672
-306
lines changed

32 files changed

+672
-306
lines changed

agency.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func NewOperation(handler OperationHandler) *Operation {
3737
func (p *Operation) Execute(ctx context.Context, input Message) (Message, error) {
3838
output, err := p.handler(ctx, input, p.config)
3939
if err != nil {
40-
return Message{}, err
40+
return nil, err
4141
}
4242
return output, nil
4343
}

examples/chat/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func main() {
3030
panic(err)
3131
}
3232

33-
input := agency.UserMessage(text)
33+
input := agency.NewMessage(agency.UserRole, agency.TextKind, []byte(text))
3434
answer, err := assistant.SetMessages(messages).Execute(ctx, input)
3535
if err != nil {
3636
panic(err)

examples/cli/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func main() {
3838
MaxTokens: *maxTokens,
3939
}).
4040
SetPrompt(*prompt).
41-
Execute(context.Background(), agency.UserMessage(content))
41+
Execute(context.Background(), agency.NewMessage(agency.UserRole, agency.TextKind, []byte(content)))
4242

4343
if err != nil {
4444
fmt.Println(err)

examples/completion_streaming/main.go

Lines changed: 0 additions & 31 deletions
This file was deleted.

examples/custom_operation/main.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func main() {
1313

1414
msg, err := agency.NewProcess(
1515
increment, increment, increment,
16-
).Execute(context.Background(), agency.UserMessage("0"))
16+
).Execute(context.Background(), agency.NewMessage(agency.UserRole, agency.TextKind, []byte("0")))
1717

1818
if err != nil {
1919
panic(err)
@@ -23,10 +23,10 @@ func main() {
2323
}
2424

2525
func incrementFunc(ctx context.Context, msg agency.Message, _ *agency.OperationConfig) (agency.Message, error) {
26-
i, err := strconv.ParseInt(string(msg.Content), 10, 10)
26+
i, err := strconv.ParseInt(string(msg.Content()), 10, 10)
2727
if err != nil {
28-
return agency.Message{}, err
28+
return nil, err
2929
}
3030
inc := strconv.Itoa(int(i) + 1)
31-
return agency.SystemMessage(inc), nil
31+
return agency.NewMessage(agency.ToolRole, agency.TextKind, []byte(inc)), nil
3232
}

examples/func_call/main.go

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@ func main() {
2323
{
2424
Name: "GetMeaningOfLife",
2525
Description: "Answer questions about meaning of life",
26-
Body: func(ctx context.Context, _ []byte) (any, error) {
27-
return 42, nil
26+
Body: func(ctx context.Context, _ []byte) (agency.Message, error) {
27+
return agency.NewTextMessage(agency.ToolRole, "42"), nil
2828
},
2929
},
3030
// function with parameters
@@ -38,12 +38,15 @@ func main() {
3838
"b": {Type: "integer"},
3939
},
4040
},
41-
Body: func(ctx context.Context, params []byte) (any, error) {
41+
Body: func(ctx context.Context, params []byte) (agency.Message, error) {
4242
var pp struct{ A, B int }
4343
if err := json.Unmarshal(params, &pp); err != nil {
4444
return nil, err
4545
}
46-
return (pp.A + pp.B) * 10, nil // *10 is just to distinguish from normal response
46+
return agency.NewTextMessage(
47+
agency.ToolRole,
48+
fmt.Sprintf("%d", (pp.A+pp.B)*10),
49+
), nil // *10 is just to distinguish from normal response
4750
},
4851
},
4952
},
@@ -64,30 +67,34 @@ Examples:
6467
// test for first function call
6568
answer, err := t2tOp.Execute(
6669
ctx,
67-
agency.UserMessage("what is the meaning of life?"),
70+
agency.NewMessage(agency.UserRole, agency.TextKind, []byte("what is the meaning of life?")),
6871
)
6972
if err != nil {
7073
panic(err)
7174
}
72-
fmt.Println(answer)
75+
printAnswer(answer)
7376

7477
// test for second function call
7578
answer, err = t2tOp.Execute(
7679
ctx,
77-
agency.UserMessage("1+1?"),
80+
agency.NewMessage(agency.UserRole, agency.TextKind, []byte("1+1?")),
7881
)
7982
if err != nil {
8083
panic(err)
8184
}
82-
fmt.Println(answer)
85+
printAnswer(answer)
8386

8487
// test for both function calls at the same time
8588
answer, err = t2tOp.Execute(
8689
ctx,
87-
agency.UserMessage("1+1 and what is the meaning of life?"),
90+
agency.NewMessage(agency.UserRole, agency.TextKind, []byte("1+1 and what is the meaning of life?")),
8891
)
8992
if err != nil {
9093
panic(err)
9194
}
92-
fmt.Println(answer)
95+
printAnswer(answer)
96+
}
97+
98+
func printAnswer(message agency.Message) {
99+
fmt.Printf("Role: %s; Type: %s; Data: %s\n", message.Role(), message.Kind(), agency.GetStringContent(message))
93100
}

examples/image_to_stream/main.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package main
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
8+
_ "github.com/joho/godotenv/autoload"
9+
"github.com/neurocult/agency"
10+
11+
providers "github.com/neurocult/agency/providers/openai"
12+
)
13+
14+
func main() {
15+
imgBytes, err := os.ReadFile("assets/test.jpg")
16+
if err != nil {
17+
panic(err)
18+
}
19+
20+
_, err = providers.New(providers.Params{Key: os.Getenv("OPENAI_API_KEY")}).
21+
TextToStream(providers.TextToStreamParams{
22+
TextToTextParams: providers.TextToTextParams{MaxTokens: 300, Model: "gpt-4o"},
23+
StreamHandler: func(delta, total string, isFirst, isLast bool) error {
24+
fmt.Println(delta)
25+
return nil
26+
}}).
27+
SetPrompt("describe what you see").
28+
Execute(
29+
context.Background(),
30+
agency.NewMessage(agency.UserRole, agency.ImageKind, imgBytes),
31+
)
32+
if err != nil {
33+
panic(err)
34+
}
35+
}

examples/image_to_text/main.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,13 @@ import (
66
"os"
77

88
_ "github.com/joho/godotenv/autoload"
9-
109
"github.com/neurocult/agency"
1110
openAIProvider "github.com/neurocult/agency/providers/openai"
1211
"github.com/sashabaranov/go-openai"
1312
)
1413

1514
func main() {
16-
imgBytes, err := os.ReadFile("example.png")
15+
imgBytes, err := os.ReadFile("../example.png")
1716
if err != nil {
1817
panic(err)
1918
}
@@ -23,7 +22,7 @@ func main() {
2322
SetPrompt("describe what you see").
2423
Execute(
2524
context.Background(),
26-
agency.Message{Content: imgBytes},
25+
agency.NewMessage(agency.UserRole, agency.ImageKind, imgBytes),
2726
)
2827
if err != nil {
2928
panic(err)

examples/logging/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func main() {
2222
).
2323
Execute(
2424
context.Background(),
25-
agency.UserMessage("Kazakhstan alga!"),
25+
agency.NewMessage(agency.UserRole, agency.TextKind, []byte("Kazakhstan alga!")),
2626
Logger,
2727
)
2828

examples/prompt_template/main.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func main() {
2222
).
2323
Execute(
2424
context.Background(),
25-
agency.UserMessage("%s", "I love programming."),
25+
agency.NewMessage(agency.UserRole, agency.TextKind, []byte("I love programming.")),
2626
)
2727

2828
if err != nil {

0 commit comments

Comments
 (0)