gpt4free/g4f/integration/langchain.py
2025-02-28 00:14:29 +01:00

41 lines
No EOL
1.6 KiB
Python

from __future__ import annotations
from typing import Any, Dict
from langchain_community.chat_models import openai
from langchain_community.chat_models.openai import ChatOpenAI, BaseMessage, convert_message_to_dict
from pydantic import Field
from g4f.client import AsyncClient, Client
from g4f.client.stubs import ChatCompletionMessage
def new_convert_message_to_dict(message: BaseMessage) -> dict:
message_dict: Dict[str, Any]
if isinstance(message, ChatCompletionMessage):
message_dict = {"role": message.role, "content": message.content}
if message.tool_calls is not None:
message_dict["tool_calls"] = [{
"id": tool_call.id,
"type": tool_call.type,
"function": tool_call.function
} for tool_call in message.tool_calls]
if message_dict["content"] == "":
message_dict["content"] = None
else:
message_dict = convert_message_to_dict(message)
return message_dict
openai.convert_message_to_dict = new_convert_message_to_dict
class ChatAI(ChatOpenAI):
model_name: str = Field(default="gpt-4o", alias="model")
@classmethod
def validate_environment(cls, values: dict) -> dict:
client_params = {
"api_key": values["api_key"] if "api_key" in values else None,
"provider": values["model_kwargs"]["provider"] if "provider" in values["model_kwargs"] else None,
}
values["client"] = Client(**client_params).chat.completions
values["async_client"] = AsyncClient(
**client_params
).chat.completions
return values