Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GO-4239: Writing Tools #1711

Draft
wants to merge 28 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6422656
GO-4239 Add Writing Tools RPC
jmetrikat Oct 16, 2024
780887a
GO-4239 Refactor Writing Tools
jmetrikat Oct 17, 2024
fe86461
GO-4239 map errors, check input language
jmetrikat Oct 19, 2024
38e99c4
GO-4239 refactor model response parsing
jmetrikat Oct 22, 2024
d234500
GO-4239 Merge branch 'main' into go-4239-writing-tools
jmetrikat Oct 24, 2024
458f30a
GO-4239 Updates proto enums and prompt config
jmetrikat Oct 31, 2024
182a6e0
GO-4239 Fix lint
jmetrikat Oct 31, 2024
2c18456
GO-4239 Fix lint
jmetrikat Oct 31, 2024
51f1a51
GO-4239 Parse json response and adjust prompts
jmetrikat Oct 31, 2024
85c2fcf
GO-4239 Merge branch 'main' into go-4239-writing-tools
jmetrikat Oct 31, 2024
99fa79a
GO-4239 Reorder mode options
jmetrikat Oct 31, 2024
1f16679
GO-4239 Increase timeout
jmetrikat Nov 2, 2024
3893347
GO-4239 Add logs
jmetrikat Nov 6, 2024
3469730
GO-4239 Merge branch 'main' into go-4239-writing-tools
jmetrikat Nov 6, 2024
716f8a0
GO-4239 Minor fixes
jmetrikat Nov 6, 2024
b0f2ca0
GO-4239 Add first tests
jmetrikat Nov 6, 2024
28c501b
GO-4239 Merge branch 'main' into go-4239-writing-tools
jmetrikat Nov 12, 2024
83aef39
GO-4459 Enhance bullet point and table formatting
jmetrikat Nov 12, 2024
dd16768
GO-4239 Refactor AIService and Chat processing
jmetrikat Nov 16, 2024
2ea2d0b
GO-4239 Increase test coverage
jmetrikat Nov 16, 2024
f1dc5aa
GO-4239 Add support for LM Studio and structured outputs
jmetrikat Nov 17, 2024
1e7dcc0
GO-4239 Merge branch 'main' into go-4239-writing-tools
jmetrikat Dec 14, 2024
34c15d9
GO-4239 Add support for Ollama structured outputs
jmetrikat Dec 14, 2024
28c6782
GO-4239 Refactor tests by splitting providers
jmetrikat Dec 14, 2024
937e782
GO-4239 Modularize tests
jmetrikat Dec 14, 2024
a26d64d
GO-4239 Add support for llama.cpp provider
jmetrikat Dec 15, 2024
8800903
GO-4239 Add mocked tests for chat.go
jmetrikat Dec 15, 2024
13b67ae
GO-4239 Refactor chat_test.go
jmetrikat Dec 15, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .mockery.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -222,3 +222,6 @@ packages:
github.com/anyproto/anytype-heart/core/kanban:
interfaces:
Service:
github.com/anyproto/anytype-heart/util/ai:
interfaces:
HttpClient:
692 changes: 366 additions & 326 deletions clientlibrary/service/service.pb.go

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion core/anytype/bootstrap.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ import (
"github.com/anyproto/anytype-heart/space/spacecore/typeprovider"
"github.com/anyproto/anytype-heart/space/spacefactory"
"github.com/anyproto/anytype-heart/space/virtualspaceservice"
"github.com/anyproto/anytype-heart/util/ai"
"github.com/anyproto/anytype-heart/util/builtinobjects"
"github.com/anyproto/anytype-heart/util/builtintemplate"
"github.com/anyproto/anytype-heart/util/linkpreview"
Expand Down Expand Up @@ -318,7 +319,8 @@ func Bootstrap(a *app.App, components ...app.Component) {
Register(paymentscache.New()).
Register(peerstatus.New()).
Register(lastused.New()).
Register(spaceview.New())
Register(spaceview.New()).
Register(ai.New())
}

func MiddlewareVersion() string {
Expand Down
27 changes: 27 additions & 0 deletions core/external.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/anyproto/anytype-heart/core/gallery"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/ai"
"github.com/anyproto/anytype-heart/util/unsplash"
)

Expand Down Expand Up @@ -93,6 +94,32 @@ func (mw *Middleware) UnsplashDownload(cctx context.Context, req *pb.RpcUnsplash
return response(objectId, err)
}

func (mw *Middleware) AIWritingTools(_ context.Context, req *pb.RpcAIWritingToolsRequest) *pb.RpcAIWritingToolsResponse {
response := func(resp string, err error) *pb.RpcAIWritingToolsResponse {
m := &pb.RpcAIWritingToolsResponse{
Error: &pb.RpcAIWritingToolsResponseError{Code: pb.RpcAIWritingToolsResponseError_NULL},
Text: resp,
}
if err != nil {
m.Error.Code = mapErrorCode(err,
errToCode(ai.ErrUnsupportedLanguage, pb.RpcAIWritingToolsResponseError_LANGUAGE_NOT_SUPPORTED),
errToCode(ai.ErrEndpointNotReachable, pb.RpcAIWritingToolsResponseError_ENDPOINT_NOT_REACHABLE),
errToCode(ai.ErrModelNotFound, pb.RpcAIWritingToolsResponseError_MODEL_NOT_FOUND),
errToCode(ai.ErrAuthRequired, pb.RpcAIWritingToolsResponseError_AUTH_REQUIRED))
m.Error.Description = getErrorDescription(err)
}
return m
}

aiService := mw.applicationService.GetApp().Component(ai.CName).(ai.AI)
if aiService == nil {
return response("", fmt.Errorf("node not started"))
}

result, err := aiService.WritingTools(context.TODO(), req)
return response(result.Answer, err)
}

func (mw *Middleware) GalleryDownloadManifest(_ context.Context, req *pb.RpcGalleryDownloadManifestRequest) *pb.RpcGalleryDownloadManifestResponse {
response := func(info *model.ManifestInfo, err error) *pb.RpcGalleryDownloadManifestResponse {
m := &pb.RpcGalleryDownloadManifestResponse{
Expand Down
157 changes: 157 additions & 0 deletions docs/proto.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,11 @@
- [pb/protos/commands.proto](#pb_protos_commands-proto)
- [Empty](#anytype-Empty)
- [Rpc](#anytype-Rpc)
- [Rpc.AI](#anytype-Rpc-AI)
- [Rpc.AI.WritingTools](#anytype-Rpc-AI-WritingTools)
- [Rpc.AI.WritingTools.Request](#anytype-Rpc-AI-WritingTools-Request)
- [Rpc.AI.WritingTools.Response](#anytype-Rpc-AI-WritingTools-Response)
- [Rpc.AI.WritingTools.Response.Error](#anytype-Rpc-AI-WritingTools-Response-Error)
- [Rpc.Account](#anytype-Rpc-Account)
- [Rpc.Account.ChangeNetworkConfigAndRestart](#anytype-Rpc-Account-ChangeNetworkConfigAndRestart)
- [Rpc.Account.ChangeNetworkConfigAndRestart.Request](#anytype-Rpc-Account-ChangeNetworkConfigAndRestart-Request)
Expand Down Expand Up @@ -1252,6 +1257,10 @@
- [Rpc.Workspace.SetInfo.Response.Error](#anytype-Rpc-Workspace-SetInfo-Response-Error)
- [StreamRequest](#anytype-StreamRequest)

- [Rpc.AI.WritingTools.Request.Language](#anytype-Rpc-AI-WritingTools-Request-Language)
- [Rpc.AI.WritingTools.Request.Mode](#anytype-Rpc-AI-WritingTools-Request-Mode)
- [Rpc.AI.WritingTools.Request.Provider](#anytype-Rpc-AI-WritingTools-Request-Provider)
- [Rpc.AI.WritingTools.Response.Error.Code](#anytype-Rpc-AI-WritingTools-Response-Error-Code)
- [Rpc.Account.ChangeNetworkConfigAndRestart.Response.Error.Code](#anytype-Rpc-Account-ChangeNetworkConfigAndRestart-Response-Error-Code)
- [Rpc.Account.ConfigUpdate.Response.Error.Code](#anytype-Rpc-Account-ConfigUpdate-Response-Error-Code)
- [Rpc.Account.ConfigUpdate.Timezones](#anytype-Rpc-Account-ConfigUpdate-Timezones)
Expand Down Expand Up @@ -2233,6 +2242,7 @@
| ChatSubscribeLastMessages | [Rpc.Chat.SubscribeLastMessages.Request](#anytype-Rpc-Chat-SubscribeLastMessages-Request) | [Rpc.Chat.SubscribeLastMessages.Response](#anytype-Rpc-Chat-SubscribeLastMessages-Response) | |
| ChatUnsubscribe | [Rpc.Chat.Unsubscribe.Request](#anytype-Rpc-Chat-Unsubscribe-Request) | [Rpc.Chat.Unsubscribe.Response](#anytype-Rpc-Chat-Unsubscribe-Response) | |
| ObjectChatAdd | [Rpc.Object.ChatAdd.Request](#anytype-Rpc-Object-ChatAdd-Request) | [Rpc.Object.ChatAdd.Response](#anytype-Rpc-Object-ChatAdd-Response) | |
| AIWritingTools | [Rpc.AI.WritingTools.Request](#anytype-Rpc-AI-WritingTools-Request) | [Rpc.AI.WritingTools.Response](#anytype-Rpc-AI-WritingTools-Response) | AI |



Expand Down Expand Up @@ -2896,6 +2906,80 @@ Response – message from a middleware.



<a name="anytype-Rpc-AI"></a>

### Rpc.AI







<a name="anytype-Rpc-AI-WritingTools"></a>

### Rpc.AI.WritingTools







<a name="anytype-Rpc-AI-WritingTools-Request"></a>

### Rpc.AI.WritingTools.Request



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| mode | [Rpc.AI.WritingTools.Request.Mode](#anytype-Rpc-AI-WritingTools-Request-Mode) | | |
| language | [Rpc.AI.WritingTools.Request.Language](#anytype-Rpc-AI-WritingTools-Request-Language) | | |
| provider | [Rpc.AI.WritingTools.Request.Provider](#anytype-Rpc-AI-WritingTools-Request-Provider) | | |
| endpoint | [string](#string) | | |
| model | [string](#string) | | |
| token | [string](#string) | | |
| temperature | [float](#float) | | |
| text | [string](#string) | | |






<a name="anytype-Rpc-AI-WritingTools-Response"></a>

### Rpc.AI.WritingTools.Response



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| error | [Rpc.AI.WritingTools.Response.Error](#anytype-Rpc-AI-WritingTools-Response-Error) | | |
| text | [string](#string) | | |






<a name="anytype-Rpc-AI-WritingTools-Response-Error"></a>

### Rpc.AI.WritingTools.Response.Error



| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| code | [Rpc.AI.WritingTools.Response.Error.Code](#anytype-Rpc-AI-WritingTools-Response-Error-Code) | | |
| description | [string](#string) | | |






<a name="anytype-Rpc-Account"></a>

### Rpc.Account
Expand Down Expand Up @@ -20331,6 +20415,79 @@ Middleware-to-front-end response, that can contain a NULL error or a non-NULL er



<a name="anytype-Rpc-AI-WritingTools-Request-Language"></a>

### Rpc.AI.WritingTools.Request.Language


| Name | Number | Description |
| ---- | ------ | ----------- |
| EN | 0 | |
| ES | 1 | |
| FR | 2 | |
| DE | 3 | |
| IT | 4 | |
| PT | 5 | |
| HI | 6 | |
| TH | 7 | ... |



<a name="anytype-Rpc-AI-WritingTools-Request-Mode"></a>

### Rpc.AI.WritingTools.Request.Mode


| Name | Number | Description |
| ---- | ------ | ----------- |
| DEFAULT | 0 | |
| SUMMARIZE | 1 | |
| GRAMMAR | 2 | |
| SHORTEN | 3 | |
| EXPAND | 4 | |
| BULLET | 5 | |
| TABLE | 6 | |
| CASUAL | 7 | |
| FUNNY | 8 | |
| CONFIDENT | 9 | |
| STRAIGHTFORWARD | 10 | |
| PROFESSIONAL | 11 | |
| TRANSLATE | 12 | ... |



<a name="anytype-Rpc-AI-WritingTools-Request-Provider"></a>

### Rpc.AI.WritingTools.Request.Provider


| Name | Number | Description |
| ---- | ------ | ----------- |
| OLLAMA | 0 | |
| OPENAI | 1 | |
| LMSTUDIO | 2 | |
| LLAMACPP | 3 | ... |



<a name="anytype-Rpc-AI-WritingTools-Response-Error-Code"></a>

### Rpc.AI.WritingTools.Response.Error.Code


| Name | Number | Description |
| ---- | ------ | ----------- |
| NULL | 0 | |
| UNKNOWN_ERROR | 1 | |
| BAD_INPUT | 2 | |
| RATE_LIMIT_EXCEEDED | 100 | |
| LANGUAGE_NOT_SUPPORTED | 101 | |
| ENDPOINT_NOT_REACHABLE | 102 | |
| MODEL_NOT_FOUND | 103 | |
| AUTH_REQUIRED | 104 | ... |



<a name="anytype-Rpc-Account-ChangeNetworkConfigAndRestart-Response-Error-Code"></a>

### Rpc.Account.ChangeNetworkConfigAndRestart.Response.Error.Code
Expand Down
12 changes: 12 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ require (
github.com/dsoprea/go-exif/v3 v3.0.1
github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20221012074422-4f3f7e934102
github.com/ethereum/go-ethereum v1.13.15
github.com/gin-gonic/gin v1.6.3
github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8
github.com/go-chi/chi/v5 v5.1.0
github.com/go-shiori/go-readability v0.0.0-20241012063810-92284fa8a71f
Expand Down Expand Up @@ -79,6 +80,7 @@ require (
github.com/opentracing/opentracing-go v1.2.0
github.com/otiai10/copy v1.14.0
github.com/otiai10/opengraph/v2 v2.1.0
github.com/pemistahl/lingua-go v1.4.0
github.com/pkg/errors v0.9.1
github.com/prometheus/client_golang v1.20.5
github.com/pseudomuto/protoc-gen-doc v1.5.1
Expand Down Expand Up @@ -149,10 +151,14 @@ require (
github.com/flopp/go-findfont v0.1.0 // indirect
github.com/fogleman/gg v1.3.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-errors/errors v1.4.2 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.2.0 // indirect
github.com/go-shiori/dom v0.0.0-20230515143342-73569d674e1c // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b // indirect
Expand Down Expand Up @@ -188,7 +194,9 @@ require (
github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect
github.com/jbenet/goprocess v0.1.4 // indirect
github.com/jinzhu/copier v0.3.5 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
Expand All @@ -199,6 +207,8 @@ require (
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/multiformats/go-base36 v0.2.0 // indirect
github.com/multiformats/go-multiaddr v0.13.0 // indirect
github.com/multiformats/go-multicodec v0.9.0 // indirect
Expand All @@ -223,6 +233,7 @@ require (
github.com/rs/cors v1.11.0 // indirect
github.com/rs/zerolog v1.29.0 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/afero v1.10.0 // indirect
github.com/spf13/cast v1.5.0 // indirect
Expand All @@ -237,6 +248,7 @@ require (
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/tyler-smith/go-bip39 v1.1.0 // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
github.com/whyrusleeping/chunker v0.0.0-20181014151217-fe64bd25879f // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
Expand Down
6 changes: 5 additions & 1 deletion go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,7 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE=
github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78=
github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
Expand Down Expand Up @@ -785,6 +786,8 @@ github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FI
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
github.com/pemistahl/lingua-go v1.4.0 h1:ifYhthrlW7iO4icdubwlduYnmwU37V1sbNrwhKBR4rM=
github.com/pemistahl/lingua-go v1.4.0/go.mod h1:ECuM1Hp/3hvyh7k8aWSqNCPlTxLemFZsRjocUf3KgME=
github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac=
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw=
github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
Expand Down Expand Up @@ -913,6 +916,8 @@ github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
Expand Down Expand Up @@ -986,7 +991,6 @@ github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaO
github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
Expand Down
Loading
Loading