Use receipt as primary API endpoint

This commit is contained in:
“Naeel”
2026-08-29 13:37:26 +03:00
parent 773b088bfa
commit d7c2ca7c45
4 changed files with 46 additions and 2 deletions
+13
View File
@@ -588,6 +588,19 @@ User-Agent, method/path, MIME и размер изображения, длина
Файл переведён во владение `recipe:recipe` с правами `0660`, в unit добавлены Файл переведён во владение `recipe:recipe` с правами `0660`, в unit добавлены
`StateDirectory=recipe` и `StateDirectoryMode=0770`. `StateDirectory=recipe` и `StateDirectoryMode=0770`.
## Основной endpoint `/receipt`
По уточнению пользователя основным публичным endpoint сделан
`https://obdai.ru/receipt`. Добавлены Flask-маршруты `/receipt` и `/receipt/`,
nginx-маршруты без redirect и health `/receipt/health`. Старые `/recipe` и
`/recipe/` сохранены для совместимости.
Проверен автоматический сценарий через ВМ 213: временный тестовый image был
передан на ВМ, отправлен с ВМ через `POST /receipt`, после ответа временные
файлы удалены. Health вернул HTTP 200, OCR вернул HTTP 200 с непустыми `text`
и `usage`. Рабочий код принимает изображение в память; изображения не
сохраняются в постоянное хранилище.
После исправления `recipe.service` active. Таблица `requests` создана После исправления `recipe.service` active. Таблица `requests` создана
автоматически. Проверка записала 401 и успешный OCR: последняя строка содержит автоматически. Проверка записала 401 и успешный OCR: последняя строка содержит
IP `127.0.0.1`, MIME `image/png`, размер 531101 байт, длину prompt 88 и IP `127.0.0.1`, MIME `image/png`, размер 531101 байт, длину prompt 88 и
+4 -2
View File
@@ -1,11 +1,13 @@
# obdai.ru/recipe # obdai.ru/receipt
Минимальный Flask-сервис на ВМ `5.172.178.213`. Минимальный Flask-сервис на ВМ `5.172.178.213`.
Вход: `POST /recipe` в формате `multipart/form-data` с полями `image` и Вход: `POST /receipt` в формате `multipart/form-data` с полями `image` и
`prompt`. Требуется заголовок `Authorization: Bearer <RECIPE_API_TOKEN>`. `prompt`. Требуется заголовок `Authorization: Bearer <RECIPE_API_TOKEN>`.
Изображение: JPEG/PNG/WEBP, не более 10 MB. Изображение: JPEG/PNG/WEBP, не более 10 MB.
`POST /receipt/` и старые пути `/recipe` и `/recipe/` также поддерживаются.
URL немецкого Gemini proxy и JSON-строка `GEMINI_GENERATION_CONFIG` находятся URL немецкого Gemini proxy и JSON-строка `GEMINI_GENERATION_CONFIG` находятся
только в серверном EnvironmentFile. Сервис передаёт изображение, prompt и только в серверном EnvironmentFile. Сервис передаёт изображение, prompt и
настройки в proxy и возвращает `text` и `usage`; разбор рецепта выполняется настройки в proxy и возвращает `text` и `usage`; разбор рецепта выполняется
+3
View File
@@ -35,10 +35,13 @@ def authorized() -> bool:
@app.get("/health") @app.get("/health")
@app.get("/receipt/health")
def health(): def health():
return jsonify(status="ok") return jsonify(status="ok")
@app.post("/receipt")
@app.post("/receipt/")
@app.post("/recipe") @app.post("/recipe")
@app.post("/recipe/") @app.post("/recipe/")
def recipe(): def recipe():
+26
View File
@@ -23,3 +23,29 @@ location /recipe/ {
proxy_send_timeout 200s; proxy_send_timeout 200s;
proxy_read_timeout 200s; proxy_read_timeout 200s;
} }
location = /receipt {
proxy_pass http://127.0.0.1:8770/receipt;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m;
proxy_connect_timeout 10s;
proxy_send_timeout 200s;
proxy_read_timeout 200s;
}
location /receipt/ {
proxy_pass http://127.0.0.1:8770/receipt/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
client_max_body_size 10m;
proxy_connect_timeout 10s;
proxy_send_timeout 200s;
proxy_read_timeout 200s;
}