Skip to content

Commit 4d112e2

Browse files
authored
fix(go): fixes concurrency issue in Dotprompt instance usage (#3713)
1 parent 5962eb8 commit 4d112e2

File tree

5 files changed

+20
-14
lines changed

5 files changed

+20
-14
lines changed

go/ai/prompt.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -296,16 +296,18 @@ func (p *prompt) buildRequest(ctx context.Context, input any) (*GenerateActionOp
296296
return nil, err
297297
}
298298

299+
dp := p.registry.Dotprompt()
300+
299301
messages := []*Message{}
300-
messages, err = renderSystemPrompt(ctx, p.promptOptions, messages, m, input, p.registry.Dotprompt())
302+
messages, err = renderSystemPrompt(ctx, p.promptOptions, messages, m, input, dp)
301303
if err != nil {
302304
return nil, err
303305
}
304-
messages, err = renderMessages(ctx, p.promptOptions, messages, m, input, p.registry.Dotprompt())
306+
messages, err = renderMessages(ctx, p.promptOptions, messages, m, input, dp)
305307
if err != nil {
306308
return nil, err
307309
}
308-
messages, err = renderUserPrompt(ctx, p.promptOptions, messages, m, input, p.registry.Dotprompt())
310+
messages, err = renderUserPrompt(ctx, p.promptOptions, messages, m, input, dp)
309311
if err != nil {
310312
return nil, err
311313
}
@@ -547,13 +549,15 @@ func LoadPrompt(r api.Registry, dir, filename, namespace string) Prompt {
547549
return nil
548550
}
549551

550-
parsedPrompt, err := r.Dotprompt().Parse(string(source))
552+
dp := r.Dotprompt()
553+
554+
parsedPrompt, err := dp.Parse(string(source))
551555
if err != nil {
552556
slog.Error("Failed to parse file as dotprompt", "file", sourceFile, "error", err)
553557
return nil
554558
}
555559

556-
metadata, err := r.Dotprompt().RenderMetadata(string(source), &parsedPrompt.PromptMetadata)
560+
metadata, err := dp.RenderMetadata(string(source), &parsedPrompt.PromptMetadata)
557561
if err != nil {
558562
slog.Error("Failed to render dotprompt metadata", "file", sourceFile, "error", err)
559563
return nil

go/core/api/registry.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,6 @@ type Registry interface {
8181
// RegisterHelper adds a helper function to the dotprompt instance
8282
RegisterHelper(name string, fn any)
8383

84-
// Dotprompt returns the dotprompt instance.
84+
// Dotprompt returns a clone of the Dotprompt instance.
8585
Dotprompt() *dotprompt.Dotprompt
8686
}

go/go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ retract (
99

1010
require (
1111
cloud.google.com/go/alloydbconn v1.15.3
12-
cloud.google.com/go/bigquery v1.67.0
1312
cloud.google.com/go/auth v0.16.2
13+
cloud.google.com/go/bigquery v1.67.0
1414
cloud.google.com/go/cloudsqlconn v1.17.2
1515
cloud.google.com/go/firestore v1.18.0
1616
cloud.google.com/go/logging v1.13.0
@@ -20,7 +20,7 @@ require (
2020
github.com/anthropics/anthropic-sdk-go v1.9.1
2121
github.com/blues/jsonata-go v1.5.4
2222
github.com/goccy/go-yaml v1.17.1
23-
github.com/google/dotprompt/go v0.0.0-20250923103342-a8a91d1dff59
23+
github.com/google/dotprompt/go v0.0.0-20251014011017-8d056e027254
2424
github.com/google/go-cmp v0.7.0
2525
github.com/google/uuid v1.6.0
2626
github.com/invopop/jsonschema v0.13.0

go/go.sum

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,10 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
5656
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
5757
github.com/anthropics/anthropic-sdk-go v1.4.0 h1:fU1jKxYbQdQDiEXCxeW5XZRIOwKevn/PMg8Ay1nnUx0=
5858
github.com/anthropics/anthropic-sdk-go v1.4.0/go.mod h1:AapDW22irxK2PSumZiQXYUFvsdQgkwIWlpESweWZI/c=
59-
github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE=
60-
github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
6159
github.com/anthropics/anthropic-sdk-go v1.9.1 h1:raRhZKmayVSVZtLpLDd6IsMXvxLeeSU03/2IBTerWlg=
6260
github.com/anthropics/anthropic-sdk-go v1.9.1/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE=
61+
github.com/apache/arrow/go/v15 v15.0.2 h1:60IliRbiyTWCWjERBCkO1W4Qun9svcYoZrSLcyOsMLE=
62+
github.com/apache/arrow/go/v15 v15.0.2/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
6363
github.com/asaskevich/govalidator v0.0.0-20200907205600-7a23bdc65eef/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
6464
github.com/asaskevich/govalidator v0.0.0-20210307081110-f21760c49a8d/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw=
6565
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so=
@@ -205,14 +205,16 @@ github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6
205205
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
206206
github.com/google/dotprompt/go v0.0.0-20250611200215-bb73406b05ca h1:LuQ8KS5N04c37jyaq6jelLdNi0GfI6QJb8lpnYaDW9Y=
207207
github.com/google/dotprompt/go v0.0.0-20250611200215-bb73406b05ca/go.mod h1:dnIk+MSMnipm9uZyPIgptq7I39aDxyjBiaev/OG0W0Y=
208-
github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
209-
github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
210208
github.com/google/dotprompt/go v0.0.0-20250922193017-eeb62744224e h1:AK/O+vHflqzTehlcUBV6pkwZHCWIc8PrpA6xiiRo9d0=
211209
github.com/google/dotprompt/go v0.0.0-20250922193017-eeb62744224e/go.mod h1:k8cjJAQWc//ac/bMnzItyOFbfT01tgRTZGgxELCuxEQ=
212210
github.com/google/dotprompt/go v0.0.0-20250922225138-cb24085a67ed h1:xPu5zXopXdj48LXZqU6DosoL0oT7nbddgTMkjWoyHqQ=
213211
github.com/google/dotprompt/go v0.0.0-20250922225138-cb24085a67ed/go.mod h1:k8cjJAQWc//ac/bMnzItyOFbfT01tgRTZGgxELCuxEQ=
214212
github.com/google/dotprompt/go v0.0.0-20250923103342-a8a91d1dff59 h1:EywQhHXdzYlMKD7Gxl9Ho34c8dQ0meph6FuRN9iENEY=
215213
github.com/google/dotprompt/go v0.0.0-20250923103342-a8a91d1dff59/go.mod h1:k8cjJAQWc//ac/bMnzItyOFbfT01tgRTZGgxELCuxEQ=
214+
github.com/google/dotprompt/go v0.0.0-20251014011017-8d056e027254 h1:okN800+zMJOGHLJCgry+OGzhhtH6YrjQh1rluHmOacE=
215+
github.com/google/dotprompt/go v0.0.0-20251014011017-8d056e027254/go.mod h1:k8cjJAQWc//ac/bMnzItyOFbfT01tgRTZGgxELCuxEQ=
216+
github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
217+
github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
216218
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
217219
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
218220
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=

go/internal/registry/registry.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,9 @@ func (r *Registry) RegisterHelper(name string, fn any) {
312312
r.dotprompt.Helpers[name] = fn
313313
}
314314

315-
// Dotprompt returns the dotprompt instance.
315+
// Dotprompt returns a clone of the Dotprompt instance.
316316
func (r *Registry) Dotprompt() *dotprompt.Dotprompt {
317317
r.mu.RLock()
318318
defer r.mu.RUnlock()
319-
return r.dotprompt
319+
return r.dotprompt.Clone()
320320
}

0 commit comments

Comments
 (0)