A Python library for reward function validation with strict type enforcement.
Project description
osmosis-ai
A Python library that provides reward functionality for LLM applications with strict type enforcement.
Installation
pip install osmosis-ai
For development:
git clone https://github.com/Osmosis-AI/osmosis-sdk-python
cd osmosis-sdk-python
pip install -e .
Quick Start
from osmosis_ai import osmosis_reward
@osmosis_reward
def simple_reward(solution_str: str, ground_truth: str, extra_info: dict = None) -> float:
"""Basic exact match reward function."""
return 1.0 if solution_str.strip() == ground_truth.strip() else 0.0
# Use the reward function
score = simple_reward("hello world", "hello world") # Returns 1.0
Required Function Signature
All functions decorated with @osmosis_reward must have exactly this signature:
@osmosis_reward
def your_function(solution_str: str, ground_truth: str, extra_info: dict = None) -> float:
# Your reward logic here
return float_score
Parameters
solution_str: str- The solution string to evaluate (required)ground_truth: str- The correct/expected answer (required)extra_info: dict = None- Optional dictionary for additional configuration
Return Value
-> float- Must return a float value representing the reward score
The decorator will raise a TypeError if the function doesn't match this exact signature or doesn't return a float.
Examples
See the examples/ directory for complete examples:
@osmosis_reward
def case_insensitive_match(solution_str: str, ground_truth: str, extra_info: dict = None) -> float:
"""Case-insensitive string matching with partial credit."""
match = solution_str.lower().strip() == ground_truth.lower().strip()
if extra_info and 'partial_credit' in extra_info:
if not match and extra_info['partial_credit']:
len_diff = abs(len(solution_str) - len(ground_truth))
if len_diff <= 2:
return 0.5
return 1.0 if match else 0.0
@osmosis_reward
def numeric_tolerance(solution_str: str, ground_truth: str, extra_info: dict = None) -> float:
"""Numeric comparison with configurable tolerance."""
try:
solution_num = float(solution_str.strip())
truth_num = float(ground_truth.strip())
tolerance = extra_info.get('tolerance', 0.01) if extra_info else 0.01
return 1.0 if abs(solution_num - truth_num) <= tolerance else 0.0
except ValueError:
return 0.0
Running Examples
python examples/reward_functions.py
License
MIT License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Run tests and examples
- Submit a pull request
Links
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 osmosis_ai-0.2.1.tar.gz.
File metadata
- Download URL: osmosis_ai-0.2.1.tar.gz
- Upload date:
- Size: 4.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f56f9b54dd58fc9b1964a541916a964cda31944aae31f48e3444187b9c70b3b
|
|
| MD5 |
06c01f6824e653a1980a980a976a187f
|
|
| BLAKE2b-256 |
c0eef15f73a5314cb56642dde826787969fdf31f78da13b21429bb859e810a27
|
File details
Details for the file osmosis_ai-0.2.1-py3-none-any.whl.
File metadata
- Download URL: osmosis_ai-0.2.1-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5561e7214db25f222e22f28e3c6f04d9f8c41fb46f60609e81dd5a0346537d8b
|
|
| MD5 |
67f1f901068ac6f10e03a583d99c771a
|
|
| BLAKE2b-256 |
b01b7346f8c7681d46783a77e7c2989e88ace44ef7f78f6d54b21c9cb0569f69
|