diff --git a/callbacks.py b/callbacks.py index 2b392e7..a441782 100644 --- a/callbacks.py +++ b/callbacks.py @@ -10,6 +10,7 @@ from aiogram.types import ( from commands import * from config import * from supergenerator import * +from trust import * @router.callback_query(F.data.startswith("prov%")) @@ -37,11 +38,12 @@ async def select_provider_callback(callback: CallbackQuery): shown.add(base_model) i += 1 + m_trust = round(get_display_trust([provider, base_model])) full_model = f"{provider}*{base_model}" if full_model == user_model or user_model.startswith(full_model + "*"): - text = f"{base_model} ✅" + text = f"{base_model} ({m_trust}%) ✅" else: - text = base_model + text = f"{base_model} ({m_trust}%)" if MODELS[provider][model].get("alias"): base_model = MODELS[provider][model].get("alias") diff --git a/helpers.py b/helpers.py index 359603e..3193275 100644 --- a/helpers.py +++ b/helpers.py @@ -295,6 +295,8 @@ def expand_auto_models(): result = [] for entry in AUTO_MODELS: parts = entry.split("*", 2) + if len(parts) < 2: + continue provider = parts[0] model = parts[1] suffix = parts[2] if len(parts) >= 3 else None diff --git a/supergenerator.py b/supergenerator.py index ec94f44..6e9ca84 100644 --- a/supergenerator.py +++ b/supergenerator.py @@ -126,7 +126,13 @@ async def generate( await msg.edit_text(make_graph(message, process)) expanded = expand_auto_models() - expanded = sorted(expanded, key=lambda e: get_trust(e.split("*"))[1], reverse=True) + expanded = [ + e for _, e in sorted( + enumerate(expanded), + key=lambda x: get_trust(x[1].split("*"))[1] + (5 if x[0] == 0 else 0), + reverse=True + ) + ] last_type = "" for entry in expanded: if last_type == "da": @@ -393,7 +399,10 @@ async def openai_generate_text( if s > 0: text += f"*... <{s} обрезано>*" if text == "": - text = "(пустой ответ)" + return { + "type": "error", + "text": "модель вернула пустой ответ" + } return { "type": "da", "text": text diff --git a/trust.py b/trust.py index ae6b96a..885311b 100644 --- a/trust.py +++ b/trust.py @@ -32,5 +32,16 @@ def get_trust(m: list): return models_trust.get(m[0], 80.0), models_trust.get(trust_key(m), 60.0) +def get_display_trust(m: list): + base_key = m[0] + '*' + m[1] + values = [] + for key, val in models_trust.items(): + if key == base_key or key.startswith(base_key + '*'): + values.append(val) + if not values: + return 60.0 + return sum(values) / len(values) + + def set_trust(m: str, trust: float): models_trust[m] = trust \ No newline at end of file