Spaces:
Runtime error
Runtime error
| '''Functions to summarize article content.''' | |
| import os | |
| import logging | |
| from openai import OpenAI | |
| from upstash_redis import Redis | |
| REDIS = Redis( | |
| url='https://sensible-midge-19304.upstash.io', | |
| token=os.environ['UPSTASH_REDIS_KEY'] | |
| ) | |
| def summarize_content(title: str, content: str) -> str: | |
| '''Generates summary of article content using Modal inference endpoint. | |
| Args: | |
| content: string containing the text content to be summarized | |
| Returns: | |
| Summarized text as string | |
| ''' | |
| logger = logging.getLogger(__name__ + '.summarize_content') | |
| logger.info('Summarizing extracted content') | |
| # Check Redis cache for summary | |
| cache_key = f'{title} summary' | |
| cached_summary = REDIS.get(cache_key) | |
| if cached_summary: | |
| logger.info('Got summary from Redis cache: "%s"', title) | |
| return cached_summary | |
| # It the summary is not in the cache, generate it | |
| client = OpenAI(api_key=os.environ['MODAL_API_KEY']) | |
| client.base_url = ( | |
| 'https://gperdrizet--vllm-openai-compatible-summarization-serve.modal.run/v1' | |
| ) | |
| # Default to first avalible model | |
| model = client.models.list().data[0] | |
| model_id = model.id | |
| messages = [ | |
| { | |
| 'role': 'system', | |
| 'content': f'Summarize the following text in 50 words returning only the summary: {content}' | |
| } | |
| ] | |
| completion_args = { | |
| 'model': model_id, | |
| 'messages': messages, | |
| # "frequency_penalty": args.frequency_penalty, | |
| # "max_tokens": 128, | |
| # "n": args.n, | |
| # "presence_penalty": args.presence_penalty, | |
| # "seed": args.seed, | |
| # "stop": args.stop, | |
| # "stream": args.stream, | |
| # "temperature": args.temperature, | |
| # "top_p": args.top_p, | |
| } | |
| try: | |
| response = client.chat.completions.create(**completion_args) | |
| except Exception as e: # pylint: disable=broad-exception-caught | |
| response = None | |
| logger.error('Error during Modal API call: %s', e) | |
| if response is not None: | |
| summary = response.choices[0].message.content | |
| else: | |
| summary = None | |
| # Add the new summary to the cache | |
| REDIS.set(cache_key, summary) | |
| logger.info('Summarized: "%s"', title) | |
| return summary | |