File size: 2,809 Bytes
6f7549e
5911fce
87948d9
 
6f7549e
19ffc1b
d8f9bbf
 
 
 
 
 
 
 
 
 
 
 
 
1d37ef4
03b6ed4
6f7549e
03b6ed4
6f7549e
 
 
 
 
19ffc1b
6f7549e
19ffc1b
6f7549e
d8f9bbf
 
6f7549e
 
 
19ffc1b
6f7549e
 
19ffc1b
6f7549e
19ffc1b
1d37ef4
 
 
 
 
 
 
 
 
 
 
19ffc1b
6f7549e
19ffc1b
 
6f7549e
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
from transformers import AutoModelForCausalLM, AutoTokenizer
import spaces
import torch
import gradio as gr
from typing import Literal

system_messages = {
    "zod": """Você é um Arquiteto de Software especialista em TypeScript e validação de dados. Sua tarefa é converter o JSON fornecido em schemas 'zod' estendidos com '@asteasolutions/zod-to-openapi'.

1. DIRETRIZ DE DADOS (ESTRITA): Realize um mapeamento exato das chaves fornecidas. É EXPRESSAMENTE PROIBIDO inventar, inferir ou adicionar propriedades que não existam na entrada bruta.

2. DIRETRIZ DE ARQUITETURA (MODULAR): Analise a profundidade da estrutura. Sempre que identificar objetos aninhados ou conjuntos de dados que possam ser isolados como instâncias independentes, você DEVE extraí-los em schemas Zod separados e referenciá-á-los no schema principal (composição).

Retorne APENAS o código TypeScript de saída, sem formatação markdown e sem explicações.""",
     "yaml": "Você é um Arquiteto de Software especialista em documentação de APIs. Converta o JSON de entrada em uma especificação OpenAPI 3.0 em formato YAML. Estruture corretamente os componentes (schemas) e garanta a tipagem rigorosa. Retorne APENAS o código YAML válido, sem comentários adicionais.",
    "json": "Você é um Arquiteto de Dados especialista em modelagem JSON. Sua tarefa é analisar os dados brutos de entrada e gerar um JSON Schema (Draft 2020-12) robusto e perfeitamente validado. Defina rigorosamente os tipos (string, number, boolean, array, object), especifique quais propriedades são obrigatórias e mapeie estruturas aninhadas com precisão. Retorne APENAS o JSON Schema cru, sem formatação markdown (```json) e sem conversas textuais.",
}


@spaces.GPU
def askToModel(user: str, type: str):
    messages = [
        {"role": "system", "content": type},
        {"role": "user", "content": user},
    ]
    prompt = tokenizer.apply_chat_template(
        messages, add_generation_prompt=True, tokenize=False
    )

    inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

    print("iniciando", inputs)
    output = model.generate(**inputs, max_new_tokens=2048, temperature=0.0, 
    do_sample=False)
    print("reposta", output)
    size_messages = inputs["input_ids"].shape[1]
    model_response = output[0][size_messages:]

    response = tokenizer.decode(model_response, skip_special_tokens=True)
    print(response)

    return {"response": response}



model_path = "edsoncarvalhointuria/merged-schema-forg-ai"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(
    model_path, dtype=torch.float16, device_map="auto"
)





window = gr.Interface(fn=askToModel, inputs=["text", "text"], outputs="json")

if __name__ == "__main__":
    window.launch()