subashpoudel's picture
Implemented the analytics too in orchestrator
8ce97f0
Raw History Blame Contribute Delete
3.08 kB
import pandas as pd
import ast
from groq import Groq
import os
from .prompts import captioning_prompt
from langchain_core.messages import FunctionMessage , AIMessage
from .tools import InfluencerRetrievalTool
import re
class ImageCaptioner:
def __init__(self, api_key=os.environ.get('GROQ_API_KEY')):
self.client = Groq(api_key=api_key)
def caption_image(self,image_base64,user_input):
if len(image_base64)>0:
print('Captioning image')
chat_completion = self.client.chat.completions.create(
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": captioning_prompt(user_input)},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpg;base64,{image_base64[-1]}",
},
},
],
}
],
model="meta-llama/llama-4-scout-17b-16e-instruct",
max_completion_tokens=50,
temperature = 1
)
response=chat_completion.choices[0].message.content
return response
else:
return ''
class AnalyticsViewer:
def __init__(self, business_details):
self.business_details = business_details
def show_analytics(self):
tool_response = InfluencerRetrievalTool().retrieve_for_analytics(str(self.business_details))
return tool_response
class ResponseBlockExtractor:
def __init__(self, response):
self.response = response
def extract_latest(self):
latest_block = []
temp_block = []
# Reverse iterate through the messages
for message in reversed(self.response):
if isinstance(message, (FunctionMessage, AIMessage)):
temp_block.insert(0, message.content)
# Once we collect 3 items in correct structure, stop
if len(temp_block) == 3:
if "tool=" in temp_block[1] and "query_response" in temp_block[1]:
latest_block = temp_block
break
else:
temp_block = []
print('The latest block', latest_block)
return latest_block
def handle_tools(tools_list,stored_data):
tools_order = [
"analytics",
"ideation",
"human-idea-refining",
"generate-story",
"generate-ultimate-story",
"generate-image",
]
if 'generate-story' in tools_list and len(stored_data['human_ideation_interactions'])<1:
tools_list.append('human-idea-refining')
if 'generate-ultimate-story' in tools_list and len(stored_data['brainstorming_response'])<1:
tools_list.append('generate-story')
tools_list = [tool for tool in tools_order if tool in tools_list]
return tools_list