### 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 <kevinhu.sh@gmail.com>tags/v0.14.0
| @@ -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") | |||
| @@ -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): | |||
| @@ -187,7 +187,9 @@ curl --request DELETE \ | |||
| --url http://{address}/api/v1/datasets \ | |||
| --header 'Content-Type: application/json' \ | |||
| --header 'Authorization: Bearer <YOUR_API_KEY>' \ | |||
| --data '{"ids": ["test_1", "test_2"]}' | |||
| --data '{ | |||
| "ids": ["test_1", "test_2"] | |||
| }' | |||
| ``` | |||
| #### Request parameters | |||
| @@ -243,7 +245,7 @@ curl --request PUT \ | |||
| --header 'Authorization: Bearer <YOUR_API_KEY>' \ | |||
| --data ' | |||
| { | |||
| "name": "updated_dataset", | |||
| "name": "updated_dataset" | |||
| }' | |||
| ``` | |||
| @@ -1152,7 +1154,7 @@ curl --request PUT \ | |||
| --data ' | |||
| { | |||
| "content": "ragflow123", | |||
| "important_keywords": [], | |||
| "important_keywords": [] | |||
| }' | |||
| ``` | |||
| @@ -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> ") | |||
| @@ -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"] | |||
| }' | |||
| @@ -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) | |||