File size: 3,212 Bytes
9d8abce
 
 
1fd9ee7
9d8abce
dfad04f
9d8abce
 
 
 
1fd9ee7
9d8abce
 
 
dfad04f
1fd9ee7
9d8abce
 
 
1fd9ee7
9d8abce
 
dfad04f
9d8abce
 
 
 
 
dfad04f
9d8abce
 
 
 
 
dfad04f
9d8abce
 
 
 
dfad04f
9d8abce
 
 
 
 
dfad04f
9d8abce
 
 
 
 
 
dfad04f
9d8abce
 
 
 
 
 
1fd9ee7
9d8abce
 
 
 
 
1fd9ee7
9d8abce
dfad04f
 
 
 
9d8abce
 
 
 
1fd9ee7
9d8abce
dfad04f
9d8abce
 
 
 
 
dfad04f
9d8abce
 
 
1fd9ee7
 
 
 
 
dfad04f
1fd9ee7
9d8abce
 
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import streamlit as st
from openai import OpenAI
import time
import re

# Streamlit setup
st.set_page_config(page_title="documentaitest")
st.title("documentaitest")
st.caption("Chat with an Ai Assistant on your Documents")

# Sidebar for API key input
with st.sidebar:
    OPENAI_API_KEY = st.text_input("Enter your C2 Group of Technologies Access Key", type="password")

# Stop execution if no API key provided
if not OPENAI_API_KEY:
    st.error("Please enter your C2 Group of Technologies Access Key to continue.")
    st.stop()

client = OpenAI(api_key=OPENAI_API_KEY)
ASSISTANT_ID = "asst_PJjxQftfz2IJUUMvnldK58lB"

# Initialize session state
if "messages" not in st.session_state:
    st.session_state.messages = []
if "thread_id" not in st.session_state:
    st.session_state.thread_id = None

# Button to clear chat
if st.button("Clear Chat", use_container_width=True):
    st.session_state.messages = []
    st.session_state.thread_id = None
    st.rerun()

# Display message history
for message in st.session_state.messages:
    role, content = message["role"], message["content"]
    st.chat_message(role).write(content)

# Handle new user input
if prompt := st.chat_input():
    st.session_state.messages.append({"role": "user", "content": prompt})
    st.chat_message("user").write(prompt)

    try:
        # Create thread if not yet created
        if st.session_state.thread_id is None:
            thread = client.beta.threads.create()
            st.session_state.thread_id = thread.id

        thread_id = st.session_state.thread_id

        # Send message
        client.beta.threads.messages.create(
            thread_id=thread_id,
            role="user",
            content=prompt
        )

        # Run assistant
        run = client.beta.threads.runs.create(
            thread_id=thread_id,
            assistant_id=ASSISTANT_ID
        )

        # Poll until complete
        while True:
            run_status = client.beta.threads.runs.retrieve(
                thread_id=thread_id,
                run_id=run.id
            )
            if run_status.status == "completed":
                break
            time.sleep(1)

        # Get assistant response
        messages = client.beta.threads.messages.list(thread_id=thread_id)
        assistant_message = None
        for message in reversed(messages.data):
            if message.role == "assistant":
                assistant_message = message.content[0].text.value
                break

        # Display assistant message
        st.chat_message("assistant").write(assistant_message)
        st.session_state.messages.append({"role": "assistant", "content": assistant_message})

        # πŸ” Detect and display GitHub-hosted image
        page_match = re.search(r'Page (\d+)', assistant_message)
        if page_match:
            page_number = page_match.group(1).zfill(3)
            image_url = f"https://raw.githubusercontent.com/AndrewLORTech/surgical-pathology-manual/main/51940670-Manual-of-Surgical-Pathology-Third-Edition_1_page_{page_number}.png"
            st.image(image_url, caption=f"Page {int(page_number)}", use_container_width=True)

    except Exception as e:
        st.error(f"Error: {str(e)}")