From bf9f6f3cd19cff9ae2b383f4bb94304688d5ea9a Mon Sep 17 00:00:00 2001 From: Erik Winter Date: Sat, 20 Jan 2024 11:36:05 +0100 Subject: [PATCH] fix next no titles handler --- client/emdb.go | 28 ++++++++++++ cmd/api-service/handler/review.go | 2 +- cmd/worker/main.go | 75 +++++++++++++++---------------- 3 files changed, 64 insertions(+), 41 deletions(-) diff --git a/client/emdb.go b/client/emdb.go index 5aae878..5172c78 100644 --- a/client/emdb.go +++ b/client/emdb.go @@ -208,6 +208,34 @@ func (e *EMDB) GetNextUnratedReview() (moviestore.Review, error) { return review, nil } +func (e *EMDB) GetNextNoTitlesReview() (moviestore.Review, error) { + url := fmt.Sprintf("%s/review/no-titles/next", e.baseURL) + req, err := http.NewRequest(http.MethodGet, url, nil) + if err != nil { + return moviestore.Review{}, err + } + req.Header.Add("Authorization", e.apiKey) + + resp, err := e.c.Do(req) + if err != nil { + return moviestore.Review{}, err + } + + if resp.StatusCode != http.StatusOK { + return moviestore.Review{}, fmt.Errorf("unexpected status code: %d", resp.StatusCode) + } + + body, err := io.ReadAll(resp.Body) + defer resp.Body.Close() + + var review moviestore.Review + if err := json.Unmarshal(body, &review); err != nil { + return moviestore.Review{}, err + } + + return review, nil +} + func (e *EMDB) UpdateReview(review moviestore.Review) error { body, err := json.Marshal(review) if err != nil { diff --git a/cmd/api-service/handler/review.go b/cmd/api-service/handler/review.go index 4f3a746..9972020 100644 --- a/cmd/api-service/handler/review.go +++ b/cmd/api-service/handler/review.go @@ -36,7 +36,7 @@ func (reviewAPI *ReviewAPI) ServeHTTP(w http.ResponseWriter, r *http.Request) { case r.Method == http.MethodGet && subPath == "no-titles" && subSubPath == "": reviewAPI.ListNoTitles(w, r) case r.Method == http.MethodGet && subPath != "no-titles" && subSubPath == "next": - reviewAPI.NextUnrated(w, r) + reviewAPI.NextNoTitles(w, r) case r.Method == http.MethodGet && subPath != "": reviewAPI.Get(w, r, subPath) case r.Method == http.MethodPut && subPath != "": diff --git a/cmd/worker/main.go b/cmd/worker/main.go index 8bb1ec3..ddf7199 100644 --- a/cmd/worker/main.go +++ b/cmd/worker/main.go @@ -34,20 +34,20 @@ Just answer with the JSON and nothing else. When in doubt about whether a title func main() { //movieID := "c313ffa9-1cec-4d37-be6e-a4e18c247a0f" // night train //movieID := "07fb2a59-24ec-442e-aa9e-eb7e4fb002db" // battle royale - movieID := "2fce2f8f-a048-4e39-8ffe-82df09a29d32" // shadows in paradise + //movieID := "2fce2f8f-a048-4e39-8ffe-82df09a29d32" // shadows in paradise emdb := client.NewEMDB(os.Getenv("EMDB_BASE_URL"), os.Getenv("EMDB_API_KEY")) - movie, err := emdb.GetMovie(movieID) - if err != nil { - fmt.Println(err) - os.Exit(1) - } - reviews, err := emdb.GetReviews(movieID) + review, err := emdb.GetNextNoTitlesReview() if err != nil { fmt.Println(err) os.Exit(1) } + movie, err := emdb.GetMovie(review.MovieID) + if err != nil { + fmt.Println(err) + os.Exit(1) + } llm, err := ollama.New(ollama.WithModel("mistral")) if err != nil { fmt.Println(err) @@ -63,42 +63,37 @@ func main() { llmChain := chains.NewLLMChain(llm, prompt) fmt.Printf("Processing review for movie: %s\n", movie.Title) - for _, review := range reviews { - fmt.Printf("Review: %s\n", review.Review) - outputValues, err := chains.Call(ctx, llmChain, map[string]any{ - "title": movie.Title, - "review": review.Review, - }) - if err != nil { - fmt.Println(err) - os.Exit(1) - } + fmt.Printf("Review: %s\n", review.Review) + outputValues, err := chains.Call(ctx, llmChain, map[string]any{ + "title": movie.Title, + "review": review.Review, + }) + if err != nil { + fmt.Println(err) + os.Exit(1) + } - out, ok := outputValues[llmChain.OutputKey].(string) - if !ok { - fmt.Println("invalid chain return") - } - fmt.Println(out) - resp := struct { - Movies []string `json:"movies"` - TVShows []string `json:"tvShows"` - Games []string `json:"games"` - Books []string `json:"books"` - }{} + out, ok := outputValues[llmChain.OutputKey].(string) + if !ok { + fmt.Println("invalid chain return") + } + fmt.Println(out) + resp := struct { + Movies []string `json:"movies"` + TVShows []string `json:"tvShows"` + Games []string `json:"games"` + Books []string `json:"books"` + }{} - if err := json.Unmarshal([]byte(out), &resp); err != nil { - fmt.Printf("could not unmarshal llm response, skipping this one: %s", err) - continue - } + if err := json.Unmarshal([]byte(out), &resp); err != nil { + fmt.Printf("could not unmarshal llm response, skipping this one: %s", err) + os.Exit(1) + } - fmt.Printf("Movies: %v\n", resp.Movies) - - review.Titles = resp - - if err := emdb.UpdateReview(review); err != nil { - fmt.Printf("could not update review: %s\n", err) - continue - } + review.Titles = resp + if err := emdb.UpdateReview(review); err != nil { + fmt.Printf("could not update review: %s\n", err) + os.Exit(1) } }