Skip to content

Commit 072eed7

Browse files
committed
add TestChatItem
1 parent b0a0818 commit 072eed7

File tree

4 files changed

+81
-22
lines changed

4 files changed

+81
-22
lines changed

go.mod

+6-4
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ require (
3535
github.com/madflojo/testcerts v1.3.0
3636
github.com/mailru/go-clickhouse/v2 v2.0.1-0.20221121001540-b259988ad8e5
3737
github.com/matttproud/golang_protobuf_extensions v1.0.1
38+
github.com/nikolalohinski/gonja/v2 v2.3.3
3839
github.com/orcaman/concurrent-map v1.0.0
3940
github.com/pkg/errors v0.9.1
4041
github.com/prometheus/client_golang v1.13.0
@@ -64,7 +65,7 @@ require (
6465
go.opentelemetry.io/otel/trace v1.31.0
6566
go.uber.org/atomic v1.10.0
6667
go.uber.org/zap v1.24.0
67-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9
68+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56
6869
golang.org/x/oauth2 v0.22.0
6970
google.golang.org/grpc v1.67.1
7071
google.golang.org/grpc/security/advancedtls v1.0.0
@@ -94,7 +95,7 @@ require (
9495
github.com/chewxy/hm v1.0.0 // indirect
9596
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
9697
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
97-
github.com/dustin/go-humanize v1.0.0 // indirect
98+
github.com/dustin/go-humanize v1.0.1 // indirect
9899
github.com/felixge/httpsnoop v1.0.4 // indirect
99100
github.com/fsnotify/fsnotify v1.7.0 // indirect
100101
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
@@ -150,6 +151,7 @@ require (
150151
github.com/sagikazarmark/locafero v0.4.0 // indirect
151152
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
152153
github.com/shopspring/decimal v1.3.1 // indirect
154+
github.com/sirupsen/logrus v1.9.3 // indirect
153155
github.com/sourcegraph/conc v0.3.0 // indirect
154156
github.com/spf13/afero v1.11.0 // indirect
155157
github.com/spf13/cast v1.6.0 // indirect
@@ -165,13 +167,13 @@ require (
165167
go.uber.org/multierr v1.10.0 // indirect
166168
go4.org/unsafe/assume-no-moving-gc v0.0.0-20230525183740-e7c30c78aeb2 // indirect
167169
golang.org/x/crypto v0.31.0 // indirect
168-
golang.org/x/mod v0.17.0 // indirect
170+
golang.org/x/mod v0.20.0 // indirect
169171
golang.org/x/net v0.33.0 // indirect
170172
golang.org/x/sync v0.10.0 // indirect
171173
golang.org/x/sys v0.28.0 // indirect
172174
golang.org/x/term v0.27.0 // indirect
173175
golang.org/x/text v0.21.0 // indirect
174-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
176+
golang.org/x/tools v0.24.0 // indirect
175177
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
176178
gonum.org/v1/gonum v0.11.0 // indirect
177179
google.golang.org/genproto/googleapis/api v0.0.0-20241007155032-5fefd90f89a9 // indirect

go.sum

+24-9
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zum
3535
git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
3636
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
3737
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
38+
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
39+
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
3840
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
3941
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
4042
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
@@ -124,8 +126,9 @@ github.com/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17
124126
github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
125127
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
126128
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
127-
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
128129
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
130+
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
131+
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
129132
github.com/emicklei/go-restful-openapi/v2 v2.9.0 h1:djsWqjhI0EVYfkLCCX6jZxUkLmYUq2q9tt09ZbixfyE=
130133
github.com/emicklei/go-restful-openapi/v2 v2.9.0/go.mod h1:VKNgZyYviM1hnyrjD9RDzP2RuE94xTXxV+u6MGN4v4k=
131134
github.com/emicklei/go-restful/v3 v3.7.3/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
@@ -210,6 +213,8 @@ github.com/go-resty/resty/v2 v2.16.3/go.mod h1:hkJtXbA2iKHzJheXYvQ8snQES5ZLGKMwQ
210213
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
211214
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
212215
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
216+
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
217+
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
213218
github.com/go-viper/mapstructure/v2 v2.2.1 h1:ZAaOCxANMuZx5RCeg0mBdEZk7DZasvvZIxtHqx8aGss=
214219
github.com/go-viper/mapstructure/v2 v2.2.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
215220
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
@@ -286,8 +291,8 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
286291
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
287292
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
288293
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
289-
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
290-
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
294+
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5 h1:5iH8iuqE5apketRbSFBy+X1V0o+l+8NF1avt4HWl7cA=
295+
github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144=
291296
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
292297
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
293298
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -487,6 +492,13 @@ github.com/montanaflynn/stats v0.7.1/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt
487492
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
488493
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
489494
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
495+
github.com/nikolalohinski/gonja/v2 v2.3.3 h1:5cTcmz0i/DwJl67US8Rvnb4OkBXB5V5OWd5IIAPPkXw=
496+
github.com/nikolalohinski/gonja/v2 v2.3.3/go.mod h1:8KC3RlefxnOaY5P4rH5erdwV0/owS83U615cSnDLYFs=
497+
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
498+
github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo=
499+
github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI=
500+
github.com/onsi/gomega v1.35.1 h1:Cwbd75ZBPxFSuZ6T+rN/WCb/gOc6YgFBXLlZLhC7Ds4=
501+
github.com/onsi/gomega v1.35.1/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog=
490502
github.com/openzipkin/zipkin-go v0.4.1 h1:kNd/ST2yLLWhaWrkgchya40TJabe8Hioj9udfPcEO5A=
491503
github.com/openzipkin/zipkin-go v0.4.1/go.mod h1:qY0VqDSN1pOBN94dBc6w2GJlWLiovAyg7Qt6/I9HecM=
492504
github.com/orcaman/concurrent-map v1.0.0 h1:I/2A2XPCb4IuQWcQhBhSwGfiuybl/J0ev9HDbW65HOY=
@@ -583,6 +595,8 @@ github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPx
583595
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
584596
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
585597
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
598+
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
599+
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
586600
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
587601
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
588602
github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
@@ -737,8 +751,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
737751
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
738752
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
739753
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
740-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g=
741-
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
754+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
755+
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
742756
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
743757
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
744758
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
@@ -774,8 +788,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
774788
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
775789
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
776790
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
777-
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
778-
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
791+
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
792+
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
779793
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
780794
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
781795
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -902,6 +916,7 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc
902916
golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
903917
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
904918
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
919+
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
905920
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
906921
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
907922
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
@@ -986,8 +1001,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
9861001
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
9871002
golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
9881003
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
989-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg=
990-
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
1004+
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
1005+
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
9911006
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
9921007
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
9931008
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

master/rest.go

+12-7
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"sort"
2727
"strconv"
2828
"strings"
29-
"text/template"
3029
"time"
3130

3231
"github.com/araddon/dateparse"
@@ -37,6 +36,8 @@ import (
3736
"github.com/gorilla/securecookie"
3837
_ "github.com/gorse-io/dashboard"
3938
"github.com/juju/errors"
39+
"github.com/nikolalohinski/gonja/v2"
40+
"github.com/nikolalohinski/gonja/v2/exec"
4041
"github.com/rakyll/statik/fs"
4142
"github.com/samber/lo"
4243
"github.com/sashabaranov/go-openai"
@@ -1635,10 +1636,12 @@ func (m *Master) handleOAuth2Callback(w http.ResponseWriter, r *http.Request) {
16351636
}
16361637

16371638
func (m *Master) chat(response http.ResponseWriter, request *http.Request) {
1638-
clientConfig := openai.DefaultConfig(m.Config.OpenAI.AuthToken)
1639-
clientConfig.BaseURL = m.Config.OpenAI.BaseURL
1639+
if !m.checkAdmin(request) {
1640+
writeError(response, http.StatusUnauthorized, "unauthorized")
1641+
return
1642+
}
1643+
16401644
var (
1641-
client = openai.NewClientWithConfig(clientConfig)
16421645
itemId = request.URL.Query().Get("item_id")
16431646
userId = request.URL.Query().Get("user_id")
16441647
)
@@ -1649,7 +1652,7 @@ func (m *Master) chat(response http.ResponseWriter, request *http.Request) {
16491652
writeError(response, http.StatusInternalServerError, err.Error())
16501653
return
16511654
}
1652-
prompt, err := template.New("").Parse(string(b))
1655+
prompt, err := gonja.FromString(string(b))
16531656
if err != nil {
16541657
writeError(response, http.StatusBadRequest, err.Error())
16551658
return
@@ -1664,13 +1667,15 @@ func (m *Master) chat(response http.ResponseWriter, request *http.Request) {
16641667
}
16651668
// render prompt
16661669
var buf bytes.Buffer
1667-
err = prompt.Execute(&buf, item)
1670+
err = prompt.Execute(&buf, exec.NewContext(map[string]any{
1671+
"item": item,
1672+
}))
16681673
if err != nil {
16691674
writeError(response, http.StatusInternalServerError, err.Error())
16701675
return
16711676
}
16721677
// create chat completion stream
1673-
stream, err := client.CreateChatCompletionStream(
1678+
stream, err := m.openAIClient.CreateChatCompletionStream(
16741679
request.Context(),
16751680
openai.ChatCompletionRequest{
16761681
Model: m.Config.OpenAI.ChatCompletionModel,

master/rest_test.go

+39-2
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import (
1919
"context"
2020
"encoding/json"
2121
"fmt"
22+
"github.com/sashabaranov/go-openai"
23+
"github.com/zhenghaoz/gorse/common/mock"
2224
"mime/multipart"
2325
"net/http"
2426
"net/http/httptest"
@@ -76,8 +78,9 @@ func convertToMapStructure(t *testing.T, v interface{}) map[string]interface{} {
7678
type MasterAPITestSuite struct {
7779
suite.Suite
7880
Master
79-
handler *restful.Container
80-
cookie string
81+
handler *restful.Container
82+
openAIServer *mock.OpenAIServer
83+
cookie string
8184
}
8285

8386
func (suite *MasterAPITestSuite) SetupTest() {
@@ -107,6 +110,15 @@ func (suite *MasterAPITestSuite) SetupTest() {
107110
// create handler
108111
suite.handler = restful.NewContainer()
109112
suite.handler.Add(suite.WebService)
113+
// creat mock AI server
114+
suite.openAIServer = mock.NewOpenAIServer()
115+
go func() {
116+
_ = suite.openAIServer.Start()
117+
}()
118+
suite.openAIServer.Ready()
119+
clientConfig := openai.DefaultConfig(suite.openAIServer.AuthToken())
120+
clientConfig.BaseURL = suite.openAIServer.BaseURL()
121+
suite.openAIClient = openai.NewClientWithConfig(clientConfig)
110122
// login
111123
req, err := http.NewRequest("POST", "/login",
112124
strings.NewReader(fmt.Sprintf("user_name=%s&password=%s", mockMasterUsername, mockMasterPassword)))
@@ -125,6 +137,8 @@ func (suite *MasterAPITestSuite) TearDownTest() {
125137
suite.NoError(err)
126138
err = suite.CacheClient.Close()
127139
suite.NoError(err)
140+
err = suite.openAIServer.Close()
141+
suite.NoError(err)
128142
}
129143

130144
func (suite *MasterAPITestSuite) TestExportUsers() {
@@ -944,6 +958,29 @@ func (suite *MasterAPITestSuite) TestExportAndImport() {
944958
}
945959
}
946960

961+
func (suite *MasterAPITestSuite) TestChatItem() {
962+
// insert item
963+
ctx := context.Background()
964+
err := suite.DataClient.BatchInsertItems(ctx, []data.Item{{
965+
ItemId: "0",
966+
Labels: map[string]any{"author": "F. Scott Fitzgerald"},
967+
Comment: "The Great Gatsby",
968+
}})
969+
suite.NoError(err)
970+
971+
// chat item
972+
buf := strings.NewReader("{{ item.Labels.author }}'s {{ item.Comment }}")
973+
req := httptest.NewRequest("POST", "https://example.com/", buf)
974+
q := req.URL.Query()
975+
q.Add("item_id", "0")
976+
req.URL.RawQuery = q.Encode()
977+
req.Header.Set("Cookie", suite.cookie)
978+
w := httptest.NewRecorder()
979+
suite.chat(w, req)
980+
suite.Equal(http.StatusOK, w.Code, w.Body.String())
981+
suite.Equal("F. Scott Fitzgerald's The Great Gatsby", w.Body.String())
982+
}
983+
947984
func TestMasterAPI(t *testing.T) {
948985
suite.Run(t, new(MasterAPITestSuite))
949986
}

0 commit comments

Comments
 (0)