kocraft-backend/Craft/module/ml/__init__.py

54 lines
1.9 KiB
Python
Raw Permalink Normal View History

2024-07-15 08:47:42 +00:00
import asyncio
from concurrent.futures import ThreadPoolExecutor
from dotenv import find_dotenv, load_dotenv
2024-07-18 01:58:24 +00:00
from ollama import generate, AsyncClient
2024-07-15 08:47:42 +00:00
from Craft.module.ml.prompt import generate_system, generate_user, generate_system_eng, generate_user_eng
from Craft.module.ml.util import extract_emoji_and_text
load_dotenv(find_dotenv())
class Engine:
def __init__(self):
self.key = None
2024-07-18 01:58:24 +00:00
self.client = AsyncClient(host="http://100.64.0.49:7020")
2024-07-15 08:47:42 +00:00
2024-07-18 01:58:24 +00:00
async def _generate(self, first_word: str, second_word: str) -> dict:
return await self.client.generate(
model="mergegame:latest",
system=generate_system(first_word, second_word),
2024-07-15 08:47:42 +00:00
prompt=generate_user(first_word, second_word),
keep_alive=60*60*24,
context=None,
options={
"seed": 0,
2024-07-18 01:58:24 +00:00
"temperature": 0.01,
"top_p": 1,
"top_k": 0,
"max_tokens": 16,
2024-07-15 08:47:42 +00:00
"main_gpu": 0,
}
)
async def _generate_eng(self, first_word: str, second_word: str) -> dict:
system = await generate_system_eng(first_word, second_word)
prompt = await generate_user_eng(first_word, second_word)
return generate(
model="mistral:latest",
system=system,
prompt=prompt,
keep_alive=60*60*24,
options={
"seed": 0,
"temperature": 0.8,
"top_p": 1,
"top_k": 0.1,
"max_tokens": 64,
"main_gpu": 0,
}
)
async def generate(self, first_word: str, second_word: str) -> str:
2024-07-18 01:58:24 +00:00
#eng_result = await self._generate_eng(first_word, second_word)
data = await self._generate(first_word, second_word)
2024-07-15 08:47:42 +00:00
return extract_emoji_and_text(data['response'])