This commit is contained in:
Пьянзин Михаил 2026-04-06 14:25:48 +03:00
parent 4d444b4621
commit b9bf405a70

View file

@ -547,7 +547,7 @@ async def generate_architecture_diagram(prompt: str) -> bytes | None:
ТРЕБОВАНИЯ К КАЧЕСТВУ:
1. Размер фигуры: figsize=(14, 10) или больше
2. DPI: минимум 150 для высокого качества
3. Шрифты: plt.rcParams['font.family'] = 'DejaVu Sans' для кириллицы
3. Шрифты: используй DejaVu Sans для кириллицы
4. Цвета: профессиональная палитра для разных слоёв:
- Frontend: lightblue (#E3F2FD)
- Backend/API: lightgreen (#E8F5E9)
@ -556,45 +556,45 @@ async def generate_architecture_diagram(prompt: str) -> bytes | None:
- Cache: lightpurple (#F3E5F5)
ЭЛЕМЕНТЫ АРХИТЕКТУРНОЙ ДИАГРАММЫ:
- FancyBboxPatch с boxstyle="round,pad=0.05" для компонентов
- Стрелки FancyArrowPatch для связей между компонентами
- Используй patches.FancyBboxPatch для компонентов
- Стрелки FancyArrowPatch для связей
- Текст с ha='center', va='center' для подписей
- Группировка компонентов в логические слои
ВАЖНО: Синтаксис FancyBboxPatch - все параметры передаются в конструктор:
patches.FancyBboxPatch(x, y, width, height, boxstyle="round,pad=0.05", facecolor="color", edgecolor="color", linewidth=2)
ПРИМЕР КОДА:
import matplotlib.pyplot as plt
from matplotlib import patches
plt.rcParams['font.family'] = 'DejaVu Sans'
plt.rcParams["font.family"] = "DejaVu Sans"
fig, ax = plt.subplots(figsize=(14, 10))
# Frontend layer
frontend = patches.FancyBboxPatch((0.1, 0.7), 0.3, 0.15, boxstyle="round,pad=0.05",
facecolor="#E3F2FD", edgecolor="#1976D2", linewidth=2)
ax.add_patch(frontend)
ax.text(0.25, 0.775, "Frontend", ha='center', va='center', fontsize=14, fontweight='bold')
# Arrow
arrow = patches.FancyArrowPatch((0.4, 0.75), (0.6, 0.55),
arrowstyle='->', mutation_scale=20, linewidth=2)
# Создаём компонент
rect = patches.FancyBboxPatch((0.1, 0.7), 0.3, 0.15, boxstyle="round,pad=0.05", facecolor="#E3F2FD", edgecolor="#1976D2", linewidth=2)
ax.add_patch(rect)
ax.text(0.25, 0.775, "Frontend", ha="center", va="center", fontsize=14, fontweight="bold")
# Создаём стрелку
arrow = patches.FancyArrowPatch((0.45, 0.75), (0.6, 0.55), arrowstyle="->", mutation_scale=20, linewidth=2, color="gray")
ax.add_patch(arrow)
ax.axis('off')
plt.title('Архитектура системы', fontsize=18, fontweight='bold', pad=20)
plt.savefig('architecture.png', dpi=150, bbox_inches='tight')
ax.axis("off")
plt.title("Архитектура системы", fontsize=18, fontweight="bold", pad=20)
plt.savefig("architecture.png", dpi=150, bbox_inches="tight")
plt.close()
Генерируй ТОЛЬКО Python код без объяснений."""
Генерируй ТОЛЬКО Python код без объяснений. Используй двойные кавычки."""
user_prompt = f"""Создай профессиональную архитектурную диаграмму для следующего запроса:
{prompt}
Требования:
- Используй FancyBboxPatch для компонентов
- Используй FancyBboxPatch для компонентов (все параметры в конструкторе)
- Добавь стрелки FancyArrowPatch для связей
- Цвета для разных слоёв архитектуры
- Чёткие подписи на русском языке
- Заголовок диаграммы
- Сохраняй в 'architecture.png'
Генерируй ТОЛЬКО Python код без объяснений."""
Генерируй ТОЛЬКО Python код без объяснений. Используй двойные кавычки."""
code = await get_code_from_qwen(system_prompt, user_prompt, temperature=0.4)
if code:
@ -961,11 +961,14 @@ async def get_code_from_qwen(system_prompt: str, user_prompt: str, temperature:
"""Get code from Qwen API with retry logic."""
headers = {"Authorization": f"Bearer {QWEN_API_KEY}", "Content-Type": "application/json"}
# Add unique timestamp to bypass any caching
unique_id = f"{int(time.time() * 1000)}-{random.randint(10000, 99999)}"
payload = {
"model": QWEN_MODEL,
"messages": [
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_prompt}
{"role": "user", "content": f"{user_prompt}\n\n[Unique request ID: {unique_id}. Это не часть кода, просто идентификатор запроса.]"}
],
"temperature": temperature,
"max_tokens": 4096,