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
LIARA_API_URL =https://ai.liara.ir/api/68eb653bb55873971e0d46d6/v1
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", "")
liara_api_url: str = getenv("LIARA_API_URL", "")
liara_api_key: str = getenv("LIARA_API_KEY", "")
kia_api_key: str = getenv("KIA_API_KEY", "")
settings = Settings()

View File

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