LLM inference SDK, for telemetry and internal model routing
Project description
Maniac Python Client
A minimal python client for Maniac's API. Supports chat completions and dataset uploads.
Installation
pip install maniac
Example Usage
from __future__ import annotations
import asyncio
from maniac import Maniac
async def main() -> None:
client = Maniac() # or Maniac({"apiKey": os.environ["MANIAC_API_KEY"]})
try:
# Run inference without a container
# Using kwargs
standard_response = await client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[{"role": "user", "content": "Tell me a story about france"}],
)
print(standard_response["choices"][0]["message"]["content"]) # type: ignore[index]
# Create a container to collect telemetry
container = await client.containers.create(
label="local-test",
initial_model="openai/gpt-4o-mini",
initial_system_prompt="You are a helpful assistant that answers questions and discusses travel topics.",
)
container_response = await client.chat.completions.create(
container=container,
messages=[{"role": "user", "content": "Tell me a story about france"}],
)
print(container_response["choices"][0]["message"]["content"]) # type: ignore[index]
# Stream responses as async iterable
gen = await client.chat.completions.stream(
container=container,
messages=[{"role": "user", "content": "Tell me a story about france"}],
)
async for chunk in gen: # type: ignore[union-attr]
piece = (
(chunk.get("choices") or [{}])[0].get("delta", {}).get("content", "")
)
if piece:
print(piece, end="", flush=True)
print()
# Stream responses with callback
async def on_chunk(chunk) -> None:
piece = (
(chunk.get("choices") or [{}])[0].get("delta", {}).get("content", "")
)
if piece:
print(piece, end="", flush=True)
await client.chat.completions.stream(
{"container": container, "messages": [{"role": "user", "content": "Tell me a story about france"}]},
on_chunk,
)
# Get a container by label and run a completion
travel_agent = await client.containers.get("local-test")
email_resp = await client.chat.completions.create(
container=travel_agent,
messages=[{"role": "user", "content": "Tell me a story about france"}],
)
print(email_resp["choices"][0]["message"]["content"]) # type: ignore[index]
# Models list / retrieve
models = await client.models.list()
print([m["id"] for m in models.get("data", [])])
model = await client.models.retrieve("openai/gpt-4o-mini")
print(model)
finally:
await client.aclose()
if __name__ == "__main__":
asyncio.run(main())
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
maniac-0.3.1.tar.gz
(47.8 kB
view details)
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
maniac-0.3.1-py3-none-any.whl
(36.8 kB
view details)
File details
Details for the file maniac-0.3.1.tar.gz.
File metadata
- Download URL: maniac-0.3.1.tar.gz
- Upload date:
- Size: 47.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6af3f3dd83e8b6375d9a0e12852aeee944a1a7d8d1e8ec64f372eca236655049
|
|
| MD5 |
e0fca7f3b445977cc9c16c9822df2560
|
|
| BLAKE2b-256 |
61a42bad8d22f3f16fad7e5ba9c5a37d34bd5215a7716a021d7f26aef58c3c12
|
File details
Details for the file maniac-0.3.1-py3-none-any.whl.
File metadata
- Download URL: maniac-0.3.1-py3-none-any.whl
- Upload date:
- Size: 36.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.8
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78f3698d71fdaa5bf16a7b958c46b7934aee2674cd2acc7302d7054a02c00a41
|
|
| MD5 |
c162cb2dec4586189c181607f9c4a656
|
|
| BLAKE2b-256 |
369085d5a1fb2e7efbdab8022d7168ea78e44fff5398251e4b222e69a06aded7
|