Spaces:
Configuration error
Configuration error
import json | |
from typing import Optional | |
import click | |
import rich | |
import requests | |
from ...chat import ChatClient | |
def chat(): | |
"""Chat with models through the LiteLLM proxy server""" | |
pass | |
def completions( | |
ctx: click.Context, | |
model: str, | |
message: tuple[str, ...], | |
temperature: Optional[float] = None, | |
top_p: Optional[float] = None, | |
n: Optional[int] = None, | |
max_tokens: Optional[int] = None, | |
presence_penalty: Optional[float] = None, | |
frequency_penalty: Optional[float] = None, | |
user: Optional[str] = None, | |
): | |
"""Create a chat completion""" | |
if not message: | |
raise click.UsageError("At least one message is required") | |
# Parse messages from role:content format | |
messages = [] | |
for msg in message: | |
try: | |
role, content = msg.split(":", 1) | |
messages.append({"role": role.strip(), "content": content.strip()}) | |
except ValueError: | |
raise click.BadParameter(f"Invalid message format: {msg}. Expected format: 'role:content'") | |
client = ChatClient(ctx.obj["base_url"], ctx.obj["api_key"]) | |
try: | |
response = client.completions( | |
model=model, | |
messages=messages, | |
temperature=temperature, | |
top_p=top_p, | |
n=n, | |
max_tokens=max_tokens, | |
presence_penalty=presence_penalty, | |
frequency_penalty=frequency_penalty, | |
user=user, | |
) | |
rich.print_json(data=response) | |
except requests.exceptions.HTTPError as e: | |
click.echo(f"Error: HTTP {e.response.status_code}", err=True) | |
try: | |
error_body = e.response.json() | |
rich.print_json(data=error_body) | |
except json.JSONDecodeError: | |
click.echo(e.response.text, err=True) | |
raise click.Abort() | |