mirror of
https://github.com/trustgraph-ai/trustgraph.git
synced 2026-04-25 08:26:21 +02:00
Fix Python streaming SDK issues (#580)
* Fix verify CLI issues * Fixing content mechanisms in API * Fixing error handling * Fixing invoke_prompt, invoke_llm, invoke_agent
This commit is contained in:
parent
52ca74bbbc
commit
664bce6182
9 changed files with 234 additions and 58 deletions
|
|
@ -161,6 +161,11 @@ def question(
|
|||
# Output the chunk
|
||||
if current_outputter:
|
||||
current_outputter.output(content)
|
||||
# Flush word buffer after each chunk to avoid delay
|
||||
if current_outputter.word_buffer:
|
||||
print(current_outputter.word_buffer, end="", flush=True)
|
||||
current_outputter.column += len(current_outputter.word_buffer)
|
||||
current_outputter.word_buffer = ""
|
||||
elif chunk_type == "final-answer":
|
||||
print(content, end="", flush=True)
|
||||
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ def query(url, flow_id, system, prompt, streaming=True, token=None):
|
|||
if streaming:
|
||||
# Stream output to stdout without newline
|
||||
for chunk in response:
|
||||
print(chunk.content, end="", flush=True)
|
||||
print(chunk, end="", flush=True)
|
||||
# Add final newline after streaming
|
||||
print()
|
||||
else:
|
||||
|
|
|
|||
|
|
@ -31,36 +31,16 @@ def query(url, flow_id, template_id, variables, streaming=True, token=None):
|
|||
)
|
||||
|
||||
if streaming:
|
||||
full_response = {"text": "", "object": ""}
|
||||
|
||||
# Stream output
|
||||
# Stream output (prompt yields strings directly)
|
||||
for chunk in response:
|
||||
content = chunk.content
|
||||
if content:
|
||||
print(content, end="", flush=True)
|
||||
full_response["text"] += content
|
||||
|
||||
# Check if this is an object response (JSON)
|
||||
if hasattr(chunk, 'object') and chunk.object:
|
||||
full_response["object"] = chunk.object
|
||||
|
||||
# Handle final output
|
||||
if full_response["text"]:
|
||||
# Add final newline after streaming text
|
||||
print()
|
||||
elif full_response["object"]:
|
||||
# Print JSON object (pretty-printed)
|
||||
print(json.dumps(json.loads(full_response["object"]), indent=4))
|
||||
if chunk:
|
||||
print(chunk, end="", flush=True)
|
||||
# Add final newline after streaming
|
||||
print()
|
||||
|
||||
else:
|
||||
# Non-streaming: handle response
|
||||
if isinstance(response, str):
|
||||
print(response)
|
||||
elif isinstance(response, dict):
|
||||
if "text" in response:
|
||||
print(response["text"])
|
||||
elif "object" in response:
|
||||
print(json.dumps(json.loads(response["object"]), indent=4))
|
||||
# Non-streaming: print complete response
|
||||
print(response)
|
||||
|
||||
finally:
|
||||
# Clean up socket connection
|
||||
|
|
|
|||
|
|
@ -171,14 +171,12 @@ def check_api_gateway(url: str, timeout: int, token: Optional[str] = None) -> Tu
|
|||
|
||||
|
||||
def check_processors(url: str, min_processors: int, timeout: int, token: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Check if processors are running via show-processor-state."""
|
||||
"""Check if processors are running via metrics endpoint."""
|
||||
try:
|
||||
api = Api(url, token=token)
|
||||
|
||||
# Use the metrics endpoint similar to show_processor_state
|
||||
# This is a simplified check - we'll use requests to check the metrics
|
||||
metrics_url = url.replace('http://', '').replace('https://', '').split('/')[0]
|
||||
metrics_url = f"http://{metrics_url}:8088/api/metrics/query?query=processor_info"
|
||||
# Construct metrics URL from API URL
|
||||
if not url.endswith('/'):
|
||||
url += '/'
|
||||
metrics_url = f"{url}api/metrics/query?query=processor_info"
|
||||
|
||||
resp = requests.get(metrics_url, timeout=timeout)
|
||||
if resp.status_code == 200:
|
||||
|
|
@ -199,7 +197,7 @@ def check_processors(url: str, min_processors: int, timeout: int, token: Optiona
|
|||
def check_flow_classes(url: str, timeout: int, token: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Check if flow classes are loaded."""
|
||||
try:
|
||||
api = Api(url, token=token)
|
||||
api = Api(url, token=token, timeout=timeout)
|
||||
flow_api = api.flow()
|
||||
|
||||
classes = flow_api.list_classes()
|
||||
|
|
@ -216,7 +214,7 @@ def check_flow_classes(url: str, timeout: int, token: Optional[str] = None) -> T
|
|||
def check_flows(url: str, timeout: int, token: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Check if flow manager is responding."""
|
||||
try:
|
||||
api = Api(url, token=token)
|
||||
api = Api(url, token=token, timeout=timeout)
|
||||
flow_api = api.flow()
|
||||
|
||||
flows = flow_api.list()
|
||||
|
|
@ -231,12 +229,22 @@ def check_flows(url: str, timeout: int, token: Optional[str] = None) -> Tuple[bo
|
|||
def check_prompts(url: str, timeout: int, token: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Check if prompts are loaded."""
|
||||
try:
|
||||
api = Api(url, token=token)
|
||||
api = Api(url, token=token, timeout=timeout)
|
||||
config = api.config()
|
||||
|
||||
prompts = api.prompts().list()
|
||||
# Import ConfigKey here to avoid top-level import issues
|
||||
from trustgraph.api.types import ConfigKey
|
||||
import json
|
||||
|
||||
if prompts and len(prompts) > 0:
|
||||
return True, f"Found {len(prompts)} prompt(s)"
|
||||
# Get the template-index which lists all prompts
|
||||
values = config.get([
|
||||
ConfigKey(type="prompt", key="template-index")
|
||||
])
|
||||
|
||||
ix = json.loads(values[0].value)
|
||||
|
||||
if ix and len(ix) > 0:
|
||||
return True, f"Found {len(ix)} prompt(s)"
|
||||
else:
|
||||
return False, "No prompts found"
|
||||
|
||||
|
|
@ -247,7 +255,7 @@ def check_prompts(url: str, timeout: int, token: Optional[str] = None) -> Tuple[
|
|||
def check_library(url: str, timeout: int, token: Optional[str] = None) -> Tuple[bool, str]:
|
||||
"""Check if library service is responding."""
|
||||
try:
|
||||
api = Api(url, token=token)
|
||||
api = Api(url, token=token, timeout=timeout)
|
||||
library_api = api.library()
|
||||
|
||||
# Try to get documents (with default user)
|
||||
|
|
@ -365,10 +373,10 @@ def main():
|
|||
print("=" * 60)
|
||||
print("TrustGraph System Status Verification")
|
||||
print("=" * 60)
|
||||
print(f"Global timeout: {args.global_timeout}s")
|
||||
print(f"Check timeout: {args.check_timeout}s")
|
||||
print(f"Retry delay: {args.retry_delay}s")
|
||||
print("=" * 60)
|
||||
# print(f"Global timeout: {args.global_timeout}s")
|
||||
# print(f"Check timeout: {args.check_timeout}s")
|
||||
# print(f"Retry delay: {args.retry_delay}s")
|
||||
# print("=" * 60)
|
||||
print()
|
||||
|
||||
# Phase 1: Infrastructure
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue