import streamlit as st
import oci
from oci.generative_ai import GenerativeAiClient
from oci.generative_ai_inference import GenerativeAiInferenceClient
from oci.generative_ai_inference.models import (
ChatDetails,
CohereChatRequest,
OnDemandServingMode
)
# OCI設定
config = oci.config.from_file("~/.oci/config", "DEFAULT")
COMPARTMENT_ID = "ocid1.compartment.oc1..aaazaaaamgunk2ogelcwqnbokeb3ureqpff4ihogepntdjkv2sagdkasusvb"
DEFAULT_MODEL = "cohere.command-a-03-2025"
client = GenerativeAiInferenceClient(config=config)
#モデル一覧
available_models = []
generative_ai_client = GenerativeAiClient(config)
ret:oci.response.Response = generative_ai_client.list_models( compartment_id=COMPARTMENT_ID)
models:oci.generative_ai.models.ModelCollection = ret.data
model:oci.generative_ai.models.Model
for model in models.items:
if( "CHAT" in model.capabilities ):
available_models.append(model.display_name)
#タイトル
st.title("Oracle Cloud GenerativeAi デモ")
# モデル選択のドロップダウン(オプション)
selected_model = st.sidebar.selectbox("使用するモデルを選択", available_models, index=available_models.index(DEFAULT_MODEL) if DEFAULT_MODEL in available_models else 0)
# チャット履歴の初期化
if "messages" not in st.session_state:
st.session_state.messages = []
# チャット履歴の表示
for message in st.session_state.messages:
role = "assistant" if message["role"] == "assistant" else "user"
with st.chat_message(role):
st.markdown(message["message"])
# ユーザー入力
if prompt := st.chat_input("ここにメッセージを入力してください..."):
# ユーザーメッセージを履歴に追加
st.session_state.messages.append({"role": "user", "message": prompt})
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
with st.spinner("思考中..."):
chat_history = []
for message in st.session_state.messages:
if message["role"] == "user":
chat_history.append({"role": "USER", "message": message["message"]})
elif message["role"] == "assistant":
chat_history.append({"role": "CHATBOT", "message": message["message"]})
chat_request = CohereChatRequest(
message=prompt,
chat_history=chat_history if chat_history else None,
max_tokens=500,
temperature=0.7,
is_echo=True,
is_stream=False
)
serving_mode = OnDemandServingMode(model_id=selected_model)
chat_details = ChatDetails(
compartment_id=COMPARTMENT_ID,
chat_request=chat_request,
serving_mode=serving_mode
)
response = client.chat(chat_details)
bot_reply = response.data.chat_response.text
if bot_reply:
# アシスタントの応答を履歴に追加
st.session_state.messages.append({"role": "assistant", "message": bot_reply})
st.markdown(bot_reply)