diff --git a/src/assistant/lib/agent/services.py b/src/assistant/lib/agent/services.py index 39ff18f..bbb889a 100644 --- a/src/assistant/lib/agent/services.py +++ b/src/assistant/lib/agent/services.py @@ -5,6 +5,7 @@ import langchain.agents import langchain.agents.format_scratchpad import langchain.agents.output_parsers import langchain.chat_models +import langchain.chains import langchain.memory import langchain.memory.chat_memory import langchain.prompts @@ -29,12 +30,28 @@ class AgentService: self.chat_repository = chat_repository self.logger = logging.getLogger(__name__) + + async def send_message_request(self, request: str, system_prompt: str): + prompt = langchain.prompts.ChatPromptTemplate.from_messages([("system", system_prompt),]) + llm = langchain.chat_models.ChatOpenAI( + temperature=self.settings.openai.agent_temperature, + openai_api_key=self.settings.openai.api_key.get_secret_value(), + ) + chain = langchain.chains.LLMChain(llm=llm, prompt=prompt) + result = await chain.ainvoke({"input": request}) + return result["text"] + + + async def process_request(self, request: models.AgentCreateRequestModel) -> models.AgentCreateResponseModel: # Get session ID + request_text = request.text + translate_text = await self.send_message_request(request=request_text, system_prompt="Translation into English") session_request = models.RequestLastSessionId(channel=request.channel, user_id=request.user_id, minutes_ago=3) session_id = await self.chat_repository.get_last_session_id(session_request) if not session_id: session_id = uuid.uuid4() + await self.send_message_request(request='test', system_prompt="test") # Declare tools (OpenAI functions) tools = [ @@ -94,7 +111,7 @@ class AgentService: agent_executor = langchain.agents.AgentExecutor(agent=agent, tools=tools, verbose=False) chat_history = [] # temporary disable chat_history - response = await agent_executor.ainvoke({"input": request.text, "chat_history": chat_history}) + response = await agent_executor.ainvoke({"input": translate_text, "chat_history": chat_history}) user_request = models.RequestChatMessage( session_id=session_id, @@ -112,6 +129,9 @@ class AgentService: await self.chat_repository.add_message(user_request) await self.chat_repository.add_message(ai_response) - print("RES:", response) - - return models.AgentCreateResponseModel(text="response") + response_translate = await self.send_message_request( + request=f"Original text: {request_text}. Answer: {response['output']}", + system_prompt="Translate the answer into the language of the original text", + ) + print(response_translate) + return models.AgentCreateResponseModel(text=response_translate) diff --git a/src/assistant/lib/api/v1/handlers/voice_responce_handler.py b/src/assistant/lib/api/v1/handlers/voice_responce_handler.py index 17064e0..4c62677 100644 --- a/src/assistant/lib/api/v1/handlers/voice_responce_handler.py +++ b/src/assistant/lib/api/v1/handlers/voice_responce_handler.py @@ -30,8 +30,8 @@ class VoiceResponseHandler: async def voice_response( self, - channel: str, - user_id: str, + channel: str="tg", + user_id: str="1234", voice: bytes = fastapi.File(...), ) -> fastapi.responses.StreamingResponse: voice_text: str = await self.stt.recognize(voice) diff --git a/src/assistant/lib/app/app.py b/src/assistant/lib/app/app.py index d7f29c7..cf80d7c 100644 --- a/src/assistant/lib/app/app.py +++ b/src/assistant/lib/app/app.py @@ -99,7 +99,6 @@ class Application: agent_tools = agent_functions.OpenAIFunctions( repository=embedding_repository, pg_async_session=postgres_client.get_async_session() ) - agent_tools = None tts_yandex_repository = tts.TTSYandexRepository( tts_settings=app_split_settings.TTSYandexSettings(), client=http_yandex_tts_client, @@ -128,7 +127,7 @@ class Application: models.VoiceModelProvidersEnum.ELEVEN_LABS: tts_eleven_labs_repository, }, ) - + agent_service = agent_services.AgentService( settings=settings, chat_repository=chat_history_repository, tools=agent_tools ) @@ -157,7 +156,7 @@ class Application: ) # Routes - fastapi_app.include_router(liveness_probe_handler, prefix="/api/v1/health", tags=["health"]) + fastapi_app.include_router(liveness_probe_handler, prefix="/api/v1/health", tags=["health"]) fastapi_app.include_router(voice_response_handler, prefix="/api/v1/voice", tags=["voice"]) application = Application( diff --git a/src/assistant/lib/app/split_settings/tts/eleven_labs.py b/src/assistant/lib/app/split_settings/tts/eleven_labs.py index f664176..bb97e60 100644 --- a/src/assistant/lib/app/split_settings/tts/eleven_labs.py +++ b/src/assistant/lib/app/split_settings/tts/eleven_labs.py @@ -15,7 +15,7 @@ class TTSElevenLabsSettings(pydantic_settings.BaseSettings): api_key: pydantic.SecretStr = pydantic.Field(default=...) default_voice_id: str = "EXAVITQu4vr4xnSDxMaL" base_url: str = "https://api.elevenlabs.io/v1/" - timeout_seconds: int = 30 + timeout_seconds: int = 120 @property def base_headers(self) -> dict[str, str]: diff --git a/src/assistant/lib/app/split_settings/tts/yandex.py b/src/assistant/lib/app/split_settings/tts/yandex.py index 76d0829..9968bca 100644 --- a/src/assistant/lib/app/split_settings/tts/yandex.py +++ b/src/assistant/lib/app/split_settings/tts/yandex.py @@ -18,7 +18,7 @@ class TTSYandexSettings(pydantic_settings.BaseSettings): sample_rate_hertz: int = 48000 api_key: pydantic.SecretStr = pydantic.Field(default=...) base_url: str = "https://tts.api.cloud.yandex.net/speech/v1/" - timeout_seconds: int = 30 + timeout_seconds: int = 120 @property def base_headers(self) -> dict[str, str]: