В этом руководстве мы познакомим вас с реализацией класса TinyDev — минималистичным, но мощным инструментом для генерации кода на основе искусственного интеллекта, который использует Gemini API для преобразования простых идей приложений в комплексные структурированные приложения. TinyDev разработан так, чтобы без проблем работать в Notebook, и следует чёткому трёхэтапному рабочему процессу — План → Файлы → Код — для обеспечения согласованности, функциональности и модульного дизайна.
TinyDev позволяет пользователям описывать свой проект естественным языком и получать готовые к работе файлы кода, автоматически сгенерированные и сохранённые в организованном каталоге. Это делает его идеальной отправной точкой для быстрого создания прототипов или изучения того, как искусственный интеллект может помочь в решении задач разработки.
Импорт необходимых библиотек
Мы начинаем с импорта основных библиотек, необходимых для генератора кода TinyDev. `google.generativeai` используется для взаимодействия с Gemini API, в то время как стандартные библиотеки, такие как `os`, `json` и `re`, поддерживают обработку файлов и обработку текста. `Path` и подсказки типов из `typing` обеспечивают чистоту файловых операций и лучшую читаемость кода.
“`python
import google.generativeai as genai
import os
import json
import re
from pathlib import Path
from typing import List, Dict
“`
Класс TinyDev
“`python
class TinyDev:
“””
TinyDev: лёгкий генератор кода на основе искусственного интеллекта, вдохновлённый smol-dev
Использует Gemini API для создания полноценных приложений по простым подсказкам
Следует проверенному трёхэтапному рабочему процессу: План → Файлы → Код
“””
def init(self, api_key: str, model: str = “gemini-1.5-flash”):
genai.configure(apikey=apikey)
self.model = genai.GenerativeModel(model)
self.generation_config = {
‘temperature’: 0.1,
‘top_p’: 0.8,
‘maxoutputtokens’: 8192,
}
def plan(self, prompt: str) -> str:
“””
Этап 1: Генерация плана проекта и общих зависимостей
Создаёт основу для согласованной генерации кода
“””
planning_prompt = f”””As an AI developer, you’re building a tool that automatically generates code tailored to the user’s needs.
the program you are writing is based on the following description:
{prompt}
the files we write will be generated by a python script. the goal is for us to all work together to write a program that will write the code for the user.
since we are working together, we need to understand what our shared dependencies are. this includes:
- import statements we all need to use
- variable names that are shared between files
- functions that are called from one file to another
- any other shared state
this is the most critical part of the process, if we don’t get this right, the generated code will not work properly.
please output a markdown file called shared_dependencies.md that lists all of the shared dependencies.
the dependencies should be organized as:
1. shared variables (globals, constants)
2. shared functions (function signatures)
3. shared classes (class names and key methods)
4. shared imports (modules to import)
5. shared DOM element ids (if web project)
6. shared file paths/names
be EXHAUSTIVE in your analysis. every file must be able to import or reference these shared items.”””
response = self.model.generate_content(
planning_prompt,
generationconfig=self.generationconfig
)
return response.text
“`
Демонстрация TinyDev
Функция `demo_tinydev()` демонстрирует возможности TinyDev, запуская предопределённый демо-режим с использованием одного из нескольких примеров подсказок, таких как создание игры Tic Tac Toe на HTML/JS/CSS или веб-скрапера новостей на Python. Она инициализирует класс TinyDev с ключом API Gemini, выбирает первую подсказку из списка идей проекта и направляет пользователя через полный конвейер генерации кода, включая планирование общих зависимостей, определение структуры файлов и генерацию кода.
“`python
def demo_tinydev():
“””Demo the TinyDev code generator”””
api_key = “Use Your API Key here”
if apikey == “YOURGEMINIAPIKEY_HERE”:
print(” Please set your Gemini API key!”)
print(“Get one free at: https://makersuite.google.com/app/apikey”)
return None
tinydev = TinyDev(apikey)
demo_prompts = [
“a simple HTML/JS/CSS tic tac toe game”,
“a Python web scraper that gets the latest news from multiple sources”,
“a responsive landing page for a local coffee shop with contact form”,
“a Flask REST API for managing a todo list”,
“a JavaScript calculator with a modern UI”
]
print(” TinyDev – AI Code Generator”)
print(“=” * 50)
print(“Inspired by smol-ai/developer, powered by Gemini API”)
print(f”Available demo projects:”)
for i, prompt in enumerate(demo_prompts, 1):
print(f”{i}. {prompt}”)
demoprompt = demoprompts[0]
print(f”\n Running demo: {demo_prompt}”)
try:
results = tinydev.createapp(demo_prompt)
print(f”\n Results Summary:”)
print(f” Prompt: {results[‘prompt’]}”)
print(f” Output: {results[‘output_dir’]}”)
print(f” Files: {len(results[‘files’])}”)
print(f”\n Generated Files:”)
for filename in results[‘files’].keys():
print(f” – {filename}”)
if results[‘files’]:
preview_file = list(results[‘files’].keys())[0]
previewcode = results[‘files’][previewfile]
print(f”\n Preview of {preview_file}:”)
print(“-” * 40)
print(previewcode[:400] + “…” if len(previewcode) > 400 else preview_code)
print(“-” * 40)
print(f”\n This uses the same proven workflow as smol-ai/developer!”)
print(f” Check {results[‘output_dir’]} for all generated files”)
return results
except Exception as e:
print(f” Demo failed: {e}”)
return None
“`
TinyDev — это лёгкий генератор кода на основе искусственного интеллекта, который демонстрирует потенциал использования ИИ для автоматизации создания приложений с замечательной точностью и эффективностью. Разбивая процесс генерации кода на интуитивно понятные этапы, он обеспечивает логическую обоснованность, хорошую структурированность и соответствие намерениям пользователя.