99 "io"
1010 "log"
1111 "net/http"
12- "net/url"
1312 "os"
1413 "strconv"
1514 "time"
@@ -25,53 +24,6 @@ type emo_code struct {
2524 Errmessage string `json:"errmessage"`
2625}
2726
28- type Intent struct {
29- Name string `json:"name,omitempty"`
30- Confidence float64 `json:"confidence,omitempty"`
31- }
32-
33- type BehaviorParas struct {
34- UtilityType string `json:"utility_type,omitempty"`
35- Time []string `json:"time,omitempty"`
36- Txt string `json:"txt,omitempty"`
37- Url string `json:"url,omitempty"`
38- PreAnimation string `json:"pre_animation,omitempty"`
39- PostAnimation string `json:"post_animation,omitempty"`
40- PostBehavior string `json:"post_behavior,omitempty"`
41- RecBehavior string `json:"rec_behavior,omitempty"`
42- BehaviorParas * BehaviorParas `json:"behavior_paras,omitempty"`
43- Sentiment string `json:"sentiment,omitempty"`
44- Listen int `json:"listen,omitempty"`
45- AnimationName string `json:"animation_name,omitempty"`
46- }
47-
48- type QueryResult struct {
49- ResultCode string `json:"resultCode,omitempty"`
50- QueryText string `json:"queryText,omitempty"`
51- Intent * Intent `json:"intent,omitempty"`
52- RecBehavior string `json:"rec_behavior,omitempty"`
53- BehaviorParas * BehaviorParas `json:"behavior_paras,omitempty"`
54- }
55-
56- type QueryResponse struct {
57- QueryId string `json:"queryId,omitempty"`
58- QueryResult * QueryResult `json:"queryResult,omitempty"`
59- LanguageCode string `json:"languageCode,omitempty"`
60- Index int `json:"index,omitempty"`
61- }
62-
63- type TokenResponse struct {
64- AccessToken string `json:"access_token,omitempty"`
65- ExpireIn int `json:"expire_in,omitempty"`
66- Type string `json:"type,omitempty"`
67- }
68-
69- type EmoSpeechResponse struct {
70- Code int64 `json:"code"`
71- Errmessage string `json:"errmessage"`
72- Url string `json:"url"`
73- }
74-
7527type Configuration struct {
7628 PidFile string `json:"pidFile"`
7729 Livingio_API_Server string `json:"livingio_api_server"`
@@ -81,6 +33,7 @@ type Configuration struct {
8133 PostFS string `json:"postFS"`
8234 LogFileName string `json:"logFileName"`
8335 EnableDatabaseAndAPI bool `json:"enableDatabaseAndAPI"`
36+ EnableReplacements bool `json:"enableReplacements"`
8437 SqliteLocation string `json:"sqliteLocation"`
8538 ChatGptSpeakServer string `json:"chatGptSpeakServer"`
8639}
@@ -153,6 +106,7 @@ func loadConfig(filename string) error {
153106 PostFS : "/tmp/" ,
154107 LogFileName : "/var/log/emoProxy.log" ,
155108 EnableDatabaseAndAPI : false ,
109+ EnableReplacements : false ,
156110 SqliteLocation : "/var/data/emo_logs.db" ,
157111 ChatGptSpeakServer : "" ,
158112 }
@@ -365,31 +319,13 @@ func makeApiRequest(r *http.Request) string {
365319 body , _ := io .ReadAll (response .Body )
366320 log .Println ("Server response: " , string (body ))
367321
368- typedBody := QueryResponse {}
369- decoder := json .NewDecoder (bytes .NewReader ([]byte (body )))
370- decoder .DisallowUnknownFields ()
322+ logResponse (response )
371323
372- err = decoder .Decode (& typedBody )
373- if err != nil {
374- log .Println ("Error when decoding JSON (" , string (body ), ") will return unhandled:" , err )
375- } else {
376- if typedBody .QueryId != "" {
377- if typedBody .QueryResult .Intent .Name == "chatgpt_speak" && conf .ChatGptSpeakServer != "" {
378- speakResponse := makeChatGptSpeakRequest (typedBody .QueryResult .QueryText , typedBody .LanguageCode , typedBody .QueryResult .BehaviorParas .Txt , r )
379- if speakResponse .Url != "" && speakResponse .Txt != "" {
380- log .Println ("Successfully replaced chatgpt_speak response for request." )
381- typedBody .QueryResult .BehaviorParas .Url = speakResponse .Url
382- typedBody .QueryResult .BehaviorParas .Txt = speakResponse .Txt
383- } else {
384- log .Println ("Failed to get valid response from ChatGptSpeakServer, keeping original response." )
385- }
386- }
387- body , _ = json .Marshal (typedBody )
388- }
324+ if conf .EnableReplacements {
325+ log .Println ("Replacements enabled, checking for replacements..." )
326+ body = runReplacementsAndReturnModifiedBody (body )
389327 }
390328
391- logResponse (response )
392-
393329 if useDatabaseAndAPI {
394330 saveRequest (r .URL .RequestURI (), string (requestBody ), string (body ))
395331 }
@@ -502,89 +438,3 @@ func makeResRequest(r *http.Request, w http.ResponseWriter) string {
502438 }
503439 return string (body )
504440}
505-
506- func makeEmoSpeechRequest (text string , languageCode string , r * http.Request ) EmoSpeechResponse {
507- request , _ := http .NewRequest ("GET" , "https://" + conf .Livingio_API_Server + "/emo/speech/tts?q=" + url .QueryEscape (text )+ "&l=" + url .QueryEscape (languageCode ), nil )
508-
509- val , exists := r .Header ["Authorization" ]
510- if exists {
511- request .Header .Add ("Authorization" , val [0 ])
512- }
513-
514- val , exists = r .Header ["Secret" ]
515- if exists {
516- request .Header .Add ("Secret" , val [0 ])
517- }
518-
519- request .Header .Del ("User-Agent" )
520-
521- httpclient := & http.Client {}
522- response , err := httpclient .Do (request )
523-
524- if err != nil {
525- log .Fatalf ("An Error Occured %v" , err )
526- }
527- defer response .Body .Close ()
528-
529- body , _ := io .ReadAll (response .Body )
530-
531- var emoSpeechResponse EmoSpeechResponse
532- if err := json .Unmarshal ([]byte (body ), & emoSpeechResponse ); err != nil {
533- log .Printf ("Error unmarshaling ChatGptSpeakServer response: %v\n " , err )
534- return EmoSpeechResponse {}
535- }
536-
537- return emoSpeechResponse
538- }
539-
540- func makeChatGptSpeakRequest (queryText string , languageCode string , fallbackResponse string , r * http.Request ) BehaviorParas {
541- type ChatGptSpeakRequest struct {
542- QueryText string `json:"queryText"`
543- LanguageCode string `json:"languageCode"`
544- FallbackResponse string `json:"fallbackResponse,omitempty"`
545- }
546- type ChatGptSpeakResponse struct {
547- ResponseText string `json:"responseText"`
548- }
549-
550- chatGptRequestData := ChatGptSpeakRequest {
551- QueryText : queryText ,
552- LanguageCode : languageCode ,
553- FallbackResponse : fallbackResponse ,
554- }
555- chatGptRequestBody , _ := json .Marshal (chatGptRequestData )
556- chatGptRequest , _ := http .NewRequest ("POST" , conf .ChatGptSpeakServer + "/speak" , bytes .NewBuffer (chatGptRequestBody ))
557- chatGptRequest .Header .Add ("Content-Type" , "application/json" )
558-
559- chatGptClient := & http.Client {}
560- chatGptResponse , err := chatGptClient .Do (chatGptRequest )
561- if err != nil {
562- log .Fatalf ("An Error Occured while calling ChatGptSpeakServer %v" , err )
563- }
564- defer chatGptResponse .Body .Close ()
565-
566- chatGptResponseBody , _ := io .ReadAll (chatGptResponse .Body )
567-
568- var chatGptTypedResponse ChatGptSpeakResponse
569- if err := json .Unmarshal ([]byte (chatGptResponseBody ), & chatGptTypedResponse ); err != nil {
570- log .Printf ("Error unmarshaling ChatGptSpeakServer response: %v\n " , err )
571- return BehaviorParas {}
572- }
573-
574- if chatGptTypedResponse .ResponseText == "" {
575- log .Println ("ChatGptSpeakServer returned empty response text" )
576- return BehaviorParas {}
577- }
578-
579- emoSpeechResponse := makeEmoSpeechRequest (chatGptTypedResponse .ResponseText , languageCode , r )
580- if emoSpeechResponse .Code != 200 || emoSpeechResponse .Url == "" {
581- log .Printf ("Error in EmoSpeechResponse: Code %d, Errmessage: %s\n " , emoSpeechResponse .Code , emoSpeechResponse .Errmessage )
582- return BehaviorParas {}
583- }
584- behaviorParasResponse := BehaviorParas {
585- Txt : chatGptTypedResponse .ResponseText ,
586- Url : emoSpeechResponse .Url ,
587- }
588-
589- return behaviorParasResponse
590- }
0 commit comments