♻️ refactory: Ajustando o código para o deploy (remoção provisória do user_id para testes).

main
parent 5340f6b979
commit 37fa127a80

@ -32,7 +32,8 @@ def get_db():
finally:
db.close()
'''
# Removido momentaniamente para teste do Vertex IA
@router.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest, db: Session = Depends(get_db)):
service = OrquestradorService(db)
@ -41,6 +42,16 @@ async def chat(request: ChatRequest, db: Session = Depends(get_db)):
user_id=request.user_id,
)
return ChatResponse(response=result)
'''
@router.post("/chat", response_model=ChatResponse)
async def chat(request: ChatRequest, db: Session = Depends(get_db)):
service = OrquestradorService(db)
result = await service.handle_message(
message=request.message
)
return ChatResponse(response=result)
@router.post("/mock/consultar-estoque")

@ -3,7 +3,7 @@ from typing import Dict, Any, Optional
class ChatRequest(BaseModel):
message: str
user_id: str
# user_id: str -> Removido momentaniamente para testar o VertexIA
class ChatResponse(BaseModel):
response: str

@ -14,10 +14,16 @@ class Settings(BaseSettings):
mockaroo_api_key: str
mockaroo_base_url: str = "https://api.mockaroo.com/api"
use_mockaroo_writes: bool = False
environment: str = "production"
debug: bool = False
# Cloud SQL
cloud_sql_connection_name: str | None = None
class Config:
env_file = ".env"
extra = "ignore"
settings = Settings()

@ -2,15 +2,31 @@ from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from app.core.settings import settings
DATABASE_URL = (
f"postgresql+psycopg2://{settings.db_user}:"
f"{settings.db_password}@"
f"{settings.db_host}:"
f"{settings.db_port}/"
f"{settings.db_name}"
)
if settings.cloud_sql_connection_name:
# Cloud Run
DATABASE_URL = (
f"postgresql+psycopg2://{settings.db_user}:"
f"{settings.db_password}@/"
f"{settings.db_name}"
f"?host=/cloudsql/{settings.cloud_sql_connection_name}"
)
else:
# Ambiente local
DATABASE_URL = (
f"postgresql+psycopg2://{settings.db_user}:"
f"{settings.db_password}@"
f"{settings.db_host}:"
f"{settings.db_port}/"
f"{settings.db_name}"
)
engine = create_engine(DATABASE_URL, echo=True)
engine = create_engine(
DATABASE_URL,
echo=True,
pool_pre_ping=True,
pool_recycle=3600,
connect_args={"connect_timeout": 10}
)
SessionLocal = sessionmaker(
autocommit=False,

@ -2,6 +2,8 @@ from fastapi import FastAPI
from app.api.routes import router
from app.api.tool_routes import router as tool_router
from app.db.database import Base, engine
# 👇 IMPORTANTE: registrar models no metadata
from app.db.models import Tool
app = FastAPI(title="AI Orquestrador")
@ -12,17 +14,18 @@ app.include_router(tool_router)
@app.on_event("startup")
def startup_event():
"""
Inicializa o banco de dados na primeira execução:
- Cria todas as tabelas
- Faz seed das tools iniciais
Inicializa o banco de dados e executa seeds se necessário.
"""
try:
# Cria as tabelas se não existirem
print("🚀 Inicializando banco de dados...")
Base.metadata.create_all(bind=engine)
# Seed das tools
from app.db.tool_seed import seed_tools
seed_tools()
print("✅ Banco inicializado com sucesso.")
except Exception as e:
print(f"⚠️ Erro ao inicializar banco de dados: {e}")
# Não falha a aplicação, apenas registra o erro
print(f"❌ Erro ao inicializar banco: {e}")
raise e

@ -13,7 +13,7 @@ class LLMService:
location=settings.google_location
)
self.model = GenerativeModel("gemini-1.5-pro")
self.model = GenerativeModel("gemini-1.5-flash")
def build_vertex_tools(self, tools: List[ToolDefinition]): # Converte as Tools internas (ToolDefinition) para o formato que o Vertex AI entende.
@ -56,11 +56,13 @@ class LLMService:
# - histórico (se existir)
# - ferramentas disponíveis
chat = self.model.start_chat(
history=history or [],
tools=vertex_tools
history=history or []
)
response = chat.send_message(message)
response = chat.send_message(
message,
tools=vertex_tools
)
# Pegamos a primeira resposta candidata do modelo (a com maior coerência com o assunto)
# Estrutura interna:

@ -19,7 +19,7 @@ class OrquestradorService:
- user_id: identificador do usuário (ainda não está sendo usado aqui,
mas futuramente servirá para histórico)
"""
async def handle_message(self, message: str, user_id: str) -> str:
async def handle_message(self, message: str) -> str:
tools = self.registry.get_tools()

Loading…
Cancel
Save