LLM provider abstraction layer.
Project description
oneping
oneping.reply('Give me a ping, Vasily. One ping only, please.', provider='anthropic')
This is a Python library for querying LLM providers such as OpenAI or Anthropic, as well as local models. The main goal is to create an abstraction layer that makes switching between them seamless. Currently the following external providers are supported: openai, anthropic, google, xai, fireworks, groq, deepseek, and azure. You can also use local providers such as llama-cpp (llama.cpp), tei (text-embedding-inference), vllm (vllm), and oneping (oneping router).
There is a Chat interface that automatically tracks the message history. Kind of departing from the "one ping" notion, but oh well. Additionally, there is a textual powered console interface and a fasthtml powered web interface. Both are components that can be embedded in other applications.
Requesting the default provider will target localhost and use an OpenAI-compatible API as in llama.cpp or llama-cpp-python. The various native libraries are soft dependencies and the library can still partially function with or without any or all of them. The native packages for these providers are: openai, anthropic, google, xai, fireworks-ai, groq, and deepseek.
Installation
For standard usage, install with:
pip install oneping
To install the native major provider dependencies add "[native]" after oneping in the command above. The same goes for the chat interface dependencies with "[chat]".
The easiest way to handle authentication is to set an API key environment variable such as: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, XAI_API_KEY, etc. You can also pass the api_key argument to any of the functions directly.
Library Usage
Basic usage with Anthropic through the URL interface:
response = oneping.reply(query, provider='anthropic')
The reply function accepts a number of arguments including (some of these have per-provider defaults):
query(required): The query to send to the LLM (required)provider=local: The provider to use:openai,anthropic,google, etcsystem=None: The system prompt to use (not required, but recommended)prefill=None: Start "assistant" response with a string (Anthropic doesn't like newlines in this)model=None: Indicate the desired model for the provider (provider default)native=False: Use the native provider libraries when availablehistory=None: List of prior messages in the conversation historymax_tokens=None: The maximum number of tokens to return (provider default)base_url=None: Override the default base URL for the provider (provider default)path=None: Override the default endpoint for the provider (provider default)api_key=None: The API key to use for non-local providers
For example, to use the OpenAI API with a custom system prompt:
response = oneping.reply(query, provider='openai', system=system)
To conduct a full conversation with a local LLM, see Chat interface below. For streaming, use the function stream and for async streaming, use stream_async. Both of these take the same arguments as reply.
Command Line
You can call oneping directly or as a module with python -m oneping and use the following subcommands:
reply: get a single response from the LLMstream: stream a response from the LLMembed: get embeddings from the LLMconsole: start a console (Textual) chatweb: start a web (FastHTML) chat
These accept the arguments listed above for reply as command line arguments. For example:
oneping stream "Does Jupiter have a solid core?" --provider anthropic
Or you can pipe in your query from stdin:
echo "Does Jupiter have a solid core?" | oneping stream --provider anthropic
I've personally found it useful to set up aliases like claude = oneping stream --provider anthropic.
Chat Interface
The Chat interface is a simple wrapper for a conversation history. It can be used to chat with an LLM provider or to simply maintain a conversation history for your bot. If takes the usual reply, stream, and stream_async functions, and calling it directly will map to reply.
chat = oneping.Chat(provider='anthropic', system=system)
reply1 = chat(query1)
reply2 = chat(query2)
There is also a textual powered console interface and a fasthtml powered web interface. You can call these with: oneping console or oneping web.
Custom Providers
You can add your own providers by creating a TOML file called providers.toml in the ~/.config/oneping directory. Please consult the provider definitions in oneping/providers.toml from this repository for the available options.
Server
The server module includes a simple function to start a llama-cpp-python server on the fly (oneping.server.start in Python or oneping server from the command line).
oneping server <path-to-gguf>
To run the server in embedding mode, pass the --embedding flag. You can also specify things like --host and --port or any options supported by llama-cpp-python.
Embeddings
Embeddings queries are supported through the embed function. It accepts the relevant arguments from the reply function. Right now only openai and local providers are supported.
vecs = oneping.embed(text, provider='openai')
and on the command line:
oneping embed "hello world" --provider openai
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 oneping-0.6.2.tar.gz.
File metadata
- Download URL: oneping-0.6.2.tar.gz
- Upload date:
- Size: 22.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e41447b958d9a2ba1febea2502dd407ca679b54b3515ad6971e32d328496d1cf
|
|
| MD5 |
d4feba4abb9acee5b21af674fedb4646
|
|
| BLAKE2b-256 |
0633a4628a41c9842de4690538c9d8595742c228f1257f58acc59235a171129e
|
Provenance
The following attestation bundles were made for oneping-0.6.2.tar.gz:
Publisher:
pypi.yml on CompendiumLabs/oneping
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oneping-0.6.2.tar.gz -
Subject digest:
e41447b958d9a2ba1febea2502dd407ca679b54b3515ad6971e32d328496d1cf - Sigstore transparency entry: 755878932
- Sigstore integration time:
-
Permalink:
CompendiumLabs/oneping@053b87bb8a4914d3d2e2881a7ddfedbab8b665dd -
Branch / Tag:
refs/tags/v0.6.2 - Owner: https://github.com/CompendiumLabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@053b87bb8a4914d3d2e2881a7ddfedbab8b665dd -
Trigger Event:
push
-
Statement type:
File details
Details for the file oneping-0.6.2-py3-none-any.whl.
File metadata
- Download URL: oneping-0.6.2-py3-none-any.whl
- Upload date:
- Size: 26.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd722c3b041f73555f5bc0576ad74734b7e981efe8940293442346cdff565a15
|
|
| MD5 |
15d8e831feb57351c9d73782e8bb249c
|
|
| BLAKE2b-256 |
d034b243c84fb0007c3aa15e897167cbde02c36095686bdf6d3839b604a041f1
|
Provenance
The following attestation bundles were made for oneping-0.6.2-py3-none-any.whl:
Publisher:
pypi.yml on CompendiumLabs/oneping
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
oneping-0.6.2-py3-none-any.whl -
Subject digest:
cd722c3b041f73555f5bc0576ad74734b7e981efe8940293442346cdff565a15 - Sigstore transparency entry: 755878993
- Sigstore integration time:
-
Permalink:
CompendiumLabs/oneping@053b87bb8a4914d3d2e2881a7ddfedbab8b665dd -
Branch / Tag:
refs/tags/v0.6.2 - Owner: https://github.com/CompendiumLabs
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi.yml@053b87bb8a4914d3d2e2881a7ddfedbab8b665dd -
Trigger Event:
push
-
Statement type: