Add sentiment_engine with CryptoSentimentCalibrator fixes - improved keyword lists, lowered FinBERT threshold, added neutral handling

This commit is contained in:
Codex
2026-09-14 13:30:05 +02:00
parent 19a7812094
commit a276aeaded
149 changed files with 35226 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
# Git
.git/
.gitignore
# Python
__pycache__/
*.py[cod]
*.so
.Python
build/
dist/
*.egg-info/
# Virtual environments
venv/
env/
# IDE
.vscode/
.idea/
# OS
.DS_Store
Thumbs.db
# Logs
*.log
logs/
# Data
data/
*.parquet
*.npz
# Model cache
~/.cache/
# Test output
.pytest_cache/
.coverage
htmlcov/
# Config secrets
.env
config/*.local.yaml
# Documentation
README.md
docs/
# Tests
tests/
scripts/
# Prefect flows (copied separately)
prefect_flows/

View File

@@ -0,0 +1,61 @@
# Sentiment Engine Dockerfile
# Multi-stage build for production
# =============================================================================
# Build stage
# =============================================================================
FROM python:3.12-slim as builder
WORKDIR /app
# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc g++ cmake \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# Install Python dependencies
COPY pyproject.toml .
RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \
pip install --no-cache-dir .
# =============================================================================
# Runtime stage
# =============================================================================
FROM python:3.12-slim
WORKDIR /app
# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
libpq5 \
&& rm -rf /var/lib/apt/lists/*
# Copy Python packages from builder
COPY --from=builder /usr/local/lib/python3.12/site-packages /usr/local/lib/python3.12/site-packages
COPY --from=builder /usr/local/bin /usr/local/bin
# Copy application code
COPY src/ ./src/
COPY config/ ./config/
COPY prefect_flows/ ./prefect_flows/
COPY scripts/ ./scripts/
# Create non-root user
RUN useradd -m -u 1000 sentiment && chown -R sentiment:sentiment /app
USER sentiment
# Environment
ENV PYTHONPATH=/app/src
ENV SENTIMENT_CONFIG=/app/config/settings.yaml
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD curl -f http://localhost:8080/health || exit 1
# Expose ports
EXPOSE 8080 9090
# Entry point
ENTRYPOINT ["python", "-m", "sentiment_engine.main"]

View File

@@ -0,0 +1,84 @@
version: '3.8'
services:
# NATS JetStream for message bus
nats:
image: nats:2.10-alpine
container_name: sentiment-nats
command: [-js, -m, "8222"]
ports:
- "4222:4222" # Client
- "8222:8222" # Monitoring
volumes:
- nats-data:/data
restart: unless-stopped
# ClickHouse for analytical storage
clickhouse:
image: clickhouse/clickhouse-server:24.3-alpine
container_name: sentiment-clickhouse
environment:
- CLICKHOUSE_DB=dolphin
- CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1
- CLICKHOUSE_USER=default
- CLICKHOUSE_PASSWORD=${CLICKHOUSE_PASSWORD}
ports:
- "8123:8123" # HTTP
- "9000:9000" # Native
volumes:
- clickhouse-data:/var/lib/clickhouse
- ./clickhouse-config:/etc/clickhouse-server/config.d
ulimits:
nofile:
soft: 262144
hard: 262144
restart: unless-stopped
# Hazelcast for hot cache
hazelcast:
image: hazelcast/hazelcast:5.3-slim
container_name: sentiment-hazelcast
environment:
- HZ_CLUSTERNAME=dolphin
- HZ_NETWORK_PUBLICADDRESS=localhost:5701
ports:
- "5701:5701"
volumes:
- hazelcast-data:/data
restart: unless-stopped
# Prefect for workflow orchestration
prefect:
image: prefecthq/prefect:3-python3.12
container_name: sentiment-prefect
command: prefect server start --host 0.0.0.0
ports:
- "4200:4200"
environment:
- PREFECT_API_URL=http://localhost:4200/api
- PREFECT_UI_URL=http://localhost:4200
volumes:
- prefect-data:/root/.prefect
restart: unless-stopped
# Prefect worker for flow execution
prefect-worker:
image: prefecthq/prefect:3-python3.12
container_name: sentiment-prefect-worker
command: prefect worker start --pool sentiment-engine
environment:
- PREFECT_API_URL=http://prefect:4200/api
depends_on:
- prefect
restart: unless-stopped
volumes:
nats-data:
clickhouse-data:
hazelcast-data:
prefect-data:
latticedb-data:
networks:
default:
name: sentiment-network