added managers apis
This commit is contained in:
@@ -5,7 +5,7 @@ from pydantic import BaseModel, Field
|
||||
from typing import List, Dict, Optional
|
||||
from src.prompts.sops import *
|
||||
from src.models.response_schemas import *
|
||||
from src.services.document_parser import DocumentParser
|
||||
from src.services.sop_document_parser import DocumentParser
|
||||
from dotenv import load_dotenv
|
||||
load_dotenv()
|
||||
|
||||
@@ -264,146 +264,5 @@ class SopGeneratorManager:
|
||||
self.client = OpenAI(api_key=self.api_key)
|
||||
self.model = "gpt-4o-mini"
|
||||
|
||||
def extract_sops_from_executive_vision_goals_doc(self, data: dict,executives:List) -> SOPsResponse:
|
||||
"""
|
||||
Extracts SOPs categorized into 'must,' 'shall,' and 'will' based on executive vision and goals.
|
||||
|
||||
:param data: A dictionary containing vision and goals.
|
||||
:return: SOPsResponse containing the SOPs for executives
|
||||
"""
|
||||
try:
|
||||
|
||||
vision = data.get("vision", "No vision provided")
|
||||
goals = data.get("goals", "No goals provided")
|
||||
|
||||
prompt = get_sop_executive_from_vision_goals(executives)
|
||||
|
||||
user_content = f'''
|
||||
Vision: {vision}
|
||||
Goals: {goals}
|
||||
'''
|
||||
|
||||
response = self.client.beta.chat.completions.parse(
|
||||
model=self.model,
|
||||
messages=[
|
||||
{
|
||||
"role": "system",
|
||||
"content": f'''{prompt}'''
|
||||
},
|
||||
{
|
||||
"role": "user",
|
||||
"content": user_content,
|
||||
}
|
||||
],
|
||||
response_format=Categories,
|
||||
max_tokens=2048,
|
||||
temperature=0.1
|
||||
)
|
||||
|
||||
extracted_text = json.loads(response.choices[0].message.content)
|
||||
return extracted_text
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error occurred: {str(e)}")
|
||||
return False
|
||||
|
||||
|
||||
def generate_sops_for_department_managers(self, docs):
|
||||
try:
|
||||
# First, extract departments and managers
|
||||
sop_doc = DocumentParser()
|
||||
departments_and_roles = sop_doc.extract_departments_and_managers(docs)
|
||||
|
||||
if not departments_and_roles or not departments_and_roles.get('departments'):
|
||||
return False
|
||||
|
||||
departments_with_sops = []
|
||||
|
||||
for department in departments_and_roles['departments']:
|
||||
managers_with_sops = []
|
||||
for role in department['managerial_roles']:
|
||||
prompt = get_sop_for_department_managers()
|
||||
response = self.client.beta.chat.completions.parse(
|
||||
model=self.model,
|
||||
messages=[
|
||||
{"role": "system", "content": prompt},
|
||||
{"role": "user", "content": f"Generate SOPs for {role['title']} in {department['name']} department."}
|
||||
],
|
||||
response_format=ManagerSOPs,
|
||||
max_tokens=1024,
|
||||
temperature=0.1
|
||||
)
|
||||
manager_sops = json.loads(response.choices[0].message.content)
|
||||
managers_with_sops.append(ManagerWithSOPs(title=role['title'], sops=manager_sops))
|
||||
|
||||
departments_with_sops.append(DepartmentManagerSOPs(
|
||||
name=department['name'],
|
||||
managers=managers_with_sops
|
||||
))
|
||||
|
||||
return ExecutiveManagerSOPsResponse(departments=departments_with_sops)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error in generate_sops_for_department_managers: {str(e)}")
|
||||
return False
|
||||
|
||||
|
||||
def generate_sops_from_questionnaire(self, questionnaire_data: dict, executives: List[str], managers: List[str], departments: List[str]):
|
||||
try:
|
||||
prompt = get_sop_executive_from_questionnaire()
|
||||
|
||||
# Prepare the questionnaire data for the prompt
|
||||
user_content = json.dumps(questionnaire_data, indent=2)
|
||||
|
||||
response = self.client.beta.chat.completions.parse(
|
||||
model=self.model,
|
||||
messages=[
|
||||
{"role": "system", "content": prompt},
|
||||
{"role": "user", "content": f"Generate SOPs based on this questionnaire:\n{user_content}\n\nExecutives to consider: {', '.join(executives)}\nManagers to consider: {', '.join(managers)}\nDepartments to consider: {', '.join(departments)}"}
|
||||
],
|
||||
response_format={"type": "json_object"},
|
||||
max_tokens=4096,
|
||||
temperature=0.1
|
||||
)
|
||||
|
||||
sops_data = json.loads(response.choices[0].message.content)
|
||||
|
||||
# Process executive SOPs
|
||||
executive_sops = {}
|
||||
for executive in executives:
|
||||
if executive in sops_data['executives']:
|
||||
executive_sops[executive] = Categories(**sops_data['executives'][executive])
|
||||
else:
|
||||
executive_sops[executive] = Categories()
|
||||
|
||||
# Process department manager SOPs
|
||||
departments_with_sops = []
|
||||
for dept_name in departments:
|
||||
dept_data = next((d for d in sops_data['departments'] if d['name'].lower() == dept_name.lower()), None)
|
||||
if dept_data:
|
||||
managers_with_sops = [
|
||||
ManagerWithSOPs(
|
||||
title=manager,
|
||||
sops=ManagerSOPs(**dept_data['managers'])
|
||||
)
|
||||
for manager in managers
|
||||
|
||||
]
|
||||
if managers_with_sops:
|
||||
departments_with_sops.append(DepartmentManagerSOPs(
|
||||
name=dept_name,
|
||||
managers=managers_with_sops
|
||||
))
|
||||
|
||||
return {
|
||||
"executive_sops": executive_sops,
|
||||
"department_sops": ExecutiveManagerSOPsResponse(departments=departments_with_sops)
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error in generate_sops_from_questionnaire: {str(e)}")
|
||||
return False
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user