| import gradio as gr |
| import requests |
|
|
| def check_key_gemini_availability(key, ai_model): |
| """ |
| Checks the availability of a Gemini API key. |
| Args: |
| key: The API key to check. |
| Returns: |
| A tuple containing a boolean indicating whether the key is valid and an error message (or None if the key is valid). |
| """ |
| try: |
| |
| url_getListModel = f"https://generativelanguage.googleapis.com/v1beta/models?key={key}" |
| rq = requests.get(url_getListModel) |
| rq.raise_for_status() |
| result = rq.json() |
| if 'models' not in result: |
| return False, f"Invalid key: 'models' field not found in response from list models endpoint." |
|
|
| |
| ai_model_ = ai_model.strip() or "gemini-1.5-flash" |
| models = [ x["name"].split('/',1)[1] for x in result['models'] ] |
| if ai_model_ not in models: |
| return False, f"Specified model {ai_model_} is not in available 'models'." |
| url_generateContent = f"https://generativelanguage.googleapis.com/v1beta/models/{ai_model_}:generateContent?key={key}" |
| |
| data = {"contents": [{"parts": [{"text": "Say \"this is a test\""}]}]} |
| rq = requests.post(url_generateContent, json=data) |
|
|
| if 400 <= rq.status_code < 500: |
| return False, f"{rq.status_code}" |
| else: |
| |
| print(key) |
| return True, None |
|
|
| except requests.exceptions.HTTPError as e: |
| return False, f"Invalid: HTTP {e.response.status_code} - {e}" |
| except Exception as e: |
| return False, f"Error: {e}" |
|
|
| def check_keys(keys_text, ai_model): |
| """ |
| Checks a list of Gemini API keys and categorizes them into valid and invalid. |
| |
| Args: |
| keys_text: A string containing API keys separated by lines. |
| |
| Returns: |
| A tuple containing two strings: a list of valid keys and a list of invalid keys with error messages. |
| """ |
| key_list = keys_text.strip().splitlines() |
| key_list = list(set(key_list)) |
|
|
| valid_keys = [] |
| invalid_keys = [] |
|
|
| for key in key_list: |
| is_valid, error_msg = check_key_gemini_availability(key, ai_model) |
| if is_valid: |
| valid_keys.append(key) |
| else: |
| invalid_keys.append(f"{key} - {error_msg}") |
|
|
| return "\n".join(valid_keys), "\n".join(invalid_keys) |
|
|
| def clear_inputs(): |
| """Clears the input text area.""" |
| return "" |
|
|
| with gr.Blocks() as demo: |
| gr.Markdown(''' |
| # Gemini API Key Status Checker - batch mode |
| ''') |
|
|
| with gr.Row(): |
| with gr.Column(): |
| keys = gr.TextArea(label="API Keys (by lines)") |
| ai_model = gr.Textbox(label="gemini model") |
| with gr.Row(): |
| clear_button = gr.Button("Clear") |
| submit_button = gr.Button("Submit", variant="primary") |
| with gr.Column(): |
| infos = gr.TextArea(label="Alive Keys") |
| errs = gr.TextArea(label="Invalid Keys-status code") |
|
|
| clear_button.click(fn=clear_inputs, outputs=[keys]) |
| submit_button.click(fn=check_keys, inputs=[keys,ai_model], outputs=[infos, errs], api_name="check_keys") |
|
|
| demo.launch() |