You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
1.7 KiB
56 lines
1.7 KiB
"""Настройки: LLM-статус, пинг и редактор промптов.""" |
|
from __future__ import annotations |
|
|
|
from flask import Blueprint, jsonify, render_template, request |
|
|
|
from ..auth.decorators import login_required |
|
from ..services.llm_client import get_llm_config, ping_llm |
|
from ..services import prompt_store |
|
|
|
settings_bp = Blueprint('settings', __name__) |
|
|
|
|
|
@settings_bp.route('/settings', methods=['GET']) |
|
@login_required |
|
def settings_page(): |
|
cfg = get_llm_config() |
|
return render_template( |
|
'settings.html', |
|
configured=cfg is not None, |
|
provider=cfg.provider if cfg else None, |
|
model=cfg.model if cfg else None, |
|
base_url=cfg.base_url if cfg else None, |
|
) |
|
|
|
|
|
@settings_bp.route('/settings/prompts', methods=['GET']) |
|
@login_required |
|
def prompts_page(): |
|
return render_template('settings_prompts.html', prompts=prompt_store.get_all()) |
|
|
|
|
|
@settings_bp.route('/api/llm/ping', methods=['POST', 'GET']) |
|
@login_required |
|
def api_llm_ping(): |
|
return jsonify(ping_llm()) |
|
|
|
|
|
@settings_bp.route('/api/ai/prompts', methods=['GET']) |
|
@login_required |
|
def api_get_prompts(): |
|
return jsonify(prompts=prompt_store.get_all()) |
|
|
|
|
|
@settings_bp.route('/api/ai/prompts/<prompt_id>', methods=['PUT']) |
|
@login_required |
|
def api_save_prompt(prompt_id: str): |
|
body = request.get_json(silent=True) or {} |
|
system = str(body.get('system') or '').strip() |
|
user = str(body.get('user') or '').strip() |
|
try: |
|
prompt_store.save_prompt(prompt_id, system, user) |
|
except KeyError as e: |
|
return jsonify(ok=False, error=str(e)), 404 |
|
except Exception as e: |
|
return jsonify(ok=False, error=str(e)), 500 |
|
return jsonify(ok=True)
|
|
|