llmage/wwwroot/api/get_plaza_models.dspy
yumoqing 1c25542e72 feat: cockpit-style model plaza with search, category tabs, provider sidebar
New layout:
- Search bar (top) with fuzzy name/description match
- Category tabs (wrapping, single-select)
- Provider sidebar (left, single-select)
- Card grid (right, sorted by name, refreshed on filter change)
- Both category/provider unselected = all published models

Added get_plaza_models() for flat filtered model listing.
Supports combined filtering: provider + category + search.
2026-07-28 17:55:17 +08:00

34 lines
1.1 KiB
Plaintext

import json
providerid = (params_kw or {}).get('providerid', '')
catelogid = (params_kw or {}).get('catelogid', '')
search = (params_kw or {}).get('search', '').strip()
data = await request._run_ns.get_llms_by_catelog_to_customer(
catelogid=catelogid if catelogid else None,
orderby='a.name'
)
result = []
for cate in data:
for llm in cate.llms:
if providerid and llm.providerid != providerid:
continue
if search and search.lower() not in (llm.name or '').lower():
if search.lower() not in (llm.description or '').lower():
continue
result.append({
'id': llm.id,
'name': llm.name,
'model': llm.model,
'description': llm.description or '',
'iconid': llm.iconid,
'providerid': llm.providerid,
'provider_name': getattr(llm, 'provider_name', getattr(llm, 'orgname', '')),
'catelog_id': getattr(llm, 'catelog_id', ''),
'catelogname': getattr(llm, 'catelogname', ''),
'pricing_display': getattr(llm, 'pricing_display', []),
})
return json.dumps(result, ensure_ascii=False)