Skip to content

Commit

Permalink
✨ Update to use new split layers
Browse files Browse the repository at this point in the history
  • Loading branch information
wesen committed Feb 14, 2025
1 parent 2dc9767 commit 034c53d
Show file tree
Hide file tree
Showing 7 changed files with 120 additions and 17 deletions.
11 changes: 6 additions & 5 deletions cmd/escuse-me/cmds/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ package cmds

import (
"context"
"os"
"os/signal"
"path/filepath"

es_cmds "github.com/go-go-golems/escuse-me/pkg/cmds"
es_layers "github.com/go-go-golems/escuse-me/pkg/cmds/layers"
"github.com/go-go-golems/glazed/pkg/cmds"
Expand All @@ -17,9 +21,6 @@ import (
"github.com/go-go-golems/parka/pkg/server"
"github.com/pkg/errors"
"golang.org/x/sync/errgroup"
"os"
"os/signal"
"path/filepath"
)

type ServeCommand struct {
Expand Down Expand Up @@ -147,7 +148,7 @@ func (s *ServeCommand) runWithConfigFile(
commandDirHandlerOptions,
command_dir.WithGenericCommandHandlerOptions(
generic_command.WithParameterFilterOptions(
config.WithLayerDefaults(
config.WithMergeOverrideLayer(
esConnectionLayer.Layer.GetSlug(),
esConnectionLayer.Parameters.ToMap(),
),
Expand Down Expand Up @@ -254,7 +255,7 @@ func (s *ServeCommand) Run(
command_dir.WithGenericCommandHandlerOptions(
generic_command.WithTemplateLookup(datatables.NewDataTablesLookupTemplate()),
generic_command.WithParameterFilterOptions(
config.WithLayerDefaults(
config.WithMergeOverrideLayer(
esClientLayer.Layer.GetSlug(),
esClientLayer.Parameters.ToMap(),
),
Expand Down
2 changes: 2 additions & 0 deletions cmd/escuse-me/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@ func initAllCommands(helpSystem *help.HelpSystem) error {
repositories_,
cli.WithCobraMiddlewaresFunc(es_cmds.GetCobraCommandEscuseMeMiddlewares),
cli.WithCobraShortHelpLayers(glazed_layers.DefaultSlug, layers.EsConnectionSlug, layers.ESHelpersSlug),
cli.WithProfileSettingsLayer(),
cli.WithCreateCommandSettingsLayer(),
)
if err != nil {
return err
Expand Down
36 changes: 36 additions & 0 deletions cmd/escuse-me/queries/examples/search-insights.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: "search-insights"
short: "Search through summaries using embeddings and keywords"
long: "Search through the summaries using both semantic similarity via embeddings and keyword/fuzzy matching for better results"

flags:
- name: query
type: string
help: "Search text to find similar content"
required: true
- name: k
type: int
help: "Number of results to return"
default: 5

default-index: local-testing-multi-document-summarization

query:
_source: ["content", "title", "url"]
query:
bool:
should:
- knn:
field: content_vector
query_vector: !Embeddings
text: !Var query
config:
type: "openai"
engine: "text-embedding-3-small"
dimensions: 1536
k: !Var k
num_candidates: 100
- match:
content:
query: !Var query
boost: 4
fuzziness: "AUTO"
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@ flags:
default-index: local-testing-multi-document-summarization

query:
_source: ["content", "title", "url"]
query:
_source: ["content", "title", "url"]
size: !Var k
knn:
field: content_vector
query_vector: !Embeddings
Expand Down
13 changes: 10 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ toolchain go1.23.3
require (
github.com/elastic/go-elasticsearch/v8 v8.17.0
github.com/go-go-golems/clay v0.1.20
github.com/go-go-golems/glazed v0.5.24
github.com/go-go-golems/go-emrichen v0.0.3
github.com/go-go-golems/parka v0.5.15
github.com/go-go-golems/geppetto v0.4.34
github.com/go-go-golems/glazed v0.5.26
github.com/go-go-golems/go-emrichen v0.0.4
github.com/go-go-golems/parka v0.5.17
github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.33.0
github.com/spf13/cobra v1.8.1
Expand All @@ -24,6 +25,7 @@ require (
github.com/Masterminds/goutils v1.1.1 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/sprig v2.22.0+incompatible // indirect
github.com/ThreeDotsLabs/watermill v1.3.7 // indirect
github.com/adrg/frontmatter v0.2.0 // indirect
github.com/alecthomas/chroma/v2 v2.14.0 // indirect
github.com/araddon/dateparse v0.0.0-20210429162001-6b43995a97de // indirect
Expand All @@ -47,6 +49,7 @@ require (
github.com/bahlo/generic-list-go v0.2.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/charmbracelet/glamour v0.7.0 // indirect
github.com/dlclark/regexp2 v1.11.4 // indirect
github.com/elastic/elastic-transport-go/v8 v8.6.0 // indirect
Expand All @@ -59,9 +62,11 @@ require (
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/huandu/go-clone v1.7.2 // indirect
github.com/huandu/xstrings v1.5.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/invopop/jsonschema v0.12.0 // indirect
github.com/itchyny/gojq v0.12.12 // indirect
github.com/itchyny/timefmt-go v0.1.5 // indirect
github.com/jedib0t/go-pretty v4.3.0+incompatible // indirect
Expand All @@ -70,6 +75,7 @@ require (
github.com/kucherenkovova/safegroup v1.0.2 // indirect
github.com/labstack/echo/v4 v4.12.0 // indirect
github.com/labstack/gommon v0.4.2 // indirect
github.com/lithammer/shortuuid/v3 v3.0.7 // indirect
github.com/lucasb-eyer/go-colorful v1.2.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
Expand All @@ -91,6 +97,7 @@ require (
github.com/rivo/uniseg v0.4.7 // indirect
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sashabaranov/go-openai v1.36.0 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.11.0 // indirect
github.com/spf13/cast v1.7.0 // indirect
Expand Down
33 changes: 27 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
github.com/Masterminds/sprig v2.22.0+incompatible h1:z4yfnGrZ7netVz+0EDJ0Wi+5VZCSYp4Z0m2dk6cEM60=
github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o=
github.com/ThreeDotsLabs/watermill v1.3.7 h1:NV0PSTmuACVEOV4dMxRnmGXrmbz8U83LENOvpHekN7o=
github.com/ThreeDotsLabs/watermill v1.3.7/go.mod h1:lBnrLbxOjeMRgcJbv+UiZr8Ylz8RkJ4m6i/VN/Nk+to=
github.com/adrg/frontmatter v0.2.0 h1:/DgnNe82o03riBd1S+ZDjd43wAmC6W35q67NHeLkPd4=
github.com/adrg/frontmatter v0.2.0/go.mod h1:93rQCj3z3ZlwyxxpQioRKC1wDLto4aXHrbqIsnH9wmE=
github.com/alecthomas/assert/v2 v2.7.0 h1:QtqSACNS3tF7oasA8CU6A6sXZSBDqnm7RfpLl9bZqbE=
Expand Down Expand Up @@ -59,6 +61,8 @@ github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwN
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/charmbracelet/glamour v0.7.0 h1:2BtKGZ4iVJCDfMF229EzbeR1QRKLWztO9dMtjmqZSng=
github.com/charmbracelet/glamour v0.7.0/go.mod h1:jUMh5MeihljJPQbJ/wf4ldw2+yBP59+ctV36jASy7ps=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
Expand All @@ -81,12 +85,14 @@ github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nos
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-go-golems/clay v0.1.20 h1:KUTbDBA/Q7vgG22B9uBnwDpacwG2+bMavQS8SDwolks=
github.com/go-go-golems/clay v0.1.20/go.mod h1:hyQirWoEICmaSTcAiPRy7If1n5JEncPi4WVM6tivjoY=
github.com/go-go-golems/glazed v0.5.24 h1:0jMavScvwdh7MIhoTOZ2hLNjVX06bPirjWS8o6YfzQo=
github.com/go-go-golems/glazed v0.5.24/go.mod h1:px67s8RtyjXsKGuSBWJt6HNny53e2tP9Ew6rRcZHe8k=
github.com/go-go-golems/go-emrichen v0.0.3 h1:Tnk6L6IgRFPM/e2Gwnbful6eiWyu28Jksi25eLg9M4w=
github.com/go-go-golems/go-emrichen v0.0.3/go.mod h1:yYf0DLUYLLZdvCODdpIBYUxgNz0ZomJFlGhhzlg+fs0=
github.com/go-go-golems/parka v0.5.15 h1:14yTJsNXtMw86dOUrZDU7YMEuKjZlvBgOP/V7bCjjFA=
github.com/go-go-golems/parka v0.5.15/go.mod h1:tYskoVDbjNZ6hNqI2wrbFy2AFShrzkCiTwAZ4+nBPj4=
github.com/go-go-golems/geppetto v0.4.34 h1:kVQqVqrXPPa+4tRPqAxTbvOAomM9XKd255nuUdBFCfE=
github.com/go-go-golems/geppetto v0.4.34/go.mod h1:HGEsHKvH8HKH89CLWIcueYm46bue7LdFTtsFos3Uzyo=
github.com/go-go-golems/glazed v0.5.26 h1:/Y+Sq6An0IyRVRG1shjV+FZmcOplJ6NvzbQ1edYw3QU=
github.com/go-go-golems/glazed v0.5.26/go.mod h1:/ZgeDXELDOcAkD505fijARmbF6x5Ev7oewNV4V6Andk=
github.com/go-go-golems/go-emrichen v0.0.4 h1:U8AKGaxBDjMghiZZe/7sRYiw3UPqRkkbAAc/d2Q9rK4=
github.com/go-go-golems/go-emrichen v0.0.4/go.mod h1:yYf0DLUYLLZdvCODdpIBYUxgNz0ZomJFlGhhzlg+fs0=
github.com/go-go-golems/parka v0.5.17 h1:XIyqLFmMwd253+J+jdOTV1F5H8xjVChe6+4UvjDN4SM=
github.com/go-go-golems/parka v0.5.17/go.mod h1:gjUXXumO+yrysFQhbzuwKo+l2u5+eJoo51DRHFjlDoU=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
Expand All @@ -101,20 +107,31 @@ github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keL
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c=
github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U=
github.com/huandu/go-clone v1.7.2 h1:3+Aq0Ed8XK+zKkLjE2dfHg0XrpIfcohBE1K+c8Usxoo=
github.com/huandu/go-clone v1.7.2/go.mod h1:ReGivhG6op3GYr+UY3lS6mxjKp7MIGTknuU5TbTVaXE=
github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI=
github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/invopop/jsonschema v0.12.0 h1:6ovsNSuvn9wEQVOyc72aycBMVQFKz7cPdMJn10CvzRI=
github.com/invopop/jsonschema v0.12.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/itchyny/gojq v0.12.12 h1:x+xGI9BXqKoJQZkr95ibpe3cdrTbY8D9lonrK433rcA=
github.com/itchyny/gojq v0.12.12/go.mod h1:j+3sVkjxwd7A7Z5jrbKibgOLn0ZfLWkV+Awxr/pyzJE=
github.com/itchyny/timefmt-go v0.1.5 h1:G0INE2la8S6ru/ZI5JecgyzbbJNs5lG1RcBqa7Jm6GE=
Expand All @@ -138,6 +155,8 @@ github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+k
github.com/labstack/echo/v4 v4.12.0/go.mod h1:UP9Cr2DJXbOK3Kr9ONYzNowSh7HP0aG0ShAyycHSJvM=
github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0=
github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU=
github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJVuvyJQQ8=
github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts=
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
Expand Down Expand Up @@ -199,6 +218,8 @@ github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6ke
github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sashabaranov/go-openai v1.36.0 h1:fcSrn8uGuorzPWCBp8L0aCR95Zjb/Dd+ZSML0YZy9EI=
github.com/sashabaranov/go-openai v1.36.0/go.mod h1:lj5b/K+zjTSFxVLijLSTDZuP7adOgerWeFyZLUhAKRg=
github.com/scylladb/termtables v0.0.0-20191203121021-c4c0b6d42ff4/go.mod h1:C1a7PQSMz9NShzorzCiG2fk9+xuCgLkPeCvMHYR2OWg=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
Expand Down
39 changes: 38 additions & 1 deletion pkg/cmds/cobra.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package cmds

import (
"fmt"
"os"

"github.com/go-go-golems/escuse-me/pkg/cmds/layers"
"github.com/go-go-golems/geppetto/pkg/embeddings"
"github.com/go-go-golems/glazed/pkg/cli"
Expand All @@ -24,10 +27,22 @@ func BuildCobraCommandWithEscuseMeMiddlewares(
}

func GetCobraCommandEscuseMeMiddlewares(
commandSettings *cli.GlazedCommandSettings,
parsedCommandLayers *layers2.ParsedLayers,
cmd *cobra.Command,
args []string,
) ([]middlewares.Middleware, error) {
commandSettings := &cli.CommandSettings{}
err := parsedCommandLayers.InitializeStruct(cli.CommandSettingsSlug, commandSettings)
if err != nil {
return nil, err
}

profileSettings := &cli.ProfileSettings{}
err = parsedCommandLayers.InitializeStruct(cli.ProfileSettingsSlug, profileSettings)
if err != nil {
return nil, err
}

middlewares_ := []middlewares.Middleware{
middlewares.ParseFromCobraCommand(cmd,
parameters.WithParseStepSource("cobra"),
Expand All @@ -42,6 +57,28 @@ func GetCobraCommandEscuseMeMiddlewares(
middlewares.LoadParametersFromFile(commandSettings.LoadParametersFromFile))
}

xdgConfigPath, err := os.UserConfigDir()
if err != nil {
return nil, err
}

defaultProfileFile := fmt.Sprintf("%s/escuse-me/profiles.yaml", xdgConfigPath)
if profileSettings.ProfileFile == "" {
profileSettings.ProfileFile = defaultProfileFile
}
if profileSettings.Profile == "" {
profileSettings.Profile = "default"
}

middlewares_ = append(middlewares_,
middlewares.GatherFlagsFromProfiles(
defaultProfileFile,
profileSettings.ProfileFile,
profileSettings.Profile,
parameters.WithParseStepSource("profiles"),
),
)

middlewares_ = append(middlewares_,
middlewares.WrapWithWhitelistedLayers(
[]string{
Expand Down

0 comments on commit 034c53d

Please sign in to comment.