Spaces:
Build error
Build error
File size: 2,580 Bytes
9012b52 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | import json
import re
# Suppress all UserWarnings
from openai import OpenAI
from config import get_settings
LLM_CLIENT = OpenAI(
api_key=get_settings().openai_api_key,
timeout=20,
)
def parse_response(response: str) -> tuple[str, list[dict] | None]:
answer_match = re.search(
r"\[ANSWER\]\n(.+?)(?=\n\[(.*?)\])", response, re.DOTALL
)
related_docs_match = re.search(r"\[REFERENCE\]\n(.+)", response, re.DOTALL)
if answer_match:
answer = answer_match.group(1).strip()
related_docs = None
if related_docs_match:
related_docs_str = (
related_docs_match.group(1).strip().replace("```", "")
)
try:
related_docs = json.loads(related_docs_str)
except Exception:
print(f"failed to parse related docs: {related_docs_str}")
return answer, related_docs
raise ValueError(f"failed to parse response: {response}")
def parse_histories(histories: list[str, str]):
conversational_histories = []
for history in histories:
user_message, assistant_message = history
conversational_histories.extend(
[
{"role": "user", "content": user_message},
{"role": "assistant", "content": assistant_message},
]
)
return conversational_histories
def get_chat_model_response(
model: str,
messages: list[str],
temperature: float = 0,
tools: list | None = None,
):
if tools is not None:
chat_model_response = LLM_CLIENT.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
tools=tools,
)
else:
chat_model_response = LLM_CLIENT.chat.completions.create(
model=model,
messages=messages,
temperature=temperature,
)
return chat_model_response
def parse_tools_message(response) -> dict:
response_choices = response.choices
if len(response_choices) == 0:
return None
tool_calls_response = response_choices[0].message.tool_calls
if not tool_calls_response:
return None
response_choice_argument = tool_calls_response[0].function.arguments
response_choice_argument_dict = json.loads(response_choice_argument)
return response_choice_argument_dict
def parse_message(response) -> str | None:
response_choices = response.choices
if len(response.choices) == 0:
return None
return response_choices[0].message.content
|