| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- """Explicit knowledge destinations shared by preparation and offline import."""
- import re
- from pathlib import Path
- AGENTS = ('business', 'talent')
- def prepared_path(root, agent):
- if agent not in AGENTS:
- raise ValueError('unknown_knowledge_agent')
- return Path(root) / 'knowledge' / ('prepared' if agent == 'business' else 'prepared-talent')
- def for_agent(settings, agent, db_prefix=None):
- if agent not in AGENTS:
- raise ValueError('unknown_knowledge_agent')
- result = dict(settings)
- business = settings['MILVUS_DB_PREFIX']
- talent = settings.get('TALENT_MILVUS_DB_PREFIX', 'talent_knowledge')
- prefix = db_prefix if db_prefix is not None else business if agent == 'business' else talent
- if not isinstance(prefix, str) or not re.fullmatch(r'[A-Za-z][A-Za-z0-9_]{0,99}', prefix):
- raise ValueError('invalid_database_prefix')
- if business == talent or prefix == (talent if agent == 'business' else business):
- raise ValueError('knowledge_agent_prefix_collision')
- result.update(MILVUS_DB_PREFIX=prefix, KNOWLEDGE_AGENT=agent)
- return result
- def records_agent(records):
- agents = {record.get('knowledge_agent', 'business') for record in records}
- if len(agents) != 1 or not agents <= set(AGENTS):
- raise ValueError('mixed_or_unknown_knowledge_agents')
- return next(iter(agents))
- def check_records(records, settings):
- if records_agent(records) != settings.get('KNOWLEDGE_AGENT', 'business'):
- raise ValueError('knowledge_agent_mismatch')
- def talent_library(record):
- if record.get('knowledge_agent') != 'talent':
- return None
- libraries = {'人才政策和服务': 'article', '人才政策问答': 'qa', '青浦区惠企政策事项': 'policy'}
- try:
- return libraries[record['collection']]
- except KeyError:
- raise ValueError('unknown_talent_collection') from None
|