pdf-flashcards-autogen / llm_utils.py
LE Quoc Dat
working2
b07ae48
from litellm import completion
import yaml
import os
def load_model_config():
with open('models.yaml', 'r') as file:
return yaml.safe_load(file)
def generate_completion(prompt: str, model: str = None, api_key: str = None) -> str:
"""
Generate completion using LiteLLM with the configured model.
Args:
prompt (str): The input prompt.
model (str, optional): The model to use (if not provided, default is used).
api_key (str, optional): Override API key. If not provided, will use environment variable.
Returns:
str: The generated completion text.
"""
config = load_model_config()
# Build a mapping of model to the required API key environment variable.
model_to_env = {}
for item in config['models']:
for env_key, models in item.items():
for m in models:
model_to_env[m] = env_key
# Use the default model from the first configuration if none provided.
if model is None:
first_env_var = list(config['models'][0].keys())[0]
model = config['models'][0][first_env_var][0]
# Get the correct environment variable for the model.
env_var = model_to_env.get(model)
if not env_var:
raise ValueError(f"Model '{model}' is not supported. Available models: {list(model_to_env.keys())}")
# First, check if the environment variable is set.
env_api_key = os.getenv(env_var)
if env_api_key:
# Use the API key from environment if available
api_key = env_api_key
elif api_key:
# Fallback to the API key provided by the user
pass
else:
raise ValueError(f"Please set {env_var} environment variable or provide the API key.")
messages = [{"role": "user", "content": prompt}]
response = completion(
model=model,
messages=messages,
api_key=api_key
)
return response.choices[0].message.content