Ai_Assistant/server/process/llm_funcs/llm_scr.py
2026-05-24 13:31:30 +02:00

146 lines
3.6 KiB
Python

# OpenAI tool calling with history
### Uses a sample function
import yaml
import gradio as gr
import json
import os
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
with open('character_config.yaml', 'r') as f:
char_config = yaml.safe_load(f)
client = OpenAI(api_key=openai_api_key)
# Constants
HISTORY_FILE = char_config['history_file']
MODEL = char_config['model']
SYSTEM_PROMPT = [
{
"role": "system",
"content": [
{
"type": "input_text",
"text": char_config['presets']['default']['system_prompt']
}
]
}
]
# Load/save chat history
def load_history():
if os.path.exists(HISTORY_FILE):
with open(HISTORY_FILE, "r") as f:
return json.load(f)
return SYSTEM_PROMPT
def save_history(history):
with open(HISTORY_FILE, "w") as f:
json.dump(history, f, indent=2)
def get_riko_response_no_tool(messages):
# Call OpenAI with system prompt + history
response = client.responses.create(
model=MODEL,
input= messages,
temperature=1,
top_p=1,
max_output_tokens=2048,
stream=False,
text={
"format": {
"type": "text"
}
},
)
return response
def llm_response(user_input):
messages = load_history()
# Append user message to memory
messages.append({
"role": "user",
"content": [
{"type": "input_text", "text": user_input}
]
})
riko_test_response = get_riko_response_no_tool(messages)
# just append assistant message to regular response.
messages.append({
"role": "assistant",
"content": [
{"type": "output_text", "text": riko_test_response.output_text}
]
})
save_history(messages)
return riko_test_response.output_text
# respond with Long-term memory
def llm_response_with_memory(user_input, context_memory):
messages = load_history()
# modify the system prompt here with the context memory
# Safely modify the system prompt (assumes it's always first)
if messages and messages[0]['role'] == 'system':
base_content = char_config['presets']['default']['system_prompt']
messages[0]['content'] = [
{
"type": "input_text",
"text": f"{base_content}\n\nThe following memories may or may not be relevent information from past conversations. If it is not relevent to this conversation, ignore it:\n{context_memory}"
}
]
else:
# Fallback in case system prompt is missing for some reason
messages.insert(0, {
"role": "system",
"content": [
{
"type": "input_text",
"text": f"{char_config['presets']['default']['system_prompt']}\n\n[Memory]\n{context_memory}"
}
]
})
# Append user message to memory
messages.append({
"role": "user",
"content": [
{"type": "input_text", "text": user_input}
]
})
riko_test_response = get_riko_response_no_tool(messages)
# just append assistant message to regular response.
messages.append({
"role": "assistant",
"content": [
{"type": "output_text", "text": riko_test_response.output_text}
]
})
save_history(messages)
return riko_test_response.output_text
if __name__ == "__main__":
print('running main')
response = get_riko_response_no_tool("hi riko")
print(response)