From 567a7563e74edb93959c7e6e6a376d8af2ee38b5 Mon Sep 17 00:00:00 2001 From: liuhua <10215101452@stu.ecnu.edu.cn> Date: Tue, 12 Nov 2024 17:14:33 +0800 Subject: [PATCH] Fix bugs in api and add examples (#3353) ### What problem does this PR solve? Fix bugs in api. Add simple examples for api. ### Type of change - [x] Bug Fix (non-breaking change which fixes an issue) - [x] New Feature (non-breaking change which adds functionality) --------- Co-authored-by: liuhua <10215101452@stu.ecun.edu.cn> Co-authored-by: Kevin Hu --- api/apps/sdk/dataset.py | 14 +++--- api/db/services/knowledgebase_service.py | 16 +++++++ docs/references/http_api_reference.md | 8 ++-- docs/references/python_api_reference.md | 2 +- example/http/simple_example.sh | 52 ++++++++++++++++++++++ example/sdk/simple_example.py | 55 ++++++++++++++++++++++++ 6 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 example/http/simple_example.sh create mode 100644 example/sdk/simple_example.py diff --git a/api/apps/sdk/dataset.py b/api/apps/sdk/dataset.py index 7f3ac81f3..179d9c2bd 100644 --- a/api/apps/sdk/dataset.py +++ b/api/apps/sdk/dataset.py @@ -487,12 +487,14 @@ def list(tenant_id): """ id = request.args.get("id") name = request.args.get("name") - kbs = KnowledgebaseService.query(id=id, name=name, status=1) - if not kbs: - return get_error_data_result(message="The dataset doesn't exist") - for kb in kbs: - if not KnowledgebaseService.accessible(kb_id=kb.id,user_id=tenant_id): - return get_error_data_result(message=f"You don't own the dataset {kb.id}") + if id: + kbs = KnowledgebaseService.get_kb_by_id(id,tenant_id) + if not kbs: + return get_error_data_result(f"You don't own the dataset {id}") + if name: + kbs = KnowledgebaseService.get_kb_by_name(name,tenant_id) + if not kbs: + return get_error_data_result(f"You don't own the dataset {name}") page_number = int(request.args.get("page", 1)) items_per_page = int(request.args.get("page_size", 30)) orderby = request.args.get("orderby", "create_time") diff --git a/api/db/services/knowledgebase_service.py b/api/db/services/knowledgebase_service.py index 93a1a7c74..0413d5fc7 100644 --- a/api/db/services/knowledgebase_service.py +++ b/api/db/services/knowledgebase_service.py @@ -189,6 +189,22 @@ class KnowledgebaseService(CommonService): return False return True + @classmethod + @DB.connection_context() + def get_kb_by_id(cls, kb_id, user_id): + kbs = cls.model.select().join(UserTenant, on=(UserTenant.tenant_id == Knowledgebase.tenant_id) + ).where(cls.model.id == kb_id, UserTenant.user_id == user_id).paginate(0, 1) + kbs = kbs.dicts() + return list(kbs) + + @classmethod + @DB.connection_context() + def get_kb_by_name(cls, kb_name, user_id): + kbs = cls.model.select().join(UserTenant, on=(UserTenant.tenant_id == Knowledgebase.tenant_id) + ).where(cls.model.name == kb_name, UserTenant.user_id == user_id).paginate(0, 1) + kbs = kbs.dicts() + return list(kbs) + @classmethod @DB.connection_context() def accessible4deletion(cls, kb_id, user_id): diff --git a/docs/references/http_api_reference.md b/docs/references/http_api_reference.md index 1c4f53f41..862953745 100644 --- a/docs/references/http_api_reference.md +++ b/docs/references/http_api_reference.md @@ -187,7 +187,9 @@ curl --request DELETE \ --url http://{address}/api/v1/datasets \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer ' \ - --data '{"ids": ["test_1", "test_2"]}' + --data '{ + "ids": ["test_1", "test_2"] + }' ``` #### Request parameters @@ -243,7 +245,7 @@ curl --request PUT \ --header 'Authorization: Bearer ' \ --data ' { - "name": "updated_dataset", + "name": "updated_dataset" }' ``` @@ -1152,7 +1154,7 @@ curl --request PUT \ --data ' { "content": "ragflow123", - "important_keywords": [], + "important_keywords": [] }' ``` diff --git a/docs/references/python_api_reference.md b/docs/references/python_api_reference.md index ff3682e19..1a481b441 100644 --- a/docs/references/python_api_reference.md +++ b/docs/references/python_api_reference.md @@ -1379,7 +1379,7 @@ assistant = assistant[0] session = assistant.create_session() print("\n==================== Miss R =====================\n") -print(assistant.get_prologue()) +print("Hello. What can I do for you?") while True: question = input("\n==================== User =====================\n> ") diff --git a/example/http/simple_example.sh b/example/http/simple_example.sh new file mode 100644 index 000000000..492d902d0 --- /dev/null +++ b/example/http/simple_example.sh @@ -0,0 +1,52 @@ +# +# Copyright 2024 The InfiniFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Create a dataset +echo -e "\n-- Create a dataset" +curl --request POST \ + --url http://localhost:9380/api/v1/datasets \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ragflow-IzZmY1MGVhYTBhMjExZWZiYTdjMDI0Mm' \ + --data '{ + "name": "test" + }' + +# Update the dataset +echo -e "\n-- Update the dataset" +curl --request PUT \ + --url http://localhost:9380/api/v1/datasets/2e898768a0bc11efb46a0242ac120006 \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ragflow-IzZmY1MGVhYTBhMjExZWZiYTdjMDI0Mm' \ + --data ' + { + "name": "updated_dataset" + }' + +# List datasets +echo -e "\n-- List datasets" +curl --request GET \ + --url http://127.0.0.1:9380/api/v1/datasets \ + --header 'Authorization: Bearer ragflow-IzZmY1MGVhYTBhMjExZWZiYTdjMDI0Mm' + +# Delete datasets +echo -e "\n-- Delete datasets" +curl --request DELETE \ + --url http://localhost:9380/api/v1/datasets \ + --header 'Content-Type: application/json' \ + --header 'Authorization: Bearer ragflow-IzZmY1MGVhYTBhMjExZWZiYTdjMDI0Mm' \ + --data '{ + "ids": ["301298b8a0bc11efa0440242ac120006"] + }' diff --git a/example/sdk/simple_example.py b/example/sdk/simple_example.py new file mode 100644 index 000000000..252ed02c0 --- /dev/null +++ b/example/sdk/simple_example.py @@ -0,0 +1,55 @@ +# +# Copyright 2024 The InfiniFlow Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +''' +The example is about CRUD operations (Create, Read, Update, Delete) on a dataset. +''' + +from ragflow_sdk import RAGFlow +import sys + +HOST_ADDRESS = "http://127.0.0.1" +API_KEY = "ragflow-IzZmY1MGVhYTBhMjExZWZiYTdjMDI0Mm" + +try: + # create a ragflow instance + ragflow_instance = RAGFlow(api_key=API_KEY, base_url=HOST_ADDRESS) + + # crate a dataset instance + dataset_instance = ragflow_instance.create_dataset(name="dataset_instance") + + # update the dataset instance + updated_message = {"name":"updated_dataset"} + updated_dataset = dataset_instance.update(updated_message) + + # get the dataset (list datasets) + dataset_list = ragflow_instance.list_datasets(id=dataset_instance.id) + dataset_instance_2 = dataset_list[0] + print(dataset_instance) + print(dataset_instance_2) + + # delete the dataset (delete datasets) + to_be_deleted_datasets = [dataset_instance.id] + ragflow_instance.delete_datasets(ids=to_be_deleted_datasets) + + print("test done") + sys.exit(0) + +except Exception as e: + print(str(e)) + sys.exit(-1) + +