9 Commits
Author SHA1 Message Date
SuspiciousActivity 79af2ece97 1.0.6 2026-10-03 17:18:47 +02:00
SuspiciousActivity c2d4e01d0b add signal handlers 2026-10-03 17:18:30 +02:00
SuspiciousActivity da8a4903a7 1.0.5, remove avx512 2026-09-24 23:57:55 +02:00
SuspiciousActivity 6f670860a9 Remove arm64 2026-09-18 19:57:38 +02:00
SuspiciousActivity 3aeaf3eaf0 1.0.4 2026-09-18 19:52:56 +02:00
SuspiciousActivity 5dbfba9a84 Debian update, big model, 3 predictions 2026-09-18 19:52:18 +02:00
Mario Zechner c99bfc0a37 1.0.3 2024-12-02 17:01:20 +01:00
Mario Zechner c6b323a86d 1.0.2 2024-12-02 17:00:58 +01:00
Mario Zechner eadde42761 Don't use buildkit 2024-12-02 17:00:42 +01:00
6 changed files with 70 additions and 24 deletions

No files matched your search

+4
View File
@@ -24,8 +24,12 @@ FetchContent_MakeAvailable(httplib)
set(CMAKE_BUILD_TYPE Release) set(CMAKE_BUILD_TYPE Release)
set(CMAKE_CXX_FLAGS_RELEASE "-O3") set(CMAKE_CXX_FLAGS_RELEASE "-O3")
target_compile_options(fasttext-static PRIVATE
-march=x86-64 -mno-avx512f)
add_executable(fasttext_lid_server main.cpp) add_executable(fasttext_lid_server main.cpp)
target_compile_options(fasttext_lid_server PRIVATE
-march=x86-64 -mno-avx512f)
target_include_directories(fasttext_lid_server PRIVATE ${fasttext_SOURCE_DIR}/src) target_include_directories(fasttext_lid_server PRIVATE ${fasttext_SOURCE_DIR}/src)
target_link_libraries(fasttext_lid_server target_link_libraries(fasttext_lid_server
+4 -4
View File
@@ -1,4 +1,4 @@
FROM debian:bullseye-slim AS builder FROM debian:bookworm-slim AS builder
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
build-essential \ build-essential \
@@ -14,7 +14,7 @@ RUN mkdir build-docker \
&& cmake -DCMAKE_BUILD_TYPE=Release .. \ && cmake -DCMAKE_BUILD_TYPE=Release .. \
&& make -j$(nproc) && make -j$(nproc)
FROM debian:bullseye-slim FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \ RUN apt-get update && apt-get install -y \
libstdc++6 \ libstdc++6 \
@@ -23,6 +23,6 @@ RUN apt-get update && apt-get install -y \
WORKDIR /app WORKDIR /app
COPY --from=builder /app/build-docker/fasttext_lid_server . COPY --from=builder /app/build-docker/fasttext_lid_server .
COPY lid.176.ftz . RUN curl --remote-name https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin
CMD ["sh", "-c", "./fasttext_lid_server ${MODEL_FILE:-lid.176.ftz} ${PORT:-8080}"] CMD ["sh", "-c", "exec ./fasttext_lid_server ${MODEL_FILE:-lid.176.bin} ${PORT:-8080}"]
+22 -8
View File
@@ -1,3 +1,7 @@
## This is a fork
Forked from [badlogic/fasttext-lid-server](https://github.com/badlogic/fasttext-lid-server/), this repository uses a newer debian version (bookworm), uses the [bigger model](https://fasttext.cc/docs/en/language-identification) (126MB) and gives you the top 3 results instead of only 1.
# FastText Language ID Server # FastText Language ID Server
HTTP server that provides language identification using FastText models. HTTP server that provides language identification using FastText models.
@@ -6,7 +10,7 @@ HTTP server that provides language identification using FastText models.
```bash ```bash
# Pull and run # Pull and run
docker run -p 8080:8080 mariozechner/fasttext-lid-server docker run -p 8080:8080 suspiciousactivity/fasttext-lid-server
# Test # Test
curl "http://localhost:8080/detect?text=Hello%20world" curl "http://localhost:8080/detect?text=Hello%20world"
@@ -18,10 +22,20 @@ curl "http://localhost:8080/detect?text=Hello%20world"
- **Parameter**: `text` (required) - **Parameter**: `text` (required)
- **Response**: JSON with language code and probability - **Response**: JSON with language code and probability
```json ```json
{ [
"language": "en", {
"probability": 0.987 "language": "en",
} "probability": 0.987
},
{
"language": "de",
"probability": 0.234
},
{
"language": "nl",
"probability": 0.123
}
]
``` ```
- **Errors**: - **Errors**:
- 400: Missing text parameter - 400: Missing text parameter
@@ -32,14 +46,14 @@ curl "http://localhost:8080/detect?text=Hello%20world"
### Using docker run ### Using docker run
```bash ```bash
# Default settings # Default settings
docker run -p 8080:8080 mariozechner/fasttext-lid-server docker run -p 8080:8080 suspiciousactivity/fasttext-lid-server
# Custom settings # Custom settings
docker run -p 9000:9000 \ docker run -p 9000:9000 \
-e PORT=9000 \ -e PORT=9000 \
-e MODEL_FILE=/models/custom.ftz \ -e MODEL_FILE=/models/custom.ftz \
-v $(pwd)/models:/models \ -v $(pwd)/models:/models \
mariozechner/fasttext-lid-server suspiciousactivity/fasttext-lid-server
``` ```
### Using docker compose ### Using docker compose
@@ -48,7 +62,7 @@ version: '3.8'
services: services:
lid-server: lid-server:
image: mariozechner/fasttext-lid-server image: suspiciousactivity/fasttext-lid-server
ports: ports:
- "${PORT:-8080}:${PORT:-8080}" - "${PORT:-8080}:${PORT:-8080}"
environment: environment:
BIN
View File
Binary file not shown.
+24 -3
View File
@@ -3,6 +3,9 @@
#include <string> #include <string>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <csignal>
httplib::Server *g_svr = nullptr;
std::string stripLabel(const std::string &label) { std::string stripLabel(const std::string &label) {
const std::string prefix = "__label__"; const std::string prefix = "__label__";
@@ -33,7 +36,7 @@ int main(int argc, char *argv[]) {
auto text = req.get_param_value("text"); auto text = req.get_param_value("text");
std::istringstream iss(text); std::istringstream iss(text);
std::vector<std::pair<fasttext::real, std::string>> predictions; std::vector<std::pair<fasttext::real, std::string>> predictions;
ft.predictLine(iss, predictions, 1, 0.0); ft.predictLine(iss, predictions, 3, 0.0);
if (predictions.empty()) { if (predictions.empty()) {
res.status = 500; res.status = 500;
@@ -41,13 +44,31 @@ int main(int argc, char *argv[]) {
return; return;
} }
std::string result = "{\"language\":\"" + stripLabel(predictions[0].second) + std::string result = "[";
"\",\"probability\":" + std::to_string(predictions[0].first) + "}";
bool first = true;
for (const auto& prediction : predictions) {
std::string predictionResult = "{\"language\":\"" + stripLabel(prediction.second) +
"\",\"probability\":" + std::to_string(prediction.first) + "}";
if (!first) {
result += ",";
}
result += predictionResult;
first = false;
}
result += "]";
res.set_content(result, "application/json"); res.set_content(result, "application/json");
}); });
g_svr = &svr;
std::signal(SIGINT, [](int) { if (g_svr) g_svr->stop(); });
std::signal(SIGTERM, [](int) { if (g_svr) g_svr->stop(); });
auto port = std::stoi(argv[2]); auto port = std::stoi(argv[2]);
std::cout << "Starting server on port " << port << std::endl; std::cout << "Starting server on port " << port << std::endl;
svr.listen("0.0.0.0", port); svr.listen("0.0.0.0", port);
std::cout << "Server stopped" << std::endl;
return 0; return 0;
} }
+16 -9
View File
@@ -1,9 +1,10 @@
#!/bin/sh #!/bin/sh
set -e set -e
version=1.0.2 version=1.0.6
platforms="linux/amd64,linux/arm64" image_name="suspiciousactivity/fasttext-lid-server"
# Check git status
if [ -n "$(git status --porcelain)" ]; then if [ -n "$(git status --porcelain)" ]; then
echo "Uncommitted changes exist" echo "Uncommitted changes exist"
exit 1 exit 1
@@ -14,14 +15,20 @@ if git rev-parse "v${version}" >/dev/null 2>&1; then
exit 1 exit 1
fi fi
# Set up buildx builder # Build AMD64
docker buildx create --use --name multi-arch-builder --platform ${platforms} docker build --platform linux/amd64 -t ${image_name}:${version}-amd64 .
docker push ${image_name}:${version}-amd64
# Build and push multi-arch images # Create and push manifest
docker buildx build --platform ${platforms} \ docker manifest create ${image_name}:${version} \
--tag mariozechner/fasttext-lid-server:latest \ ${image_name}:${version}-amd64
--tag mariozechner/fasttext-lid-server:${version} \
--push .
docker manifest create ${image_name}:latest \
${image_name}:${version}-amd64
docker manifest push ${image_name}:${version}
docker manifest push ${image_name}:latest
# Tag git release
git tag "v${version}" git tag "v${version}"
git push origin "v${version}" git push origin "v${version}"