- requirements.txt, config.yaml, .env, Dockerfile, docker-compose.yml - app/core: config (YAML+env override), logging (JSON structured), exceptions (typed hierarchy), json_utils (Markdown fence stripping) - app/clients: LLMClient ABC + ZhipuAIClient (run_in_executor), StorageClient ABC + RustFSClient (boto3 head_object for size check) - app/main.py: FastAPI app with health endpoint and router registration - app/core/dependencies.py: lru_cache singleton factories - tests/conftest.py: mock_llm, mock_storage, test_app, client fixtures - pytest.ini: asyncio_mode=auto - 11 unit tests passing
38 lines
748 B
YAML
38 lines
748 B
YAML
version: "3.9"
|
|
|
|
services:
|
|
ai-service:
|
|
build: .
|
|
ports:
|
|
- "8000:8000"
|
|
env_file:
|
|
- .env
|
|
depends_on:
|
|
rustfs:
|
|
condition: service_healthy
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
|
|
rustfs:
|
|
image: rustfs/rustfs:latest
|
|
ports:
|
|
- "9000:9000"
|
|
environment:
|
|
RUSTFS_ACCESS_KEY: ${STORAGE_ACCESS_KEY}
|
|
RUSTFS_SECRET_KEY: ${STORAGE_SECRET_KEY}
|
|
volumes:
|
|
- rustfs_data:/data
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9000/health"]
|
|
interval: 10s
|
|
timeout: 3s
|
|
retries: 5
|
|
start_period: 5s
|
|
|
|
volumes:
|
|
rustfs_data:
|