47 lines
2.4 KiB
Python
47 lines
2.4 KiB
Python
# services/llm_providers/gpt4free_provider.py
|
||
from g4f.client import Client
|
||
from .base_provider import BaseLLMProvider
|
||
|
||
class Gpt4FreeProvider(BaseLLMProvider):
|
||
"""
|
||
Провайдер для работы с моделью GPT через библиотеку gpt4free.
|
||
|
||
Этот класс реализует интерфейс BaseLLMProvider и предоставляет возможность
|
||
взаимодействия с различными LLM через сервис gpt4free, который не требует
|
||
API ключа для работы.
|
||
"""
|
||
# gpt4free не требует API ключа
|
||
def __init__(self, api_key: str | None = None):
|
||
super().__init__(api_key)
|
||
self.client = Client()
|
||
|
||
|
||
def generate(self, model: str, system_prompt: str, user_prompt: str, temp: float):
|
||
"""
|
||
Генерирует ответ от модели GPT с использованием gpt4free.
|
||
|
||
Args:
|
||
model (str): Название модели для генерации ответа
|
||
system_prompt (str): Системное сообщение для контекста
|
||
user_prompt (str): Пользовательский запрос
|
||
temp (float): Температура генерации ( controls randomness of responses)
|
||
|
||
Returns:
|
||
tuple: Кортеж из двух одинаковых строк - сгенерированного ответа и его копии
|
||
"""
|
||
# temp в g4f может работать не для всех внутренних провайдеров
|
||
try:
|
||
response = self.client.chat.completions.create(
|
||
model=model, # Пример модели, может варьироваться в зависимости от доступности провайдеров
|
||
messages=[
|
||
{"role": "system", "content": system_prompt},
|
||
{"role": "user", "content": user_prompt}
|
||
],
|
||
temperature=temp
|
||
)
|
||
text = response.choices[0].message.content
|
||
return text, text
|
||
except Exception as e:
|
||
error_message = f"Ошибка при работе с gpt4free: {e}"
|
||
print(error_message)
|
||
return error_message, error_message |