add kia ai chat tools
CI/CD Pipeline / build-and-deploy (push) Successful in 19s
Details
CI/CD Pipeline / build-and-deploy (push) Successful in 19s
Details
This commit is contained in:
parent
9df1feb67d
commit
1fbd29c1b0
1
.api.env
1
.api.env
|
|
@ -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
|
||||||
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
from .chat import KiaAIService, get_kia_model
|
||||||
|
|
||||||
|
__all__ = ["KiaAIService", "get_kia_model"]
|
||||||
|
|
@ -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)
|
||||||
Loading…
Reference in New Issue