diff --git a/.github/PULL_REQUEST_TEMPLATE/release_template.md b/.github/PULL_REQUEST_TEMPLATE/release_template.md new file mode 100644 index 0000000..7aa4555 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/release_template.md @@ -0,0 +1,10 @@ +## Release vX.X.X +[*Brief description of release focus. Remove any unneeded sections below*] + +### New Features +- change 1 (#XXX) + +### Bug fixes + + +### Other changes diff --git a/.github/workflows/deploy-redoc-docs.yaml b/.github/workflows/deploy-redoc-docs.yaml deleted file mode 100644 index 167b6cb..0000000 --- a/.github/workflows/deploy-redoc-docs.yaml +++ /dev/null @@ -1,22 +0,0 @@ -# Extracted from https://github.com/jizt-it/jizt-api-spec/blob/main/.github/workflows/build-docs.yml - -name: Build docs -on: - push: - branches: - - stable - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Build docs - run: npx @redocly/cli build-docs docs/apispec.json --output index.html - - name: Deploy to GitHub Pages - uses: peaceiris/actions-gh-pages@v3 # https://github.com/peaceiris/actions-gh-pages - with: - deploy_key: ${{ secrets.GITHUB_TOKEN }} - publish_dir: . - force_orphan: true - exclude_assets: '.github,openapi,.redocly.yaml,LICENSE,README.md,make.sh' diff --git a/.github/workflows/jekyll-gh-pages.yml b/.github/workflows/jekyll-gh-pages.yml new file mode 100644 index 0000000..19ce654 --- /dev/null +++ b/.github/workflows/jekyll-gh-pages.yml @@ -0,0 +1,53 @@ +# Sample workflow for building and deploying a Jekyll site to GitHub Pages +name: Deploy Jekyll with GitHub Pages dependencies preinstalled + +on: + # Runs on pushes targeting the default branch + push: + branches: ["dev"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + # Build job + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Build redoc + run: npx @redocly/cli build-docs docs/apispec.json --output index.html + - name: Build with Jekyll + uses: actions/jekyll-build-pages@v1 + with: + source: ./ + destination: ./_site + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + + # Deployment job + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.md b/README.md index 654a592..331eccb 100644 --- a/README.md +++ b/README.md @@ -3,31 +3,42 @@ An open source project from Data to AI Lab at MIT.

- - - - -[![Travis CI Shield](https://travis-ci.org/HDI-Project/sibylapp.svg?branch=master)](https://travis-ci.org/HDI-Project/sibylapp) -[![Coverage Status](https://codecov.io/gh/HDI-Project/sibylapp/branch/master/graph/badge.svg)](https://codecov.io/gh/HDI-Project/sibylapp) +[![PyPI - Version](https://img.shields.io/pypi/v/sibyl-api)](https://pypi.org/project/sibyl-api/) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/sibyl-api)](https://pypi.org/project/sibyl-api/) +[![PyPI - Downloads](https://img.shields.io/pypi/dm/sibyl-api)](https://pypi.org/project/sibyl-api/) +[![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/sibyl-dev/sibyl-api/python-test.yml)](https://github.com/sibyl-dev/sibyl-api/actions/workflows/python-test.yml) +[![Static Badge](https://img.shields.io/badge/slack-sibyl-purple?logo=slack)](https://join.slack.com/t/sibyl-ml/shared_invite/zt-2dyfwbgo7-2ALinuT2KDZpsVJ4rntJuA) # Sibyl-API -APIs for explainable ML. +REST-API endpoints for understanding and interacting with ML models. + +| Important Links | | +| --------------------------------------------- | -------------------------------------------------------------------- | +| :book: **[Documentation]** | Quickstart and user guides | +| :memo: **[API Reference]** | Endpoint usage and details | +| :scroll: **[License]** | The repository is published under the MIT License. | +| :computer: **[Website]** | Check out the Sibyl Project Website for more information. | -- API Documentation: [https://sibyl-ml.dev/sibyl-api/](https://sibyl-ml.dev/sibyl-api/) +[Website]: https://sibyl-ml.dev/ +[Documentation]: https://dtail.gitbook.io/sibyl/ +[License]: https://github.com/sibyl-dev/sibyl-api/blob/dev/LICENSE +[Community]: https://join.slack.com/t/sibyl-ml/shared_invite/zt-2dyfwbgo7-2ALinuT2KDZpsVJ4rntJuA +[API Reference]: https://sibyl-ml.dev/sibyl-api/ # Overview -Interpretability is perhaps most impactful in situations where humans make decisions with input from amachine learning model. In such situations, humans have traditionally made decisions without ML models, and as such use the ML model predictions as an aideto improve their effectiveness or speed. -In these cases, explanations can serve many functions. They may help build user trust in the model, identify possible mistakes in the model’s prediction, expedite decisionmaking, maintain accountability, validate their hypotheses, or satisfy curiosity. +Sibyl-API offers API endpoints for easy-to-understand ML model explanations and smooth interactions. -Sibylapp is an online interactive tool built on the top of Sibyl (python library) to provide explanations to predictive models on tabular data. +To get started with Sibyl-API, follow the instructions below or in our documentation to setup your Sibyl database. From there, +you can easily make model predictions, get and modify information about model features, and get a variety of explanations +about your models and their predictions. # Install ## Requirements -**Sibyl-API** has been developed and tested on [Python 3.9, 3.10, and 3.11](https://www.python.org/downloads/), and on [MongoDB version 6 and 7](https://www.mongodb.com/try/download/community). +**Sibyl-API** requires [MongoDB version 6 or 7](https://www.mongodb.com/try/download/community). To install MongoDB, follow the instructions [here](https://www.mongodb.com/docs/manual/administration/install-community/). @@ -115,13 +126,14 @@ Sample table: | has_ac | boolean | has air conditioning | does not have air conditioning | | | nghbrh | categorical | neighborhood | | [Oceanview, Ridge, Oakvale] | -**realapp**: A pickled `pyreal.RealApp` object. This object is used to generate explanations for the model. +**realapp**: A pickled `pyreal.RealApp` object. This object is used to generate explanations for the model. +See [the pyreal documentation](https://dtail.gitbook.io/pyreal/) for details on setting this up. ### Optional inputs Additionally, you can configure APIs futher with: **config**: a configuration file (YAML or python dictionary) specifying -additional settings. See `sibyl/db/config_template.yml` for options. +additional settings. See our [config documentation](https://dtail.gitbook.io/sibyl/user-guides/preparing-the-database/configuring-applications) for details. **categories**: a table with the categories used to make predictions. Each row should correspond to a single category. @@ -175,28 +187,5 @@ sibyl run -E development -v -D [DATABASE_NAME] You can then access your APIs locally at http://localhost:3000/apidocs # Contributing Guide -We appreciate contributions of all kinds! To contribute code to the repo please follow these steps: -1. Clone and install the library and load in your test database(s) following the instructions above. -2. Make a new branch off of `dev` with a descriptive name describing your change. -3. Make changes to that branch, committing and pushing code as you go. -4. Run the following commands to ensure your code passed required code style guidelines and tests: -``` -# Run all tests -poetry run invoke test - -# Run unit tests only -poetry run invoke test-unit +We appreciate contributions of all kinds! See [our contributing guide](https://dtail.gitbook.io/sibyl/developer-guides/contributing-to-sibyl) for instructions. -# Fix most linting errors -poetry run invoke fix-lint - -# Ensure no linting errors remain -poetry run invoke lint -``` -5. You can manually run `sibyl/test_apis_on_database.ipynb` on your database(s) to test further. -6. Before making a PR with your final changes, update the api docs by running Sibyl with the -G flag, ie. -``` -# Generate docs -poetry run sibyl run -G -``` -8. Once all tests/linting pass, push all code and make a pull request. One all checks pass and the PR has been approved, merge your code and delete the branch. diff --git a/docs/apispec.json b/docs/apispec.json index 7c01362..dc29ec8 100644 --- a/docs/apispec.json +++ b/docs/apispec.json @@ -1 +1 @@ -{"info": {"description": "\n

\n\u201cDAI-Lab\u201d\nAn open source project from Data to AI Lab at MIT.\n

\n\n# What is Sibyl?\n**Sibyl** is a highly configurable API for supporting the full human-ML decision making workflow.\n\n# License\n\n[The MIT License](https://github.com/sibyl-dev/sibyl-api/blob/master/LICENSE)\n", "title": "Sibyl RestAPI Documentation", "version": "1.0.0"}, "paths": {"/api/v1/entities/{eid}/": {"put": {"summary": "Modify an Entity by ID", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EntityWithoutEid"}}}}, "responses": {"200": {"description": "Entity that was modified", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Entity"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "eid", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to modify/create"}], "tags": ["entity"]}, "get": {"summary": "Get an Entity by ID", "responses": {"200": {"description": "Entity to be returned", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Entity"}, "example": {"eid": "123", "features": {"row_1": {"f1": 10, "f2": 20}, "row_2": {"f1": 20, "f2": 30}}, "row_ids": ["row_1", "row_2"], "labels": {"row_1": 1, "row_2": 0}, "property": {"group_id": "group_1"}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "eid", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to get"}, {"name": "row_id", "in": "query", "schema": {"type": "string"}, "description": "ID of the row to get for the entity"}], "tags": ["entity"]}}, "/api/v1/entities/": {"put": {"summary": "Insert or modify multiple entities", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Entity"}}}}}}}, "responses": {"200": {"description": "All entities", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Entity"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["entity"]}, "get": {"summary": "Get all Entities", "description": "If group ID is specified, return entities of that group.
", "responses": {"200": {"description": "All entities", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/EntitySimplified"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "group_id", "in": "query", "schema": {"type": "string"}, "required": false, "description": "ID of the group to filter entities"}], "tags": ["entity"]}}, "/api/v1/groups/": {"get": {"summary": "Get all EntityGroups", "responses": {"200": {"description": "All EntityGroups", "content": {"application/json": {"schema": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"group_id": {"type": "string"}, "property": {"type": "object"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["group"]}}, "/api/v1/groups/{group_id}/": {"get": {"summary": "Get an EntityGroup by ID", "responses": {"200": {"description": "Group to be returned", "content": {"application/json": {"schema": {"type": "object", "properties": {"group_id": {"type": "string"}, "property": {"type": "object"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "group_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the group to get"}], "tags": ["group"]}}, "/api/v1/features/{feature_name}/": {"put": {"summary": "Update or create a feature by name", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FeatureWithoutName"}}}}, "responses": {"200": {"description": "Feature information", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feature"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "feature_name", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the feature to update"}], "tags": ["feature"]}, "get": {"summary": "Get a feature by name", "responses": {"200": {"description": "Feature information", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feature"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "feature_name", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the feature to get info for"}], "tags": ["feature"]}}, "/api/v1/features/": {"put": {"summary": "Update or create multiple features", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "responses": {"200": {"description": "All added features", "content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}, "get": {"summary": "Get all features", "responses": {"200": {"description": "All features", "content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}}, "/api/v1/categories/": {"put": {"summary": "Add or modify categories", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"categories": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "responses": {"200": {"description": "Categories added or modified", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}, "get": {"summary": "Get all feature categories", "responses": {"200": {"description": "All categories", "content": {"application/json": {"schema": {"type": "object", "properties": {"categories": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}}, "/api/v1/models/{model_id}/": {"put": {"summary": "Update or create a model by id.", "description": "Note: Does not currently support updating realapp.", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FullModelNoRealapp"}}}}, "responses": {"200": {"description": "Information about update model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Model"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the model to update/create"}], "tags": ["model"]}, "get": {"summary": "Get a Model by ID", "responses": {"200": {"description": "Information about the model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Model"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the model to get information about"}], "tags": ["model"]}}, "/api/v1/models/": {"get": {"summary": "Get all Models", "responses": {"200": {"description": "All models", "content": {"application/json": {"schema": {"type": "object", "properties": {"models": {"type": "array", "items": {"type": "object", "properties": {"model_id": {"type": "string"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["model"]}}, "/api/v1/importance/": {"get": {"summary": "Get Model feature importances", "responses": {"200": {"description": "Feature importance for the model", "content": {"application/json": {"schema": {"type": "object", "properties": {"importances": {"type": "array", "items": {"type": "object", "properties": {"feature": {"type": "string"}, "importance": {"type": "float"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the model to get importances for"}], "tags": ["model"]}}, "/api/v1/prediction/": {"get": {"summary": "Get a model prediction", "responses": {"200": {"description": "Prediction", "content": {"application/json": {"schema": {"type": "object", "properties": {"output": {"type": "number"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "query", "schema": {"type": "string"}, "required": true, "description": "ID of the model to use to predict"}, {"name": "eid", "in": "query", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to predict on"}, {"name": "row_id", "in": "query", "schema": {"type": "string"}, "description": "ID of row to predict on (defaults to first row)"}], "tags": ["model"]}}, "/api/v1/multi_prediction/": {"post": {"summary": "Get multiple model predictions.", "description": "If given multiple eids, return one prediction per eid (first row). If given one eid, return one prediction per row_id. Only one of eids and row_ids can contain more than one element.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "row_ids to select from the given eid"}, "return_proba": {"type": "boolean"}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Model predictions", "content": {"application/json": {"schema": {"type": "object", "properties": {"predictions": {"type": "array", "items": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["model"]}}, "/api/v1/context/{context_id}/": {"put": {"summary": "Update or create a context", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "responses": {"200": {"description": "Information about update model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "context_id", "in": "path", "schema": {"type": "string"}, "description": "ID of the context to update/create", "required": true}], "tags": ["context"]}, "get": {"summary": "Get a Context by ID", "responses": {"200": {"description": "Context to be returned", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "context_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the context to get"}], "tags": ["context"]}}, "/api/v1/contexts/": {"get": {"summary": "Get all Context ids", "responses": {"200": {"description": "Get all contexts", "content": {"application/json": {"schema": {"type": "object", "properties": {"contexts": {"type": "array", "items": {"$ref": "#/components/schemas/Context"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["context"]}}, "/api/v1/contributions/": {"post": {"summary": "Get feature contributions", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}}, "required": ["eid", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "object", "additionalProperties": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/multi_contributions/": {"post": {"summary": "Get feature contributions for multiple eids, or for multiple row_ids in a single entity", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}, "row_ids": {"type": "array", "items": {"type": "string"}}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "object", "properties": {"Feature Name": {"type": "string"}, "Feature Value": {"type": ["string", "number"]}, "Contribution": {"type": "number"}, "Average\\/Mode": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/single_change_predictions/": {"post": {"summary": "Get the resulting model predictions after changing the value of a single feature", "description": "of an entity for each feature-value pair provided in the request.
", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}, "return_proba": {"type": "boolean"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting predictions after making changes", "content": {"application/json": {"schema": {"type": "object", "properties": {"predictions": {"type": "array", "items": {"type": "array", "items": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/modified_prediction/": {"post": {"summary": "Get the resulting model prediction after making all changes", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}, "return_proba": {"type": "boolean"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting predictions after making changes", "content": {"application/json": {"schema": {"type": "object", "properties": {"prediction": {"type": "number"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/modified_contribution/": {"post": {"summary": "Get the feature contribution of an entity modified by changes", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting feature contribution after making changes to entity", "content": {"application/json": {"schema": {"type": "object", "properties": {"contribution": {"type": "object", "properties": {"Feature Value": {"type": ["string", "number"]}, "Contribution": {"type": "number"}, "Average\\/Mode": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/similar_entities/": {"post": {"summary": "Get nearest neighbors for list of eids, or for all rows in a single eid", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "array", "items": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}}, "definitions": {}, "openapi": "3.0.2", "tags": [{"name": "entity", "description": "Entities being analyzed"}, {"name": "feature", "description": "ML model input features"}, {"name": "model", "description": "The full ML model pipeline"}, {"name": "context", "description": "Application-specific configurations"}, {"name": "group", "description": "Entity groups"}, {"name": "computing", "description": "Computed explanations and other ML augmenting information"}], "components": {"schemas": {"Referral": {"type": "object", "properties": {"referral_id": {"type": "string"}, "property": {"type": "object", "additionalProperties": {}}}, "required": ["event_id"]}, "Event": {"type": "object", "properties": {"event_id": {"type": "string"}, "datetime": {"type": "string"}, "type": {"type": "string"}, "property": {"type": "object", "additionalProperties": {}}}, "required": ["event_id", "message"]}, "Entity": {"type": "object", "properties": {"eid": {"type": "string", "description": "Entity ID"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "features": {"type": "object", "description": "Feature values"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "EntityWithoutEid": {"type": "object", "properties": {"row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "features": {"type": "object", "description": "Feature values"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "EntitySimplified": {"type": "object", "properties": {"eid": {"type": "string", "readOnly": true, "description": "Entity ID"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "Model": {"type": "object", "properties": {"id": {"type": "string"}, "description": {"type": "string"}, "performance": {"type": "string"}}, "required": ["id"]}, "FullModelNoRealapp": {"type": "object", "properties": {"description": {"type": "string"}, "performance": {"type": "string"}, "importances": {"type": "object"}, "training_set_id": {"type": "string"}}}, "Feature": {"type": "object", "properties": {"name": {"type": "string"}, "description": {"type": "string"}, "negated_description": {"type": "string"}, "category": {"type": "string"}, "type": {"type": "string"}}, "required": ["name", "type"]}, "FeatureWithoutName": {"type": "object", "properties": {"description": {"type": "string"}, "negated_description": {"type": "string"}, "category": {"type": "string"}, "type": {"type": "string"}}, "required": []}, "Category": {"type": "object", "properties": {"name": {"type": "string", "description": "Category name"}, "color": {"type": "string", "description": "Color to use for category (HEX)"}, "abbreviation": {"type": "string", "description": "Abbreviated category name"}}, "required": ["name"]}, "Context": {"type": "object", "properties": {"config": {"type": "object"}}}, "Changes": {"type": "object", "additionalProperties": {"oneOf": [{"type": "string"}, {"type": "number"}]}}, "Message": {"type": "object", "properties": {"code": {"type": "string", "minimum": 100, "maximum": 600}, "message": {"type": "string"}}, "required": ["code", "message"]}, "TestMessage": {"allOf": [{"$ref": "#/components/schemas/Message"}, {"type": "object", "properties": {"data": {}}}]}}, "responses": {"SuccessMessage": {"description": "Success message", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "ErrorMessage": {"description": "Error message", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}}}, "servers": [{"url": "http://localhost:3000/", "description": "Internal staging server for testing"}, {"url": "http://sibyl.lids.mit.edu:3000/", "description": "Main production server"}]} \ No newline at end of file +{"info": {"description": "\n

\n\u201cDAI-Lab\u201d\nAn open source project from Data to AI Lab at MIT.\n

\n\n# What is Sibyl?\n**Sibyl** is a highly configurable API for supporting the full human-ML decision making workflow.\n\n# License\n\n[The MIT License](https://github.com/sibyl-dev/sibyl-api/blob/master/LICENSE)\n", "title": "Sibyl RestAPI Documentation", "version": "1.0.0"}, "paths": {"/api/v1/entities/{eid}/": {"put": {"summary": "Modify an Entity by ID", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/EntityWithoutEid"}}}}, "responses": {"200": {"description": "Entity that was modified", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Entity"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "eid", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to modify/create"}], "tags": ["entity"]}, "get": {"summary": "Get an Entity by ID", "responses": {"200": {"description": "Entity to be returned", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Entity"}, "example": {"eid": "123", "features": {"row_1": {"f1": 10, "f2": 20}, "row_2": {"f1": 20, "f2": 30}}, "row_ids": ["row_1", "row_2"], "labels": {"row_1": 1, "row_2": 0}, "property": {"group_id": "group_1"}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "eid", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to get"}, {"name": "row_id", "in": "query", "schema": {"type": "string"}, "description": "ID of the row to get for the entity"}], "tags": ["entity"]}}, "/api/v1/entities/": {"put": {"summary": "Insert or modify multiple entities", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Entity"}}}}}}}, "responses": {"200": {"description": "All entities", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Entity"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["entity"]}, "get": {"summary": "Get all Entities", "description": "If group ID is specified, return entities of that group.
", "responses": {"200": {"description": "All entities", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/EntitySimplified"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "group_id", "in": "query", "schema": {"type": "string"}, "required": false, "description": "ID of the group to filter entities"}], "tags": ["entity"]}}, "/api/v1/groups/": {"get": {"summary": "Get all EntityGroups", "responses": {"200": {"description": "All EntityGroups", "content": {"application/json": {"schema": {"type": "object", "properties": {"groups": {"type": "array", "items": {"type": "object", "properties": {"group_id": {"type": "string"}, "property": {"type": "object"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["group"]}}, "/api/v1/groups/{group_id}/": {"get": {"summary": "Get an EntityGroup by ID", "responses": {"200": {"description": "Group to be returned", "content": {"application/json": {"schema": {"type": "object", "properties": {"group_id": {"type": "string"}, "property": {"type": "object"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "group_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the group to get"}], "tags": ["group"]}}, "/api/v1/features/{feature_name}/": {"put": {"summary": "Update or create a feature by name", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FeatureWithoutName"}}}}, "responses": {"200": {"description": "Feature information", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feature"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "feature_name", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the feature to update"}], "tags": ["feature"]}, "get": {"summary": "Get a feature by name", "responses": {"200": {"description": "Feature information", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Feature"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "feature_name", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the feature to get info for"}], "tags": ["feature"]}}, "/api/v1/features/": {"put": {"summary": "Update or create multiple features", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "responses": {"200": {"description": "All added features", "content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}, "get": {"summary": "Get all features", "responses": {"200": {"description": "All features", "content": {"application/json": {"schema": {"type": "object", "properties": {"features": {"type": "array", "items": {"$ref": "#/components/schemas/Feature"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}}, "/api/v1/categories/": {"put": {"summary": "Add or modify categories", "requestBody": {"content": {"application/json": {"schema": {"type": "object", "properties": {"categories": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "responses": {"200": {"description": "Categories added or modified", "content": {"application/json": {"schema": {"type": "object", "properties": {"entities": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}, "get": {"summary": "Get all feature categories", "responses": {"200": {"description": "All categories", "content": {"application/json": {"schema": {"type": "object", "properties": {"categories": {"type": "array", "items": {"$ref": "#/components/schemas/Category"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["feature"]}}, "/api/v1/models/{model_id}/": {"put": {"summary": "Update or create a model by id.", "description": "Note: Does not currently support updating realapp.", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/FullModelNoRealapp"}}}}, "responses": {"200": {"description": "Information about update model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Model"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "Name of the model to update/create"}], "tags": ["model"]}, "get": {"summary": "Get a Model by ID", "responses": {"200": {"description": "Information about the model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Model"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the model to get information about"}], "tags": ["model"]}}, "/api/v1/models/": {"get": {"summary": "Get all Models", "responses": {"200": {"description": "All models", "content": {"application/json": {"schema": {"type": "object", "properties": {"models": {"type": "array", "items": {"type": "object", "properties": {"model_id": {"type": "string"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["model"]}}, "/api/v1/importance/": {"get": {"summary": "Get Model feature importances", "responses": {"200": {"description": "Feature importance for the model", "content": {"application/json": {"schema": {"type": "object", "properties": {"importances": {"type": "array", "items": {"type": "object", "properties": {"feature": {"type": "string"}, "importance": {"type": "float"}}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the model to get importances for"}], "tags": ["model"]}}, "/api/v1/prediction/": {"get": {"summary": "Get a model prediction", "responses": {"200": {"description": "Prediction", "content": {"application/json": {"schema": {"type": "object", "properties": {"output": {"type": "number"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "model_id", "in": "query", "schema": {"type": "string"}, "required": true, "description": "ID of the model to use to predict"}, {"name": "eid", "in": "query", "schema": {"type": "string"}, "required": true, "description": "ID of the entity to predict on"}, {"name": "row_id", "in": "query", "schema": {"type": "string"}, "description": "ID of row to predict on (defaults to first row)"}], "tags": ["model"]}}, "/api/v1/multi_prediction/": {"post": {"summary": "Get multiple model predictions.", "description": "If given multiple eids, return one prediction per eid (first row). If given one eid, return one prediction per row_id. Only one of eids and row_ids can contain more than one element.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "row_ids to select from the given eid"}, "return_proba": {"type": "boolean"}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Model predictions", "content": {"application/json": {"schema": {"type": "object", "properties": {"predictions": {"type": "array", "items": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["model"]}}, "/api/v1/context/{context_id}/": {"put": {"summary": "Update or create a context", "requestBody": {"content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "responses": {"200": {"description": "Information about update model", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "context_id", "in": "path", "schema": {"type": "string"}, "description": "ID of the context to update/create", "required": true}], "tags": ["context"]}, "get": {"summary": "Get a Context by ID", "responses": {"200": {"description": "Context to be returned", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Context"}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "parameters": [{"name": "context_id", "in": "path", "schema": {"type": "string"}, "required": true, "description": "ID of the context to get"}], "tags": ["context"]}}, "/api/v1/contexts/": {"get": {"summary": "Get all Context ids", "responses": {"200": {"description": "Get all contexts", "content": {"application/json": {"schema": {"type": "object", "properties": {"contexts": {"type": "array", "items": {"$ref": "#/components/schemas/Context"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["context"]}}, "/api/v1/contributions/": {"post": {"summary": "Get feature contributions", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}}, "required": ["eid", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "object", "additionalProperties": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/multi_contributions/": {"post": {"summary": "Get feature contributions for multiple eids, or for multiple row_ids in a single entity", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}, "row_ids": {"type": "array", "items": {"type": "string"}}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "object", "properties": {"Feature Name": {"type": "string"}, "Feature Value": {"type": ["string", "number"]}, "Contribution": {"type": "number"}, "Average\\/Mode": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/single_change_predictions/": {"post": {"summary": "Change one feature value at a time and get the resulting model predictions.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}, "return_proba": {"type": "boolean"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting predictions after making changes", "content": {"application/json": {"schema": {"type": "object", "properties": {"predictions": {"type": "array", "items": {"type": "array", "items": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/modified_prediction/": {"post": {"summary": "Get the resulting model prediction after making all changes", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}, "return_proba": {"type": "boolean"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting predictions after making changes", "content": {"application/json": {"schema": {"type": "object", "properties": {"prediction": {"type": "number"}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/modified_contribution/": {"post": {"summary": "Get the feature contribution of an entity modified by changes", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eid": {"type": "string"}, "row_id": {"type": "string"}, "model_id": {"type": "string"}, "changes": {"$ref": "#/components/schemas/Changes"}}, "required": ["eid", "model_id", "changes"]}}}}, "responses": {"200": {"description": "Resulting feature contribution after making changes to entity", "content": {"application/json": {"schema": {"type": "object", "properties": {"contribution": {"type": "object", "properties": {"Feature Value": {"type": ["string", "number"]}, "Contribution": {"type": "number"}, "Average\\/Mode": {"type": ["string", "number"]}}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}, "/api/v1/similar_entities/": {"post": {"summary": "Get nearest neighbors for list of eids, or for all rows in a single eid", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"eids": {"type": "array", "items": {"type": "string"}}, "model_id": {"type": "string"}}, "required": ["eids", "model_id"]}}}}, "responses": {"200": {"description": "Feature contributions", "content": {"application/json": {"schema": {"type": "object", "properties": {"contributions": {"type": "array", "items": {"type": "number"}}}}}}}, "400": {"$ref": "#/components/responses/ErrorMessage"}}, "tags": ["computing"]}}}, "definitions": {}, "openapi": "3.0.2", "tags": [{"name": "entity", "description": "Entities being analyzed"}, {"name": "feature", "description": "ML model input features"}, {"name": "model", "description": "The full ML model pipeline"}, {"name": "context", "description": "Application-specific configurations"}, {"name": "group", "description": "Entity groups"}, {"name": "computing", "description": "Computed explanations and other ML augmenting information"}], "components": {"schemas": {"Referral": {"type": "object", "properties": {"referral_id": {"type": "string"}, "property": {"type": "object", "additionalProperties": {}}}, "required": ["event_id"]}, "Event": {"type": "object", "properties": {"event_id": {"type": "string"}, "datetime": {"type": "string"}, "type": {"type": "string"}, "property": {"type": "object", "additionalProperties": {}}}, "required": ["event_id", "message"]}, "Entity": {"type": "object", "properties": {"eid": {"type": "string", "description": "Entity ID"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "features": {"type": "object", "description": "Feature values"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "EntityWithoutEid": {"type": "object", "properties": {"row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "features": {"type": "object", "description": "Feature values"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "EntitySimplified": {"type": "object", "properties": {"eid": {"type": "string", "readOnly": true, "description": "Entity ID"}, "row_ids": {"type": "array", "items": {"type": "string"}, "description": "Row IDs"}, "labels": {"type": "object", "description": "Ground-truth labels. Only included if available"}, "property": {"type": "object", "additionalProperties": {}, "description": "Additional properties"}}, "required": ["eid"]}, "Model": {"type": "object", "properties": {"id": {"type": "string"}, "description": {"type": "string"}, "performance": {"type": "string"}}, "required": ["id"]}, "FullModelNoRealapp": {"type": "object", "properties": {"description": {"type": "string"}, "performance": {"type": "string"}, "importances": {"type": "object"}, "training_set_id": {"type": "string"}}}, "Feature": {"type": "object", "properties": {"name": {"type": "string"}, "description": {"type": "string"}, "negated_description": {"type": "string"}, "category": {"type": "string"}, "type": {"type": "string"}}, "required": ["name", "type"]}, "FeatureWithoutName": {"type": "object", "properties": {"description": {"type": "string"}, "negated_description": {"type": "string"}, "category": {"type": "string"}, "type": {"type": "string"}}, "required": []}, "Category": {"type": "object", "properties": {"name": {"type": "string", "description": "Category name"}, "color": {"type": "string", "description": "Color to use for category (HEX)"}, "abbreviation": {"type": "string", "description": "Abbreviated category name"}}, "required": ["name"]}, "Context": {"type": "object", "properties": {"config": {"type": "object"}}}, "Changes": {"type": "object", "additionalProperties": {"oneOf": [{"type": "string"}, {"type": "number"}]}}, "Message": {"type": "object", "properties": {"code": {"type": "string", "minimum": 100, "maximum": 600}, "message": {"type": "string"}}, "required": ["code", "message"]}, "TestMessage": {"allOf": [{"$ref": "#/components/schemas/Message"}, {"type": "object", "properties": {"data": {}}}]}}, "responses": {"SuccessMessage": {"description": "Success message", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}, "ErrorMessage": {"description": "Error message", "content": {"application/json": {"schema": {"$ref": "#/components/schemas/Message"}}}}}}, "servers": [{"url": "http://localhost:3000/", "description": "Internal staging server for testing"}, {"url": "http://sibyl.lids.mit.edu:3000/", "description": "Main production server"}]} \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 733e867..323e24c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ license = "MIT" name = "sibyl-api" packages = [{include = "sibyl"}] readme = "README.md" -version = "0.1.0.2" +version = "0.1.1" repository = "https://github.com/DAI-Lab/sibyl-api" diff --git a/sibyl/__init__.py b/sibyl/__init__.py index fc91319..0caae06 100644 --- a/sibyl/__init__.py +++ b/sibyl/__init__.py @@ -2,7 +2,7 @@ __author__ = """MIT Data To AI Lab""" __email__ = "dailabmit@gmail.com" -__version__ = "0.1.0.2" +__version__ = "0.1.1" import os diff --git a/sibyl/resources/computing.py b/sibyl/resources/computing.py index 56e20aa..90e0478 100644 --- a/sibyl/resources/computing.py +++ b/sibyl/resources/computing.py @@ -135,8 +135,7 @@ def get_entities_table(eids, row_ids, all_rows=False): class SingleChangePredictions(Resource): def post(self): """ - Get the resulting model predictions after changing the value of a single feature - of an entity for each feature-value pair provided in the request. + Change one feature value at a time and get the resulting model predictions. --- tags: - computing