mirror of
https://github.com/justUmen/Bjornulf_custom_nodes.git
synced 2026-03-21 20:52:11 -03:00
0.44
This commit is contained in:
120
ollama.py
120
ollama.py
@@ -2,29 +2,63 @@ import ollama
|
||||
from ollama import Client # pip install ollama
|
||||
import logging
|
||||
import hashlib
|
||||
import os
|
||||
|
||||
class ollamaLoader:
|
||||
@classmethod
|
||||
def get_available_models(cls):
|
||||
def read_host_from_file(cls, filename='ollama_ip.txt'):
|
||||
try:
|
||||
# First try with 127.0.0.1
|
||||
client = Client(host="http://127.0.0.1:11434")
|
||||
list_models = client.list() # Assuming list() is part of the Client class
|
||||
return [model['name'] for model in list_models['models']]
|
||||
except Exception as e1:
|
||||
print(f"Error fetching models from 127.0.0.1: {e1}")
|
||||
# Get the directory where the script is located
|
||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
file_path = os.path.join(script_dir, filename)
|
||||
|
||||
# Print the constructed file path for verification
|
||||
print(f"Looking for file at: {file_path}")
|
||||
|
||||
with open(file_path, 'r') as f:
|
||||
host = f.read().strip()
|
||||
if host:
|
||||
logging.info(f"Using host from {file_path}: {host}")
|
||||
return host
|
||||
else:
|
||||
logging.warning(f"{file_path} is empty. Falling back to default hosts.")
|
||||
except Exception as e:
|
||||
logging.error(f"Failed to read host from {file_path}: {e}")
|
||||
return None # Return None if reading fails
|
||||
|
||||
@classmethod
|
||||
def get_available_models(cls):
|
||||
host = cls.read_host_from_file()
|
||||
if host:
|
||||
try:
|
||||
# Fallback to 0.0.0.0
|
||||
client = Client(host="http://0.0.0.0:11434")
|
||||
client = Client(host=host)
|
||||
list_models = client.list()
|
||||
return [model['name'] for model in list_models['models']]
|
||||
except Exception as e2:
|
||||
print(f"Error fetching models from 0.0.0.0: {e2}")
|
||||
return ["none"] # Return a default model if fetching fails
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching models from {host}: {e}")
|
||||
|
||||
# Fallback to default hosts if reading from file fails
|
||||
for default_host in ["http://127.0.0.1:11434", "http://0.0.0.0:11434"]:
|
||||
try:
|
||||
client = Client(host=default_host)
|
||||
list_models = client.list()
|
||||
return [model['name'] for model in list_models['models']]
|
||||
except Exception as e:
|
||||
logging.error(f"Error fetching models from {default_host}: {e}")
|
||||
return ["none"] # Return a default model if fetching fails
|
||||
|
||||
@classmethod
|
||||
def INPUT_TYPES(cls):
|
||||
default_system_prompt = "Describe a specific example of an object, animal, person, or landscape based on a given general idea. Start with a clear and concise overall description in the first sentence. Then, provide a detailed depiction of its physical features, focusing on colors, size, clothing, eyes, and other distinguishing characteristics. Use commas to separate each detail and avoid listing them. Ensure each description is vivid, precise, and specific to one unique instance of the subject. Refrain from using poetic language and giving it a name.\nExample input: man\n Example output: \nAn overweight old man sitting on a bench, wearing a blue hat, yellow pants, orange jacket and black shirt, sunglasses, very long beard, very pale skin, long white hair, very large nose."
|
||||
default_system_prompt = (
|
||||
"Describe a specific example of an object, animal, person, or landscape based on a given general idea. "
|
||||
"Start with a clear and concise overall description in the first sentence. Then, provide a detailed depiction "
|
||||
"of its physical features, focusing on colors, size, clothing, eyes, and other distinguishing characteristics. "
|
||||
"Use commas to separate each detail and avoid listing them. Ensure each description is vivid, precise, and "
|
||||
"specific to one unique instance of the subject. Refrain from using poetic language and giving it a name.\n"
|
||||
"Example input: man\n Example output: \nAn overweight old man sitting on a bench, wearing a blue hat, "
|
||||
"yellow pants, orange jacket and black shirt, sunglasses, very long beard, very pale skin, long white hair, "
|
||||
"very large nose."
|
||||
)
|
||||
return {
|
||||
"required": {
|
||||
"user_prompt": ("STRING", {"multiline": True}),
|
||||
@@ -57,42 +91,38 @@ class ollamaLoader:
|
||||
else:
|
||||
# Content hasn't changed, set seed to None to prevent randomization
|
||||
seed = None
|
||||
|
||||
keep_alive_minutes = 0
|
||||
if(keep_1min_in_vram):
|
||||
keep_alive_minutes = 1
|
||||
|
||||
keep_alive = 0
|
||||
# client = Client(host="http://0.0.0.0:11434")
|
||||
# response = client.generate(
|
||||
# model=selected_model,
|
||||
# system=system_prompt,
|
||||
# prompt=user_prompt,
|
||||
# keep_alive=str(keep_alive_minutes) + "m"
|
||||
# )
|
||||
try:
|
||||
# First attempt with 127.0.0.1
|
||||
client = Client(host="http://127.0.0.1:11434")
|
||||
response = client.generate(
|
||||
model=selected_model,
|
||||
system=system_prompt,
|
||||
prompt=user_prompt,
|
||||
keep_alive=str(keep_alive_minutes) + "m"
|
||||
)
|
||||
logging.info("Ollama response (127.0.0.1): " + response['response'])
|
||||
except Exception as e:
|
||||
logging.warning(f"Connection to 127.0.0.1 failed: {e}")
|
||||
|
||||
keep_alive_minutes = 1 if keep_1min_in_vram else 0
|
||||
|
||||
host = self.read_host_from_file()
|
||||
if host:
|
||||
try:
|
||||
# Fallback to 0.0.0.0 if 127.0.0.1 fails
|
||||
client = Client(host="http://0.0.0.0:11434")
|
||||
client = Client(host=host)
|
||||
response = client.generate(
|
||||
model=selected_model,
|
||||
system=system_prompt,
|
||||
prompt=user_prompt,
|
||||
keep_alive=str(keep_alive_minutes) + "m"
|
||||
keep_alive=f"{keep_alive_minutes}m"
|
||||
)
|
||||
logging.info("Ollama response (0.0.0.0): " + response['response'])
|
||||
logging.info(f"Ollama response ({host}): {response['response']}")
|
||||
return (response['response'],)
|
||||
except Exception as e:
|
||||
logging.error(f"Connection to 0.0.0.0 also failed: {e}")
|
||||
logging.info("Ollama response : " + response['response'])
|
||||
return (response['response'],)
|
||||
logging.error(f"Connection to {host} failed: {e}")
|
||||
|
||||
# Fallback to default hosts if reading from file fails
|
||||
for default_host in ["http://127.0.0.1:11434", "http://0.0.0.0:11434"]:
|
||||
try:
|
||||
client = Client(host=default_host)
|
||||
response = client.generate(
|
||||
model=selected_model,
|
||||
system=system_prompt,
|
||||
prompt=user_prompt,
|
||||
keep_alive=f"{keep_alive_minutes}m"
|
||||
)
|
||||
logging.info(f"Ollama response ({default_host}): {response['response']}")
|
||||
return (response['response'],)
|
||||
except Exception as e:
|
||||
logging.error(f"Connection to {default_host} failed: {e}")
|
||||
|
||||
logging.error("All connection attempts failed.")
|
||||
return ("Connection to Ollama failed.",)
|
||||
|
||||
Reference in New Issue
Block a user