test: Проверка работоспособности сообщений обработки запросов к LLM

main
Artem-Darius Weber 2 months ago
parent bb2dc1e41e
commit bd75716560

@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4"> <module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" /> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/agentic" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/infrastructure" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" /> <orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="VcsDirectoryMappings"> <component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
<mapping directory="$PROJECT_DIR$/librealsense" vcs="Git" /> <mapping directory="$PROJECT_DIR$/librealsense" vcs="Git" />
</component> </component>
</project> </project>

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="WebResourcesPaths">
<contentEntries>
<entry url="file://$PROJECT_DIR$">
<entryData>
<resourceRoots>
<path value="file://$PROJECT_DIR$/assets" />
<path value="file://$PROJECT_DIR$/docs" />
<path value="file://$PROJECT_DIR$/models" />
<path value="file://$PROJECT_DIR$/librealsense" />
</resourceRoots>
</entryData>
</entry>
</contentEntries>
</component>
</project>

@ -0,0 +1,42 @@
import asyncio
import json
from aiokafka import AIOKafkaConsumer, AIOKafkaProducer
class KafkaClient:
def __init__(self, topic: str, bootstrap_servers: str, group_id: str = None):
self.topic = topic
self.bootstrap_servers = bootstrap_servers
self.group_id = group_id
self.consumer = None
self.producer = None
async def start(self):
# init producer & consumer
self.producer = AIOKafkaProducer(bootstrap_servers=self.bootstrap_servers)
await self.producer.start()
if self.group_id:
self.consumer = AIOKafkaConsumer(
self.topic,
bootstrap_servers=self.bootstrap_servers,
group_id=self.group_id
)
await self.consumer.start()
async def stop(self):
if self.producer:
await self.producer.stop()
if self.consumer:
await self.consumer.stop()
async def send_message(self, message: dict):
message_json = json.dumps(message).encode('utf-8')
await self.producer.send_and_wait(self.topic, message_json)
async def consume_messages(self, callback):
if not self.consumer:
raise Exception("Consumer is not initialized. Ensure group_id is set and start is called.")
async for message in self.consumer:
message_value = json.loads(message.value.decode('utf-8'))
await callback(message_value)

@ -0,0 +1,7 @@
# producer.Dockerfile
FROM python:3.9
WORKDIR /app
COPY test_show_responses_from_llm.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD ["python", "test_show_responses_from_llm.py"]

@ -0,0 +1,46 @@
version: '3.8'
services:
kafka:
image: 'bitnami/kafka:latest'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
- KAFKA_LISTENERS=INSIDE://:9092,OUTSIDE://:29092
- KAFKA_ADVERTISED_LISTENERS=INSIDE://kafka:9092,OUTSIDE://localhost:29092
- KAFKA_INTER_BROKER_LISTENER_NAME=INSIDE
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
depends_on:
- zookeeper
zookeeper:
image: 'bitnami/zookeeper:latest'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
producer:
build:
context: .
dockerfile: producer.Dockerfile
environment:
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
depends_on:
- kafka
consumer:
build:
context: .
dockerfile: consumer.Dockerfile
environment:
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
depends_on:
- kafka
processor:
build:
context: .
dockerfile: processor.Dockerfile
environment:
- KAFKA_BOOTSTRAP_SERVERS=kafka:9092
depends_on:
- kafka

@ -0,0 +1,25 @@
import asyncio
from AgenticInterfaces.KafkaClient import KafkaClient
request_topic = "request_llm_topic"
response_topic = "response_llm_topic"
bootstrap_servers = "kafka:9092"
def modify_text(text):
return text[::-1]
async def process_message(message):
modified_text = modify_text(message["text"])
response_message = {"text": modified_text}
await kafka_client.send_message(response_message)
async def main():
global kafka_client
kafka_client = KafkaClient(topic=request_topic, bootstrap_servers=bootstrap_servers, group_id="my-group")
await kafka_client.start()
try:
await kafka_client.consume_messages(process_message)
finally:
await kafka_client.stop()
asyncio.run(main())

@ -0,0 +1,7 @@
# processor.Dockerfile
FROM python:3.9
WORKDIR /app
COPY llm_worker.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD ["python", "llm_worker.py"]

@ -0,0 +1,7 @@
# producer.Dockerfile
FROM python:3.9
WORKDIR /app
COPY test_send_llm_requests.py .
COPY requirements.txt .
RUN pip install -r requirements.txt
CMD ["python", "test_send_llm_requests.py"]

@ -0,0 +1,19 @@
import asyncio
from AgenticInterfaces.KafkaClient import KafkaClient
bootstrap_servers = "kafka:9092"
request_topic = "request_llm_topic"
async def send_periodic_messages():
kafka_client = KafkaClient(topic=request_topic, bootstrap_servers=bootstrap_servers)
await kafka_client.start()
try:
while True:
message = {"text": "Пример сообщения"}
await kafka_client.send_message(message)
await asyncio.sleep(5)
finally:
await kafka_client.stop()
asyncio.run(send_periodic_messages())

@ -0,0 +1,19 @@
import asyncio
from AgenticInterfaces.KafkaClient import KafkaClient
bootstrap_servers = "kafka:9092"
response_topic = "response_llm_topic"
async def print_received_messages(message):
print("Получено сообщение:", message["text"])
async def receive_messages():
kafka_client = KafkaClient(topic=response_topic, bootstrap_servers=bootstrap_servers, group_id="response-group")
await kafka_client.start()
try:
await kafka_client.consume_messages(print_received_messages)
finally:
await kafka_client.stop()
asyncio.run(receive_messages())
Loading…
Cancel
Save