gla-api
The official library for GLA models — Graph-Language Assistant, by ATEC (Advancement Through Engineering & Creation).
gla-api runs a trained GLA model on your own computer or server and manages everything around it: an
OpenAI-compatible API server for your websites and apps, API keys with limits, a background service you can start and
stop, a chat in the terminal, speed tests, backups and a full system check. Windows and Linux, one or many NVIDIA GPUs.
pip install gla-api
Library page: https://pypi.org/project/gla-api/
| Version | 1.2.6 |
| Runs | GLA 2.0 and GLA 3.0 (the version is detected from the model folder) |
| Code | compiled to native code (Windows .pyd, Linux .so) |
| Operating systems | Windows 10/11 (64-bit), Linux (x86-64) |
| Python | 3.11, 3.12, 3.13 or 3.14 (also the free-threaded 3.14t) |
| GPU | NVIDIA, any number; a 3.x model can be split over 2 or 3 GPUs per copy (a CPU works for testing) |
| Precision | FP32, BF16, FP16, FP8, FP4 — tested on your GPU, with automatic fallback |
| License | Proprietary (ATEC). Not open source — see License |
Contents
- Install
- Start in one minute
- Every command
- Run the API server
- API keys
- Settings
- Use it from Python
- Call the server from any language
- GPUs, splitting and precision
- Security
- Troubleshooting
- About this release
1. Install
pip install gla-api
That one command installs the model runtime and the API server. Check it:
gla-api --version
gla-api doctor --quick
NVIDIA GPU on Windows: pip installs the CPU build of PyTorch by default. For your GPU, install the CUDA build
first (once), then the library:
pip install torch --index-url https://download.pytorch.org/whl/cu128
pip install gla-api
Update later with pip install --upgrade gla-api (gla-api check-update tells you when there is a new version).
pipnot found on Windows? Usepy -m pip install gla-apiandpy -m gla_api <command>— they work the same everywhere. To get the short commands, reinstall Python with "Add python.exe to PATH" ticked.
Several servers sharing one database (optional): pip install "gla-api[server]" adds Redis and PostgreSQL
support. A single server needs nothing extra.
2. Start in one minute
mkdir my-gla && cd my-gla
gla-api setup --owner my-website
setup does everything a new folder needs, in one step:
- creates
.envwith a secret admin token and the model folderModel_GLA/; - checks the model folder;
- creates your first API key and prints it (once — copy it).
Then copy the exported GLA model's files into Model_GLA/ and:
gla-api start # API server in the background: http://127.0.0.1:8000/v1
gla-api status # running? model loaded? how busy?
gla-api chat "Write a Python function that reverses a string"
gla-api stop
A model folder holds only data — weights (safetensors), configuration, tokenizer and documents. No code is ever run
from it. A folder named Model_CodeMind/ is found too.
3. Every command
Every command has its own help: gla-api <command> --help. All of them also work as
py -m gla_api <command> (or python -m gla_api <command>).
Set up and check
| command | what it does |
|---|---|
gla-api setup [--owner NAME] [--start] |
everything for a new folder: .env, Model_GLA/, first API key, next steps |
gla-api init |
only .env (admin token) and Model_GLA/ |
gla-api doctor [--quick] |
full check: Python packages, PyTorch, every GPU, FP8 self-test, model files (SHA-256), tokenizer, disks, key database → READY or the exact problem |
gla-api info |
model version, size, runtime, PyTorch, GPUs (does not load the model) |
gla-api verify |
checks every model file against its SHA-256 |
gla-api prefetch |
downloads the code-parser grammars once (run before taking a machine offline) |
Run the server
| command | what it does |
|---|---|
gla-api start [options] |
starts the API server in the background (keeps running after you close the window) |
gla-api stop [--timeout 60] [--force] |
stops it — answers that are running finish first |
gla-api restart [options] |
stop + start (same options as before unless you give new ones) |
gla-api status [--json] |
running or not, model ready or loading, uptime, workers, queue, served, errors |
gla-api logs [-n 50] [-f] |
the background server's log (-f keeps following it) |
gla-api serve [options] |
runs the server in this window (Ctrl+C stops it); --supervise restarts it after a crash |
start, restart and serve take the same options: --host, --port, --gpus, --split, --precision, --fp8,
--workers-per-gpu, --min-workers-per-gpu, --max-queue, --max-connections, --max-output-tokens,
--default-rpm, --default-concurrency, --request-timeout, --hooks, --ssl-certfile/--ssl-keyfile, --docs
(gla-api serve --help). start --wait-ready waits until the model is loaded.
Use the model
| command | what it does |
|---|---|
gla-api chat "question" |
one answer |
gla-api chat |
a conversation in the terminal (/mode code, /lang rust, /clear, /exit) |
gla-api chat --code --language rust "..." |
a code answer in a chosen language |
gla-api chat --url http://HOST:8000 --key gla_live_... |
ask a running server (streams the answer) |
gla-api chat --json "..." |
the full answer as JSON (confidence, reason, questions, ...) |
gla-api bench [-n 5] [--url ...] |
answer speed: seconds per answer, tokens per second |
API keys and data
| command | what it does |
|---|---|
gla-api key create --owner NAME [limits] |
a new key, printed once |
gla-api key list [--owner NAME] [--all] [--json] |
every key (never the secrets) |
gla-api key show ID |
one key's settings |
gla-api key update ID [limits] |
change limits, name, allowed IPs/websites, expiry (--expires-days 0 = never) |
gla-api key rotate ID [--grace 3600] |
a new secret with the same settings (the old one can keep working for a while) |
gla-api key revoke ID |
disable a key at once |
gla-api key usage ID / --owner NAME |
requests and tokens per day |
gla-api audit |
recent admin actions (created, updated, rotated, revoked ...) |
gla-api gen-token |
a strong random token |
gla-api backup [--out DIR] |
a safe copy of the key database, its secret and .env (also while the server runs) |
Settings and updates
| command | what it does |
|---|---|
gla-api config show |
every setting of this folder (secrets masked) and the main values in use |
gla-api config set NAME VALUE |
save one, e.g. config set port 9000 |
gla-api config unset NAME |
remove one |
gla-api config path |
where the .env file is |
gla-api check-update |
is a newer gla-api on PyPI? |
gla-api service show | install | remove |
keep the server running: a systemd service (Linux) or a task at log-on (Windows) |
--dir FOLDER before any command works in that folder instead of the current one: gla-api --dir D:\gla status.
4. Run the API server
gla-api start # this computer only: http://127.0.0.1:8000/v1
gla-api start --host 0.0.0.0 # reachable from other computers in your network
gla-api start --split 3 # GLA 3.x: each copy of the model spread over 3 GPUs
The server uses every GPU of the machine, loads as many copies of the model per GPU as fit, adds copies under load and releases them when idle, and spreads the requests over all of them. A crashed or frozen copy is restarted on its own; a GPU that cannot run the chosen precision steps down safely (fp4 → fp8, fp8 kernels → bf16). It is OpenAI-compatible:
| endpoint | for |
|---|---|
POST /v1/chat/completions |
answers (with "stream": true the answer arrives piece by piece) |
POST /v1/completions |
plain text completion |
POST /v1/code/validate |
checks code: valid, score, issues |
POST /v1/ground |
exact math and physics with units |
GET /v1/models, /v1/me, /v1/usage |
the model, this key's limits, this key's usage |
GET /health, /ready |
is the process up / is the model loaded |
/admin/keys ..., /admin/stats, /admin/workers, /admin/audit, POST /admin/model/reload |
management with the admin token (reload = new model without stopping) |
GET /metrics |
Prometheus metrics |
API description: gla-api config set docs 1, gla-api restart, then open http://127.0.0.1:8000/docs (or
/openapi.json). Off by default, so a public server does not show them. The model folder also contains
API_REFERENCE.md.
Extra options per request go in a gla object: {"gla": {"mode": "code", "language": "rust"}} (mode: auto,
text or code). Answers carry the same object back with confidence, uncertain, reason and questions.
Streaming behind a proxy. While the model writes, a streaming answer sends a keep-alive line every 15 seconds
(stream_keepalive), so proxies such as Cloudflare or nginx do not close a long answer.
Safe retries. Send Idempotency-Key: <unique id>: a retry with the same key and body returns the first answer
instead of generating again (kept 24 h). gla_api.Client does this for you.
Your own code around every answer: gla-api start --hooks my_hooks.py, where my_hooks.py defines
before_request(ctx) (change or refuse a request) and/or after_response(ctx, result) (change the answer). Both may
be async def.
Always on: gla-api service install — on Linux it writes a systemd service (serve --supervise, restarted after
a crash and at boot), on Windows a task that starts the server when you log on. gla-api service show prints it first.
Public internet: put HTTPS in front (a reverse proxy such as Cloudflare, Caddy or nginx, or
--ssl-certfile/--ssl-keyfile) and keep trusted_proxies set to the proxy's address.
5. API keys
Apps and websites call the server with an API key: Authorization: Bearer gla_live_....
gla-api key create --owner my-website --rpm 120 --daily-tokens 2000000 --allowed-origins https://example.com
gla-api key list
gla-api key update KEY_ID --rpm 0 # 0 = unlimited
gla-api key rotate KEY_ID --grace 3600 # new secret; the old one works one more hour
gla-api key usage --owner my-website
gla-api key revoke KEY_ID
Limits per key — each can be 0 for unlimited: requests per minute (--rpm), tokens per day (--daily-tokens),
parallel requests (--concurrency), tokens per answer (--max-tokens), priority 0–9 (--priority), allowed IP
addresses (--allowed-ips), allowed websites (--allowed-origins), expiry (--expires-days), scopes (--scopes:
chat, code, validate, ground, usage) and test keys (--env test).
Keys are stored only as HMAC-SHA256 hashes: even a stolen database contains no usable keys. Keys made by earlier
versions (cm_...) keep working. A key that appears in an answer is redacted.
6. Settings
Settings live in the .env file of the folder you run the server from (made by setup/init). Change them with
gla-api config set NAME VALUE (then gla-api restart), or set the same names as environment variables with the
GLA_ prefix (GLA_PORT=9000). The earlier prefix CODEMIND_ still works.
| name | default | meaning |
|---|---|---|
model |
./Model_GLA |
model folder |
host |
127.0.0.1 |
0.0.0.0 = reachable from the network |
port |
8000 |
|
gpus |
auto |
auto, 0,1, or cpu |
split |
off |
GLA 3.x: 2 or 3 GPUs per copy, auto = 3 when the GPUs divide into threes, else 2 |
precision |
auto |
auto, fp32, bf16, fp16, fp8, fp4 |
fp8 |
auto |
FP8 kernel: rowwise, tensor, dequant, off |
max_workers_per_gpu / min_workers_per_gpu |
3 / 1 |
model copies per GPU (fitted to memory and load) |
admin_token |
made by init |
controls /admin and keys — keep it secret |
admin_ips |
local |
where /admin may be called from: local (this computer and private networks), a list of IPs / networks, or * (anywhere — the token is still needed) |
ip_rpm |
0 |
requests per minute per client address on /v1 (0 = off; behind a proxy set trusted_proxies) |
verify_model |
first |
model files' SHA-256 before the server loads them: first (once, remembered until a file changes), always, size (sizes only) |
default_rpm |
60 |
requests per minute for new keys (0 = unlimited) |
default_concurrency |
16 |
parallel requests per key |
max_output_tokens |
8192 |
per answer (0 = unlimited) |
max_queue |
1024 |
waiting requests before "busy" (0 = unlimited) |
max_connections |
8192 |
open connections (0 = unlimited) |
request_timeout |
300 |
seconds per request |
stream_keepalive |
15 |
seconds between keep-alive lines of a streaming answer |
cache_ttl |
600 |
seconds a deterministic answer (temperature 0) is reused |
cors_origins |
— | websites allowed to call from a browser |
trusted_proxies |
127.0.0.1 |
your HTTPS proxy's address |
data_dir |
./gla_api_data |
keys, usage, audit log, server log, backups |
database_url / redis_url |
SQLite / none | PostgreSQL and Redis for several servers (GLA_KEY_PEPPER must then be the same on all) |
hooks |
— | your before_request / after_response module |
safety / redact_output |
1 / 1 |
content screening / secret redaction |
docs |
0 |
/docs and /openapi.json |
log_level / log_json |
INFO / 0 |
gla-api config show lists what is set and what is in use. A JSON file with the same names can be given with
gla-api --config settings.json serve.
7. Use it from Python
The model in your own program
import gla_api
model = gla_api.load("./Model_GLA") # first GPU (CPU if none); FP8 where it pays off
print(model.chat("What is the difference between a process and a thread?"))
ans = model.code("A thread-safe LRU cache", language="python")
print(ans.text, ans.confidence, ans.uncertain)
for piece in model.stream("Explain this regex: ^\\d{3}-\\d{4}$"):
print(piece, end="", flush=True)
print(model.validate("SELECT * FROM users WHERE id = ' + user_id", language="sql")["issues"])
print(model.ground("speed of a 2 kg object after falling 10 m"))
big = gla_api.load("./Model_GLA", precision="fp8", devices="all") # one copy on every GPU
answers = big.chat_many([f"Explain error code E{i}" for i in range(100)]) # spread over all of them
big.close()
huge = gla_api.load("./Model_GLA", devices="all", split=3) # GLA 3.x: each copy over 3 GPUs (split=2: over 2)
load(path, precision="auto", device="auto", devices=None, split=False, fp8="auto", safety=True, verify=False, warmup=True, threads=0, web_search=False, before=None, after=None) — gla_api.load("echo") gives a tiny test model
(no GPU, no files) for trying out your code.
chat(prompt | messages=[...], system="", mode="auto"|"text"|"code", language=None, temperature=0.8, top_p=0.92, max_tokens=0, stop=None) returns an Answer: text, mode, uncertain, confidence, reason, questions,
sources, language, language_supported, score, finish_reason, usage, raw. str(answer) is the text.
Also: code(), stream(), chat_many(), achat() / acode() (asyncio), validate(), ground(), count_tokens(),
add_hook(), info, devices, runtime, close(); with gla_api.load(...) as model: closes it for you.
A running server (no GPU or model files on this machine)
import gla_api
gla = gla_api.Client("http://127.0.0.1:8000", api_key="gla_live_...") # or GLA_URL / GLA_API_KEY
print(gla.chat("Explain what a mutex is"))
print(gla.code("Binary search", language="rust").text)
for piece in gla.stream("Write a haiku about graphs"):
print(piece, end="", flush=True)
print(gla.ready(), gla.models(), gla.me(), gla.usage(days=7))
admin = gla_api.Client("http://127.0.0.1:8000", admin_token="...") # or GLA_ADMIN_TOKEN
new = admin.create_key("my-website", rpm=120)
print(new["key"]) # shown only here
admin.rotate_key(new["id"], grace_seconds=3600)
print(admin.stats())
async with gla_api.AsyncClient("http://127.0.0.1:8000", api_key="gla_live_...") as gla: # asyncio programs
print(await gla.chat("Hello"))
async for piece in gla.stream("Tell me about graphs"):
print(piece, end="")
The client needs nothing but Python — use it on your web server while the model runs on a GPU machine. A busy or
rate-limited answer (503 / 429) is retried after the server's Retry-After (retries=2), always with an
Idempotency-Key, so a retry never produces a second answer. Errors raise gla_api.APIError with status, code,
message, retry_after and request_id.
8. Call the server from any language
Any OpenAI SDK works — point it at your server:
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8000/v1", api_key="gla_live_...")
r = client.chat.completions.create(model="gla-3.0", messages=[{"role": "user", "content": "Hello"}])
print(r.choices[0].message.content)
const r = await fetch("http://127.0.0.1:8000/v1/chat/completions", {
method: "POST",
headers: { "Authorization": "Bearer gla_live_...", "Content-Type": "application/json" },
body: JSON.stringify({ messages: [{ role: "user", content: "Hello" }], gla: { mode: "auto" } }),
});
console.log((await r.json()).choices[0].message.content);
curl http://127.0.0.1:8000/v1/chat/completions -H "Authorization: Bearer gla_live_..." \
-H "Content-Type: application/json" -d '{"messages":[{"role":"user","content":"Hello"}]}'
The model ID is gla-<version> (see GET /v1/models); any ID is accepted.
9. GPUs, splitting and precision
precision |
weights | use it for |
|---|---|---|
fp32 |
4 bytes | exact reference |
bf16 |
2 bytes | the same quality, half the memory (RTX 30xx and newer) |
fp16 |
2 bytes | older GPUs without BF16 |
fp8 |
1 byte | FP8 tensor cores on RTX 40xx/50xx, Hopper, Blackwell (elsewhere FP8 storage, BF16 compute) |
fp4 |
~5 bits | the smallest |
auto |
FP8 when the GPU passes a numeric self-test, else BF16; FP32 on CPU |
Every choice is tested on the real GPU and falls back safely instead of failing. The router, the writer's output layer and small layers stay at the compute precision. Approximate memory for one copy of GLA 3.0 (≈ 21.2 B parameters): ≈ 45 GB in BF16, ≈ 24 GB in FP8, ≈ 14 GB in FP4; GLA 2.0 (≈ 6.1 B): ≈ 12 GB, 6 GB, 4 GB.
Splitting (GLA 3.x). When one GPU is too small for a whole copy, spread each copy over several GPUs:
| GPU 1 | GPU 2 | GPU 3 | |
|---|---|---|---|
split=3 |
encoder + Brain A + router | Brain B + Brain C | writer |
split=2 |
encoder + Brain A + Brain B | Brain C + writer |
gla_api.load(path, devices="all", split=3) in Python; gla-api start --split 3 (or config set split 3) for the
server, which then runs one copy per group of GPUs (6 GPUs → 2 copies). split=True / auto picks 3 when the GPUs
divide into threes, else 2.
10. Security
- Model folders are data only (
safetensors, no pickle): loading a model never runs code from it. The server checks every file's SHA-256 before its first load (verify_model);gla-api verifychecks them by hand. - Native code. The library and the model runtime are compiled to native machine code, carry no source, comments or docstrings, and refuse to run when an installed runtime file was changed (reinstall to repair).
- This machine only by default: the server listens on 127.0.0.1 unless you pass
--host 0.0.0.0. - API keys are stored as HMAC-SHA256 hashes; per-key limits, IP and website allow-lists, expiry, rotation with a
grace period and an audit log of every admin action; repeated wrong keys lock the address out for a while (logged
as
auth.lockout). Keys never appear in full in logs or answers. - The admin token controls
/admin, which by default answers only this computer and private networks (admin_ips); keep.envprivate (gla-api backupcopies it — keep backups private too). gla-api doctoralso reports risky settings: plain HTTP on a public address, a short admin token, an open admin API, screening switched off, readable secret files.- Request size limits (checked before a body is read), content screening of requests and answers, and redaction of secrets (including API keys) in answers.
- No internet needed to answer. Only the code-parser grammars are downloaded once (
gla-api prefetch). - For the public internet: HTTPS in front,
--host 0.0.0.0only behind it.
11. Troubleshooting
| you see | do this |
|---|---|
pip / gla-api is not recognized (Windows) |
use py -m pip ... and py -m gla_api ..., or reinstall Python with "Add python.exe to PATH" |
doctor: no trained model found |
normal before you have a model: copy the exported model files into Model_GLA/ |
doctor: GPUs - 0 found |
install the CUDA build of PyTorch (Install) and a current NVIDIA driver |
FP8 self-test - selected 'dequant' |
normal on GPUs without FP8 tensor cores — FP8 storage with BF16 compute is used |
status: model: loading |
the model is still loading — wait, or gla-api start --wait-ready |
cannot reach http://... |
the server is not running: gla-api start, then gla-api logs |
| out of GPU memory | --precision fp8 or fp4, fewer --workers-per-gpu, or --split 2 / 3 for GLA 3.x |
split needs a 3.x model |
GLA 2.0 runs on one GPU per copy — drop split |
model folder is incomplete |
copy the whole folder again; gla-api verify names the bad file |
this process already runs the v2 runtime |
GLA 2.x and 3.x models need separate processes |
| a long streaming answer is cut by a proxy | lower stream_keepalive (e.g. 10) or raise the proxy's read timeout |
Admin API not allowed from this address |
call it from the server itself or your private network, or set admin_ips |
model files failed the check |
a file is damaged or incomplete: copy the model folder again, then gla-api restart |
the model runtime of this installation was changed |
pip install --force-reinstall gla-api |
12. About this release
1.2.6 is the current version. The first public release was 1.2.5; 1.2.6 has the same code with this corrected library page. Later versions will follow; this page always describes the version shown at the top.
pip install gla-api
What 1.2.6 includes:
- Both model generations: runs GLA 2.0 and GLA 3.0 (connected graphs, global attention, 24 / 18 / 34-layer
brains, 40-layer writer); the generation is detected from the model folder (
Model_GLA,Model-GLAorModels/Model-GLA) or from a training checkpoint's metadata. - Fast answers (GLA 3.0): the answer is written with a preallocated memory of the text so far, and each new word is one recorded GPU program (CUDA graph) instead of hundreds of separate launches - about 10x more words per second than a plain loop on the same GPU, with temperature, top-p, top-k, repetition penalty and minimum length all applied on the GPU.
- Fast understanding (GLA 3.0): the graph layers compute every node type and relation in one pass, and each batch goes to the GPU in one transfer.
- Accurate code graphs: assignments count as definitions, C / C++ parameters and declarations take part in data flow, and the parser is safe to use from many threads at once.
- Honest answers: an answer the model is not sure of comes back marked (
uncertain,reason,questions); an unreadable answer comes back as "not sure" withreason="unreadable". - Many GPUs: one copy per GPU, or each 3.x copy split over 2 or 3 GPUs (
split=3,--split 3). - An OpenAI-compatible server (Starlette + uvicorn) with streaming keep-alive behind proxies, idempotent retries,
per-key limits, IP and website allow-lists, an audit log, and
gla-api service installto keep it running. - Python client:
Client,AsyncClient,Model.achat()/acode(),wait_ready(), async hooks,stopsequences,validate(language="auto"). - Protection: native code for Windows and Linux; the model runtime is checked against its SHA-256 before it runs;
model files are checked before the first load (
verify="first");/adminanswers only this computer and private networks by default. - Python 3.11 - 3.14, including the free-threaded 3.14t (GIL off). On 3.14 install the code grammars with
pip install "gla-api[grammars]"; 3.11 - 3.13 get them automatically.
License
GLA models and gla-api are proprietary software of ATEC (Advancement Through Engineering & Creation).
They are licensed, not sold, and are not open source. Each GLA model version comes with its own license, which
governs how you may use it; in short, you may use GLA 2.0 and 3.0 commercially to power your own websites, apps and
API services, but you may never sell the model, and you must always credit ATEC:
Built with GLA <version> by ATEC
The library is licensed only to run GLA models and may not be decompiled or reverse-engineered. Licenses and technical documentation: https://github.com/ATECTechnologies/Graph-Language-Assistant
Metadata
Release files for gla-api 1.2.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Actions Reset | |||
|---|---|---|---|---|
| gla_api-1.2.6-cp314-none-any.whl | CPython 3.14 | none | any | Details for gla_api-1.2.6-cp314-none-any.whl |
| gla_api-1.2.6-cp313-none-any.whl | CPython 3.13 | none | any | Details for gla_api-1.2.6-cp313-none-any.whl |
| gla_api-1.2.6-cp312-none-any.whl | CPython 3.12 | none | any | Details for gla_api-1.2.6-cp312-none-any.whl |
| gla_api-1.2.6-cp311-none-any.whl | CPython 3.11 | none | any | Details for gla_api-1.2.6-cp311-none-any.whl |
Total release size: 6.3 MB
Release files / gla_api-1.2.6-cp314-none-any.whl
| Download URL | gla_api-1.2.6-cp314-none-any.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.14 |
|
SHA-256 checksum How to use checksums |
0cc8b3b2f03e4703586774c0b980d92b03e34f23fc0ce90da0453f8989b524d5
|
|
BLAKE2b-256 checksum How to use checksums |
1b8b68e00aa82114b1039a2102d70c77079b3a4591750d5d013e637499345b4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.10
|
Release files / gla_api-1.2.6-cp313-none-any.whl
| Download URL | gla_api-1.2.6-cp313-none-any.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.13 |
|
SHA-256 checksum How to use checksums |
26837645d0202d01a69cf094010015d897dee52214adcd60910d149863ab9e8d
|
|
BLAKE2b-256 checksum How to use checksums |
72bf14923e340cdc2a7893f28f8949ec1f6292c7f1027c13e21b2958c9bb1f8e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.10
|
Release files / gla_api-1.2.6-cp312-none-any.whl
| Download URL | gla_api-1.2.6-cp312-none-any.whl |
|---|---|
| Size | 1.5 MB |
| Tags | CPython 3.12 |
|
SHA-256 checksum How to use checksums |
b87e5c50bcc789cff318390e57a139de40c370db538ead8590ee9582c1905c98
|
|
BLAKE2b-256 checksum How to use checksums |
59df443e8339385b56e1263936bd9facca505c98f09fa3b0f96e0a7c251b81e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.10
|
Release files / gla_api-1.2.6-cp311-none-any.whl
| Download URL | gla_api-1.2.6-cp311-none-any.whl |
|---|---|
| Size | 1.6 MB |
| Tags | CPython 3.11 |
|
SHA-256 checksum How to use checksums |
89099841c458b2d62e033ea9e32b646997342c5ee782271be6cc8e32f32abcb2
|
|
BLAKE2b-256 checksum How to use checksums |
943a8b3d1d9d27681f44a2e924a532793a0bcdb999316660871dda6023091949
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.10
|
Security for gla-api 1.2.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.