mirror of
https://github.com/open-webui/open-webui.git
synced 2026-11-15 18:55:07 +03:00
79 lines
2.8 KiB
Python
79 lines
2.8 KiB
Python
"""Models exposed by the selected Open Terminal environment."""
|
|
|
|
from urllib.parse import urlencode
|
|
|
|
from open_webui.utils.agents.session import model_id
|
|
from open_webui.utils.terminals import MissingTerminalContext, get_terminal_json
|
|
|
|
|
|
def model_controls(model):
|
|
controls = {}
|
|
for key, label, values, value_key, label_key, default_key in (
|
|
(
|
|
'reasoning_effort',
|
|
'Reasoning effort',
|
|
'supportedReasoningEfforts',
|
|
'reasoningEffort',
|
|
'label',
|
|
'defaultReasoningEffort',
|
|
),
|
|
('service_tier', 'Service tier', 'serviceTiers', 'id', 'name', 'defaultServiceTier'),
|
|
):
|
|
options = {
|
|
option[value_key]: {
|
|
'label': option.get(label_key) or option[value_key],
|
|
'params': {key: option[value_key]},
|
|
}
|
|
for option in model.get(values, [])
|
|
}
|
|
if options:
|
|
controls[key] = {'label': label, 'options': options}
|
|
if model.get(default_key) in options:
|
|
controls[key]['default'] = model[default_key]
|
|
return controls
|
|
|
|
|
|
async def get_models(request, user, metadata, *, provider=None, cwd=None):
|
|
terminal_id = metadata.get('terminal_id')
|
|
if not terminal_id:
|
|
return []
|
|
try:
|
|
if not cwd:
|
|
directory = await get_terminal_json(request, user, metadata, '/files/cwd')
|
|
cwd = (directory or {}).get('cwd')
|
|
params = {'provider': provider} if provider else {}
|
|
if cwd:
|
|
params['cwd'] = cwd
|
|
path = '/agents' + ('?' + urlencode(params) if params else '')
|
|
catalog = await get_terminal_json(request, user, metadata, path)
|
|
except MissingTerminalContext:
|
|
return []
|
|
if not catalog or catalog.get('protocol_version') != 1:
|
|
return []
|
|
models = [
|
|
{
|
|
'id': model_id({'terminal_id': terminal_id, 'provider': agent['id'], 'model': model['id']}),
|
|
'name': f'{agent["id"]}/{model["id"]}',
|
|
'owned_by': 'terminal',
|
|
'object': 'model',
|
|
'agent': {'terminal_id': terminal_id, 'provider': agent['id'], 'model': model['id']},
|
|
'info': {
|
|
'params': {'model_controls': model_controls(model)},
|
|
'meta': {
|
|
'capabilities': {
|
|
'vision': True,
|
|
'file_upload': True,
|
|
'web_search': False,
|
|
'image_generation': False,
|
|
'code_interpreter': False,
|
|
'builtin_tools': False,
|
|
}
|
|
},
|
|
},
|
|
}
|
|
for agent in catalog.get('agents', [])
|
|
if agent.get('available')
|
|
for model in agent.get('models', [])
|
|
]
|
|
return list({model['id']: model for model in models}.values())
|