|
import requests
|
|
import os
|
|
from services.ai_service import AIService
|
|
|
|
|
|
|
|
|
|
|
|
class CloudflareAIService(AIService):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.cloudflare_account_id = os.getenv("CLOUDFLARE_ACCOUNT_ID")
|
|
self.cloudflare_api_token = os.getenv("CLOUDFLARE_API_TOKEN")
|
|
|
|
self.api_base_url = f'https://api.cloudflare.com/client/v4/accounts/{self.cloudflare_account_id}/ai/run/'
|
|
self.headers = {"Authorization": f'Bearer {self.cloudflare_api_token}'}
|
|
|
|
|
|
def run(self, model, input):
|
|
response = requests.post(
|
|
f"{self.api_base_url}{model}",
|
|
headers=self.headers,
|
|
json=input)
|
|
return response.json()
|
|
|
|
|
|
def run_llm(self, messages, latest_user_message=None, stream=True):
|
|
input = {
|
|
"messages": [
|
|
{"role": "system", "content": "You are a friendly assistant"},
|
|
{"role": "user", "content": sentence}
|
|
]
|
|
}
|
|
|
|
return self.run("@cf/meta/llama-2-7b-chat-int8", input)
|
|
|
|
|
|
def run_text_translation(self, sentence, source_language, target_language):
|
|
return self.run('@cf/meta/m2m100-1.2b', {
|
|
"text": sentence,
|
|
"source_lang": source_language,
|
|
"target_lang": target_language
|
|
})
|
|
|
|
|
|
def run_text_sentiment(self, sentence):
|
|
return self.run("@cf/huggingface/distilbert-sst-2-int8",
|
|
{"text": sentence})
|
|
|
|
|
|
def run_image_classification(self, image_url):
|
|
response = requests.get(image_url)
|
|
|
|
if response.status_code != 200:
|
|
return {"error": "There was a problem downloading the image."}
|
|
|
|
if response.status_code == 200:
|
|
data = response.content
|
|
inputs = {"image": list(data)}
|
|
|
|
return self.run("@cf/microsoft/resnet-50", inputs)
|
|
|
|
|
|
def run_embeddings(self, texts, size="medium"):
|
|
models = {
|
|
"small": "@cf/baai/bge-small-en-v1.5",
|
|
"medium": "@cf/baai/bge-base-en-v1.5",
|
|
"large": "@cf/baai/bge-large-en-v1.5"
|
|
}
|
|
|
|
return self.run(models[size], {"text": texts})
|
|
|