当前位置: 首页 > news >正文

venv uvicorn python 虚拟服务器外网无法访问

python -m venv .venv
source ./.venv/bin/activate
pip install -r requirements.txt
./run.sh

source ./.venv/bin/activate
uvicorn main:app --reload

虚拟web服务器外网访问控制台启动命令用以下代码启动
uvicorn main:app --host 0.0.0.0 --port 8501 --reload
启动到后台

nohup uvicorn main:app --host 0.0.0.0 --port 8501 --reload &

main.py

import xmltodict
import anthropic
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse, StreamingResponsefrom prompt_constructors import *from claude import ClaudeLlm  # claude.py から ClaudeLlm クラスをインポート
import os
import base64app = FastAPI()
api_key = "your key"
client = anthropic.Anthropic(api_key=api_key)# @app.middleware("http")
# async def log_body(request: Request, call_next):
#     body = await request.body()
#     print("HTTP REQUEST BODY: ", body)
#     return await call_next(request)# The anthropic API does not have a method to list models, so we are hard coding the models here
@app.get("/models")
async def list_models() -> JSONResponse:return JSONResponse(content={"data": [{"id": "claude-3-sonnet-20240229", "name": "Anthropic Claude 3 Sonnet"},{"id": "anthropic.claude-3-sonnet-20240229-v1:0", "name": "AWS Bedrock Anthropic Claude 3 Sonnet"},{"id": "claude-3-opus-20240229", "name": "Anthropic Claude 3 Opus"},]})def map_req(req: dict) -> dict:messages = req["messages"]mapped_req = {"messages": messages,}return mapped_req@app.post("/chat/completions")
async def completions(request: Request) -> StreamingResponse:data = await request.body()req = map_req(json.loads(data))messages=req["messages"]claude = ClaudeLlm(client, messages)resp = claude.generate_responses("claude-3-opus-20240229")return StreamingResponse(resp, media_type="application/x-ndjson")def map_resp(response) -> str:data = json.loads(response)finish_reason = Noneparsed_tool_calls = []for message in data["content"]:if 'text' in message.keys() and message["text"].startswith("<function_calls>"):xml_tool_calls = message["text"] + "</function_calls>"tool_calls = xmltodict.parse(xml_tool_calls)if tool_calls["function_calls"]["invoke"] is list:for key, value in tool_calls["function_calls"]["invoke"].items():parsed_tool_calls.append({"index": 0,"id": value['tool_name'],"type": "function","function": {"name": value["tool_name"],"arguments": str(value["parameters"]),},})else:parsed_tool_calls.append({"index": 0,"id": tool_calls["function_calls"]["invoke"]["tool_name"],"type": "function","function": {"name": tool_calls["function_calls"]["invoke"]["tool_name"],"arguments": json.dumps(tool_calls["function_calls"]["invoke"]["parameters"]),},})message.pop("text", None)message.pop("type", None)message["tool_calls"] = parsed_tool_callsmessage["content"] = Nonemessage["role"] = "assistant"if 'text' in message.keys():message["content"] = message["text"]if "stop_reason" in data.keys() and data["stop_reason"] == "stop_sequence":finish_reason = "tool_calls"if "stop_reason" in data.keys() and data["stop_reason"] == "end_turn":finish_reason = "stop"translated = {"id": data["id"],"object": "chat.completion.chunk","created": 0,"model": data["model"],"system_fingerprint": "TEMP","choices": [{"index": 0,"delta": data["content"][0],},],"finish_reason": finish_reason,}return json.dumps(translated)

claude.py

import pandas as pd
from forex_python.converter import CurrencyRates
import time
import anthropic
from anthropic.types.message_stream_event import MessageStartEvent, MessageDeltaEvent, ContentBlockDeltaEventclass ClaudeLlm:def __init__(self, client, user_input):self.client = clientself.user_input = user_inputself.cost_df = pd.DataFrame(columns=["Model", "Input Tokens", "Output Tokens", "Input Cost", "Output Cost", "Total Cost", "総計_円換算", "処理時間"])def convert_usd_to_jpy(self, usd_amount):c = CurrencyRates()try:rate = c.get_rate('USD', 'JPY')jpy_rate = (f"為替レート: {rate:.2f}円/ドル")return usd_amount * rate, jpy_rateexcept Exception as e:rate = 150  # フォールバックとして使用する為替レートjpy_rate = (f"為替レート: {rate:.2f}円/ドル想定")return usd_amount * rate, jpy_ratedef calculate_cost(self, model, input_tokens, output_tokens):token_costs = {"claude-3-opus-20240229": {"input": 0.000015, "output": 0.000075},"claude-3-sonnet-20240229": {"input": 0.000003, "output": 0.000015},}model_costs = token_costs[model]input_cost = input_tokens * model_costs["input"]output_cost = output_tokens * model_costs["output"]total_cost = input_cost + output_costreturn input_cost, output_cost, total_costdef generate_responses(self, model_name):start_time = time.time()input_tokens = 0output_tokens = 0try:with self.client.messages.stream(model=model_name,max_tokens=1024,messages=[{"role": "user", "content": self.user_input}],) as stream:for event in stream:if isinstance(event, MessageStartEvent):usage_info = event.message.usageinput_tokens = usage_info.input_tokenselif isinstance(event, MessageDeltaEvent):output_tokens = event.usage.output_tokenselif isinstance(event, ContentBlockDeltaEvent):return_text = event.delta.textyield return_textexcept anthropic.APIStatusError as e:error_response = e.response.json()if 'error' in error_response and error_response['error'].get('type') == 'overloaded_error':return "APIが過負荷状態です。しばらくしてから再試行してください。"input_cost, output_cost, total_cost = self.calculate_cost(model_name, input_tokens, output_tokens)jpy_total_cost, _ = self.convert_usd_to_jpy(total_cost)end_time = time.time()response_time = end_time - start_timenew_row = {"Model": model_name,"Input Tokens": input_tokens,"Output Tokens": output_tokens,"Input Cost": f"${input_cost:.6f}","Output Cost": f"${output_cost:.6f}","Total Cost": f"${total_cost:.6f}","総計_円換算": f"¥{jpy_total_cost:.3f}","処理時間": f"{response_time:.2f}秒"}new_row_df = pd.DataFrame([new_row])self.cost_df = pd.concat([self.cost_df, new_row_df], ignore_index=True)return self.cost_df

curl -H “Content-Type: application/json” -X POST -d ‘{“user_id”: “123”, “coin”:100, “success”:1, “msg”:“OK!” }’ “http://192.168.0.1:8001/test”

netstat -ntulp
lsof -i:8000

相关文章:

venv uvicorn python 虚拟服务器外网无法访问

python -m venv .venv source ./.venv/bin/activate pip install -r requirements.txt ./run.sh source ./.venv/bin/activate uvicorn main:app --reload 虚拟web服务器外网访问控制台启动命令用以下代码启动 uvicorn main:app --host 0.0.0.0 --port 8501 --reload 启动到后…...

一款博客网站源码

一款博客网站源码 源码软件库 为大家内置了主题 清爽又强大真正的永久可用的一条源码&#xff0c;该版本为整合版本&#xff0c;内置了Joe主题&#xff0c;搭建后直接启用即可~ 安装环境要求&#xff1a; PHP 7.2 以上 MySQL, PostgreSQL, SQLite 任意一种数据库支持&#xff…...

Mr-Robot1靶场练习靶场推荐小白入门练习靶场渗透靶场bp爆破wordpress

下载链接&#xff1a; Mr-Robot: 1 ~ VulnHub 安装&#xff1a; 打开vxbox&#xff0c;菜单栏----管理----导入虚拟电脑 选择下载完的ova文件&#xff0c;并修改想要保存的位置&#xff08;也可以保持默认位置&#xff09; 导入完成后可以根据自己的情况去配置网络链接方式 完成…...

数据仓库的设计开发应用(三)

目录 五、数据仓库的实施&#xff08;一&#xff09;数据仓库的创建&#xff08;二&#xff09;数据抽取转换加载 六、数据仓库系统的开发&#xff08;一&#xff09;开发任务&#xff08;二&#xff09;开发方法&#xff08;三&#xff09;系统测试 七、数据仓库系统的应用&am…...

【04】WebAPI

WebAPI 和标准库不同,WebAPI 是浏览器提供的一套 API,用于操作浏览器窗口和界面 WebAPI 中包含两个部分: BOM:Browser Object Model,浏览器模型,提供和浏览器相关的操作DOM:Document Object Model,文档模型,提供和页面相关的操作BOM BOM 提供了一系列的对象和函数,…...

数据预处理在数据挖掘中的重要性

数据挖掘作为从大量数据中提取有用信息和知识的过程&#xff0c;其结果的准确性和可靠性直接受到数据质量的影响。因此&#xff0c;数据预处理在数据挖掘中扮演着至关重要的角色。让我们探讨数据质量对数据挖掘结果的影响&#xff0c;并介绍常见的数据预处理方法以及它们如何提…...

Java并发编程—JUC线程池架构

Java并发编程&#xff08;JUC&#xff0c;Java Utilities Concurrency&#xff09;中的线程池架构是Java提供的一种用于管理和复用线程的机制。线程池的主要目标是减少线程创建和销毁的开销&#xff0c;提高系统的响应速度&#xff0c;并通过合理的线程管理和资源分配&#xff…...

