Skip to content

Commit f36e27d

Browse files
authored
HowTo: config environment and usage of autoconfig in examples (#14)
1 parent dcecfe4 commit f36e27d

File tree

9 files changed

+95
-36
lines changed

9 files changed

+95
-36
lines changed

README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ Running the examples you need access either to AWS Bedrock or OpenAI.
6666

6767
## Quick example
6868

69-
See ["Hello World"](./examples/helloworld/hw.go) application as the quick start. The example agent is `ƒ: string ⟼ string` that takes the sentence and returns the anagram.
69+
See ["Hello World"](./examples/helloworld/hw.go) application as the quick start. The example agent is `ƒ: string ⟼ string` that takes the sentence and returns the anagram. [HowTo](./doc/HOWTO.md) gives support to bootstrap it.
7070

7171
```go
7272
package main
@@ -110,11 +110,8 @@ func anagram(expr string) (prompt chatter.Prompt, err error) {
110110
}
111111

112112
func main() {
113-
// create instance of LLM client
114-
llm, err := bedrock.New(
115-
bedrock.WithLLM(bedrock.LLAMA3_1_70B_INSTRUCT),
116-
bedrock.WithRegion("us-west-2"),
117-
)
113+
// create instance of LLM API, see doc/HOWTO.md for details
114+
llm, err := autoconfig.New("thinker")
118115
if err != nil {
119116
panic(err)
120117
}

doc/HOWTO.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# HowTos
2+
3+
- [HowTos](#howtos)
4+
- [Setup environment](#setup-environment)
5+
6+
7+
## Setup environment
8+
9+
The library uses [`chatter`](github.com/kshard/chatter) as an adapter to access LLMs from various providers. The first required things is to choose right provider for your application and configure it:
10+
* [AWS Bedrock](https://aws.amazon.com/bedrock/)
11+
* [OpenAI](https://platform.openai.com/docs/api-reference/introduction)
12+
* [LM Studio](https://lmstudio.ai)
13+
14+
Once the provider and LLMs access is configures, your application can start using it. The [`autoconfig`](github.com/kshard/chatter/llm/autoconfig) is recommended approach to begin with. It does not require any specification within Golang code.
15+
16+
```go
17+
import "github.com/kshard/chatter/llm/autoconfig"
18+
19+
llm, err := autoconfig.New("thinker")
20+
if err != nil {
21+
panic(err)
22+
}
23+
```
24+
25+
The `autoconfig` reads the desired configuration from `~/.netrc` and creates appropriate instance of LLM API.
26+
27+
**For AWS Bedrock**, `~/.netrc` config is
28+
```
29+
machine thinker
30+
provider bedrock
31+
region us-west-2
32+
family llama3
33+
model meta.llama3-1-70b-instruct-v1:0
34+
```
35+
36+
**For OpenAI**, `~/.netrc` config is
37+
```
38+
machine chatter1
39+
provider openai
40+
host https://api.openai.com
41+
model gpt-4o
42+
secret sk-...IA
43+
```
44+
45+
**For LM Studio**, `~/.netrc` config is
46+
```
47+
machine chatter1
48+
provider openai
49+
host http://localhost:1234
50+
model gemma-3-27b-it
51+
```

examples/chain/chain.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616
"github.com/fogfish/golem/pipe/v2"
1717
"github.com/fogfish/golem/pure/monoid"
1818
"github.com/kshard/chatter"
19-
"github.com/kshard/chatter/llm/bedrock"
19+
"github.com/kshard/chatter/llm/autoconfig"
2020
"github.com/kshard/thinker"
2121
"github.com/kshard/thinker/agent"
2222
"github.com/kshard/thinker/command"
@@ -70,11 +70,8 @@ func (agt AgentB) Encode(string) (prompt chatter.Prompt, err error) {
7070
//------------------------------------------------------------------------------
7171

7272
func main() {
73-
// create instance of LLM client
74-
llm, err := bedrock.New(
75-
bedrock.WithLLM(bedrock.LLAMA3_1_70B_INSTRUCT),
76-
bedrock.WithRegion("us-west-2"),
77-
)
73+
// create instance of LLM API, see doc/HOWTO.md for details
74+
llm, err := autoconfig.New("thinker")
7875
if err != nil {
7976
panic(err)
8077
}

examples/go.mod

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ require (
1010
github.com/fogfish/golem/pipe/v2 v2.0.1
1111
github.com/fogfish/golem/pure v0.10.1
1212
github.com/kshard/chatter v0.5.1
13+
github.com/kshard/chatter/llm/autoconfig v0.0.1
1314
github.com/kshard/chatter/llm/bedrock v0.3.1
1415
github.com/kshard/thinker v0.0.0-00010101000000-000000000000
1516
)
1617

1718
require (
1819
github.com/Masterminds/semver/v3 v3.3.1 // indirect
20+
github.com/ajg/form v1.5.2-0.20200323032839-9aeb3cf462e1 // indirect
1921
github.com/aws/aws-cdk-go/awscdk/v2 v2.178.2 // indirect
2022
github.com/aws/aws-sdk-go-v2 v1.36.1 // indirect
2123
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.9 // indirect
@@ -43,13 +45,18 @@ require (
4345
github.com/fogfish/golem/hseq v1.3.0 // indirect
4446
github.com/fogfish/golem/optics v0.14.0 // indirect
4547
github.com/fogfish/guid/v2 v2.1.0 // indirect
48+
github.com/fogfish/gurl/v2 v2.10.0 // indirect
4649
github.com/fogfish/opts v0.0.5 // indirect
50+
github.com/google/go-cmp v0.6.0 // indirect
51+
github.com/jdxcode/netrc v1.0.0 // indirect
52+
github.com/kshard/chatter/llm/openai v0.3.1 // indirect
4753
github.com/kshard/float8 v0.0.3 // indirect
4854
github.com/mattn/go-colorable v0.1.13 // indirect
4955
github.com/mattn/go-isatty v0.0.20 // indirect
5056
github.com/yuin/goldmark v1.4.13 // indirect
5157
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
5258
golang.org/x/mod v0.22.0 // indirect
59+
golang.org/x/net v0.32.0 // indirect
5360
golang.org/x/sync v0.10.0 // indirect
5461
golang.org/x/sys v0.28.0 // indirect
5562
golang.org/x/time v0.11.0 // indirect

examples/go.sum

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
github.com/Masterminds/semver/v3 v3.3.1 h1:QtNSWtVZ3nBfk8mAOu/B6v7FMJ+NHTIgUPi7rj+4nv4=
22
github.com/Masterminds/semver/v3 v3.3.1/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
3+
github.com/ajg/form v1.5.2-0.20200323032839-9aeb3cf462e1 h1:8Qzi+0Uch1VJvdrOhJ8U8FqoPLbUdETPgMqGJ6DSMSQ=
4+
github.com/ajg/form v1.5.2-0.20200323032839-9aeb3cf462e1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY=
35
github.com/aws/aws-cdk-go/awscdk/v2 v2.178.2 h1:j4eUFT73OD0EtEqH2S7BTF1z9+8vlR25zxWTd53ihyc=
46
github.com/aws/aws-cdk-go/awscdk/v2 v2.178.2/go.mod h1:pfTJhAYYAyBMhRTiC2/cehvhrHX7LwmErOmDolfhZ2w=
57
github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E=
@@ -62,24 +64,37 @@ github.com/fogfish/golem/pure v0.10.1 h1:0+cnvdaV9zF+0NN8SZMgR5bgFM6yNfBHU4rynYS
6264
github.com/fogfish/golem/pure v0.10.1/go.mod h1:kLPfgu5uKP0CrwVap7jejisRwV7vo1q8Eyqnc/Z0qyw=
6365
github.com/fogfish/guid/v2 v2.1.0 h1:oEJHKM4yFOOCmKZdh0oH7eD3mL32n2+1YCc27lXB5rE=
6466
github.com/fogfish/guid/v2 v2.1.0/go.mod h1:KkZ5T4EE3BqWQJFZBPLSHV/tBe23Xq4KvuPfwtNtepU=
67+
github.com/fogfish/gurl/v2 v2.10.0 h1:91qNyuYG6H+qHEqrPIogct1e8WUeH/QUFWrBG7+u5i8=
68+
github.com/fogfish/gurl/v2 v2.10.0/go.mod h1:7T4FFZiWmEXVYnTgSdqEbAM/bwPfWSkEYgaVAsVSIso=
6569
github.com/fogfish/it v1.0.0 h1:kiwFHZcrkRLUydZoIoY0gTuMfj38trwvLo0YRyIkeG8=
6670
github.com/fogfish/it/v2 v2.2.1 h1:NuuaENAZka8XiJkEj2Q6THRsHSwleC/BLDux82NvkII=
6771
github.com/fogfish/it/v2 v2.2.1/go.mod h1:HHwufnTaZTvlRVnSesPl49HzzlMrQtweKbf+8Co/ll4=
6872
github.com/fogfish/opts v0.0.5 h1:Bh3Nucr1kx7G1F0Tq3DxO14/qYgmR6C2GjWr2k6O+Oc=
6973
github.com/fogfish/opts v0.0.5/go.mod h1:+HM1YrMsTzfouZRoHfPOsGT9VZw+0ZBKZ36PMqoNFqM=
7074
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
7175
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
76+
github.com/jdxcode/netrc v1.0.0 h1:tJR3fyzTcjDi22t30pCdpOT8WJ5gb32zfYE1hFNCOjk=
77+
github.com/jdxcode/netrc v1.0.0/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw=
78+
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
79+
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
80+
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
7281
github.com/kshard/chatter v0.5.1 h1:hzKMIIOnqSWpGkDE3X45N/LlY1m3Q32Vyvyn0mSwivM=
7382
github.com/kshard/chatter v0.5.1/go.mod h1:Rg3cAzmXVoHGFKDJ8mbp8UUmYwHqOf5bkArIMX2irhE=
83+
github.com/kshard/chatter/llm/autoconfig v0.0.1 h1:jM2boewfG7V0I7vnmkKbnLwff5otbzzamStyU68FHCM=
84+
github.com/kshard/chatter/llm/autoconfig v0.0.1/go.mod h1:Epjy0ftS3dQ9IX0vPO2yQ/8TzNKa0nKtb4CtirB/CR0=
7485
github.com/kshard/chatter/llm/bedrock v0.3.1 h1:kHsUgJ0zNvNsBrdyU6j7sBvnnx2qtPaPBmhtqm+RNS8=
7586
github.com/kshard/chatter/llm/bedrock v0.3.1/go.mod h1:fEVYZrZ6K3DndNfig1qC839/K3fzIfWcCvd/KEnszYk=
87+
github.com/kshard/chatter/llm/openai v0.3.1 h1:9OZUsUs/bHw4p+EUOIeD1su782lQLlYz3eCEHZUCWh8=
88+
github.com/kshard/chatter/llm/openai v0.3.1/go.mod h1:gcg655Kd93xp5PZY4+5kjhUq2qqjvB4XZVJAWtZCKSY=
7689
github.com/kshard/float8 v0.0.3 h1:wMmj/dbbwA8aKo+gZ8SS6MhjuXS9+yXYMlaJZfm77l0=
7790
github.com/kshard/float8 v0.0.3/go.mod h1:PnQWQ36EkMym5ulAnfCcpgOzbMeyyq90xsCcosTHJ5E=
7891
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
7992
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
8093
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
8194
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
8295
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
96+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
97+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
8398
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
8499
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
85100
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
@@ -95,6 +110,8 @@ golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4=
95110
golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
96111
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
97112
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
113+
golang.org/x/net v0.32.0 h1:ZqPmj8Kzc+Y6e0+skZsuACbx+wzMgo5MQsJh9Qd6aYI=
114+
golang.org/x/net v0.32.0/go.mod h1:CwU0IoeOlnQQWJ6ioyFrfRuomB8GKF6KbYXZVyeXNfs=
98115
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
99116
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
100117
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
@@ -111,5 +128,7 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
111128
golang.org/x/tools v0.28.0 h1:WuB6qZ4RPCQo5aP3WdKZS7i595EdWqWR8vqJTlwTVK8=
112129
golang.org/x/tools v0.28.0/go.mod h1:dcIOrVd3mfQKTgrDVQHqCPMWy6lnhfhtX3hLXYVLfRw=
113130
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
131+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U=
132+
gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
114133
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
115134
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

examples/helloworld/hw.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"fmt"
1414

1515
"github.com/kshard/chatter"
16-
"github.com/kshard/chatter/llm/bedrock"
16+
"github.com/kshard/chatter/llm/autoconfig"
1717
"github.com/kshard/thinker/agent"
1818
"github.com/kshard/thinker/codec"
1919
"github.com/kshard/thinker/memory"
@@ -44,11 +44,8 @@ func anagram(expr string) (prompt chatter.Prompt, err error) {
4444
}
4545

4646
func main() {
47-
// create instance of LLM client
48-
llm, err := bedrock.New(
49-
bedrock.WithLLM(bedrock.LLAMA3_1_70B_INSTRUCT),
50-
bedrock.WithRegion("us-west-2"),
51-
)
47+
// create instance of LLM API, see doc/HOWTO.md for details
48+
llm, err := autoconfig.New("thinker")
5249
if err != nil {
5350
panic(err)
5451
}

examples/rainbow/rainbow.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import (
1616

1717
"github.com/kshard/chatter"
1818
"github.com/kshard/chatter/aio"
19-
"github.com/kshard/chatter/llm/bedrock"
19+
"github.com/kshard/chatter/llm/autoconfig"
2020
"github.com/kshard/thinker"
2121
"github.com/kshard/thinker/agent"
2222
"github.com/kshard/thinker/codec"
@@ -82,11 +82,8 @@ func deduct(state thinker.State[[]string]) (thinker.Phase, chatter.Prompt, error
8282
}
8383

8484
func main() {
85-
// create instance of LLM client
86-
llm, err := bedrock.New(
87-
bedrock.WithLLM(bedrock.LLAMA3_0_8B_INSTRUCT),
88-
bedrock.WithRegion("us-west-2"),
89-
)
85+
// create instance of LLM API, see doc/HOWTO.md for details
86+
llm, err := autoconfig.New("thinker")
9087
if err != nil {
9188
panic(err)
9289
}

examples/script/script.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515

1616
"github.com/kshard/chatter"
1717
"github.com/kshard/chatter/aio"
18-
"github.com/kshard/chatter/llm/bedrock"
18+
"github.com/kshard/chatter/llm/autoconfig"
1919
"github.com/kshard/thinker"
2020
"github.com/kshard/thinker/agent"
2121
"github.com/kshard/thinker/codec"
@@ -80,11 +80,8 @@ func main() {
8080
// enable pseudo tool for LLM to emphasis completion of the task
8181
registry.Register(command.Return())
8282

83-
// create instance of LLM client
84-
llm, err := bedrock.New(
85-
bedrock.WithLLM(bedrock.LLAMA3_1_70B_INSTRUCT),
86-
bedrock.WithRegion("us-west-2"),
87-
)
83+
// create instance of LLM API, see doc/HOWTO.md for details
84+
llm, err := autoconfig.New("thinker")
8885
if err != nil {
8986
panic(err)
9087
}

examples/worker/worker.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515

1616
"github.com/kshard/chatter"
1717
"github.com/kshard/chatter/aio"
18-
"github.com/kshard/chatter/llm/bedrock"
18+
"github.com/kshard/chatter/llm/autoconfig"
1919
"github.com/kshard/thinker/agent"
2020
"github.com/kshard/thinker/codec"
2121
"github.com/kshard/thinker/command"
@@ -37,11 +37,8 @@ func main() {
3737
registry := command.NewRegistry()
3838
registry.Register(command.Bash("MacOS", "/tmp/script"))
3939

40-
// create instance of LLM client
41-
llm, err := bedrock.New(
42-
bedrock.WithLLM(bedrock.LLAMA3_1_70B_INSTRUCT),
43-
bedrock.WithRegion("us-west-2"),
44-
)
40+
// create instance of LLM API, see doc/HOWTO.md for details
41+
llm, err := autoconfig.New("thinker")
4542
if err != nil {
4643
panic(err)
4744
}

0 commit comments

Comments
 (0)