File size: 2,377 Bytes
75cfd1d
 
 
 
 
 
e995e3b
487bfb7
e995e3b
75cfd1d
 
487bfb7
75cfd1d
487bfb7
 
e995e3b
75cfd1d
 
e995e3b
75cfd1d
 
 
 
 
487bfb7
75cfd1d
487bfb7
75cfd1d
e995e3b
75cfd1d
 
afd6eb2
75cfd1d
 
 
 
afd6eb2
75cfd1d
afd6eb2
75cfd1d
e0a817a
75cfd1d
 
afd6eb2
75cfd1d
 
 
 
 
afd6eb2
75cfd1d
afd6eb2
75cfd1d
17cd8b9
75cfd1d
 
487bfb7
75cfd1d
 
 
487bfb7
75cfd1d
 
17cd8b9
75cfd1d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 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)}]