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

View file

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