Metadata-Version: 2.4
Name: py-llm-factory
Version: 0.4.0
Summary: This is the Python package py-llm-factory.
Author-email: Tony Lee <iamtonylee@gmail.com>
License: MIT
Project-URL: Homepage, https://github.com/hktonylee/py-llm-factory
Project-URL: Repository, https://github.com/hktonylee/py-llm-factory
Classifier: Programming Language :: Python :: 3
Classifier: Development Status :: 3 - Alpha
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: py-llm-factory[openai]; extra == "dev"
Requires-Dist: py-llm-factory[groq]; extra == "dev"
Provides-Extra: openai
Requires-Dist: openai; extra == "openai"
Provides-Extra: groq
Requires-Dist: groq; extra == "groq"

# Welcome

llm-factory is a python package that can select and install LLM provider dynamically.

# Usage

```python
import py_llm_factory

# By default, it will use the LLM provider from the environment variables.
client = py_llm_factory.get_openai_compatible_client()

# You can also specify the LLM provider and API key.
client = py_llm_factory.get_openai_compatible_client(provider='openai', api_key='your_api_key')

# Let's say if you want to use the Groq provider, you can do this:
client = py_llm_factory.get_openai_compatible_client(provider='groq', api_key='your_api_key')

# Or AWS Bedrock provider, you can do this:
client = py_llm_factory.get_openai_compatible_client(provider='openai', api_key='your_api_key', base_url='https://bedrock-runtime.us-east-1.amazonaws.com/openai/v1')
```

## Model and reasoning effort configuration

Configure nano and mini tiers independently:

```sh
export LLM_FACTORY__PROVIDER='openai'
export LLM_FACTORY__NANO__PREFERRED_MODEL='gpt-6-luna'
export LLM_FACTORY__NANO__EFFORT='low'
export LLM_FACTORY__MINI__PREFERRED_MODEL='gpt-6.1-terra'
export LLM_FACTORY__MINI__EFFORT='medium'
```

```python
nano_model = py_llm_factory.get_preferred_nano_model()  # 'gpt-6-luna'
nano_effort = py_llm_factory.get_nano_effort()  # 'low'
mini_model = py_llm_factory.get_preferred_mini_model()  # 'gpt-6.1-terra'
mini_effort = py_llm_factory.get_mini_effort()  # 'medium'
```

Nested model settings take precedence over legacy
`LLM_FACTORY__PREFERRED_NANO_MODEL` and `LLM_FACTORY__PREFERRED_MINI_MODEL`.
Unset or empty model settings fall back to legacy settings, then provider defaults.
Effort getters return `None` for unset or empty values. Pass configured effort to
your provider's request when needed; client creation does not apply it automatically.