Android input输入子系统

一.Android input输入子系统简介 Input系统是Android系统中负责处理用户输入操作的核心组件&#xff0c;它负责从各种输入设备&#xff08;如屏幕、键盘、鼠标等&#xff09;获取原始的输入事件&#xff08;如按键、触摸、滑动等&#xff09;&#xff0c;并将其转换为Android应…...

如何在webapp中于动发布一个应用

目录 第一步&#xff1a;在webapp文件夹内自定义文件夹第二步&#xff1a;生成一个文本&#xff0c;并把后缀改为 .html第三步&#xff1a;进入bin文件夹打开服务第四步&#xff1a;打开方式选择java第六步&#xff1a;输入你想输出的东西第七步&#xff1a;双击运行即可 第一步…...

部署一个本地的ChatGPT(Ollama)

一 下载Ollama Ollama下载地址&#xff1a;https://ollama.com/download 下载完后 二 安装运行 双击下载好的OllamaSetup.exe开发 安装Ollama: 安装完成后&#xff0c;多了一个Ollama的菜单如下图 &#xff1a; Ollama安装好默认是配置开机运行&#xff0c;如果没有运行可以在…...

Vue 3中的reactive:响应式状态的全面管理

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

【网络】详解HTTPS及探究加密过程

目录 一、什么是HTTPS1、加密解密是什么2、为什么要加密3、常见的加密方式1、对称加密2、非对称加密 二、探究HTTPS如何实现加密1、方案一----只使用对称加密2、方案二----只使用非对称加密3、方案三----双方都使用非对称加密4、方案四----非对称加密 对称加密5、中间人攻击6、…...

【C语言】字符与字符串---从入门到入土级详解

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组&#xff08;串&#xff09;简介 1.ASCII 2.定义&#xff0c;初始化&#xff0c;使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…...

Github Copilot 工具,无需账号,一键激活

① 无需账号&#xff0c;100%认证成功&#xff01;0风险&#xff0c;可联网可更新&#xff0c;&#xff0c;支持copilot版本升级&#xff0c;支持chat ② 支持windows、mac、linux系统等设备 ③一号通用&#xff0c;支持所有IDE(AppCode,CLion,DataGrip,GoLand,IntelliJ IDEA …...

node: -max-old-space-size=xxx is not allowed in NODE_OPTIONS

问题描述 在启动node项目时&#xff0c;出现了OOM参照网上的处理方案&#xff0c;设置了环境变量&#xff1a; export NODE_OPTIONS"–max-old-space-size8192"当再次通过npm run docs:dev运行node项目的时候出现了如下错误&#xff1a; node: -max-old-space-siz…...

k8s编排系统

Kubernetes&#xff08;简称K8s&#xff09;是一个开源的容器编排系统&#xff0c;由Google基于其内部的Borg项目开发&#xff0c;并于2014年正式对外发布。目前&#xff0c;Kubernetes已成为云原生计算基金会&#xff08;Cloud Native Computing Foundation, CNCF&#xff09;…...

samba服务器的配置

需求&#xff1a;在Linux上搭建一个文件共享服务&#xff0c;创建不同的账号给予不同的权限&#xff0c;在windows可以直接访问该共享目录 介绍 Samba 是一个强大的工具&#xff0c;使得不同操作系统之间可以无缝地共享文件和资源&#xff0c;促进了跨平台环境下的协作和通信…...

H12-821_279

279.第三类LSA的Link ID是: A.所描述的ABR的Router ID B.所在网段上DR的端口IP地址 C.所描述的目的网段 D.生成这条LSA的路由器的Router ID 答案&#xff1a;C 注释&#xff1a; OSPF的LSA可以单独描述网络信息、拓扑信息&#xff0c;也可以同时描述网络信息和拓扑信息。 LSA3…...

Stable Diffusion科普文章【附升级gpt4.0秘笈】

随着人工智能技术的飞速发展&#xff0c;我们越来越多地看到计算机生成的艺术作品出现在我们的生活中。其中&#xff0c;Stable Diffusion作为一种创新的图像生成技术&#xff0c;正在引领一场艺术创作的革命。本文将为您科普Stable Diffusion的相关知识&#xff0c;带您走进这…...

Lua 如何在Lua中调用C/C++函数

Lua调用C函数有两种方式 程序主体在C中运行&#xff0c;C函数注册到Lua中。C调用Lua&#xff0c;Lua调用C注册的函数&#xff0c;C或者Lua得到函数的执行结果。程序主体在Lua中运行&#xff0c;C函数作为库函数供Lua使用。 C的代码如下 如何在Lua脚本中调用这个C语言函数(ad…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...