135 lines
11 KiB
Markdown
135 lines
11 KiB
Markdown
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. Русский.
|
||
|
||
---
|
||
|