Spaces:
Running
Running
| import os | |
| import requests | |
| import time | |
| import random | |
| # In your environment (.bashrc, e.g.) do: export GEMINI_API_KEY=your_key | |
| API_KEY = os.getenv("GEMINI_API_KEY") | |
| # Note: we probably want "pro" instead of "flash" below. Using flash for now | |
| # since it has lower latency. - SD | |
| URL = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" | |
| def post_w_backoff(url, *, headers=None, json=None, timeout=60, tries=6): | |
| for i in range(tries): | |
| try: | |
| r = requests.post(url, headers=headers, json=json, timeout=timeout) | |
| if r.status_code in (429, 500, 502, 503, 504): | |
| raise requests.HTTPError(response=r) | |
| r.raise_for_status() | |
| return r | |
| except (requests.RequestException) as e: | |
| if i == tries - 1: | |
| raise | |
| time.sleep(random.uniform(0, 2 ** i)) | |
| def append_to_payload(payload, text, role="user"): | |
| payload['contents'].append( | |
| { | |
| "role": role, | |
| "parts": [ | |
| { 'text': text } | |
| ] | |
| } | |
| ) | |
| payload = { | |
| "contents": [ | |
| { | |
| "role": "user", | |
| "parts": [ | |
| {"text": "Placeholder"} | |
| ] | |
| } | |
| ] | |
| } | |
| headers = { | |
| "Content-Type": "application/json", | |
| "X-goog-api-key": API_KEY, | |
| } | |
| new_input = input("> ") | |
| payload['contents'][0]['parts'][0]['text'] = new_input | |
| while new_input != "done": | |
| resp = post_w_backoff(URL, headers=headers, json=payload, timeout=60) | |
| resp.raise_for_status() | |
| response = resp.json()['candidates'][0]['content']['parts'][0]['text'] | |
| print(f"Response was: {response}") | |
| append_to_payload(payload, response, "model") | |
| new_input = input("\n> ") | |
| append_to_payload(payload, new_input, "user") | |