Python client for Tinfoil
Project description
Tinfoil Python Library
A Python client for secure AI model inference through Tinfoil.
Installation
# With uv
uv add tinfoil
# With pip
pip install tinfoil
Usage
The Tinfoil SDK automatically selects a router enclave and verifies it against the official GitHub repository. You just need to provide your API key:
import os
from tinfoil import TinfoilAI
client = TinfoilAI(
api_key=os.getenv("TINFOIL_API_KEY")
)
chat_completion = client.chat.completions.create(
model="llama3-3-70b",
messages=[
{
"role": "user",
"content": "Hi",
}
],
)
print(chat_completion.choices[0].message.content)
Audio Transcription with Whisper
You can transcribe audio files using OpenAI's Whisper model:
import os
from tinfoil import TinfoilAI
client = TinfoilAI(
api_key=os.getenv("TINFOIL_API_KEY")
)
with open("audio.mp3", "rb") as audio_file:
transcription = client.audio.transcriptions.create(
file=audio_file,
model="whisper-large-v3-turbo",
)
print(transcription.text)
Async Usage
Simply import AsyncTinfoilAI instead of TinfoilAI and use await with each API call:
import os
import asyncio
from tinfoil import AsyncTinfoilAI
client = AsyncTinfoilAI(
api_key=os.getenv("TINFOIL_API_KEY")
)
async def main() -> None:
stream = await client.chat.completions.create(
model="llama3-3-70b",
messages=[{"role": "user", "content": "Say this is a test"}],
stream=True,
)
async for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content is not None:
print(chunk.choices[0].delta.content, end="", flush=True)
print()
asyncio.run(main())
Functionality between the synchronous and asynchronous clients is otherwise identical.
Low-level HTTP Endpoints
You can also perform arbitrary GET/POST requests that are verified:
import os
from tinfoil import NewSecureClient
api_key = os.getenv("TINFOIL_API_KEY")
tfclient = NewSecureClient()
# GET example
resp = tfclient.get(
"https://example.com/health",
headers={"Authorization": f"Bearer {api_key}"},
params={"query": "value"},
timeout=30,
)
print(resp.status_code, resp.text)
# POST example
payload = {"key": "value"}
resp = tfclient.post(
"https://example.com/analyze",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
json=payload,
timeout=30,
)
print(resp.status_code, resp.text)
Security
Please report security vulnerabilities by emailing security@tinfoil.sh.
We aim to respond to (legitimate) security reports within 24 hours.
Development
Install uv before following these instructions.
# Set up the development environment and install the package
uv sync
# Run all tests (requires the TINFOIL_API_KEY environment variable)
export TINFOIL_API_KEY="..."
uv run pytest
# Run unit tests
uv run pytest -m "not integration"
# Run integration tests (requires the TINFOIL_API_KEY environment variable)
export TINFOIL_API_KEY="..."
uv run pytest -m integration
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tinfoil-0.12.1.tar.gz.
File metadata
- Download URL: tinfoil-0.12.1.tar.gz
- Upload date:
- Size: 671.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6a51020fa7a3795c244c6c05370aaf39763c262a2c3aa66bdd15a0899c8b762d
|
|
| MD5 |
4f63fa19df8b1211c61b6134a89c12ad
|
|
| BLAKE2b-256 |
e1ae74803acb461a82a4ce595dbaee9a8e531f85030f96fdae4d0c330eca7e7c
|
Provenance
The following attestation bundles were made for tinfoil-0.12.1.tar.gz:
Publisher:
release.yml on tinfoilsh/tinfoil-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tinfoil-0.12.1.tar.gz -
Subject digest:
6a51020fa7a3795c244c6c05370aaf39763c262a2c3aa66bdd15a0899c8b762d - Sigstore transparency entry: 1520145495
- Sigstore integration time:
-
Permalink:
tinfoilsh/tinfoil-python@04901f5827b389483ce54dfc25dc529dcc2a3b39 -
Branch / Tag:
refs/tags/v0.12.1 - Owner: https://github.com/tinfoilsh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@04901f5827b389483ce54dfc25dc529dcc2a3b39 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tinfoil-0.12.1-py3-none-any.whl.
File metadata
- Download URL: tinfoil-0.12.1-py3-none-any.whl
- Upload date:
- Size: 92.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c23589d9dcc796c9faad6b4864f918190b0e17598975e72471a9edfad1c270bb
|
|
| MD5 |
fac65d55b257d131a9daf7c5310a4085
|
|
| BLAKE2b-256 |
e1ddee4ec91482a14e2db4c329a6d5cffcb8c8deaba41d6033ce1a156b35f92c
|
Provenance
The following attestation bundles were made for tinfoil-0.12.1-py3-none-any.whl:
Publisher:
release.yml on tinfoilsh/tinfoil-python
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tinfoil-0.12.1-py3-none-any.whl -
Subject digest:
c23589d9dcc796c9faad6b4864f918190b0e17598975e72471a9edfad1c270bb - Sigstore transparency entry: 1520145499
- Sigstore integration time:
-
Permalink:
tinfoilsh/tinfoil-python@04901f5827b389483ce54dfc25dc529dcc2a3b39 -
Branch / Tag:
refs/tags/v0.12.1 - Owner: https://github.com/tinfoilsh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@04901f5827b389483ce54dfc25dc529dcc2a3b39 -
Trigger Event:
push
-
Statement type: