Create or update a knowledge base record (upsert operation). If a record with the same index_name and tenant_id exists, update it. Otherwise, create a new record. Args: query: Dictionary containing knowledge base data, must include: - index_name: Knowledge base
(query: Dict[str, Any])
| 90 | |
| 91 | |
| 92 | def upsert_knowledge_record(query: Dict[str, Any]) -> Dict[str, Any]: |
| 93 | """ |
| 94 | Create or update a knowledge base record (upsert operation). |
| 95 | If a record with the same index_name and tenant_id exists, update it. |
| 96 | Otherwise, create a new record. |
| 97 | |
| 98 | Args: |
| 99 | query: Dictionary containing knowledge base data, must include: |
| 100 | - index_name: Knowledge base name (used as unique identifier) |
| 101 | - tenant_id: Tenant ID |
| 102 | - knowledge_name: User-facing knowledge base name |
| 103 | - knowledge_describe: Knowledge base description |
| 104 | - knowledge_sources: Knowledge base sources (optional, default 'elasticsearch') |
| 105 | - embedding_model_name: Embedding model name |
| 106 | - user_id: User ID for created_by and updated_by fields |
| 107 | |
| 108 | Returns: |
| 109 | Dict[str, Any]: Dictionary with 'knowledge_id' and 'index_name' |
| 110 | """ |
| 111 | try: |
| 112 | with get_db_session() as session: |
| 113 | # Check if record exists |
| 114 | existing_record = session.query(KnowledgeRecord).filter( |
| 115 | KnowledgeRecord.index_name == query['index_name'], |
| 116 | KnowledgeRecord.tenant_id == query['tenant_id'], |
| 117 | KnowledgeRecord.delete_flag != 'Y' |
| 118 | ).first() |
| 119 | |
| 120 | if existing_record: |
| 121 | # Update existing record |
| 122 | existing_record.knowledge_name = query.get( |
| 123 | 'knowledge_name') or query.get('index_name') |
| 124 | existing_record.knowledge_describe = query.get( |
| 125 | 'knowledge_describe', '') |
| 126 | existing_record.knowledge_sources = query.get( |
| 127 | 'knowledge_sources', 'elasticsearch') |
| 128 | existing_record.embedding_model_name = query.get( |
| 129 | 'embedding_model_name') |
| 130 | existing_record.embedding_model_id = query.get( |
| 131 | 'embedding_model_id') |
| 132 | existing_record.updated_by = query.get('user_id') |
| 133 | existing_record.update_time = func.current_timestamp() |
| 134 | |
| 135 | session.flush() |
| 136 | session.commit() |
| 137 | return { |
| 138 | "knowledge_id": existing_record.knowledge_id, |
| 139 | "index_name": existing_record.index_name, |
| 140 | "knowledge_name": existing_record.knowledge_name, |
| 141 | } |
| 142 | else: |
| 143 | # Create new record |
| 144 | return create_knowledge_record(query) |
| 145 | |
| 146 | except SQLAlchemyError as e: |
| 147 | raise e |
| 148 | |
| 149 |