New example, new feature.
This commit is contained in:
parent
1b3200c6da
commit
03110b4a80
6
Makefile
6
Makefile
@ -2,6 +2,7 @@ DEMO_REPLIKA = .venv/bin/ragent.demo_replika
|
||||
DEMO_DISCUSS = .venv/bin/ragent.demo_discuss
|
||||
DEMO_BATCH_MESSAGES = .venv/bin/ragent.demo_batch_messages
|
||||
DEMO_TOOLS = .venv/bin/ragent.demo_tools
|
||||
DEMO_VISION = .venv/bin/ragent.demo_vision
|
||||
PIP = .venv/bin/pip
|
||||
|
||||
default:
|
||||
@ -29,3 +30,8 @@ demo_batch_messages:
|
||||
demo_tools:
|
||||
@echo "Executing Tools Demo."
|
||||
$(DEMO_TOOLS)
|
||||
|
||||
demo_vision:
|
||||
@echo "Executing Vision Demo."
|
||||
$(DEMO_VISION)
|
||||
|
||||
|
@ -25,4 +25,7 @@ console_scripts =
|
||||
ragent.demo_replika = ragent.demo_replika:main
|
||||
ragent.demo_batch_messages = ragent.demo_batch_messages:main
|
||||
ragent.demo_tools = ragent.demo_tools:main
|
||||
ragent.demo_vision = ragent.demo_vision:main
|
||||
|
||||
|
||||
|
||||
|
@ -37,6 +37,7 @@ import pathlib
|
||||
import logging
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
from typing import Any, Dict
|
||||
import json
|
||||
import inspect
|
||||
@ -222,6 +223,33 @@ class Agent:
|
||||
self.thread = self.client.beta.threads.create()
|
||||
log.debug(f"Created thread with name {self.thread.id} for assistant {self.assistant.id}.")
|
||||
|
||||
def get_file_by_name(self, name: str):
|
||||
for file in self.client.files.list().data:
|
||||
if file.filename == str(name):
|
||||
log.debug(f"Found file with name: {name} and id: {file.id}.")
|
||||
return file
|
||||
log.debug(f"File with name: {name} not found.")
|
||||
return None
|
||||
|
||||
|
||||
|
||||
def get_or_create_file(self, path: str):
|
||||
path = pathlib.Path(path)
|
||||
files = self.client.files.list().data
|
||||
file = self.get_file_by_name(path)
|
||||
if not file:
|
||||
log.debug(f"File with name: {path} not found. Creating...")
|
||||
file = self.client.files.create(
|
||||
file=open(path, "rb"),
|
||||
purpose="assistants"
|
||||
)
|
||||
log.debug(f"Created file with name: {path} and id: {file.id}.")
|
||||
return file.id
|
||||
else:
|
||||
log.debug(f"Found file with name: {path} and id: {file.id}.")
|
||||
return file.id
|
||||
|
||||
|
||||
@property
|
||||
def _assistants(self):
|
||||
return self.client.beta.assistants.list(order="desc", limit=100).data
|
||||
@ -334,8 +362,50 @@ class Agent:
|
||||
|
||||
return function_schema
|
||||
|
||||
def communicate(self, message: str, role: str = "user"):
|
||||
def extract_image_urls(self,text):
|
||||
image_url_pattern = r'https?://\S+\.(?:png|jpg|jpeg|gif|bmp|webp|svg)(?:\?\S*)?'
|
||||
|
||||
return re.findall(image_url_pattern, text, re.IGNORECASE)
|
||||
|
||||
def communicate_images(self, message:str):
|
||||
messages = message
|
||||
if not isinstance(messages, list):
|
||||
messages = [message]
|
||||
|
||||
for message in messages:
|
||||
if isinstance(message, dict):
|
||||
message_role = message["role"]
|
||||
message = message["content"]
|
||||
else:
|
||||
message_role = "user"
|
||||
|
||||
for image_path in self.extract_image_urls(message):
|
||||
response = self.client.chat.completions.create(
|
||||
model="gpt-4o-mini",
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": [
|
||||
{"type": "text", "text": "Describe the image in full detail, in a way that a human could understand."},
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": image_path,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
],
|
||||
)
|
||||
response = response.choices[0].message.content
|
||||
response = f"This is the description of the image from the url {image_path} i have mentioned: " + response
|
||||
self.communicate(response,role="user",ignore_image_urls=True)
|
||||
|
||||
|
||||
def communicate(self, message: str, role: str = "user", ignore_image_urls:bool=False):
|
||||
log.debug(f"Sending message: {message} to assistant {self.assistant.id} in thread {self.thread.id}.")
|
||||
if not ignore_image_urls:
|
||||
self.communicate_images(message)
|
||||
messages = isinstance(message, list) and message or [message]
|
||||
for message in messages:
|
||||
if isinstance(message, dict):
|
||||
|
Loading…
Reference in New Issue
Block a user