Skip to main content

A FastAPI application serving ws bom/robot/llm platform ai.

Project description

🤖 ws-bom-robot-app

A FastAPI application serving ws bom/robot/llm platform ai

🌵 Minimal app structure

app/
|-- .env
|-- main.py

Fill main.py with the following code:

from ws_bom_robot_app import main
app = main.app

Create a .env file in the root directory with the following configuration:

# robot configuration
robot_env=development
robot_user=your_username
USER_AGENT=ws-bom-robot-app

# cms (bowl) configuration
robot_cms_host='http://localhost:4000'
robot_cms_auth='users API-Key your-api-key-here'

# llm providers: fill one or more of these with your API keys
DEEPSEEK_API_KEY="your-deepseek-api-key"
OPENAI_API_KEY="your-openai-api-key"
GOOGLE_API_KEY="your-google-api-key"
ANTHROPIC_API_KEY="your-anthropic-api-key"
GROQ_API_KEY="your-groq-api-key"
# ibm
WATSONX_URL="https://eu-gb.ml.cloud.ibm.com"
WATSONX_APIKEY="your-watsonx-api-key"
WATSONX_PROJECTID="your-watsonx-project-id"
# gvertex: ensure to mount the file in docker
GOOGLE_APPLICATION_CREDENTIALS="./.data/secrets/google-credentials.json" 

🚀 Run the app

  • development

    fastapi dev --port 6001
    #uvicorn main:app --app-dir ./ws_bom_robot_app --reload --reload-dir ws_bom_robot_app --host 0.0.0.0 --port 6001 
    
  • production

    uvicorn main:app --host 0.0.0.0 --port 6001  
    
  • production with multipler workers

    fastapi run --port 6001 --workers 4
    #uvicorn main:app --host 0.0.0.0 --port 6001 --workers 4
    #gunicorn -w 4 -k uvicorn.workers.UvicornWorker main:app --bind
    

📖 API documentation


🐳 Docker

dockerize base image

<# cpu #>
#docker build -f Dockerfile-robot-base-cpu -t ws-bom-robot-base:cpu .
#docker tag ws-bom-robot-base:cpu ghcr.io/websolutespa/ws-bom-robot-base:cpu
docker build -f Dockerfile-robot-base-cpu -t ghcr.io/websolutespa/ws-bom-robot-base:cpu .
docker push ghcr.io/websolutespa/ws-bom-robot-base:cpu
<# gpu #>
docker build -f Dockerfile-robot-base-gpu -t ghcr.io/websolutespa/ws-bom-robot-base:gpu .
docker push ghcr.io/websolutespa/ws-bom-robot-base:gpu

dockerize app (from src)

docker build -f Dockerfile -t ws-bom-robot-app .
docker run --rm -d --name ws-bom-robot-app --env-file .env -p 6001:6001 ws-bom-robot-app

dockerize app (from latest)

docker build -f Dockerfile-pkg -t ws-bom-robot-app-pkg .
docker run --rm -d --name ws-bom-robot-app-pkg --env-file .env -p 6001:6001 ws-bom-robot-app-pkg

docker run mounted to src (dev mode)

docker run --rm  -d --env-file .env -v "$(pwd)/.data:/app/.data" -p 6001:6001 ws-bom-robot-app fastapi dev ./ws_bom_robot_app/main.py --host 0.0.0.0 --port 6001
docker run --rm  -d --env-file .env -v "$(pwd)/.data:/app/.data" -p 6001:6001 ws-bom-robot-app uvicorn ws_bom_robot_app.main:app --reload --host 0.0.0.0 --port 6001

🔖 Windows requirements (for RAG functionality only)

⚠️ While it's strongly recommended to use a docker container for development, you can run the app on Windows with the following requirements

libmagic (mandatory)

py -m pip install --upgrade python-magic-bin

tesseract-ocr (mandatory)

Install tesseract Last win-64 release

Add tesseract executable (C:\Program Files\Tesseract-OCR) to system PATH

$pathToAdd = "C:\Program Files\Tesseract-OCR"; `
$currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine); `
if ($currentPath -split ';' -notcontains $pathToAdd) { `
  [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$pathToAdd", [System.EnvironmentVariableTarget]::Machine) `
}

