slides-wizard / llm_helper.py
barunsaha's picture
Add conversion of slides contents to JSON
5621ff1
from langchain import HuggingFaceHub, PromptTemplate
from global_config import GlobalConfig
prompt = None
def get_llm() -> HuggingFaceHub:
llm = HuggingFaceHub(
repo_id=GlobalConfig.LLM_MODEL_NAME,
task='text-generation',
huggingfacehub_api_token=GlobalConfig.HUGGINGFACEHUB_API_TOKEN,
model_kwargs={
'temperature': GlobalConfig.LLM_MODEL_TEMPERATURE,
'min_length': GlobalConfig.LLM_MODEL_MIN_OUTPUT_LENGTH,
'max_length': GlobalConfig.LLM_MODEL_MAX_OUTPUT_LENGTH,
'max_new_tokens': GlobalConfig.LLM_MODEL_MAX_OUTPUT_LENGTH,
'num_return_sequences': 1
}
)
print(llm)
return llm
def generate_slides_content(name: str, topic: str, audience: str) -> str:
"""
Generate the outline/contents of slides for a presentation on a given topic.
:return: The content
"""
global prompt
if not prompt:
with open(GlobalConfig.SLIDES_TEMPLATE_FILE, 'r') as in_file:
template_txt = in_file.read().strip()
prompt = PromptTemplate.from_template(template_txt)
formatted_prompt = prompt.format(topic=topic, audience=audience)
# print(formatted_prompt)
llm = get_llm()
slides_content = llm(formatted_prompt, verbose=True)
return slides_content
def text_to_json(content: str) -> str:
"""
Convert input text into structured JSON representation.
:param content: Input text
:return: JSON string
"""
# f-string is not used in order to prevent interpreting the brackets
text = '''
Context:
'''
text += content
text += '''
Convert the above text into structured JSON output. The JSON structure should be something like this:
{
"presentation_title": "...",
"slides": [
{
"slide_number": "...",
"slide_heading": "...",
"slide_contents": [
"...",
"...",
],
},
{
...
},
]
}
'''
llm = get_llm()
output = llm(text, verbose=True)
output = output.strip()
first_index = max(0, output.find('{'))
last_index = min(output.rfind('}'), len(output))
output = output[first_index: last_index + 1]
return output