Files

1 line
3.7 KiB
JSON

{"repo": "ai-bot-pro/achatbot", "files": {"demo/siliconflow_api.py": {"c2b101be73f902083eae8b2363885f40d2f7b31f": {"t": 1785674138.3165846, "n": 3406, "h": "12506f8b597f1fc3", "c": "import base64\nimport io\nimport os\nimport logging\nimport time\nfrom typing import List\n\nimport typer\nfrom dotenv import load_dotenv\nimport requests\n\n\n# Load environment variables from .env file\nload_dotenv(override=True)\n\napp = typer.Typer()\n\n\n@app.command(\"gen_image\")\ndef gen_image(\n prompt: str,\n width: int = 1024,\n height: int = 1024,\n steps: int = 20,\n n: int = 1,\n guidance_scale: float = 7.5,\n) -> List[str]:\n url = \"https://api.siliconflow.cn/v1/images/generations\"\n\n payload = {\n \"batch_size\": n,\n \"num_inference_steps\": steps,\n \"guidance_scale\": guidance_scale,\n \"model\": \"Kwai-Kolors/Kolors\",\n \"prompt\": prompt,\n \"image_size\": f\"{width}x{height}\",\n }\n api_key = os.getenv(\"SILICONCLOUD_API_KEY\")\n headers = {\n \"Authorization\": f\"Bearer {api_key}\",\n \"Content-Type\": \"application/json\",\n }\n\n while True:\n try:\n response = requests.post(url, json=payload, headers=headers)\n response = response.json()\n # print(response)\n if response.get(\"code\", 0) != 0 and response.get(\"data\", None) is None:\n raise Exception(response.get(\"message\"))\n except Exception as e:\n logging.error(f\"requests error: {e}\")\n time.sleep(3)\n continue\n break\n\n return response.get(\"data\", [])\n\n\n@app.command(\"save_image_from_url\")\ndef save_image_from_url(\n url: str,\n file_name: str,\n save_dir: str = \"./images\",\n):\n assert url, \"url is empty\"\n os.makedirs(save_dir, exist_ok=True)\n\n try:\n response = requests.get(url)\n response.raise_for_status()\n\n content_type = response.headers.get(\"content-type\", \"\")\n if \"png\" in content_type:\n ext = \"png\"\n elif \"jpeg\" in content_type or \"jpg\" in content_type:\n ext = \"jpg\"\n else:\n ext = \"png\"\n\n save_path = os.path.join(save_dir, f\"{file_name}.{ext}\")\n\n with open(save_path, \"wb\") as f:\n f.write(response.content)\n\n logging.info(f\"image save to: {save_path}\")\n return save_path\n\n except requests.exceptions.RequestException as e:\n logging.error(f\"requests error: {e}\")\n raise typer.Exit(code=1)\n\n\n@app.command(\"save_gen_image\")\ndef save_gen_image(\n prompt: str,\n file_name: str,\n save_dir: str = \"./images\",\n width: int = 1024,\n height: int = 1024,\n n: int = 1,\n):\n img_data = gen_image(prompt, width=width, height=height, n=n)\n if not img_data:\n raise Exception(\"no gen image\")\n\n for img in img_data:\n url = img.get(\"url\", \"\")\n return save_image_from_url(url=url, file_name=file_name, save_dir=save_dir)\n\n\nr\"\"\"\npython -m demo.siliconflow_api gen_image \"llama, sitting in a field of flowers\"\npython -m demo.siliconflow_api save_image_from_url \"https://sc-maas.oss-cn-shanghai.aliyuncs.com/outputs%2F20250919%2Fvvaqcpzqw0.png?Expires=1758280965&OSSAccessKeyId=LTAI5tQnPSzwAnR8NmMzoQq4&Signature=UYGUFUWQXxjsU8NMupKR4Kt5oIc%3D\" llama\npython -m demo.siliconflow_api save_gen_image \"llama, sitting in a field of flowers\" llama\n\"\"\"\nif __name__ == \"__main__\":\n logging.basicConfig(\n level=logging.INFO,\n format=\"%(asctime)s - %(name)s - %(levelname)s - %(pathname)s:%(lineno)d - %(funcName)s - %(message)s\",\n handlers=[logging.StreamHandler()],\n )\n app()\n"}}}}