Use receipt as primary API endpoint
This commit is contained in:
@@ -588,6 +588,19 @@ User-Agent, method/path, MIME и размер изображения, длина
|
||||
Файл переведён во владение `recipe:recipe` с правами `0660`, в unit добавлены
|
||||
`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` создана
|
||||
автоматически. Проверка записала 401 и успешный OCR: последняя строка содержит
|
||||
IP `127.0.0.1`, MIME `image/png`, размер 531101 байт, длину prompt 88 и
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
# obdai.ru/recipe
|
||||
# obdai.ru/receipt
|
||||
|
||||
Минимальный Flask-сервис на ВМ `5.172.178.213`.
|
||||
|
||||
Вход: `POST /recipe` в формате `multipart/form-data` с полями `image` и
|
||||
Вход: `POST /receipt` в формате `multipart/form-data` с полями `image` и
|
||||
`prompt`. Требуется заголовок `Authorization: Bearer <RECIPE_API_TOKEN>`.
|
||||
Изображение: JPEG/PNG/WEBP, не более 10 MB.
|
||||
|
||||
`POST /receipt/` и старые пути `/recipe` и `/recipe/` также поддерживаются.
|
||||
|
||||
URL немецкого Gemini proxy и JSON-строка `GEMINI_GENERATION_CONFIG` находятся
|
||||
только в серверном EnvironmentFile. Сервис передаёт изображение, prompt и
|
||||
настройки в proxy и возвращает `text` и `usage`; разбор рецепта выполняется
|
||||
|
||||
@@ -35,10 +35,13 @@ def authorized() -> bool:
|
||||
|
||||
|
||||
@app.get("/health")
|
||||
@app.get("/receipt/health")
|
||||
def health():
|
||||
return jsonify(status="ok")
|
||||
|
||||
|
||||
@app.post("/receipt")
|
||||
@app.post("/receipt/")
|
||||
@app.post("/recipe")
|
||||
@app.post("/recipe/")
|
||||
def recipe():
|
||||
|
||||
@@ -23,3 +23,29 @@ location /recipe/ {
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user