Spaces:
Sleeping
Sleeping
# genesis/providers.py | |
""" | |
API Providers for GENESIS-AI | |
Handles calls to DeepSeek, Gemini, OpenAI, and PubMed. | |
""" | |
import os | |
import requests | |
# ENV | |
DEEPSEEK_API_KEY = os.getenv("DEEPSEEK_API_KEY") | |
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY") | |
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY") | |
NCBI_API_KEY = os.getenv("NCBI_API_KEY") | |
NCBI_EMAIL = os.getenv("NCBI_EMAIL") | |
def run_deepseek_summary(prompt): | |
"""Summarize using DeepSeek API.""" | |
try: | |
r = requests.post( | |
"https://api.deepseek.com/v1/chat/completions", | |
headers={"Authorization": f"Bearer {DEEPSEEK_API_KEY}"}, | |
json={"model": "deepseek-chat", "messages": [{"role": "user", "content": prompt}]} | |
) | |
r.raise_for_status() | |
return r.json()["choices"][0]["message"]["content"] | |
except Exception as e: | |
return f"[DeepSeek Error] {e}" | |
def run_gemini_polish(text): | |
"""Polish text with Gemini.""" | |
try: | |
r = requests.post( | |
f"https://generativelanguage.googleapis.com/v1beta/models/gemini-pro:generateContent?key={GEMINI_API_KEY}", | |
json={"contents": [{"parts": [{"text": text}]}]} | |
) | |
r.raise_for_status() | |
return r.json()["candidates"][0]["content"]["parts"][0]["text"] | |
except Exception as e: | |
return f"[Gemini Error] {e}" | |
def run_openai_image(prompt): | |
"""Generate image with OpenAI DALL·E or fallback.""" | |
try: | |
r = requests.post( | |
"https://api.openai.com/v1/images/generations", | |
headers={"Authorization": f"Bearer {OPENAI_API_KEY}"}, | |
json={"model": "gpt-image-1", "prompt": prompt, "size": "1024x1024"} | |
) | |
r.raise_for_status() | |
return r.json()["data"][0]["url"] | |
except Exception as e: | |
return f"[OpenAI Image Error] {e}" | |
def pubmed_fallback_search(query, retmax=5): | |
"""Simple PubMed search for citations.""" | |
try: | |
url = f"https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" | |
params = {"db": "pubmed", "term": query, "retmode": "json", "retmax": retmax, "api_key": NCBI_API_KEY} | |
r = requests.get(url, params=params) | |
r.raise_for_status() | |
ids = r.json()["esearchresult"]["idlist"] | |
return [{"pmid": pid, "url": f"https://pubmed.ncbi.nlm.nih.gov/{pid}/"} for pid in ids] | |
except Exception as e: | |
return [{"error": str(e)}] | |