docling

Set the following environment variables

KMP_DUPLICATE_LIB_OK=TRUE

libreoffice (optional: for robot_env set to development/production)

Install libreoffice Last win-64 release

Add libreoffice executable (C:\Program Files\LibreOffice\program) to system PATH

$pathToAdd = "C:\Program Files\LibreOffice\program"; `
$currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine); `
if ($currentPath -split ';' -notcontains $pathToAdd) { `
  [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$pathToAdd", [System.EnvironmentVariableTarget]::Machine) `
}

poppler (optional: for robot_env set to development/production)

Download win poppler release Extract the zip, copy the nested folder "poppler-x.x.x." to a program folder (e.g. C:\Program Files\poppler-24.08.0) Add poppler executable (C:\Program Files\poppler-24.08.0\Library\bin) to system PATH

$pathToAdd = "C:\Program Files\poppler-24.08.0\Library\bin"; `
$currentPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine); `
if ($currentPath -split ';' -notcontains $pathToAdd) { `
  [System.Environment]::SetEnvironmentVariable("Path", "$currentPath;$pathToAdd", [System.EnvironmentVariableTarget]::Machine) `
}

👷 Contributors

Build/distribute pkg from websolutespa bom [Github]

dir in robot project folder

  cd ./src/robot

🔖 requirements

py -m pip install --upgrade setuptools build twine streamlit 

🪛 build

if (Test-Path ./dist) {rm ./dist -r -force}; `
py -m build && twine check dist/*

📦 test / 🧪 debugger

Install the package in editable project location

py -m pip install -U -e .
py -m pip show ws-bom-robot-app

code quality tools

# .\src\robot
!py -m pip install -U scanreq prospector[with_everything]
## unused requirements
scanreq -r requirements.txt -p ./ws_bom_robot_app
## style/linting
prospector ./ws_bom_robot_app -t pylint -t pydocstyle
## code quality/complexity
prospector ./ws_bom_robot_app -t vulture -t mccabe -t mypy 
## security
prospector ./ws_bom_robot_app -t dodgy -t bandit
## package
prospector ./ws_bom_robot_app -t pyroma

🧪 run tests

!py -m pip install -U pytest pytest-asyncio pytest-mock pytest-cov pyclean
# clean cache if needed
# pyclean --verbose .
pytest --cov=ws_bom_robot_app --log-cli-level=info
# directory
# pytest --cov=ws_bom_robot_app.llm.vector_store --log-cli-level=info ./tests/app/llm/vector_store

🐞 start debugger

streamlit run debugger.py --server.port 8051

✈️ publish

  • testpypi

    twine upload --verbose -r testpypi dist/*
    #pip install -i https://test.pypi.org/simple/ -U ws-bom-robot-app 
    
  • pypi

    twine upload --verbose dist/* 
    

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ws_bom_robot_app-0.0.84.tar.gz (76.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ws_bom_robot_app-0.0.84-py3-none-any.whl (102.2 kB view details)

Uploaded Python 3

File details

Details for the file ws_bom_robot_app-0.0.84.tar.gz.

File metadata

  • Download URL: ws_bom_robot_app-0.0.84.tar.gz
  • Upload date:
  • Size: 76.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.4

File hashes

Hashes for ws_bom_robot_app-0.0.84.tar.gz
Algorithm Hash digest
SHA256 962aea848f92c776e2604892bac66bf7792617c73b4577d38abd49ae553936b6
MD5 4c3560fb18a5aa82ed9a732607f7129c
BLAKE2b-256 edfca967969a59e544a5deb36b0fcb278a474fabcd4946eabda7358595e891b9

See more details on using hashes here.

File details

Details for the file ws_bom_robot_app-0.0.84-py3-none-any.whl.

File metadata

File hashes

Hashes for ws_bom_robot_app-0.0.84-py3-none-any.whl
Algorithm Hash digest
SHA256 f36e4870410c20e9fd90269a84ae69c14a7057be2a95c7ba77ee36144c4a3d40
MD5 1e6f5f2e2346e647b0896f4aedd88261
BLAKE2b-256 768cffd1dab9081409c57dad0b7cd57fe1ffc636b09d74051f4f28496930556a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page