llm-agent-backend/Target.md
dimitrievgs d27156d152 init
2025-09-12 00:26:19 +03:00

11 KiB
Raw Blame History

https://www.perplexity.ai/search/sozdai-requiremmnts-txt-rkA2KeVJR1y0gtlrZpwecA


доработай чтобы удовлетворить всем требованиям

какие есть открытые агенты, доступные на декстопе вин 10, к которым можно подсоединить как внешние (типа gemini по api) так и внутренние (развернутые в ollama) llm, и чтобы можно было задавать кастомные промпты, типо сделать запрос через curl и получить ссылки на изображения внутри json взять их их и вывести все 4 в чате чтобы визульано было видно что получено, сделать запрос по полученной ссылке на изображения, проанализировать изображение и вывести промпт чтобы сгенерировтаь подобное - а промпт например подать запрос по удаленному эндпоинту. или запросить в некой папке got --diff staged и создать сообщение на основе этого для коммита. или например аналзировать формируемый где-то субтитры видеозвонка и на сонове того брать последние 50000 символов и пропускать через промпт выдавая на выходе предложения по дальнейшему развитию игры в днд. если нужно задай вначале все необходимые вопросы и не приступай к генерации пока не получишь всю нужную информацию. Если нужно а я не даю, продолжай требовать её


  1. Ollama не будет использоваться, только внешние модели пока что MODELS = { "gemini-2.0-flash": { "name": "gemini-2.0-flash", "provider": "openai", "baseUrl": "https://render-service-gsu7.onrender.com/g/v1beta", "apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik", "stream": True, "capabilities": ["vision"], }, "gemini-2.5-flash": { "name": "gemini-2.5-flash", "provider": "openai", "baseUrl": "https://render-service-gsu7.onrender.com/g/v1beta", "apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik", "stream": True, "capabilities": ["vision"], }, "gemini-2.5-flash-preview-05-20": { "name": "gemini-2.5-flash-preview-05-20", "provider": "openai", "baseUrl": "https://render-service-gsu7.onrender.com/g/v1beta", "apiKey": "AIzaSyDpueKFWVqknVKlQn6TdasLmJ2lvAUiBik", "stream": True, "capabilities": ["vision"], }, "mistral-small-latest": { "name": "mistral-small-latest", "provider": "mistralai", "baseUrl": "https://render-service-gsu7.onrender.com/m", "apiKey": "Q0m29fvxBY0Cfdj4sjHaKqccy1NjonLW", "stream": True, "capabilities": ["vision"], }, }, заложи заглушку, которую потом можно развить под ollama (типо пустой словарь соединений с моделями).

  2. Веб интерфейс не слабее chatgpt или perlexity, с историями диалогов, с о средней панелью (левая история, правая чат, а средняя - граф) с графом как на flowith, сделай его через react flow если нет лучше альтернативы. суть в том, что активный чат - это выбранная ветка на графе, и новое сообщение в чате порождает новый лист в графе, а граф перестраивается с использованием библиотеки dagre. активный нод в графе - ыбранный последнее сообщение в правой панели, например, если выбрать промужточное на графе (щелкнуть лкм по ноду), то сообщения в правой панели выведутся от корня графа вплоть до щелкнутого сообщения. и если спроить, то будет добален ноду новый ребенок и дальше новое ветвления с постоянным обновлением посдвечиваемого синими цветом активного листа согласно последнему сообщению(сообщения пользователя и llm разными цветми контура нода). я пробовал streamlit и он показался оцень примитивным, возможно, я не прав. Соответсвтенно хранятся одержимое нодов графа в чем-то и при отправке сообщения нужно использовать память (формировать её?) но не в лоб как в дипсик, чтобы она глупо конкатенировалась, а суммаризацией, возможно либо с отсечкой по кол-ву токенов последних - предложи сначала варианты, какие есть. т.е. для новой ветки формируемый промпт будет разным (отправляемыая история).

  3. Нужно бесплатное решение - предложи варианты. и то, что будет работать на gtx 1060 ti .

  4. подробное описание и стиль как минимум. предложи, что ещё?

  5. сначала предложи вариант платформы для звонка, (варианты), которые позволяю непрерывно извлекать уже сформированные на данный момент звонка субтитры и передавать в систему (промежуточные субтитры).

  6. необходимость запустить код в obsidiab ````dataviewjs const defaultlocations = ["Фаэрун"]; const defaultCurrentDate = "1491/09/29"; const defaultStartDate = "1490/01/01"; const defaultEndDate = "1493/3/30"; const defaultPcsParticipationOnly = false; const defaultIncludeRegionsParticipants = false; const fullWidth = true;

const scriptPath = "scripts/timeline-widget"; await dv.view(scriptPath, { arg1: dv, arg2: defaultlocations, arg3: defaultCurrentDate, arg4: defaultStartDate, arg5: defaultEndDate, arg6: defaultPcsParticipationOnly, arg7: defaultIncludeRegionsParticipants, arg8: fullWidth });


Также этот эндпоинт на удаленном ресурсе (остаь пока там произвольную константу для url), который имеет этот ресурс для получения изображения по промпту : `def _process_image_generation(prompt: str):
    """
    Вспомогательная функция для обработки логики генерации изображений.
    Возвращает кортеж (image_urls, error_message).
    """
    image_urls = []
    error_message = None

    # При каждой генерации изображений создаем новый объект BingArt
    # с помощью функции load_cookies, чтобы убедиться, что куки актуальны.
    # Это позволяет избежать проблем с устаревшими сессиями.
    # Важно: close_session() вызывается в finally, чтобы гарантировать закрытие сессии.
    local_bing_art = BingArt(
        auth_cookie_U=cookies.get('_U'),
        auth_cookie_KievRPSSecAuth=cookies.get('KievRPSSecAuth'))

    try:
        if prompt:
            results = local_bing_art.generate_images(prompt)
            if results and 'images' in results:
                # Фильтруем и обрезаем до 4 изображений
                image_urls = [
                    img['url'] for i, img in enumerate(results['images'])
                    if i % 2 == 0
                ][:4]
            else:
                error_message = "Не удалось получить изображения."
        else:
            error_message = "Коммандер, введи промпт!"
    except Exception as e:
        error_message = f"Произошла ошибка: {str(e)}"
        app.logger.error(f"Ошибка при генерации изображения: {e}",
                         exc_info=True)
    finally:
        # Важно: закрываем сессию BingArt после использования
        local_bing_art.close_session()

    return image_urls, error_message


@app.route('/generate-images', methods=['GET', 'POST'])
def generate_images():
    """
    Генерация изображений с использованием bingart.
    Поддерживает как POST (form data), так и GET (query parameter) запросы.
    """
    if request.method == 'POST':
        prompt = request.form.get('prompt')
    else:  # GET request
        prompt = request.args.get('prompt')

    session['prompt'] = prompt  # Сохраняем промпт в сессии

    image_urls, error_message = _process_image_generation(prompt)

    if error_message:
        session['error_message'] = error_message
        return jsonify({'error': error_message}), 500

    session['image_urls'] = image_urls
    return jsonify({'image_urls': image_urls})`

7. Думаю, они должны предлагаться как команды по слешу, но эти команды должны предлагаться исходя из контекста. но также должны быть автодополнение - когда слеш начинаешь писать, и предлагается автодополнение. Предлоижи сначала варианты.

храниться они будут в отдельной папке в подпапках, а при  начале письма подставляются в виде `<имя папки>/<ввод пользователя><вариант продолжения N>`
 и все варианты должны предлагаться в некотором popup-окне или лучше.
8. Русский.

---