import os
import sys
import json
from pathlib import Path
from loguru import logger
logger.remove()
logger.add(sys.stdout,
colorize=True,
format="{level}|{file}:{line}:{function}| {message}"
)
def read_return_config_section(config_section):
""" read_return_config_section
Read configuration parameters from the JSON configuration file.
Args:
config_section (str): The section of the configuration file to read.
Returns:
tuple: A tuple containing the specified configuration parameters.
Raises:
FileNotFoundError: If the configuration file is not found.
json.JSONDecodeError: If there is an error parsing the JSON configuration file.
"""
try:
config_path = Path(os.environ["ALWRITY_CONFIG"])
with open(config_path, 'r', encoding="utf-8") as file:
config = json.load(file)
if config_section == 'system_prompt':
prompt_file_path = os.path.join(os.getcwd(), 'lib', 'workspace', 'alwrity_prompts', 'alwrity_system_instruction.prompts')
with open(prompt_file_path, 'r') as file:
content = file.read()
return content
elif config_section == 'llm_config':
gpt_provider = config['LLM Options']['GPT Provider']
model = config['LLM Options']['Model']
temperature = config['LLM Options']['Temperature']
max_tokens = config['LLM Options']['Max Tokens']
top_p = config['LLM Options']['Top-p']
n = config['LLM Options']['N']
frequency_penalty = config['LLM Options']['Frequency Penalty']
presence_penalty = config['LLM Options']['Presence Penalty']
return gpt_provider, model, temperature, max_tokens, top_p, n, frequency_penalty
elif config_section == 'blog_characteristics':
blog_tone = config['Blog Content Characteristics']['Blog Tone']
blog_demographic = config['Blog Content Characteristics']['Blog Demographic']
blog_type = config['Blog Content Characteristics']['Blog Type']
blog_language = config['Blog Content Characteristics']['Blog Language']
blog_output_format = config['Blog Content Characteristics']['Blog Output Format']
blog_length = config['Blog Content Characteristics']['Blog Length']
return blog_tone, blog_demographic, blog_type, blog_language, blog_output_format, blog_length
elif config_section == 'web_research':
geo_location = config['Search Engine Parameters']['Geographic Location']
search_language = config['Search Engine Parameters']['Search Language']
num_results = config['Search Engine Parameters']['Number of Results']
time_range = config['Search Engine Parameters']['Time Range']
include_domains = config['Search Engine Parameters']['Include Domains']
similar_url = config['Search Engine Parameters']['Similar URL']
return geo_location, search_language, num_results, time_range, include_domains, similar_url
except FileNotFoundError:
logger.error(f"Configuration file not found: {config_path}")
raise
except json.JSONDecodeError as err:
logger.error(f"Error reading parameters from config file: {err}")
raise
except KeyError as err:
logger.error(f"Missing key in the configuration file: {err}")
raise
except Exception as err:
logger.error(f"An unexpected error occurred: {err}")
raise