untitled-2604new-file-9513.tsx24 matches
1// Creado por Alfonso Boldo
2// Sistema Completo de Prueba de APIs de LLMs para ValTown
3// Fecha: 05 de mayo de 2025
426}
2728// Para solicitudes POST, procesar la llamada a la API
29if (req.method === 'POST') {
30try {
57
58// Extraer parámetros
59const { provider, apiKey, prompt, model, temperature, maxTokens } = body || {};
60
61// Validar parámetros requeridos
62if (!provider || !apiKey || !prompt) {
63return new Response(
64JSON.stringify({
65error: 'Se requieren los parámetros: provider, apiKey y prompt'
66}),
67{ status: 400, headers }
74switch (provider.toLowerCase()) {
75case 'openai':
76result = await callOpenAI(apiKey, prompt, model || 'gpt-4o', temperature || 0.7, maxTokens || 1000);
77break;
78case 'anthropic':
79result = await callClaude(apiKey, prompt, model || 'claude-3-5-sonnet-20240521', temperature || 0.7, maxTokens || 1000);
80break;
81default:
111}
112113// Función para llamar a la API de OpenAI
114async function callOpenAI(apiKey, prompt, model, temperature, maxTokens) {
115const url = 'https://api.openai.com/v1/chat/completions';
116
117console.log(`Llamando a OpenAI con modelo: ${model}`);
122headers: {
123'Content-Type': 'application/json',
124'Authorization': `Bearer ${apiKey}`
125},
126body: JSON.stringify({
170}
171172// Función para llamar a la API de Claude (Anthropic)
173async function callClaude(apiKey, prompt, model, temperature, maxTokens) {
174const url = 'https://api.anthropic.com/v1/messages';
175
176console.log(`Llamando a Claude con modelo: ${model}`);
181headers: {
182'Content-Type': 'application/json',
183'x-api-key': apiKey,
184'anthropic-version': '2023-06-01'
185},
244<meta charset="UTF-8">
245<meta name="viewport" content="width=device-width, initial-scale=1.0">
246<title>Probador de APIs de LLMs</title>
247<style>
248body {
329</head>
330<body>
331<h1>Probador de APIs de LLMs</h1>
332<p>Esta herramienta te permite probar diferentes APIs de modelos de lenguaje como OpenAI (ChatGPT) y Claude (Anthropic).</p>
333
334<div class="container">
342
343<div class="form-group">
344<label for="apiKey">API Key:</label>
345<input type="password" id="apiKey" placeholder="Ingresa tu API key aquÃ">
346</div>
347
465submitBtn.addEventListener('click', async function() {
466const provider = document.getElementById('provider').value;
467const apiKey = document.getElementById('apiKey').value;
468const model = document.getElementById('model').value;
469const temperature = parseFloat(document.getElementById('temperature').value);
472
473// Validar campos
474if (!apiKey || !prompt) {
475alert('Por favor completa todos los campos requeridos.');
476return;
482rawResult.textContent = 'Cargando...';
483
484// Obtener la URL actual para la API
485// Como ahora todo está en un solo endpoint, simplemente usamos la misma URL
486const endpointUrl = window.location.href;
492const requestBody = {
493provider,
494apiKey,
495prompt,
496model,
morningmailmain.tsx1 match
19async function wikitext(): string {
20const randomArticle = await fetch(
21"https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&exintro&explaintext&redirects=1&generator=random&formatversion=2&grnnamespace=0&grnlimit=3",
22);
23const articleJson = await randomArticle.json();
81async function getDiscussionPosts(discussionId: string): Promise<PostT[]> {
82// Used to get the list of post id's for the discussion.
83const discussionRes = await fetch(`${server}/api/discussions/${discussionId}`);
84const discussionResJson = await discussionRes.json();
859394await Promise.all(chunks.map(async (c: string[]) => {
95const postRes = await fetch(`${server}/api/posts?filter[id]=${c.join(",")}`);
96const postJson = await postRes.json();
97
TownieuseAuth.tsx11 matches
34const TOKEN_KEY = "bearer";
5const ANTHROPIC_KEY = "anthropic_api_key";
67export function useAuth() {
8const [token, setToken, removeToken] = useLocalStorage(TOKEN_KEY, "");
9const [anthropicApiKey, setAnthropicApiKey, removeAnthropicApiKey] = useLocalStorage(ANTHROPIC_KEY, "");
10const [error, setError] = useState(null);
1112const isAuthenticated = !!token;
1314const authenticate = async (valTownAPIKey: string, anthropicKey: string) => {
15// replace all this with oauth when it's ready
16try {
17const res = await fetch("/api/user", {
18headers: {
19"Authorization": "Bearer " + valTownAPIKey,
20},
21});
25setError(data.error);
26removeToken();
27removeAnthropicApiKey();
28return;
29}
30setError(null);
31setToken(valTownAPIKey);
32setAnthropicApiKey(anthropicKey);
33} catch (e) {
34console.error(e);
35setError(e.error);
36removeToken();
37removeAnthropicApiKey();
38}
39};
41const logOut = () => {
42removeToken();
43removeAnthropicApiKey();
44};
4550logOut,
51token,
52anthropicApiKey,
53};
54}
helloooooooindex.ts4 matches
87});
8889// API endpoint to get all posts
90app.get('/api/posts', async (c) => {
91const posts = await getAllPosts();
92return c.json(posts);
93});
9495// API endpoint to get a single post
96app.get('/api/posts/:slug', async (c) => {
97const slug = c.req.param('slug');
98const post = await getPost(slug);
helloooooooindex.html2 matches
116posts = window.INITIAL_DATA.posts;
117} else {
118const response = await fetch('/api/posts');
119posts = await response.json();
120}
156
157try {
158const response = await fetch(`/api/posts/${params.slug}`);
159
160if (!response.ok) {
sqliteExplorerApp2README.md1 match
13## Authentication
1415Login to your SQLite Explorer with [password authentication](https://www.val.town/v/pomdtr/password_auth) with your [Val Town API Token](https://www.val.town/settings/api) as the password.
1617## Todos / Plans
sqliteExplorerApp2main.tsx2 matches
27<head>
28<title>SQLite Explorer</title>
29<link rel="preconnect" href="https://fonts.googleapis.com" />
3031<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
32<link
33href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@300..700&family=Source+Sans+3:ital,wght@0,200..900;1,200..900&display=swap"
34rel="stylesheet"
35/>
3date: 2023-12-10
4author: Alex Johnson
5summary: Exploring emerging trends and technologies shaping the future of blogging
6---
7