Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ ENV=""
# DATABASE ENV
DATABASE_HOST=""
DATABASE_PORT=0
DATABASE_NAME=""
26 changes: 5 additions & 21 deletions .github/workflows/compare-branchs.yml → .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
name: Compare API Responses via Kafka
name: CI to Stage

on:
push:
branches: [ stage ]
pull_request:
branches: [ stage ]

jobs:
compare:
Expand Down Expand Up @@ -38,23 +41,4 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ github.base_ref }}
path: main_branch

- name: Build and run both APIs
run: |
cd pr_branch
docker build -t api-pr .
docker run -d -p 8001:8000 --name api-pr api-pr
cd ../main_branch
docker build -t api-main .
docker run -d -p 8002:8000 --name api-main api-main

- name: Install dependencies
run: pip install confluent-kafka httpx

- name: Run Kafka test comparator
run: python pr_branch/compare/kafka_comparator.py
env:
KAFKA_BROKER: 0.0.0.0:9092
API_MAIN_URL: http://api-main:8001 # ajuste a porta se necessário
API_BRANCH_URL: http://api-pr:8002 # ajuste a porta se
path: main_branch
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -166,5 +166,7 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

# Temp files
temp.txt
# PyPI configuration file
.pypirc
3 changes: 2 additions & 1 deletion .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [

{
"name": "Python Debugger: FastAPI",
"type": "debugpy",
Expand All @@ -13,6 +12,8 @@
"args": [
"app.main:app",
"--reload",
"--host",
"0.0.0.0",
"--port",
"3005"
],
Expand Down
3 changes: 0 additions & 3 deletions .vscode/settings.json

This file was deleted.

2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM asteryx82/python3.11-dlib
FROM python:3.11-alpine

WORKDIR /chat_bot
COPY ./ ./
Expand Down
File renamed without changes.
14 changes: 10 additions & 4 deletions app/config/settings.py → app/core/settings.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
from typing import Final
from dotenv import load_dotenv
import os

load_dotenv()

# OPENAI_API_KEY: Final[str] = os.getenv("OPENAI_API_KEY")
# API KEY AI
GEMINI_API_KEY: str | None = os.getenv("GEMINI_API_KEY")
CHATBOT_PORT: str | None = os.getenv("CHATBOT_PORT")

# App port
CHATBOT_PORT: int | None = int(os.getenv("CHATBOT_PORT", 8080))

# API Whatsapp
WHATSAPP_HOOK_URL: str | None = os.getenv("WEBHOOK_URL")
WAHA_HOST : str | None = os.getenv("WAHA_HOST")
WAHA_PORT : str | None = os.getenv("WAHA_PORT")
WAHA_ADMIN: str | None = os.getenv("WAHA_ADMIN")

# Database Environments
ENV : str | None = os.getenv("ENV")
DATABASE_HOST : str | None = os.getenv("DATABASE_HOST")
DATABASE_PORT : str | None = os.getenv("DATABASE_PORT")
DATABASE_PORT : str | None = os.getenv("DATABASE_PORT")
DATABASE_NAME : str | None = os.getenv("DATABASE_NAME")
4 changes: 0 additions & 4 deletions app/data/prompts/boas_vindas.txt

This file was deleted.

File renamed without changes.
8 changes: 8 additions & 0 deletions app/db/mongo/client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
from app.core.settings import DATABASE_HOST, DATABASE_PORT, DATABASE_NAME
from pymongo import MongoClient

class MongoDBClient(object):

def __init__(self):
self.db = MongoClient(
f"mongodb://{DATABASE_HOST}:{DATABASE_PORT}/")[DATABASE_NAME]
File renamed without changes.
File renamed without changes.
7 changes: 7 additions & 0 deletions app/dependencies/db.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from app.db.mongo.client import MongoDBClient

class DatabaseImp:

@staticmethod
def get_database() -> MongoDBClient:
return MongoDBClient()
13 changes: 13 additions & 0 deletions app/dependencies/repositories.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from app.db.mongo.client import MongoDBClient
from app.dependencies.db import DatabaseImp
from app.repositories.message_repository import MessageRepository
from fastapi import Depends


class RepositoryImp:

@staticmethod
def get_message_repository(
db: MongoDBClient = Depends(DatabaseImp.get_database)
) -> MessageRepository:
return MessageRepository(db)
22 changes: 22 additions & 0 deletions app/dependencies/services.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from app.db.mongo.client import MongoDBClient
from app.dependencies.repositories import RepositoryImp
from app.infra.initialization.instances import Instance
from app.infra.entities.gemini import Gemini
from app.services.gemini_service import GeminiService
from app.services.chatbot_service import ChatBotService
from app.services.waha_service import WahaAPIService
from app.repositories.message_repository import MessageRepository
from fastapi import Depends

def get_gemini_service(
gemini: Gemini = Depends(Instance.get_gemini_instance),
message_repository: MessageRepository = Depends(RepositoryImp.get_message_repository)
) -> GeminiService:
return GeminiService(gemini, message_repository)

def get_chatbot_service(gemini_service: GeminiService = Depends(get_gemini_service)
) -> ChatBotService:
return ChatBotService(gemini_service=gemini_service)

def get_waha_service() -> WahaAPIService:
return WahaAPIService()
15 changes: 15 additions & 0 deletions app/infra/entities/gemini.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from app.core.settings import GEMINI_API_KEY
from google import genai


class Gemini(object):
def __init__(self):
self.client = genai.Client(api_key=GEMINI_API_KEY)
self.model = "gemini-3-flash-preview"

def generate_response(self, msg: str) -> str:
response = self.client.models.generate_content(
model=self.model,
contents=msg,
)
return response.text
23 changes: 23 additions & 0 deletions app/infra/initialization/instances.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
from app.infra.entities.gemini import Gemini
from app.db.mongo.client import MongoDBClient

_gemini_instance : Gemini | None = None
_db_instance: MongoDBClient | None = None


class Instance(object):

def get_gemini_instance() -> Gemini:
global _gemini_instance

if _gemini_instance is None:
_gemini_instance = Gemini()
return _gemini_instance

def get_db_instance() -> MongoDBClient:
global _db_instance

if _db_instance is None:
_db_instance = MongoDBClient()
return _db_instance

Empty file removed app/lib/__init__.py
Empty file.
49 changes: 0 additions & 49 deletions app/lib/chatbot.py

This file was deleted.

23 changes: 0 additions & 23 deletions app/lib/database.py

This file was deleted.

34 changes: 0 additions & 34 deletions app/lib/gemini.py

This file was deleted.

76 changes: 0 additions & 76 deletions app/lib/waha_api.py

This file was deleted.

Loading