llm-agent-backend/docs/tech_assignment/Target.md
2026-06-06 19:29:23 +03:00

135 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 (типо пустой словарь соединений с моделями).
1. Веб интерфейс не слабее chatgpt или perlexity, с историями диалогов, с о средней панелью (левая история, правая чат, а средняя - граф) с графом как на flowith, сделай его через react flow если нет лучше альтернативы. суть в том, что активный чат - это выбранная ветка на графе, и новое сообщение в чате порождает новый лист в графе, а граф перестраивается с использованием библиотеки dagre. активный нод в графе - ыбранный последнее сообщение в правой панели, например, если выбрать промужточное на графе (щелкнуть лкм по ноду), то сообщения в правой панели выведутся от корня графа вплоть до щелкнутого сообщения. и если спроить, то будет добален ноду новый ребенок и дальше новое ветвления с постоянным обновлением посдвечиваемого синими цветом активного листа согласно последнему сообщению(сообщения пользователя и llm разными цветми контура нода). я пробовал streamlit и он показался оцень примитивным, возможно, я не прав.
Соответсвтенно хранятся одержимое нодов графа в чем-то и при отправке сообщения нужно использовать память (формировать её?) но не в лоб как в дипсик, чтобы она глупо конкатенировалась, а суммаризацией, возможно либо с отсечкой по кол-ву токенов последних - предложи сначала варианты, какие есть. т.е. для новой ветки формируемый промпт будет разным (отправляемыая история).
1. Нужно бесплатное решение - предложи варианты. и то, что будет работать на gtx 1060 ti .
2. подробное описание и стиль как минимум. предложи, что ещё?
3. сначала предложи вариант платформы для звонка, (варианты), которые позволяю непрерывно извлекать уже сформированные на данный момент звонка субтитры и передавать в систему (промежуточные субтитры).
4. необходимость запустить код в 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 });
```` и считать результат. ВОзможность собирать данные из obsidian.
Также этот эндпоинт на удаленном ресурсе (остаь пока там произвольную константу для 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. Русский.
---