File size: 4,725 Bytes
345e9a0
1f1d8d8
 
 
345e9a0
1f1d8d8
 
43c0aec
3361c46
345e9a0
1f1d8d8
 
 
 
 
 
 
345e9a0
1f1d8d8
345e9a0
1f1d8d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345e9a0
1f1d8d8
345e9a0
1f1d8d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43c0aec
1f1d8d8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
345e9a0
 
1f1d8d8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
import gradio as gr
import requests
import os
from datetime import datetime

# Configuração GLM-4.6
HF_TOKEN = os.getenv("HF_TOKEN", "")
MODEL_ID = "zai-org/GLM-4.6-FP8:zai-org"
API_URL = "https://router.huggingface.co/v1"

class CodeAgentGLM:
    def __init__(self):
        self.headers = {"Authorization": f"Bearer {HF_TOKEN}"}
    
    def generate_code(self, prompt, language="python", max_tokens=1024):
        """Gera código usando GLM-4.6"""
        full_prompt = f"""You are an expert code generation AI. Generate high-quality {language} code.

Request: {prompt}

Provide only the code without explanations:"""
        
        payload = {
            "inputs": full_prompt,
            "parameters": {
                "max_new_tokens": max_tokens,
                "temperature": 0.3,
                "top_p": 0.9,
                "do_sample": True
            }
        }
        
        try:
            response = requests.post(API_URL, headers=self.headers, json=payload, timeout=30)
            if response.status_code == 200:
                result = response.json()
                if isinstance(result, list) and len(result) > 0:
                    return result[0].get("generated_text", "").split("Provide only the code without explanations:")[-1].strip()
            return f"Erro: {response.status_code}"
        except Exception as e:
            return f"Erro na chamada: {str(e)}"
    
    def explain_code(self, code):
        """Explica código"""
        prompt = f"Explique brevemente este código:\n\n{code}"
        payload = {
            "inputs": prompt,
            "parameters": {"max_new_tokens": 500, "temperature": 0.5}
        }
        try:
            response = requests.post(API_URL, headers=self.headers, json=payload)
            if response.status_code == 200:
                result = response.json()
                return result[0].get("generated_text", "") if isinstance(result, list) else str(result)
            return f"Erro: {response.status_code}"
        except Exception as e:
            return f"Erro: {str(e)}"

agent = CodeAgentGLM()

# Interface Gradio
with gr.Blocks(title="GLM-4.6 Code Agent", theme=gr.themes.Soft()) as demo:
    gr.Markdown("""
    # 💻 GLM-4.6 Code Agent
    **KILOcode Agent Integration** - Geração e explicação de código com GLM-4.6
    
    - 🚀 Segue padrões GPT
    - 📚 Suporta 200K tokens de contexto
    - 💪 Excelente em coding tasks
    """)
    
    with gr.Tabs():
        with gr.Tab("🔨 Code Generation"):
            code_prompt = gr.Textbox(
                label="📝 Descrição do código",
                placeholder="Ex: Crie uma função que calcula fibonacci com memoização",
                lines=3
            )
            
            language = gr.Dropdown(
                choices=["python", "javascript", "java", "cpp", "go", "rust", "typescript, nodeJs"],
                value="python",
                label="🔤 Linguagem"
            )
            
            max_tokens_slider = gr.Slider(
                minimum=256,
                maximum=2048,
                value=1024,
                step=256,
                label="📏 Max tokens"
            )
            
            generate_btn = gr.Button("Gerar Código", variant="primary")
            code_output = gr.Code(language="python", label="💾 Código Gerado")
            
            def generate(prompt, lang, tokens):
                return agent.generate_code(prompt, lang, tokens)
            
            generate_btn.click(generate, [code_prompt, language, max_tokens_slider], code_output)
        
        with gr.Tab("📖 Code Explanation"):
            code_to_explain = gr.Code(
                language="python",
                label="Código para explicar",
                lines=10
            )
            
            explain_btn = gr.Button("Explicar", variant="primary")
            explanation_output = gr.Textbox(label="Explicação", lines=6)
            
            explain_btn.click(agent.explain_code, code_to_explain, explanation_output)
        
        with gr.Tab("⚙️ Configuração"):
            gr.Markdown("""
            ## Configuração do KILOcode Agent
            
            ### Modelo: GLM-4.6
            - **Tamanho**: 357B parâmetros
            - **Contexto**: 200K tokens
            - **Formato**: BF16
            - **Performance**: ⭐⭐⭐⭐⭐ para coding
            
            ### Como usar com KILOcode:
            1. Adicione seu HF_TOKEN nos secrets
            2. Use os endpoints de geração e explicação
            3. Suporta múltiplas linguagens de programação
            """)

if __name__ == "__main__":
    demo.launch(share=True)