async def sync_model_to_llm(ns={}): import aiohttp async def get_sync_orgid(sor): if ns.get('orgid'): return ns.get('orgid') user_li = await sor.R('users', {'id': await get_user()}) return user_li[0].get('orgid') if user_li else '' # 从数据库读取domain和Bearer token db = DBPools() async with db.sqlorContext('kboss') as sor: domain_li = await sor.R('params', {'pname': 'cntoai_domain'}) user_key = await sor.R('params', {'pname': 'cntoai_already_sync_user_key'}) if not domain_li or not user_key: return { 'status': False, 'msg': '未找到params domain或Bearer token' } domain = domain_li[0]['pvalue'] bearer_token = user_key[0]['pvalue'] sync_orgid = await get_sync_orgid(sor) if not sync_orgid: return { 'status': False, 'msg': '未找到当前用户所属机构' } url = f"{domain}/llmage/list_llms" header = { 'Authorization': f'Bearer {bearer_token}', 'Content-Type': 'application/json', } try: async with aiohttp.ClientSession() as session: async with session.get(url, headers=header) as response: result = await response.json() if not result: return { 'status': False, 'msg': '没有找到模型列表' } # 插入数据库 db = DBPools() async with db.sqlorContext('kboss') as sor: new_llms_count = 0 sync_products_count = 0 new_llms_list = [] for category_list in result: for item in category_list.get('llms', []): provider_orgcode = item.get('providerid') provider_name = item.get('provider_name') or item.get('providerid') or '模型供应商' if not provider_orgcode: continue provider_ns = { 'orgid': sync_orgid, 'orgcode': provider_orgcode, 'orgname': provider_name, 'name': provider_name, 'description': provider_name, 'appid': item.get('upappid') or '', 'providerkey': provider_orgcode, 'state': '1', 'start_date': item.get('enabled_date'), 'end_date': item.get('expired_date') or '9999-12-31', 'salemode': ns.get('salemode') or '0', 'settle_mode': ns.get('settle_mode') or '0', 'settle_datep': ns.get('settle_datep') } provider_res = await path_call('../provider/providerAdd.dspy', provider_ns) if not provider_res.get('status'): return { 'status': False, 'msg': '供应商同步失败, %s, %s' % (provider_name, provider_res.get('msg')) } provider_data = provider_res.get('data') or {} provider_orgid = provider_data.get('provider_orgid') or provider_data.get('orgid') protocolid = provider_data.get('protocolid') if not provider_orgid or not protocolid: return { 'status': False, 'msg': '供应商同步失败, 未返回provider_orgid或protocolid, %s' % provider_name } product_ns = { 'providerid': provider_orgid, 'providerpid': item.get('id'), 'protocolid': protocolid, 'name': item.get('name'), 'description': item.get('description'), 'ptype': item.get('catelogname') or category_list.get('catelogname') or '', 'state': '1', 'product_code': item.get('model'), 'reseller_orgid': sync_orgid, 'salemode': ns.get('salemode') or '0', 'productgroup': item.get('catelog_id') or item.get('catelogid') or category_list.get('catelogid'), 'label': item.get('catelogname') or category_list.get('catelogname'), 'unit': ns.get('unit'), 'discount': ns.get('discount'), 'floorprice': ns.get('floorprice') } product_res = await path_call('../product/productAdd.dspy', product_ns) if not product_res.get('status'): return { 'status': False, 'msg': '产品同步失败, %s, %s' % (item.get('name'), product_res.get('msg')) } sync_products_count += 1 # 查找数据库中是否已经存在,不存在就插入 exist_llm = await sor.R('llm', {'model': item.get('model')}) if exist_llm: continue new_llms = { 'id': item.get('id'), 'name': item.get('name'), 'model': item.get('model'), 'description': item.get('description'), 'llmcatelogid': item.get('catelog_id') or item.get('catelogid'), 'iconid': item.get('iconid'), 'upappid': item.get('upappid'), 'apiname': item.get('apiname'), 'providerid': provider_orgid, 'ownerid': item.get('ownerid') or '0', 'enabled_date': item.get('enabled_date'), 'expired_date': item.get('expired_date'), 'query_apiname': item.get('query_apiname') or '', 'query_period': item.get('query_period'), 'ppid': protocolid, } new_llms_count += 1 new_llms_list.append(new_llms.get('model')) await sor.C('llm', new_llms) return { 'status': True, 'msg': f"sync_llm_list同步模型成功,共同步{sync_products_count}个产品,共插入{new_llms_count}个模型,模型列表: {new_llms_list}" } except Exception as e: return { 'status': False, 'msg': f"sync_llm_list同步模型失败, {domain}, {bearer_token}: {e}" } ret = await sync_model_to_llm(params_kw) return ret