Compare commits

..

No commits in common. "ad8797645d9f2899f2b52a7d1529247c510d5259" and "a1b379bedab68c7083b83bc88e3d78b6ff02502d" have entirely different histories.

2 changed files with 12 additions and 13 deletions

View file

@ -17,7 +17,8 @@ from openrouter.errors import ResponseValidationError, ChatError
from openrouter.utils import BackoffStrategy
from fal_client import AsyncClient as FalClient
from replicate import Client as ReplicateClient
import replicate
from database import BasicDatabase
@ -28,9 +29,6 @@ GROUP_CHAT_MAX_MESSAGES = 20
PRIVATE_CHAT_MAX_MESSAGES = 40
MAX_OUTPUT_TOKENS = 500
FAL_MODEL = "fal-ai/bytedance/seedream/v4.5/text-to-image"
REPLICATE_MODEL = "ultracoderru/nova-anime-xl-il-140:2af9bf809587d173212ddf9679d99f1d7f9a5442ed23c0c02e77d3a230865303"
@dataclass()
class Message:
@ -104,6 +102,7 @@ class AiAgent:
retry_connection_errors=True)
self.db = db
self.openrouter_model = openrouter_model
self.fal_model = "fal-ai/bytedance/seedream/v4.5/text-to-image"
self.platform = platform
self._load_prompts()
@ -112,7 +111,7 @@ class AiAgent:
x_title=OPENROUTER_X_TITLE, http_referer=OPENROUTER_HTTP_REFERER,
retry_config=retry_config)
self.client_fal = FalClient(key=fal_token)
self.replicate_client = ReplicateClient(api_token=replicate_token)
self.replicate_client = replicate.Client(api_token=replicate_token)
@dataclass()
class _ToolsArtifacts:
@ -299,7 +298,7 @@ class AiAgent:
}
try:
result = await self.client_fal.run(FAL_MODEL, arguments=arguments)
result = await self.client_fal.run(self.fal_model, arguments=arguments)
if "images" not in result:
raise RuntimeError("Неожиданный ответ от сервера.")
image_url = result["images"][0]["url"]
@ -355,15 +354,17 @@ class AiAgent:
"negative_prompt": negative_prompt,
"width": width,
"height": height,
"cfg": 4.5,
"steps": 20,
"cfg": 6,
"steps": 30,
"disable_safety_checker": True
}
try:
outputs = await self.replicate_client.async_run(REPLICATE_MODEL, input=arguments)
image_bytes = await outputs[0].aread()
outputs = await self.replicate_client.async_run(
"ultracoderru/nova-anime-xl-il-140:2af9bf809587d173212ddf9679d99f1d7f9a5442ed23c0c02e77d3a230865303",
input=arguments)
image_bytes = await outputs[0].aread()
image = Image.open(BytesIO(image_bytes)).convert("RGB")
output = BytesIO()
image.save(output, format="JPEG", quality=80, optimize=True)

View file

@ -7,9 +7,7 @@
- Никогда не описывай изображение текстом вместо вызова функции.
- Никогда не генерируй ASCII-арты вместо вызова функции.
- Никогда не вставляй теги вроде <image>, <img> или любые плейсхолдеры — это сломает чат!
В случае успешной генерации изображения его копия будет отправлена тебе как результат вызова функции - прокомментируй полученное изображение.
НИКОГДА НЕ добавляй в ответ параметры или код генерации - пользователю это не нужно!
В случае успешной генерации изображения его копия будет отправлена тебе как результат. Ты можешь прокомментировать его, но НИКОГДА НЕ отправляй параметры вызова функции пользователю.
Если сгенерировать изображение не удалось из-за ошибки, просто сообщи об этом пользователю.
При составлении запроса на генерацию обычного изображения (не аниме) используй следующую формулу: