Source code for concepts.language.openai_utils.llm_prompting
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
# File   : llm_prompting.py
# Author : Jiayuan Mao
# Email  : maojiayuan@gmail.com
# Date   : 08/21/2024
#
# This file is part of Project Concepts.
# Distributed under terms of the MIT license.
from typing import Optional, List
from concepts.language.openai_utils.default_client import get_default_client, get_default_chat_model
from concepts.language.openai_utils.llm_prompting_utils import auto_retry, extract_tag
[docs]
def simple_llm_prompt(
    system_instruction: str,
    user_prompts: List[str],
    task_prompt: Optional[str] = None,
    model: Optional[str] = None,
    max_tokens: int = 2048,
    tag: Optional[str] = None
):
    """
    Generate a simple LLM prompt for the given system instruction and user prompts.
    Args:
        system_instruction: the system instruction.
        user_prompts: a list of user prompts.
        task_prompt: the task prompt. If provided, it will be appended to the user prompts.
        model: the model name.
        max_tokens: the maximum number of tokens to generate.
        tag: the tag to extract from the generated text. For example, 'python' can be used to extract contents inside
            <python></python> tags.
    Returns:
        The generated prompt.
    """
    client = get_default_client()
    response = client.chat.completions.create(
        model=model if model is not None else get_default_chat_model(),
        messages=[
            {'role': 'system', 'content': system_instruction},
            *[{'role': 'user', 'content': p} for p in user_prompts],
            *([{'role': 'user', 'content': task_prompt}] if task_prompt is not None else [])
        ],
        max_tokens=max_tokens
    )
    if tag is None:
        return {'response': response}
    extracted, exception = None, None
    try:
        extracted = extract_tag(response.choices[0].message.content, tag, unique=False)
    except Exception as e:
        exception = e
    return {'response': response, 'tag': tag, 'extracted': extracted, 'extraction_exception': exception} 
simple_llm_prompt_auto_retry = auto_retry(5)(simple_llm_prompt)