### 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
| """ | """ | ||||
| id = request.args.get("id") | id = request.args.get("id") | ||||
| name = request.args.get("name") | 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)) | page_number = int(request.args.get("page", 1)) | ||||
| items_per_page = int(request.args.get("page_size", 30)) | items_per_page = int(request.args.get("page_size", 30)) | ||||
| orderby = request.args.get("orderby", "create_time") | orderby = request.args.get("orderby", "create_time") |
| return False | return False | ||||
| return True | 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 | @classmethod | ||||
| @DB.connection_context() | @DB.connection_context() | ||||
| def accessible4deletion(cls, kb_id, user_id): | def accessible4deletion(cls, kb_id, user_id): |
| --url http://{address}/api/v1/datasets \ | --url http://{address}/api/v1/datasets \ | ||||
| --header 'Content-Type: application/json' \ | --header 'Content-Type: application/json' \ | ||||
| --header 'Authorization: Bearer <YOUR_API_KEY>' \ | --header 'Authorization: Bearer <YOUR_API_KEY>' \ | ||||
| --data '{"ids": ["test_1", "test_2"]}' | |||||
| --data '{ | |||||
| "ids": ["test_1", "test_2"] | |||||
| }' | |||||
| ``` | ``` | ||||
| #### Request parameters | #### Request parameters | ||||
| --header 'Authorization: Bearer <YOUR_API_KEY>' \ | --header 'Authorization: Bearer <YOUR_API_KEY>' \ | ||||
| --data ' | --data ' | ||||
| { | { | ||||
| "name": "updated_dataset", | |||||
| "name": "updated_dataset" | |||||
| }' | }' | ||||
| ``` | ``` | ||||
| --data ' | --data ' | ||||
| { | { | ||||
| "content": "ragflow123", | "content": "ragflow123", | ||||
| "important_keywords": [], | |||||
| "important_keywords": [] | |||||
| }' | }' | ||||
| ``` | ``` | ||||
| session = assistant.create_session() | session = assistant.create_session() | ||||
| print("\n==================== Miss R =====================\n") | print("\n==================== Miss R =====================\n") | ||||
| print(assistant.get_prologue()) | |||||
| print("Hello. What can I do for you?") | |||||
| while True: | while True: | ||||
| question = input("\n==================== User =====================\n> ") | question = input("\n==================== User =====================\n> ") |
| # | |||||
| # 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"] | |||||
| }' |
| # | |||||
| # 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) | |||||