MCPcopy Index your code
hub / github.com/ModelEngine-Group/nexent / upsert_knowledge_record

Function upsert_knowledge_record

backend/database/knowledge_db.py:92–147  ·  view source on GitHub ↗

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])

Source from the content-addressed store, hash-verified

90
91
92def 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

Calls 8

get_db_sessionFunction · 0.90
create_knowledge_recordFunction · 0.85
commitMethod · 0.80
firstMethod · 0.45
filterMethod · 0.45
queryMethod · 0.45
getMethod · 0.45
flushMethod · 0.45