File size: 2,011 Bytes
e5c3819
08da1e4
 
 
 
 
 
 
 
 
 
 
 
 
 
458d448
 
08da1e4
458d448
 
 
 
08da1e4
 
 
 
 
 
 
 
c31d1cd
08da1e4
 
9ccc8b9
458d448
 
3349d83
458d448
3349d83
458d448
3349d83
458d448
08da1e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
67
68
69
70
71
72
73
74
75
# clarify tools

import os
import streamlit as st
from clarifai_grpc.channel.clarifai_channel import ClarifaiChannel
from clarifai_grpc.grpc.api import resources_pb2, service_pb2, service_pb2_grpc
from clarifai_grpc.grpc.api.status import status_code_pb2
from PIL import Image
from io import BytesIO
from base64 import b64decode

import json
import os
from google.api_core import exceptions

#Constants

PAT = os.getenv('CLARIFAI_PAT')
USER_ID = 'openai'
APP_ID = 'dall-e'
MODEL_ID = 'dall-e-3'
MODEL_VERSION_ID = 'dc9dcb6ee67543cebc0b9a025861b868'

# Ensure the API key is available
if not PAT:
    raise ValueError("API key not found. Please set the CLARIFAI_PAT environment variable.")

import requests
from langchain.tools import tool


class ClarifaiTools():
  @tool("Clarifai Image Tool")
  def clarifai_image(prompt):

    """
    Draws images from prompts
    Args:
        query (str): Prompt
    Returns:
        str: Image
    """  

    # Clarifai gRPC setup
    channel = ClarifaiChannel.get_grpc_channel()
    stub = service_pb2_grpc.V2Stub(channel)
    metadata = (('authorization', 'Key ' + PAT),)
    userDataObject = resources_pb2.UserAppIDSet(user_id=USER_ID, app_id=APP_ID)

    post_model_outputs_response = stub.PostModelOutputs(
        service_pb2.PostModelOutputsRequest(
            user_app_id=userDataObject,
            model_id=MODEL_ID,
            version_id=MODEL_VERSION_ID,
            inputs=[
                resources_pb2.Input(
                    data=resources_pb2.Data(
                        text=resources_pb2.Text(raw=prompt)
                    )
                )
            ]
        ),
        metadata=metadata
    )

    if post_model_outputs_response.status.code != status_code_pb2.SUCCESS:
        return None, "Error in generating image: " + post_model_outputs_response.status.description
    else:
        output = post_model_outputs_response.outputs[0].data.image.base64
        image = Image.open(BytesIO(output))
        return image, None