import os import requests import streamlit as st st.set_page_config(page_title="DevOps AI Assistant", page_icon="πŸš€") st.title("πŸ€– AI CI/CD Pipeline Generator") st.markdown("ΠŸΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ сСрвиса для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ") def _env(name: str, default: str) -> str: value = os.getenv(name) return value if value else default default_backend_url = _env("BACKEND_URL", "http://backend:8000/generate") with st.sidebar: st.header("Настройки") api_url = st.text_input("Backend URL", default_backend_url) model = st.selectbox( "LLM МодСль", ["deepseek-r1:1.5b", "qwen2.5-coder:1.5b", "llama3.1:8b", "Arena Model"], ) platform = st.radio("ΠŸΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°", ["GitHub Actions", "GitLab CI"]) user_input = st.text_area( "ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: 'Python app with pytest and docker build')", height=150 ) if st.button("Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ", type="primary"): if user_input: with st.spinner("LLM Π΄ΡƒΠΌΠ°Π΅Ρ‚..."): try: res = requests.post( api_url, json={"description": user_input, "platform": platform, "model": model}, timeout=90, ) res.raise_for_status() data = res.json() if data.get("status") == "ok": st.success("βœ… ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Π²Π°Π»ΠΈΠ΄Π½Π°!") st.code(data.get("config", ""), language="yaml") st.download_button( "Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ .yml", data.get("config", ""), file_name="pipeline.yml", ) else: st.error(f"❌ Ошибка Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ: {data.get('validation_error')}") st.code(data.get("config", ""), language="yaml") except Exception as e: st.error(f"Ошибка ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΊ Π±Π΅ΠΊΠ΅Π½Π΄Ρƒ: {e}") else: st.warning("ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ описаниС.")