import logging import sys from obsei.analyzer.classification_analyzer import ZeroShotClassificationAnalyzer, ClassificationAnalyzerConfig from obsei.sink.slack_sink import SlackSinkConfig, SlackSink from obsei.source.twitter_source import TwitterSourceConfig, TwitterSource, TwitterCredentials logger = logging.getLogger(__name__) logging.basicConfig(stream=sys.stdout, level=logging.INFO) twitter_cred_info = None # Enter your twitter credentials # Get it from https://developer.twitter.com/en/apply-for-access # Currently it will fetch from environment variables: twitter_bearer_token, twitter_consumer_key, twitter_consumer_secret # Uncomment below lines if you like to pass credentials directly instead of env variables # twitter_cred_info = TwitterCredentials( # bearer_token='', # consumer_key="", # consumer_secret="" # ) source_config = TwitterSourceConfig( query="bitcoin", lookup_period="1h", tweet_fields=[ "author_id", "conversation_id", "created_at", "id", "public_metrics", "text", ], user_fields=["id", "name", "public_metrics", "username", "verified"], expansions=["author_id"], place_fields=None, max_tweets=10, cred_info=twitter_cred_info or None ) source = TwitterSource() sink_config = SlackSinkConfig( # Uncomment below lines if you like to pass credentials directly instead of env variables # slack_token="SLACK_TOKEN", # channel_id="CHANNEL_ID", jinja_template=""" :bell: Hi there!, a new `<{{payload['meta']['tweet_url']}}|tweet>` of interest is found by *Obsei* >📝 Content: ```{{payload['meta']['text']}}``` >ℹ️Information: ``` User Name: {{payload['meta']['author_info']['name']}} ({{payload['meta']['author_info']['user_url']}}) Tweet Metrics: Retweets={{payload['meta']['public_metrics']['retweet_count']}}, Likes={{payload['meta']['public_metrics']['like_count']}} Author Metrics: Verified={{payload['meta']['author_info']['verified']}}, Followers={{payload['meta']['author_info']['public_metrics']['followers_count']}} ``` >🧠 AI Engine Data: ``` {%- for key, value in payload['segmented_data']['classifier_data'].items() recursive%} {%- if value is mapping -%} {{loop(value.items())}} {%- else %} {{key}}: {{value}} {%- endif %} {%- endfor%} ``` """ ) sink = SlackSink() text_analyzer = ZeroShotClassificationAnalyzer( model_name_or_path="typeform/mobilebert-uncased-mnli", device="auto" ) analyzer_config = ClassificationAnalyzerConfig( labels=["going up", "going down"], add_positive_negative_labels=False, ) source_response_list = source.lookup(source_config) for idx, source_response in enumerate(source_response_list): logger.info(f"source_response#'{idx}'='{source_response.__dict__}'") analyzer_response_list = text_analyzer.analyze_input( source_response_list=source_response_list, analyzer_config=analyzer_config, ) for idx, an_response in enumerate(analyzer_response_list): logger.info(f"analyzer_response#'{idx}'='{an_response.__dict__}'") sink_response_list = sink.send_data( analyzer_responses=analyzer_response_list, config=sink_config, id=id ) for idx, sink_response in enumerate(sink_response_list): logger.info(f"source_response#'{idx}'='{sink_response.__dict__}'")