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.
162 lines
6.5 KiB
Python
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()
|