Files

83 lines
2.8 KiB
Python

from .base_client import logger, HttpMethod
from typing import Dict
from .base_client import BaseClient
from ..dto.joy_caption_dto import JoyCaptionRequest
from ..dto.translate_dto import TranslationRequest
class JoyCaptionServiceClient(BaseClient):
"""
Client for the JoyCaption service that generates captions for images.
Inherits common functionality from BaseClient.
"""
def generate_caption(self, base_url: str, request: JoyCaptionRequest) -> Dict[str, str]:
try:
data = {
"system_prompt": request.system_prompt,
"prompt": request.prompt,
"max_new_tokens": str(request.max_new_tokens),
"temperature": str(request.temperature),
"top_p": str(request.top_p),
"top_k": str(request.top_k),
"user_name": self.username # Use username from client
}
files = {
"image_file": ("image.jpg", request.image_file, "image/jpeg")
}
# Make request using base client's _request method
response = self._request(
base_url=base_url,
method=HttpMethod.POST,
endpoint="joycaption/generate",
data=data,
files=files
)
# Extract caption data
return {
"enCaption": response.get("enCaption", ""),
"cnCaption": response.get("cnCaption", "")
}
except Exception as e:
logger.error(f"Error in generate_caption: {str(e)}", exc_info=True)
# Re-raise the exception with original context
raise e from e
def translate(self, base_url: str, request: TranslationRequest) -> str:
"""
Translate text between languages using the translation service.
Args:
base_url: The base URL of the API server
request: The translation request containing text and parameters
Returns:
The translated text
Raises:
ConnectionError: If there's a network error communicating with the service
ValueError: If the response format is invalid
"""
# Build request data using fields from request object
request_data = {
"text": request.text,
}
# Make request using base client's _request method
response = self._request(
base_url=base_url,
method=HttpMethod.POST,
endpoint="translate",
data=request_data
)
# Parse response
if isinstance(response, dict) and "translated_text" in response:
return response["translated_text"]
else:
raise ValueError("Invalid response format: missing translated_text field")