Models
Models are the interfaces that enable you to generate completions using LLMs.
OpenAIModel
The OpenAIModel
is an interface for using OpenAI-like APIs to generate completions.
from parsbench.models import OpenAIModel
model = OpenAIModel(
api_base_url="https://api.openai.com/v1/",
api_secret_key="{SECRET_KEY}",
model="gpt-4o",
)
Use can run your local model using for example Ollama
:
ollama run llama3
And use its API:
from parsbench.models import OpenAIModel
model = OpenAIModel(
api_base_url="http://localhost:11434/v1/",
api_secret_key="ollama",
model="llama3:latest",
)
AnthropicModel
The AnthropicModel
is an interface for using Anthropic-like APIs to generate completions.
from parsbench.models import AnthropicModel
model = AnthropicModel(
api_secret_key="{SECRET_KEY}",
model="claude3.5-sonnet",
)
PreTrainedTransformerModel
The PreTrainedTransformerModel
is an interface for the PreTrainedModel
of the transformers framework.
You can load any pre-trained model and tokenizer you want and pass it to the PreTrainedTransformerModel
. And it will generate completions using your own model.
from transformers import AutoModelForCausalLM, AutoTokenizer
from parsbench.models import PreTrainedTransformerModel
from parsbench.tasks import PersianMath
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2-72B-Instruct",
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2-72B-Instruct")
tf_model = PreTrainedTransformerModel(model=model, tokenizer=tokenizer)
with PersianMath() as task:
results = task.evaluate(tf_model)
Create Your Own Interface
You can easily create your own model interface by inheriting the Model
abstract class:
from parsbench.models import Model
class CustomModel(Model):
@property
def model_name(self) -> str:
return "My Custom Model"
def get_prompt_completion(self, prompt: str) -> str:
return f"Response to {prompt}"
def prompt_formater(self, prompt: str) -> str | list[dict]:
return prompt # No format
def completion_formatter(self, completion: str) -> str:
return completion.strip().replace("'", "")