Skip to content

Repository files navigation

pangu.space

Opinionated paranoid text spacing: automatically inserts whitespace between CJK (Chinese, Japanese, Korean) and ANS (alphabetical letters, numerical digits and symbols).

Website

Try it at pangu.space: paste text on the left, get the spaced text on the right, with every added or removed space highlighted.

HTTP API

  • https://api.pangu.space/text

GET

Use GET with query strings.

$ curl --get https://api.pangu.space/text --data-urlencode "text=當你凝視著bug,bug也凝視著你"
{"text":"當你凝視著 bug,bug 也凝視著你","lib":"pangu-js","version":"10.4.0"}

QUERY

Use QUERY if you want to use a JSON body. Content-Type is optional; if provided, it must be application/json.

$ curl --request QUERY https://api.pangu.space/text --header "Content-Type: application/json" --data '{"text": "與PM戰鬥的人,應當小心自己不要成為PM"}'
{"text":"與 PM 戰鬥的人,應當小心自己不要成為 PM","lib":"pangu-js","version":"10.4.0"}

POST

Same as QUERY, for convenience.

$ curl https://api.pangu.space/text --header "Content-Type: application/json" --data '{"text": "與PM戰鬥的人,應當小心自己不要成為PM"}'
{"text":"與 PM 戰鬥的人,應當小心自己不要成為 PM","lib":"pangu-js","version":"10.4.0"}

AI Spacing

Regex rules can't tell a minus sign from a separator, so add feature=ai-spacing to the query string and an LLM decides. Works with GET, QUERY, and POST.

$ curl --get "https://api.pangu.space/text?feature=ai-spacing" --data-urlencode "text=女朋友今天的氣溫是-273.15度"
{
  "text": "女朋友今天的氣溫是 -273.15 度",
  "lib": "pangu-js",
  "version": "10.4.0",
  "model": "@cf/google/gemma-4-26b-a4b-it",
  "promptVersions": { "hyphen-digit": "v29-zh", "digit-plus": "v18-en-real-examples" },
  "candidates": [{ "kind": "hyphen-digit", "sentence": "女朋友今天的氣溫是-273.15度", "at": 9, "label": "signed-number" }]
}
  • candidates: every symbol the model was asked about. at is the symbol's index in sentence
  • label: the model's answer. null means the model failed, and that symbol keeps the regex spacing

Errors

Errors come with a code you can check:

  • missing_text (400): no text in the query string, or no string text in the JSON body
  • invalid_json (400): the QUERY or POST body is not valid JSON
  • unsupported_media_type (415): QUERY or POST provides a content type other than application/json
  • unknown_feature (400): any feature other than ai-spacing
  • too_many_candidates (413): the text has more than 20 ambiguous spots. Split it into smaller requests
  • ai_quota_exceeded (429): the daily AI quota is used up. It resets at 00:00 UTC, and Retry-After tells you how many seconds are left
  • method_not_allowed (405): any method other than GET, QUERY, POST, and OPTIONS
  • not_found (404): any path other than /text
{
  "error": {
    "code": "missing_text",
    "message": "missing query parameter: text"
  }
}

Development

$ npm install
$ npm run dev -w web # the website, http://localhost:5566
$ npm run dev -w api # the API, http://localhost:8787
$ npm test -w api

The website has no bundler. web/scripts/vendor.mjs copies pangu.js into web/public/vendor/, and both dev and deploy run it first.

$ npm run deploy -w web
$ npm run deploy -w api

Design tokens live in web/public/tokens.css. The design boards and their generators live in design/.

About

Opinionated Paranoid Text Spacing as a Service

Topics

Resources

Stars

31 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages