Spaces:
Runtime error
Runtime error
File size: 4,708 Bytes
35cce96 |
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 |
import anthropic
import gradio as gr
from gradio.components import Dropdown, Checkbox,Textbox,IOComponent
import re
from ai import AnthropicCustom
from const import ClaudeModels,ModelTokenLength,Prompts
# Define a global variable for the conversation history
conversation_history = ""
async def interact_with_ai(user_question,token, model, token_length, prompt, prompt_input, memory):
global conversation_history
if memory:
prompt = Prompts[prompt].value.format(memory=conversation_history, question=user_question)
else:
prompt = Prompts[prompt].value.format(memory="", question=user_question)
if prompt_input != re.search(r'Human: (.*?) \n\nConversations:', prompt).group(1):
prompt = re.sub(r'Human: (.*?) \n\nConversations:', f'Human: {prompt_input} \n\nConversations:', prompt)
# Create an instance of the custom class
anth = AnthropicCustom(api_key=token, model=model, max_tokens=token_length, prompt= prompt)
# Create a generator to stream the response
response_accumulated = ""
async for response in anth.get_anthropic_response_async():
response_accumulated += response
conversation_history = f"{conversation_history} {anthropic.HUMAN_PROMPT} {user_question} {anthropic.AI_PROMPT} {response_accumulated}"
yield response_accumulated
async def chat_with_ai(message, history, token,model, token_length, prompt, prompt_input, memory,):
global conversation_history
if memory:
for conversation in history:
user_question, response_accumulated = conversation
conversation_history = f"{conversation_history} {anthropic.HUMAN_PROMPT} {user_question} {anthropic.AI_PROMPT} {response_accumulated}"
prompt = Prompts[prompt].value.format(memory=history, question=message)
else:
prompt = Prompts[prompt].value.format(memory="", question=message)
if prompt_input != re.search(r'Human: (.*?) \n\nConversations:', prompt).group(1):
prompt = re.sub(r'Human: (.*?) \n\nConversations:', f'Human: {prompt_input} \n\nConversations:', prompt)
# Create an instance of the custom class
anth = AnthropicCustom(api_key=token, model=model, max_tokens=token_length, prompt= prompt)
# Create a generator to stream the response
response_accumulated = ""
async for response in anth.get_anthropic_response_async():
response_accumulated += response
yield response_accumulated
promptDropdown:IOComponent = Dropdown(choices=list(Prompts.__members__.keys()),label="Prompt",value=list(Prompts.__members__.keys())[0])
prompt_input :IOComponent = Textbox(label="Custom Prompt", placeholder="Enter a custom prompt here", lines=3, value=re.search(r'Human: (.*?) \n\nConversations:', Prompts[promptDropdown.value].value).group(1), )
iface = gr.Interface(fn=interact_with_ai,
flagging_options=["Inappropriate", "Disrespectful", "Spam"],
allow_flagging='auto',
title="Claude Space",
inputs=[Textbox(label="Question", placeholder="Enter a question here"),Textbox(label="Token", placeholder="Enter a token here",type='password'),Dropdown(choices=[model.value for model in ClaudeModels],label="Model",value=[model.value for model in ClaudeModels][0]),Dropdown(choices=[token.value for token in ModelTokenLength],label="Token Length",value= [token.value for token in ModelTokenLength][0]),promptDropdown,prompt_input,Checkbox(label="Memory", value=False)],
outputs="markdown",
cache_examples=True,
)
promptDropdown:IOComponent = Dropdown(choices=list(Prompts.__members__.keys()),label="Prompt",value=list(Prompts.__members__.keys())[0])
prompt_input :IOComponent = Textbox(label="Custom Prompt", placeholder="Enter a custom prompt here", lines=3, value=re.search(r'Human: (.*?) \n\nConversations:', Prompts[promptDropdown.value].value).group(1), )
cface = gr.ChatInterface(fn=chat_with_ai,additional_inputs=[Textbox(label="Token", placeholder="Enter a token here",type='password'),Dropdown(choices=[model.value for model in ClaudeModels],label="Model",value=[model.value for model in ClaudeModels][0]),Dropdown(choices=[token.value for token in ModelTokenLength],label="Token Length",value= [token.value for token in ModelTokenLength][0]),promptDropdown,prompt_input,Checkbox(label="Memory", value=True)])
if __name__ == "__main__":
gd = gr.TabbedInterface([iface, cface], tab_names=["Claude Space", "Claude Chat"],title="Claude Space")
gd.queue(concurrency_count=75, max_size=100).launch(debug=True, share=False,server_name='0.0.0.0', server_port=7864)
|