Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import os | |
from collections.abc import Iterator | |
import gradio as gr | |
from cohere import ClientV2 | |
model_id = "command-a-translate-08-2025" | |
# Initialize Cohere client | |
api_key = os.getenv("COHERE_API_KEY") | |
if not api_key: | |
raise ValueError("COHERE_API_KEY environment variable is required") | |
client = ClientV2(api_key=api_key, client_name="hf-command-a-translate-08-2025") | |
def generate(message: str, history: list[dict], max_new_tokens: int = 512) -> Iterator[str]: | |
""" | |
Gradio passes the conversation as a list of message dicts, not as (message, history). | |
The last message is the current user message, previous are the history. | |
""" | |
# Build messages for Cohere API (text-only) | |
messages = [] | |
# Add conversation history (text-only) | |
for item in history: | |
role = item.get("role") | |
content = item.get("content", "") | |
if content is None: | |
content = "" | |
if not isinstance(content, str): | |
content = str(content) | |
if role in ("assistant", "user"): | |
messages.append({"role": role, "content": content}) | |
# Add current user message (text-only) | |
current_text = message or "" | |
if current_text is None: | |
current_text = "" | |
if not isinstance(current_text, str): | |
current_text = str(current_text) | |
if current_text: | |
messages.append({"role": "user", "content": current_text}) | |
try: | |
# Call Cohere API using the correct event type and delta access | |
response = client.chat_stream( | |
model=model_id, | |
messages=messages, | |
temperature=0.3, | |
max_tokens=max_new_tokens, | |
) | |
output = "" | |
for event in response: | |
if getattr(event, "type", None) == "content-delta": | |
# event.delta.message.content.text is the streamed text | |
text = getattr(event.delta.message.content, "text", "") | |
output += text | |
yield output | |
except Exception as e: | |
gr.Warning(f"Error calling Cohere API: {str(e)}") | |
yield "" | |
examples = [ | |
[ | |
"Translate everything that follows into Spanish:\n\nEnterprises rely on translation for some of their most sensitive and business-critical documents and cannot risk data leakage, compliance violations, or misunderstandings. Mistranslated documents can reduce trust and have strategic implications." | |
], | |
[ | |
"Take the English text that follows and translate it into German. Only respond with the translated text.\n\nCommand A Translate is available today on the Cohere platform and for research use on Hugging Face. If you are interested in private or on-prem deployments, please contact our sales team for bespoke pricing." | |
], | |
[ | |
"Can you rewrite that in French please?\n\nTo meet the needs of global enterprises, the model supports translation across 23 widely used business languages: English, French, Spanish, Italian, German, Portuguese, Japanese, Korean, Arabic, Chinese, Russian, Polish, Turkish, Vietnamese, Dutch, Czech, Indonesian, Ukrainian, Romanian, Greek, Hindi, Hebrew, and Persian." | |
], | |
] | |
demo = gr.ChatInterface( | |
fn=generate, | |
type="messages", | |
textbox=gr.Textbox(autofocus=True), | |
additional_inputs=[ | |
gr.Slider(label="Max New Tokens", minimum=100, maximum=2000, step=10, value=700), | |
], | |
stop_btn=False, | |
title="Command A Translate", | |
examples=examples, | |
run_examples_on_click=True, | |
cache_examples=False, | |
css_paths="style.css", | |
delete_cache=(1800, 1800), | |
) | |
if __name__ == "__main__": | |
demo.launch() | |