Create a knowledge base record Args: query: Dictionary containing all knowledge base data, must include: - index_name: Knowledge base name - knowledge_describe: Knowledge base description - knowledge_status: Knowledge base status - us
(query: Dict[str, Any])
| 23 | |
| 24 | |
| 25 | def create_knowledge_record(query: Dict[str, Any]) -> Dict[str, Any]: |
| 26 | """ |
| 27 | Create a knowledge base record |
| 28 | |
| 29 | Args: |
| 30 | query: Dictionary containing all knowledge base data, must include: |
| 31 | - index_name: Knowledge base name |
| 32 | - knowledge_describe: Knowledge base description |
| 33 | - knowledge_status: Knowledge base status |
| 34 | - user_id: Optional user ID for created_by and updated_by fields |
| 35 | - tenant_id: Optional tenant ID for created_by and updated_by fields |
| 36 | - embedding_model_name: embedding model name for the knowledge base |
| 37 | - preserve_source_file: whether to preserve uploaded source documents (optional) |
| 38 | |
| 39 | Returns: |
| 40 | Dict[str, Any]: Dictionary with at least 'knowledge_id' and 'index_name' |
| 41 | """ |
| 42 | try: |
| 43 | with get_db_session() as session: |
| 44 | # Determine user-facing knowledge base name |
| 45 | knowledge_name = query.get( |
| 46 | "knowledge_name") or query.get("index_name") |
| 47 | |
| 48 | # Prepare data dictionary |
| 49 | group_ids = query.get("group_ids") |
| 50 | data: Dict[str, Any] = { |
| 51 | "knowledge_describe": query.get("knowledge_describe", ""), |
| 52 | "created_by": query.get("user_id"), |
| 53 | "updated_by": query.get("user_id"), |
| 54 | "knowledge_sources": query.get("knowledge_sources", "elasticsearch"), |
| 55 | "tenant_id": query.get("tenant_id"), |
| 56 | "embedding_model_name": query.get("embedding_model_name"), |
| 57 | "embedding_model_id": query.get("embedding_model_id"), |
| 58 | "knowledge_name": knowledge_name, |
| 59 | "group_ids": convert_list_to_string(group_ids) if isinstance(group_ids, list) else group_ids, |
| 60 | "ingroup_permission": query.get("ingroup_permission"), |
| 61 | "preserve_source_file": query.get("preserve_source_file", True), |
| 62 | } |
| 63 | |
| 64 | # For backward compatibility: if caller explicitly provides index_name, |
| 65 | # respect it and do not regenerate; otherwise generate after flush. |
| 66 | explicit_index_name = query.get("index_name") |
| 67 | if explicit_index_name: |
| 68 | data["index_name"] = explicit_index_name |
| 69 | |
| 70 | # Create new record |
| 71 | new_record = KnowledgeRecord(**data) |
| 72 | session.add(new_record) |
| 73 | session.flush() |
| 74 | |
| 75 | # Generate internal index_name for new records when not explicitly provided |
| 76 | if not explicit_index_name: |
| 77 | generated_index_name = _generate_index_name( |
| 78 | new_record.knowledge_id) |
| 79 | new_record.index_name = generated_index_name |
| 80 | session.flush() |
| 81 | |
| 82 | session.commit() |