tiny-aya / app.py
Alejandro Rodriguez Salamanca
change default temperatute to 0.1
5f9ebcb
import logging
import os
from collections.abc import Iterator
import gradio as gr
from cohere import ClientV2
logger = logging.getLogger(__name__)
model_id = "tiny-aya-global"
# 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-tiny-aya-global")
def _extract_text(content: object) -> str:
"""Extract plain text from any Cohere content shape.
Handles plain strings, objects with a `.text` attribute,
and lists of content blocks (e.g. [{'text': '...', 'type': 'text'}]).
"""
if content is None:
return ""
if isinstance(content, str):
return content
if isinstance(content, list):
parts = [_extract_text(block) for block in content]
return "".join(parts)
text = getattr(content, "text", None)
if text is not None:
return str(text)
if isinstance(content, dict):
return str(content.get("text", ""))
return ""
def generate(
message: str,
history: list[dict],
system_prompt: str = "",
temperature: float = 0.1,
max_new_tokens: int = 700,
) -> Iterator[str]:
"""Stream a response from the Cohere API for the given message and conversation history."""
messages: list[dict[str, str]] = []
system_prompt = (system_prompt or "").strip()
if system_prompt:
messages.append({"role": "system", "content": system_prompt})
for item in history:
role = item.get("role")
content = _extract_text(item.get("content"))
if role in ("assistant", "user") and content:
messages.append({"role": role, "content": content})
current_text = str(message or "").strip()
if not current_text:
yield ""
return
messages.append({"role": "user", "content": current_text})
try:
response = client.chat_stream(
model=model_id,
messages=messages,
temperature=temperature,
max_tokens=max_new_tokens,
)
output = ""
for event in response:
if getattr(event, "type", None) in ("content-delta", "content-start"):
delta = getattr(event, "delta", None)
if delta is None:
continue
msg = getattr(delta, "message", None)
if msg is None:
continue
text = _extract_text(getattr(msg, "content", None))
if text:
output += text
yield output
except Exception:
logger.exception("Cohere API error")
gr.Warning("Something went wrong generating a response. Please try again.")
yield ""
examples = [
["Explica en español qué significa la palabra japonesa 'ikigai' y da un ejemplo práctico."],
["اكتب فقرة قصيرة تصف غروب الشمس في الصحراء"],
["Kwa nini ni muhimu kujifunza lugha zaidi ya moja? Toa sababu tatu."],
["一个从未见过大海的山村孩子,第一次来到海边。用三到五句话描述他的感受。"],
[
"Translate the following sentence from Basque to French: "
"'Hizkuntza-eredu handiek milioika testu erabiltzen dituzte ikasteko, "
"baina hizkuntza txikientzat datu gutxiago dago.'"
],
[
"ਜੇਕਰ ਕੋਈ ਵਿਅਕਤੀ ਪਹਿਲੀ ਵਾਰ ਵਿਦੇਸ਼ ਜਾ ਰਿਹਾ ਹੈ, ਤਾਂ ਉਸ ਨੂੰ ਕਿਹੜੀਆਂ ਗੱਲਾਂ ਦਾ "
"ਧਿਆਨ ਰੱਖਣਾ ਚਾਹੀਦਾ ਹੈ? ਪੰਜ ਸੁਝਾਅ ਦਿਓ।"
],
[
"Eglurwch mewn tair brawddeg pam mae bioamrywiaeth yn bwysig i ecosystemau."
],
[
"ถ้าคุณต้องการเริ่มต้นออกกำลังกายเป็นประจำ ควรเริ่มต้นอย่างไร? ให้คำแนะนำสามข้อ"
]
]
example_labels = [
"Spanish — Explain 'ikigai'",
"Arabic — Describe a desert sunset",
"Swahili — Why learn multiple languages?",
"Chinese — A child sees the ocean",
"English — Basque to French translation",
"Punjabi — Travel tips for first-timers",
"Welsh — Why biodiversity is important to ecosystems",
"Thai — How to start exercising regularly",
]
DESCRIPTION = (
"**[Tiny Aya](https://huggingface.co/CohereLabs/tiny-aya-global)** is a lightweight "
"multilingual language model by [Cohere Labs](https://cohere.com/research). "
"Try chatting in any of 70+ supported languages!"
)
demo = gr.ChatInterface(
fn=generate,
chatbot=gr.Chatbot(min_height=600),
textbox=gr.Textbox(
autofocus=True,
placeholder="Type a message in any language... / Escribe en cualquier idioma... / أكتب بأي لغة...",
),
additional_inputs=[
gr.Textbox(
label="System Prompt (optional)",
placeholder="e.g. You are a helpful multilingual assistant. Always respond in the user's language.",
lines=3,
),
gr.Slider(label="Temperature", minimum=0.0, maximum=1.0, step=0.05, value=0.1),
gr.Slider(label="Max New Tokens", minimum=100, maximum=2000, step=10, value=700),
],
stop_btn=False,
title="Tiny Aya",
description=DESCRIPTION,
examples=examples,
example_labels=example_labels,
run_examples_on_click=True,
cache_examples=False,
delete_cache=(1800, 1800),
save_history=True,
)
if __name__ == "__main__":
demo.launch(
theme=gr.themes.Soft(
primary_hue="green",
font=[gr.themes.GoogleFont("Inter"), "system-ui", "sans-serif"],
),
css_paths="style.css",
)