mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2024-12-18 08:27:03 +02:00
Merge pull request #22 from caugner/batch-translation
Add support for batch translation
This commit is contained in:
commit
5b0cdae2e7
@ -92,6 +92,7 @@ docker-compose up -d --build
|
||||
| --port | Set port to bind the server to | `5000` |
|
||||
| --char-limit | Set character limit | `No limit` |
|
||||
| --req-limit | Set maximum number of requests per minute per client | `No limit` |
|
||||
| --batch-limit | Set maximum number of texts to translate in a batch request | `No limit` |
|
||||
| --ga-id | Enable Google Analytics on the API client page by providing an ID | `No tracking` |
|
||||
| --debug | Enable debug environment | `False` |
|
||||
| --ssl | Whether to enable SSL | `False` |
|
||||
|
34
app/app.py
34
app/app.py
@ -13,7 +13,7 @@ def get_remote_address():
|
||||
|
||||
return ip
|
||||
|
||||
def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_language_source="en", frontend_language_target="en"):
|
||||
def create_app(char_limit=-1, req_limit=-1, batch_limit=-1, ga_id=None, debug=False, frontend_language_source="en", frontend_language_target="en"):
|
||||
from app.init import boot
|
||||
boot()
|
||||
|
||||
@ -126,10 +126,13 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
|
||||
- in: formData
|
||||
name: q
|
||||
schema:
|
||||
type: string
|
||||
oneOf:
|
||||
- type: string
|
||||
example: Hello world!
|
||||
- type: array
|
||||
example: ['Hello world!']
|
||||
required: true
|
||||
description: Text to translate
|
||||
description: Text(s) to translate
|
||||
- in: formData
|
||||
name: source
|
||||
schema:
|
||||
@ -152,8 +155,10 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
|
||||
type: object
|
||||
properties:
|
||||
translatedText:
|
||||
type: string
|
||||
description: Translated text
|
||||
oneOf:
|
||||
- type: string
|
||||
- type: array
|
||||
description: Translated text(s)
|
||||
400:
|
||||
description: Invalid request
|
||||
schema:
|
||||
@ -200,8 +205,21 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
|
||||
if not target_lang:
|
||||
abort(400, description="Invalid request: missing target parameter")
|
||||
|
||||
batch = isinstance(q, list)
|
||||
|
||||
if batch and batch_limit != -1:
|
||||
batch_size = len(q)
|
||||
if batch_limit < batch_size:
|
||||
abort(400, description="Invalid request: Request (%d) exceeds text limit (%d)" % (batch_size, batch_limit))
|
||||
|
||||
if char_limit != -1:
|
||||
q = q[:char_limit]
|
||||
if batch:
|
||||
chars = sum([len(text) for text in q])
|
||||
else:
|
||||
chars = len(q)
|
||||
|
||||
if char_limit < chars:
|
||||
abort(400, description="Invalid request: Request (%d) exceeds character limit (%d)" % (chars, char_limit))
|
||||
|
||||
if source_lang == 'auto':
|
||||
candidate_langs = list(filter(lambda l: l.lang in language_map, detect_langs(q)))
|
||||
@ -230,7 +248,11 @@ def create_app(char_limit=-1, req_limit=-1, ga_id=None, debug=False, frontend_la
|
||||
abort(400, description="%s is not supported" % target_lang)
|
||||
|
||||
translator = src_lang.get_translation(tgt_lang)
|
||||
|
||||
try:
|
||||
if batch:
|
||||
return jsonify({"translatedText": [translator.translate(text) for text in q] })
|
||||
else:
|
||||
return jsonify({"translatedText": translator.translate(q) })
|
||||
except Exception as e:
|
||||
abort(500, description="Cannot translate text: %s" % str(e))
|
||||
|
3
main.py
3
main.py
@ -10,6 +10,8 @@ parser.add_argument('--char-limit', default=-1, type=int, metavar="<number of ch
|
||||
help='Set character limit (%(default)s)')
|
||||
parser.add_argument('--req-limit', default=-1, type=int, metavar="<number>",
|
||||
help='Set maximum number of requests per minute per client (%(default)s)')
|
||||
parser.add_argument('--batch-limit', default=-1, type=int, metavar="<number of texts>",
|
||||
help='Set maximum number of texts to translate in a batch request (%(default)s)')
|
||||
parser.add_argument('--ga-id', type=str, default=None, metavar="<GA ID>",
|
||||
help='Enable Google Analytics on the API client page by providing an ID (%(default)s)')
|
||||
parser.add_argument('--debug', default=False, action="store_true",
|
||||
@ -27,6 +29,7 @@ args = parser.parse_args()
|
||||
if __name__ == "__main__":
|
||||
app = create_app(char_limit=args.char_limit,
|
||||
req_limit=args.req_limit,
|
||||
batch_limit=args.batch_limit,
|
||||
ga_id=args.ga_id,
|
||||
debug=args.debug,
|
||||
frontend_language_source=args.frontend_language_source,
|
||||
|
Loading…
Reference in New Issue
Block a user