You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/app/db/tool_seed.py

162 lines
6.5 KiB
Python

from app.db.database import SessionLocal
from app.repositories.tool_repository import ToolRepository
def get_tools_definitions():
return [
{
"name": "consultar_estoque",
"description": (
"Use esta ferramenta para consultar veiculos disponiveis no estoque. "
"Voce pode filtrar por preco maximo e categoria, e tambem ordenar por "
"preco para descobrir o carro mais barato (asc + limite=1) ou mais "
"caro (desc + limite=1)."
),
"parameters": {
"type": "object",
"properties": {
"preco_max": {
"type": "number",
"description": "Preco maximo do veiculo em reais (BRL). Opcional.",
},
"categoria": {
"type": "string",
"description": "Categoria do veiculo, por exemplo: Hatch, Sedan, SUV. Opcional.",
},
"ordenar_preco": {
"type": "string",
"description": "Ordenacao do preco. Use 'asc' para mais barato e 'desc' para mais caro.",
},
"limite": {
"type": "integer",
"description": "Quantidade maxima de veiculos retornados.",
},
},
"required": [],
},
},
{
"name": "validar_cliente_venda",
"description": (
"Use esta ferramenta quando precisar avaliar se o cliente pode financiar "
"um veiculo especifico. Ela recebe o CPF e o valor do veiculo, consulta "
"um score simulado e retorna se o cliente esta aprovado ou reprovado "
"para a compra, juntamente com o score e um limite de credito estimado."
),
"parameters": {
"type": "object",
"properties": {
"cpf": {
"type": "string",
"description": "CPF do cliente, com ou sem formatacao (apenas digitos tambem e aceito).",
},
"valor_veiculo": {
"type": "number",
"description": "Valor do veiculo em reais (BRL) que o cliente deseja comprar.",
},
},
"required": ["cpf", "valor_veiculo"],
},
},
{
"name": "avaliar_veiculo_troca",
"description": (
"Use esta ferramenta quando o cliente quiser saber quanto o carro dele "
"vale como entrada em uma negociacao. Ela recebe modelo, ano e "
"quilometragem do veiculo atual e devolve um valor estimado de avaliacao "
"para troca, ja considerando depreciacao por ano e quilometragem."
),
"parameters": {
"type": "object",
"properties": {
"modelo": {
"type": "string",
"description": "Modelo do veiculo que o cliente deseja oferecer na troca (por exemplo, 'Toyota Corolla').",
},
"ano": {
"type": "integer",
"description": "Ano de fabricacao do veiculo do cliente.",
},
"km": {
"type": "integer",
"description": "Quilometragem atual do veiculo do cliente.",
},
},
"required": ["modelo", "ano", "km"],
},
},
{
"name": "agendar_revisao",
"description": (
"Use esta ferramenta quando o cliente quiser marcar uma revisao ou "
"manutencao para o veiculo. Ela recebe a placa e a data/hora desejada, "
"cria um agendamento simulado e retorna um identificador, alem do "
"status do agendamento."
),
"parameters": {
"type": "object",
"properties": {
"placa": {
"type": "string",
"description": "Placa do veiculo que sera levado para revisao.",
},
"data_hora": {
"type": "string",
"description": "Data e hora desejada para a revisao, em formato ISO 8601 (por exemplo, '2026-03-10T09:00:00-03:00').",
},
},
"required": ["placa", "data_hora"],
},
},
{
"name": "cancelar_pedido",
"description": (
"Use esta ferramenta quando o cliente solicitar o cancelamento de um "
"pedido ja registrado. Ela recebe o numero do pedido e o motivo do "
"cancelamento, atualiza o status para 'Cancelado' e retorna os detalhes "
"do cancelamento para que voce explique o resultado ao cliente."
),
"parameters": {
"type": "object",
"properties": {
"numero_pedido": {
"type": "string",
"description": "Numero do pedido que o cliente deseja cancelar.",
},
"motivo": {
"type": "string",
"description": "Motivo do cancelamento informado pelo cliente (por exemplo, atraso, mudanca de planos, condicao de pagamento, etc.).",
},
},
"required": ["numero_pedido", "motivo"],
},
},
]
def seed_tools():
db = SessionLocal()
try:
repo = ToolRepository(db)
existing = repo.get_all()
existing_names = {t.name for t in existing}
for tool_def in get_tools_definitions():
if tool_def["name"] in existing_names:
repo.update_by_name(
name=tool_def["name"],
description=tool_def["description"],
parameters=tool_def["parameters"],
)
continue
repo.create(
name=tool_def["name"],
description=tool_def["description"],
parameters=tool_def["parameters"],
)
finally:
db.close()
if __name__ == "__main__":
seed_tools()