From b232fa533c49e8815a45d22304353baab825e25d Mon Sep 17 00:00:00 2001 From: henceiusegentoo Date: Mon, 7 Aug 2023 11:39:57 +0200 Subject: [PATCH] Added the moderation endpoint and fixed the readme --- Cargo.toml | 2 +- README.md | 32 +++++++++++++++++++++++++++++--- pyproject.toml | 5 +++-- src/lib.rs | 30 ++++++++++++++++++++++++++++-- 4 files changed, 61 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index d51dff4..cfecd33 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "nova-python" -version = "0.1.0" +version = "0.1.1" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/README.md b/README.md index 1cd29d2..8701a01 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,11 @@ 🐍 Python library for accessing the Nova API ## Usage ## +Install the module (This requires Cargo) +```sh +$ pip install nova-python +``` + Import the module ```python from nova_python import Endpoints, Models, NovaClient @@ -15,14 +20,17 @@ client = NovaClient("YOUR_API_KEY") nova_python currently implements two enums: Endpoints and Models. Those contain: -### Endpoints ### +**Endpoints** * `Endpoints.CHAT_COMPLETION` +* `Endpoints.MODERATION` **Models** * `Models.GPT3` -+ `Models.GPT4` +* `Models.GPT4` +* `Models.MODERATION_LATEST` +* `Models.MODERATION_STABLE` -Now, to make a request, use the `make_request` function. +Now, to make a request, use the `make_request` function. For example: ```python from nova_python import Endpoints, Models, NovaClient @@ -38,7 +46,25 @@ client.make_request( ) ``` +or + +```python +from nova_python import Endpoints, Models, NovaClient +client = NovaClient("YOUR_API_KEY") + +client.make_request( + endpoint=Endpoints.MODERATION, + model=Models.MODERATION_STABLE, + data=[{"input": "I'm going to kill them."}] +) +``` + + If everything goes to plan, you'll receive a string containing JSON-Data, which you can then use in your project. *Happy prompting!* +## FAQ ## +**Q:** I get an error when installing the package +**A:** Make you sure, that you have Cargo installed + Made with 🩸 by Leander \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index a0182f7..38a6540 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ build-backend = "maturin" [project] name = "nova-python" authors = [ - {name = "Leander"} + {name = "Leander <@henceiusegentoo>"} ] description = "🐍 Python library for accessing the Nova API" @@ -16,6 +16,7 @@ classifiers = [ "Programming Language :: Python :: Implementation :: PyPy", ] +repository = "https://github.com/NovaOSS/nova-python" [tool.maturin] -features = ["pyo3/extension-module"] +features = ["pyo3/extension-module"] \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index ac5d86a..2d003a1 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -10,7 +10,11 @@ enum Models { #[pyo3(name = "GPT3")] Gpt3, #[pyo3(name = "GPT4")] - Gpt4 + Gpt4, + #[pyo3(name = "MODERATION_LATEST")] + ModerationLatest, + #[pyo3(name = "MODERATION_STABLE")] + ModerationStable, } #[pyclass(module = "nova_python", frozen)] @@ -19,6 +23,8 @@ enum Models { enum Endpoints { #[pyo3(name = "CHAT_COMPLETION")] ChatCompletion, + #[pyo3(name = "MODERATION")] + Moderation, } #[pyclass(module = "nova_python", frozen)] @@ -84,6 +90,7 @@ impl NovaClient { fn get_request_url(&self, endpoint: &Endpoints) -> PyResult { match endpoint { Endpoints::ChatCompletion => Ok(format!("{}chat/completions", self.url)), + Endpoints::Moderation => Ok(format!("{}moderations", self.url)), _ => Err(NovaClient::get_invalid_endpoint_error()) } } @@ -105,6 +112,8 @@ impl NovaClient { let model = match model { Models::Gpt3 => "gpt-3.5-turbo", Models::Gpt4 => "gpt-4", + Models::ModerationLatest => "text-moderation-latest", + Models::ModerationStable => "text-moderation-stable", _ => return Err(NovaClient::get_invalid_model_error()) }; request_body.push_str(&format!("\"model\":\"{}\"", model)); @@ -132,7 +141,16 @@ impl NovaClient { request_body.push_str("]"); - } else { + } + + else if endpoint == &Endpoints::Moderation { + request_body.push_str(",\"input\":"); + + let input = format!("\"{}\"", request_data.get(0).unwrap().get("input").unwrap()); + request_body.push_str(&input); + } + + else { return Err(NovaClient::get_invalid_endpoint_error()); } @@ -169,6 +187,14 @@ fn model_is_compatible(endpoint: &Endpoints, model: &Models) -> bool { return false; } } + + else if endpoint == &Endpoints::Moderation { + if [Models::ModerationStable, Models::ModerationLatest].contains(model) { + return true; + } else { + return false; + } + } false }