From 39e4cc626e4503cdee267683477fca9d57be63c1 Mon Sep 17 00:00:00 2001 From: Wenzhe Xue Date: Mon, 12 Feb 2024 11:49:48 -0800 Subject: [PATCH] wip stash changes --- examples/feedback/create_feedback_task.py | 20 ++++++++++++ examples/feedback/simple_feedback.py | 38 +++++++++++++++++++++++ log10/__main__.py | 4 --- log10/feedback/feedback.py | 2 +- log10/feedback/feedback_task.py | 17 +++++++--- 5 files changed, 72 insertions(+), 9 deletions(-) create mode 100644 examples/feedback/create_feedback_task.py create mode 100644 examples/feedback/simple_feedback.py diff --git a/examples/feedback/create_feedback_task.py b/examples/feedback/create_feedback_task.py new file mode 100644 index 00000000..35b8c3ba --- /dev/null +++ b/examples/feedback/create_feedback_task.py @@ -0,0 +1,20 @@ +import logging +from log10.feedback.feedback_task import FeedbackTask + +httpx_logger = logging.getLogger("httpx") +httpx_logger.setLevel(logging.DEBUG) + +feedback_task = FeedbackTask() +t_s = { + "type": "object", + "properties": { + "feedback": { + "type": "string", + "enum": ["😀", "😬", "😐", "🙁", "😫"] + } + } +} +# convert t_s to json +import json +t_s = json.dumps(t_s) +task = feedback_task.create(name="emo", task_schema=t_s) diff --git a/examples/feedback/simple_feedback.py b/examples/feedback/simple_feedback.py new file mode 100644 index 00000000..9a57d43e --- /dev/null +++ b/examples/feedback/simple_feedback.py @@ -0,0 +1,38 @@ +from pprint import pprint +from typing import Literal + +from pydantic import BaseModel, Field + +from log10.feedback.feedback import Feedback +from log10.feedback.feedback_task import FeedbackTask +from log10.load import OpenAI + + +class EmojiFeedback(BaseModel): + feedback: Literal["😀", "🙁"] = Field(..., description="User feedback with emojis") + + +client = OpenAI() +completion = client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + { + "role": "system", + "content": "You are the most knowledgable Star Wars guru on the planet", + }, + { + "role": "user", + "content": "Write the time period of all the Star Wars movies and spinoffs?", + }, + ], +) +completion_id = completion.choices[0].id + +task = FeedbackTask() +res = task.create(name="emoji_feedback_task", task_schema=EmojiFeedback.model_json_schema()) +task_id = res["id"] +pprint(task) +# Example usage +fb = Feedback() +res = fb.create(task_id=task_id, data=EmojiFeedback(feedback="😀").model_dump_json(), completion_tags_selector=[str(completion_id)]) +pprint(res) diff --git a/log10/__main__.py b/log10/__main__.py index 52cf4a1c..ca446d4e 100644 --- a/log10/__main__.py +++ b/log10/__main__.py @@ -26,7 +26,3 @@ def feedback_task(): if __name__ == "__main__": cli() - - -# cli.add_command(feedback.create_feedback) -# cli.add_command(feedback_task.create_feedback_task) diff --git a/log10/feedback/feedback.py b/log10/feedback/feedback.py index 7ac12b5d..e021151a 100644 --- a/log10/feedback/feedback.py +++ b/log10/feedback/feedback.py @@ -34,7 +34,7 @@ def __init__(self, log10_config: Log10Config = None): self._http_client = httpx.Client() def _post_request(self, url: str, json_payload: dict) -> httpx.Response: - headers = {"x-log10-token": self._log10_config.token, "Content-Type": "application/json"} + headers = {"x-log10-token": self._log10_config.token, "x-log10-organization": self._log10_config.org_id, "Content-Type": "application/json"} json_payload["organization_id"] = self._log10_config.org_id try: res = self._http_client.post(self._log10_config.url + url, headers=headers, json=json_payload) diff --git a/log10/feedback/feedback_task.py b/log10/feedback/feedback_task.py index 15769dcf..d2319d5b 100644 --- a/log10/feedback/feedback_task.py +++ b/log10/feedback/feedback_task.py @@ -17,17 +17,21 @@ logger.setLevel(logging.INFO) + class FeedbackTask: - feedback_task_create_url = "/api/v1/feedback_task" + feedback_task_create_url = "api/v1/feedback_task" def __init__(self, log10_config: Log10Config = None): self._log10_config = log10_config or Log10Config() self._http_client = httpx.Client() def _post_request(self, url: str, json_payload: dict) -> httpx.Response: - headers = {"x-log10-token": self._log10_config.token, "Content-Type": "application/json"} + headers = {"x-log10-token": self._log10_config.token, "Content-Type": "application/json", "x-log10-organization": self._log10_config.org_id} json_payload["organization_id"] = self._log10_config.org_id try: + from pprint import pprint + pprint(f"{headers=}") + pprint(f"{json_payload=}") res = self._http_client.post(self._log10_config.url + url, headers=headers, json=json_payload) res.raise_for_status() return res @@ -35,14 +39,19 @@ def _post_request(self, url: str, json_payload: dict) -> httpx.Response: logger.error(e) raise - def create(self, name: str, task_schema: dict) -> httpx.Response: + def create(self, task_schema: dict, name: str = None, instruction: str = None) -> httpx.Response: """ Example: >>> from log10.feedback.feedback_task import FeedbackTask >>> feedback_task = FeedbackTask() >>> task = feedback_task.create(name="summarization", task_schema={...}) """ - json_payload = {"name": name, "task_schema": task_schema} + json_payload = {"task_schema": task_schema} + if name: + json_payload["name"] = name + if instruction: + json_payload["instruction"] = instruction + res = self._post_request(self.feedback_task_create_url, json_payload) return res