From 3d519b26b0f171e58b48b4ddf226d8e7298c3d3d Mon Sep 17 00:00:00 2001 From: mrmer1 Date: Tue, 28 Jan 2025 13:36:20 +0800 Subject: [PATCH] update code post classify deprecation --- .../llmu/examples/deploy_fastapi/main.py | 81 +++++++++++++----- .../classify_summarize.js | 64 -------------- .../cohere_google_apps_script.xlsx | Bin 32398 -> 15833 bytes .../deploy_google_apps_script/summarize.js | 29 +++++++ 4 files changed, 87 insertions(+), 87 deletions(-) delete mode 100644 notebooks/llmu/examples/deploy_google_apps_script/classify_summarize.js create mode 100644 notebooks/llmu/examples/deploy_google_apps_script/summarize.js diff --git a/notebooks/llmu/examples/deploy_fastapi/main.py b/notebooks/llmu/examples/deploy_fastapi/main.py index cddafc347..ad25c1932 100644 --- a/notebooks/llmu/examples/deploy_fastapi/main.py +++ b/notebooks/llmu/examples/deploy_fastapi/main.py @@ -1,5 +1,5 @@ +import json import cohere -from cohere import ClassifyExample from fastapi import FastAPI from pydantic import BaseModel, conlist @@ -8,30 +8,65 @@ app = FastAPI() +def classify_sentiment(product_review): + # Create prompt with examples + prompt = """Classify this text into positive, negative, or neutral sentiment. Here are some examples: + + Positive examples: + - "The order came 5 days early" + - "The item exceeded my expectations" + - "I ordered more for my friends" + - "I would buy this again" + - "I would recommend this to others" + + Negative examples: + - "The package was damaged" + - "The order is 5 days late" + - "The order was incorrect" + - "I want to return my item" + - "The item's material feels low quality" + + Neutral examples: + - "The item was nothing special" + - "I would not buy this again but it wasn't a waste of money" + - "The item was neither amazing or terrible" + - "The item was okay" + - "I have no emotions towards this item" + + Text to classify: + {}""" + + res = co.chat( + model="command-r-plus-08-2024", + messages=[ + { + "role": "user", + "content": prompt.format(product_review) + } + ], + temperature=0.0, + response_format={ + "type": "json_object", + "schema": { + "type": "object", + "properties": { + "class": { + "type": "string", + "enum": ["positive", "negative", "neutral"] + } + }, + "required": ["class"] + } + } + ) + return json.loads(res.message.content[0].text)["class"] + class ProductReviews(BaseModel): reviews: conlist(str, min_length=1) @app.post("/prediction") def predict_sentiment(product_reviews: ProductReviews): - examples=[ClassifyExample(text="The order came 5 days early", label="positive"), - ClassifyExample(text="The item exceeded my expectations", label="positive"), - ClassifyExample(text="I ordered more for my friends", label="positive"), - ClassifyExample(text="I would buy this again", label="positive"), - ClassifyExample(text="I would recommend this to others", label="positive"), - ClassifyExample(text="The package was damaged", label="negative"), - ClassifyExample(text="The order is 5 days late", label="negative"), - ClassifyExample(text="The order was incorrect", label="negative"), - ClassifyExample(text="I want to return my item", label="negative"), - ClassifyExample(text="The item's material feels low quality", label="negative"), - ClassifyExample(text="The item was nothing special", label="neutral"), - ClassifyExample(text="I would not buy this again but it wasn't a waste of money", label="neutral"), - ClassifyExample(text="The item was neither amazing or terrible", label="neutral"), - ClassifyExample(text="The item was okay", label="neutral"), - ClassifyExample(text="I have no emotions towards this item", label="neutral")] - - response = co.classify( - model="embed-english-v2.0", - inputs=product_reviews.reviews, - examples=examples) - - return response.classifications \ No newline at end of file + sentiments = [] + for review in product_reviews.reviews: + sentiments.append(classify_sentiment(review)) + return sentiments \ No newline at end of file diff --git a/notebooks/llmu/examples/deploy_google_apps_script/classify_summarize.js b/notebooks/llmu/examples/deploy_google_apps_script/classify_summarize.js deleted file mode 100644 index 21f58b225..000000000 --- a/notebooks/llmu/examples/deploy_google_apps_script/classify_summarize.js +++ /dev/null @@ -1,64 +0,0 @@ -//Do not share this token -//TODO input your own API token -const TOKEN = '' - -// this is where we call the API to classify our unlabeled text based on the training data we pass in as a prompt -function classify(s_args, s_input) { - - // we start by extracting the training data from the specified range in s_args and packaging it into a prompt - let inputs = [s_input]; - let examples = []; - for (let i = 0; i< s_args.length; i++) { - //this is assuming label is always the 2nd parameter - examples.push({"text" : s_args[i][0] , "label" : s_args[i][1]}) - } - - const payload_for_classification = { - examples, - inputs, - "model" : "embed-english-v2.0", - }; - - const options = { - 'headers' : { 'Authorization' : 'Bearer ' + TOKEN }, - 'method' : 'post', - 'contentType': 'application/json', - 'payload' : JSON.stringify(payload_for_classification) - }; - - const response = UrlFetchApp.fetch('https://api.cohere.ai/v1/classify', options); - const responseContent = response.getContentText(); - const responseContentText = JSON.parse(response.getContentText()); - const classificationContent = responseContentText.classifications[0]; - const ourPrediction = classificationContent.prediction; - const confidence = (classificationContent.confidence * 100).toFixed(2) + "%"; - let displayString = "Prediction: " + ourPrediction.toUpperCase() + " review\n" + "Confidence Level: " + confidence + "\n"; - return displayString; - - } - -// this is where we call the API to summarize the review -function summarize(cell_value) { - - let raw = JSON.stringify({ - "message": "Summarize this in about 10 words: " + cell_value, - "temperature": 0.2, - "model": "command-r", - }); - let requestOptions = { - 'method': 'post', - 'muteHttpExceptions': true, - 'contentType': 'application/json', - 'headers': { - 'Authorization': 'Bearer ' + TOKEN - }, - 'payload': raw, - redirect: 'follow' - }; - - let response = UrlFetchApp.fetch("https://api.cohere.ai/v1/chat", requestOptions) - let responseContentTxt = JSON.parse(response.getContentText()); - let summarizedTxt = "SUMMARY: " + responseContentTxt.text + "\n"; - return summarizedTxt; - -} \ No newline at end of file diff --git a/notebooks/llmu/examples/deploy_google_apps_script/cohere_google_apps_script.xlsx b/notebooks/llmu/examples/deploy_google_apps_script/cohere_google_apps_script.xlsx index 11e7107d4ebd7670bc75171c5a4a7a1a44b6f98e..5c05fb38c0f70d4dfe7d95e80eee8d87e459af0a 100644 GIT binary patch literal 15833 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 Rhj;e)$N8A?RisX&{{!_2s_*~+ literal 32398 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