add kia ai chat tools
CI/CD Pipeline / build-and-deploy (push) Successful in 19s Details

This commit is contained in:
vahidrezvani 2026-02-25 11:28:14 +03:30
parent 9df1feb67d
commit 1fbd29c1b0
5 changed files with 83 additions and 0 deletions

View File

@ -27,3 +27,4 @@ PIXVERSE_API_KEY=sk-2c785f1f77ace5b4f39cb3d4dc5ef554
INTERNAL_TELEGRAM_SECRET=do8asyd0h21uodh2od2hkdmbzxc2349ASAX80scasokcu23ked2zxc INTERNAL_TELEGRAM_SECRET=do8asyd0h21uodh2od2hkdmbzxc2349ASAX80scasokcu23ked2zxc
LIARA_API_URL =https://ai.liara.ir/api/68eb653bb55873971e0d46d6/v1 LIARA_API_URL =https://ai.liara.ir/api/68eb653bb55873971e0d46d6/v1
LIARA_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiI2OThhZGIxMWQzODZhNWVmODNlMTg2YzAiLCJ0eXBlIjoiYWlfa2V5IiwiaWF0IjoxNzcwNzA3NzMwfQ.ckoR00Uxt8W4DmLCGW24P46Zq-et0Yhtu2xej5P0ClQ LIARA_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiI2OThhZGIxMWQzODZhNWVmODNlMTg2YzAiLCJ0eXBlIjoiYWlfa2V5IiwiaWF0IjoxNzcwNzA3NzMwfQ.ckoR00Uxt8W4DmLCGW24P46Zq-et0Yhtu2xej5P0ClQ
KIA_API_KEY =7ed05fadbea55c56b43c69c2061472ac

View File

@ -33,6 +33,7 @@ class Settings(BaseSettings):
internal_telegram_secret: str = getenv("INTERNAL_TELEGRAM_SECRET", "") internal_telegram_secret: str = getenv("INTERNAL_TELEGRAM_SECRET", "")
liara_api_url: str = getenv("LIARA_API_URL", "") liara_api_url: str = getenv("LIARA_API_URL", "")
liara_api_key: str = getenv("LIARA_API_KEY", "") liara_api_key: str = getenv("LIARA_API_KEY", "")
kia_api_key: str = getenv("KIA_API_KEY", "")
settings = Settings() settings = Settings()

View File

@ -30,6 +30,7 @@ from langchain_core.messages import (
) )
from .database.service import DatabaseService from .database.service import DatabaseService
from .kiaai import get_kia_model
from ..config import settings from ..config import settings
from ..models import Chatbot, Message, BotStatus, BotType from ..models import Chatbot, Message, BotStatus, BotType
from ..messages import MESSAGES from ..messages import MESSAGES
@ -53,6 +54,9 @@ async def web_search_tool(query: str) -> str:
def get_model(model: str): def get_model(model: str):
if model.startswith("kia/"):
return get_kia_model(model)
if "claude" in model: if "claude" in model:
# return ChatAnthropic(model=model, api_key=settings.anthropic_api_key) # return ChatAnthropic(model=model, api_key=settings.anthropic_api_key)
return ChatOpenAI( return ChatOpenAI(

View File

@ -0,0 +1,3 @@
from .chat import KiaAIService, get_kia_model
__all__ = ["KiaAIService", "get_kia_model"]

View File

@ -0,0 +1,74 @@
from langchain_openai import ChatOpenAI
from ...config import settings
KIA_BASE_URL = "https://api.kie.ai"
# Models that support reasoning_effort parameter
REASONING_MODELS = {"gpt-5-2", "claude-sonnet-4-5", "claude-opus-4-5", "gemini-3-pro", "gemini-2.5-flash","gemini-2.5-pro"}
class KiaAIService:
"""
Service for interacting with KIA AI models via OpenAI-compatible API.
KIA AI endpoint pattern:
https://api.kie.ai/{modelName}/v1/chat/completions
Usage:
service = KiaAIService()
model = service.get_model("kia/gpt-4o")
model = service.get_model("kia/o3", reasoning_effort="high")
"""
def get_model(
self,
model: str,
reasoning_effort: str | None = None,
) -> ChatOpenAI:
"""
Returns a LangChain-compatible ChatOpenAI model configured for KIA AI API.
Args:
model: Model identifier with optional 'kia/' prefix
(e.g. 'kia/gpt-4o', 'kia/claude-3-5-sonnet', 'kia/o3')
reasoning_effort: Reasoning effort level for supported models.
One of: 'low', 'medium', 'high'
Returns:
ChatOpenAI instance pointing to https://api.kie.ai/{modelName}/v1
"""
model_name = model.removeprefix("kia/")
base_url = f"{KIA_BASE_URL}/{model_name}/v1"
model_kwargs: dict = {}
# Add reasoning_effort for models that support it
if reasoning_effort and model_name in REASONING_MODELS:
model_kwargs["reasoning_effort"] = reasoning_effort
return ChatOpenAI(
model=model_name,
api_key=settings.kia_api_key,
base_url=base_url,
model_kwargs=model_kwargs,
)
def get_kia_model(
model: str,
reasoning_effort: str | None = None,
) -> ChatOpenAI:
"""
Convenience function to get a KIA AI LangChain model instance.
Args:
model: Model identifier with optional 'kia/' prefix
(e.g. 'kia/gpt-4o', 'kia/o3')
reasoning_effort: Optional reasoning effort ('low', 'medium', 'high')
Returns:
ChatOpenAI configured for KIA AI API
"""
service = KiaAIService()
return service.get_model(model=model, reasoning_effort=reasoning_effort)