/
mikabuto
/
pre_commit_refactor_ai_agent
Обзор
Документация
Войти
/
mikabuto
/
pre_commit_refactor_ai_agent
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
PreCommitScript.py
84 строки
3 KB
mikabuto
basic ai agent
09 июл 2025, 19:53
09 июл 2025, 19:53
75e1967
Код
Авторство
О чём код?
#!/usr/bin/env python3 import subprocess import sys from openai import OpenAI from gigachat import GigaChat from gigachat.models import Chat, Messages, MessagesRole # Токен брать здесь: https://developers.sber.ru/studio/workspaces/10d3ccaf-95fc-4e33-adeb-bec2c54e71d4/gigachat-api/projects/8eee353a-deca-4246-953c-12214b6f1130/settings AUTH_KEY = "NjNiZWIxZjAtZDRhZC00YzI5LWI1NmYtMWY2ZDhkMjE0YmEwOjE0MDczZWZlLWI0ZGItNGIyMS05ZDA0LWJjYWY3YjEzMjk1YQ==" class GitAIAgent: def __init__(self): self.giga = GigaChat( credentials=AUTH_KEY, verify_ssl_certs=False ) def get_diff(self) -> str: """Возвращает diff текущих изменений.""" return subprocess.check_output(["git", "diff", "--cached"]).decode("utf-8") def analyze_with_ai(self, diff: str) -> str: """Запрашивает у ИИ рекомендации по коду.""" prompt = f""" Проанализируй изменения в коде. Укажи на: 1. Потенциальные баги. 2. Стилистические проблемы. 3. Возможности оптимизации. Отвечай кратко и по делу. Вот diff: {diff} """ payload = Chat( messages=[ Messages( role=MessagesRole.SYSTEM, content="Ты - сеньор разработчик." ), Messages( role=MessagesRole.USER, content=prompt ) ] ) response = self.giga.chat(payload) return response.choices[0].message.content def run_checks(self, diff: str) -> bool: """Статические проверки без ИИ.""" # errors = [] # if os.getenv("CHECK_CSHARP", "true") == "true": # if "DateTime.Now" in diff: # errors.append("⚠️ C#: Используй 'DateTime.UtcNow' вместо 'DateTime.Now'.") # if os.getenv("CHECK_TYPESCRIPT", "true") == "true": # if "any" in diff and ".ts" in diff: # errors.append("⚠️ TypeScript: Замени 'any' на конкретный тип.") # if errors: # print("\n".join(errors)) # return False return True def main(self): diff = self.get_diff() if not diff: print("Нет изменений для анализа.") return True print("=====YOUR DIFF======") print(diff) print("🔍 Анализ кода...") if not self.run_checks(diff): return False # Отмена коммита ai_advice = self.analyze_with_ai(diff) print("\n💡 Рекомендации от ИИ:\n", ai_advice) return True if __name__ == "__main__": agent = GitAIAgent() if not agent.main(): sys.exit(1) # Отменяем коммит при ошибках