Lightweight, config-driven client for multiple LLM providers
Project description
fj-llm
Lightweight, config-driven Python client for multiple LLM providers. One interface, any provider — no provider SDK required.
Install
pip install fj-llm
Providers
| Provider | Config key | Env var |
|---|---|---|
| OpenAI | openai |
OPENAI_API_KEY |
| Anthropic | anthropic |
ANTHROPIC_API_KEY |
| DeepSeek | deepseek |
DEEPSEEK_API_KEY |
google |
GOOGLE_API_KEY |
Configuration
On first use, a default config is created at ~/.config/fj_llm/config.yaml. Edit it to add your API keys and define model aliases:
models:
gpt-best:
provider: openai
model_name: gpt-4o
api_key_env: OPENAI_API_KEY
base_url: https://api.openai.com/v1
max_tokens: 4000
temperature: 0.1
pricing:
input_per_1m_tokens: 2.50
output_per_1m_tokens: 10.00
fallback: gpt-light # optional: alias to use on quota exhaustion
gpt-light:
provider: openai
model_name: gpt-4o-mini
api_key_env: OPENAI_API_KEY
base_url: https://api.openai.com/v1
max_tokens: 4000
temperature: 0.1
pricing:
input_per_1m_tokens: 0.15
output_per_1m_tokens: 0.60
defaults:
retry_attempts: 3
retry_delay: 1.0
timeout: 30
For Cloud Functions or other environments without filesystem access, set the FJ_LLM_CONFIG environment variable to a JSON string of the same structure.
Usage
from fj_llm import LLMClient
client = LLMClient()
response = client.query("gpt-best", "Summarise this in one sentence.", context=long_text)
if response.success:
print(response.content)
print(f"Cost: ${response.cost:.6f}")
else:
print(f"Error: {response.error}")
Cost logging
Every successful call is appended as a JSONL record to ~/.local/share/fj_llm/costs.jsonl. Override the path via the FJ_LLM_COST_LOG env var, or set cost_log in the config file.
CLI
llm-query gpt-best "What is the capital of France?"
License
MIT
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 fj_llm-0.2.0.tar.gz.
File metadata
- Download URL: fj_llm-0.2.0.tar.gz
- Upload date:
- Size: 9.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4aafa2c0b6b8490ae777b210211e96c6d227a985dc78a8cc9914bc108901362a
|
|
| MD5 |
835b4fed80d7ef1c6a179ebc61c2e051
|
|
| BLAKE2b-256 |
87a8dee2b2969478ae8d1cc19d88a1fe92a3a05dc445f96d5d00ea19b12d8d40
|
File details
Details for the file fj_llm-0.2.0-py3-none-any.whl.
File metadata
- Download URL: fj_llm-0.2.0-py3-none-any.whl
- Upload date:
- Size: 7.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d5e96b775cd877738f40cf951e38bc25cf02882f28f519a26a5c9f2c1540654
|
|
| MD5 |
363701fe4959e046ec7e06d8c7ebea7b
|
|
| BLAKE2b-256 |
33d46baff14e5253cf7793101edcbfbe9a762c993538ee25db55f624ed6d1fb6
|