|
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" |
|
} |
|
] |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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}" |
|
|
|
|
|
|
|
|
|
|