diff --git a/alwrity.py b/alwrity.py index 97ee354c..462e403f 100644 --- a/alwrity.py +++ b/alwrity.py @@ -174,45 +174,33 @@ def check_llm_environs(): load_dotenv(Path('.env')) # Check if GPT_PROVIDER is defined in .env file gpt_provider = os.getenv("GPT_PROVIDER") - + # Disable unsupported GPT providers supported_providers = ['google', 'openai', 'mistralai'] - if gpt_provider is None or gpt_provider not in supported_providers: + if gpt_provider is None or gpt_provider.lower() not in map(str.lower, supported_providers): # Prompt user to select a provider - selected_provider = radiolist_dialog( - title='Select your preferred GPT provider:', - text="Please choose GPT provider Below:\n👺Google Gemini recommended, its 🆓.", - values=[ - ("Google", "Google"), - ("OpenAI", "OpenAI"), - ("MistralAI/WIP", "mistralai/WIP"), - ("Ollama", "Ollama (TBD)") - ] - ).run() + selected_provider = radiolistbox( + msg='Select your preferred GPT provider:', + title='GPT Provider Selection', + choices=["Google", "OpenAI", "MistralAI/WIP", "Ollama (TBD)"], + default_choice="Google" + ) gpt_provider = selected_provider # Update .env file os.environ["GPT_PROVIDER"] = gpt_provider - - if gpt_provider == "Google": + + if gpt_provider.lower() == "google": api_key_var = "GEMINI_API_KEY" missing_api_msg = f"To get your {api_key_var}, please visit: https://aistudio.google.com/app/apikey" - elif gpt_provider == "OpenAI": + elif gpt_provider.lower() == "openai": api_key_var = "OPENAI_API_KEY" missing_api_msg = "To get your OpenAI API key, please visit: https://openai.com/blog/openai-api" - elif gpt_provider == "mistralai": + elif gpt_provider.lower() == "mistralai": api_key_var = "MISTRAL_API_KEY" missing_api_msg = "To get your MistralAI API key, please visit: https://mistralai.com/api" - - if os.getenv(api_key_var) is None: - # Ask for the API key - print(f"🚫The {api_key_var} is missing. {missing_api_msg}") - api_key = typer.prompt(f"\n🙆🙆Please enter {api_key_var} API Key:") - - # Update .env file - with open(".env", "a", encoding="utf-8") as env_file: - env_file.write(f"{api_key_var}={api_key}\n") - env_file.write(f"GPT_PROVIDER={gpt_provider}\n") - + else: + print("Unrecognised/Unsupported GPT provider. Check your main_config and environs.") + exit(1) def check_internet(): diff --git a/lib/gpt_providers/text_generation/.gemini_pro_text.py.swp b/lib/gpt_providers/text_generation/.gemini_pro_text.py.swp new file mode 100644 index 00000000..a62ca028 Binary files /dev/null and b/lib/gpt_providers/text_generation/.gemini_pro_text.py.swp differ diff --git a/lib/gpt_providers/text_generation/gemini_pro_text.py b/lib/gpt_providers/text_generation/gemini_pro_text.py index 0e90b5f6..8e158de6 100644 --- a/lib/gpt_providers/text_generation/gemini_pro_text.py +++ b/lib/gpt_providers/text_generation/gemini_pro_text.py @@ -4,7 +4,6 @@ import sys from pathlib import Path import google.generativeai as genai -from google.api_core import retry from dotenv import load_dotenv load_dotenv(Path('../../../.env')) from loguru import logger @@ -13,8 +12,14 @@ logger.add(sys.stdout, colorize=True, format="{level}|{file}:{line}:{function}| {message}" ) +from tenacity import ( + retry, + stop_after_attempt, + wait_random_exponential, +) +#@retry(wait=wait_random_exponential(min=1, max=60), stop=stop_after_attempt(6)) def gemini_text_response(prompt, temperature, top_p, n, max_tokens): """ Common functiont to get response from gemini pro Text. """ #FIXME: Include : https://github.com/google-gemini/cookbook/blob/main/quickstarts/rest/System_instructions_REST.ipynb @@ -28,17 +33,19 @@ def gemini_text_response(prompt, temperature, top_p, n, max_tokens): "temperature": temperature, "top_p": top_p, "top_k": n, - "max_output_tokens": max_tokens + "max_output_tokens": max_tokens, } # FIXME: Expose model_name in main_config - model = genai.GenerativeModel(model_name="gemini-1.0-pro", generation_config=generation_config) + model = genai.GenerativeModel(model_name="gemini-pro", generation_config=generation_config) try: # text_response = [] - response = model.generate_content(prompt, stream=True, request_options={'retry':retry.Retry()}) - for chunk in response: - # text_response.append(chunk.text) - print(chunk.text) + response = model.generate_content(prompt, stream=True) + if response: + for chunk in response: + # text_response.append(chunk.text) + print(chunk.text) + else: + print(response) return response.text except Exception as err: - logger.error(response) logger.error(f"Failed to get response from Gemini: {err}. Retrying.") diff --git a/lib/utils/alwrity_utils.py b/lib/utils/alwrity_utils.py index edf50ba5..d2086832 100644 --- a/lib/utils/alwrity_utils.py +++ b/lib/utils/alwrity_utils.py @@ -268,7 +268,7 @@ def competitor_analysis(): text += "Read More Here: https://docs.exa.ai/reference/company-analyst \n" text += "_______________________________________________________________________\n" print(text) - similar_url = prompt("Enter Valid URL to get web analysis:: ") + similar_url = prompt("⚠️ 👋 Enter a single Valid URL for web analysis:: ") try: metaphor_find_similar(similar_url) except Exception as err: