| import os |
|
|
| import gradio as gr |
| from openai import OpenAI |
| import logging |
| import anthropic |
| from dotenv import load_dotenv |
|
|
| load_dotenv(".env") |
|
|
| logging.basicConfig(level=logging.INFO) |
| logging.getLogger("gradio").setLevel(logging.INFO) |
| logging.getLogger("httpx").setLevel(logging.WARNING) |
|
|
|
|
| def generate_completion( |
| input, |
| history, |
| api_key, |
| model, |
| system_prompt, |
| temperature, |
| max_tokens, |
| ): |
| if os.getenv("ANTHROPIC_API_KEY"): |
| api_key = os.getenv("ANTHROPIC_API_KEY") |
|
|
| if not api_key: |
| |
| yield "No API key provided" |
|
|
| client = anthropic.Anthropic( |
| api_key=api_key, |
| ) |
|
|
| messages = [] |
|
|
| if history: |
| for entry in history: |
| if len(entry) == 2: |
| messages.append( |
| { |
| "role": "user", |
| "content": entry[0], |
| } |
| ) |
| messages.append( |
| { |
| "role": "assistant", |
| "content": entry[1], |
| } |
| ) |
|
|
| messages.append( |
| { |
| "role": "user", |
| "content": input, |
| } |
| ) |
|
|
| with client.messages.stream( |
| model=model, |
| max_tokens=max_tokens, |
| temperature=temperature, |
| system=system_prompt, |
| messages=messages, |
| ) as stream: |
| answer_str = "" |
| for text in stream.text_stream: |
| |
| answer_str += text |
| yield answer_str |
|
|
|
|
| api_key = gr.Textbox(label="API Key", type="password") |
| model = gr.Textbox(label="Model", value="claude-3-opus-20240229") |
| system_prompt = gr.Textbox( |
| label="System Prompt", |
| value="You are a world-class assistant.", |
| ) |
| temperature = gr.Slider(label="Temperature", value=0.0, minimum=0.0, maximum=1.0) |
| max_tokens = gr.Slider(label="Max Tokens", value=4096, minimum=1, maximum=4096) |
|
|
|
|
| demo = gr.ChatInterface( |
| fn=generate_completion, |
| additional_inputs=[ |
| api_key, |
| model, |
| system_prompt, |
| temperature, |
| max_tokens, |
| ], |
| description="Claude Chatbot, Clone the space and add your own API key in the 'additional inputs' section. Get your key here: https://console.anthropic.com/login", |
| fill_height=True, |
| ) |
|
|
| if __name__ == "__main__": |
| demo.queue() |
| demo.launch() |
|
|