Mbonea's picture
search fixed
ecb3b61
raw
history blame
3.76 kB
import aiohttp
import asyncio
import json,os
import yaml
import google.generativeai as palm
from App.Embedding.utils.Initialize import search
PALM_API = ""
API_KEY = os.environ.get("PALM_API", PALM_API)
palm.configure(api_key=API_KEY)
class GenerativeAIAssistant:
def __init__(self, api_key=API_KEY, model='gemini-pro', temperature=0.85,
candidate_count=1, top_k=40, top_p=0.95):
self.api_key = api_key
self.model = model
self.temperature = temperature
self.candidate_count = candidate_count
self.top_k = top_k
self.top_p = top_p
self.examples=[{"input": {"content": "hello"}, "output": {"content": "Hello to you too! How can I help you today?"}}]
self.context = "You are a helpful assistant"
def generate_template(self,question,task_id,summary=None):
if summary == None:
self.context = "You are a helpful assistant"
else:
self.context = summary
contexts=search(question,task_id=task_id)
context_yaml = ""
for context in contexts:
context_yaml += "\n"+ yaml.dump(context)
Template =f'''
#Instructions
You are given the following context in yaml of a transcript of a youtube video, the start and end times are indicated and the text that was said is also given. You are also given a question, use the context to answer the question in a consise manner, make it short and to the point, don't provide additional details.
#Context
{context_yaml}
#Your response be as short as possible and to the point.
#Question
{question}
'''
return Template
async def generate_message(self, messages,task_id='ok'):
user_message=messages[-1]
latest_message = messages[-1]['parts'][0]['text']
latest_message={"content":self.generate_template(latest_message,task_id)}
user_message['parts'][0]['text']=latest_message
messages[-1]=user_message
url = f'https://generativelanguage.googleapis.com/v1beta/models/{self.model}:generateContent?key={self.api_key}'
payload = {
"contents":messages,
"generationConfig": {
"temperature": 0.9,
"topK": 1,
"topP": 1,
"maxOutputTokens": 2048,
"stopSequences": []
},
"safetySettings": [
{
"category": "HARM_CATEGORY_HARASSMENT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_HATE_SPEECH",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
"threshold": "BLOCK_ONLY_HIGH"
},
{
"category": "HARM_CATEGORY_DANGEROUS_CONTENT",
"threshold": "BLOCK_ONLY_HIGH"
}
]
}
# data = {
# "prompt": {
# "context": self.context,
# "examples": self.examples,
# "messages": messages
# },
# "temperature": self.temperature,
# "top_k": self.top_k,
# "top_p": self.top_p,
# "candidate_count": self.candidate_count
# }
async with aiohttp.ClientSession() as session:
async with session.post(url, json=payload, headers={'Content-Type': 'application/json'}) as response:
try:
temp= await response.json()
return temp["candidates"][0]
except Exception as e:
return f"Error ⚠️ {e} {temp}"